Browse Source

import ExtJS 3.2.0.

Natenom/support-murmur-13-1446181288462
Michael Ziegler 15 years ago
parent
commit
3718532e44
  1. 3632
      htdocs/ext-3.2.0/adapter/ext/ext-base-debug.js
  2. 7
      htdocs/ext-3.2.0/adapter/ext/ext-base.js
  3. 2446
      htdocs/ext-3.2.0/adapter/jquery/ext-jquery-adapter-debug.js
  4. 7
      htdocs/ext-3.2.0/adapter/jquery/ext-jquery-adapter.js
  5. 2475
      htdocs/ext-3.2.0/adapter/prototype/ext-prototype-adapter-debug.js
  6. 7
      htdocs/ext-3.2.0/adapter/prototype/ext-prototype-adapter.js
  7. 2245
      htdocs/ext-3.2.0/adapter/yui/ext-yui-adapter-debug.js
  8. 7
      htdocs/ext-3.2.0/adapter/yui/ext-yui-adapter.js
  9. 73560
      htdocs/ext-3.2.0/ext-all-debug.js
  10. 19
      htdocs/ext-3.2.0/ext-all.js
  11. 674
      htdocs/ext-3.2.0/gpl-3.0.txt
  12. 42
      htdocs/ext-3.2.0/license.txt
  13. 13565
      htdocs/ext-3.2.0/pkgs/cmp-foundation-debug.js
  14. 7
      htdocs/ext-3.2.0/pkgs/cmp-foundation.js
  15. 4718
      htdocs/ext-3.2.0/pkgs/data-foundation-debug.js
  16. 7
      htdocs/ext-3.2.0/pkgs/data-foundation.js
  17. 259
      htdocs/ext-3.2.0/pkgs/data-grouping-debug.js
  18. 7
      htdocs/ext-3.2.0/pkgs/data-grouping.js
  19. 641
      htdocs/ext-3.2.0/pkgs/data-json-debug.js
  20. 7
      htdocs/ext-3.2.0/pkgs/data-json.js
  21. 1488
      htdocs/ext-3.2.0/pkgs/data-list-views-debug.js
  22. 7
      htdocs/ext-3.2.0/pkgs/data-list-views.js
  23. 475
      htdocs/ext-3.2.0/pkgs/data-xml-debug.js
  24. 7
      htdocs/ext-3.2.0/pkgs/data-xml.js
  25. 1160
      htdocs/ext-3.2.0/pkgs/direct-debug.js
  26. 7
      htdocs/ext-3.2.0/pkgs/direct.js
  27. 4771
      htdocs/ext-3.2.0/pkgs/ext-dd-debug.js
  28. 15
      htdocs/ext-3.2.0/pkgs/ext-dd.js
  29. 14466
      htdocs/ext-3.2.0/pkgs/ext-foundation-debug.js
  30. 7
      htdocs/ext-3.2.0/pkgs/ext-foundation.js
  31. 1124
      htdocs/ext-3.2.0/pkgs/pkg-buttons-debug.js
  32. 7
      htdocs/ext-3.2.0/pkgs/pkg-buttons.js
  33. 1922
      htdocs/ext-3.2.0/pkgs/pkg-charts-debug.js
  34. 10
      htdocs/ext-3.2.0/pkgs/pkg-charts.js
  35. 9070
      htdocs/ext-3.2.0/pkgs/pkg-forms-debug.js
  36. 7
      htdocs/ext-3.2.0/pkgs/pkg-forms.js
  37. 621
      htdocs/ext-3.2.0/pkgs/pkg-grid-editor-debug.js
  38. 7
      htdocs/ext-3.2.0/pkgs/pkg-grid-editor.js
  39. 5266
      htdocs/ext-3.2.0/pkgs/pkg-grid-foundation-debug.js
  40. 7
      htdocs/ext-3.2.0/pkgs/pkg-grid-foundation.js
  41. 577
      htdocs/ext-3.2.0/pkgs/pkg-grid-grouping-debug.js
  42. 7
      htdocs/ext-3.2.0/pkgs/pkg-grid-grouping.js
  43. 463
      htdocs/ext-3.2.0/pkgs/pkg-grid-property-debug.js
  44. 7
      htdocs/ext-3.2.0/pkgs/pkg-grid-property.js
  45. 216
      htdocs/ext-3.2.0/pkgs/pkg-history-debug.js
  46. 7
      htdocs/ext-3.2.0/pkgs/pkg-history.js
  47. 1688
      htdocs/ext-3.2.0/pkgs/pkg-menu-debug.js
  48. 7
      htdocs/ext-3.2.0/pkgs/pkg-menu.js
  49. 1131
      htdocs/ext-3.2.0/pkgs/pkg-tabs-debug.js
  50. 7
      htdocs/ext-3.2.0/pkgs/pkg-tabs.js
  51. 1124
      htdocs/ext-3.2.0/pkgs/pkg-tips-debug.js
  52. 7
      htdocs/ext-3.2.0/pkgs/pkg-tips.js
  53. 1213
      htdocs/ext-3.2.0/pkgs/pkg-toolbars-debug.js
  54. 7
      htdocs/ext-3.2.0/pkgs/pkg-toolbars.js
  55. 4708
      htdocs/ext-3.2.0/pkgs/pkg-tree-debug.js
  56. 7
      htdocs/ext-3.2.0/pkgs/pkg-tree.js
  57. 770
      htdocs/ext-3.2.0/pkgs/resizable-debug.js
  58. 7
      htdocs/ext-3.2.0/pkgs/resizable.js
  59. 276
      htdocs/ext-3.2.0/pkgs/state-debug.js
  60. 7
      htdocs/ext-3.2.0/pkgs/state.js
  61. 2010
      htdocs/ext-3.2.0/pkgs/window-debug.js
  62. 7
      htdocs/ext-3.2.0/pkgs/window.js
  63. 6
      htdocs/ext-3.2.0/resources/css/README.txt
  64. 43
      htdocs/ext-3.2.0/resources/css/debug.css
  65. 5154
      htdocs/ext-3.2.0/resources/css/ext-all-notheme.css
  66. 6793
      htdocs/ext-3.2.0/resources/css/ext-all.css
  67. 7
      htdocs/ext-3.2.0/resources/css/reset-min.css
  68. 54
      htdocs/ext-3.2.0/resources/css/structure/borders.css
  69. 80
      htdocs/ext-3.2.0/resources/css/structure/box.css
  70. 445
      htdocs/ext-3.2.0/resources/css/structure/button.css
  71. 45
      htdocs/ext-3.2.0/resources/css/structure/combo.css
  72. 331
      htdocs/ext-3.2.0/resources/css/structure/core.css
  73. 271
      htdocs/ext-3.2.0/resources/css/structure/date-picker.css
  74. 61
      htdocs/ext-3.2.0/resources/css/structure/dd.css
  75. 26
      htdocs/ext-3.2.0/resources/css/structure/debug.css
  76. 62
      htdocs/ext-3.2.0/resources/css/structure/dialog.css
  77. 92
      htdocs/ext-3.2.0/resources/css/structure/editor.css
  78. 567
      htdocs/ext-3.2.0/resources/css/structure/form.css
  79. 578
      htdocs/ext-3.2.0/resources/css/structure/grid.css
  80. 296
      htdocs/ext-3.2.0/resources/css/structure/layout.css
  81. 86
      htdocs/ext-3.2.0/resources/css/structure/list-view.css
  82. 238
      htdocs/ext-3.2.0/resources/css/structure/menu.css
  83. 130
      htdocs/ext-3.2.0/resources/css/structure/panel-reset.css
  84. 445
      htdocs/ext-3.2.0/resources/css/structure/panel.css
  85. 46
      htdocs/ext-3.2.0/resources/css/structure/progress.css
  86. 153
      htdocs/ext-3.2.0/resources/css/structure/qtips.css
  87. 7
      htdocs/ext-3.2.0/resources/css/structure/reset.css
  88. 149
      htdocs/ext-3.2.0/resources/css/structure/resizable.css
  89. 103
      htdocs/ext-3.2.0/resources/css/structure/slider.css
  90. 387
      htdocs/ext-3.2.0/resources/css/structure/tabs.css
  91. 246
      htdocs/ext-3.2.0/resources/css/structure/toolbar.css
  92. 218
      htdocs/ext-3.2.0/resources/css/structure/tree.css
  93. 222
      htdocs/ext-3.2.0/resources/css/structure/window.css
  94. 25
      htdocs/ext-3.2.0/resources/css/theme-access/borders.css
  95. 74
      htdocs/ext-3.2.0/resources/css/theme-access/box.css
  96. 136
      htdocs/ext-3.2.0/resources/css/theme-access/button.css
  97. 43
      htdocs/ext-3.2.0/resources/css/theme-access/combo.css
  98. 81
      htdocs/ext-3.2.0/resources/css/theme-access/core.css
  99. 145
      htdocs/ext-3.2.0/resources/css/theme-access/date-picker.css
  100. 29
      htdocs/ext-3.2.0/resources/css/theme-access/dd.css

3632
htdocs/ext-3.2.0/adapter/ext/ext-base-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/adapter/ext/ext-base.js
File diff suppressed because it is too large
View File

2446
htdocs/ext-3.2.0/adapter/jquery/ext-jquery-adapter-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/adapter/jquery/ext-jquery-adapter.js
File diff suppressed because it is too large
View File

2475
htdocs/ext-3.2.0/adapter/prototype/ext-prototype-adapter-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/adapter/prototype/ext-prototype-adapter.js
File diff suppressed because it is too large
View File

2245
htdocs/ext-3.2.0/adapter/yui/ext-yui-adapter-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/adapter/yui/ext-yui-adapter.js
File diff suppressed because it is too large
View File

73560
htdocs/ext-3.2.0/ext-all-debug.js
File diff suppressed because it is too large
View File

19
htdocs/ext-3.2.0/ext-all.js
File diff suppressed because it is too large
View File

674
htdocs/ext-3.2.0/gpl-3.0.txt

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

42
htdocs/ext-3.2.0/license.txt

@ -0,0 +1,42 @@
Ext JS - JavaScript Library
Copyright (c) 2006-2010, Ext JS, Inc.
All rights reserved.
licensing@extjs.com
http://extjs.com/license
Open Source License
------------------------------------------------------------------------------------------
Ext is licensed under the terms of the Open Source GPL 3.0 license.
http://www.gnu.org/licenses/gpl.html
There are several FLOSS exceptions available for use with this release for
open source applications that are distributed under a license other than the GPL.
* Open Source License Exception for Applications
http://extjs.com/products/floss-exception.php
* Open Source License Exception for Development
http://extjs.com/products/ux-exception.php
Commercial License
------------------------------------------------------------------------------------------
This is the appropriate option if you are creating proprietary applications and you are
not prepared to distribute and share the source code of your application under the
GPL v3 license. Please visit http://extjs.com/license for more details.
OEM / Reseller License
------------------------------------------------------------------------------------------
For more details, please visit: http://extjs.com/license.
--
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
General Public License for more details.

13565
htdocs/ext-3.2.0/pkgs/cmp-foundation-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/pkgs/cmp-foundation.js
File diff suppressed because it is too large
View File

4718
htdocs/ext-3.2.0/pkgs/data-foundation-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/pkgs/data-foundation.js
File diff suppressed because it is too large
View File

259
htdocs/ext-3.2.0/pkgs/data-grouping-debug.js

@ -0,0 +1,259 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
/**
* @class Ext.data.GroupingStore
* @extends Ext.data.Store
* A specialized store implementation that provides for grouping records by one of the available fields. This
* is usually used in conjunction with an {@link Ext.grid.GroupingView} to provide the data model for
* a grouped GridPanel.
*
* Internally, GroupingStore is simply a normal Store with multi sorting enabled from the start. The grouping field
* and direction are always injected as the first sorter pair. GroupingView picks up on the configured groupField and
* builds grid rows appropriately.
*
* @constructor
* Creates a new GroupingStore.
* @param {Object} config A config object containing the objects needed for the Store to access data,
* and read the data into Records.
* @xtype groupingstore
*/
Ext.data.GroupingStore = Ext.extend(Ext.data.Store, {
//inherit docs
constructor: function(config) {
config = config || {};
//We do some preprocessing here to massage the grouping + sorting options into a single
//multi sort array. If grouping and sorting options are both presented to the constructor,
//the sorters array consists of the grouping sorter object followed by the sorting sorter object
//see Ext.data.Store's sorting functions for details about how multi sorting works
this.hasMultiSort = true;
this.multiSortInfo = this.multiSortInfo || {sorters: []};
var sorters = this.multiSortInfo.sorters,
groupField = config.groupField || this.groupField,
sortInfo = config.sortInfo || this.sortInfo,
groupDir = config.groupDir || this.groupDir;
//add the grouping sorter object first
if(groupField){
sorters.push({
field : groupField,
direction: groupDir
});
}
//add the sorting sorter object if it is present
if (sortInfo) {
sorters.push(sortInfo);
}
Ext.data.GroupingStore.superclass.constructor.call(this, config);
this.addEvents(
/**
* @event groupchange
* Fired whenever a call to store.groupBy successfully changes the grouping on the store
* @param {Ext.data.GroupingStore} store The grouping store
* @param {String} groupField The field that the store is now grouped by
*/
'groupchange'
);
this.applyGroupField();
},
/**
* @cfg {String} groupField
* The field name by which to sort the store's data (defaults to '').
*/
/**
* @cfg {Boolean} remoteGroup
* True if the grouping should apply on the server side, false if it is local only (defaults to false). If the
* grouping is local, it can be applied immediately to the data. If it is remote, then it will simply act as a
* helper, automatically sending the grouping field name as the 'groupBy' param with each XHR call.
*/
remoteGroup : false,
/**
* @cfg {Boolean} groupOnSort
* True to sort the data on the grouping field when a grouping operation occurs, false to sort based on the
* existing sort info (defaults to false).
*/
groupOnSort:false,
groupDir : 'ASC',
/**
* Clears any existing grouping and refreshes the data using the default sort.
*/
clearGrouping : function(){
this.groupField = false;
if(this.remoteGroup){
if(this.baseParams){
delete this.baseParams.groupBy;
delete this.baseParams.groupDir;
}
var lo = this.lastOptions;
if(lo && lo.params){
delete lo.params.groupBy;
delete lo.params.groupDir;
}
this.reload();
}else{
this.sort();
this.fireEvent('datachanged', this);
}
},
/**
* Groups the data by the specified field.
* @param {String} field The field name by which to sort the store's data
* @param {Boolean} forceRegroup (optional) True to force the group to be refreshed even if the field passed
* in is the same as the current grouping field, false to skip grouping on the same field (defaults to false)
*/
groupBy : function(field, forceRegroup, direction) {
direction = direction ? (String(direction).toUpperCase() == 'DESC' ? 'DESC' : 'ASC') : this.groupDir;
if (this.groupField == field && this.groupDir == direction && !forceRegroup) {
return; // already grouped by this field
}
//check the contents of the first sorter. If the field matches the CURRENT groupField (before it is set to the new one),
//remove the sorter as it is actually the grouper. The new grouper is added back in by this.sort
sorters = this.multiSortInfo.sorters;
if (sorters.length > 0 && sorters[0].field == this.groupField) {
sorters.shift();
}
this.groupField = field;
this.groupDir = direction;
this.applyGroupField();
var fireGroupEvent = function() {
this.fireEvent('groupchange', this, this.getGroupState());
};
if (this.groupOnSort) {
this.sort(field, direction);
fireGroupEvent.call(this);
return;
}
if (this.remoteGroup) {
this.on('load', fireGroupEvent, this, {single: true});
this.reload();
} else {
this.sort(sorters);
fireGroupEvent.call(this);
}
},
//GroupingStore always uses multisorting so we intercept calls to sort here to make sure that our grouping sorter object
//is always injected first.
sort : function(fieldName, dir) {
if (this.remoteSort) {
return Ext.data.GroupingStore.superclass.sort.call(this, fieldName, dir);
}
var sorters = [];
//cater for any existing valid arguments to this.sort, massage them into an array of sorter objects
if (Ext.isArray(arguments[0])) {
sorters = arguments[0];
} else if (fieldName == undefined) {
//we preserve the existing sortInfo here because this.sort is called after
//clearGrouping and there may be existing sorting
sorters = [this.sortInfo];
} else {
//TODO: this is lifted straight from Ext.data.Store's singleSort function. It should instead be
//refactored into a common method if possible
var field = this.fields.get(fieldName);
if (!field) return false;
var name = field.name,
sortInfo = this.sortInfo || null,
sortToggle = this.sortToggle ? this.sortToggle[name] : null;
if (!dir) {
if (sortInfo && sortInfo.field == name) { // toggle sort dir
dir = (this.sortToggle[name] || 'ASC').toggle('ASC', 'DESC');
} else {
dir = field.sortDir;
}
}
this.sortToggle[name] = dir;
this.sortInfo = {field: name, direction: dir};
sorters = [this.sortInfo];
}
//add the grouping sorter object as the first multisort sorter
if (this.groupField) {
sorters.unshift({direction: this.groupDir, field: this.groupField});
}
return this.multiSort.call(this, sorters, dir);
},
/**
* @private
* Saves the current grouping field and direction to this.baseParams and this.lastOptions.params
* if we're using remote grouping. Does not actually perform any grouping - just stores values
*/
applyGroupField: function(){
if (this.remoteGroup) {
if(!this.baseParams){
this.baseParams = {};
}
Ext.apply(this.baseParams, {
groupBy : this.groupField,
groupDir: this.groupDir
});
var lo = this.lastOptions;
if (lo && lo.params) {
lo.params.groupDir = this.groupDir;
//this is deleted because of a bug reported at http://www.extjs.com/forum/showthread.php?t=82907
delete lo.params.groupBy;
}
}
},
/**
* @private
* TODO: This function is apparently never invoked anywhere in the framework. It has no documentation
* and should be considered for deletion
*/
applyGrouping : function(alwaysFireChange){
if(this.groupField !== false){
this.groupBy(this.groupField, true, this.groupDir);
return true;
}else{
if(alwaysFireChange === true){
this.fireEvent('datachanged', this);
}
return false;
}
},
/**
* @private
* Returns the grouping field that should be used. If groupOnSort is used this will be sortInfo's field,
* otherwise it will be this.groupField
* @return {String} The group field
*/
getGroupState : function(){
return this.groupOnSort && this.groupField !== false ?
(this.sortInfo ? this.sortInfo.field : undefined) : this.groupField;
}
});
Ext.reg('groupingstore', Ext.data.GroupingStore);

7
htdocs/ext-3.2.0/pkgs/data-grouping.js

@ -0,0 +1,7 @@
/*
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
Ext.data.GroupingStore=Ext.extend(Ext.data.Store,{constructor:function(d){d=d||{};this.hasMultiSort=true;this.multiSortInfo=this.multiSortInfo||{sorters:[]};var e=this.multiSortInfo.sorters,c=d.groupField||this.groupField,b=d.sortInfo||this.sortInfo,a=d.groupDir||this.groupDir;if(c){e.push({field:c,direction:a})}if(b){e.push(b)}Ext.data.GroupingStore.superclass.constructor.call(this,d);this.addEvents("groupchange");this.applyGroupField()},remoteGroup:false,groupOnSort:false,groupDir:"ASC",clearGrouping:function(){this.groupField=false;if(this.remoteGroup){if(this.baseParams){delete this.baseParams.groupBy;delete this.baseParams.groupDir}var a=this.lastOptions;if(a&&a.params){delete a.params.groupBy;delete a.params.groupDir}this.reload()}else{this.sort();this.fireEvent("datachanged",this)}},groupBy:function(d,a,c){c=c?(String(c).toUpperCase()=="DESC"?"DESC":"ASC"):this.groupDir;if(this.groupField==d&&this.groupDir==c&&!a){return}sorters=this.multiSortInfo.sorters;if(sorters.length>0&&sorters[0].field==this.groupField){sorters.shift()}this.groupField=d;this.groupDir=c;this.applyGroupField();var b=function(){this.fireEvent("groupchange",this,this.getGroupState())};if(this.groupOnSort){this.sort(d,c);b.call(this);return}if(this.remoteGroup){this.on("load",b,this,{single:true});this.reload()}else{this.sort(sorters);b.call(this)}},sort:function(g,c){if(this.remoteSort){return Ext.data.GroupingStore.superclass.sort.call(this,g,c)}var f=[];if(Ext.isArray(arguments[0])){f=arguments[0]}else{if(g==undefined){f=[this.sortInfo]}else{var e=this.fields.get(g);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};f=[this.sortInfo]}}if(this.groupField){f.unshift({direction:this.groupDir,field:this.groupField})}return this.multiSort.call(this,f,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);

641
htdocs/ext-3.2.0/pkgs/data-json-debug.js

@ -0,0 +1,641 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
/**
* @class Ext.data.JsonWriter
* @extends Ext.data.DataWriter
* DataWriter extension for writing an array or single {@link Ext.data.Record} object(s) in preparation for executing a remote CRUD action.
*/
Ext.data.JsonWriter = Ext.extend(Ext.data.DataWriter, {
/**
* @cfg {Boolean} encode <tt>true</tt> to {@link Ext.util.JSON#encode encode} the
* {@link Ext.data.DataWriter#toHash hashed data}. Defaults to <tt>true</tt>. When using
* {@link Ext.data.DirectProxy}, set this to <tt>false</tt> since Ext.Direct.JsonProvider will perform
* its own json-encoding. In addition, if you're using {@link Ext.data.HttpProxy}, setting to <tt>false</tt>
* will cause HttpProxy to transmit data using the <b>jsonData</b> configuration-params of {@link Ext.Ajax#request}
* instead of <b>params</b>. When using a {@link Ext.data.Store#restful} Store, some serverside frameworks are
* tuned to expect data through the jsonData mechanism. In those cases, one will want to set <b>encode: <tt>false</tt></b>, as in
* let the lower-level connection object (eg: Ext.Ajax) do the encoding.
*/
encode : true,
/**
* @cfg {Boolean} encodeDelete False to send only the id to the server on delete, true to encode it in an object
* literal, eg: <pre><code>
{id: 1}
* </code></pre> Defaults to <tt>false</tt>
*/
encodeDelete: false,
constructor : function(config){
Ext.data.JsonWriter.superclass.constructor.call(this, config);
},
/**
* Final action of a write event. Apply the written data-object to params.
* @param {Object} http params-object to write-to.
* @param {Object} baseParams as defined by {@link Ext.data.Store#baseParams}. The baseParms must be encoded by the extending class, eg: {@link Ext.data.JsonWriter}, {@link Ext.data.XmlWriter}.
* @param {Object/Object[]} data Data-object representing compiled Store-recordset.
*/
render : function(params, baseParams, data) {
if (this.encode === true) {
// Encode here now.
Ext.apply(params, baseParams);
params[this.meta.root] = Ext.encode(data);
} else {
// defer encoding for some other layer, probably in {@link Ext.Ajax#request}. Place everything into "jsonData" key.
var jdata = Ext.apply({}, baseParams);
jdata[this.meta.root] = data;
params.jsonData = jdata;
}
},
/**
* Implements abstract Ext.data.DataWriter#createRecord
* @protected
* @param {Ext.data.Record} rec
* @return {Object}
*/
createRecord : function(rec) {
return this.toHash(rec);
},
/**
* Implements abstract Ext.data.DataWriter#updateRecord
* @protected
* @param {Ext.data.Record} rec
* @return {Object}
*/
updateRecord : function(rec) {
return this.toHash(rec);
},
/**
* Implements abstract Ext.data.DataWriter#destroyRecord
* @protected
* @param {Ext.data.Record} rec
* @return {Object}
*/
destroyRecord : function(rec){
if(this.encodeDelete){
var data = {};
data[this.meta.idProperty] = rec.id;
return data;
}else{
return rec.id;
}
}
});/**
* @class Ext.data.JsonReader
* @extends Ext.data.DataReader
* <p>Data reader class to create an Array of {@link Ext.data.Record} objects
* from a JSON packet based on mappings in a provided {@link Ext.data.Record}
* constructor.</p>
* <p>Example code:</p>
* <pre><code>
var myReader = new Ext.data.JsonReader({
// metadata configuration options:
{@link #idProperty}: 'id'
{@link #root}: 'rows',
{@link #totalProperty}: 'results',
{@link Ext.data.DataReader#messageProperty}: "msg" // The element within the response that provides a user-feedback message (optional)
// the fields config option will internally create an {@link Ext.data.Record}
// constructor that provides mapping for reading the record data objects
{@link Ext.data.DataReader#fields fields}: [
// map Record&#39;s 'firstname' field to data object&#39;s key of same name
{name: 'name'},
// map Record&#39;s 'job' field to data object&#39;s 'occupation' key
{name: 'job', mapping: 'occupation'}
]
});
</code></pre>
* <p>This would consume a JSON data object of the form:</p><pre><code>
{
results: 2000, // Reader&#39;s configured {@link #totalProperty}
rows: [ // Reader&#39;s configured {@link #root}
// record data objects:
{ {@link #idProperty id}: 1, firstname: 'Bill', occupation: 'Gardener' },
{ {@link #idProperty id}: 2, firstname: 'Ben' , occupation: 'Horticulturalist' },
...
]
}
</code></pre>
* <p><b><u>Automatic configuration using metaData</u></b></p>
* <p>It is possible to change a JsonReader's metadata at any time by including
* a <b><tt>metaData</tt></b> property in the JSON data object. If the JSON data
* object has a <b><tt>metaData</tt></b> property, a {@link Ext.data.Store Store}
* object using this Reader will reconfigure itself to use the newly provided
* field definition and fire its {@link Ext.data.Store#metachange metachange}
* event. The metachange event handler may interrogate the <b><tt>metaData</tt></b>
* property to perform any configuration required.</p>
* <p>Note that reconfiguring a Store potentially invalidates objects which may
* refer to Fields or Records which no longer exist.</p>
* <p>To use this facility you would create the JsonReader like this:</p><pre><code>
var myReader = new Ext.data.JsonReader();
</code></pre>
* <p>The first data packet from the server would configure the reader by
* containing a <b><tt>metaData</tt></b> property <b>and</b> the data. For
* example, the JSON data object might take the form:</p><pre><code>
{
metaData: {
"{@link #idProperty}": "id",
"{@link #root}": "rows",
"{@link #totalProperty}": "results"
"{@link #successProperty}": "success",
"{@link Ext.data.DataReader#fields fields}": [
{"name": "name"},
{"name": "job", "mapping": "occupation"}
],
// used by store to set its sortInfo
"sortInfo":{
"field": "name",
"direction": "ASC"
},
// {@link Ext.PagingToolbar paging data} (if applicable)
"start": 0,
"limit": 2,
// custom property
"foo": "bar"
},
// Reader&#39;s configured {@link #successProperty}
"success": true,
// Reader&#39;s configured {@link #totalProperty}
"results": 2000,
// Reader&#39;s configured {@link #root}
// (this data simulates 2 results {@link Ext.PagingToolbar per page})
"rows": [ // <b>*Note:</b> this must be an Array
{ "id": 1, "name": "Bill", "occupation": "Gardener" },
{ "id": 2, "name": "Ben", "occupation": "Horticulturalist" }
]
}
* </code></pre>
* <p>The <b><tt>metaData</tt></b> property in the JSON data object should contain:</p>
* <div class="mdetail-params"><ul>
* <li>any of the configuration options for this class</li>
* <li>a <b><tt>{@link Ext.data.Record#fields fields}</tt></b> property which
* the JsonReader will use as an argument to the
* {@link Ext.data.Record#create data Record create method} in order to
* configure the layout of the Records it will produce.</li>
* <li>a <b><tt>{@link Ext.data.Store#sortInfo sortInfo}</tt></b> property
* which the JsonReader will use to set the {@link Ext.data.Store}'s
* {@link Ext.data.Store#sortInfo sortInfo} property</li>
* <li>any custom properties needed</li>
* </ul></div>
*
* @constructor
* Create a new JsonReader
* @param {Object} meta Metadata configuration options.
* @param {Array/Object} recordType
* <p>Either an Array of {@link Ext.data.Field Field} definition objects (which
* will be passed to {@link Ext.data.Record#create}, or a {@link Ext.data.Record Record}
* constructor created from {@link Ext.data.Record#create}.</p>
*/
Ext.data.JsonReader = function(meta, recordType){
meta = meta || {};
/**
* @cfg {String} idProperty [id] Name of the property within a row object
* that contains a record identifier value. Defaults to <tt>id</tt>
*/
/**
* @cfg {String} successProperty [success] Name of the property from which to
* retrieve the success attribute. Defaults to <tt>success</tt>. See
* {@link Ext.data.DataProxy}.{@link Ext.data.DataProxy#exception exception}
* for additional information.
*/
/**
* @cfg {String} totalProperty [total] Name of the property from which to
* retrieve the total number of records in the dataset. This is only needed
* if the whole dataset is not passed in one go, but is being paged from
* the remote server. Defaults to <tt>total</tt>.
*/
/**
* @cfg {String} root [undefined] <b>Required</b>. The name of the property
* which contains the Array of row objects. Defaults to <tt>undefined</tt>.
* An exception will be thrown if the root property is undefined. The data
* packet value for this property should be an empty array to clear the data
* or show no data.
*/
Ext.applyIf(meta, {
idProperty: 'id',
successProperty: 'success',
totalProperty: 'total'
});
Ext.data.JsonReader.superclass.constructor.call(this, meta, recordType || meta.fields);
};
Ext.extend(Ext.data.JsonReader, Ext.data.DataReader, {
/**
* This JsonReader's metadata as passed to the constructor, or as passed in
* the last data packet's <b><tt>metaData</tt></b> property.
* @type Mixed
* @property meta
*/
/**
* This method is only used by a DataProxy which has retrieved data from a remote server.
* @param {Object} response The XHR object which contains the JSON data in its responseText.
* @return {Object} data A data block which is used by an Ext.data.Store object as
* a cache of Ext.data.Records.
*/
read : function(response){
var json = response.responseText;
var o = Ext.decode(json);
if(!o) {
throw {message: 'JsonReader.read: Json object not found'};
}
return this.readRecords(o);
},
/*
* TODO: refactor code between JsonReader#readRecords, #readResponse into 1 method.
* there's ugly duplication going on due to maintaining backwards compat. with 2.0. It's time to do this.
*/
/**
* Decode a JSON response from server.
* @param {String} action [Ext.data.Api.actions.create|read|update|destroy]
* @param {Object} response The XHR object returned through an Ajax server request.
* @return {Response} A {@link Ext.data.Response Response} object containing the data response, and also status information.
*/
readResponse : function(action, response) {
var o = (response.responseText !== undefined) ? Ext.decode(response.responseText) : response;
if(!o) {
throw new Ext.data.JsonReader.Error('response');
}
var root = this.getRoot(o);
if (action === Ext.data.Api.actions.create) {
var def = Ext.isDefined(root);
if (def && Ext.isEmpty(root)) {
throw new Ext.data.JsonReader.Error('root-empty', this.meta.root);
}
else if (!def) {
throw new Ext.data.JsonReader.Error('root-undefined-response', this.meta.root);
}
}
// instantiate response object
var res = new Ext.data.Response({
action: action,
success: this.getSuccess(o),
data: (root) ? this.extractData(root, false) : [],
message: this.getMessage(o),
raw: o
});
// blow up if no successProperty
if (Ext.isEmpty(res.success)) {
throw new Ext.data.JsonReader.Error('successProperty-response', this.meta.successProperty);
}
return res;
},
/**
* Create a data block containing Ext.data.Records from a JSON object.
* @param {Object} o An object which contains an Array of row objects in the property specified
* in the config as 'root, and optionally a property, specified in the config as 'totalProperty'
* which contains the total size of the dataset.
* @return {Object} data A data block which is used by an Ext.data.Store object as
* a cache of Ext.data.Records.
*/
readRecords : function(o){
/**
* After any data loads, the raw JSON data is available for further custom processing. If no data is
* loaded or there is a load exception this property will be undefined.
* @type Object
*/
this.jsonData = o;
if(o.metaData){
this.onMetaChange(o.metaData);
}
var s = this.meta, Record = this.recordType,
f = Record.prototype.fields, fi = f.items, fl = f.length, v;
var root = this.getRoot(o), c = root.length, totalRecords = c, success = true;
if(s.totalProperty){
v = parseInt(this.getTotal(o), 10);
if(!isNaN(v)){
totalRecords = v;
}
}
if(s.successProperty){
v = this.getSuccess(o);
if(v === false || v === 'false'){
success = false;
}
}
// TODO return Ext.data.Response instance instead. @see #readResponse
return {
success : success,
records : this.extractData(root, true), // <-- true to return [Ext.data.Record]
totalRecords : totalRecords
};
},
// private
buildExtractors : function() {
if(this.ef){
return;
}
var s = this.meta, Record = this.recordType,
f = Record.prototype.fields, fi = f.items, fl = f.length;
if(s.totalProperty) {
this.getTotal = this.createAccessor(s.totalProperty);
}
if(s.successProperty) {
this.getSuccess = this.createAccessor(s.successProperty);
}
if (s.messageProperty) {
this.getMessage = this.createAccessor(s.messageProperty);
}
this.getRoot = s.root ? this.createAccessor(s.root) : function(p){return p;};
if (s.id || s.idProperty) {
var g = this.createAccessor(s.id || s.idProperty);
this.getId = function(rec) {
var r = g(rec);
return (r === undefined || r === '') ? null : r;
};
} else {
this.getId = function(){return null;};
}
var ef = [];
for(var i = 0; i < fl; i++){
f = fi[i];
var map = (f.mapping !== undefined && f.mapping !== null) ? f.mapping : f.name;
ef.push(this.createAccessor(map));
}
this.ef = ef;
},
/**
* @ignore
* TODO This isn't used anywhere?? Don't we want to use this where possible instead of complex #createAccessor?
*/
simpleAccess : function(obj, subsc) {
return obj[subsc];
},
/**
* @ignore
*/
createAccessor : function(){
var re = /[\[\.]/;
return function(expr) {
if(Ext.isEmpty(expr)){
return Ext.emptyFn;
}
if(Ext.isFunction(expr)){
return expr;
}
var i = String(expr).search(re);
if(i >= 0){
return new Function('obj', 'return obj' + (i > 0 ? '.' : '') + expr);
}
return function(obj){
return obj[expr];
};
};
}(),
/**
* type-casts a single row of raw-data from server
* @param {Object} data
* @param {Array} items
* @param {Integer} len
* @private
*/
extractValues : function(data, items, len) {
var f, values = {};
for(var j = 0; j < len; j++){
f = items[j];
var v = this.ef[j](data);
values[f.name] = f.convert((v !== undefined) ? v : f.defaultValue, data);
}
return values;
}
});
/**
* @class Ext.data.JsonReader.Error
* Error class for JsonReader
*/
Ext.data.JsonReader.Error = Ext.extend(Ext.Error, {
constructor : function(message, arg) {
this.arg = arg;
Ext.Error.call(this, message);
},
name : 'Ext.data.JsonReader'
});
Ext.apply(Ext.data.JsonReader.Error.prototype, {
lang: {
'response': 'An error occurred while json-decoding your server response',
'successProperty-response': 'Could not locate your "successProperty" in your server response. Please review your JsonReader config to ensure the config-property "successProperty" matches the property in your server-response. See the JsonReader docs.',
'root-undefined-config': 'Your JsonReader was configured without a "root" property. Please review your JsonReader config and make sure to define the root property. See the JsonReader docs.',
'idProperty-undefined' : 'Your JsonReader was configured without an "idProperty" Please review your JsonReader configuration and ensure the "idProperty" is set (e.g.: "id"). See the JsonReader docs.',
'root-empty': 'Data was expected to be returned by the server in the "root" property of the response. Please review your JsonReader configuration to ensure the "root" property matches that returned in the server-response. See JsonReader docs.'
}
});
/**
* @class Ext.data.ArrayReader
* @extends Ext.data.JsonReader
* <p>Data reader class to create an Array of {@link Ext.data.Record} objects from an Array.
* Each element of that Array represents a row of data fields. The
* fields are pulled into a Record object using as a subscript, the <code>mapping</code> property
* of the field definition if it exists, or the field's ordinal position in the definition.</p>
* <p>Example code:</p>
* <pre><code>
var Employee = Ext.data.Record.create([
{name: 'name', mapping: 1}, // "mapping" only needed if an "id" field is present which
{name: 'occupation', mapping: 2} // precludes using the ordinal position as the index.
]);
var myReader = new Ext.data.ArrayReader({
{@link #idIndex}: 0
}, Employee);
</code></pre>
* <p>This would consume an Array like this:</p>
* <pre><code>
[ [1, 'Bill', 'Gardener'], [2, 'Ben', 'Horticulturalist'] ]
* </code></pre>
* @constructor
* Create a new ArrayReader
* @param {Object} meta Metadata configuration options.
* @param {Array/Object} recordType
* <p>Either an Array of {@link Ext.data.Field Field} definition objects (which
* will be passed to {@link Ext.data.Record#create}, or a {@link Ext.data.Record Record}
* constructor created from {@link Ext.data.Record#create}.</p>
*/
Ext.data.ArrayReader = Ext.extend(Ext.data.JsonReader, {
/**
* @cfg {String} successProperty
* @hide
*/
/**
* @cfg {Number} id (optional) The subscript within row Array that provides an ID for the Record.
* Deprecated. Use {@link #idIndex} instead.
*/
/**
* @cfg {Number} idIndex (optional) The subscript within row Array that provides an ID for the Record.
*/
/**
* Create a data block containing Ext.data.Records from an Array.
* @param {Object} o An Array of row objects which represents the dataset.
* @return {Object} data A data block which is used by an Ext.data.Store object as
* a cache of Ext.data.Records.
*/
readRecords : function(o){
this.arrayData = o;
var s = this.meta,
sid = s ? Ext.num(s.idIndex, s.id) : null,
recordType = this.recordType,
fields = recordType.prototype.fields,
records = [],
success = true,
v;
var root = this.getRoot(o);
for(var i = 0, len = root.length; i < len; i++) {
var n = root[i],
values = {},
id = ((sid || sid === 0) && n[sid] !== undefined && n[sid] !== "" ? n[sid] : null);
for(var j = 0, jlen = fields.length; j < jlen; j++) {
var f = fields.items[j],
k = f.mapping !== undefined && f.mapping !== null ? f.mapping : j;
v = n[k] !== undefined ? n[k] : f.defaultValue;
v = f.convert(v, n);
values[f.name] = v;
}
var record = new recordType(values, id);
record.json = n;
records[records.length] = record;
}
var totalRecords = records.length;
if(s.totalProperty) {
v = parseInt(this.getTotal(o), 10);
if(!isNaN(v)) {
totalRecords = v;
}
}
if(s.successProperty){
v = this.getSuccess(o);
if(v === false || v === 'false'){
success = false;
}
}
return {
success : success,
records : records,
totalRecords : totalRecords
};
}
});/**
* @class Ext.data.ArrayStore
* @extends Ext.data.Store
* <p>Formerly known as "SimpleStore".</p>
* <p>Small helper class to make creating {@link Ext.data.Store}s from Array data easier.
* An ArrayStore will be automatically configured with a {@link Ext.data.ArrayReader}.</p>
* <p>A store configuration would be something like:<pre><code>
var store = new Ext.data.ArrayStore({
// store configs
autoDestroy: true,
storeId: 'myStore',
// reader configs
idIndex: 0,
fields: [
'company',
{name: 'price', type: 'float'},
{name: 'change', type: 'float'},
{name: 'pctChange', type: 'float'},
{name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'}
]
});
* </code></pre></p>
* <p>This store is configured to consume a returned object of the form:<pre><code>
var myData = [
['3m Co',71.72,0.02,0.03,'9/1 12:00am'],
['Alcoa Inc',29.01,0.42,1.47,'9/1 12:00am'],
['Boeing Co.',75.43,0.53,0.71,'9/1 12:00am'],
['Hewlett-Packard Co.',36.53,-0.03,-0.08,'9/1 12:00am'],
['Wal-Mart Stores, Inc.',45.45,0.73,1.63,'9/1 12:00am']
];
* </code></pre>
* An object literal of this form could also be used as the {@link #data} config option.</p>
* <p><b>*Note:</b> Although not listed here, this class accepts all of the configuration options of
* <b>{@link Ext.data.ArrayReader ArrayReader}</b>.</p>
* @constructor
* @param {Object} config
* @xtype arraystore
*/
Ext.data.ArrayStore = Ext.extend(Ext.data.Store, {
/**
* @cfg {Ext.data.DataReader} reader @hide
*/
constructor: function(config){
Ext.data.ArrayStore.superclass.constructor.call(this, Ext.apply(config, {
reader: new Ext.data.ArrayReader(config)
}));
},
loadData : function(data, append){
if(this.expandData === true){
var r = [];
for(var i = 0, len = data.length; i < len; i++){
r[r.length] = [data[i]];
}
data = r;
}
Ext.data.ArrayStore.superclass.loadData.call(this, data, append);
}
});
Ext.reg('arraystore', Ext.data.ArrayStore);
// backwards compat
Ext.data.SimpleStore = Ext.data.ArrayStore;
Ext.reg('simplestore', Ext.data.SimpleStore);/**
* @class Ext.data.JsonStore
* @extends Ext.data.Store
* <p>Small helper class to make creating {@link Ext.data.Store}s from JSON data easier.
* A JsonStore will be automatically configured with a {@link Ext.data.JsonReader}.</p>
* <p>A store configuration would be something like:<pre><code>
var store = new Ext.data.JsonStore({
// store configs
autoDestroy: true,
url: 'get-images.php',
storeId: 'myStore',
// reader configs
root: 'images',
idProperty: 'name',
fields: ['name', 'url', {name:'size', type: 'float'}, {name:'lastmod', type:'date'}]
});
* </code></pre></p>
* <p>This store is configured to consume a returned object of the form:<pre><code>
{
images: [
{name: 'Image one', url:'/GetImage.php?id=1', size:46.5, lastmod: new Date(2007, 10, 29)},
{name: 'Image Two', url:'/GetImage.php?id=2', size:43.2, lastmod: new Date(2007, 10, 30)}
]
}
* </code></pre>
* An object literal of this form could also be used as the {@link #data} config option.</p>
* <p><b>*Note:</b> Although not listed here, this class accepts all of the configuration options of
* <b>{@link Ext.data.JsonReader JsonReader}</b>.</p>
* @constructor
* @param {Object} config
* @xtype jsonstore
*/
Ext.data.JsonStore = Ext.extend(Ext.data.Store, {
/**
* @cfg {Ext.data.DataReader} reader @hide
*/
constructor: function(config){
Ext.data.JsonStore.superclass.constructor.call(this, Ext.apply(config, {
reader: new Ext.data.JsonReader(config)
}));
}
});
Ext.reg('jsonstore', Ext.data.JsonStore);

7
htdocs/ext-3.2.0/pkgs/data-json.js
File diff suppressed because it is too large
View File

1488
htdocs/ext-3.2.0/pkgs/data-list-views-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/pkgs/data-list-views.js
File diff suppressed because it is too large
View File

475
htdocs/ext-3.2.0/pkgs/data-xml-debug.js

@ -0,0 +1,475 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
/**
* @class Ext.data.XmlWriter
* @extends Ext.data.DataWriter
* DataWriter extension for writing an array or single {@link Ext.data.Record} object(s) in preparation for executing a remote CRUD action via XML.
* XmlWriter uses an instance of {@link Ext.XTemplate} for maximum flexibility in defining your own custom XML schema if the default schema is not appropriate for your needs.
* See the {@link #tpl} configuration-property.
*/
Ext.data.XmlWriter = function(params) {
Ext.data.XmlWriter.superclass.constructor.apply(this, arguments);
// compile the XTemplate for rendering XML documents.
this.tpl = (typeof(this.tpl) === 'string') ? new Ext.XTemplate(this.tpl).compile() : this.tpl.compile();
};
Ext.extend(Ext.data.XmlWriter, Ext.data.DataWriter, {
/**
* @cfg {String} documentRoot [xrequest] (Optional) The name of the XML document root-node. <b>Note:</b>
* this parameter is required </b>only when</b> sending extra {@link Ext.data.Store#baseParams baseParams} to the server
* during a write-request -- if no baseParams are set, the {@link Ext.data.XmlReader#record} meta-property can
* suffice as the XML document root-node for write-actions involving just a <b>single record</b>. For requests
* involving <b>multiple</b> records and <b>NO</b> baseParams, the {@link Ext.data.XmlWriter#root} property can
* act as the XML document root.
*/
documentRoot: 'xrequest',
/**
* @cfg {Boolean} forceDocumentRoot [false] Set to <tt>true</tt> to force XML documents having a root-node as defined
* by {@link #documentRoot}, even with no baseParams defined.
*/
forceDocumentRoot: false,
/**
* @cfg {String} root [records] The name of the containing element which will contain the nodes of an write-action involving <b>multiple</b> records. Each
* xml-record written to the server will be wrapped in an element named after {@link Ext.data.XmlReader#record} property.
* eg:
<code><pre>
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;user>&lt;first>Barney&lt;/first>&lt;/user>
</code></pre>
* However, when <b>multiple</b> records are written in a batch-operation, these records must be wrapped in a containing
* Element.
* eg:
<code><pre>
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;records>
&lt;first>Barney&lt;/first>&lt;/user>
&lt;records>&lt;first>Barney&lt;/first>&lt;/user>
&lt;/records>
</code></pre>
* Defaults to <tt>records</tt>. Do not confuse the nature of this property with that of {@link #documentRoot}
*/
root: 'records',
/**
* @cfg {String} xmlVersion [1.0] The <tt>version</tt> written to header of xml documents.
<code><pre>&lt;?xml version="1.0" encoding="ISO-8859-15"?></pre></code>
*/
xmlVersion : '1.0',
/**
* @cfg {String} xmlEncoding [ISO-8859-15] The <tt>encoding</tt> written to header of xml documents.
<code><pre>&lt;?xml version="1.0" encoding="ISO-8859-15"?></pre></code>
*/
xmlEncoding: 'ISO-8859-15',
/**
* @cfg {String/Ext.XTemplate} tpl The XML template used to render {@link Ext.data.Api#actions write-actions} to your server.
* <p>One can easily provide his/her own custom {@link Ext.XTemplate#constructor template-definition} if the default does not suffice.</p>
* <p>Defaults to:</p>
<code><pre>
&lt;?xml version="{version}" encoding="{encoding}"?>
&lt;tpl if="documentRoot">&lt;{documentRoot}>
&lt;tpl for="baseParams">
&lt;tpl for=".">
&lt;{name}>{value}&lt;/{name}>
&lt;/tpl>
&lt;/tpl>
&lt;tpl if="records.length &gt; 1">&lt;{root}>',
&lt;tpl for="records">
&lt;{parent.record}>
&lt;tpl for=".">
&lt;{name}>{value}&lt;/{name}>
&lt;/tpl>
&lt;/{parent.record}>
&lt;/tpl>
&lt;tpl if="records.length &gt; 1">&lt;/{root}>&lt;/tpl>
&lt;tpl if="documentRoot">&lt;/{documentRoot}>&lt;/tpl>
</pre></code>
* <p>Templates will be called with the following API</p>
* <ul>
* <li>{String} version [1.0] The xml version.</li>
* <li>{String} encoding [ISO-8859-15] The xml encoding.</li>
* <li>{String/false} documentRoot The XML document root-node name or <tt>false</tt> if not required. See {@link #documentRoot} and {@link #forceDocumentRoot}.</li>
* <li>{String} record The meta-data parameter defined on your {@link Ext.data.XmlReader#record} configuration represents the name of the xml-tag containing each record.</li>
* <li>{String} root The meta-data parameter defined by {@link Ext.data.XmlWriter#root} configuration-parameter. Represents the name of the xml root-tag when sending <b>multiple</b> records to the server.</li>
* <li>{Array} records The records being sent to the server, ie: the subject of the write-action being performed. The records parameter will be always be an array, even when only a single record is being acted upon.
* Each item within the records array will contain an array of field objects having the following properties:
* <ul>
* <li>{String} name The field-name of the record as defined by your {@link Ext.data.Record#create Ext.data.Record definition}. The "mapping" property will be used, otherwise it will match the "name" property. Use this parameter to define the XML tag-name of the property.</li>
* <li>{Mixed} value The record value of the field enclosed within XML tags specified by name property above.</li>
* </ul></li>
* <li>{Array} baseParams. The baseParams as defined upon {@link Ext.data.Store#baseParams}. Note that the baseParams have been converted into an array of [{name : "foo", value: "bar"}, ...] pairs in the same manner as the <b>records</b> parameter above. See {@link #documentRoot} and {@link #forceDocumentRoot}.</li>
* </ul>
*/
// Encoding the ? here in case it's being included by some kind of page that will parse it (eg. PHP)
tpl: '<tpl for="."><\u003fxml version="{version}" encoding="{encoding}"\u003f><tpl if="documentRoot"><{documentRoot}><tpl for="baseParams"><tpl for="."><{name}>{value}</{name}</tpl></tpl></tpl><tpl if="records.length&gt;1"><{root}></tpl><tpl for="records"><{parent.record}><tpl for="."><{name}>{value}</{name}></tpl></{parent.record}></tpl><tpl if="records.length&gt;1"></{root}></tpl><tpl if="documentRoot"></{documentRoot}></tpl></tpl>',
/**
* XmlWriter implementation of the final stage of a write action.
* @param {Object} params Transport-proxy's (eg: {@link Ext.Ajax#request}) params-object to write-to.
* @param {Object} baseParams as defined by {@link Ext.data.Store#baseParams}. The baseParms must be encoded by the extending class, eg: {@link Ext.data.JsonWriter}, {@link Ext.data.XmlWriter}.
* @param {Object/Object[]} data Data-object representing the compiled Store-recordset.
*/
render : function(params, baseParams, data) {
baseParams = this.toArray(baseParams);
params.xmlData = this.tpl.applyTemplate({
version: this.xmlVersion,
encoding: this.xmlEncoding,
documentRoot: (baseParams.length > 0 || this.forceDocumentRoot === true) ? this.documentRoot : false,
record: this.meta.record,
root: this.root,
baseParams: baseParams,
records: (Ext.isArray(data[0])) ? data : [data]
});
},
/**
* createRecord
* @protected
* @param {Ext.data.Record} rec
* @return {Array} Array of <tt>name:value</tt> pairs for attributes of the {@link Ext.data.Record}. See {@link Ext.data.DataWriter#toHash}.
*/
createRecord : function(rec) {
return this.toArray(this.toHash(rec));
},
/**
* updateRecord
* @protected
* @param {Ext.data.Record} rec
* @return {Array} Array of {name:value} pairs for attributes of the {@link Ext.data.Record}. See {@link Ext.data.DataWriter#toHash}.
*/
updateRecord : function(rec) {
return this.toArray(this.toHash(rec));
},
/**
* destroyRecord
* @protected
* @param {Ext.data.Record} rec
* @return {Array} Array containing a attribute-object (name/value pair) representing the {@link Ext.data.DataReader#idProperty idProperty}.
*/
destroyRecord : function(rec) {
var data = {};
data[this.meta.idProperty] = rec.id;
return this.toArray(data);
}
});
/**
* @class Ext.data.XmlReader
* @extends Ext.data.DataReader
* <p>Data reader class to create an Array of {@link Ext.data.Record} objects from an XML document
* based on mappings in a provided {@link Ext.data.Record} constructor.</p>
* <p><b>Note</b>: that in order for the browser to parse a returned XML document, the Content-Type
* header in the HTTP response must be set to "text/xml" or "application/xml".</p>
* <p>Example code:</p>
* <pre><code>
var Employee = Ext.data.Record.create([
{name: 'name', mapping: 'name'}, // "mapping" property not needed if it is the same as "name"
{name: 'occupation'} // This field will use "occupation" as the mapping.
]);
var myReader = new Ext.data.XmlReader({
totalProperty: "results", // The element which contains the total dataset size (optional)
record: "row", // The repeated element which contains row information
idProperty: "id" // The element within the row that provides an ID for the record (optional)
messageProperty: "msg" // The element within the response that provides a user-feedback message (optional)
}, Employee);
</code></pre>
* <p>
* This would consume an XML file like this:
* <pre><code>
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;dataset>
&lt;results>2&lt;/results>
&lt;row>
&lt;id>1&lt;/id>
&lt;name>Bill&lt;/name>
&lt;occupation>Gardener&lt;/occupation>
&lt;/row>
&lt;row>
&lt;id>2&lt;/id>
&lt;name>Ben&lt;/name>
&lt;occupation>Horticulturalist&lt;/occupation>
&lt;/row>
&lt;/dataset>
</code></pre>
* @cfg {String} totalProperty The DomQuery path from which to retrieve the total number of records
* in the dataset. This is only needed if the whole dataset is not passed in one go, but is being
* paged from the remote server.
* @cfg {String} record The DomQuery path to the repeated element which contains record information.
* @cfg {String} record The DomQuery path to the repeated element which contains record information.
* @cfg {String} successProperty The DomQuery path to the success attribute used by forms.
* @cfg {String} idPath The DomQuery path relative from the record element to the element that contains
* a record identifier value.
* @constructor
* Create a new XmlReader.
* @param {Object} meta Metadata configuration options
* @param {Object} recordType Either an Array of field definition objects as passed to
* {@link Ext.data.Record#create}, or a Record constructor object created using {@link Ext.data.Record#create}.
*/
Ext.data.XmlReader = function(meta, recordType){
meta = meta || {};
// backwards compat, convert idPath or id / success
Ext.applyIf(meta, {
idProperty: meta.idProperty || meta.idPath || meta.id,
successProperty: meta.successProperty || meta.success
});
Ext.data.XmlReader.superclass.constructor.call(this, meta, recordType || meta.fields);
};
Ext.extend(Ext.data.XmlReader, Ext.data.DataReader, {
/**
* This method is only used by a DataProxy which has retrieved data from a remote server.
* @param {Object} response The XHR object which contains the parsed XML document. The response is expected
* to contain a property called <tt>responseXML</tt> which refers to an XML document object.
* @return {Object} records A data block which is used by an {@link Ext.data.Store} as
* a cache of Ext.data.Records.
*/
read : function(response){
var doc = response.responseXML;
if(!doc) {
throw {message: "XmlReader.read: XML Document not available"};
}
return this.readRecords(doc);
},
/**
* Create a data block containing Ext.data.Records from an XML document.
* @param {Object} doc A parsed XML document.
* @return {Object} records A data block which is used by an {@link Ext.data.Store} as
* a cache of Ext.data.Records.
*/
readRecords : function(doc){
/**
* After any data loads/reads, the raw XML Document is available for further custom processing.
* @type XMLDocument
*/
this.xmlData = doc;
var root = doc.documentElement || doc,
q = Ext.DomQuery,
totalRecords = 0,
success = true;
if(this.meta.totalProperty){
totalRecords = this.getTotal(root, 0);
}
if(this.meta.successProperty){
success = this.getSuccess(root);
}
var records = this.extractData(q.select(this.meta.record, root), true); // <-- true to return Ext.data.Record[]
// TODO return Ext.data.Response instance. @see #readResponse
return {
success : success,
records : records,
totalRecords : totalRecords || records.length
};
},
/**
* Decode an XML response from server.
* @param {String} action [{@link Ext.data.Api#actions} create|read|update|destroy]
* @param {Object} response HTTP Response object from browser.
* @return {Ext.data.Response} An instance of {@link Ext.data.Response}
*/
readResponse : function(action, response) {
var q = Ext.DomQuery,
doc = response.responseXML;
// create general Response instance.
var res = new Ext.data.Response({
action: action,
success : this.getSuccess(doc),
message: this.getMessage(doc),
data: this.extractData(q.select(this.meta.record, doc) || q.select(this.meta.root, doc), false),
raw: doc
});
if (Ext.isEmpty(res.success)) {
throw new Ext.data.DataReader.Error('successProperty-response', this.meta.successProperty);
}
// Create actions from a response having status 200 must return pk
if (action === Ext.data.Api.actions.create) {
var def = Ext.isDefined(res.data);
if (def && Ext.isEmpty(res.data)) {
throw new Ext.data.JsonReader.Error('root-empty', this.meta.root);
}
else if (!def) {
throw new Ext.data.JsonReader.Error('root-undefined-response', this.meta.root);
}
}
return res;
},
getSuccess : function() {
return true;
},
/**
* build response-data extractor functions.
* @private
* @ignore
*/
buildExtractors : function() {
if(this.ef){
return;
}
var s = this.meta,
Record = this.recordType,
f = Record.prototype.fields,
fi = f.items,
fl = f.length;
if(s.totalProperty) {
this.getTotal = this.createAccessor(s.totalProperty);
}
if(s.successProperty) {
this.getSuccess = this.createAccessor(s.successProperty);
}
if (s.messageProperty) {
this.getMessage = this.createAccessor(s.messageProperty);
}
this.getRoot = function(res) {
return (!Ext.isEmpty(res[this.meta.record])) ? res[this.meta.record] : res[this.meta.root];
};
if (s.idPath || s.idProperty) {
var g = this.createAccessor(s.idPath || s.idProperty);
this.getId = function(rec) {
var id = g(rec) || rec.id;
return (id === undefined || id === '') ? null : id;
};
} else {
this.getId = function(){return null;};
}
var ef = [];
for(var i = 0; i < fl; i++){
f = fi[i];
var map = (f.mapping !== undefined && f.mapping !== null) ? f.mapping : f.name;
ef.push(this.createAccessor(map));
}
this.ef = ef;
},
/**
* Creates a function to return some particular key of data from a response.
* @param {String} key
* @return {Function}
* @private
* @ignore
*/
createAccessor : function(){
var q = Ext.DomQuery;
return function(key) {
switch(key) {
case this.meta.totalProperty:
return function(root, def){
return q.selectNumber(key, root, def);
};
break;
case this.meta.successProperty:
return function(root, def) {
var sv = q.selectValue(key, root, true);
var success = sv !== false && sv !== 'false';
return success;
};
break;
default:
return function(root, def) {
return q.selectValue(key, root, def);
};
break;
}
};
}(),
/**
* extracts values and type-casts a row of data from server, extracted by #extractData
* @param {Hash} data
* @param {Ext.data.Field[]} items
* @param {Number} len
* @private
* @ignore
*/
extractValues : function(data, items, len) {
var f, values = {};
for(var j = 0; j < len; j++){
f = items[j];
var v = this.ef[j](data);
values[f.name] = f.convert((v !== undefined) ? v : f.defaultValue, data);
}
return values;
}
});/**
* @class Ext.data.XmlStore
* @extends Ext.data.Store
* <p>Small helper class to make creating {@link Ext.data.Store}s from XML data easier.
* A XmlStore will be automatically configured with a {@link Ext.data.XmlReader}.</p>
* <p>A store configuration would be something like:<pre><code>
var store = new Ext.data.XmlStore({
// store configs
autoDestroy: true,
storeId: 'myStore',
url: 'sheldon.xml', // automatically configures a HttpProxy
// reader configs
record: 'Item', // records will have an "Item" tag
idPath: 'ASIN',
totalRecords: '@TotalResults'
fields: [
// set up the fields mapping into the xml doc
// The first needs mapping, the others are very basic
{name: 'Author', mapping: 'ItemAttributes > Author'},
'Title', 'Manufacturer', 'ProductGroup'
]
});
* </code></pre></p>
* <p>This store is configured to consume a returned object of the form:<pre><code>
&#60?xml version="1.0" encoding="UTF-8"?>
&#60ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2009-05-15">
&#60Items>
&#60Request>
&#60IsValid>True&#60/IsValid>
&#60ItemSearchRequest>
&#60Author>Sidney Sheldon&#60/Author>
&#60SearchIndex>Books&#60/SearchIndex>
&#60/ItemSearchRequest>
&#60/Request>
&#60TotalResults>203&#60/TotalResults>
&#60TotalPages>21&#60/TotalPages>
&#60Item>
&#60ASIN>0446355453&#60/ASIN>
&#60DetailPageURL>
http://www.amazon.com/
&#60/DetailPageURL>
&#60ItemAttributes>
&#60Author>Sidney Sheldon&#60/Author>
&#60Manufacturer>Warner Books&#60/Manufacturer>
&#60ProductGroup>Book&#60/ProductGroup>
&#60Title>Master of the Game&#60/Title>
&#60/ItemAttributes>
&#60/Item>
&#60/Items>
&#60/ItemSearchResponse>
* </code></pre>
* An object literal of this form could also be used as the {@link #data} config option.</p>
* <p><b>Note:</b> Although not listed here, this class accepts all of the configuration options of
* <b>{@link Ext.data.XmlReader XmlReader}</b>.</p>
* @constructor
* @param {Object} config
* @xtype xmlstore
*/
Ext.data.XmlStore = Ext.extend(Ext.data.Store, {
/**
* @cfg {Ext.data.DataReader} reader @hide
*/
constructor: function(config){
Ext.data.XmlStore.superclass.constructor.call(this, Ext.apply(config, {
reader: new Ext.data.XmlReader(config)
}));
}
});
Ext.reg('xmlstore', Ext.data.XmlStore);

7
htdocs/ext-3.2.0/pkgs/data-xml.js

@ -0,0 +1,7 @@
/*
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
Ext.data.XmlWriter=function(a){Ext.data.XmlWriter.superclass.constructor.apply(this,arguments);this.tpl=(typeof(this.tpl)==="string")?new Ext.XTemplate(this.tpl).compile():this.tpl.compile()};Ext.extend(Ext.data.XmlWriter,Ext.data.DataWriter,{documentRoot:"xrequest",forceDocumentRoot:false,root:"records",xmlVersion:"1.0",xmlEncoding:"ISO-8859-15",tpl:'<tpl for="."><\u003fxml version="{version}" encoding="{encoding}"\u003f><tpl if="documentRoot"><{documentRoot}><tpl for="baseParams"><tpl for="."><{name}>{value}</{name}</tpl></tpl></tpl><tpl if="records.length&gt;1"><{root}></tpl><tpl for="records"><{parent.record}><tpl for="."><{name}>{value}</{name}></tpl></{parent.record}></tpl><tpl if="records.length&gt;1"></{root}></tpl><tpl if="documentRoot"></{documentRoot}></tpl></tpl>',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,f=0,e=true;if(this.meta.totalProperty){f=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:f||b.length}},readResponse:function(e,a){var d=Ext.DomQuery,f=a.responseXML;var b=new Ext.data.Response({action:e,success:this.getSuccess(f),message:this.getMessage(f),data:this.extractData(d.select(this.meta.record,f)||d.select(this.meta.root,f),false),raw:f});if(Ext.isEmpty(b.success)){throw new Ext.data.DataReader.Error("successProperty-response",this.meta.successProperty)}if(e===Ext.data.Api.actions.create){var c=Ext.isDefined(b.data);if(c&&Ext.isEmpty(b.data)){throw new Ext.data.JsonReader.Error("root-empty",this.meta.root)}else{if(!c){throw new Ext.data.JsonReader.Error("root-undefined-response",this.meta.root)}}}return b},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(f){return(!Ext.isEmpty(f[this.meta.record]))?f[this.meta.record]:f[this.meta.root]};if(l.idPath||l.idProperty){var d=this.createAccessor(l.idPath||l.idProperty);this.getId=function(f){var g=d(f)||f.id;return(g===undefined||g==="")?null:g}}else{this.getId=function(){return null}}var c=[];for(var b=0;b<j;b++){e=k[b];var a=(e.mapping!==undefined&&e.mapping!==null)?e.mapping:e.name;c.push(this.createAccessor(a))}this.ef=c},createAccessor:function(){var a=Ext.DomQuery;return function(b){switch(b){case this.meta.totalProperty:return function(c,d){return a.selectNumber(b,c,d)};break;case this.meta.successProperty:return function(d,e){var c=a.selectValue(b,d,true);var f=c!==false&&c!=="false";return f};break;default:return function(c,d){return a.selectValue(b,c,d)};break}}}(),extractValues:function(h,d,a){var g,c={};for(var e=0;e<a;e++){g=d[e];var b=this.ef[e](h);c[g.name]=g.convert((b!==undefined)?b:g.defaultValue,h)}return c}});Ext.data.XmlStore=Ext.extend(Ext.data.Store,{constructor:function(a){Ext.data.XmlStore.superclass.constructor.call(this,Ext.apply(a,{reader:new Ext.data.XmlReader(a)}))}});Ext.reg("xmlstore",Ext.data.XmlStore);

1160
htdocs/ext-3.2.0/pkgs/direct-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/pkgs/direct.js
File diff suppressed because it is too large
View File

4771
htdocs/ext-3.2.0/pkgs/ext-dd-debug.js
File diff suppressed because it is too large
View File

15
htdocs/ext-3.2.0/pkgs/ext-dd.js
File diff suppressed because it is too large
View File

14466
htdocs/ext-3.2.0/pkgs/ext-foundation-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/pkgs/ext-foundation.js
File diff suppressed because it is too large
View File

1124
htdocs/ext-3.2.0/pkgs/pkg-buttons-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/pkgs/pkg-buttons.js
File diff suppressed because it is too large
View File

1922
htdocs/ext-3.2.0/pkgs/pkg-charts-debug.js
File diff suppressed because it is too large
View File

10
htdocs/ext-3.2.0/pkgs/pkg-charts.js
File diff suppressed because it is too large
View File

9070
htdocs/ext-3.2.0/pkgs/pkg-forms-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/pkgs/pkg-forms.js
File diff suppressed because it is too large
View File

621
htdocs/ext-3.2.0/pkgs/pkg-grid-editor-debug.js

@ -0,0 +1,621 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
/**
* @class Ext.grid.CellSelectionModel
* @extends Ext.grid.AbstractSelectionModel
* This class provides the basic implementation for <i>single</i> <b>cell</b> selection in a grid.
* The object stored as the selection contains the following properties:
* <div class="mdetail-params"><ul>
* <li><b>cell</b> : see {@link #getSelectedCell}
* <li><b>record</b> : Ext.data.record The {@link Ext.data.Record Record}
* which provides the data for the row containing the selection</li>
* </ul></div>
* @constructor
* @param {Object} config The object containing the configuration of this model.
*/
Ext.grid.CellSelectionModel = Ext.extend(Ext.grid.AbstractSelectionModel, {
constructor : function(config){
Ext.apply(this, config);
this.selection = null;
this.addEvents(
/**
* @event beforecellselect
* Fires before a cell is selected, return false to cancel the selection.
* @param {SelectionModel} this
* @param {Number} rowIndex The selected row index
* @param {Number} colIndex The selected cell index
*/
"beforecellselect",
/**
* @event cellselect
* Fires when a cell is selected.
* @param {SelectionModel} this
* @param {Number} rowIndex The selected row index
* @param {Number} colIndex The selected cell index
*/
"cellselect",
/**
* @event selectionchange
* Fires when the active selection changes.
* @param {SelectionModel} this
* @param {Object} selection null for no selection or an object with two properties
* <div class="mdetail-params"><ul>
* <li><b>cell</b> : see {@link #getSelectedCell}
* <li><b>record</b> : Ext.data.record<p class="sub-desc">The {@link Ext.data.Record Record}
* which provides the data for the row containing the selection</p></li>
* </ul></div>
*/
"selectionchange"
);
Ext.grid.CellSelectionModel.superclass.constructor.call(this);
},
/** @ignore */
initEvents : function(){
this.grid.on('cellmousedown', this.handleMouseDown, this);
this.grid.on(Ext.EventManager.useKeydown ? 'keydown' : 'keypress', 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);
}
},
//private
beforeEdit : function(e){
this.select(e.row, e.column, false, true, e.record);
},
//private
onRowUpdated : function(v, index, r){
if(this.selection && this.selection.record == r){
v.onCellSelect(index, this.selection.cell[1]);
}
},
//private
onViewChange : function(){
this.clearSelections(true);
},
/**
* Returns an array containing the row and column indexes of the currently selected cell
* (e.g., [0, 0]), or null if none selected. The array has elements:
* <div class="mdetail-params"><ul>
* <li><b>rowIndex</b> : Number<p class="sub-desc">The index of the selected row</p></li>
* <li><b>cellIndex</b> : Number<p class="sub-desc">The index of the selected cell.
* Due to possible column reordering, the cellIndex should <b>not</b> be used as an
* index into the Record's data. Instead, use the cellIndex to determine the <i>name</i>
* of the selected cell and use the field name to retrieve the data value from the record:<pre><code>
// get name
var fieldName = grid.getColumnModel().getDataIndex(cellIndex);
// get data value based on name
var data = record.get(fieldName);
* </code></pre></p></li>
* </ul></div>
* @return {Array} An array containing the row and column indexes of the selected cell, or null if none selected.
*/
getSelectedCell : function(){
return this.selection ? this.selection.cell : null;
},
/**
* If anything is selected, clears all selections and fires the selectionchange event.
* @param {Boolean} preventNotify <tt>true</tt> to prevent the gridview from
* being notified about the change.
*/
clearSelections : function(preventNotify){
var s = this.selection;
if(s){
if(preventNotify !== true){
this.grid.view.onCellDeselect(s.cell[0], s.cell[1]);
}
this.selection = null;
this.fireEvent("selectionchange", this, null);
}
},
/**
* Returns <tt>true</tt> if there is a selection.
* @return {Boolean}
*/
hasSelection : function(){
return this.selection ? true : false;
},
/** @ignore */
handleMouseDown : function(g, row, cell, e){
if(e.button !== 0 || this.isLocked()){
return;
}
this.select(row, cell);
},
/**
* Selects a cell. Before selecting a cell, fires the
* {@link #beforecellselect} event. If this check is satisfied the cell
* will be selected and followed up by firing the {@link #cellselect} and
* {@link #selectionchange} events.
* @param {Number} rowIndex The index of the row to select
* @param {Number} colIndex The index of the column to select
* @param {Boolean} preventViewNotify (optional) Specify <tt>true</tt> to
* prevent notifying the view (disables updating the selected appearance)
* @param {Boolean} preventFocus (optional) Whether to prevent the cell at
* the specified rowIndex / colIndex from being focused.
* @param {Ext.data.Record} r (optional) The record to select
*/
select : function(rowIndex, colIndex, preventViewNotify, preventFocus, /*internal*/ r){
if(this.fireEvent("beforecellselect", this, rowIndex, colIndex) !== false){
this.clearSelections();
r = r || this.grid.store.getAt(rowIndex);
this.selection = {
record : r,
cell : [rowIndex, colIndex]
};
if(!preventViewNotify){
var v = this.grid.getView();
v.onCellSelect(rowIndex, colIndex);
if(preventFocus !== true){
v.focusCell(rowIndex, colIndex);
}
}
this.fireEvent("cellselect", this, rowIndex, colIndex);
this.fireEvent("selectionchange", this, this.selection);
}
},
//private
isSelectable : function(rowIndex, colIndex, cm){
return !cm.isHidden(colIndex);
},
// private
onEditorKey: function(field, e){
if(e.getKey() == e.TAB){
this.handleKeyDown(e);
}
},
/** @ignore */
handleKeyDown : function(e){
if(!e.isNavKeyPress()){
return;
}
var k = e.getKey(),
g = this.grid,
s = this.selection,
sm = this,
walk = function(row, col, step){
return g.walkCells(
row,
col,
step,
g.isEditor && g.editing ? sm.acceptsNav : sm.isSelectable, // *** handle tabbing while editorgrid is in edit mode
sm
);
},
cell, newCell, r, c, ae;
switch(k){
case e.ESC:
case e.PAGE_UP:
case e.PAGE_DOWN:
// do nothing
break;
default:
// *** call e.stopEvent() only for non ESC, PAGE UP/DOWN KEYS
e.stopEvent();
break;
}
if(!s){
cell = walk(0, 0, 1); // *** use private walk() function defined above
if(cell){
this.select(cell[0], cell[1]);
}
return;
}
cell = s.cell; // currently selected cell
r = cell[0]; // current row
c = cell[1]; // current column
switch(k){
case e.TAB:
if(e.shiftKey){
newCell = walk(r, c - 1, -1);
}else{
newCell = walk(r, c + 1, 1);
}
break;
case e.DOWN:
newCell = walk(r + 1, c, 1);
break;
case e.UP:
newCell = walk(r - 1, c, -1);
break;
case e.RIGHT:
newCell = walk(r, c + 1, 1);
break;
case e.LEFT:
newCell = walk(r, c - 1, -1);
break;
case e.ENTER:
if (g.isEditor && !g.editing) {
g.startEditing(r, c);
return;
}
break;
}
if(newCell){
// *** reassign r & c variables to newly-selected cell's row and column
r = newCell[0];
c = newCell[1];
this.select(r, c); // *** highlight newly-selected cell and update selection
if(g.isEditor && g.editing){ // *** handle tabbing while editorgrid is in edit mode
ae = g.activeEditor;
if(ae && ae.field.triggerBlur){
// *** if activeEditor is a TriggerField, explicitly call its triggerBlur() method
ae.field.triggerBlur();
}
g.startEditing(r, c);
}
}
},
acceptsNav : function(row, col, cm){
return !cm.isHidden(col) && cm.isCellEditable(col, row);
}
});/**
* @class Ext.grid.EditorGridPanel
* @extends Ext.grid.GridPanel
* <p>This class extends the {@link Ext.grid.GridPanel GridPanel Class} to provide cell editing
* on selected {@link Ext.grid.Column columns}. The editable columns are specified by providing
* an {@link Ext.grid.ColumnModel#editor editor} in the {@link Ext.grid.Column column configuration}.</p>
* <p>Editability of columns may be controlled programatically by inserting an implementation
* of {@link Ext.grid.ColumnModel#isCellEditable isCellEditable} into the
* {@link Ext.grid.ColumnModel ColumnModel}.</p>
* <p>Editing is performed on the value of the <i>field</i> specified by the column's
* <tt>{@link Ext.grid.ColumnModel#dataIndex dataIndex}</tt> in the backing {@link Ext.data.Store Store}
* (so if you are using a {@link Ext.grid.ColumnModel#setRenderer renderer} in order to display
* transformed data, this must be accounted for).</p>
* <p>If a value-to-description mapping is used to render a column, then a {@link Ext.form.Field#ComboBox ComboBox}
* which uses the same {@link Ext.form.Field#valueField value}-to-{@link Ext.form.Field#displayFieldField description}
* mapping would be an appropriate editor.</p>
* If there is a more complex mismatch between the visible data in the grid, and the editable data in
* the {@link Edt.data.Store Store}, then code to transform the data both before and after editing can be
* injected using the {@link #beforeedit} and {@link #afteredit} events.
* @constructor
* @param {Object} config The config object
* @xtype editorgrid
*/
Ext.grid.EditorGridPanel = Ext.extend(Ext.grid.GridPanel, {
/**
* @cfg {Number} clicksToEdit
* <p>The number of clicks on a cell required to display the cell's editor (defaults to 2).</p>
* <p>Setting this option to 'auto' means that mousedown <i>on the selected cell</i> starts
* editing that cell.</p>
*/
clicksToEdit: 2,
/**
* @cfg {Boolean} forceValidation
* True to force validation even if the value is unmodified (defaults to false)
*/
forceValidation: false,
// private
isEditor : true,
// private
detectEdit: false,
/**
* @cfg {Boolean} autoEncode
* True to automatically HTML encode and decode values pre and post edit (defaults to false)
*/
autoEncode : false,
/**
* @cfg {Boolean} trackMouseOver @hide
*/
// private
trackMouseOver: false, // causes very odd FF errors
// private
initComponent : function(){
Ext.grid.EditorGridPanel.superclass.initComponent.call(this);
if(!this.selModel){
/**
* @cfg {Object} selModel Any subclass of AbstractSelectionModel that will provide the selection model for
* the grid (defaults to {@link Ext.grid.CellSelectionModel} if not specified).
*/
this.selModel = new Ext.grid.CellSelectionModel();
}
this.activeEditor = null;
this.addEvents(
/**
* @event beforeedit
* Fires before cell editing is triggered. The edit event object has the following properties <br />
* <ul style="padding:5px;padding-left:16px;">
* <li>grid - This grid</li>
* <li>record - The record being edited</li>
* <li>field - The field name being edited</li>
* <li>value - The value for the field being edited.</li>
* <li>row - The grid row index</li>
* <li>column - The grid column index</li>
* <li>cancel - Set this to true to cancel the edit or return false from your handler.</li>
* </ul>
* @param {Object} e An edit event (see above for description)
*/
"beforeedit",
/**
* @event afteredit
* Fires after a cell is edited. The edit event object has the following properties <br />
* <ul style="padding:5px;padding-left:16px;">
* <li>grid - This grid</li>
* <li>record - The record being edited</li>
* <li>field - The field name being edited</li>
* <li>value - The value being set</li>
* <li>originalValue - The original value for the field, before the edit.</li>
* <li>row - The grid row index</li>
* <li>column - The grid column index</li>
* </ul>
*
* <pre><code>
grid.on('afteredit', afterEdit, this );
function afterEdit(e) {
// execute an XHR to send/commit data to the server, in callback do (if successful):
e.record.commit();
};
* </code></pre>
* @param {Object} e An edit event (see above for description)
*/
"afteredit",
/**
* @event validateedit
* Fires after a cell is edited, but before the value is set in the record. Return false
* to cancel the change. The edit event object has the following properties <br />
* <ul style="padding:5px;padding-left:16px;">
* <li>grid - This grid</li>
* <li>record - The record being edited</li>
* <li>field - The field name being edited</li>
* <li>value - The value being set</li>
* <li>originalValue - The original value for the field, before the edit.</li>
* <li>row - The grid row index</li>
* <li>column - The grid column index</li>
* <li>cancel - Set this to true to cancel the edit or return false from your handler.</li>
* </ul>
* Usage example showing how to remove the red triangle (dirty record indicator) from some
* records (not all). By observing the grid's validateedit event, it can be cancelled if
* the edit occurs on a targeted row (for example) and then setting the field's new value
* in the Record directly:
* <pre><code>
grid.on('validateedit', function(e) {
var myTargetRow = 6;
if (e.row == myTargetRow) {
e.cancel = true;
e.record.data[e.field] = e.value;
}
});
* </code></pre>
* @param {Object} e An edit event (see above for description)
*/
"validateedit"
);
},
// private
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 view = this.getView();
if(this.clicksToEdit == 'auto' && view.mainBody){
view.mainBody.on('mousedown', this.onAutoEditClick, this);
}
this.on('celldblclick', this.onCellDblClick, this);
}
},
onResize : function(){
Ext.grid.EditorGridPanel.superclass.onResize.apply(this, arguments);
var ae = this.activeEditor;
if(this.editing && ae){
ae.realign(true);
}
},
// private
onCellDblClick : function(g, row, col){
this.startEditing(row, col);
},
// private
onAutoEditClick : function(e, t){
if(e.button !== 0){
return;
}
var row = this.view.findRowIndex(t),
col = this.view.findCellIndex(t);
if(row !== false && col !== false){
this.stopEditing();
if(this.selModel.getSelectedCell){ // cell sm
var sc = this.selModel.getSelectedCell();
if(sc && sc[0] === row && sc[1] === col){
this.startEditing(row, col);
}
}else{
if(this.selModel.isSelected(row)){
this.startEditing(row, col);
}
}
}
},
// private
onEditComplete : function(ed, value, startValue){
this.editing = false;
this.lastActiveEditor = this.activeEditor;
this.activeEditor = null;
var r = ed.record,
field = this.colModel.getDataIndex(ed.col);
value = this.postEditValue(value, startValue, r, field);
if(this.forceValidation === true || String(value) !== String(startValue)){
var e = {
grid: this,
record: r,
field: field,
originalValue: startValue,
value: value,
row: ed.row,
column: ed.col,
cancel:false
};
if(this.fireEvent("validateedit", e) !== false && !e.cancel && String(value) !== String(startValue)){
r.set(field, e.value);
delete e.cancel;
this.fireEvent("afteredit", e);
}
}
this.view.focusCell(ed.row, ed.col);
},
/**
* Starts editing the specified for the specified row/column
* @param {Number} rowIndex
* @param {Number} colIndex
*/
startEditing : function(row, col){
this.stopEditing();
if(this.colModel.isCellEditable(col, row)){
this.view.ensureVisible(row, col, true);
var r = this.store.getAt(row),
field = this.colModel.getDataIndex(col),
e = {
grid: this,
record: r,
field: field,
value: r.data[field],
row: row,
column: col,
cancel:false
};
if(this.fireEvent("beforeedit", e) !== false && !e.cancel){
this.editing = true;
var ed = this.colModel.getCellEditor(col, row);
if(!ed){
return;
}
if(!ed.rendered){
ed.parentEl = this.view.getEditorParent(ed);
ed.on({
scope: this,
render: {
fn: function(c){
c.field.focus(false, true);
},
single: true,
scope: this
},
specialkey: function(field, e){
this.getSelectionModel().onEditorKey(field, e);
},
complete: this.onEditComplete,
canceledit: this.stopEditing.createDelegate(this, [true])
});
}
Ext.apply(ed, {
row : row,
col : col,
record : r
});
this.lastEdit = {
row: row,
col: col
};
this.activeEditor = ed;
// Set the selectSameEditor flag if we are reusing the same editor again and
// need to prevent the editor from firing onBlur on itself.
ed.selectSameEditor = (this.activeEditor == this.lastActiveEditor);
var v = this.preEditValue(r, field);
ed.startEdit(this.view.getCell(row, col).firstChild, Ext.isDefined(v) ? v : '');
// Clear the selectSameEditor flag
(function(){
delete ed.selectSameEditor;
}).defer(50);
}
}
},
// private
preEditValue : function(r, field){
var value = r.data[field];
return this.autoEncode && Ext.isString(value) ? Ext.util.Format.htmlDecode(value) : value;
},
// private
postEditValue : function(value, originalValue, r, field){
return this.autoEncode && Ext.isString(value) ? Ext.util.Format.htmlEncode(value) : value;
},
/**
* Stops any active editing
* @param {Boolean} cancel (optional) True to cancel any changes
*/
stopEditing : function(cancel){
if(this.editing){
// Store the lastActiveEditor to check if it is changing
var ae = this.lastActiveEditor = this.activeEditor;
if(ae){
ae[cancel === true ? 'cancelEdit' : 'completeEdit']();
this.view.focusCell(ae.row, ae.col);
}
this.activeEditor = null;
}
this.editing = false;
}
});
Ext.reg('editorgrid', Ext.grid.EditorGridPanel);// private
// This is a support class used internally by the Grid components
Ext.grid.GridEditor = function(field, config){
Ext.grid.GridEditor.superclass.constructor.call(this, field, config);
field.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
});

7
htdocs/ext-3.2.0/pkgs/pkg-grid-editor.js
File diff suppressed because it is too large
View File

5266
htdocs/ext-3.2.0/pkgs/pkg-grid-foundation-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/pkgs/pkg-grid-foundation.js
File diff suppressed because it is too large
View File

577
htdocs/ext-3.2.0/pkgs/pkg-grid-grouping-debug.js

@ -0,0 +1,577 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
/**
* @class Ext.grid.GroupingView
* @extends Ext.grid.GridView
* Adds the ability for single level grouping to the grid. A {@link Ext.data.GroupingStore GroupingStore}
* must be used to enable grouping. Some grouping characteristics may also be configured at the
* {@link Ext.grid.Column Column level}<div class="mdetail-params"><ul>
* <li><code>{@link Ext.grid.Column#emptyGroupText emptyGroupText}</code></li>
* <li><code>{@link Ext.grid.Column#groupable groupable}</code></li>
* <li><code>{@link Ext.grid.Column#groupName groupName}</code></li>
* <li><code>{@link Ext.grid.Column#groupRender groupRender}</code></li>
* </ul></div>
* <p>Sample usage:</p>
* <pre><code>
var grid = new Ext.grid.GridPanel({
// A groupingStore is required for a GroupingView
store: new {@link Ext.data.GroupingStore}({
autoDestroy: true,
reader: reader,
data: xg.dummyData,
sortInfo: {field: 'company', direction: 'ASC'},
{@link Ext.data.GroupingStore#groupOnSort groupOnSort}: true,
{@link Ext.data.GroupingStore#remoteGroup remoteGroup}: true,
{@link Ext.data.GroupingStore#groupField groupField}: 'industry'
}),
colModel: new {@link Ext.grid.ColumnModel}({
columns:[
{id:'company',header: 'Company', width: 60, dataIndex: 'company'},
// {@link Ext.grid.Column#groupable groupable}, {@link Ext.grid.Column#groupName groupName}, {@link Ext.grid.Column#groupRender groupRender} are also configurable at column level
{header: 'Price', renderer: Ext.util.Format.usMoney, dataIndex: 'price', {@link Ext.grid.Column#groupable groupable}: false},
{header: 'Change', dataIndex: 'change', renderer: Ext.util.Format.usMoney},
{header: 'Industry', dataIndex: 'industry'},
{header: 'Last Updated', renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}
],
defaults: {
sortable: true,
menuDisabled: false,
width: 20
}
}),
view: new Ext.grid.GroupingView({
{@link Ext.grid.GridView#forceFit forceFit}: true,
// custom grouping text template to display the number of items per group
{@link #groupTextTpl}: '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Items" : "Item"]})'
}),
frame:true,
width: 700,
height: 450,
collapsible: true,
animCollapse: false,
title: 'Grouping Example',
iconCls: 'icon-grid',
renderTo: document.body
});
* </code></pre>
* @constructor
* @param {Object} config
*/
Ext.grid.GroupingView = Ext.extend(Ext.grid.GridView, {
/**
* @cfg {String} groupByText Text displayed in the grid header menu for grouping by a column
* (defaults to 'Group By This Field').
*/
groupByText : 'Group By This Field',
/**
* @cfg {String} showGroupsText Text displayed in the grid header for enabling/disabling grouping
* (defaults to 'Show in Groups').
*/
showGroupsText : 'Show in Groups',
/**
* @cfg {Boolean} hideGroupedColumn <tt>true</tt> to hide the column that is currently grouped (defaults to <tt>false</tt>)
*/
hideGroupedColumn : false,
/**
* @cfg {Boolean} showGroupName If <tt>true</tt> will display a prefix plus a ': ' before the group field value
* in the group header line. The prefix will consist of the <tt><b>{@link Ext.grid.Column#groupName groupName}</b></tt>
* (or the configured <tt><b>{@link Ext.grid.Column#header header}</b></tt> if not provided) configured in the
* {@link Ext.grid.Column} for each set of grouped rows (defaults to <tt>true</tt>).
*/
showGroupName : true,
/**
* @cfg {Boolean} startCollapsed <tt>true</tt> to start all groups collapsed (defaults to <tt>false</tt>)
*/
startCollapsed : false,
/**
* @cfg {Boolean} enableGrouping <tt>false</tt> to disable grouping functionality (defaults to <tt>true</tt>)
*/
enableGrouping : true,
/**
* @cfg {Boolean} enableGroupingMenu <tt>true</tt> to enable the grouping control in the column menu (defaults to <tt>true</tt>)
*/
enableGroupingMenu : true,
/**
* @cfg {Boolean} enableNoGroups <tt>true</tt> to allow the user to turn off grouping (defaults to <tt>true</tt>)
*/
enableNoGroups : true,
/**
* @cfg {String} emptyGroupText The text to display when there is an empty group value (defaults to <tt>'(None)'</tt>).
* May also be specified per column, see {@link Ext.grid.Column}.{@link Ext.grid.Column#emptyGroupText emptyGroupText}.
*/
emptyGroupText : '(None)',
/**
* @cfg {Boolean} ignoreAdd <tt>true</tt> to skip refreshing the view when new rows are added (defaults to <tt>false</tt>)
*/
ignoreAdd : false,
/**
* @cfg {String} groupTextTpl The template used to render the group header (defaults to <tt>'{text}'</tt>).
* This is used to format an object which contains the following properties:
* <div class="mdetail-params"><ul>
* <li><b>group</b> : String<p class="sub-desc">The <i>rendered</i> value of the group field.
* By default this is the unchanged value of the group field. If a <tt><b>{@link Ext.grid.Column#groupRenderer groupRenderer}</b></tt>
* is specified, it is the result of a call to that function.</p></li>
* <li><b>gvalue</b> : Object<p class="sub-desc">The <i>raw</i> value of the group field.</p></li>
* <li><b>text</b> : String<p class="sub-desc">The configured header (as described in <tt>{@link #showGroupName})</tt>
* if <tt>{@link #showGroupName}</tt> is <tt>true</tt>) plus the <i>rendered</i> group field value.</p></li>
* <li><b>groupId</b> : String<p class="sub-desc">A unique, generated ID which is applied to the
* View Element which contains the group.</p></li>
* <li><b>startRow</b> : Number<p class="sub-desc">The row index of the Record which caused group change.</p></li>
* <li><b>rs</b> : Array<p class="sub-desc">Contains a single element: The Record providing the data
* for the row which caused group change.</p></li>
* <li><b>cls</b> : String<p class="sub-desc">The generated class name string to apply to the group header Element.</p></li>
* <li><b>style</b> : String<p class="sub-desc">The inline style rules to apply to the group header Element.</p></li>
* </ul></div></p>
* See {@link Ext.XTemplate} for information on how to format data using a template. Possible usage:<pre><code>
var grid = new Ext.grid.GridPanel({
...
view: new Ext.grid.GroupingView({
groupTextTpl: '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Items" : "Item"]})'
}),
});
* </code></pre>
*/
groupTextTpl : '{text}',
/**
* @cfg {String} groupMode Indicates how to construct the group identifier. <tt>'value'</tt> constructs the id using
* raw value, <tt>'display'</tt> constructs the id using the rendered value. Defaults to <tt>'value'</tt>.
*/
groupMode: 'value',
/**
* @cfg {Function} groupRenderer This property must be configured in the {@link Ext.grid.Column} for
* each column.
*/
// private
initTemplates : function(){
Ext.grid.GroupingView.superclass.initTemplates.call(this);
this.state = {};
var sm = this.grid.getSelectionModel();
sm.on(sm.selectRow ? 'beforerowselect' : 'beforecellselect',
this.onBeforeRowSelect, this);
if(!this.startGroup){
this.startGroup = new Ext.XTemplate(
'<div id="{groupId}" class="x-grid-group {cls}">',
'<div id="{groupId}-hd" class="x-grid-group-hd" style="{style}"><div class="x-grid-group-title">', this.groupTextTpl ,'</div></div>',
'<div id="{groupId}-bd" class="x-grid-group-body">'
);
}
this.startGroup.compile();
if (!this.endGroup) {
this.endGroup = '</div></div>';
}
},
// private
findGroup : function(el){
return Ext.fly(el).up('.x-grid-group', this.mainBody.dom);
},
// private
getGroups : function(){
return this.hasRows() ? this.mainBody.dom.childNodes : [];
},
// private
onAdd : function(ds, records, index) {
if (this.canGroup() && !this.ignoreAdd) {
var ss = this.getScrollState();
this.fireEvent('beforerowsinserted', ds, index, index + (records.length-1));
this.refresh();
this.restoreScroll(ss);
this.fireEvent('rowsinserted', ds, index, index + (records.length-1));
} else if (!this.canGroup()) {
Ext.grid.GroupingView.superclass.onAdd.apply(this, arguments);
}
},
// private
onRemove : function(ds, record, index, isUpdate){
Ext.grid.GroupingView.superclass.onRemove.apply(this, arguments);
var g = document.getElementById(record._groupId);
if(g && g.childNodes[1].childNodes.length < 1){
Ext.removeNode(g);
}
this.applyEmptyText();
},
// private
refreshRow : function(record){
if(this.ds.getCount()==1){
this.refresh();
}else{
this.isUpdating = true;
Ext.grid.GroupingView.superclass.refreshRow.apply(this, arguments);
this.isUpdating = false;
}
},
// private
beforeMenuShow : function(){
var item, items = this.hmenu.items, disabled = this.cm.config[this.hdCtxIndex].groupable === false;
if((item = items.get('groupBy'))){
item.setDisabled(disabled);
}
if((item = items.get('showGroups'))){
item.setDisabled(disabled);
item.setChecked(this.enableGrouping, true);
}
},
// private
renderUI : function(){
Ext.grid.GroupingView.superclass.renderUI.call(this);
this.mainBody.on('mousedown', this.interceptMouse, 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);
}
},
processEvent: function(name, e){
Ext.grid.GroupingView.superclass.processEvent.call(this, name, e);
var hd = e.getTarget('.x-grid-group-hd', this.mainBody);
if(hd){
// group value is at the end of the string
var field = this.getGroupField(),
prefix = this.getPrefix(field),
groupValue = hd.id.substring(prefix.length);
// remove trailing '-hd'
groupValue = groupValue.substr(0, groupValue.length - 3);
if(groupValue){
this.grid.fireEvent('group' + name, this.grid, field, groupValue, e);
}
}
},
// private
onGroupByClick : function(){
this.enableGrouping = true;
this.grid.store.groupBy(this.cm.getDataIndex(this.hdCtxIndex));
this.grid.fireEvent('groupchange', this, this.grid.store.getGroupState());
this.beforeMenuShow(); // Make sure the checkboxes get properly set when changing groups
this.refresh();
},
// private
onShowGroupsClick : function(mi, checked){
this.enableGrouping = checked;
if(checked){
this.onGroupByClick();
}else{
this.grid.store.clearGrouping();
this.grid.fireEvent('groupchange', this, null);
}
},
/**
* Toggle the group that contains the specific row.
* @param {Number} rowIndex The row inside the group
* @param {Boolean} expanded (optional)
*/
toggleRowIndex : function(rowIndex, expanded){
if(!this.canGroup()){
return;
}
var row = this.getRow(rowIndex);
if(row){
this.toggleGroup(this.findGroup(row), expanded);
}
},
/**
* Toggles the specified group if no value is passed, otherwise sets the expanded state of the group to the value passed.
* @param {String} groupId The groupId assigned to the group (see getGroupId)
* @param {Boolean} expanded (optional)
*/
toggleGroup : function(group, expanded){
var gel = Ext.get(group);
expanded = Ext.isDefined(expanded) ? expanded : gel.hasClass('x-grid-group-collapsed');
if(this.state[gel.id] !== expanded){
this.grid.stopEditing(true);
this.state[gel.id] = expanded;
gel[expanded ? 'removeClass' : 'addClass']('x-grid-group-collapsed');
}
},
/**
* Toggles all groups if no value is passed, otherwise sets the expanded state of all groups to the value passed.
* @param {Boolean} expanded (optional)
*/
toggleAllGroups : function(expanded){
var groups = this.getGroups();
for(var i = 0, len = groups.length; i < len; i++){
this.toggleGroup(groups[i], expanded);
}
},
/**
* Expands all grouped rows.
*/
expandAllGroups : function(){
this.toggleAllGroups(true);
},
/**
* Collapses all grouped rows.
*/
collapseAllGroups : function(){
this.toggleAllGroups(false);
},
// private
interceptMouse : function(e){
var hd = e.getTarget('.x-grid-group-hd', this.mainBody);
if(hd){
e.stopEvent();
this.toggleGroup(hd.parentNode);
}
},
// private
getGroup : function(v, r, groupRenderer, rowIndex, colIndex, ds){
var g = groupRenderer ? groupRenderer(v, {}, r, rowIndex, colIndex, ds) : String(v);
if(g === '' || g === '&#160;'){
g = this.cm.config[colIndex].emptyGroupText || this.emptyGroupText;
}
return g;
},
// private
getGroupField : function(){
return this.grid.store.getGroupState();
},
// private
afterRender : function(){
if(!this.ds || !this.cm){
return;
}
Ext.grid.GroupingView.superclass.afterRender.call(this);
if(this.grid.deferRowRender){
this.updateGroupWidths();
}
},
// private
renderRows : function(){
var groupField = this.getGroupField();
var eg = !!groupField;
// if they turned off grouping and the last grouped field is hidden
if(this.hideGroupedColumn) {
var colIndex = this.cm.findColumnIndex(groupField),
hasLastGroupField = Ext.isDefined(this.lastGroupField);
if(!eg && hasLastGroupField){
this.mainBody.update('');
this.cm.setHidden(this.cm.findColumnIndex(this.lastGroupField), false);
delete this.lastGroupField;
}else if (eg && !hasLastGroupField){
this.lastGroupField = groupField;
this.cm.setHidden(colIndex, true);
}else if (eg && hasLastGroupField && groupField !== this.lastGroupField) {
this.mainBody.update('');
var oldIndex = this.cm.findColumnIndex(this.lastGroupField);
this.cm.setHidden(oldIndex, false);
this.lastGroupField = groupField;
this.cm.setHidden(colIndex, true);
}
}
return Ext.grid.GroupingView.superclass.renderRows.apply(
this, arguments);
},
// private
doRender : function(cs, rs, ds, startRow, colCount, stripe){
if(rs.length < 1){
return '';
}
if(!this.canGroup() || this.isUpdating){
return Ext.grid.GroupingView.superclass.doRender.apply(this, arguments);
}
var groupField = this.getGroupField(),
colIndex = this.cm.findColumnIndex(groupField),
g,
gstyle = 'width:' + this.getTotalWidth() + ';',
cfg = this.cm.config[colIndex],
groupRenderer = cfg.groupRenderer || cfg.renderer,
prefix = this.showGroupName ? (cfg.groupName || cfg.header)+': ' : '',
groups = [],
curGroup, i, len, gid;
for(i = 0, len = rs.length; i < len; i++){
var rowIndex = startRow + i,
r = rs[i],
gvalue = r.data[groupField];
g = this.getGroup(gvalue, r, groupRenderer, rowIndex, colIndex, ds);
if(!curGroup || curGroup.group != g){
gid = this.constructId(gvalue, groupField, colIndex);
// if state is defined use it, however state is in terms of expanded
// so negate it, otherwise use the default.
this.state[gid] = !(Ext.isDefined(this.state[gid]) ? !this.state[gid] : this.startCollapsed);
curGroup = {
group: g,
gvalue: gvalue,
text: prefix + g,
groupId: gid,
startRow: rowIndex,
rs: [r],
cls: this.state[gid] ? '' : 'x-grid-group-collapsed',
style: gstyle
};
groups.push(curGroup);
}else{
curGroup.rs.push(r);
}
r._groupId = gid;
}
var buf = [];
for(i = 0, len = groups.length; i < len; i++){
g = groups[i];
this.doGroupStart(buf, g, cs, ds, colCount);
buf[buf.length] = Ext.grid.GroupingView.superclass.doRender.call(
this, cs, g.rs, ds, g.startRow, colCount, stripe);
this.doGroupEnd(buf, g, cs, ds, colCount);
}
return buf.join('');
},
/**
* Dynamically tries to determine the groupId of a specific value
* @param {String} value
* @return {String} The group id
*/
getGroupId : function(value){
var field = this.getGroupField();
return this.constructId(value, field, this.cm.findColumnIndex(field));
},
// private
constructId : function(value, field, idx){
var cfg = this.cm.config[idx],
groupRenderer = cfg.groupRenderer || cfg.renderer,
val = (this.groupMode == 'value') ? value : this.getGroup(value, {data:{}}, groupRenderer, 0, idx, this.ds);
return this.getPrefix(field) + Ext.util.Format.htmlEncode(val);
},
// private
canGroup : function(){
return this.enableGrouping && !!this.getGroupField();
},
// private
getPrefix: function(field){
return this.grid.getGridEl().id + '-gp-' + field + '-';
},
// private
doGroupStart : function(buf, g, cs, ds, colCount){
buf[buf.length] = this.startGroup.apply(g);
},
// private
doGroupEnd : function(buf, g, cs, ds, colCount){
buf[buf.length] = this.endGroup;
},
// private
getRows : function(){
if(!this.canGroup()){
return Ext.grid.GroupingView.superclass.getRows.call(this);
}
var r = [],
gs = this.getGroups(),
g,
i = 0,
len = gs.length,
j,
jlen;
for(; i < len; ++i){
g = gs[i].childNodes[1];
if(g){
g = g.childNodes;
for(j = 0, jlen = g.length; j < jlen; ++j){
r[r.length] = g[j];
}
}
}
return r;
},
// private
updateGroupWidths : function(){
if(!this.canGroup() || !this.hasRows()){
return;
}
var tw = Math.max(this.cm.getTotalWidth(), this.el.dom.offsetWidth-this.getScrollOffset()) +'px';
var gs = this.getGroups();
for(var i = 0, len = gs.length; i < len; i++){
gs[i].firstChild.style.width = tw;
}
},
// private
onColumnWidthUpdated : function(col, w, tw){
Ext.grid.GroupingView.superclass.onColumnWidthUpdated.call(this, col, w, tw);
this.updateGroupWidths();
},
// private
onAllColumnWidthsUpdated : function(ws, tw){
Ext.grid.GroupingView.superclass.onAllColumnWidthsUpdated.call(this, ws, tw);
this.updateGroupWidths();
},
// private
onColumnHiddenUpdated : function(col, hidden, tw){
Ext.grid.GroupingView.superclass.onColumnHiddenUpdated.call(this, col, hidden, tw);
this.updateGroupWidths();
},
// private
onLayout : function(){
this.updateGroupWidths();
},
// private
onBeforeRowSelect : function(sm, rowIndex){
this.toggleRowIndex(rowIndex, true);
}
});
// private
Ext.grid.GroupingView.GROUP_ID = 1000;

7
htdocs/ext-3.2.0/pkgs/pkg-grid-grouping.js
File diff suppressed because it is too large
View File

463
htdocs/ext-3.2.0/pkgs/pkg-grid-property-debug.js

@ -0,0 +1,463 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
/**
* @class Ext.grid.PropertyRecord
* A specific {@link Ext.data.Record} type that represents a name/value pair and is made to work with the
* {@link Ext.grid.PropertyGrid}. Typically, PropertyRecords do not need to be created directly as they can be
* created implicitly by simply using the appropriate data configs either via the {@link Ext.grid.PropertyGrid#source}
* config property or by calling {@link Ext.grid.PropertyGrid#setSource}. However, if the need arises, these records
* can also be created explicitly as shwon below. Example usage:
* <pre><code>
var rec = new Ext.grid.PropertyRecord({
name: 'Birthday',
value: new Date(Date.parse('05/26/1972'))
});
// Add record to an already populated grid
grid.store.addSorted(rec);
</code></pre>
* @constructor
* @param {Object} config A data object in the format: {name: [name], value: [value]}. The specified value's type
* will be read automatically by the grid to determine the type of editor to use when displaying it.
*/
Ext.grid.PropertyRecord = Ext.data.Record.create([
{name:'name',type:'string'}, 'value'
]);
/**
* @class Ext.grid.PropertyStore
* @extends Ext.util.Observable
* A custom wrapper for the {@link Ext.grid.PropertyGrid}'s {@link Ext.data.Store}. This class handles the mapping
* between the custom data source objects supported by the grid and the {@link Ext.grid.PropertyRecord} format
* required for compatibility with the underlying store. Generally this class should not need to be used directly --
* the grid's data should be accessed from the underlying store via the {@link #store} property.
* @constructor
* @param {Ext.grid.Grid} grid The grid this store will be bound to
* @param {Object} source The source data config object
*/
Ext.grid.PropertyStore = Ext.extend(Ext.util.Observable, {
constructor : function(grid, source){
this.grid = grid;
this.store = new Ext.data.Store({
recordType : Ext.grid.PropertyRecord
});
this.store.on('update', this.onUpdate, this);
if(source){
this.setSource(source);
}
Ext.grid.PropertyStore.superclass.constructor.call(this);
},
// protected - should only be called by the grid. Use grid.setSource instead.
setSource : function(o){
this.source = o;
this.store.removeAll();
var data = [];
for(var k in o){
if(this.isEditableValue(o[k])){
data.push(new Ext.grid.PropertyRecord({name: k, value: o[k]}, k));
}
}
this.store.loadRecords({records: data}, {}, true);
},
// private
onUpdate : function(ds, record, type){
if(type == Ext.data.Record.EDIT){
var v = record.data.value;
var oldValue = record.modified.value;
if(this.grid.fireEvent('beforepropertychange', this.source, record.id, v, oldValue) !== false){
this.source[record.id] = v;
record.commit();
this.grid.fireEvent('propertychange', this.source, record.id, v, oldValue);
}else{
record.reject();
}
}
},
// private
getProperty : function(row){
return this.store.getAt(row);
},
// private
isEditableValue: function(val){
return Ext.isPrimitive(val) || Ext.isDate(val);
},
// private
setValue : function(prop, value, create){
var r = this.getRec(prop);
if(r){
r.set('value', value);
this.source[prop] = value;
}else if(create){
// only create if specified.
this.source[prop] = value;
r = new Ext.grid.PropertyRecord({name: prop, value: value}, prop);
this.store.add(r);
}
},
// private
remove : function(prop){
var r = this.getRec(prop);
if(r){
this.store.remove(r);
delete this.source[prop];
}
},
// private
getRec : function(prop){
return this.store.getById(prop);
},
// protected - should only be called by the grid. Use grid.getSource instead.
getSource : function(){
return this.source;
}
});
/**
* @class Ext.grid.PropertyColumnModel
* @extends Ext.grid.ColumnModel
* A custom column model for the {@link Ext.grid.PropertyGrid}. Generally it should not need to be used directly.
* @constructor
* @param {Ext.grid.Grid} grid The grid this store will be bound to
* @param {Object} source The source data config object
*/
Ext.grid.PropertyColumnModel = Ext.extend(Ext.grid.ColumnModel, {
// private - strings used for locale support
nameText : 'Name',
valueText : 'Value',
dateFormat : 'm/j/Y',
trueText: 'true',
falseText: 'false',
constructor : function(grid, store){
var g = Ext.grid,
f = Ext.form;
this.grid = grid;
g.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 = store;
var bfield = new f.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 g.GridEditor(new f.DateField({selectOnFocus:true})),
'string' : new g.GridEditor(new f.TextField({selectOnFocus:true})),
'number' : new g.GridEditor(new f.NumberField({selectOnFocus:true, style:'text-align:left;'})),
'boolean' : new g.GridEditor(bfield, {
autoSize: 'both'
})
};
this.renderCellDelegate = this.renderCell.createDelegate(this);
this.renderPropDelegate = this.renderProp.createDelegate(this);
},
// private
renderDate : function(dateVal){
return dateVal.dateFormat(this.dateFormat);
},
// private
renderBool : function(bVal){
return this[bVal ? 'trueText' : 'falseText'];
},
// private
isCellEditable : function(colIndex, rowIndex){
return colIndex == 1;
},
// private
getRenderer : function(col){
return col == 1 ?
this.renderCellDelegate : this.renderPropDelegate;
},
// private
renderProp : function(v){
return this.getPropertyName(v);
},
// private
renderCell : function(val, meta, rec){
var renderer = this.grid.customRenderers[rec.get('name')];
if(renderer){
return renderer.apply(this, arguments);
}
var rv = val;
if(Ext.isDate(val)){
rv = this.renderDate(val);
}else if(typeof val == 'boolean'){
rv = this.renderBool(val);
}
return Ext.util.Format.htmlEncode(rv);
},
// private
getPropertyName : function(name){
var pn = this.grid.propertyNames;
return pn && pn[name] ? pn[name] : name;
},
// private
getCellEditor : function(colIndex, rowIndex){
var p = this.store.getProperty(rowIndex),
n = p.data.name,
val = p.data.value;
if(this.grid.customEditors[n]){
return this.grid.customEditors[n];
}
if(Ext.isDate(val)){
return this.editors.date;
}else if(typeof val == 'number'){
return this.editors.number;
}else if(typeof val == 'boolean'){
return this.editors['boolean'];
}else{
return this.editors.string;
}
},
// inherit docs
destroy : function(){
Ext.grid.PropertyColumnModel.superclass.destroy.call(this);
for(var ed in this.editors){
Ext.destroy(this.editors[ed]);
}
}
});
/**
* @class Ext.grid.PropertyGrid
* @extends Ext.grid.EditorGridPanel
* A specialized grid implementation intended to mimic the traditional property grid as typically seen in
* development IDEs. Each row in the grid represents a property of some object, and the data is stored
* as a set of name/value pairs in {@link Ext.grid.PropertyRecord}s. Example usage:
* <pre><code>
var grid = new Ext.grid.PropertyGrid({
title: 'Properties Grid',
autoHeight: true,
width: 300,
renderTo: 'grid-ct',
source: {
"(name)": "My Object",
"Created": new Date(Date.parse('10/15/2006')),
"Available": false,
"Version": .01,
"Description": "A test object"
}
});
</code></pre>
* @constructor
* @param {Object} config The grid config object
*/
Ext.grid.PropertyGrid = Ext.extend(Ext.grid.EditorGridPanel, {
/**
* @cfg {Object} propertyNames An object containing property name/display name pairs.
* If specified, the display name will be shown in the name column instead of the property name.
*/
/**
* @cfg {Object} source A data object to use as the data source of the grid (see {@link #setSource} for details).
*/
/**
* @cfg {Object} customEditors An object containing name/value pairs of custom editor type definitions that allow
* the grid to support additional types of editable fields. By default, the grid supports strongly-typed editing
* of strings, dates, numbers and booleans using built-in form editors, but any custom type can be supported and
* associated with a custom input control by specifying a custom editor. The name of the editor
* type should correspond with the name of the property that will use the editor. Example usage:
* <pre><code>
var grid = new Ext.grid.PropertyGrid({
...
customEditors: {
'Start Time': new Ext.grid.GridEditor(new Ext.form.TimeField({selectOnFocus:true}))
},
source: {
'Start Time': '10:00 AM'
}
});
</code></pre>
*/
/**
* @cfg {Object} source A data object to use as the data source of the grid (see {@link #setSource} for details).
*/
/**
* @cfg {Object} customRenderers An object containing name/value pairs of custom renderer type definitions that allow
* the grid to support custom rendering of fields. By default, the grid supports strongly-typed rendering
* of strings, dates, numbers and booleans using built-in form editors, but any custom type can be supported and
* associated with the type of the value. The name of the renderer type should correspond with the name of the property
* that it will render. Example usage:
* <pre><code>
var grid = new Ext.grid.PropertyGrid({
...
customRenderers: {
Available: function(v){
if(v){
return '<span style="color: green;">Yes</span>';
}else{
return '<span style="color: red;">No</span>';
}
}
},
source: {
Available: true
}
});
</code></pre>
*/
// private config overrides
enableColumnMove:false,
stripeRows:false,
trackMouseOver: false,
clicksToEdit:1,
enableHdMenu : false,
viewConfig : {
forceFit:true
},
// private
initComponent : function(){
this.customRenderers = this.customRenderers || {};
this.customEditors = this.customEditors || {};
this.lastEditRow = null;
var store = new Ext.grid.PropertyStore(this);
this.propStore = store;
var cm = new Ext.grid.PropertyColumnModel(this, store);
store.store.sort('name', 'ASC');
this.addEvents(
/**
* @event beforepropertychange
* Fires before a property value changes. Handlers can return false to cancel the property change
* (this will internally call {@link Ext.data.Record#reject} on the property's record).
* @param {Object} source The source data object for the grid (corresponds to the same object passed in
* as the {@link #source} config property).
* @param {String} recordId The record's id in the data store
* @param {Mixed} value The current edited property value
* @param {Mixed} oldValue The original property value prior to editing
*/
'beforepropertychange',
/**
* @event propertychange
* Fires after a property value has changed.
* @param {Object} source The source data object for the grid (corresponds to the same object passed in
* as the {@link #source} config property).
* @param {String} recordId The record's id in the data store
* @param {Mixed} value The current edited property value
* @param {Mixed} oldValue The original property value prior to editing
*/
'propertychange'
);
this.cm = cm;
this.ds = store.store;
Ext.grid.PropertyGrid.superclass.initComponent.call(this);
this.mon(this.selModel, 'beforecellselect', function(sm, rowIndex, colIndex){
if(colIndex === 0){
this.startEditing.defer(200, this, [rowIndex, 1]);
return false;
}
}, this);
},
// private
onRender : function(){
Ext.grid.PropertyGrid.superclass.onRender.apply(this, arguments);
this.getGridEl().addClass('x-props-grid');
},
// private
afterRender: function(){
Ext.grid.PropertyGrid.superclass.afterRender.apply(this, arguments);
if(this.source){
this.setSource(this.source);
}
},
/**
* Sets the source data object containing the property data. The data object can contain one or more name/value
* pairs representing all of the properties of an object to display in the grid, and this data will automatically
* be loaded into the grid's {@link #store}. The values should be supplied in the proper data type if needed,
* otherwise string type will be assumed. If the grid already contains data, this method will replace any
* existing data. See also the {@link #source} config value. Example usage:
* <pre><code>
grid.setSource({
"(name)": "My Object",
"Created": new Date(Date.parse('10/15/2006')), // date type
"Available": false, // boolean type
"Version": .01, // decimal type
"Description": "A test object"
});
</code></pre>
* @param {Object} source The data object
*/
setSource : function(source){
this.propStore.setSource(source);
},
/**
* Gets the source data object containing the property data. See {@link #setSource} for details regarding the
* format of the data object.
* @return {Object} The data object
*/
getSource : function(){
return this.propStore.getSource();
},
/**
* Sets the value of a property.
* @param {String} prop The name of the property to set
* @param {Mixed} value The value to test
* @param {Boolean} create (Optional) True to create the property if it doesn't already exist. Defaults to <tt>false</tt>.
*/
setProperty : function(prop, value, create){
this.propStore.setValue(prop, value, create);
},
/**
* Removes a property from the grid.
* @param {String} prop The name of the property to remove
*/
removeProperty : function(prop){
this.propStore.remove(prop);
}
/**
* @cfg store
* @hide
*/
/**
* @cfg colModel
* @hide
*/
/**
* @cfg cm
* @hide
*/
/**
* @cfg columns
* @hide
*/
});
Ext.reg("propertygrid", Ext.grid.PropertyGrid);

7
htdocs/ext-3.2.0/pkgs/pkg-grid-property.js

@ -0,0 +1,7 @@
/*
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
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);for(var a in this.editors){Ext.destroy(this.editors[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);

216
htdocs/ext-3.2.0/pkgs/pkg-history-debug.js

@ -0,0 +1,216 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
/**
* @class Ext.History
* @extends Ext.util.Observable
* History management component that allows you to register arbitrary tokens that signify application
* history state on navigation actions. You can then handle the history {@link #change} event in order
* to reset your application UI to the appropriate state when the user navigates forward or backward through
* the browser history stack.
* @singleton
*/
Ext.History = (function () {
var iframe, hiddenField;
var ready = false;
var currentToken;
function getHash() {
var href = top.location.href, i = href.indexOf("#");
return i >= 0 ? href.substr(i + 1) : null;
}
function doSave() {
hiddenField.value = currentToken;
}
function handleStateChange(token) {
currentToken = token;
Ext.History.fireEvent('change', token);
}
function updateIFrame (token) {
var html = ['<html><body><div id="state">',Ext.util.Format.htmlEncode(token),'</div></body></html>'].join('');
try {
var doc = iframe.contentWindow.document;
doc.open();
doc.write(html);
doc.close();
return true;
} catch (e) {
return false;
}
}
function checkIFrame() {
if (!iframe.contentWindow || !iframe.contentWindow.document) {
setTimeout(checkIFrame, 10);
return;
}
var doc = iframe.contentWindow.document;
var elem = doc.getElementById("state");
var token = elem ? elem.innerText : null;
var hash = getHash();
setInterval(function () {
doc = iframe.contentWindow.document;
elem = doc.getElementById("state");
var newtoken = elem ? elem.innerText : null;
var newHash = getHash();
if (newtoken !== token) {
token = newtoken;
handleStateChange(token);
top.location.hash = token;
hash = token;
doSave();
} else if (newHash !== hash) {
hash = newHash;
updateIFrame(newHash);
}
}, 50);
ready = true;
Ext.History.fireEvent('ready', Ext.History);
}
function startUp() {
currentToken = hiddenField.value ? hiddenField.value : getHash();
if (Ext.isIE) {
checkIFrame();
} else {
var hash = getHash();
setInterval(function () {
var newHash = getHash();
if (newHash !== hash) {
hash = newHash;
handleStateChange(hash);
doSave();
}
}, 50);
ready = true;
Ext.History.fireEvent('ready', Ext.History);
}
}
return {
/**
* The id of the hidden field required for storing the current history token.
* @type String
* @property
*/
fieldId: 'x-history-field',
/**
* The id of the iframe required by IE to manage the history stack.
* @type String
* @property
*/
iframeId: 'x-history-frame',
events:{},
/**
* Initialize the global History instance.
* @param {Boolean} onReady (optional) A callback function that will be called once the history
* component is fully initialized.
* @param {Object} scope (optional) The scope (<code>this</code> reference) in which the callback is executed. Defaults to the browser window.
*/
init: function (onReady, scope) {
if(ready) {
Ext.callback(onReady, scope, [this]);
return;
}
if(!Ext.isReady){
Ext.onReady(function(){
Ext.History.init(onReady, scope);
});
return;
}
hiddenField = Ext.getDom(Ext.History.fieldId);
if (Ext.isIE) {
iframe = Ext.getDom(Ext.History.iframeId);
}
this.addEvents(
/**
* @event ready
* Fires when the Ext.History singleton has been initialized and is ready for use.
* @param {Ext.History} The Ext.History singleton.
*/
'ready',
/**
* @event change
* Fires when navigation back or forwards within the local page's history occurs.
* @param {String} token An identifier associated with the page state at that point in its history.
*/
'change'
);
if(onReady){
this.on('ready', onReady, scope, {single:true});
}
startUp();
},
/**
* Add a new token to the history stack. This can be any arbitrary value, although it would
* commonly be the concatenation of a component id and another id marking the specifc history
* state of that component. Example usage:
* <pre><code>
// Handle tab changes on a TabPanel
tabPanel.on('tabchange', function(tabPanel, tab){
Ext.History.add(tabPanel.id + ':' + tab.id);
});
</code></pre>
* @param {String} token The value that defines a particular application-specific history state
* @param {Boolean} preventDuplicates When true, if the passed token matches the current token
* it will not save a new history step. Set to false if the same state can be saved more than once
* at the same history stack location (defaults to true).
*/
add: function (token, preventDup) {
if(preventDup !== false){
if(this.getToken() == token){
return true;
}
}
if (Ext.isIE) {
return updateIFrame(token);
} else {
top.location.hash = token;
return true;
}
},
/**
* Programmatically steps back one step in browser history (equivalent to the user pressing the Back button).
*/
back: function(){
history.go(-1);
},
/**
* Programmatically steps forward one step in browser history (equivalent to the user pressing the Forward button).
*/
forward: function(){
history.go(1);
},
/**
* Retrieves the currently-active history token.
* @return {String} The token
*/
getToken: function() {
return ready ? currentToken : getHash();
}
};
})();
Ext.apply(Ext.History, new Ext.util.Observable());

7
htdocs/ext-3.2.0/pkgs/pkg-history.js

@ -0,0 +1,7 @@
/*
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
Ext.History=(function(){var e,c;var j=false;var d;function f(){var k=top.location.href,l=k.indexOf("#");return l>=0?k.substr(l+1):null}function a(){c.value=d}function g(k){d=k;Ext.History.fireEvent("change",k)}function h(l){var k=['<html><body><div id="state">',Ext.util.Format.htmlEncode(l),"</div></body></html>"].join("");try{var n=e.contentWindow.document;n.open();n.write(k);n.close();return true}catch(m){return false}}function b(){if(!e.contentWindow||!e.contentWindow.document){setTimeout(b,10);return}var n=e.contentWindow.document;var l=n.getElementById("state");var k=l?l.innerText:null;var m=f();setInterval(function(){n=e.contentWindow.document;l=n.getElementById("state");var p=l?l.innerText:null;var o=f();if(p!==k){k=p;g(k);top.location.hash=k;m=k;a()}else{if(o!==m){m=o;h(o)}}},50);j=true;Ext.History.fireEvent("ready",Ext.History)}function i(){d=c.value?c.value:f();if(Ext.isIE){b()}else{var k=f();setInterval(function(){var l=f();if(l!==k){k=l;g(k);a()}},50);j=true;Ext.History.fireEvent("ready",Ext.History)}}return{fieldId:"x-history-field",iframeId:"x-history-frame",events:{},init:function(l,k){if(j){Ext.callback(l,k,[this]);return}if(!Ext.isReady){Ext.onReady(function(){Ext.History.init(l,k)});return}c=Ext.getDom(Ext.History.fieldId);if(Ext.isIE){e=Ext.getDom(Ext.History.iframeId)}this.addEvents("ready","change");if(l){this.on("ready",l,k,{single:true})}i()},add:function(k,l){if(l!==false){if(this.getToken()==k){return true}}if(Ext.isIE){return h(k)}else{top.location.hash=k;return true}},back:function(){history.go(-1)},forward:function(){history.go(1)},getToken:function(){return j?d:f()}}})();Ext.apply(Ext.History,new Ext.util.Observable());

1688
htdocs/ext-3.2.0/pkgs/pkg-menu-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/pkgs/pkg-menu.js
File diff suppressed because it is too large
View File

1131
htdocs/ext-3.2.0/pkgs/pkg-tabs-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/pkgs/pkg-tabs.js
File diff suppressed because it is too large
View File

1124
htdocs/ext-3.2.0/pkgs/pkg-tips-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/pkgs/pkg-tips.js
File diff suppressed because it is too large
View File

1213
htdocs/ext-3.2.0/pkgs/pkg-toolbars-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/pkgs/pkg-toolbars.js
File diff suppressed because it is too large
View File

4708
htdocs/ext-3.2.0/pkgs/pkg-tree-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/pkgs/pkg-tree.js
File diff suppressed because it is too large
View File

770
htdocs/ext-3.2.0/pkgs/resizable-debug.js

@ -0,0 +1,770 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
/**
* @class Ext.Resizable
* @extends Ext.util.Observable
* <p>Applies drag handles to an element to make it resizable. The drag handles are inserted into the element
* and positioned absolute. Some elements, such as a textarea or image, don't support this. To overcome that, you can wrap
* the textarea in a div and set 'resizeChild' to true (or to the id of the element), <b>or</b> set wrap:true in your config and
* the element will be wrapped for you automatically.</p>
* <p>Here is the list of valid resize handles:</p>
* <pre>
Value Description
------ -------------------
'n' north
's' south
'e' east
'w' west
'nw' northwest
'sw' southwest
'se' southeast
'ne' northeast
'all' all
</pre>
* <p>Here's an example showing the creation of a typical Resizable:</p>
* <pre><code>
var resizer = new Ext.Resizable('element-id', {
handles: 'all',
minWidth: 200,
minHeight: 100,
maxWidth: 500,
maxHeight: 400,
pinned: true
});
resizer.on('resize', myHandler);
</code></pre>
* <p>To hide a particular handle, set its display to none in CSS, or through script:<br>
* resizer.east.setDisplayed(false);</p>
* @constructor
* Create a new resizable component
* @param {Mixed} el The id or element to resize
* @param {Object} config configuration options
*/
Ext.Resizable = Ext.extend(Ext.util.Observable, {
constructor: function(el, config){
this.el = Ext.get(el);
if(config && config.wrap){
config.resizeChild = this.el;
this.el = this.el.wrap(typeof config.wrap == 'object' ? config.wrap : {cls:'xresizable-wrap'});
this.el.id = this.el.dom.id = config.resizeChild.id + '-rzwrap';
this.el.setStyle('overflow', 'hidden');
this.el.setPositioning(config.resizeChild.getPositioning());
config.resizeChild.clearPositioning();
if(!config.width || !config.height){
var csize = config.resizeChild.getSize();
this.el.setSize(csize.width, csize.height);
}
if(config.pinned && !config.adjustments){
config.adjustments = 'auto';
}
}
/**
* The proxy Element that is resized in place of the real Element during the resize operation.
* This may be queried using {@link Ext.Element#getBox} to provide the new area to resize to.
* Read only.
* @type Ext.Element.
* @property proxy
*/
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, config);
if(this.pinned){
this.disableTrackOver = true;
this.el.addClass('x-resizable-pinned');
}
// if the element isn't positioned, make it relative
var position = this.el.getStyle('position');
if(position != 'absolute' && position != 'fixed'){
this.el.setStyle('position', 'relative');
}
if(!this.handles){ // no handles passed, must be legacy style
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 hs = this.handles.split(/\s*?[,;]\s*?| /);
var ps = Ext.Resizable.positions;
for(var i = 0, len = hs.length; i < len; i++){
if(hs[i] && ps[hs[i]]){
var pos = ps[hs[i]];
this[pos] = new Ext.Resizable.Handle(this, pos, this.disableTrackOver, this.transparent, this.handleCls);
}
}
// legacy
this.corner = this.southeast;
if(this.handles.indexOf('n') != -1 || this.handles.indexOf('w') != -1){
this.updateBox = true;
}
this.activeHandle = null;
if(this.resizeChild){
if(typeof this.resizeChild == 'boolean'){
this.resizeChild = Ext.get(this.el.dom.firstChild, true);
}else{
this.resizeChild = Ext.get(this.resizeChild, true);
}
}
if(this.adjustments == 'auto'){
var rc = this.resizeChild;
var hw = this.west, he = this.east, hn = this.north, hs = this.south;
if(rc && (hw || hn)){
rc.position('relative');
rc.setLeft(hw ? hw.el.getWidth() : 0);
rc.setTop(hn ? hn.el.getHeight() : 0);
}
this.adjustments = [
(he ? -he.el.getWidth() : 0) + (hw ? -hw.el.getWidth() : 0),
(hn ? -hn.el.getHeight() : 0) + (hs ? -hs.el.getHeight() : 0) -1
];
}
if(this.draggable){
this.dd = this.dynamic ?
this.el.initDD(null) : this.el.initDDProxy(null, {dragElId: this.proxy.id});
this.dd.setHandleElId(this.resizeChild ? this.resizeChild.id : this.el.id);
if(this.constrainTo){
this.dd.constrainTo(this.constrainTo);
}
}
this.addEvents(
/**
* @event beforeresize
* Fired before resize is allowed. Set {@link #enabled} to false to cancel resize.
* @param {Ext.Resizable} this
* @param {Ext.EventObject} e The mousedown event
*/
'beforeresize',
/**
* @event resize
* Fired after a resize.
* @param {Ext.Resizable} this
* @param {Number} width The new width
* @param {Number} height The new height
* @param {Ext.EventObject} e The mouseup event
*/
'resize'
);
if(this.width !== null && this.height !== null){
this.resizeTo(this.width, this.height);
}else{
this.updateChildSize();
}
if(Ext.isIE){
this.el.dom.style.zoom = 1;
}
Ext.Resizable.superclass.constructor.call(this);
},
/**
* @cfg {Array/String} adjustments String 'auto' or an array [width, height] with values to be <b>added</b> to the
* resize operation's new size (defaults to <tt>[0, 0]</tt>)
*/
adjustments : [0, 0],
/**
* @cfg {Boolean} animate True to animate the resize (not compatible with dynamic sizing, defaults to false)
*/
animate : false,
/**
* @cfg {Mixed} constrainTo Constrain the resize to a particular element
*/
/**
* @cfg {Boolean} disableTrackOver True to disable mouse tracking. This is only applied at config time. (defaults to false)
*/
disableTrackOver : false,
/**
* @cfg {Boolean} draggable Convenience to initialize drag drop (defaults to false)
*/
draggable: false,
/**
* @cfg {Number} duration Animation duration if animate = true (defaults to 0.35)
*/
duration : 0.35,
/**
* @cfg {Boolean} dynamic True to resize the element while dragging instead of using a proxy (defaults to false)
*/
dynamic : false,
/**
* @cfg {String} easing Animation easing if animate = true (defaults to <tt>'easingOutStrong'</tt>)
*/
easing : 'easeOutStrong',
/**
* @cfg {Boolean} enabled False to disable resizing (defaults to true)
*/
enabled : true,
/**
* @property enabled Writable. False if resizing is disabled.
* @type Boolean
*/
/**
* @cfg {String} handles String consisting of the resize handles to display (defaults to undefined).
* Specify either <tt>'all'</tt> or any of <tt>'n s e w ne nw se sw'</tt>.
*/
handles : false,
/**
* @cfg {Boolean} multiDirectional <b>Deprecated</b>. Deprecated style of adding multi-direction resize handles.
*/
multiDirectional : false,
/**
* @cfg {Number} height The height of the element in pixels (defaults to null)
*/
height : null,
/**
* @cfg {Number} width The width of the element in pixels (defaults to null)
*/
width : null,
/**
* @cfg {Number} heightIncrement The increment to snap the height resize in pixels
* (only applies if <code>{@link #dynamic}==true</code>). Defaults to <tt>0</tt>.
*/
heightIncrement : 0,
/**
* @cfg {Number} widthIncrement The increment to snap the width resize in pixels
* (only applies if <code>{@link #dynamic}==true</code>). Defaults to <tt>0</tt>.
*/
widthIncrement : 0,
/**
* @cfg {Number} minHeight The minimum height for the element (defaults to 5)
*/
minHeight : 5,
/**
* @cfg {Number} minWidth The minimum width for the element (defaults to 5)
*/
minWidth : 5,
/**
* @cfg {Number} maxHeight The maximum height for the element (defaults to 10000)
*/
maxHeight : 10000,
/**
* @cfg {Number} maxWidth The maximum width for the element (defaults to 10000)
*/
maxWidth : 10000,
/**
* @cfg {Number} minX The minimum x for the element (defaults to 0)
*/
minX: 0,
/**
* @cfg {Number} minY The minimum x for the element (defaults to 0)
*/
minY: 0,
/**
* @cfg {Boolean} pinned True to ensure that the resize handles are always visible, false to display them only when the
* user mouses over the resizable borders. This is only applied at config time. (defaults to false)
*/
pinned : false,
/**
* @cfg {Boolean} preserveRatio True to preserve the original ratio between height
* and width during resize (defaults to false)
*/
preserveRatio : false,
/**
* @cfg {Boolean/String/Element} resizeChild True to resize the first child, or id/element to resize (defaults to false)
*/
resizeChild : false,
/**
* @cfg {Boolean} transparent True for transparent handles. This is only applied at config time. (defaults to false)
*/
transparent: false,
/**
* @cfg {Ext.lib.Region} resizeRegion Constrain the resize to a particular region
*/
/**
* @cfg {Boolean} wrap True to wrap an element with a div if needed (required for textareas and images, defaults to false)
* in favor of the handles config option (defaults to false)
*/
/**
* @cfg {String} handleCls A css class to add to each handle. Defaults to <tt>''</tt>.
*/
/**
* Perform a manual resize and fires the 'resize' event.
* @param {Number} width
* @param {Number} height
*/
resizeTo : function(width, height){
this.el.setSize(width, height);
this.updateChildSize();
this.fireEvent('resize', this, width, height, null);
},
// private
startSizing : function(e, handle){
this.fireEvent('beforeresize', this, e);
if(this.enabled){ // 2nd enabled check in case disabled before beforeresize handler
if(!this.overlay){
this.overlay = this.el.createProxy({tag: 'div', cls: 'x-resizable-overlay', html: '&#160;'}, Ext.getBody());
this.overlay.unselectable();
this.overlay.enableDisplayMode('block');
this.overlay.on({
scope: this,
mousemove: this.onMouseMove,
mouseup: this.onMouseUp
});
}
this.overlay.setStyle('cursor', handle.el.getStyle('cursor'));
this.resizing = true;
this.startBox = this.el.getBox();
this.startPoint = e.getXY();
this.offsets = [(this.startBox.x + this.startBox.width) - this.startPoint[0],
(this.startBox.y + this.startBox.height) - this.startPoint[1]];
this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
this.overlay.show();
if(this.constrainTo) {
var ct = Ext.get(this.constrainTo);
this.resizeRegion = ct.getRegion().adjust(
ct.getFrameWidth('t'),
ct.getFrameWidth('l'),
-ct.getFrameWidth('b'),
-ct.getFrameWidth('r')
);
}
this.proxy.setStyle('visibility', 'hidden'); // workaround display none
this.proxy.show();
this.proxy.setBox(this.startBox);
if(!this.dynamic){
this.proxy.setStyle('visibility', 'visible');
}
}
},
// private
onMouseDown : function(handle, e){
if(this.enabled){
e.stopEvent();
this.activeHandle = handle;
this.startSizing(e, handle);
}
},
// private
onMouseUp : function(e){
this.activeHandle = null;
var size = this.resizeElement();
this.resizing = false;
this.handleOut();
this.overlay.hide();
this.proxy.hide();
this.fireEvent('resize', this, size.width, size.height, e);
},
// private
updateChildSize : function(){
if(this.resizeChild){
var el = this.el;
var child = this.resizeChild;
var adj = this.adjustments;
if(el.dom.offsetWidth){
var b = el.getSize(true);
child.setSize(b.width+adj[0], b.height+adj[1]);
}
// Second call here for IE
// The first call enables instant resizing and
// the second call corrects scroll bars if they
// exist
if(Ext.isIE){
setTimeout(function(){
if(el.dom.offsetWidth){
var b = el.getSize(true);
child.setSize(b.width+adj[0], b.height+adj[1]);
}
}, 10);
}
}
},
// private
snap : function(value, inc, min){
if(!inc || !value){
return value;
}
var newValue = value;
var m = value % inc;
if(m > 0){
if(m > (inc/2)){
newValue = value + (inc-m);
}else{
newValue = value - m;
}
}
return Math.max(min, newValue);
},
/**
* <p>Performs resizing of the associated Element. This method is called internally by this
* class, and should not be called by user code.</p>
* <p>If a Resizable is being used to resize an Element which encapsulates a more complex UI
* component such as a Panel, this method may be overridden by specifying an implementation
* as a config option to provide appropriate behaviour at the end of the resize operation on
* mouseup, for example resizing the Panel, and relaying the Panel's content.</p>
* <p>The new area to be resized to is available by examining the state of the {@link #proxy}
* Element. Example:
<pre><code>
new Ext.Panel({
title: 'Resize me',
x: 100,
y: 100,
renderTo: Ext.getBody(),
floating: true,
frame: true,
width: 400,
height: 200,
listeners: {
render: function(p) {
new Ext.Resizable(p.getEl(), {
handles: 'all',
pinned: true,
transparent: true,
resizeElement: function() {
var box = this.proxy.getBox();
p.updateBox(box);
if (p.layout) {
p.doLayout();
}
return box;
}
});
}
}
}).show();
</code></pre>
*/
resizeElement : function(){
var box = this.proxy.getBox();
if(this.updateBox){
this.el.setBox(box, false, this.animate, this.duration, null, this.easing);
}else{
this.el.setSize(box.width, box.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 box;
},
// private
constrain : function(v, diff, m, mx){
if(v - diff < m){
diff = v - m;
}else if(v - diff > mx){
diff = v - mx;
}
return diff;
},
// private
onMouseMove : function(e){
if(this.enabled && this.activeHandle){
try{// try catch so if something goes wrong the user doesn't get hung
if(this.resizeRegion && !this.resizeRegion.contains(e.getPoint())) {
return;
}
//var curXY = this.startPoint;
var curSize = this.curSize || this.startBox,
x = this.startBox.x, y = this.startBox.y,
ox = x,
oy = y,
w = curSize.width,
h = curSize.height,
ow = w,
oh = h,
mw = this.minWidth,
mh = this.minHeight,
mxw = this.maxWidth,
mxh = this.maxHeight,
wi = this.widthIncrement,
hi = this.heightIncrement,
eventXY = e.getXY(),
diffX = -(this.startPoint[0] - Math.max(this.minX, eventXY[0])),
diffY = -(this.startPoint[1] - Math.max(this.minY, eventXY[1])),
pos = this.activeHandle.position,
tw,
th;
switch(pos){
case 'east':
w += diffX;
w = Math.min(Math.max(mw, w), mxw);
break;
case 'south':
h += diffY;
h = Math.min(Math.max(mh, h), mxh);
break;
case 'southeast':
w += diffX;
h += diffY;
w = Math.min(Math.max(mw, w), mxw);
h = Math.min(Math.max(mh, h), mxh);
break;
case 'north':
diffY = this.constrain(h, diffY, mh, mxh);
y += diffY;
h -= diffY;
break;
case 'west':
diffX = this.constrain(w, diffX, mw, mxw);
x += diffX;
w -= diffX;
break;
case 'northeast':
w += diffX;
w = Math.min(Math.max(mw, w), mxw);
diffY = this.constrain(h, diffY, mh, mxh);
y += diffY;
h -= diffY;
break;
case 'northwest':
diffX = this.constrain(w, diffX, mw, mxw);
diffY = this.constrain(h, diffY, mh, mxh);
y += diffY;
h -= diffY;
x += diffX;
w -= diffX;
break;
case 'southwest':
diffX = this.constrain(w, diffX, mw, mxw);
h += diffY;
h = Math.min(Math.max(mh, h), mxh);
x += diffX;
w -= diffX;
break;
}
var sw = this.snap(w, wi, mw);
var sh = this.snap(h, hi, mh);
if(sw != w || sh != h){
switch(pos){
case 'northeast':
y -= sh - h;
break;
case 'north':
y -= sh - h;
break;
case 'southwest':
x -= sw - w;
break;
case 'west':
x -= sw - w;
break;
case 'northwest':
x -= sw - w;
y -= sh - h;
break;
}
w = sw;
h = sh;
}
if(this.preserveRatio){
switch(pos){
case 'southeast':
case 'east':
h = oh * (w/ow);
h = Math.min(Math.max(mh, h), mxh);
w = ow * (h/oh);
break;
case 'south':
w = ow * (h/oh);
w = Math.min(Math.max(mw, w), mxw);
h = oh * (w/ow);
break;
case 'northeast':
w = ow * (h/oh);
w = Math.min(Math.max(mw, w), mxw);
h = oh * (w/ow);
break;
case 'north':
tw = w;
w = ow * (h/oh);
w = Math.min(Math.max(mw, w), mxw);
h = oh * (w/ow);
x += (tw - w) / 2;
break;
case 'southwest':
h = oh * (w/ow);
h = Math.min(Math.max(mh, h), mxh);
tw = w;
w = ow * (h/oh);
x += tw - w;
break;
case 'west':
th = h;
h = oh * (w/ow);
h = Math.min(Math.max(mh, h), mxh);
y += (th - h) / 2;
tw = w;
w = ow * (h/oh);
x += tw - w;
break;
case 'northwest':
tw = w;
th = h;
h = oh * (w/ow);
h = Math.min(Math.max(mh, h), mxh);
w = ow * (h/oh);
y += th - h;
x += tw - w;
break;
}
}
this.proxy.setBounds(x, y, w, h);
if(this.dynamic){
this.resizeElement();
}
}catch(ex){}
}
},
// private
handleOver : function(){
if(this.enabled){
this.el.addClass('x-resizable-over');
}
},
// private
handleOut : function(){
if(!this.resizing){
this.el.removeClass('x-resizable-over');
}
},
/**
* Returns the element this component is bound to.
* @return {Ext.Element}
*/
getEl : function(){
return this.el;
},
/**
* Returns the resizeChild element (or null).
* @return {Ext.Element}
*/
getResizeChild : function(){
return this.resizeChild;
},
/**
* Destroys this resizable. If the element was wrapped and
* removeEl is not true then the element remains.
* @param {Boolean} removeEl (optional) true to remove the element from the DOM
*/
destroy : function(removeEl){
Ext.destroy(this.dd, this.overlay, this.proxy);
this.overlay = null;
this.proxy = null;
var ps = Ext.Resizable.positions;
for(var k in ps){
if(typeof ps[k] != 'function' && this[ps[k]]){
this[ps[k]].destroy();
}
}
if(removeEl){
this.el.update('');
Ext.destroy(this.el);
this.el = null;
}
this.purgeListeners();
},
syncHandleHeight : function(){
var h = this.el.getHeight(true);
if(this.west){
this.west.el.setHeight(h);
}
if(this.east){
this.east.el.setHeight(h);
}
}
});
// private
// hash to map config positions to true positions
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(rz, pos, disableTrackOver, transparent, cls){
if(!this.tpl){
// only initialize the template if resizable is used
var tpl = Ext.DomHelper.createTemplate(
{tag: 'div', cls: 'x-resizable-handle x-resizable-handle-{0}'}
);
tpl.compile();
Ext.Resizable.Handle.prototype.tpl = tpl;
}
this.position = pos;
this.rz = rz;
this.el = this.tpl.append(rz.el.dom, [this.position], true);
this.el.unselectable();
if(transparent){
this.el.setOpacity(0);
}
if(!Ext.isEmpty(cls)){
this.el.addClass(cls);
}
this.el.on('mousedown', this.onMouseDown, this);
if(!disableTrackOver){
this.el.on({
scope: this,
mouseover: this.onMouseOver,
mouseout: this.onMouseOut
});
}
},
// private
afterResize : function(rz){
// do nothing
},
// private
onMouseDown : function(e){
this.rz.onMouseDown(this, e);
},
// private
onMouseOver : function(e){
this.rz.handleOver(this, e);
},
// private
onMouseOut : function(e){
this.rz.handleOut(this, e);
},
// private
destroy : function(){
Ext.destroy(this.el);
this.el = null;
}
});

7
htdocs/ext-3.2.0/pkgs/resizable.js
File diff suppressed because it is too large
View File

276
htdocs/ext-3.2.0/pkgs/state-debug.js

@ -0,0 +1,276 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
/**
* @class Ext.state.Provider
* Abstract base class for state provider implementations. This class provides methods
* for encoding and decoding <b>typed</b> variables including dates and defines the
* Provider interface.
*/
Ext.state.Provider = function(){
/**
* @event statechange
* Fires when a state change occurs.
* @param {Provider} this This state provider
* @param {String} key The state key which was changed
* @param {String} value The encoded value for the state
*/
this.addEvents("statechange");
this.state = {};
Ext.state.Provider.superclass.constructor.call(this);
};
Ext.extend(Ext.state.Provider, Ext.util.Observable, {
/**
* Returns the current value for a key
* @param {String} name The key name
* @param {Mixed} defaultValue A default value to return if the key's value is not found
* @return {Mixed} The state data
*/
get : function(name, defaultValue){
return typeof this.state[name] == "undefined" ?
defaultValue : this.state[name];
},
/**
* Clears a value from the state
* @param {String} name The key name
*/
clear : function(name){
delete this.state[name];
this.fireEvent("statechange", this, name, null);
},
/**
* Sets the value for a key
* @param {String} name The key name
* @param {Mixed} value The value to set
*/
set : function(name, value){
this.state[name] = value;
this.fireEvent("statechange", this, name, value);
},
/**
* Decodes a string previously encoded with {@link #encodeValue}.
* @param {String} value The value to decode
* @return {Mixed} The decoded value
*/
decodeValue : function(cookie){
var re = /^(a|n|d|b|s|o)\:(.*)$/;
var matches = re.exec(unescape(cookie));
if(!matches || !matches[1]) return; // non state cookie
var type = matches[1];
var v = matches[2];
switch(type){
case "n":
return parseFloat(v);
case "d":
return new Date(Date.parse(v));
case "b":
return (v == "1");
case "a":
var all = [];
if(v != ''){
Ext.each(v.split('^'), function(val){
all.push(this.decodeValue(val));
}, this);
}
return all;
case "o":
var all = {};
if(v != ''){
Ext.each(v.split('^'), function(val){
var kv = val.split('=');
all[kv[0]] = this.decodeValue(kv[1]);
}, this);
}
return all;
default:
return v;
}
},
/**
* Encodes a value including type information. Decode with {@link #decodeValue}.
* @param {Mixed} value The value to encode
* @return {String} The encoded value
*/
encodeValue : function(v){
var enc;
if(typeof v == "number"){
enc = "n:" + v;
}else if(typeof v == "boolean"){
enc = "b:" + (v ? "1" : "0");
}else if(Ext.isDate(v)){
enc = "d:" + v.toGMTString();
}else if(Ext.isArray(v)){
var flat = "";
for(var i = 0, len = v.length; i < len; i++){
flat += this.encodeValue(v[i]);
if(i != len-1) flat += "^";
}
enc = "a:" + flat;
}else if(typeof v == "object"){
var flat = "";
for(var key in v){
if(typeof v[key] != "function" && v[key] !== undefined){
flat += key + "=" + this.encodeValue(v[key]) + "^";
}
}
enc = "o:" + flat.substring(0, flat.length-1);
}else{
enc = "s:" + v;
}
return escape(enc);
}
});
/**
* @class Ext.state.Manager
* This is the global state manager. By default all components that are "state aware" check this class
* for state information if you don't pass them a custom state provider. In order for this class
* to be useful, it must be initialized with a provider when your application initializes. Example usage:
<pre><code>
// in your initialization function
init : function(){
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
var win = new Window(...);
win.restoreState();
}
</code></pre>
* @singleton
*/
Ext.state.Manager = function(){
var provider = new Ext.state.Provider();
return {
/**
* Configures the default state provider for your application
* @param {Provider} stateProvider The state provider to set
*/
setProvider : function(stateProvider){
provider = stateProvider;
},
/**
* Returns the current value for a key
* @param {String} name The key name
* @param {Mixed} defaultValue The default value to return if the key lookup does not match
* @return {Mixed} The state data
*/
get : function(key, defaultValue){
return provider.get(key, defaultValue);
},
/**
* Sets the value for a key
* @param {String} name The key name
* @param {Mixed} value The state data
*/
set : function(key, value){
provider.set(key, value);
},
/**
* Clears a value from the state
* @param {String} name The key name
*/
clear : function(key){
provider.clear(key);
},
/**
* Gets the currently configured state provider
* @return {Provider} The state provider
*/
getProvider : function(){
return provider;
}
};
}();
/**
* @class Ext.state.CookieProvider
* @extends Ext.state.Provider
* The default Provider implementation which saves state via cookies.
* <br />Usage:
<pre><code>
var cp = new Ext.state.CookieProvider({
path: "/cgi-bin/",
expires: new Date(new Date().getTime()+(1000*60*60*24*30)), //30 days
domain: "extjs.com"
});
Ext.state.Manager.setProvider(cp);
</code></pre>
* @cfg {String} path The path for which the cookie is active (defaults to root '/' which makes it active for all pages in the site)
* @cfg {Date} expires The cookie expiration date (defaults to 7 days from now)
* @cfg {String} domain The domain to save the cookie for. Note that you cannot specify a different domain than
* your page is on, but you can specify a sub-domain, or simply the domain itself like 'extjs.com' to include
* all sub-domains if you need to access cookies across different sub-domains (defaults to null which uses the same
* domain the page is running on including the 'www' like 'www.extjs.com')
* @cfg {Boolean} secure True if the site is using SSL (defaults to false)
* @constructor
* Create a new CookieProvider
* @param {Object} config The configuration object
*/
Ext.state.CookieProvider = function(config){
Ext.state.CookieProvider.superclass.constructor.call(this);
this.path = "/";
this.expires = new Date(new Date().getTime()+(1000*60*60*24*7)); //7 days
this.domain = null;
this.secure = false;
Ext.apply(this, config);
this.state = this.readCookies();
};
Ext.extend(Ext.state.CookieProvider, Ext.state.Provider, {
// private
set : function(name, value){
if(typeof value == "undefined" || value === null){
this.clear(name);
return;
}
this.setCookie(name, value);
Ext.state.CookieProvider.superclass.set.call(this, name, value);
},
// private
clear : function(name){
this.clearCookie(name);
Ext.state.CookieProvider.superclass.clear.call(this, name);
},
// private
readCookies : function(){
var cookies = {};
var c = document.cookie + ";";
var re = /\s?(.*?)=(.*?);/g;
var matches;
while((matches = re.exec(c)) != null){
var name = matches[1];
var value = matches[2];
if(name && name.substring(0,3) == "ys-"){
cookies[name.substr(3)] = this.decodeValue(value);
}
}
return cookies;
},
// private
setCookie : function(name, value){
document.cookie = "ys-"+ name + "=" + this.encodeValue(value) +
((this.expires == null) ? "" : ("; expires=" + this.expires.toGMTString())) +
((this.path == null) ? "" : ("; path=" + this.path)) +
((this.domain == null) ? "" : ("; domain=" + this.domain)) +
((this.secure == true) ? "; secure" : "");
},
// private
clearCookie : function(name){
document.cookie = "ys-" + name + "=null; expires=Thu, 01-Jan-70 00:00:01 GMT" +
((this.path == null) ? "" : ("; path=" + this.path)) +
((this.domain == null) ? "" : ("; domain=" + this.domain)) +
((this.secure == true) ? "; secure" : "");
}
});

7
htdocs/ext-3.2.0/pkgs/state.js

@ -0,0 +1,7 @@
/*
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
Ext.state.Provider=function(){this.addEvents("statechange");this.state={};Ext.state.Provider.superclass.constructor.call(this)};Ext.extend(Ext.state.Provider,Ext.util.Observable,{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)\:(.*)$/;var f=e.exec(unescape(b));if(!f||!f[1]){return}var d=f[1];var a=f[2];switch(d){case"n":return parseFloat(a);case"d":return new Date(Date.parse(a));case"b":return(a=="1");case"a":var c=[];if(a!=""){Ext.each(a.split("^"),function(g){c.push(this.decodeValue(g))},this)}return c;case"o":var c={};if(a!=""){Ext.each(a.split("^"),function(h){var g=h.split("=");c[g[0]]=this.decodeValue(g[1])},this)}return c;default:return a}},encodeValue:function(c){var b;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)){var f="";for(var e=0,a=c.length;e<a;e++){f+=this.encodeValue(c[e]);if(e!=a-1){f+="^"}}b="a:"+f}else{if(typeof c=="object"){var f="";for(var d in c){if(typeof c[d]!="function"&&c[d]!==undefined){f+=d+"="+this.encodeValue(c[d])+"^"}}b="o:"+f.substring(0,f.length-1)}else{b="s:"+c}}}}}return escape(b)}});Ext.state.Manager=function(){var a=new Ext.state.Provider();return{setProvider:function(b){a=b},get:function(c,b){return a.get(c,b)},set:function(b,c){a.set(b,c)},clear:function(b){a.clear(b)},getProvider:function(){return a}}}();Ext.state.CookieProvider=function(a){Ext.state.CookieProvider.superclass.constructor.call(this);this.path="/";this.expires=new Date(new Date().getTime()+(1000*60*60*24*7));this.domain=null;this.secure=false;Ext.apply(this,a);this.state=this.readCookies()};Ext.extend(Ext.state.CookieProvider,Ext.state.Provider,{set:function(a,b){if(typeof b=="undefined"||b===null){this.clear(a);return}this.setCookie(a,b);Ext.state.CookieProvider.superclass.set.call(this,a,b)},clear:function(a){this.clearCookie(a);Ext.state.CookieProvider.superclass.clear.call(this,a)},readCookies:function(){var d={};var g=document.cookie+";";var b=/\s?(.*?)=(.*?);/g;var f;while((f=b.exec(g))!=null){var a=f[1];var e=f[2];if(a&&a.substring(0,3)=="ys-"){d[a.substr(3)]=this.decodeValue(e)}}return d},setCookie:function(a,b){document.cookie="ys-"+a+"="+this.encodeValue(b)+((this.expires==null)?"":("; expires="+this.expires.toGMTString()))+((this.path==null)?"":("; path="+this.path))+((this.domain==null)?"":("; domain="+this.domain))+((this.secure==true)?"; secure":"")},clearCookie:function(a){document.cookie="ys-"+a+"=null; expires=Thu, 01-Jan-70 00:00:01 GMT"+((this.path==null)?"":("; path="+this.path))+((this.domain==null)?"":("; domain="+this.domain))+((this.secure==true)?"; secure":"")}});

2010
htdocs/ext-3.2.0/pkgs/window-debug.js
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/pkgs/window.js
File diff suppressed because it is too large
View File

6
htdocs/ext-3.2.0/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).

43
htdocs/ext-3.2.0/resources/css/debug.css

@ -0,0 +1,43 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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;
}#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;
}

5154
htdocs/ext-3.2.0/resources/css/ext-all-notheme.css
File diff suppressed because it is too large
View File

6793
htdocs/ext-3.2.0/resources/css/ext-all.css
File diff suppressed because it is too large
View File

7
htdocs/ext-3.2.0/resources/css/reset-min.css

@ -0,0 +1,7 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.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:'';}

54
htdocs/ext-3.2.0/resources/css/structure/borders.css

@ -0,0 +1,54 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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;
}

80
htdocs/ext-3.2.0/resources/css/structure/box.css

@ -0,0 +1,80 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
/*
Creates rounded, raised boxes like on the Ext website - the markup isn't pretty:
<div class="x-box-blue">
<div class="x-box-tl"><div class="x-box-tr"><div class="x-box-tc"></div></div></div>
<div class="x-box-ml"><div class="x-box-mr"><div class="x-box-mc">
<h3>YOUR TITLE HERE (optional)</h3>
<div>YOUR CONTENT HERE</div>
</div></div></div>
<div class="x-box-bl"><div class="x-box-br"><div class="x-box-bc"></div></div></div>
</div>
*/
.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;
}

445
htdocs/ext-3.2.0/resources/css/structure/button.css

@ -0,0 +1,445 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
.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, .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: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: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;
}

45
htdocs/ext-3.2.0/resources/css/structure/combo.css

@ -0,0 +1,45 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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;
}

331
htdocs/ext-3.2.0/resources/css/structure/core.css

@ -0,0 +1,331 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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-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: 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;
}

271
htdocs/ext-3.2.0/resources/css/structure/date-picker.css

@ -0,0 +1,271 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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;
}

61
htdocs/ext-3.2.0/resources/css/structure/dd.css

@ -0,0 +1,61 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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;
}

26
htdocs/ext-3.2.0/resources/css/structure/debug.css

@ -0,0 +1,26 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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;
}

62
htdocs/ext-3.2.0/resources/css/structure/dialog.css

@ -0,0 +1,62 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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;
}
.ext-ie .x-window-dlg .ext-mb-icon {
width:44px; /* 3px IE margin issue */
}
.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;
}

92
htdocs/ext-3.2.0/resources/css/structure/editor.css

@ -0,0 +1,92 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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;
}

567
htdocs/ext-3.2.0/resources/css/structure/form.css

@ -0,0 +1,567 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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;
}
.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;
}
.ext-webkit .x-form-invalid{
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%;}
.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-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-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;
}

578
htdocs/ext-3.2.0/resources/css/structure/grid.css

@ -0,0 +1,578 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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;
}
.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: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;
}

296
htdocs/ext-3.2.0/resources/css/structure/layout.css

@ -0,0 +1,296 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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 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;
}
/* 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: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;
}

86
htdocs/ext-3.2.0/resources/css/structure/list-view.css

@ -0,0 +1,86 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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;
}

238
htdocs/ext-3.2.0/resources/css/structure/menu.css

@ -0,0 +1,238 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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: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: 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;
}
/*
* 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;
}

130
htdocs/ext-3.2.0/resources/css/structure/panel-reset.css

@ -0,0 +1,130 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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 }

445
htdocs/ext-3.2.0/resources/css/structure/panel.css

@ -0,0 +1,445 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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;
}
.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: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-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;
}
/* 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;
}

46
htdocs/ext-3.2.0/resources/css/structure/progress.css

@ -0,0 +1,46 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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%;
}

153
htdocs/ext-3.2.0/resources/css/structure/qtips.css

@ -0,0 +1,153 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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;
}

7
htdocs/ext-3.2.0/resources/css/structure/reset.css

@ -0,0 +1,7 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.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:'';}

149
htdocs/ext-3.2.0/resources/css/structure/resizable.css

@ -0,0 +1,149 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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);
}

103
htdocs/ext-3.2.0/resources/css/structure/slider.css

@ -0,0 +1,103 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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;
}

387
htdocs/ext-3.2.0/resources/css/structure/tabs.css

@ -0,0 +1,387 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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 ul.x-tab-strip li {
position: relative;
}
.ext-ie8 .x-tab-strip .x-tab-right{
margin-bottom: 0 !important;
top: 1px;
}
.ext-ie8 ul.x-tab-strip-top {
padding-top: 0;
}
.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;
}

246
htdocs/ext-3.2.0/resources/css/structure/toolbar.css

@ -0,0 +1,246 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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: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;
}

218
htdocs/ext-3.2.0/resources/css/structure/tree.css

@ -0,0 +1,218 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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:transparent;
}
.x-tree-no-lines .x-tree-elbow-end{
background:transparent;
}
.x-tree-no-lines .x-tree-elbow-line{
background:transparent;
}
/* Arrows */
.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;
}
/* Fix for ie rootVisible:false issue */
.x-tree-root-ct {
zoom:1;
}

222
htdocs/ext-3.2.0/resources/css/structure/window.css

@ -0,0 +1,222 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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: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;
}

25
htdocs/ext-3.2.0/resources/css/theme-access/borders.css

@ -0,0 +1,25 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
.x-panel-noborder .x-panel-header-noborder {
border-bottom-color:#343d4e;
}
.x-panel-noborder .x-panel-tbar-noborder .x-toolbar {
border-bottom-color:#343d4e;
}
.x-panel-noborder .x-panel-bbar-noborder .x-toolbar {
border-top-color:#343d4e;
}
.x-tab-panel-bbar-noborder .x-toolbar {
border-top-color:#343d4e;
}
.x-tab-panel-tbar-noborder .x-toolbar {
border-bottom-color:#343d4e;
}

74
htdocs/ext-3.2.0/resources/css/theme-access/box.css

@ -0,0 +1,74 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.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: 15px;
}
.x-box-mc h3 {
font-size: 18px;
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);
}

136
htdocs/ext-3.2.0/resources/css/theme-access/button.css

@ -0,0 +1,136 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
.x-btn {
font:normal 14px tahoma, verdana, helvetica;
}
.x-btn button {
font:normal 14px arial,tahoma,verdana,helvetica;
color:#fffffa;
padding-left:6px !important;
padding-right:6px !important;
}
.x-btn-over .x-btn button{
color:#fff;
}
.x-btn-noicon .x-btn-small .x-btn-text, .x-btn-text-icon .x-btn-icon-small-left .x-btn-text,
.x-btn-icon .x-btn-small .x-btn-text, .x-btn-text-icon .x-btn-icon-small-right .x-btn-text {
height:18px;
}
.x-btn-icon .x-btn-small .x-btn-text {
width:18px;
}
.x-btn-text-icon .x-btn-icon-small-left .x-btn-text {
padding-left:21px !important;
}
.x-btn-text-icon .x-btn-icon-small-right .x-btn-text {
padding-right:21px !important;
}
.x-btn-text-icon .x-btn-icon-medium-left .x-btn-text {
padding-left:29px !important;
}
.x-btn-text-icon .x-btn-icon-medium-right .x-btn-text {
padding-right:29px !important;
}
.x-btn-text-icon .x-btn-icon-large-left .x-btn-text {
padding-left:37px !important;
}
.x-btn-text-icon .x-btn-icon-large-right .x-btn-text {
padding-right:37px !important;
}
.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/access/button/btn.gif);
}
.x-btn-click .x-btn-text, .x-btn-menu-active .x-btn-text, .x-btn-pressed .x-btn-text{
color:#fff;
}
.x-btn-disabled *{
color:#eee !important;
}
.x-btn-mc em.x-btn-arrow {
background-image:url(../images/access/button/arrow.gif);
padding-right:13px;
}
.x-btn-mc em.x-btn-split {
background-image:url(../images/access/button/s-arrow.gif);
padding-right:20px;
}
.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/access/button/s-arrow-o.gif);
}
.x-btn-mc em.x-btn-arrow-bottom {
background-image:url(../images/access/button/s-arrow-b-noline.gif);
}
.x-btn-mc em.x-btn-split-bottom {
background-image:url(../images/access/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/access/button/s-arrow-bo.gif);
}
.x-btn-group-header {
color: #d2d2d2;
}
.x-btn-group-tc {
background-image: url(../images/access/button/group-tb.gif);
}
.x-btn-group-tl {
background-image: url(../images/access/button/group-cs.gif);
}
.x-btn-group-tr {
background-image: url(../images/access/button/group-cs.gif);
}
.x-btn-group-bc {
background-image: url(../images/access/button/group-tb.gif);
}
.x-btn-group-bl {
background-image: url(../images/access/button/group-cs.gif);
}
.x-btn-group-br {
background-image: url(../images/access/button/group-cs.gif);
}
.x-btn-group-ml {
background-image: url(../images/access/button/group-lr.gif);
}
.x-btn-group-mr {
background-image: url(../images/access/button/group-lr.gif);
}
.x-btn-group-notitle .x-btn-group-tc {
background-image: url(../images/access/button/group-tb.gif);
}

43
htdocs/ext-3.2.0/resources/css/theme-access/combo.css

@ -0,0 +1,43 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
.x-combo-list {
border:2px solid #232732;
background-color:#555566;
font:normal 15px tahoma, arial, helvetica, sans-serif;
}
.x-combo-list-inner {
background-color:#414551;
}
.x-combo-list-hd {
font:bold 14px tahoma, arial, helvetica, sans-serif;
color:fff;
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:#556;
}
.x-combo-list .x-combo-selected {
border-color:#e5872c !important;
background-color:#e5872c;
}
.x-combo-list .x-toolbar {
border-top-color:#98c0f4;
}
.x-combo-list-small {
font:normal 14px tahoma, arial, helvetica, sans-serif;
}

81
htdocs/ext-3.2.0/resources/css/theme-access/core.css

@ -0,0 +1,81 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
body {
background-color:#16181a;
color:#fcfcfc;
}
.ext-el-mask {
background-color: #ccc;
}
.ext-el-mask-msg {
border-color:#223;
background-color:#3f4757;
background-image:url(../images/access/box/tb-blue.gif);
}
.ext-el-mask-msg div {
background-color: #232d38;
border-color:#556;
color:#fff;
font:normal 14px tahoma, arial, helvetica, sans-serif;
}
.x-mask-loading div {
background-color:#232d38;
background-image:url(../images/access/grid/loading.gif);
}
.x-item-disabled {
color: #ddd;
}
.x-item-disabled * {
color: #ddd !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: 14px;
background-image: url(../images/access/grid/loading.gif);
}
.x-spotlight {
background-color: #ccc;
}

145
htdocs/ext-3.2.0/resources/css/theme-access/date-picker.css

@ -0,0 +1,145 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
.x-date-picker {
border-color: #737b8c;
background-color:#21252e;
}
.x-date-middle,.x-date-left,.x-date-right {
background-image: url(../images/access/shared/hd-sprite.gif);
color:#fff;
font:bold 14px "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/access/toolbar/btn-arrow-light.gif);
}
.x-date-right a {
background-image: url(../images/access/shared/right-btn.gif);
}
.x-date-left a{
background-image: url(../images/access/shared/left-btn.gif);
}
.x-date-inner th {
background-color:#363d4a;
background-image:url(../images/access/toolbar/bg.gif);
border-bottom-color:#535b5c;
font:normal 13px arial, helvetica,tahoma,sans-serif;
color:#fff;
}
.x-date-inner td {
border-color:#112;
}
.x-date-inner a {
font:normal 14px arial, helvetica,tahoma,sans-serif;
color:#fff;
padding:2px 7px 1px 3px; /* Structure to account for larger, bolder fonts in Access theme. */
}
.x-date-inner .x-date-active{
color:#000;
}
.x-date-inner .x-date-selected a{
background-color:#e5872c;
background-image:none;
border-color:#864900;
padding:1px 6px 1px 2px; /* Structure to account for larger, bolder fonts in Access theme. */
}
.x-date-inner .x-date-today a{
border-color:#99a;
}
.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:#737b8c;
background-color:#464d5a;
background-image:url(../images/access/shared/glass-bg.gif);
}
.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{
color:#fff;
background-color:#7e5530;
}
.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:13px;
color:#000;
}
.x-date-mp {
background-color:#21252e;
}
.x-date-mp td {
font:normal 14px arial, helvetica,tahoma,sans-serif;
}
.x-date-mp-btns button {
background-color:#083772;
color:#fff;
border-color: #3366cc #000055 #000055 #3366cc;
font:normal 14px arial, helvetica,tahoma,sans-serif;
}
.x-date-mp-btns {
background-color: #dfecfb;
background-image: url(../images/access/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:#fff;
}
td.x-date-mp-month a:hover,td.x-date-mp-year a:hover {
color:fff;
background-color: #7e5530;
}
td.x-date-mp-sel a {
background-color: #e5872c;
background-image: none;
border-color:#864900;
}
.x-date-mp-ybtn a {
background-image:url(../images/access/panel/tool-sprites.gif);
}
td.x-date-mp-sep {
border-right-color:#c5d2df;
}

29
htdocs/ext-3.2.0/resources/css/theme-access/dd.css

@ -0,0 +1,29 @@
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
.x-dd-drag-ghost{
color:#000;
font: normal 14px 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;
}

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

Loading…
Cancel
Save