summaryrefslogtreecommitdiff
path: root/chef-server-slice
diff options
context:
space:
mode:
Diffstat (limited to 'chef-server-slice')
-rw-r--r--chef-server-slice/LICENSE201
-rw-r--r--chef-server-slice/NOTICE10
-rw-r--r--chef-server-slice/README.rdoc135
-rw-r--r--chef-server-slice/Rakefile60
-rw-r--r--chef-server-slice/app/controllers/application.rb228
-rw-r--r--chef-server-slice/app/controllers/cookbook_attributes.rb59
-rw-r--r--chef-server-slice/app/controllers/cookbook_definitions.rb60
-rw-r--r--chef-server-slice/app/controllers/cookbook_files.rb94
-rw-r--r--chef-server-slice/app/controllers/cookbook_libraries.rb60
-rw-r--r--chef-server-slice/app/controllers/cookbook_recipes.rb59
-rw-r--r--chef-server-slice/app/controllers/cookbook_templates.rb80
-rw-r--r--chef-server-slice/app/controllers/cookbooks.rb63
-rw-r--r--chef-server-slice/app/controllers/exceptions.rb33
-rw-r--r--chef-server-slice/app/controllers/main.rb7
-rw-r--r--chef-server-slice/app/controllers/nodes.rb144
-rw-r--r--chef-server-slice/app/controllers/openid_consumer.rb133
-rw-r--r--chef-server-slice/app/controllers/openid_register.rb113
-rw-r--r--chef-server-slice/app/controllers/openid_server.rb252
-rw-r--r--chef-server-slice/app/controllers/roles.rb138
-rw-r--r--chef-server-slice/app/controllers/search.rb58
-rw-r--r--chef-server-slice/app/controllers/search_entries.rb73
-rw-r--r--chef-server-slice/app/controllers/status.rb34
-rw-r--r--chef-server-slice/app/helpers/application_helper.rb144
-rw-r--r--chef-server-slice/app/helpers/cookbook_attributes_helper.rb7
-rw-r--r--chef-server-slice/app/helpers/cookbook_definitions_helper.rb8
-rw-r--r--chef-server-slice/app/helpers/cookbook_files_helper.rb8
-rw-r--r--chef-server-slice/app/helpers/cookbook_libraries_helper.rb7
-rw-r--r--chef-server-slice/app/helpers/cookbook_recipes_helper.rb8
-rw-r--r--chef-server-slice/app/helpers/cookbook_templates_helper.rb8
-rw-r--r--chef-server-slice/app/helpers/cookbooks_helper.rb31
-rw-r--r--chef-server-slice/app/helpers/exceptions_helper.rb6
-rw-r--r--chef-server-slice/app/helpers/global_helpers.rb39
-rw-r--r--chef-server-slice/app/helpers/nodes_helper.rb33
-rw-r--r--chef-server-slice/app/helpers/openid_consumer_helper.rb8
-rw-r--r--chef-server-slice/app/helpers/openid_register_helper.rb8
-rw-r--r--chef-server-slice/app/helpers/openid_server_helper.rb6
-rw-r--r--chef-server-slice/app/helpers/openid_server_helpers.rb29
-rw-r--r--chef-server-slice/app/helpers/roles_helper.rb5
-rw-r--r--chef-server-slice/app/helpers/search_entries_helper.rb8
-rw-r--r--chef-server-slice/app/helpers/search_helper.rb38
-rw-r--r--chef-server-slice/app/helpers/status_helper.rb26
-rw-r--r--chef-server-slice/app/views/cookbook_templates/index.html.haml7
-rw-r--r--chef-server-slice/app/views/cookbooks/index.html.haml10
-rw-r--r--chef-server-slice/app/views/cookbooks/show.html.haml40
-rw-r--r--chef-server-slice/app/views/exceptions/bad_request.json.erb1
-rw-r--r--chef-server-slice/app/views/exceptions/internal_server_error.html.erb216
-rw-r--r--chef-server-slice/app/views/exceptions/not_acceptable.html.erb63
-rw-r--r--chef-server-slice/app/views/exceptions/not_found.html.erb47
-rw-r--r--chef-server-slice/app/views/exceptions/standard_error.html.erb217
-rw-r--r--chef-server-slice/app/views/layout/chef_server_slice.html.haml53
-rw-r--r--chef-server-slice/app/views/layout/login.html.haml37
-rw-r--r--chef-server-slice/app/views/main/index.html.erb1
-rw-r--r--chef-server-slice/app/views/nodes/_action.html.haml13
-rw-r--r--chef-server-slice/app/views/nodes/_form.html.haml56
-rw-r--r--chef-server-slice/app/views/nodes/_navigation.html.haml9
-rw-r--r--chef-server-slice/app/views/nodes/_resource.html.haml22
-rw-r--r--chef-server-slice/app/views/nodes/edit.html.haml7
-rw-r--r--chef-server-slice/app/views/nodes/index.html.haml25
-rw-r--r--chef-server-slice/app/views/nodes/new.html.haml6
-rw-r--r--chef-server-slice/app/views/nodes/show.html.haml60
-rw-r--r--chef-server-slice/app/views/openid_consumer/index.html.haml23
-rw-r--r--chef-server-slice/app/views/openid_consumer/start.html.haml4
-rw-r--r--chef-server-slice/app/views/openid_login/index.html.haml5
-rw-r--r--chef-server-slice/app/views/openid_register/index.html.haml19
-rw-r--r--chef-server-slice/app/views/openid_register/show.html.haml7
-rw-r--r--chef-server-slice/app/views/openid_server/decide.html.haml27
-rw-r--r--chef-server-slice/app/views/roles/_form.html.haml48
-rw-r--r--chef-server-slice/app/views/roles/_navigation.html.haml9
-rw-r--r--chef-server-slice/app/views/roles/edit.html.haml6
-rw-r--r--chef-server-slice/app/views/roles/index.html.haml22
-rw-r--r--chef-server-slice/app/views/roles/new.html.haml6
-rw-r--r--chef-server-slice/app/views/roles/show.html.haml29
-rw-r--r--chef-server-slice/app/views/search/_search_form.html.haml6
-rw-r--r--chef-server-slice/app/views/search/index.html.haml9
-rw-r--r--chef-server-slice/app/views/search/show.html.haml14
-rw-r--r--chef-server-slice/app/views/search_entries/index.html.haml8
-rw-r--r--chef-server-slice/app/views/search_entries/show.html.haml7
-rw-r--r--chef-server-slice/app/views/status/index.html.haml88
-rw-r--r--chef-server-slice/config/init.rb48
-rw-r--r--chef-server-slice/config/router.rb6
-rw-r--r--chef-server-slice/lib/chef-server-slice.rb150
-rw-r--r--chef-server-slice/lib/chef-server-slice/merbtasks.rb103
-rw-r--r--chef-server-slice/lib/chef-server-slice/slicetasks.rb20
-rw-r--r--chef-server-slice/lib/chef-server-slice/spectasks.rb53
-rw-r--r--chef-server-slice/public/facebox/README.txt4
-rw-r--r--chef-server-slice/public/facebox/b.pngbin84 -> 0 bytes
-rw-r--r--chef-server-slice/public/facebox/bl.pngbin124 -> 0 bytes
-rw-r--r--chef-server-slice/public/facebox/br.pngbin124 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/facebox/closelabel.gifbin979 -> 0 bytes
-rw-r--r--chef-server-slice/public/facebox/facebox.css95
-rw-r--r--chef-server-slice/public/facebox/facebox.js319
-rwxr-xr-xchef-server-slice/public/facebox/loading.gifbin2767 -> 0 bytes
-rw-r--r--chef-server-slice/public/facebox/tl.pngbin132 -> 0 bytes
-rw-r--r--chef-server-slice/public/facebox/tr.pngbin125 -> 0 bytes
-rw-r--r--chef-server-slice/public/images/avatar.pngbin3214 -> 0 bytes
-rw-r--r--chef-server-slice/public/images/black_big.pngbin2734 -> 0 bytes
-rw-r--r--chef-server-slice/public/images/indicator.gifbin1553 -> 0 bytes
-rw-r--r--chef-server-slice/public/images/merb.jpgbin5815 -> 0 bytes
-rw-r--r--chef-server-slice/public/images/toggle-collapse-dark.pngbin2886 -> 0 bytes
-rw-r--r--chef-server-slice/public/images/toggle-collapse-light.pngbin2864 -> 0 bytes
-rw-r--r--chef-server-slice/public/images/toggle-collapse.gifbin176 -> 0 bytes
-rw-r--r--chef-server-slice/public/images/toggle-expand-dark.pngbin2894 -> 0 bytes
-rw-r--r--chef-server-slice/public/images/toggle-expand-light.pngbin2863 -> 0 bytes
-rw-r--r--chef-server-slice/public/images/toggle-expand.gifbin181 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/Thumbs.dbbin20480 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/doc.gifbin993 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/docNode.gifbin147 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/docNodeLast.gifbin142 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/docNodeLastFirst.gifbin107 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/folder.gifbin974 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/folderNode.gifbin133 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/folderNodeFirst.gifbin878 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/folderNodeLast.gifbin130 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/folderNodeLastFirst.gifbin872 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/folderNodeOpen.gifbin129 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/folderNodeOpenFirst.gifbin868 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/folderNodeOpenLast.gifbin125 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/folderNodeOpenLastFirst.gifbin863 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/folderOpen.gifbin254 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/images/treeBuilderImages/vertLine.gifbin140 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/javascripts/JSONeditor.js1171
-rw-r--r--chef-server-slice/public/javascripts/chef.js126
-rwxr-xr-xchef-server-slice/public/javascripts/jquery-1.3.2.min.js19
-rwxr-xr-xchef-server-slice/public/javascripts/jquery-ui-1.7.1.custom.min.js65
-rw-r--r--chef-server-slice/public/javascripts/jquery.editinline.js108
-rw-r--r--chef-server-slice/public/javascripts/jquery.jeditable.mini.js30
-rw-r--r--chef-server-slice/public/javascripts/jquery.livequery.js250
-rw-r--r--chef-server-slice/public/javascripts/jquery.localscroll.js104
-rw-r--r--chef-server-slice/public/javascripts/jquery.scrollTo.js150
-rw-r--r--chef-server-slice/public/javascripts/jquery.tools.min.js17
-rw-r--r--chef-server-slice/public/javascripts/jquery.treeTable.min.js165
-rw-r--r--chef-server-slice/public/stylesheets/base.css336
-rw-r--r--chef-server-slice/public/stylesheets/chef.css157
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-bg_diagonals-small_0_aaaaaa_40x40.pngbin128 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-bg_diagonals-thick_15_444444_40x40.pngbin253 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-bg_glass_100_f0f0f0_1x400.pngbin106 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-bg_glass_50_99c2ff_1x400.pngbin123 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-bg_glass_55_fbf5d0_1x400.pngbin153 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-bg_glass_80_e6e6e6_1x400.pngbin113 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-bg_glass_95_fef1ec_1x400.pngbin119 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-bg_highlight-hard_100_f9f9f9_1x100.pngbin86 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-bg_highlight-soft_100_e7eef3_1x100.pngbin149 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-icons_222222_256x240.pngbin4379 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-icons_2694e8_256x240.pngbin4379 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-icons_2e83ff_256x240.pngbin4379 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-icons_72a7cf_256x240.pngbin4379 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-icons_888888_256x240.pngbin4379 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-icons_cd0a0a_256x240.pngbin4379 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/images/ui-icons_ffffff_256x240.pngbin4379 -> 0 bytes
-rwxr-xr-xchef-server-slice/public/stylesheets/jquery-ui-1.7.1.custom.css404
-rw-r--r--chef-server-slice/public/stylesheets/jquery.treeTable.css43
-rw-r--r--chef-server-slice/public/stylesheets/themes/bec-green/style.css290
-rw-r--r--chef-server-slice/public/stylesheets/themes/bec/style.css301
-rw-r--r--chef-server-slice/public/stylesheets/themes/blue/style.css280
-rw-r--r--chef-server-slice/public/stylesheets/themes/default/style.css267
-rw-r--r--chef-server-slice/public/stylesheets/themes/djime-cerulean/style.css298
-rw-r--r--chef-server-slice/public/stylesheets/themes/kathleene/style.css272
-rw-r--r--chef-server-slice/public/stylesheets/themes/orange/style.css263
-rw-r--r--chef-server-slice/public/stylesheets/themes/reidb-greenish/style.css301
159 files changed, 0 insertions, 9963 deletions
diff --git a/chef-server-slice/LICENSE b/chef-server-slice/LICENSE
deleted file mode 100644
index 11069edd79..0000000000
--- a/chef-server-slice/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/chef-server-slice/NOTICE b/chef-server-slice/NOTICE
deleted file mode 100644
index 02f03a496d..0000000000
--- a/chef-server-slice/NOTICE
+++ /dev/null
@@ -1,10 +0,0 @@
-Chef NOTICE
-===========
-
-Developed at HJK Solutions (http://www.hjksolutions.com).
-
-Contributors and Copyright holders:
-
- * Copyright 2008, Adam Jacob <adam@opscode.com>
- * Copyright 2008, Arjuna Christensen <aj@hjksolutions.com>
- * Copyright 2008, Ezra Zygmuntowicz <ezra@engineyard.com>
diff --git a/chef-server-slice/README.rdoc b/chef-server-slice/README.rdoc
deleted file mode 100644
index 2c2eaa706b..0000000000
--- a/chef-server-slice/README.rdoc
+++ /dev/null
@@ -1,135 +0,0 @@
-= Chef
-
-= DESCRIPTION:
-
-Chef is a configuration management tool designed to bring automation to your entire infrastructure.
-
-The Chef Wiki is the definitive source of user documentation.
-
-* http://wiki.opscode.com/display/chef/Home
-
-This README focuses on developers who want to modify Chef source code. For users who just want to run the latest and greatest Chef development version in their environment, see:
-
-* http://wiki.opscode.com/display/chef/Installing+Chef+from+HEAD
-
-= DEVELOPMENT:
-
-Before working on the code, if you plan to contribute your changes, you need to read the Opscode Contributing document.
-
-* http://wiki.opscode.com/display/opscode/Contributing
-
-You will also need to set up the repository with the appropriate branches. We document the process on the Chef Wiki.
-
-* http://wiki.opscode.com/display/opscode/Working+with+Git
-
-Once your repository is set up, you can start working on the code. We do use BDD/TDD with RSpec and Cucumber, so you'll need to get a development environment running.
-
-= ENVIRONMENT:
-
-In order to have a development environment where changes to the Chef code can be tested, we'll need to install a few things after setting up the Git repository.
-
-== Requirements:
-
-Install these via your platform's preferred method; for example apt, yum, ports, emerge, etc.
-
-* Git
-* CouchDB
-* libxml2 development package (for webrat)
-* libxslt develoment package (for webrat)
-
-Install the following RubyGems.
-
-* ohai
-* rake
-* rspec
-* cucumber
-* webrat
-* merb-core
-* roman-merb_cucumber
-
-Ohai is also by Opscode and available on GitHub, http://github.com/opscode/ohai/tree/master.
-
-roman-merb_cucumber is available from GitHub:
-
- gem install --source http://gems.github.com/ roman-merb_cucumber
-
-== Starting the Environment:
-
-Once everything is installed, run the dev:features rake task. Since the features do integration testing, root access is required.
-
- sudo rake dev:features
-
-The dev:features task:
-
-* Installs chef, chef-server, chef-server-slice gems. It will fail if required gems above are missing.
-* Starts chef-server on ports 4000 and 4001.
-* Starts chef-indexer.
-* Starts CouchDB on port 5984.
-* Starts the stompserver on port 61613.
-
-You'll know its running when you see:
-
- ~ Activating slice 'ChefServerSlice' ...
- merb : worker (port 4000) ~ Starting Mongrel at port 4000
- merb : worker (port 4000) ~ Successfully bound to port 4000
- merb : worker (port 4001) ~ Starting Mongrel at port 4001
- merb : worker (port 4001) ~ Successfully bound to port 4001
-
-You'll want to leave this terminal running the dev environment.
-
-== Web Interface:
-
-With the dev environment running, you can now access the web interface via http://localhost:4000/. Supply an OpenID to log in.
-
-== Spec testing:
-
-We use RSpec for unit/spec tests.
-
- rake spec
-
-This doesn't actually use the development environment, because it does the testing on all the Chef internals. For integration/usage testing, we use Cucumber features.
-
-== Integration testing:
-
-We test integration with Cucumber. The available feature tests are rake tasks:
-
- rake features # Run Features with Cucumber
- rake features:api # Run Features with Cucumber
- rake features:client # Run Features with Cucumber
- rake features:provider:package:macports # Run Features with Cucumber
- rake features:provider:remote_file # Run Features with Cucumber
- rake features:search # Run Features with Cucumber
-
-= LINKS:
-
-Source:
-
-* http://github.com/opscode/chef/tree/master
-
-Tickets/Issues:
-
-* http://tickets.opscode.com/
-
-Documentation:
-
-* http://wiki.opscode.com/display/chef/Home/
-
-= LICENSE:
-
-Chef - A configuration management system
-
-Author:: Adam Jacob (<adam@opscode.com>)
-Copyright:: Copyright (c) 2008, 2009 Opscode, Inc.
-License:: Apache License, Version 2.0
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/chef-server-slice/Rakefile b/chef-server-slice/Rakefile
deleted file mode 100644
index 2457cfd0a4..0000000000
--- a/chef-server-slice/Rakefile
+++ /dev/null
@@ -1,60 +0,0 @@
-require 'rubygems'
-require 'rake/gempackagetask'
-
-begin
- require 'merb-core'
- require 'merb-core/tasks/merb'
-rescue LoadError
- nil
-end
-
-GEM_NAME = "chef-server-slice"
-CHEF_SERVER_VERSION="0.7.9"
-AUTHOR = "Opscode"
-EMAIL = "chef@opscode.com"
-HOMEPAGE = "http://wiki.opscode.com/display/chef"
-SUMMARY = "A systems integration framework, built to bring the benefits of configuration management to your entire infrastructure."
-
-spec = Gem::Specification.new do |s|
- s.rubyforge_project = 'merb'
- s.name = GEM_NAME
- s.version = CHEF_SERVER_VERSION
- s.platform = Gem::Platform::RUBY
- s.has_rdoc = true
- s.extra_rdoc_files = ["README.rdoc", "LICENSE" ]
- s.summary = SUMMARY
- s.description = s.summary
- s.author = AUTHOR
- s.email = EMAIL
- s.homepage = HOMEPAGE
-
- %w{stomp stompserver ferret
- merb-core merb-haml merb-assets
- merb-helpers mongrel haml
- ruby-openid json coderay}.each { |gem| s.add_dependency gem }
-
- s.require_path = 'lib'
- s.files = %w(LICENSE README.rdoc) + Dir.glob("{app,config,lib,public}/**/*")
-end
-
-Rake::GemPackageTask.new(spec) do |pkg|
- pkg.gem_spec = spec
-end
-
-desc "Install the gem"
-task :install => :package do
- sh %{sudo gem install pkg/#{GEM_NAME}-#{CHEF_SERVER_VERSION} --no-rdoc --no-ri}
-end
-
-desc "Uninstall the gem"
-task :uninstall do
- sh %{sudo gem uninstall #{GEM_NAME} -x -v #{CHEF_SERVER_VERSION} }
-end
-
-desc "Create a gemspec file"
-task :gemspec do
- File.open("#{GEM_NAME}.gemspec", "w") do |file|
- file.puts spec.to_ruby
- end
-end
-
diff --git a/chef-server-slice/app/controllers/application.rb b/chef-server-slice/app/controllers/application.rb
deleted file mode 100644
index 0aeda27c59..0000000000
--- a/chef-server-slice/app/controllers/application.rb
+++ /dev/null
@@ -1,228 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: Christopher Brown (<cb@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require "chef" / "mixin" / "checksum"
-require "chef" / "cookbook_loader"
-
-class ChefServerSlice::Application < Merb::Controller
-
- include Chef::Mixin::Checksum
-
- controller_for_slice
-
- # Generate the absolute url for a slice - takes the slice's :path_prefix into account.
- #
- # @param slice_name<Symbol>
- # The name of the slice - in identifier_sym format (underscored).
- # @param *args<Array[Symbol,Hash]>
- # There are several possibilities regarding arguments:
- # - when passing a Hash only, the :default route of the current
- # slice will be used
- # - when a Symbol is passed, it's used as the route name
- # - a Hash with additional params can optionally be passed
- #
- # @return <String> A uri based on the requested slice.
- #
- # @example absolute_slice_url(:awesome, :format => 'html')
- # @example absolute_slice_url(:forum, :posts, :format => 'xml')
- def absolute_slice_url(slice_name, *args)
- options = extract_options_from_args!(args) || {}
- protocol = options.delete(:protocol) || request.protocol
- host = options.delete(:host) || request.host
-
- protocol + "://" + host + slice_url(slice_name,*args)
- end
-
- def fix_up_node_id
- if params.has_key?(:id)
- params[:id].gsub!(/_/, '.')
- end
- end
-
- def escape_node_id(arg=nil)
- unless arg
- arg = params[:id] if params.has_key?(:id)
- end
- arg.gsub(/\./, '_')
- end
-
- def login_required
- if session[:openid]
- return session[:openid]
- else
- self.store_location
- throw(:halt, :access_denied)
- end
- end
-
- def authorized_node
- if session[:level] == :admin
- Chef::Log.debug("Authorized as Administrator")
- true
- elsif session[:level] == :node
- Chef::Log.debug("Authorized as node")
- if session[:node_name] == params[:id].gsub(/\./, '_')
- true
- else
- raise(
- Unauthorized,
- "You are not the correct node for this action: #{session[:node_name]} instead of #{params[:id]}"
- )
- end
- else
- Chef::Log.debug("Unauthorized")
- raise Unauthorized, "You are not allowed to take this action."
- end
- end
-
- # Store the URI of the current request in the session.
- #
- # We can return to this location by calling #redirect_back_or_default.
- def store_location
- session[:return_to] = request.uri
- end
-
- # Redirect to the URI stored by the most recent store_location call or
- # to the passed default.
- def redirect_back_or_default(default)
- loc = session[:return_to] || default
- session[:return_to] = nil
- redirect loc
- end
-
- def access_denied
- case content_type
- when :html
- store_location
- redirect slice_url(:openid_consumer), :message => { :error => "You don't have access to that, please login."}
- else
- raise Unauthorized, "You must authenticate first!"
- end
- end
-
- # Load a cookbook and return a hash with a list of all the files of a
- # given segment (attributes, recipes, definitions, libraries)
- #
- # === Parameters
- # cookbook_id<String>:: The cookbook to load
- # segment<Symbol>:: :attributes, :recipes, :definitions, :libraries
- #
- # === Returns
- # <Hash>:: A hash consisting of the short name of the file in :name, and the full path
- # to the file in :file.
- def load_cookbook_segment(cookbook_id, segment)
- cl = Chef::CookbookLoader.new
- cookbook = cl[cookbook_id]
- raise NotFound unless cookbook
-
- files_list = segment_files(segment, cookbook)
-
- files = Hash.new
- files_list.each do |f|
- full = File.expand_path(f)
- name = File.basename(full)
- files[name] = {
- :name => name,
- :file => full,
- }
- end
- files
- end
-
- def segment_files(segment, cookbook)
- files_list = nil
- case segment
- when :attributes
- files_list = cookbook.attribute_files
- when :recipes
- files_list = cookbook.recipe_files
- when :definitions
- files_list = cookbook.definition_files
- when :libraries
- files_list = cookbook.lib_files
- else
- raise ArgumentError, "segment must be one of :attributes, :recipes, :definitions or :libraries"
- end
- files_list
- end
-
- def specific_cookbooks(node_name, cl)
- valid_cookbooks = Hash.new
- begin
- node = Chef::Node.load(node_name)
- recipes, default_attrs, override_attrs = node.run_list.expand('couchdb')
- rescue Net::HTTPServerException
- recipes = []
- end
- recipes.each do |recipe|
- valid_cookbooks = expand_cookbook_deps(valid_cookbooks, cl, recipe)
- end
- valid_cookbooks
- end
-
- def expand_cookbook_deps(valid_cookbooks, cl, recipe)
- cookbook = recipe
- if recipe =~ /^(.+)::/
- cookbook = $1
- end
- Chef::Log.debug("Node requires #{cookbook}")
- valid_cookbooks[cookbook] = true
- cl.metadata[cookbook.to_sym].dependencies.each do |dep, versions|
- expand_cookbook_deps(valid_cookbooks, cl, dep) unless valid_cookbooks[dep]
- end
- valid_cookbooks
- end
-
- def load_all_files(segment, node_name=nil)
- cl = Chef::CookbookLoader.new
- files = Array.new
- valid_cookbooks = node_name ? specific_cookbooks(node_name, cl) : {}
- cl.each do |cookbook|
- if node_name
- next unless valid_cookbooks[cookbook.name.to_s]
- end
- segment_files(segment, cookbook).each do |sf|
- mo = sf.match("cookbooks/#{cookbook.name}/#{segment}/(.+)")
- file_name = mo[1]
- files << {
- :cookbook => cookbook.name,
- :name => file_name,
- :checksum => checksum(sf)
- }
- end
- end
- files
- end
-
- def get_available_recipes
- cl = Chef::CookbookLoader.new
- available_recipes = cl.sort{ |a,b| a.name.to_s <=> b.name.to_s }.inject([]) do |result, element|
- element.recipes.sort.each do |r|
- if r =~ /^(.+)::default$/
- result << $1
- else
- result << r
- end
- end
- result
- end
- available_recipes
- end
-
-end
diff --git a/chef-server-slice/app/controllers/cookbook_attributes.rb b/chef-server-slice/app/controllers/cookbook_attributes.rb
deleted file mode 100644
index fd888448b0..0000000000
--- a/chef-server-slice/app/controllers/cookbook_attributes.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: Christopher Brown (<cb@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'chef' / 'mixin' / 'checksum'
-
-class ChefServerSlice::CookbookAttributes < ChefServerSlice::Application
-
- provides :html, :json
-
- before :login_required
-
- include Chef::Mixin::Checksum
-
- def load_cookbook_attributes()
- @attribute_files = load_cookbook_segment(params[:cookbook_id], :attributes)
- end
-
- def index
- if params[:id]
- show
- else
- load_cookbook_attributes()
- display @attribute_files
- end
- end
-
- def show
- only_provides :json
- load_cookbook_attributes
- raise NotFound, "Cannot find a suitable attribute file!" unless @attribute_files.has_key?(params[:id])
- to_send = @attribute_files[params[:id]][:file]
- current_checksum = checksum(to_send)
- Chef::Log.debug("old sum: #{params[:checksum]}, new sum: #{current_checksum}")
- if current_checksum == params[:checksum]
- display "File #{to_send} has not changed", :status => 304
- else
- send_file(to_send)
- end
- end
-
-end
-
-
diff --git a/chef-server-slice/app/controllers/cookbook_definitions.rb b/chef-server-slice/app/controllers/cookbook_definitions.rb
deleted file mode 100644
index da5654fbcc..0000000000
--- a/chef-server-slice/app/controllers/cookbook_definitions.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: Christopher Brown (<cb@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'chef' / 'mixin' / 'checksum'
-
-class ChefServerSlice::CookbookDefinitions < ChefServerSlice::Application
-
- provides :html, :json
-
- before :login_required
-
- include Chef::Mixin::Checksum
-
- def load_cookbook_definitions()
- @definition_files = load_cookbook_segment(params[:cookbook_id], :definitions)
- end
-
- def index
- if params[:id]
- show
- else
- load_cookbook_definitions()
- display @definition_files
- end
- end
-
- def show
- only_provides :json
- load_cookbook_definitions
- raise NotFound, "Cannot find a suitable definition file!" unless @definition_files.has_key?(params[:id])
-
- to_send = @definition_files[params[:id]][:file]
- current_checksum = checksum(to_send)
- Chef::Log.debug("Old sum: #{params[:checksum]}, New sum: #{current_checksum}")
- if current_checksum == params[:checksum]
- display "File #{to_send} has not changed", :status => 304
- else
- send_file(to_send)
- end
- end
-
-end
-
-
diff --git a/chef-server-slice/app/controllers/cookbook_files.rb b/chef-server-slice/app/controllers/cookbook_files.rb
deleted file mode 100644
index b739366d83..0000000000
--- a/chef-server-slice/app/controllers/cookbook_files.rb
+++ /dev/null
@@ -1,94 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: Christopher Brown (<cb@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'chef' / 'mixin' / 'checksum'
-require 'chef' / 'cookbook_loader'
-require 'chef' / 'mixin' / 'find_preferred_file'
-
-class ChefServerSlice::CookbookFiles < ChefServerSlice::Application
-
- provides :html, :json
- before :login_required
-
- include Chef::Mixin::Checksum
- include Chef::Mixin::FindPreferredFile
-
- layout nil
-
- def index
- if params[:id]
- if params[:recursive] == "true"
- show_directory
- else
- show
- end
- else
- @remote_files = load_cookbook_files(params[:cookbook_id], :remote_file)
- display @remote_files
- end
- end
-
- def show
- only_provides :json
- begin
- to_send = find_preferred_file(
- params[:cookbook_id],
- :remote_file,
- params[:id],
- params[:fqdn],
- params[:platform],
- params[:version]
- )
- rescue Chef::Exceptions::FileNotFound
- raise NotFound, "Cannot find a suitable file!"
- end
-
- current_checksum = checksum(to_send)
- Chef::Log.debug("old sum: #{params[:checksum]}, new sum: #{current_checksum}")
- if current_checksum == params[:checksum]
- render "File #{to_send} has not changed", :status => 304
- else
- send_file(to_send)
- end
- end
-
- def show_directory
- dir_to_send = find_preferred_file(
- params[:cookbook_id],
- :remote_file,
- params[:id],
- params[:fqdn],
- params[:platform],
- params[:version]
- )
- unless (dir_to_send && File.directory?(dir_to_send))
- raise NotFound, "Cannot find a suitable directory"
- end
-
- @directory_listing = Array.new
- Dir[::File.join(dir_to_send, '**', '*')].sort { |a,b| b <=> a }.each do |file_to_send|
- next if File.directory?(file_to_send)
- file_to_send =~ /^#{dir_to_send}\/(.+)$/
- @directory_listing << $1
- end
-
- display @directory_listing
- end
-
-end
diff --git a/chef-server-slice/app/controllers/cookbook_libraries.rb b/chef-server-slice/app/controllers/cookbook_libraries.rb
deleted file mode 100644
index 72b296f351..0000000000
--- a/chef-server-slice/app/controllers/cookbook_libraries.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: Christopher Brown (<cb@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'chef' / 'mixin' / 'checksum'
-require 'chef' / 'cookbook_loader'
-
-class ChefServerSlice::CookbookLibraries < ChefServerSlice::Application
-
- provides :html, :json
- before :login_required
-
- include Chef::Mixin::Checksum
-
- def load_cookbook_libs()
- @lib_files = load_cookbook_segment(params[:cookbook_id], :libraries)
- end
-
- def index
- if params[:id]
- show
- else
- load_cookbook_libs()
- display @lib_files
- end
- end
-
- def show
- only_provides :json
- load_cookbook_libs
- raise NotFound, "Cannot find a suitable library file!" unless @lib_files.has_key?(params[:id])
-
- to_send = @lib_files[params[:id]][:file]
- current_checksum = checksum(to_send)
- Chef::Log.debug("Old sum: #{params[:checksum]}, New sum: #{current_checksum}")
- if current_checksum == params[:checksum]
- display "File #{to_send} has not changed", :status => 304
- else
- send_file(to_send)
- end
- end
-
-end
-
-
diff --git a/chef-server-slice/app/controllers/cookbook_recipes.rb b/chef-server-slice/app/controllers/cookbook_recipes.rb
deleted file mode 100644
index fbcb427eb3..0000000000
--- a/chef-server-slice/app/controllers/cookbook_recipes.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: Christopher Brown (<cb@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'chef' / 'mixin' / 'checksum'
-
-class ChefServerSlice::CookbookRecipes < ChefServerSlice::Application
-
- provides :html, :json
- before :login_required
-
- include Chef::Mixin::Checksum
-
- def load_cookbook_recipes()
- @recipe_files = load_cookbook_segment(params[:cookbook_id], :recipes)
- end
-
- def index
- if params[:id]
- show
- else
- load_cookbook_recipes()
- display @recipe_files
- end
- end
-
- def show
- only_provides :json
- load_cookbook_recipes
- raise NotFound, "Cannot find a suitable recipe file!" unless @recipe_files.has_key?(params[:id])
-
- to_send = @recipe_files[params[:id]][:file]
- current_checksum = checksum(to_send)
- Chef::Log.debug("old sum: #{params[:checksum]}, new sum: #{current_checksum}")
- if current_checksum == params[:checksum]
- display "File #{to_send} has not changed", :status => 304
- else
- send_file(to_send)
- end
- end
-
-end
-
-
diff --git a/chef-server-slice/app/controllers/cookbook_templates.rb b/chef-server-slice/app/controllers/cookbook_templates.rb
deleted file mode 100644
index bce79bd573..0000000000
--- a/chef-server-slice/app/controllers/cookbook_templates.rb
+++ /dev/null
@@ -1,80 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: Christopher Brown (<cb@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'chef' / 'mixin' / 'checksum'
-require 'chef' / 'cookbook_loader'
-require 'chef' / 'mixin' / 'find_preferred_file'
-
-class ChefServerSlice::CookbookTemplates < ChefServerSlice::Application
-
- provides :html, :json
- before :login_required
-
- include Chef::Mixin::Checksum
- include Chef::Mixin::FindPreferredFile
-
- # def load_cookbook_templates()
- # @cl = Chef::CookbookLoader.new
- # @cookbook = @cl[params[:cookbook_id]]
- # raise NotFound unless @cookbook
- #
- # @templates = Hash.new
- # @cookbook.template_files.each do |tf|
- # full = File.expand_path(tf)
- # name = File.basename(full)
- # tf =~ /^.+#{params[:cookbook_id]}[\\|\/]templates[\\|\/](.+?)[\\|\/]#{name}/
- # singlecopy = $1
- # @templates[full] = {
- # :name => name,
- # :singlecopy => singlecopy,
- # :file => full,
- # }
- # end
- # @templates
- # end
-
- def index
- if params[:id]
- show
- else
- @templates = load_cookbook_files(params[:cookbook_id], :template)
- display @templates
- end
- end
-
- def show
- to_send = find_preferred_file(
- params[:cookbook_id],
- :template,
- params[:id],
- params[:fqdn],
- params[:platform],
- params[:version]
- )
- raise NotFound, "Cannot find a suitable template!" unless to_send
- current_checksum = checksum(to_send)
- Chef::Log.debug("old sum: #{params[:checksum]}, new sum: #{current_checksum}")
- if current_checksum == params[:checksum]
- render "Template #{to_send} has not changed", :status => 304
- else
- send_file(to_send)
- end
- end
-
-end
diff --git a/chef-server-slice/app/controllers/cookbooks.rb b/chef-server-slice/app/controllers/cookbooks.rb
deleted file mode 100644
index 24c8be5f17..0000000000
--- a/chef-server-slice/app/controllers/cookbooks.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: Christopher Brown (<cb@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'chef' / 'cookbook_loader'
-
-class ChefServerSlice::Cookbooks < ChefServerSlice::Application
-
- provides :html, :json
- before :login_required
-
- def index
- @cl = Chef::CookbookLoader.new
- display @cl
- end
-
- def show
- @cl = Chef::CookbookLoader.new
- @cookbook = @cl[params[:id]]
- raise NotFound unless @cookbook
- display @cookbook
- end
-
- def recipe_files
- node = params.has_key?('node') ? params[:node] : nil
- @recipe_files = load_all_files(:recipes, node)
- display @recipe_files
- end
-
- def attribute_files
- node = params.has_key?('node') ? params[:node] : nil
- @attribute_files = load_all_files(:attributes, node)
- display @attribute_files
- end
-
- def definition_files
- node = params.has_key?('node') ? params[:node] : nil
- @definition_files = load_all_files(:definitions, node)
- display @definition_files
- end
-
- def library_files
- node = params.has_key?('node') ? params[:node] : nil
- @lib_files = load_all_files(:libraries, node)
- display @lib_files
- end
-
-end
diff --git a/chef-server-slice/app/controllers/exceptions.rb b/chef-server-slice/app/controllers/exceptions.rb
deleted file mode 100644
index f3f43d25da..0000000000
--- a/chef-server-slice/app/controllers/exceptions.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: Christopher Brown (<cb@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-class ChefServerSlice::Exceptions < ChefServerSlice::Application
-
- provides :html, :json
-
- def standard_error
- Merb.logger.warn(request.content_type)
- if request.accept =~ /application\/json/
- display({ "error" => request.exceptions })
- else
- raise request.exceptions.first
- end
- end
-
-end
diff --git a/chef-server-slice/app/controllers/main.rb b/chef-server-slice/app/controllers/main.rb
deleted file mode 100644
index 871328943e..0000000000
--- a/chef-server-slice/app/controllers/main.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-class ChefServerSlice::Main < ChefServerSlice::Application
-
- def index
- render
- end
-
-end
diff --git a/chef-server-slice/app/controllers/nodes.rb b/chef-server-slice/app/controllers/nodes.rb
deleted file mode 100644
index 4faa3c727e..0000000000
--- a/chef-server-slice/app/controllers/nodes.rb
+++ /dev/null
@@ -1,144 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: Christopher Brown (<cb@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'chef' / 'node'
-
-class ChefServerSlice::Nodes < ChefServerSlice::Application
-
- provides :html, :json
-
- before :fix_up_node_id
- before :login_required
- before :authorized_node, :only => [ :update, :destroy ]
-
- def index
- @node_list = Chef::Node.list
- display(@node_list.collect { |n| absolute_slice_url(:node, escape_node_id(n)) })
- end
-
- def show
- begin
- @node = Chef::Node.load(params[:id])
- rescue Net::HTTPServerException => e
- raise NotFound, "Cannot load node #{params[:id]}"
- end
- # TODO - might as well expand the run list here, too, rather than take multiple round trips.
- recipes, defaults, overrides = @node.run_list.expand("couchdb")
- @node.default = defaults
- @node.override = overrides
- display @node
- end
-
- def new
- @node = Chef::Node.new
- @available_recipes = get_available_recipes
- @available_roles = Chef::Role.list.sort
- @run_list = @node.run_list
- render
- end
-
- def edit
- begin
- @node = Chef::Node.load(params[:id])
- rescue Net::HTTPServerException => e
- raise NotFound, "Cannot load node #{params[:id]}"
- end
- @available_recipes = get_available_recipes
- @available_roles = Chef::Role.list.sort
- @run_list = @node.run_list
- render
- end
-
- def create
- if params.has_key?("inflated_object")
- @node = params["inflated_object"]
- exists = true
- begin
- Chef::Node.load(@node.name)
- rescue Net::HTTPServerException
- exists = false
- end
- raise Forbidden, "Node already exists" if exists
- self.status = 201
- @node.save
- display({ :uri => absolute_slice_url(:node, escape_node_id(@node.name)) })
- else
- begin
- @node = Chef::Node.new
- @node.name params[:name]
- @node.attribute = JSON.parse(params[:attributes])
- @node.run_list params[:for_node]
- @node.save
- redirect(slice_url(:nodes), :message => { :notice => "Created Node #{@node.name}" })
- rescue
- @node.attribute = JSON.parse(params[:attributes])
- @available_recipes = get_available_recipes
- @available_roles = Chef::Role.list.sort
- @run_list = params[:for_node]
- @_message = { :error => $! }
- render :new
- end
- end
- end
-
- def update
- begin
- @node = Chef::Node.load(params[:id])
- rescue Net::HTTPServerException => e
- raise NotFound, "Cannot load node #{params[:id]}"
- end
-
- if params.has_key?("inflated_object")
- updated = params['inflated_object']
- @node.run_list.reset(updated.run_list)
- @node.attribute = updated.attribute
- @node.save
- display(@node)
- else
- begin
- @node.run_list.reset(params[:for_node] ? params[:for_node] : [])
- @node.attribute = JSON.parse(params[:attributes])
- @node.save
- @_message = { :notice => "Updated Node" }
- render :show
- rescue
- @available_recipes = get_available_recipes
- @available_roles = Chef::Role.list.sort
- @run_list = Chef::RunList.new
- @run_list.reset(params[:for_node])
- render :edit
- end
- end
- end
-
- def destroy
- begin
- @node = Chef::Node.load(params[:id])
- rescue Net::HTTPServerException => e
- raise NotFound, "Cannot load node #{params[:id]}"
- end
- @node.destroy
- if request.accept == 'application/json'
- display @node
- else
- redirect(absolute_slice_url(:nodes), {:message => { :notice => "Node #{params[:id]} deleted successfully" }, :permanent => true})
- end
- end
-
-end
diff --git a/chef-server-slice/app/controllers/openid_consumer.rb b/chef-server-slice/app/controllers/openid_consumer.rb
deleted file mode 100644
index e42ef2bb74..0000000000
--- a/chef-server-slice/app/controllers/openid_consumer.rb
+++ /dev/null
@@ -1,133 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: Christopher Brown (<cb@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'pathname'
-require 'openid'
-require (Chef::Config[:openid_cstore_couchdb] ? 'openid-store-couchdb' : 'openid/store/filesystem')
-
-class ChefServerSlice::OpenidConsumer < ChefServerSlice::Application
-
- provides :html, :json
-
- def index
- if request.xhr?
- render :layout => false
- else
- render :layout => 'login'
- end
- end
-
- def start
- oid = params[:openid_identifier]
- begin
- oidreq = consumer.begin(oid)
- rescue OpenID::OpenIDError => e
- raise BadRequest, "Discovery failed for #{oid}: #{e}"
- end
-
- return_to = absolute_slice_url(:openid_consumer_complete)
- realm = absolute_slice_url(:openid_consumer)
-
- if oidreq.send_redirect?(realm, return_to, params[:immediate])
- return redirect(oidreq.redirect_url(realm, return_to, params[:immediate]))
- else
- @form_text = oidreq.form_markup(realm, return_to, params[:immediate], {'id' => 'openid_form'})
- render
- end
- end
-
- def login
- oid = params[:openid_identifier]
- raise(Unauthorized, "Sorry, #{oid} is not an authorized OpenID.") unless is_authorized_openid_identifier?(oid, Chef::Config[:authorized_openid_identifiers])
- raise(Unauthorized, "Sorry, #{oid} is not an authorized OpenID Provider.") unless is_authorized_openid_provider?(oid, Chef::Config[:authorized_openid_providers])
- start
- end
-
- def complete
- # FIXME - url_for some action is not necessarily the current URL.
- current_url = absolute_slice_url(:openid_consumer_complete)
- parameters = params.reject{|k,v| k == "controller" || k == "action"}
- oidresp = consumer.complete(parameters, current_url)
- case oidresp.status
- when OpenID::Consumer::FAILURE
- raise BadRequest, "Verification failed: #{oidresp.message}" + (oidresp.display_identifier ? " for identifier '#{oidresp.display_identifier}'" : "")
- when OpenID::Consumer::SUCCESS
- session[:openid] = oidresp.identity_url
- if oidresp.display_identifier =~ /openid\/server\/node\/(.+)$/
- reg_name = $1
- reg = Chef::OpenIDRegistration.load(reg_name)
- Chef::Log.error("#{reg_name} is an admin #{reg.admin}")
- session[:level] = reg.admin ? :admin : :node
- session[:node_name] = $1
- else
- session[:level] = :admin
- end
- redirect_back_or_default(absolute_slice_url(:nodes))
- return "Verification of #{oidresp.display_identifier} succeeded."
- when OpenID::Consumer::SETUP_NEEDED
- return "Immediate request failed - Setup Needed"
- when OpenID::Consumer::CANCEL
- return "OpenID transaction cancelled."
- else
- end
- redirect absolute_slice_url(:openid_consumer)
- end
-
- def logout
- [:openid,:level,:node_name].each { |n| session.delete(n) }
- redirect slice_url(:top)
- end
-
- private
- def is_authorized_openid_provider?(openid, authorized_providers)
- Chef::Log.debug("checking for valid openid provider: openid: #{openid}, authorized providers: #{authorized_providers}")
- if authorized_providers and openid
- if authorized_providers.length > 0
- authorized_providers.detect { |p| Chef::Log.debug("openid: #{openid} (#{openid.class}), p: #{p} (#{p.class})"); openid.match(p) }
- else
- true
- end
- else
- true
- end
- end
-
- def is_authorized_openid_identifier?(openid, authorized_identifiers)
- Chef::Log.debug("checking for valid openid identifier: openid: #{openid}, authorized openids: #{authorized_identifiers}")
- if authorized_identifiers and openid
- if authorized_identifiers.length > 0
- authorized_identifiers.detect { |p| Chef::Log.debug("openid: #{openid} (#{openid.class}), p: #{p} (#{p.class})"); openid == p }
- else
- true
- end
- else
- true
- end
- end
-
- def consumer
- @consumer ||= OpenID::Consumer.new(session,
- if Chef::Config[:openid_cstore_couchdb]
- OpenID::Store::CouchDB.new(Chef::Config[:couchdb_url])
- else
- OpenID::Store::Filesystem.new(Chef::Config[:openid_cstore_path])
- end)
- end
-
-end
diff --git a/chef-server-slice/app/controllers/openid_register.rb b/chef-server-slice/app/controllers/openid_register.rb
deleted file mode 100644
index 1a15762447..0000000000
--- a/chef-server-slice/app/controllers/openid_register.rb
+++ /dev/null
@@ -1,113 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: Christopher Brown (<cb@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'openid'
-require 'chef' / 'openid_registration'
-
-class ChefServerSlice::OpenidRegister < ChefServerSlice::Application
-
- provides :html, :json
-
- before :fix_up_node_id
- before :login_required, :only => [ :index, :update, :destroy, :validate, :admin ]
- before :authorized_node, :only => [ :update, :destroy, :validate, :admin ]
-
- def index
- @headers['X-XRDS-Location'] = Chef::Config[:openid_url] + "/openid/server/server/xrds"
- @registered_nodes = Chef::OpenIDRegistration.list(true)
- Chef::Log.debug(@registered_nodes.inspect)
- display @registered_nodes
- end
-
- def show
- begin
- @registered_node = Chef::OpenIDRegistration.load(params[:id])
- rescue Net::HTTPServerException => e
- if e.message =~ /^404/
- raise NotFound, "Cannot load node registration for #{params[:id]}"
- else
- raise e
- end
- end
- Chef::Log.debug(@registered_node.inspect)
- display @registered_node
- end
-
- def create
- params.has_key?(:id) or raise BadRequest, "You must provide an id to register"
- params.has_key?(:password) or raise BadRequest, "You must provide a password to register"
- if Chef::OpenIDRegistration.has_key?(params[:id])
- raise BadRequest, "You cannot re-register #{params[:id]}!"
- end
- @registered_node = Chef::OpenIDRegistration.new
- @registered_node.name = params[:id]
- @registered_node.set_password(params[:password])
- if Chef::Config[:validation_token]
- if params[:validation_token] == Chef::Config[:validation_token]
- @registered_node.validated = true
- else
- @registered_node.validated = false
- end
- else
- @registered_node.validated = false
- end
- @registered_node.save
- display @registered_node
- end
-
- def update
- raise BadRequest, "You cannot update your registration -- delete #{params[:id]} and re-register"
- end
-
- def destroy
- begin
- r = Chef::OpenIDRegistration.load(params[:id])
- rescue Exception => e
- raise BadRequest, "Cannot find the registration for #{params[:id]}"
- end
- r.destroy
- if content_type == :html
- redirect slice_url(:registrations)
- else
- display({ :message => "Deleted registration for #{params[:id]}"})
- end
- end
-
- def validate
- begin
- r = Chef::OpenIDRegistration.load(params[:id])
- rescue Exception => e
- raise BadRequest, "Cannot find the registration for #{params[:id]}"
- end
- r.validated = r.validated ? false : true
- r.save
- redirect slice_url(:registrations)
- end
-
- def admin
- begin
- r = Chef::OpenIDRegistration.load(params[:id])
- rescue Exception => e
- raise BadRequest, "Cannot find the registration for #{params[:id]}"
- end
- r.admin = r.admin ? false : true
- r.save
- redirect slice_url(:registrations)
- end
-end
diff --git a/chef-server-slice/app/controllers/openid_server.rb b/chef-server-slice/app/controllers/openid_server.rb
deleted file mode 100644
index 17dd564e09..0000000000
--- a/chef-server-slice/app/controllers/openid_server.rb
+++ /dev/null
@@ -1,252 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: Christopher Brown (<cb@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'pathname'
-
-# load the openid library, first trying rubygems
-#begin
-# require "rubygems"
-# require_gem "ruby-openid", ">= 1.0"
-#rescue LoadError
-require "openid"
-require "openid/consumer/discovery"
-require 'json'
-require 'chef' / 'openid_registration'
-#end
-
-class ChefServerSlice::OpenidServer < ChefServerSlice::Application
-
- provides :html, :json
-
- include Merb::ChefServerSlice::OpenidServerHelper
- include OpenID::Server
-
- layout nil
-
- before :fix_up_node_id
- after :dump_cookies_and_session
-
- def index
-
- oidreq = server.decode_request(params.reject{|k,v| k == "controller" || k == "action"})
-
- # no openid.mode was given
- unless oidreq
- return "This is the Chef OpenID server endpoint."
- end
-
- oidresp = nil
-
- if oidreq.kind_of?(CheckIDRequest)
- identity = oidreq.identity
-
- if oidresp
- nil
- elsif self.is_authorized(identity, oidreq.trust_root)
- oidresp = oidreq.answer(true, nil, identity)
- elsif oidreq.immediate
- server_url = slice_url :openid_server
- oidresp = oidreq.answer(false, server_url)
- else
- if content_type == :json
- session[:last_oidreq] = oidreq
- response = { :action => slice_url(:openid_server_decision) }
- return response.to_json
- else
- return show_decision_page(oidreq)
- end
- end
- else
- oidresp = server.handle_request(oidreq)
- end
-
- self.render_response(oidresp)
- end
-
- def show_decision_page(oidreq, message="Do you trust this site with your identity?")
- session[:last_oidreq] = oidreq
- @oidreq = oidreq
-
- if message
- session[:notice] = message
- end
-
- render :template => 'openid_server/decide'
- end
-
- def node_page
- unless Chef::OpenIDRegistration.has_key?(params[:id])
- raise NotFound, "Cannot find registration for #{params[:id]}"
- end
-
- # Yadis content-negotiation: we want to return the xrds if asked for.
- accept = request.env['HTTP_ACCEPT']
-
- # This is not technically correct, and should eventually be updated
- # to do real Accept header parsing and logic. Though I expect it will work
- # 99% of the time.
- if accept and accept.include?('application/xrds+xml')
- return node_xrds
- end
-
- # content negotiation failed, so just render the user page
- xrds_url = absolute_slice_url(:openid_node_xrds, :id => params[:id])
- identity_page = <<EOS
-<html><head>
-<meta http-equiv="X-XRDS-Location" content="#{xrds_url}" />
-<link rel="openid.server" href="#{absolute_slice_url(:openid_node, :id => params[:id])}" />
-</head><body><p>OpenID identity page for registration #{params[:id]}</p>
-</body></html>
-EOS
-
- # Also add the Yadis location header, so that they don't have
- # to parse the html unless absolutely necessary.
- @headers['X-XRDS-Location'] = xrds_url
- render identity_page
- end
-
- def node_xrds
- types = [
- OpenID::OPENID_2_0_TYPE,
- OpenID::OPENID_1_0_TYPE
- ]
-
- render_xrds(types)
- end
-
- def idp_xrds
- types = [
- OpenID::OPENID_IDP_2_0_TYPE,
- ]
-
- render_xrds(types)
- end
-
- def decision
- oidreq = session[:last_oidreq]
- session[:last_oidreq] = nil
-
- if params.has_key?(:cancel)
- Chef::Log.info("Cancelling OpenID Authentication")
- return(redirect(oidreq.cancel_url))
- else
- identity = oidreq.identity
- identity =~ /node\/(.+)$/
- openid_node = Chef::OpenIDRegistration.load($1)
- unless openid_node.validated
- raise Unauthorized, "This nodes registration has not been validated"
- end
- if openid_node.password == encrypt_password(openid_node.salt, params[:password])
- if session[:approvals] and !session[:approvals].include?(oidreq.trust_root)
- session[:approvals] << oidreq.trust_root
- else
- session[:approvals] = [oidreq.trust_root]
- end
- oidresp = oidreq.answer(true, nil, identity)
- return self.render_response(oidresp)
- else
- raise Unauthorized, "Invalid credentials"
- end
- end
- end
-
- protected
-
- def encrypt_password(salt, password)
- Digest::SHA1.hexdigest("--#{salt}--#{password}--")
- end
-
- def server
- if @server.nil?
- server_url = absolute_slice_url(:openid_server)
- if Chef::Config[:openid_store_couchdb]
- require 'openid-store-couchdb'
- store = OpenID::Store::CouchDB.new(Chef::Config[:couchdb_url])
- else
- require 'openid/store/filesystem'
- dir = Chef::Config[:openid_store_path]
- store = OpenID::Store::Filesystem.new(dir)
- end
- @server = Server.new(store, server_url)
- end
- return @server
- end
-
- def approved(trust_root)
- return false if session[:approvals].nil?
- return session[:approvals].member?(trust_root)
- end
-
- def is_authorized(identity_url, trust_root)
- return (session[:username] and (identity_url == url_for_user) and self.approved(trust_root))
- end
-
- def render_xrds(types)
- type_str = ""
-
- types.each { |uri|
- type_str += "<Type>#{uri}</Type>\n "
- }
-
- yadis = <<EOS
-<?xml version="1.0" encoding="UTF-8"?>
-<xrds:XRDS
- xmlns:xrds="xri://$xrds"
- xmlns="xri://$xrd*($v*2.0)">
- <XRD>
- <Service priority="0">
- #{type_str}
- <URI>#{absolute_slice_url(:openid_server)}</URI>
- </Service>
- </XRD>
-</xrds:XRDS>
-EOS
-
- @headers['content-type'] = 'application/xrds+xml'
- render yadis
- end
-
- def render_response(oidresp)
- if oidresp.needs_signing
- signed_response = server.signatory.sign(oidresp)
- end
- web_response = server.encode_response(oidresp)
-
- case web_response.code
- when HTTP_OK
- @status = 200
- render web_response.body
- when HTTP_REDIRECT
- redirect web_response.headers['location']
- else
- @status = 400
- render web_response.body
- end
- end
-
- def dump_cookies_and_session
- unless session.empty? or request.cookies.empty?
- cookie_size = request.cookies.inject(0) {|sum,c| sum + c[1].length }
- c, s = request.cookies.inspect, session.inspect
- Chef::Log.debug("cookie dump (size: #{cookie_size}): #{c}")
- Chef::Log.debug("session dump #{s}")
- end
- end
-
-end
diff --git a/chef-server-slice/app/controllers/roles.rb b/chef-server-slice/app/controllers/roles.rb
deleted file mode 100644
index 0ca70ea01b..0000000000
--- a/chef-server-slice/app/controllers/roles.rb
+++ /dev/null
@@ -1,138 +0,0 @@
-require 'chef/role'
-
-class ChefServerSlice::Roles < ChefServerSlice::Application
-
- provides :html, :json
- before :login_required
-
- # GET /roles
- def index
- @role_list = Chef::Role.list(true)
- display(@role_list.collect { |r| absolute_slice_url(:role, r.name) })
- end
-
- # GET /roles/:id
- def show
- begin
- @role = Chef::Role.load(params[:id])
- rescue Net::HTTPServerException => e
- raise NotFound, "Cannot load role #{params[:id]}"
- end
- display @role
- end
-
- # GET /roles/new
- def new
- @available_recipes = get_available_recipes
- @role = Chef::Role.new
- @current_recipes = @role.recipes
- render
- end
-
- # GET /roles/:id/edit
- def edit
- begin
- @role = Chef::Role.load(params[:id])
- rescue Net::HTTPServerException => e
- raise NotFound, "Cannot load role #{params[:id]}"
- end
- @available_recipes = get_available_recipes
- @current_recipes = @role.recipes
- render
- end
-
- # GET /roles/:id/delete
- def delete
-
- end
-
- # POST /roles
- def create
- if params.has_key?("inflated_object")
- @role = params["inflated_object"]
- exists = true
- begin
- Chef::Role.load(@role.name)
- rescue Net::HTTPServerException
- exists = false
- end
- raise Forbidden, "Role already exists" if exists
-
- @role.save
- self.status = 201
- display({ :uri => absolute_slice_url(:role, @role.name) })
- else
- begin
- @role = Chef::Role.new
- @role.name(params[:name])
- @role.recipes(params[:for_role] ? params[:for_role] : [])
- @role.description(params[:description]) if params[:description] != ''
- @role.default_attributes(JSON.parse(params[:default_attributes])) if params[:default_attributes] != ''
- @role.override_attributes(JSON.parse(params[:override_attributes])) if params[:override_attributes] != ''
- @role.save
- redirect(slice_url(:roles), :message => { :notice => "Created Role #{@role.name}" })
- rescue ArgumentError
- @available_recipes = get_available_recipes
- @role = Chef::Role.new
- @role.default_attributes(JSON.parse(params[:default_attributes])) if params[:default_attributes] != ''
- @role.override_attributes(JSON.parse(params[:override_attributes])) if params[:override_attributes] != ''
- @current_recipes = params[:for_role] ? params[:for_role] : []
- @_message = { :error => $! }
- render :new
- end
- end
- end
-
- # PUT /roles/:id
- def update
- begin
- @role = Chef::Role.load(params[:id])
- rescue Net::HTTPServerException => e
- raise NotFound, "Cannot load role #{params[:id]}"
- end
-
- if params.has_key?("inflated_object")
- @role.description(params["inflated_object"].description)
- @role.recipes(params["inflated_object"].recipes)
- @role.default_attributes(params["inflated_object"].default_attributes)
- @role.override_attributes(params["inflated_object"].override_attributes)
- @role.save
- self.status = 200
- display(@role)
- else
- begin
- @role.recipes(params[:for_role])
- @role.description(params[:description]) if params[:description] != ''
- @role.default_attributes(JSON.parse(params[:default_attributes])) if params[:default_attributes] != ''
- @role.override_attributes(JSON.parse(params[:override_attributes])) if params[:override_attributes] != ''
- @role.save
- @_message = { :notice => "Updated Role" }
- render :show
- rescue ArgumentError
- @available_recipes = get_available_recipes
- @current_recipes = params[:for_role] ? params[:for_role] : []
- @role.default_attributes(JSON.parse(params[:default_attributes])) if params[:default_attributes] != ''
- @role.override_attributes(JSON.parse(params[:override_attributes])) if params[:override_attributes] != ''
- render :edit
- end
-
- end
- end
-
- # DELETE /roles/:id
- def destroy
- begin
- @role = Chef::Role.load(params[:id])
- rescue Net::HTTPServerException => e
- raise NotFound, "Cannot load role #{params[:id]}"
- end
- @role.destroy
-
- if request.accept == "application/json"
- display @role
- else
- redirect(absolute_slice_url(:roles), :message => { :notice => "Role #{@role.name} deleted successfully." }, :permanent => true)
- end
- end
-
-end
diff --git a/chef-server-slice/app/controllers/search.rb b/chef-server-slice/app/controllers/search.rb
deleted file mode 100644
index 0f56106492..0000000000
--- a/chef-server-slice/app/controllers/search.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: Christopher Brown (<cb@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'chef' / 'search'
-require 'chef' / 'queue'
-
-class ChefServerSlice::Search < ChefServerSlice::Application
-
- provides :html, :json
- before :login_required
-
- def index
- @s = Chef::Search.new
- @search_indexes = @s.list_indexes
- display @search_indexes
- end
-
- def show
- @s = Chef::Search.new
-
- query = params[:q].nil? ? "*" : (params[:q].empty? ? "*" : params[:q])
- attributes = params[:a].nil? ? [] : params[:a].split(",").collect { |a| a.to_sym }
- @results = @s.search(params[:id], query, attributes)
-
- display @results
- end
-
- def destroy
- @s = Chef::Search.new
- @entries = @s.search(params[:id], "*")
- @entries.each do |entry|
- Chef::Queue.send_msg(:queue, :remove, entry)
- end
- @status = 202
- if content_type == :html
- redirect url(:search)
- else
- display @entries
- end
- end
-
-end
diff --git a/chef-server-slice/app/controllers/search_entries.rb b/chef-server-slice/app/controllers/search_entries.rb
deleted file mode 100644
index dfb90e0b27..0000000000
--- a/chef-server-slice/app/controllers/search_entries.rb
+++ /dev/null
@@ -1,73 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: Christopher Brown (<cb@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'chef' / 'search'
-require 'chef' / 'queue'
-
-class ChefServerSlice::SearchEntries < ChefServerSlice::Application
-
- provides :html, :json
- before :login_required
-
- def index
- @s = Chef::Search.new
- @entries = @s.search(params[:search_id])
- display @entries
- end
-
- def show
- @s = Chef::Search.new
- @entry = @s.search(params[:search_id], "id:'#{params[:search_id]}_#{params[:id]}'").first
- display @entry
- end
-
- def create
- @to_index = params
- @to_index.delete(:controller)
- @to_index["index_name"] = params[:search_id]
- @to_index["id"] = "#{params[:search_id]}_#{params[:id]}"
- @to_index.delete(:search_id)
- Chef::Queue.send_msg(:queue, :index, @to_index)
- if content_type == :html
- redirect url(:search)
- else
- @status = 202
- display @to_index
- end
- end
-
- def update
- create
- end
-
- def destroy
- @s = Chef::Search.new
- @entries = @s.search(params[:id])
- @entries.each do |entry|
- Chef::Queue.send_msg(:queue, :remove, entry)
- end
- @status = 202
- if content_type == :html
- redirect url(:search)
- else
- display @entries
- end
- end
-
-end
diff --git a/chef-server-slice/app/controllers/status.rb b/chef-server-slice/app/controllers/status.rb
deleted file mode 100644
index 86cef9d377..0000000000
--- a/chef-server-slice/app/controllers/status.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Author:: Joe Williams (joe@joetify.com)
-# Copyright:: Copyright (c) 2009 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'chef' / 'node'
-
-class ChefServerSlice::Status < ChefServerSlice::Application
-
- provides :html, :json
- before :login_required
-
- def index
- @status = Chef::CouchDB.new.get_view("nodes", "status")["rows"].inject([]) do |result, item|
- result << item["value"]
- result
- end
- display @status
- end
-
-end
diff --git a/chef-server-slice/app/helpers/application_helper.rb b/chef-server-slice/app/helpers/application_helper.rb
deleted file mode 100644
index ca1da4b7b2..0000000000
--- a/chef-server-slice/app/helpers/application_helper.rb
+++ /dev/null
@@ -1,144 +0,0 @@
-require 'chef/mixin/deep_merge'
-
-module Merb
- module ChefServerSlice
- module ApplicationHelper
-
- # @param *segments<Array[#to_s]> Path segments to append.
- #
- # @return <String>
- # A path relative to the public directory, with added segments.
- def image_path(*segments)
- public_path_for(:image, *segments)
- end
-
- # @param *segments<Array[#to_s]> Path segments to append.
- #
- # @return <String>
- # A path relative to the public directory, with added segments.
- def javascript_path(*segments)
- public_path_for(:javascript, *segments)
- end
-
- # @param *segments<Array[#to_s]> Path segments to append.
- #
- # @return <String>
- # A path relative to the public directory, with added segments.
- def stylesheet_path(*segments)
- public_path_for(:stylesheet, *segments)
- end
-
- # Construct a path relative to the public directory
- #
- # @param <Symbol> The type of component.
- # @param *segments<Array[#to_s]> Path segments to append.
- #
- # @return <String>
- # A path relative to the public directory, with added segments.
- def public_path_for(type, *segments)
- ::ChefServerSlice.public_path_for(type, *segments)
- end
-
- # Construct an app-level path.
- #
- # @param <Symbol> The type of component.
- # @param *segments<Array[#to_s]> Path segments to append.
- #
- # @return <String>
- # A path within the host application, with added segments.
- def app_path_for(type, *segments)
- ::ChefServerSlice.app_path_for(type, *segments)
- end
-
- # Construct a slice-level path.
- #
- # @param <Symbol> The type of component.
- # @param *segments<Array[#to_s]> Path segments to append.
- #
- # @return <String>
- # A path within the slice source (Gem), with added segments.
- def slice_path_for(type, *segments)
- ::ChefServerSlice.slice_path_for(type, *segments)
- end
-
- def build_tree(name, node, default={}, override={})
- node = Chef::Mixin::DeepMerge.merge(default, node)
- node = Chef::Mixin::DeepMerge.merge(node, override)
- html = "<table id='#{name}' class='tree table'>"
- html << "<tr><th class='first'>Attribute</th><th class='last'>Value</th></tr>"
- count = 0
- parent = 0
- append_tree(name, html, node, count, parent, override)
- html << "</table>"
- html
- end
-
- def append_tree(name, html, node, count, parent, override)
- node.sort{ |a,b| a[0] <=> b[0] }.each do |key, value|
- to_send = Array.new
- count += 1
- is_parent = false
- local_html = ""
- local_html << "<tr id='#{name}-#{count}' class='collapsed #{name}"
- if parent != 0
- local_html << " child-of-#{name}-#{parent}' style='display: none;'>"
- else
- local_html << "'>"
- end
- local_html << "<td class='table-key'><span toggle='#{name}-#{count}'/>#{key}</td>"
- case value
- when Hash
- is_parent = true
- local_html << "<td></td>"
- p = count
- to_send << Proc.new { append_tree(name, html, value, count, p, override) }
- when Array
- is_parent = true
- local_html << "<td></td>"
- as_hash = {}
- value.each_index { |i| as_hash[i] = value[i] }
- p = count
- to_send << Proc.new { append_tree(name, html, as_hash, count, p, override) }
- when String,Symbol
- local_html << "<td><div class='json-attr'>#{value}</div></td>"
- else
- local_html << "<td>#{JSON.pretty_generate(value)}</td>"
- end
- local_html << "</tr>"
- local_html.sub!(/class='collapsed/, 'class=\'collapsed parent') if is_parent
- local_html.sub!(/<span/, "<span class='expander'") if is_parent
- html << local_html
- to_send.each { |s| count = s.call }
- count += to_send.length
- end
- count
- end
-
- # Recursively build a tree of lists.
- #def build_tree(node)
- # list = "<dl>"
- # list << "\n<!-- Beginning of Tree -->"
- # walk = lambda do |key,value|
- # case value
- # when Hash, Array
- # list << "\n<!-- Beginning of Enumerable obj -->"
- # list << "\n<dt>#{key}</dt>"
- # list << "<dd>"
- # list << "\t<dl>\n"
- # value.each(&walk)
- # list << "\t</dl>\n"
- # list << "</dd>"
- # list << "\n<!-- End of Enumerable obj -->"
- #
- # else
- # list << "\n<dt>#{key}</dt>"
- # list << "<dd>#{value}</dd>"
- # end
- # end
- # node.sort{ |a,b| a[0] <=> b[0] }.each(&walk)
- # list << "</dl>"
- #end
-
- end
- end
-end
diff --git a/chef-server-slice/app/helpers/cookbook_attributes_helper.rb b/chef-server-slice/app/helpers/cookbook_attributes_helper.rb
deleted file mode 100644
index 3246d45239..0000000000
--- a/chef-server-slice/app/helpers/cookbook_attributes_helper.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-module Merb
- module ChefServerSlice
- module CookbookAttributesHelper
-
- end
- end
-end # Merb
diff --git a/chef-server-slice/app/helpers/cookbook_definitions_helper.rb b/chef-server-slice/app/helpers/cookbook_definitions_helper.rb
deleted file mode 100644
index a7d7792261..0000000000
--- a/chef-server-slice/app/helpers/cookbook_definitions_helper.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-module Merb
- module ChefServerSlice
- module CookbookDefinitionsHelper
-
- end
-
- end
-end # Merb
diff --git a/chef-server-slice/app/helpers/cookbook_files_helper.rb b/chef-server-slice/app/helpers/cookbook_files_helper.rb
deleted file mode 100644
index 9a7b890722..0000000000
--- a/chef-server-slice/app/helpers/cookbook_files_helper.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-module Merb
- module ChefServerSlice
- module CookbookFilesHelper
-
- end
-
- end
-end # Merb
diff --git a/chef-server-slice/app/helpers/cookbook_libraries_helper.rb b/chef-server-slice/app/helpers/cookbook_libraries_helper.rb
deleted file mode 100644
index f0aaa8578f..0000000000
--- a/chef-server-slice/app/helpers/cookbook_libraries_helper.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-module Merb
- module ChefServerSlice
- module CookbookLibrariesHelper
-
- end
- end
-end # Merb
diff --git a/chef-server-slice/app/helpers/cookbook_recipes_helper.rb b/chef-server-slice/app/helpers/cookbook_recipes_helper.rb
deleted file mode 100644
index 8038ec052c..0000000000
--- a/chef-server-slice/app/helpers/cookbook_recipes_helper.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-module Merb
- module ChefServerSlice
- module CookbookRecipesHelper
-
- end
-
- end
-end # Merb
diff --git a/chef-server-slice/app/helpers/cookbook_templates_helper.rb b/chef-server-slice/app/helpers/cookbook_templates_helper.rb
deleted file mode 100644
index d003b794af..0000000000
--- a/chef-server-slice/app/helpers/cookbook_templates_helper.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-module Merb
- module ChefServerSlice
- module CookbookTemplatesHelper
-
- end
-
- end
-end # Merb
diff --git a/chef-server-slice/app/helpers/cookbooks_helper.rb b/chef-server-slice/app/helpers/cookbooks_helper.rb
deleted file mode 100644
index 1d52d9ee54..0000000000
--- a/chef-server-slice/app/helpers/cookbooks_helper.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-module Merb
- module ChefServerSlice
- module CookbooksHelper
- def syntax_highlight(code)
- if File.exists?(code)
- tokens = CodeRay.scan_file(code, :ruby)
- else
- tokens = CodeRay.scan(code, :ruby)
- end
- return CodeRay.encode_tokens(tokens, :span)
- end
- end
- end
-end
diff --git a/chef-server-slice/app/helpers/exceptions_helper.rb b/chef-server-slice/app/helpers/exceptions_helper.rb
deleted file mode 100644
index 86501d650d..0000000000
--- a/chef-server-slice/app/helpers/exceptions_helper.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-module Merb
- module ChefServerSlice
- module ExceptionsHelper
- end
- end
-end # Merb
diff --git a/chef-server-slice/app/helpers/global_helpers.rb b/chef-server-slice/app/helpers/global_helpers.rb
deleted file mode 100644
index 645343a6a7..0000000000
--- a/chef-server-slice/app/helpers/global_helpers.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-module Merb
- module ChefServerSlice
-
- module GlobalHelpers
- # helpers defined here available to all views.
- def resource_collection(collection)
- html = "<ul>"
- collection.each do |resource|
- html << "<li><b>#{resource.class}</b></li>"
- end
- html << "</ul>"
- html
- end
-
- def node_escape(node)
- node.gsub(/\./, '_')
- end
-
- end
- end
-end
diff --git a/chef-server-slice/app/helpers/nodes_helper.rb b/chef-server-slice/app/helpers/nodes_helper.rb
deleted file mode 100644
index c108442415..0000000000
--- a/chef-server-slice/app/helpers/nodes_helper.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Author:: AJ Christensen (<aj@junglist.gen.nz>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-module Merb
- module ChefServerSlice
- module NodesHelper
- def recipe_list(node)
- response = ""
- node.recipes.each do |recipe|
- response << "<li>#{recipe}</li>\n"
- end
- response
- end
-
- end
- end
-end
diff --git a/chef-server-slice/app/helpers/openid_consumer_helper.rb b/chef-server-slice/app/helpers/openid_consumer_helper.rb
deleted file mode 100644
index 5564b9a73c..0000000000
--- a/chef-server-slice/app/helpers/openid_consumer_helper.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-module Merb
- module ChefServerSlice
- module OpenidConsumerHelper
-
- end
- end
-
-end # Merb
diff --git a/chef-server-slice/app/helpers/openid_register_helper.rb b/chef-server-slice/app/helpers/openid_register_helper.rb
deleted file mode 100644
index 4c31be158f..0000000000
--- a/chef-server-slice/app/helpers/openid_register_helper.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-module Merb
- module ChefServerSlice
- module OpenidRegisterHelper
-
- end
- end
-
-end # Merb
diff --git a/chef-server-slice/app/helpers/openid_server_helper.rb b/chef-server-slice/app/helpers/openid_server_helper.rb
deleted file mode 100644
index 2bb6faf912..0000000000
--- a/chef-server-slice/app/helpers/openid_server_helper.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-module Merb
- module ChefServerSlice
- module OpenidServerHelper
- end
- end
-end # Merb
diff --git a/chef-server-slice/app/helpers/openid_server_helpers.rb b/chef-server-slice/app/helpers/openid_server_helpers.rb
deleted file mode 100644
index facf5d22b9..0000000000
--- a/chef-server-slice/app/helpers/openid_server_helpers.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-module Merb
- module ChefServerSlice
- module OpenidServerHelper
-
- def url_for_user
- url(:openid_node, :username => session[:username])
- end
-
- end
- end
-end
diff --git a/chef-server-slice/app/helpers/roles_helper.rb b/chef-server-slice/app/helpers/roles_helper.rb
deleted file mode 100644
index b6d46cdcd1..0000000000
--- a/chef-server-slice/app/helpers/roles_helper.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-module Merb
- module RolesHelper
-
- end
-end # Merb \ No newline at end of file
diff --git a/chef-server-slice/app/helpers/search_entries_helper.rb b/chef-server-slice/app/helpers/search_entries_helper.rb
deleted file mode 100644
index 750ed3749b..0000000000
--- a/chef-server-slice/app/helpers/search_entries_helper.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-module Merb
- module ChefServerSlice
- module SearchEntriesHelper
-
- end
- end
-
-end # Merb
diff --git a/chef-server-slice/app/helpers/search_helper.rb b/chef-server-slice/app/helpers/search_helper.rb
deleted file mode 100644
index d7de6e6d70..0000000000
--- a/chef-server-slice/app/helpers/search_helper.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-module Merb
- module ChefServerSlice
- module SearchHelper
- def output_path(attributes)
- res = Hash.new
- attributes.each do |path|
- parts = path.split("/")
- unless parts[0].nil?
- parts.shift if parts[0].length == 0
- end
- res[path] = ohai_walk(parts)
- end
- res
- end
-
- def ohai_walk(path)
- unless path[0]
- @@ohai.to_json
- else
- ohai_walk_r(@@ohai, path)
- end
- end
-
- def ohai_walk_r(ohai, path)
- hop = (ohai.is_a?(Array) ? path.shift.to_i : path.shift)
- if ohai[hop]
- if path[0]
- ohai_walk_r(ohai[hop], path)
- else
- ohai[hop].to_json
- end
- else
- nil
- end
- end
- end
- end
-end # Merb
diff --git a/chef-server-slice/app/helpers/status_helper.rb b/chef-server-slice/app/helpers/status_helper.rb
deleted file mode 100644
index 9f5694ae70..0000000000
--- a/chef-server-slice/app/helpers/status_helper.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Author:: Joe Williams (joe@joetify.com)
-# Copyright:: Copyright (c) 2009 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-require 'chef' / 'node'
-
-module Merb
- module ChefServerSlice
- module StatusHelper
- end
-
- end
-end
diff --git a/chef-server-slice/app/views/cookbook_templates/index.html.haml b/chef-server-slice/app/views/cookbook_templates/index.html.haml
deleted file mode 100644
index 0e52aa9212..0000000000
--- a/chef-server-slice/app/views/cookbook_templates/index.html.haml
+++ /dev/null
@@ -1,7 +0,0 @@
-- @templates.each do |template, data|
- .index
- %table
- %tr
- %td
- %a{ :href => slice_url(:cookbook_template, { :cookbook_id => params[:cookbook_id], :id => data[:link_name], :version => data[:version] }) }
- = "#{data[:version]} - #{data[:name]}"
diff --git a/chef-server-slice/app/views/cookbooks/index.html.haml b/chef-server-slice/app/views/cookbooks/index.html.haml
deleted file mode 100644
index d8e9eabda6..0000000000
--- a/chef-server-slice/app/views/cookbooks/index.html.haml
+++ /dev/null
@@ -1,10 +0,0 @@
-.block#block-tables
- .content
- %h2.title Cookbooks
- .inner
- %table.table
- %tr
- %th.first Cookbook Name
- - @cl.sort{ |a,b| a.name.to_s <=> b.name.to_s }.each_with_index do |cookbook, index|
- %tr{:class => "#{index % 2 == 1 ? 'odd' : 'even'}"}
- %td= link_to cookbook.name, slice_url(:cookbook, { :id => cookbook.name }) \ No newline at end of file
diff --git a/chef-server-slice/app/views/cookbooks/show.html.haml b/chef-server-slice/app/views/cookbooks/show.html.haml
deleted file mode 100644
index dedd5fefa0..0000000000
--- a/chef-server-slice/app/views/cookbooks/show.html.haml
+++ /dev/null
@@ -1,40 +0,0 @@
-.block#block-text
- .content
- %h2.title= "Cookbook #{h @cookbook.name}"
- .inner
- .accordion
- - unless @cookbook.lib_files.empty?
- %h2.head= link_to "Library Files", "#"
- .files
- - @cookbook.lib_files.each do |f|
- .code
- %h4.head= link_to File.basename(f), "#"
- %pre.ruby= syntax_highlight(f)
- - unless @cookbook.attribute_files.empty?
- %h2.head= link_to "Attribute Files", "#"
- .files
- - @cookbook.attribute_files.each do |f|
- .code
- %h4.head= link_to File.basename(f), "#"
- %pre.ruby= syntax_highlight(f)
- - unless @cookbook.definition_files.empty?
- %h2.head= link_to "Definition Files", "#"
- .files
- - @cookbook.definition_files.each do |f|
- .code
- %h4.head= link_to File.basename(f), "#"
- %pre.ruby= syntax_highlight(f)
- - unless @cookbook.recipe_files.empty?
- %h2.head= link_to "Recipe Files", "#"
- .files
- - @cookbook.recipe_files.each do |f|
- .code
- %h4.head= link_to File.basename(f), "#"
- %pre.ruby= syntax_highlight(f)
- - unless @cookbook.template_files.empty?
- %h2.head= link_to "Template Files", "#"
- .files
- - @cookbook.template_files.each do |f|
- .code
- %h4.head= link_to File.basename(f), "#"
- %pre.ruby= syntax_highlight(f)
diff --git a/chef-server-slice/app/views/exceptions/bad_request.json.erb b/chef-server-slice/app/views/exceptions/bad_request.json.erb
deleted file mode 100644
index f266cf99b9..0000000000
--- a/chef-server-slice/app/views/exceptions/bad_request.json.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= { :error => params[:exception], :code => 400 }.to_json %> \ No newline at end of file
diff --git a/chef-server-slice/app/views/exceptions/internal_server_error.html.erb b/chef-server-slice/app/views/exceptions/internal_server_error.html.erb
deleted file mode 100644
index aadbfad350..0000000000
--- a/chef-server-slice/app/views/exceptions/internal_server_error.html.erb
+++ /dev/null
@@ -1,216 +0,0 @@
-<html>
-<head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <title><%= @exception_name %></title>
- <style type="text/css" media="screen">
- body {
- font-family:arial;
- font-size:11px;
- }
- h1 {
- font-size:48px;
- letter-spacing:-4px;
- margin:0;
- line-height:36px;
- color:#333;
- }
- h1 sup {
- font-size: 0.5em;
- }
- h1 sup.error_500, h1 sup.error_400 {
- color:#990E05;
- }
- h1 sup.error_100, h1 sup.error_200 {
- color:#00BF10;
- }
- h1 sup.error_300 {
- /* pretty sure you cant 'see' status 300
- errors but if you could I think they
- would be blue */
- color:#1B2099;
- }
- h2 {
- font-size:36px;
- letter-spacing:-3px;
- margin:0;
- line-height:28px;
- color:#444;
- }
- a, a:visited {
- color:#00BF10;
- }
- .internalError {
- width:800px;
- margin:50px auto;
- }
- .header {
- border-bottom:10px solid #333;
- margin-bottom:1px;
- background-image: url("data:image/gif;base64,R0lGODlhAwADAIAAAP///8zMzCH5BAAAAAAALAAAAAADAAMAAAIEBHIJBQA7");
- padding:20px;
- }
- table.trace {
- width:100%;
- font-family:courier, monospace;
- letter-spacing:-1px;
- border-collapse: collapse;
- border-spacing:0;
- }
- table.trace tr td{
- padding:0;
- height:26px;
- font-size:13px;
- vertical-align:middle;
- }
- table.trace tr.file{
- border-top:2px solid #fff;
- background-color:#F3F3F3;
- }
- table.trace tr.source {
- background-color:#F8F8F8;
- display:none;
- }
- table.trace .open tr.source {
- display:table-row;
- }
- table.trace tr.file td.expand {
- width:23px;
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAIAAABvSEP3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdVJREFUeNqMVL+TwUAYxaRIOlEhlZHGDAUzzOQ61+AqXMV1lJSU7q/QRqm8KFUcJTNn5qJkaPyoKKVz7y4mF8na5Kt29tt9+/Z97/u81+vVQ4r9frdarS6Xi7ETDIZisRjxMGPfmk4niNPpZE+xLAugbPaZ53nzvtfMBe/3+/3dbuehBrAKhZdUKkVAWa9Xsiybv0CPZDJZLr/qa5/BwgwRjYqOKIvFYjQa/aNommZh0Ww2K5UqzwfoQOPxaLPZ3FAmk0+7lplMpt1u53J5OpBOR0eZEE9wHJfP5zud93g88QhluwWbjW+5VOmKBgKBer3eaDTDYeGBQF8+x7rqIYoiPgixWJazpA6HA+MSxRArkUgMh0M409g8Ho8+9wYxxCqVSq1W26EDHGM2m4HOHQrEc38f/Yn7cLmlIRhBENzcx8cVRZnPZ/YUep2BWkjTIfA+PKVpZAXR5QxsjiqCKvGEqqp443w+0dvy17swqD0HB3S73V5PpkNg1qBqt8kwGCjmPkinM0QJbIoEa7U6UG6ToVgs4V9G2g0ESoP5Aoi7KYX5oCgf8IKbkvn9/mr1LRQKESamzgJy0g0tSZIuB3nuGqRU9Vv9C4sKkUhEkp4soxvxI8AAhWrrtXa3X8EAAAAASUVORK5CYII=);
- background-position:top left;
- background-repeat:no-repeat;
- }
- table.trace .open tr.file td.expand {
- width:19px;
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAB1CAIAAAAqdO2mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXZJREFUeNrslK1ywkAUhcMOBomEOiSdqLxEBJX0NaijOsjyHGGmCGyQQYaiiiw4gktkcOmZbpsuuzQ/M5XnqJ2d3S/n3nM3rTzPLUP7/Tt0+pLcGQwG3W53OLyHzPMtjYL7q9UqSRLrD4E1Gj1orCvKYuFHUWTVkOM44/HjDcp8/lL4r6NerzeZPMm1KFw0QkDn83m5fP2lHA4fNQvRtNvtjsfDd0WzmSfb2e/fdTqdOvdh/HLJZLOn0+d2HJ+KRGzbdl23EpFlmed5cp2maRzHQq1lvQ5KMi6EUZBGfup6E1pTfd+vrGW7jbQ2C9hTt9BpqNyIWaAwAy6xg2eBz5iRC/NomiZhGN5sqmnkauo0BUGgVQoBjQ80oCACgNQdZHfTYBkF2mxCtWWAqunWpahxIDUt3QYUxIFQpJHyIWpXjinabKbbwItMHT+NyjchrP8QKaSQQgoppJBCCimkkEIKKaSQQgoppJBCCimkkEIKKaSo+hRgAEFD17X08O2NAAAAAElFTkSuQmCC);
- background-position:top left;
- background-repeat:no-repeat;
- }
- table.trace tr.source td.collapse {
- width:19px;
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAB1CAIAAAAqdO2mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVxJREFUeNrs0zFygkAUBmBlUkgJHdABlQwVkVJKKUxBYWbkALTxMJwhltyDFkss03IF8pudIcwaDaDl/6pd2P327b7d+eHwMXs4lNkzggoVKlSoUKFChQoVKlSoUKFChQoVKlSoUKFChQqVEYqm6ft9+qiSJEkYho7jTlcw2fd9NOI4nq4gEdFwXXe1Cqco63VkWVbXRTqLhTpOwQRpF7quR1E0TgGhqvLKUFCyoQqG/rks3O6kZKW/eRFpevOCoGTXVTcMQ5EyxyDEkML1c5RzuZOICIyXqn7JBVez6282MWrx731HOv2qB8Hri2lamNk0DfpVVdV1Peodappmmua8bdvzuc7zfNprzrLMth1FnGh/X8MjCAIQv/cFz/+65PcDh7rbvYv2ZUfdj+PxsyzLgVl0hKwgTqeqKApx2LeOc7t98zyv/1FWOgvx9RPii23bmL9cetJ8Ed8CDAC6aFW8bCzFhwAAAABJRU5ErkJggg==);
- background-position:bottom left;
- background-repeat:no-repeat;
- background-color:#6F706F;
- }
- table.trace tr td.path {
- padding-left:10px;
- }
- table.trace tr td.code {
- padding-left:35px;
- white-space: pre;
- line-height:9px;
- padding-bottom:10px;
- }
- table.trace tr td.code em {
- font-weight:bold;
- color:#00BF10;
- }
- table.trace tr td.code a {
- width: 20px;
- float: left;
- }
- table.trace tr td.code .more {
- color:#666;
- }
- table.trace tr td.line {
- width:30px;
- text-align:right;
- padding-right:4px;
- }
- .footer {
- margin-top:5px;
- font-size:11px;
- color:#444;
- text-align:right;
- }
- </style>
-</head>
-<body>
- <div class="internalError">
-
- <div class="header">
- <h1><%= @exception_name %> <sup class="error_<%= @exception.class::STATUS %>"><%= @exception.class::STATUS %></sup></h1>
- <% if show_details = ::Merb::Config[:exception_details] -%>
- <h2><%= @exception.message %></h2>
- <% else -%>
- <h2>Sorry about that...</h2>
- <% end -%>
- <h3>Parameters</h3>
- <ul>
- <% params[:original_params].each do |param, value| %>
- <li><strong><%= param %>:</strong> <%= value.inspect %></li>
- <% end %>
- <%= "<li>None</li>" if params[:original_params].empty? %>
- </ul>
-
- <h3>Session</h3>
- <ul>
- <% params[:original_session].each do |param, value| %>
- <li><strong><%= param %>:</strong> <%= value.inspect %></li>
- <% end %>
- <%= "<li>None</li>" if params[:original_session].empty? %>
- </ul>
-
- <h3>Cookies</h3>
- <ul>
- <% params[:original_cookies].each do |param, value| %>
- <li><strong><%= param %>:</strong> <%= value.inspect %></li>
- <% end %>
- <%= "<li>None</li>" if params[:original_cookies].empty? %>
- </ul>
- </div>
-
- <% if show_details %>
- <table class="trace">
- <% @exception.backtrace.each_with_index do |line, index| %>
- <tbody class="close">
- <tr class="file">
- <td class="expand">
- </td>
- <td class="path">
- <%= (line.match(/^([^:]+)/)[1] rescue 'unknown').sub(/\/((opt|usr)\/local\/lib\/(ruby\/)?(gems\/)?(1.8\/)?(gems\/)?|.+\/app\/)/, '') %>
- <% unless line.match(/\.erb:/) %>
- in "<strong><%= line.match(/:in `(.+)'$/)[1] rescue '?' %></strong>"
- <% else %>
- (<strong>ERB Template</strong>)
- <% end %>
- </td>
- <td class="line">
- <a href="txmt://open?url=file://<%=file = (line.match(/^([^:]+)/)[1] rescue 'unknown')%>&amp;line=<%= lineno = line.match(/:([0-9]+):/)[1] rescue '?' %>"><%=lineno%></a>&nbsp;
- </td>
- </tr>
- <tr class="source">
- <td class="collapse">
- </td>
- <td class="code" colspan="2"><% (__caller_lines__(file, lineno, 5) rescue []).each do |llineno, lcode, lcurrent| %>
-<a href="txmt://open?url=file://<%=file%>&amp;line=<%=llineno%>"><%= llineno %></a><%='<em>' if llineno==lineno.to_i %><%= lcode.size > 90 ? CGI.escapeHTML(lcode[0..90])+'<span class="more">......</span>' : CGI.escapeHTML(lcode) %><%='</em>' if llineno==lineno.to_i %>
-<% end %>
-
-</td>
- </tr>
- </tbody>
- <% end %>
- </table>
- <script type="text/javascript" charset="utf-8">
- // swop the open & closed classes
- els = document.getElementsByTagName('td');
- for(i=0; i<els.length; i++){
- if(els[i].className=='expand' || els[i].className=='collapse'){
- els[i].onclick = function(e){
- tbody = this.parentNode.parentNode;
- if(tbody.className=='open'){
- tbody.className='closed';
- }else{
- tbody.className='open';
- }
- }
- }
- }
- </script>
- <% end %>
- <div class="footer">
- lots of love, from <a href="#">merb</a>
- </div>
- </div>
-</body>
-</html> \ No newline at end of file
diff --git a/chef-server-slice/app/views/exceptions/not_acceptable.html.erb b/chef-server-slice/app/views/exceptions/not_acceptable.html.erb
deleted file mode 100644
index f632712bb2..0000000000
--- a/chef-server-slice/app/views/exceptions/not_acceptable.html.erb
+++ /dev/null
@@ -1,63 +0,0 @@
-<div id="container">
- <div id="header-container">
- <img src="/images/merb.jpg" />
- <!-- <h1>Mongrel + Erb</h1> -->
- <h2>pocket rocket web framework</h2>
- <hr />
- </div>
-
- <div id="left-container">
- <h3>Exception:</h3>
- <p><%= params[:exception] %></p>
- </div>
-
- <div id="main-container">
- <h3>Why am I seeing this page?</h3>
- <p>Merb couldn't find an appropriate content_type to return,
- based on what you said was available via provides() and
- what the client requested.</p>
-
- <h3>How to add a mime-type</h3>
- <pre><code>
- Merb.add_mime_type :pdf, :to_pdf, %w[application/pdf], &quot;Content-Encoding&quot; =&gt; &quot;gzip&quot;
- </code></pre>
- <h3>What this means is:</h3>
- <ul>
- <li>Add a mime-type for :pdf</li>
- <li>Register the method for converting objects to PDF as <code>#to_pdf</code>.</li>
- <li>Register the incoming mime-type "Accept" header as <code>application/pdf</code>.</li>
- <li>Specify a new header for PDF types so it will set <code>Content-Encoding</code> to gzip.</li>
- </ul>
-
- <h3>You can then do:</h3>
- <pre><code>
- class Foo &lt; Application
- provides :pdf
- end
- </code></pre>
-
- <h3>Where can I find help?</h3>
- <p>If you have any questions or if you can't figure something out, please take a
- look at our <a href="http://merbivore.com/"> project page</a>,
- feel free to come chat at irc.freenode.net, channel #merb,
- or post to <a href="http://groups.google.com/group/merb">merb mailing list</a>
- on Google Groups.</p>
-
- <h3>What if I've found a bug?</h3>
- <p>If you want to file a bug or make your own contribution to Merb,
- feel free to register and create a ticket at our
- <a href="http://merb.lighthouseapp.com/">project development page</a>
- on Lighthouse.</p>
-
- <h3>How do I edit this page?</h3>
- <p>You can change what people see when this happens by editing <tt>app/views/exceptions/not_acceptable.html.erb</tt>.</p>
-
- </div>
-
- <div id="footer-container">
- <hr />
- <div class="left"></div>
- <div class="right">&copy; 2007 the merb dev team</div>
- <p>&nbsp;</p>
- </div>
-</div>
diff --git a/chef-server-slice/app/views/exceptions/not_found.html.erb b/chef-server-slice/app/views/exceptions/not_found.html.erb
deleted file mode 100644
index 388c72c31d..0000000000
--- a/chef-server-slice/app/views/exceptions/not_found.html.erb
+++ /dev/null
@@ -1,47 +0,0 @@
-<div id="container">
- <div id="header-container">
- <img src="/images/merb.jpg" />
- <!-- <h1>Mongrel + Erb</h1> -->
- <h2>pocket rocket web framework</h2>
- <hr />
- </div>
-
- <div id="left-container">
- <h3>Exception:</h3>
- <p><%= params[:exception] %></p>
- </div>
-
- <div id="main-container">
- <h3>Welcome to Merb!</h3>
- <p>Merb is a light-weight MVC framework written in Ruby. We hope you enjoy it.</p>
-
- <h3>Where can I find help?</h3>
- <p>If you have any questions or if you can't figure something out, please take a
- look at our <a href="http://merbivore.com/"> project page</a>,
- feel free to come chat at irc.freenode.net, channel #merb,
- or post to <a href="http://groups.google.com/group/merb">merb mailing list</a>
- on Google Groups.</p>
-
- <h3>What if I've found a bug?</h3>
- <p>If you want to file a bug or make your own contribution to Merb,
- feel free to register and create a ticket at our
- <a href="http://merb.lighthouseapp.com/">project development page</a>
- on Lighthouse.</p>
-
- <h3>How do I edit this page?</h3>
- <p>You're seeing this page because you need to edit the following files:
- <ul>
- <li>config/router.rb <strong><em>(recommended)</em></strong></li>
- <li>app/views/exceptions/not_found.html.erb <strong><em>(recommended)</em></strong></li>
- <li>app/views/layout/application.html.erb <strong><em>(change this layout)</em></strong></li>
- </ul>
- </p>
- </div>
-
- <div id="footer-container">
- <hr />
- <div class="left"></div>
- <div class="right">&copy; 2007 the merb dev team</div>
- <p>&nbsp;</p>
- </div>
-</div>
diff --git a/chef-server-slice/app/views/exceptions/standard_error.html.erb b/chef-server-slice/app/views/exceptions/standard_error.html.erb
deleted file mode 100644
index edb45ddf90..0000000000
--- a/chef-server-slice/app/views/exceptions/standard_error.html.erb
+++ /dev/null
@@ -1,217 +0,0 @@
-<html>
-<head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <title><%= @exception_name %></title>
- <style type="text/css" media="screen">
- body {
- font-family:arial;
- font-size:11px;
- }
- h1 {
- font-size:48px;
- letter-spacing:-4px;
- margin:0;
- line-height:36px;
- color:#333;
- }
- h1 sup {
- font-size: 0.5em;
- }
- h1 sup.error_500, h1 sup.error_400 {
- color:#990E05;
- }
- h1 sup.error_100, h1 sup.error_200 {
- color:#00BF10;
- }
- h1 sup.error_300 {
- /* pretty sure you cant 'see' status 300
- errors but if you could I think they
- would be blue */
- color:#1B2099;
- }
- h2 {
- font-size:36px;
- letter-spacing:-3px;
- margin:0;
- line-height:28px;
- color:#444;
- }
- a, a:visited {
- color:#00BF10;
- }
- .internalError {
- width:800px;
- margin:50px auto;
- }
- .header {
- border-bottom:10px solid #333;
- margin-bottom:1px;
- background-image: url("data:image/gif;base64,R0lGODlhAwADAIAAAP///8zMzCH5BAAAAAAALAAAAAADAAMAAAIEBHIJBQA7");
- padding:20px;
- }
- table.trace {
- width:100%;
- font-family:courier, monospace;
- letter-spacing:-1px;
- border-collapse: collapse;
- border-spacing:0;
- }
- table.trace tr td{
- padding:0;
- height:26px;
- font-size:13px;
- vertical-align:middle;
- }
- table.trace tr.file{
- border-top:2px solid #fff;
- background-color:#F3F3F3;
- }
- table.trace tr.source {
- background-color:#F8F8F8;
- display:none;
- }
- table.trace .open tr.source {
- display:table-row;
- }
- table.trace tr.file td.expand {
- width:23px;
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAIAAABvSEP3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdVJREFUeNqMVL+TwUAYxaRIOlEhlZHGDAUzzOQ61+AqXMV1lJSU7q/QRqm8KFUcJTNn5qJkaPyoKKVz7y4mF8na5Kt29tt9+/Z97/u81+vVQ4r9frdarS6Xi7ETDIZisRjxMGPfmk4niNPpZE+xLAugbPaZ53nzvtfMBe/3+/3dbuehBrAKhZdUKkVAWa9Xsiybv0CPZDJZLr/qa5/BwgwRjYqOKIvFYjQa/aNommZh0Ww2K5UqzwfoQOPxaLPZ3FAmk0+7lplMpt1u53J5OpBOR0eZEE9wHJfP5zud93g88QhluwWbjW+5VOmKBgKBer3eaDTDYeGBQF8+x7rqIYoiPgixWJazpA6HA+MSxRArkUgMh0M409g8Ho8+9wYxxCqVSq1W26EDHGM2m4HOHQrEc38f/Yn7cLmlIRhBENzcx8cVRZnPZ/YUep2BWkjTIfA+PKVpZAXR5QxsjiqCKvGEqqp443w+0dvy17swqD0HB3S73V5PpkNg1qBqt8kwGCjmPkinM0QJbIoEa7U6UG6ToVgs4V9G2g0ESoP5Aoi7KYX5oCgf8IKbkvn9/mr1LRQKESamzgJy0g0tSZIuB3nuGqRU9Vv9C4sKkUhEkp4soxvxI8AAhWrrtXa3X8EAAAAASUVORK5CYII=);
- background-position:top left;
- background-repeat:no-repeat;
- }
- table.trace .open tr.file td.expand {
- width:19px;
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAB1CAIAAAAqdO2mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXZJREFUeNrslK1ywkAUhcMOBomEOiSdqLxEBJX0NaijOsjyHGGmCGyQQYaiiiw4gktkcOmZbpsuuzQ/M5XnqJ2d3S/n3nM3rTzPLUP7/Tt0+pLcGQwG3W53OLyHzPMtjYL7q9UqSRLrD4E1Gj1orCvKYuFHUWTVkOM44/HjDcp8/lL4r6NerzeZPMm1KFw0QkDn83m5fP2lHA4fNQvRtNvtjsfDd0WzmSfb2e/fdTqdOvdh/HLJZLOn0+d2HJ+KRGzbdl23EpFlmed5cp2maRzHQq1lvQ5KMi6EUZBGfup6E1pTfd+vrGW7jbQ2C9hTt9BpqNyIWaAwAy6xg2eBz5iRC/NomiZhGN5sqmnkauo0BUGgVQoBjQ80oCACgNQdZHfTYBkF2mxCtWWAqunWpahxIDUt3QYUxIFQpJHyIWpXjinabKbbwItMHT+NyjchrP8QKaSQQgoppJBCCimkkEIKKaSQQgoppJBCCimkkEIKKaSo+hRgAEFD17X08O2NAAAAAElFTkSuQmCC);
- background-position:top left;
- background-repeat:no-repeat;
- }
- table.trace tr.source td.collapse {
- width:19px;
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAB1CAIAAAAqdO2mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVxJREFUeNrs0zFygkAUBmBlUkgJHdABlQwVkVJKKUxBYWbkALTxMJwhltyDFkss03IF8pudIcwaDaDl/6pd2P327b7d+eHwMXs4lNkzggoVKlSoUKFChQoVKlSoUKFChQoVKlSoUKFChQqVEYqm6ft9+qiSJEkYho7jTlcw2fd9NOI4nq4gEdFwXXe1Cqco63VkWVbXRTqLhTpOwQRpF7quR1E0TgGhqvLKUFCyoQqG/rks3O6kZKW/eRFpevOCoGTXVTcMQ5EyxyDEkML1c5RzuZOICIyXqn7JBVez6282MWrx731HOv2qB8Hri2lamNk0DfpVVdV1Peodappmmua8bdvzuc7zfNprzrLMth1FnGh/X8MjCAIQv/cFz/+65PcDh7rbvYv2ZUfdj+PxsyzLgVl0hKwgTqeqKApx2LeOc7t98zyv/1FWOgvx9RPii23bmL9cetJ8Ed8CDAC6aFW8bCzFhwAAAABJRU5ErkJggg==);
- background-position:bottom left;
- background-repeat:no-repeat;
- background-color:#6F706F;
- }
- table.trace tr td.path {
- padding-left:10px;
- }
- table.trace tr td.code {
- padding-left:35px;
- white-space: pre;
- line-height:9px;
- padding-bottom:10px;
- }
- table.trace tr td.code em {
- font-weight:bold;
- color:#00BF10;
- }
- table.trace tr td.code a {
- width: 20px;
- float: left;
- }
- table.trace tr td.code .more {
- color:#666;
- }
- table.trace tr td.line {
- width:30px;
- text-align:right;
- padding-right:4px;
- }
- .footer {
- margin-top:5px;
- font-size:11px;
- color:#444;
- text-align:right;
- }
- </style>
-</head>
-<body>
- <div class="internalError">
-
- <div class="header">
- <h1><%= @exception_name %> <sup class="error_<%= @exception.class::STATUS %>"><%= @exception.class::STATUS %></sup></h1>
- <% if show_details = ::Merb::Config[:exception_details] -%>
- <h2><%= @exception.message %></h2>
- <% else -%>
- <h2>Sorry about that...</h2>
- <% end -%>
- <h3>Parameters</h3>
- <ul>
- <% params[:original_params].each do |param, value| %>
- <li><strong><%= param %>:</strong> <%= value.inspect %></li>
- <% end %>
- <%= "<li>None</li>" if params[:original_params].empty? %>
- </ul>
-
- <h3>Session</h3>
- <ul>
- <% params[:original_session].each do |param, value| %>
- <li><strong><%= param %>:</strong> <%= value.inspect %></li>
- <% end %>
- <%= "<li>None</li>" if params[:original_session].empty? %>
- </ul>
-
- <h3>Cookies</h3>
- <ul>
- <% params[:original_cookies].each do |param, value| %>
- <li><strong><%= param %>:</strong> <%= value.inspect %></li>
- <% end %>
- <%= "<li>None</li>" if params[:original_cookies].empty? %>
- </ul>
- </div>
-
- <% if show_details %>
- <table class="trace">
- <% @exception.backtrace.each_with_index do |line, index| %>
- <tbody class="close">
- <tr class="file">
- <td class="expand">
- </td>
- <td class="path">
- <%= (line.match(/^([^:]+)/)[1] rescue 'unknown').sub(/\/((opt|usr)\/local\/lib\/(ruby\/)?(gems\/)?(1.8\/)?(gems\/)?|.+\/app\/)/, '') %>
- <% unless line.match(/\.erb:/) %>
- in "<strong><%= line.match(/:in `(.+)'$/)[1] rescue '?' %></strong>"
- <% else %>
- (<strong>ERB Template</strong>)
- <% end %>
- </td>
- <td class="line">
- <a href="txmt://open?url=file://<%=file = (line.match(/^([^:]+)/)[1] rescue 'unknown')%>&amp;line=<%= lineno = line.match(/:([0-9]+):/)[1] rescue '?' %>"><%=lineno%></a>&nbsp;
- </td>
- </tr>
- <tr class="source">
- <td class="collapse">
- </td>
- <td class="code" colspan="2"><% (__caller_lines__(file, lineno, 5) rescue []).each do |llineno, lcode, lcurrent| %>
-<a href="txmt://open?url=file://<%=file%>&amp;line=<%=llineno%>"><%= llineno %></a><%='<em>' if llineno==lineno.to_i %><%= lcode.size > 90 ? CGI.escapeHTML(lcode[0..90])+'<span class="more">......</span>' : CGI.escapeHTML(lcode) %><%='</em>' if llineno==lineno.to_i %>
-<% end %>
-
-</td>
- </tr>
- </tbody>
- <% end %>
- </table>
- <script type="text/javascript" charset="utf-8">
- // swop the open & closed classes
- els = document.getElementsByTagName('td');
- for(i=0; i<els.length; i++){
- if(els[i].className=='expand' || els[i].className=='collapse'){
- els[i].onclick = function(e){
- tbody = this.parentNode.parentNode;
- if(tbody.className=='open'){
- tbody.className='closed';
- }else{
- tbody.className='open';
- }
- }
- }
- }
- </script>
- <% end %>
- <div class="footer">
- lots of love, from <a href="#">merb</a>
- </div>
- </div>
-</body>
-</html>
-
diff --git a/chef-server-slice/app/views/layout/chef_server_slice.html.haml b/chef-server-slice/app/views/layout/chef_server_slice.html.haml
deleted file mode 100644
index e480ad71e1..0000000000
--- a/chef-server-slice/app/views/layout/chef_server_slice.html.haml
+++ /dev/null
@@ -1,53 +0,0 @@
-!!! XML
-!!!
-%html
- %head
- %meta{ "http-equiv" => "content-type", :content => "text/html; charset=utf-8" }
- %title Chef Server
- = css_include_tag "base", "themes/djime-cerulean/style", "chef", "/facebox/facebox.css", "jquery-ui-1.7.1.custom", "jquery.treeTable"
- = js_include_tag "jquery-1.3.2.min", "jquery.jeditable.mini", "jquery.livequery", "jquery.localscroll", "jquery.scrollTo", "jquery.tools.min"
- = js_include_tag "/facebox/facebox.js"
- = js_include_tag "jquery-ui-1.7.1.custom.min"
- = js_include_tag "jquery.treeTable.min"
- = js_include_tag "JSONeditor"
- = js_include_tag "chef"
-
- %body
- #container
- #header
- %h1= link_to "Chef Server", slice_url(:top)
- #user-navigation
- %ul
- - if session[:openid]
- %li= link_to "Logout #{h session[:openid]} (#{session[:level].to_s})", slice_url(:openid_consumer_logout), :method => "get", :confirm => "Are you sure you want to logout?"
- - else
- %li= link_to "Login", slice_url(:openid_consumer), :rel => "facebox"
- .clear
- #main-navigation
- %ul
- %li= link_to "Search", slice_url(:searches)
- %li= link_to "Status", slice_url(:status)
- %li= link_to "Roles", slice_url(:roles)
- %li= link_to "Nodes", slice_url(:nodes)
- %li= link_to "Cookbooks", slice_url(:cookbooks)
- %li= link_to "Registrations", slice_url(:registrations)
- .clear
- #wrapper
- #main
- - unless message.empty?
- .block#block-messages
- .content
- %h2.title Messages
- .inner
- .flash
- - message.each do |type, msg|
- %div{:class => "message #{type}"}
- %p= msg
- = catch_content :for_layout
- #footer
- .block
- %p Copyright &copy; 2009 Opscode
- #sidebar
- .block.notice#sidebar_block_notice= catch_content :sidebar_block_notice
- .block#sidebar_block= catch_content :sidebar_block
- .clear
diff --git a/chef-server-slice/app/views/layout/login.html.haml b/chef-server-slice/app/views/layout/login.html.haml
deleted file mode 100644
index 8ac6c4d6f4..0000000000
--- a/chef-server-slice/app/views/layout/login.html.haml
+++ /dev/null
@@ -1,37 +0,0 @@
-!!! XML
-!!!
-%html
- %head
- %meta{ "http-equiv" => "content-type", :content => "text/html; charset=utf-8" }
- %title Chef Server
- = css_include_tag "base", "themes/djime-cerulean/style", "chef", "/facebox/facebox.css", "jquery-ui-1.7.1.custom", "jquery.treeTable"
- = js_include_tag "jquery-1.3.2.min", "jquery.jeditable.mini", "jquery.livequery", "jquery.localscroll", "jquery.scrollTo", "jquery.tools.min"
- = js_include_tag "/facebox/facebox.js"
- = js_include_tag "jquery-ui-1.7.1.custom.min"
- = js_include_tag "jquery.treeTable.min"
- = js_include_tag "JSONeditor"
- = js_include_tag "chef"
-
- %body
- #container
- #header
- %h1= link_to "Chef Server", slice_url(:top)
- #wrapper
- #main
- - unless message.empty?
- .block#block-messages
- .content
- %h2.title Messages
- .inner
- .flash
- - message.each do |type, msg|
- %div{:class => "message #{type}"}
- %p= msg
- = catch_content :for_layout
- #footer
- .block
- %p Copyright &copy; 2009 Opscode
- #sidebar
- .block.notice#sidebar_block_notice= catch_content :sidebar_block_notice
- .block#sidebar_block= catch_content :sidebar_block
- .clear
diff --git a/chef-server-slice/app/views/main/index.html.erb b/chef-server-slice/app/views/main/index.html.erb
deleted file mode 100644
index 755c73de7f..0000000000
--- a/chef-server-slice/app/views/main/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<strong><%= slice.description %></strong> (v. <%= slice.version %>) \ No newline at end of file
diff --git a/chef-server-slice/app/views/nodes/_action.html.haml b/chef-server-slice/app/views/nodes/_action.html.haml
deleted file mode 100644
index 8adb39338d..0000000000
--- a/chef-server-slice/app/views/nodes/_action.html.haml
+++ /dev/null
@@ -1,13 +0,0 @@
-%table
- - actions.each do |action, resource_hash|
- %tr
- %td.action_name= action.to_s
- %td.action_resources
- %table
- - resource_hash.keys.sort{ |a,b| a.to_s <=> b.to_s }.each do |rk|
- %tr
- %td.action_when= rk.to_s
- %td
- - resource_hash[rk].each do |resource|
- = partial(:resource, :resource => resource)
- \ No newline at end of file
diff --git a/chef-server-slice/app/views/nodes/_form.html.haml b/chef-server-slice/app/views/nodes/_form.html.haml
deleted file mode 100644
index d150eb59a7..0000000000
--- a/chef-server-slice/app/views/nodes/_form.html.haml
+++ /dev/null
@@ -1,56 +0,0 @@
-.content
- .inner
- - if form_for != "edit"
- %div.group.form
- %label.label Name
- = text_field :id => "node_name", :name => "name", :class => "text_field", :value => params.has_key?(:name) ? h(params[:name]) : @node.name
- %span.description The name of the Node
-
- %div.group.form
- %table.sortable
- %tr
- %td
- %label.label Available Roles
- %td
- %label.label Run List
- %tr
- %td
- %div.sortable
- %ul#node_available_roles.connectedSortable
- - @available_roles.each do |role|
- %li{ :id => "role[#{role}]", :class => 'ui-state-highlight' }= h role
- %td{:rowspan => 3}
- %div.sortable.run-list
- %ul#for_node.connectedSortable
- - @run_list.each do |entry|
- - type, name, fname = @run_list.parse_entry(entry)
- %li{ :id => h(fname), :class => type == 'role' ? 'ui-state-highlight' : 'ui-state-default' }= h name
- %td.help
- %span.description
- Drag recipes from the list of Available Recipes section on the left, and drop them
- in the "Recipes for this node" section on the right. Then sort the recipes for this node list to the order you would like to see the recipes applied.
- %tr
- %td
- %label.label Available Recipes
- %tr
- %td
- %div.sortable
- %ul#node_available_recipes.connectedSortable
- - @available_recipes.each do |recipe|
- %li{ :id => "recipe[#{recipe}]", :class => 'ui-state-default' }= h recipe
-
-
- %div.group.form
- %label.label Attributes
- %div.editor
- %div#tree
- %div#jform
- %div.clear
- %script= "$(document).ready(function() { JSONeditor.start('tree', 'jform', #{@node.attribute.to_json}, false); });"
- %span.description A JSON hash for default attributes for nodes of this node. These attributes will only be applied if the node does not already have a value for the attributes.
-
- = form(:action => form_url, :method => :post, :id => form_id, :class => 'form') do
- %div.group
- .actions-bar
- .actions= submit submit_name, :id => submit_id, :class => 'button'
-
diff --git a/chef-server-slice/app/views/nodes/_navigation.html.haml b/chef-server-slice/app/views/nodes/_navigation.html.haml
deleted file mode 100644
index 1cb47f918a..0000000000
--- a/chef-server-slice/app/views/nodes/_navigation.html.haml
+++ /dev/null
@@ -1,9 +0,0 @@
-.secondary-navigation
- %ul
- %li{ :class => "first #{active == 'index' ? "active" : ''}"}= link_to('List', slice_url(:nodes))
- %li{ :class => (active == 'create' ? "active" : '')}= link_to('Create', slice_url(:new_node))
- - if active != 'create' && active != 'index'
- %li{ :class => (active == 'show' ? "active" : '')}= link_to('Show', slice_url(:node, escape_node_id(@node.name)))
- %li{ :class => (active == 'edit' ? "active" : '')}= link_to('Edit', slice_url(:edit_node, escape_node_id(@node.name)))
- %li= link_to('Delete', slice_url(:node, escape_node_id(@node.name)), :method => "delete", :confirm => "Really delete node #{@node.name}? There is no undo.")
- .clear
diff --git a/chef-server-slice/app/views/nodes/_resource.html.haml b/chef-server-slice/app/views/nodes/_resource.html.haml
deleted file mode 100644
index 7b9776b816..0000000000
--- a/chef-server-slice/app/views/nodes/_resource.html.haml
+++ /dev/null
@@ -1,22 +0,0 @@
-.resource
- %h3= "#{h resource.to_s} (#{resource.class})"
- %table
- - resource.instance_variables.sort.each do |v|
- - attr_name = v.gsub(/\@/, "")
- - unless attr_name == "collection"
- %tr.attr_group
- %td.attr_name
- = "#{h attr_name}"
- %td.attr_value
- - value = resource.instance_variable_get(v)
- - if value.kind_of?(String)
- = "#{h value}"
- - elsif value.kind_of?(Array)
- = "#{h value.join(", ")}"
- - elsif value.kind_of?(Symbol)
- = "#{h value.to_s}"
- - elsif attr_name == "actions"
- = partial(:action, :actions => value)
- - else
- = "#{h value.inspect}"
-
diff --git a/chef-server-slice/app/views/nodes/edit.html.haml b/chef-server-slice/app/views/nodes/edit.html.haml
deleted file mode 100644
index dff693ac7d..0000000000
--- a/chef-server-slice/app/views/nodes/edit.html.haml
+++ /dev/null
@@ -1,7 +0,0 @@
-.block#block-tables
- .content
- %h2.title= "Node #{h @node.name}"
- .inner
- = partial('navigation', :active => 'edit')
- = partial('form', :header => "Edit Node #{@node.name}", :form_id => 'edit_node', :submit_name => "Save Node", :submit_id => "edit_node_button", :form_for => 'edit', :form_url => slice_url(:node, escape_node_id(@node.name)) )
-
diff --git a/chef-server-slice/app/views/nodes/index.html.haml b/chef-server-slice/app/views/nodes/index.html.haml
deleted file mode 100644
index 744d0b7375..0000000000
--- a/chef-server-slice/app/views/nodes/index.html.haml
+++ /dev/null
@@ -1,25 +0,0 @@
-.block#block-tables
- .content
- %h2.title Node List
- .inner
- = partial('navigation', :active => 'index')
- .content
- .inner
- %table.table
- %tr
- %th.first{:colspan => 2} Name
- %th &nbsp;
- %th.last &nbsp;
- - even = false
- - if @node_list.empty?
- %td{:colspan => 4}= "You appear to have no nodes - try connecting one, or validating an existing #{link_to('registration', slice_url(:registrations))}"
- - else
- - @node_list.each do |node|
- %tr{:class => even ? "even": "odd" }
- %td{:colspan => 2}= link_to node, slice_url(:node, { :id => escape_node_id(node) } )
- %td
- = link_to('Edit', slice_url(:edit_node, escape_node_id(node)))
- |
- = link_to('Delete', slice_url(:node, escape_node_id(node)), :method => "delete", :confirm => "Really delete Node #{node}? There is no undo.")
- - even ? even = false: even = true
-
diff --git a/chef-server-slice/app/views/nodes/new.html.haml b/chef-server-slice/app/views/nodes/new.html.haml
deleted file mode 100644
index d2d032599a..0000000000
--- a/chef-server-slice/app/views/nodes/new.html.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-.block#block-tables
- .content
- %h2.title= "Node"
- .inner
- = partial('navigation', :active => 'create')
- = partial('form', :header => "Create new Node", :form_id => 'create_node', :submit_name => "Create Node", :submit_id => "create_node_button", :form_for => 'create', :form_url => slice_url(:nodes))
diff --git a/chef-server-slice/app/views/nodes/show.html.haml b/chef-server-slice/app/views/nodes/show.html.haml
deleted file mode 100644
index 121cbcedf4..0000000000
--- a/chef-server-slice/app/views/nodes/show.html.haml
+++ /dev/null
@@ -1,60 +0,0 @@
-.block#block-tables
- .content
- %h2.title= "Node #{h @node.name}"
- .inner
- = partial('navigation', :active => 'show')
-
- .content
- .inner
- .left
- %h3 Run List
- %table.table
- %tr
- %th.first Position
- %th Name
- %th.last Type
- - if @node.run_list.empty?
- %tr
- %td{:colspan => 2} This node has no roles or recipes applied.
- - else
- -@node.run_list.each_index do |i|
- - type, name, fname = @node.run_list.parse_entry(@node.run_list[i])
- %tr
- %td.position= i
- %td= name
- %td= type
- .left.accordion
- %h3.head= link_to("Recipes", "#")
- - full_recipe_list, default_attrs, override_attrs = @node.run_list.expand("couchdb")
- %div
- %span.description.form.help
- This is the list of recipes, fully expanded, as they will be applied to the node in question.
- %table#recipes.table
- %tr
- %th.first Position
- %th.last Name
- - if @node.run_list.empty?
- %tr
- %td{:colspan => 2} This node has no recipes applied.
- - else
- - full_recipe_list.each_index do |i|
- %tr
- %td.position= i
- %td= full_recipe_list[i]
-
- .left
- %h3 Tags
- %table#recipes.table
- %tr
- %th.first Tags
- %th.last &nbsp;
- %tr
- - if (@node.attribute?(:tags) == false) || @node[:tags].empty?
- %td{:colspan => 2} This node has no tags applied.
- - else
- %td{:colspan => 2}= @node[:tags].join(", ")
-
- .left
- %h3 Attributes
- = build_tree('attrs', @node.attribute, default_attrs, override_attrs)
-
diff --git a/chef-server-slice/app/views/openid_consumer/index.html.haml b/chef-server-slice/app/views/openid_consumer/index.html.haml
deleted file mode 100644
index 1d1572d5c1..0000000000
--- a/chef-server-slice/app/views/openid_consumer/index.html.haml
+++ /dev/null
@@ -1,23 +0,0 @@
-- unless Chef::Config[:authorized_openid_providers]
- - throw_content(:sidebar_block_notice) do
- %h4 Where do I get a Login?
- %p Chef uses OpenID for user logins. By default, Chef allows you to use any OpenID provider you like. You should configure the server to utilize only trusted OpenID servers and URIs. This box will disappear when you have altered the default security configuration.
- %p= link_to("How to secure your Chef Server on the Chef Wiki.", "http://wiki.opscode.com/display/chef/Securing+Chef+Server")
-
-.block#block-forms
- .content
- %h2.title Login
- .inner
- %form.form{ :method => "get", "accept-charset" => "UTF-8", :action => slice_url(:openid_consumer_login) }
- .group
- .text_field= text_field :openid_identifier
- .group
- .check_box= check_box :name => "immediate", :label => "Use immediate mode", :value => "0"
- .group
- .check_box= check_box :name => "use_sreg", :label => "Request registration data", :value => "0"
- .group
- .check_box= check_box :name => "use_pape", :label => "Request phishing-resistent auth policy", :value => "0"
- .group
- .check_box= check_box :name => "force_post", :label => "Force the transaction to POST", :value => "0"
- .group.navform
- .button= submit "Login &rarr;"
diff --git a/chef-server-slice/app/views/openid_consumer/start.html.haml b/chef-server-slice/app/views/openid_consumer/start.html.haml
deleted file mode 100644
index 75ed9a9257..0000000000
--- a/chef-server-slice/app/views/openid_consumer/start.html.haml
+++ /dev/null
@@ -1,4 +0,0 @@
-<%= @form_text %>
-<script type="text/javascript">
-document.getElementById('openid_form').submit();
-</script> \ No newline at end of file
diff --git a/chef-server-slice/app/views/openid_login/index.html.haml b/chef-server-slice/app/views/openid_login/index.html.haml
deleted file mode 100644
index e5cf180b9b..0000000000
--- a/chef-server-slice/app/views/openid_login/index.html.haml
+++ /dev/null
@@ -1,5 +0,0 @@
-#login-form
- %form{ :method => "get", :action => slice_url(:openid_login_submit) }
- %input{ :type => "text", :name => "username" }/
- %input{ :type => "submit", :value => "Log In"}/
- \ No newline at end of file
diff --git a/chef-server-slice/app/views/openid_register/index.html.haml b/chef-server-slice/app/views/openid_register/index.html.haml
deleted file mode 100644
index ba316d6062..0000000000
--- a/chef-server-slice/app/views/openid_register/index.html.haml
+++ /dev/null
@@ -1,19 +0,0 @@
-.block#block-tables
- .content
- %h2.title Registrations
- .inner
- %table.table
- %tr
- %th.first Registration Name
- %th &nbsp
- %th Control
- %th.last &nbsp;
- - @registered_nodes.sort{ |a,b| a.name.to_s <=> b.name.to_s }.each_with_index do |node, index|
- %tr{:class => "#{index % 2 == 1 ? 'odd' : 'even'}"}
- %td{:colspan => 2}= link_to(node.name, slice_url(:registration, { :id => node.name }))
- %td
- = link_to( (node.validated ? "Invalidate Registration" : "Validate Registration"), slice_url( :validate_registration, { :id => node.name} ), :method => "post", :confirm => "Are you sure you want to" + (node.validated ? " invalidate " : " validate ") + "this node's registration?")
- |
- = link_to((node.admin ? "Remove Admin Rights" : "Grant Admin Rights"), slice_url(:admin_registration, { :id => node.name}), :method => "post", :confirm => "Are you sure you want to" + (node.admin ? " remove administrator privileges from this node?" : " grant administrator privileges to this node?"))
- |
- = link_to("Delete", slice_url(:registration, { :id => node.name} ), :method => "delete", :confirm => "Are you sure you want to delete this registration")
diff --git a/chef-server-slice/app/views/openid_register/show.html.haml b/chef-server-slice/app/views/openid_register/show.html.haml
deleted file mode 100644
index 63d84d8364..0000000000
--- a/chef-server-slice/app/views/openid_register/show.html.haml
+++ /dev/null
@@ -1,7 +0,0 @@
-.block#block-text
- .content
- %h2.title= "Registration #{@registered_node.name}"
- .inner
- = link_to "OpenID URL", slice_url(:openid_node, { :id => @registered_node.name.gsub(/\./, "_")})
- %br= "Validated: #{@registered_node.validated}"
- %br= "Admin: #{@registered_node.admin}" \ No newline at end of file
diff --git a/chef-server-slice/app/views/openid_server/decide.html.haml b/chef-server-slice/app/views/openid_server/decide.html.haml
deleted file mode 100644
index d08b50cd4b..0000000000
--- a/chef-server-slice/app/views/openid_server/decide.html.haml
+++ /dev/null
@@ -1,27 +0,0 @@
-%form{:method => "post", :action => slice_url(:openid_server_decision)}
- %table
- %tr
- %td Site:
- %td= @oidreq.trust_root
- - if @oidreq.id_select
- %tr
- %td{:colspan => "2"}
- You entered the server identifier at the relying party.
- You will need to send an identifier of your choosing.
- Enter a username and password below.
- %tr
- %td Identity to send:
- %td
- %input{:type => "text", :name => "id_to_send", :size => "25"}
- - else
- %tr
- %td Identity:
- %td= @oidreq.identity
- %tr
- %td
- %label{:for => "password"} Password:
- %td
- %input{:type => "password", :name => "password"}
- %input{:type => "submit", :name => "submit", :value => "Authenticate"}
- %input{:type => "submit", :name => "cancel", :value => "Cancel"}
-
diff --git a/chef-server-slice/app/views/roles/_form.html.haml b/chef-server-slice/app/views/roles/_form.html.haml
deleted file mode 100644
index ac1591a86b..0000000000
--- a/chef-server-slice/app/views/roles/_form.html.haml
+++ /dev/null
@@ -1,48 +0,0 @@
-.content
- .inner
- - if form_for != "edit"
- %div.group.form
- %label.label Name
- = text_field :id => "role_name", :name => "name", :class => "text_field", :value => params.has_key?(:name) ? h(params[:name]) : @role.name
- %span.description The name of the Role
- %div.group.form
- %label.label Description
- = text_area(params.has_key?(:description) ? h(params[:description]) : @role.description, :name => "description", :class => "text_area", :id => "role_description")
- %span.description A description of this Role
-
- %div.group.form
- %table.sortable
- %tr
- %td
- %label.label Available Recipes
- %td
- %label.label Recipes for this Role
- %tr
- %td
- %div.sortable
- %ul#available_recipes.connectedSortable
- - @available_recipes.each do |recipe|
- %li{ :id => h(recipe), :class => 'ui-state-highlight' }= h recipe
- %td
- %div.sortable
- %ul#for_role.connectedSortable
- - @current_recipes.each do |recipe|
- %li{ :id => h(recipe), :class => 'ui-state-highlight' }= h recipe
-
- %td.help
- %span.description
- Drag recipes from the list of Available Recipes section on the left, and drop them
- in the "Recipes for this Role" section on the right. Then sort the recipes for this role list to the order you would like to see the recipes applied.
-
- %div.group.form
- %label.label Default and Override Attributes
- %div.editor
- %div#tree
- %div#jform
- %div.clear
- %script= "$(document).ready(function() { JSONeditor.start('tree', 'jform', #{ { :defaults => @role.default_attributes, :overrides => @role.override_attributes }.to_json }, false); });"
- %span.description A JSON hash for default attributes for nodes of this role. These attributes will only be applied if the node does not already have a value for the attributes.
- = form(:action => form_url, :method => :post, :id => form_id, :class => 'form') do
- %div.group
- .actions-bar
- .actions= submit submit_name, :id => submit_id, :class => 'button'
diff --git a/chef-server-slice/app/views/roles/_navigation.html.haml b/chef-server-slice/app/views/roles/_navigation.html.haml
deleted file mode 100644
index 1eb2a51cdf..0000000000
--- a/chef-server-slice/app/views/roles/_navigation.html.haml
+++ /dev/null
@@ -1,9 +0,0 @@
-.secondary-navigation
- %ul
- %li{ :class => "first #{active == 'index' ? "active" : ''}"}= link_to('List', slice_url(:roles))
- %li{ :class => (active == 'create' ? "active" : '')}= link_to('Create', slice_url(:new_role))
- - if active != 'create' && active != 'index'
- %li{ :class => (active == 'show' ? "active" : '')}= link_to('Show', slice_url(:role, @role.name))
- %li{ :class => (active == 'edit' ? "active" : '')}= link_to('Edit', slice_url(:edit_role, @role.name))
- %li= link_to('Delete', slice_url(:role, @role.name), :method => "delete", :confirm => "Really delete Role #{@role.name}? There is no undo.")
- .clear
diff --git a/chef-server-slice/app/views/roles/edit.html.haml b/chef-server-slice/app/views/roles/edit.html.haml
deleted file mode 100644
index 7714ed764c..0000000000
--- a/chef-server-slice/app/views/roles/edit.html.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-.block#block-tables
- .content
- %h2.title= "Role #{h @role.name}"
- .inner
- = partial('navigation', :active => 'edit')
- = partial('form', :header => "Edit Role #{@role.name}", :form_id => 'edit_role', :submit_name => "Save Role", :submit_id => "edit_role_button", :form_for => 'edit', :form_url => slice_url(:role, @role.name) )
diff --git a/chef-server-slice/app/views/roles/index.html.haml b/chef-server-slice/app/views/roles/index.html.haml
deleted file mode 100644
index 6ab526b5d1..0000000000
--- a/chef-server-slice/app/views/roles/index.html.haml
+++ /dev/null
@@ -1,22 +0,0 @@
-.block#block-tables
- .content
- %h2.title Roles
- .inner
- = partial('navigation', :active => 'index')
- .content
- .inner
- %table.table
- %tr
- %th.first Name
- %th Description
- %th.last &nbsp;
- - even = false;
- - @role_list.each do |role|
- %tr{ :class => even ? "even" : "odd" }
- %td= link_to(role.name, slice_url(:role, role.name))
- %td= role.description
- %td
- = link_to('Edit', slice_url(:edit_role, role.name))
- |
- = link_to('Delete', slice_url(:role, role.name), :method => "delete", :confirm => "Really delete Role #{role.name}? there is no undo.")
- - even ? even = false: even = true
diff --git a/chef-server-slice/app/views/roles/new.html.haml b/chef-server-slice/app/views/roles/new.html.haml
deleted file mode 100644
index 3af7544053..0000000000
--- a/chef-server-slice/app/views/roles/new.html.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-.block#block-tables
- .content
- %h2.title= "Role"
- .inner
- = partial('navigation', :active => 'create')
- = partial('form', :header => "Create new Role", :form_id => 'create_role', :submit_name => "Create Role", :submit_id => "create_role_button", :form_for => 'create', :form_url => slice_url(:roles))
diff --git a/chef-server-slice/app/views/roles/show.html.haml b/chef-server-slice/app/views/roles/show.html.haml
deleted file mode 100644
index 4e3b8e22b0..0000000000
--- a/chef-server-slice/app/views/roles/show.html.haml
+++ /dev/null
@@ -1,29 +0,0 @@
-.block#block-tables
- .content
- %h2.title= "Role #{h @role.name}"
- .inner
- = partial("navigation", :active => "show")
- .content
- .inner
- .left
- %h3 Description
- = @role.description
-
- .left
- %h3 Recipes
- %table#recipes.table
- %tr
- %th.first Position
- %th.last Name
- - @role.recipes.each_index do |i|
- %tr
- %td.position= i
- %td= @role.recipes[i]
- .left
- %h3 Default Attributes
- = build_tree('defattrs', @role.default_attributes)
-
- .left
- %h3 Override Attributes
- = build_tree('overattrs', @role.override_attributes)
-
diff --git a/chef-server-slice/app/views/search/_search_form.html.haml b/chef-server-slice/app/views/search/_search_form.html.haml
deleted file mode 100644
index 5396e65123..0000000000
--- a/chef-server-slice/app/views/search/_search_form.html.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-%form{ :method => "get", :action => slice_url(:search, { :id => index_name }) }
- Q:
- %input{ :type => "text", :name => "q" }
- A:
- %input{ :type => "text", :name => "a" }
- %input{ :type => "submit", :value => "Search #{index_name}" }
diff --git a/chef-server-slice/app/views/search/index.html.haml b/chef-server-slice/app/views/search/index.html.haml
deleted file mode 100644
index 8f3b199592..0000000000
--- a/chef-server-slice/app/views/search/index.html.haml
+++ /dev/null
@@ -1,9 +0,0 @@
-.block#block-forms
- .content
- %h2.title Search Indexes
- .inner
- - @search_indexes.sort{ |a,b| a.to_s <=> b.to_s}.each do |index|
- %form.form{ :method => "get", "accept-charset" => "UTF-8", :action => slice_url(:search, { :id => index})}
- .group.label= text_field :name => "q", :label => "Query"
- .group.label= text_field :name => "a", :label => "Attributes"
- .group= submit "Search #{index}" \ No newline at end of file
diff --git a/chef-server-slice/app/views/search/show.html.haml b/chef-server-slice/app/views/search/show.html.haml
deleted file mode 100644
index f20f9fa2ea..0000000000
--- a/chef-server-slice/app/views/search/show.html.haml
+++ /dev/null
@@ -1,14 +0,0 @@
-.block#block-tables
- .content
- %h2.title Search Results
- .inner
- - @results.each do |result|
- %table.table.search{:width => '400px'}
- %tr
- %th.first Attribute
- %th.last Value
- - @results.each do |result|
- - result.sort { |a,b| a[0].to_s <=> b[0].to_s}.each_with_index do |h,index|
- %tr{:class => "#{index % 2 == 1 ? 'odd' : 'even'}"}
- %td= "#{h[0]} (#{h[1].class})"
- %td= h[1] \ No newline at end of file
diff --git a/chef-server-slice/app/views/search_entries/index.html.haml b/chef-server-slice/app/views/search_entries/index.html.haml
deleted file mode 100644
index c6fab2b649..0000000000
--- a/chef-server-slice/app/views/search_entries/index.html.haml
+++ /dev/null
@@ -1,8 +0,0 @@
-- @entries.each do |result|
- .search_result
- %h3= "#{h result[:index_name]} (#{h result[:id]})"
- %table
- - result.each do |k, v|
- %tr.attr_group
- %td.attr_name= k
- %td.attr_value= v.kind_of?(Array) ? v.join(",") : v \ No newline at end of file
diff --git a/chef-server-slice/app/views/search_entries/show.html.haml b/chef-server-slice/app/views/search_entries/show.html.haml
deleted file mode 100644
index f8a8c3813a..0000000000
--- a/chef-server-slice/app/views/search_entries/show.html.haml
+++ /dev/null
@@ -1,7 +0,0 @@
-.search_result
- %h3= "#{h @entry[:index_name]} (#{h @entry[:id]})"
- %table
- - @entry.each do |k, v|
- %tr.attr_group
- %td.attr_name= k
- %td.attr_value= v.kind_of?(Array) ? v.join(",") : v \ No newline at end of file
diff --git a/chef-server-slice/app/views/status/index.html.haml b/chef-server-slice/app/views/status/index.html.haml
deleted file mode 100644
index c271242c67..0000000000
--- a/chef-server-slice/app/views/status/index.html.haml
+++ /dev/null
@@ -1,88 +0,0 @@
-.block#block-tables
- .content
- %h2.title Status
- .inner
- %table.table
- %tr
- %th.first Node Name
- %th Platform
- %th FQDN
- %th IP Address
- %th Uptime
- %th Last Check-in
- %th.last Run List
- - if @status.empty?
- %tr
- %td{:colspan => 7}= "You appear to have no nodes - try connecting one, or validating an existing #{link_to('registration', slice_url(:registrations))}"
- - else
- - @status.each_with_index do |node, index|
- %tr{:class => "#{index % 2 == 1 ? 'odd' : 'even'}"}
- %td= link_to(node["name"], slice_url(:node, escape_node_id(node["name"])))
- %td= "#{node["platform"]} #{node["platform_version"]}"
- %td= node["fqdn"]
- %td= node["ipaddress"]
- %td
- .accordion
- = link_to(node["uptime"].split(" ")[0..1].join(" ") , "#", :class => 'tooltip')
- .tooltip
- %table.table.tooltip
- %tr
- %td= node["uptime"]
- - if node["ohai_time"].to_s != "Undefined"
- - current_time = DateTime.now
- - date = DateTime.strptime(node["ohai_time"].to_s, "%s")
- - hours, minutes, seconds, frac = DateTime.day_fraction_to_time(current_time - date)
- - hours_text = "#{hours} hour#{hours == 1 ? '' : 's'}"
- - minutes_text = "#{minutes} minute#{minutes == 1 ? '' : 's'}"
- %td.flash
- - status_class = ""
- - if hours > 24
- - status_class = "message error"
- - elsif hours > 1
- - status_class = "message warning"
- %div{ :class => status_class }
- .accordion
- - if hours > 48
- - status_msg = "&gt; #{hours/24} days ago"
- - elsif hours > 0
- - status_msg = "&gt; #{hours_text} ago"
- - elsif minutes < 1
- - status_msg = "&lt; 1 minute ago"
- - else
- - status_msg = "#{minutes_text} ago"
- = link_to(status_msg, "#", :class=> 'tooltip')
- .tooltip
- %table.table.tooltip
- %tr
- %td
- = date
- %br
- - if hours == 0
- = "#{minutes_text} ago"
- - else
- = "#{hours_text}, #{minutes_text} ago"
- - else
- %td Undefined
- - if node["run_list"] != "Undefined"
- %td
- .accordion
- = link_to("Run List", "#", :class => 'tooltip')
- .tooltip
- %table.table.tooltip
- %tr
- %th.first Position
- %th Name
- %th.last Type
- - if node['run_list'].empty?
- %tr
- %td{:colspan => 2} This node has no roles or recipes applied.
- - else
- - rl = Chef::RunList.new
- - rl.reset(node["run_list"])
- -rl.each_index do |i|
- - type, name, fname = rl.parse_entry(rl[i])
- %tr
- %td.position= i
- %td= name
- %td= type
-
diff --git a/chef-server-slice/config/init.rb b/chef-server-slice/config/init.rb
deleted file mode 100644
index f418f93a4e..0000000000
--- a/chef-server-slice/config/init.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# ==== Standalone Chefserver configuration
-#
-# This configuration/environment file is only loaded by bin/slice, which can be
-# used during development of the slice. It has no effect on this slice being
-# loaded in a host application. To run your slice in standalone mode, just
-# run 'slice' from its directory. The 'slice' command is very similar to
-# the 'merb' command, and takes all the same options, including -i to drop
-# into an irb session for example.
-#
-# The usual Merb configuration directives and init.rb setup methods apply,
-# including use_orm and before_app_loads/after_app_loads.
-#
-# If you need need different configurations for different environments you can
-# even create the specific environment file in config/environments/ just like
-# in a regular Merb application.
-#
-# In fact, a slice is no different from a normal # Merb application - it only
-# differs by the fact that seamlessly integrates into a so called 'host'
-# application, which in turn can override or finetune the slice implementation
-# code and views.
-#
-
-$: << File.join(File.dirname(__FILE__), "..", "..", "chef", "lib")
-require 'chef'
-
-merb_gems_version = " > 1.0"
-dependency "merb-haml", merb_gems_version
-dependency "merb-assets", merb_gems_version
-dependency "merb-helpers", merb_gems_version
-dependency "chef", :immediate=>true unless defined?(Chef)
-
-use_template_engine :haml
-
-Merb::Config.use do |c|
- # BUGBUG [cb] For some reason, this next line
- # causes a merb slice to vomit around openid
- # c[:fork_for_class_load] = false
-
- c[:session_id_key] = '_chef_server_session_id'
- c[:session_secret_key] = Chef::Config.manage_secret_key
- c[:session_store] = 'cookie'
- c[:exception_details] = true
- c[:reload_classes] = true
- c[:log_level] = Chef::Config[:log_level]
- c[:log_file] = Chef::Config[:log_location]
-end
-
diff --git a/chef-server-slice/config/router.rb b/chef-server-slice/config/router.rb
deleted file mode 100644
index 3142a1d1a9..0000000000
--- a/chef-server-slice/config/router.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-# This file is here so slice can be testing as a stand alone application.
-
-#Merb::Router.prepare do
-# resources :roles
-# ...
-#end
diff --git a/chef-server-slice/lib/chef-server-slice.rb b/chef-server-slice/lib/chef-server-slice.rb
deleted file mode 100644
index 46e5b97fdb..0000000000
--- a/chef-server-slice/lib/chef-server-slice.rb
+++ /dev/null
@@ -1,150 +0,0 @@
-if defined?(Merb::Plugins)
- $:.unshift File.dirname(__FILE__)
-
- dependency 'merb-slices', :immediate => true
- dependency 'chef', :immediate=>true unless defined?(Chef)
- require 'chef/role'
-
- require 'coderay'
-
- Merb::Plugins.add_rakefiles "chef-server-slice/merbtasks", "chef-server-slice/slicetasks", "chef-server-slice/spectasks"
-
- # Register the Slice for the current host application
- Merb::Slices::register(__FILE__)
-
- Merb.disable :json
-
- # Slice configuration - set this in a before_app_loads callback.
- # By default a Slice uses its own layout, so you can switch to
- # the main application layout or no layout at all if needed.
- #
- # Configuration options:
- # :layout - the layout to use; defaults to :chefserverslice
- # :mirror - which path component types to use on copy operations; defaults to all
- Merb::Slices::config[:chef_server_slice][:layout] ||= :chef_server_slice
-
- # All Slice code is expected to be namespaced inside a module
- module ChefServerSlice
- # Slice metadata
- self.description = "ChefServerSlice.. serving up some piping hot infrastructure!"
- self.version = Chef::VERSION
- self.author = "Opscode"
-
- # Stub classes loaded hook - runs before LoadClasses BootLoader
- # right after a slice's classes have been loaded internally.
- def self.loaded
- Chef::Queue.connect
-
- # create the couch databases for openid association and nonce storage, if configured
- if Chef::Config[:openid_store_couchdb] || Chef::Config[:openid_cstore_couchdb]
- rest = Chef::REST.new(Chef::Config[:couchdb_url])
- @database_list = rest.get_rest("_all_dbs")
- unless @database_list.detect { |db| db == 'associations' }
- response = rest.put_rest('associations', Hash.new)
- end
- unless @database_list.detect { |db| db == 'nonces' }
- response = rest.put_rest('nonces', Hash.new)
- end
- end
-
- # create the couch design docs for nodes and openid registrations
- Chef::Node.create_design_document
- Chef::Role.create_design_document
- Chef::OpenIDRegistration.create_design_document
-
- Chef::Log.logger = Merb.logger
- Chef::Log.info("Compiling routes... (totally normal to see 'Cannot find resource model')")
- Chef::Log.info("Loading roles")
- Chef::Role.sync_from_disk_to_couchdb
- end
-
- # Initialization hook - runs before AfterAppLoads BootLoader
- def self.init
- end
-
- # Activation hook - runs after AfterAppLoads BootLoader
- def self.activate
- end
-
- # Deactivation hook - triggered by Merb::Slices.deactivate(Chefserver)
- def self.deactivate
- end
-
- # Setup routes inside the host application
- #
- # @param scope<Merb::Router::Behaviour>
- # Routes will be added within this scope (namespace). In fact, any
- # router behaviour is a valid namespace, so you can attach
- # routes at any level of your router setup.
- #
- # @note prefix your named routes with :chefserverslice_
- # to avoid potential conflicts with global named routes.
- def self.setup_router(scope)
-
- scope.resources :nodes
- scope.resources :roles
-
- scope.match("/status").to(:controller => "status", :action => "index").name(:status)
-
- scope.resources :searches, :path => "search", :controller => "search"
- scope.match("/search/:search_id/entries", :method => 'get').to(:controller => "search_entries", :action => "index")
- scope.match("/search/:search_id/entries", :method => 'post').to(:controller => "search_entries", :action => "create")
- scope.match("/search/:search_id/entries/:id", :method => 'get').to(:controller => "search_entries", :action => "show")
- scope.match("/search/:search_id/entries/:id", :method => 'put').to(:controller => "search_entries", :action => "create")
- scope.match("/search/:search_id/entries/:id", :method => 'post').to(:controller => "search_entries", :action => "update")
- scope.match("/search/:search_id/entries/:id", :method => 'delete').to(:controller => "search_entries", :action => "destroy")
-
- scope.match("/cookbooks/_attribute_files").to(:controller => "cookbooks", :action => "attribute_files")
- scope.match("/cookbooks/_recipe_files").to(:controller => "cookbooks", :action => "recipe_files")
- scope.match("/cookbooks/_definition_files").to(:controller => "cookbooks", :action => "definition_files")
- scope.match("/cookbooks/_library_files").to(:controller => "cookbooks", :action => "library_files")
-
- scope.match("/cookbooks/:cookbook_id/templates", :cookbook_id => /[\w\.]+/).to(:controller => "cookbook_templates", :action => "index")
- scope.match("/cookbooks/:cookbook_id/libraries", :cookbook_id => /[\w\.]+/).to(:controller => "cookbook_libraries", :action => "index")
- scope.match("/cookbooks/:cookbook_id/definitions", :cookbook_id => /[\w\.]+/).to(:controller => "cookbook_definitions", :action => "index")
- scope.match("/cookbooks/:cookbook_id/recipes", :cookbook_id => /[\w\.]+/).to(:controller => "cookbook_recipes", :action => "index")
- scope.match("/cookbooks/:cookbook_id/attributes", :cookbook_id => /[\w\.]+/).to(:controller => "cookbook_attributes", :action => "index")
- scope.match("/cookbooks/:cookbook_id/files", :cookbook_id => /[\w\.]+/).to(:controller => "cookbook_files", :action => "index")
-
- scope.resources :cookbooks
- scope.resources :registrations, :controller => "openid_register"
- scope.resources :registrations, :controller => "openid_register", :member => { :validate => :post }
- scope.resources :registrations, :controller => "openid_register", :member => { :admin => :post }
-
- scope.match("/openid/server").to(:controller => "openid_server", :action => "index").name(:openid_server)
- scope.match("/openid/server/server/xrds").
- to(:controller => "openid_server", :action => 'idp_xrds').name(:openid_server_xrds)
- scope.match("/openid/server/node/:id").
- to(:controller => "openid_server", :action => 'node_page').name(:openid_node)
- scope.match('/openid/server/node/:id/xrds').
- to(:controller => 'openid_server', :action => 'node_xrds').name(:openid_node_xrds)
- scope.match('/openid/server/decision').to(:controller => "openid_server", :action => "decision").name(:openid_server_decision)
- scope.match('/login').to(:controller=>'openid_consumer', :action=>'index').name(:openid_consumer)
- scope.match('/logout').to(:controller => 'openid_consumer', :action => 'logout').name(:openid_consumer_logout)
- scope.match('/openid/consumer').to(:controller => 'openid_consumer', :action => 'index').name(:openid_consumer)
- scope.match('/openid/consumer/start').to(:controller => 'openid_consumer', :action => 'start').name(:openid_consumer_start)
- scope.match('/openid/consumer/login').to(:controller => 'openid_consumer', :action => 'login').name(:openid_consumer_login)
- scope.match('/openid/consumer/complete').to(:controller => 'openid_consumer', :action => 'complete').name(:openid_consumer_complete)
- scope.match('/openid/consumer/logout').to(:controller => 'openid_consumer', :action => 'logout').name(:openid_consumer_logout)
-
- scope.match('/').to(:controller => 'nodes', :action =>'index').name(:top)
- # enable slice-level default routes by default
- # scope.default_routes
- end
-
- end
-
- # Setup the slice layout for ChefServerSlice
- #
- # Use ChefServerSlice.push_path and ChefServerSlice.push_app_path
- # to set paths to chefserver-level and app-level paths. Example:
- #
- # ChefServerSlice.push_path(:application, ChefServerSlice.root)
- # ChefServerSlice.push_app_path(:application, Merb.root / 'slices' / 'chefserverslice')
- # ...
- #
- # Any component path that hasn't been set will default to ChefServerSlice.root
- #
- # Or just call setup_default_structure! to setup a basic Merb MVC structure.
- ChefServerSlice.setup_default_structure!
-end
diff --git a/chef-server-slice/lib/chef-server-slice/merbtasks.rb b/chef-server-slice/lib/chef-server-slice/merbtasks.rb
deleted file mode 100644
index 554799bf65..0000000000
--- a/chef-server-slice/lib/chef-server-slice/merbtasks.rb
+++ /dev/null
@@ -1,103 +0,0 @@
-namespace :slices do
- namespace :chefserverslice do
-
- desc "Install Chefserver"
- task :install => [:preflight, :setup_directories, :copy_assets, :migrate]
-
- desc "Test for any dependencies"
- task :preflight do # see slicetasks.rb
- end
-
- desc "Setup directories"
- task :setup_directories do
- puts "Creating directories for host application"
- ChefServerSlice.mirrored_components.each do |type|
- if File.directory?(ChefServerSlice.dir_for(type))
- if !File.directory?(dst_path = ChefServerSlice.app_dir_for(type))
- relative_path = dst_path.relative_path_from(Merb.root)
- puts "- creating directory :#{type} #{File.basename(Merb.root) / relative_path}"
- mkdir_p(dst_path)
- end
- end
- end
- end
-
- # desc "Copy stub files to host application"
- # task :stubs do
- # puts "Copying stubs for ChefServerSlice - resolves any collisions"
- # copied, preserved = ChefServerSlice.mirror_stubs!
- # puts "- no files to copy" if copied.empty? && preserved.empty?
- # copied.each { |f| puts "- copied #{f}" }
- # preserved.each { |f| puts "! preserved override as #{f}" }
- # end
-
- # desc "Copy stub files and views to host application"
- # task :patch => [ "stubs", "freeze:views" ]
-
- desc "Copy public assets to host application"
- task :copy_assets do
- puts "Copying assets for ChefServerSlice - resolves any collisions"
- copied, preserved = ChefServerSlice.mirror_public!
- puts "- no files to copy" if copied.empty? && preserved.empty?
- copied.each { |f| puts "- copied #{f}" }
- preserved.each { |f| puts "! preserved override as #{f}" }
- end
-
- desc "Migrate the database"
- task :migrate do # see slicetasks.rb
- end
-
- desc "Freeze ChefServerSlice into your app (only chefserverslice/app)"
- task :freeze => [ "freeze:app" ]
-
- namespace :freeze do
-
- # desc "Freezes ChefServerSlice by installing the gem into application/gems"
- # task :gem do
- # ENV["GEM"] ||= "chefserverslice"
- # Rake::Task['slices:install_as_gem'].invoke
- # end
-
- desc "Freezes ChefServerSlice by copying all files from chefserverslice/app to your application"
- task :app do
- puts "Copying all chefserverslice/app files to your application - resolves any collisions"
- copied, preserved = ChefServerSlice.mirror_app!
- puts "- no files to copy" if copied.empty? && preserved.empty?
- copied.each { |f| puts "- copied #{f}" }
- preserved.each { |f| puts "! preserved override as #{f}" }
- end
-
- desc "Freeze all views into your application for easy modification"
- task :views do
- puts "Copying all view templates to your application - resolves any collisions"
- copied, preserved = ChefServerSlice.mirror_files_for :view
- puts "- no files to copy" if copied.empty? && preserved.empty?
- copied.each { |f| puts "- copied #{f}" }
- preserved.each { |f| puts "! preserved override as #{f}" }
- end
-
- desc "Freeze all models into your application for easy modification"
- task :models do
- puts "Copying all models to your application - resolves any collisions"
- copied, preserved = ChefServerSlice.mirror_files_for :model
- puts "- no files to copy" if copied.empty? && preserved.empty?
- copied.each { |f| puts "- copied #{f}" }
- preserved.each { |f| puts "! preserved override as #{f}" }
- end
-
- desc "Freezes ChefServerSlice as a gem and copies over chefserver/app"
- task :app_with_gem => [:gem, :app]
-
- desc "Freezes ChefServerSlice by unpacking all files into your application"
- task :unpack do
- puts "Unpacking ChefServerSlice files to your application - resolves any collisions"
- copied, preserved = ChefServerSlice.unpack_slice!
- puts "- no files to copy" if copied.empty? && preserved.empty?
- copied.each { |f| puts "- copied #{f}" }
- preserved.each { |f| puts "! preserved override as #{f}" }
- end
-
- end
-
- end
-end
diff --git a/chef-server-slice/lib/chef-server-slice/slicetasks.rb b/chef-server-slice/lib/chef-server-slice/slicetasks.rb
deleted file mode 100644
index 187323a299..0000000000
--- a/chef-server-slice/lib/chef-server-slice/slicetasks.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-namespace :slices do
- namespace :chefserverslice do
-
- # add your own chefserver tasks here
-
- # # Uncomment the following lines and edit the pre defined tasks
- #
- # # implement this to test for structural/code dependencies
- # # like certain directories or availability of other files
- # desc "Test for any dependencies"
- # task :preflight do
- # end
- #
- # # implement this to perform any database related setup steps
- # desc "Migrate the database"
- # task :migrate do
- # end
-
- end
-end
diff --git a/chef-server-slice/lib/chef-server-slice/spectasks.rb b/chef-server-slice/lib/chef-server-slice/spectasks.rb
deleted file mode 100644
index 328b517cb0..0000000000
--- a/chef-server-slice/lib/chef-server-slice/spectasks.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-namespace :slices do
- namespace :chefserverslice do
-
- desc "Run slice specs within the host application context"
- task :spec => [ "spec:explain", "spec:default" ]
-
- namespace :spec do
-
- slice_root = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
-
- task :explain do
- puts "\nNote: By running ChefServerSlice specs inside the application context any\n" +
- "overrides could break existing specs. This isn't always a problem,\n" +
- "especially in the case of views. Use these spec tasks to check how\n" +
- "well your application conforms to the original slice implementation."
- end
-
- Spec::Rake::SpecTask.new('default') do |t|
- t.spec_opts = ["--format", "specdoc", "--colour"]
- t.spec_files = Dir["#{slice_root}/spec/**/*_spec.rb"].sort
- end
-
- desc "Run all model specs, run a spec for a specific Model with MODEL=MyModel"
- Spec::Rake::SpecTask.new('model') do |t|
- t.spec_opts = ["--format", "specdoc", "--colour"]
- if(ENV['MODEL'])
- t.spec_files = Dir["#{slice_root}/spec/models/**/#{ENV['MODEL']}_spec.rb"].sort
- else
- t.spec_files = Dir["#{slice_root}/spec/models/**/*_spec.rb"].sort
- end
- end
-
- desc "Run all request specs, run a spec for a specific request with REQUEST=MyRequest"
- Spec::Rake::SpecTask.new('request') do |t|
- t.spec_opts = ["--format", "specdoc", "--colour"]
- if(ENV['REQUEST'])
- t.spec_files = Dir["#{slice_root}/spec/requests/**/#{ENV['REQUEST']}_spec.rb"].sort
- else
- t.spec_files = Dir["#{slice_root}/spec/requests/**/*_spec.rb"].sort
- end
- end
-
- desc "Run all specs and output the result in html"
- Spec::Rake::SpecTask.new('html') do |t|
- t.spec_opts = ["--format", "html"]
- t.libs = ['lib', 'server/lib' ]
- t.spec_files = Dir["#{slice_root}/spec/**/*_spec.rb"].sort
- end
-
- end
-
- end
-end
diff --git a/chef-server-slice/public/facebox/README.txt b/chef-server-slice/public/facebox/README.txt
deleted file mode 100644
index d4fc2d5e81..0000000000
--- a/chef-server-slice/public/facebox/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Please visit http://famspam.com/facebox/ or open index.html in your favorite browser.
-
-Need help? Join our Google Groups mailing list:
- http://groups.google.com/group/facebox/
diff --git a/chef-server-slice/public/facebox/b.png b/chef-server-slice/public/facebox/b.png
deleted file mode 100644
index f184e6269b..0000000000
--- a/chef-server-slice/public/facebox/b.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/facebox/bl.png b/chef-server-slice/public/facebox/bl.png
deleted file mode 100644
index f6271859d5..0000000000
--- a/chef-server-slice/public/facebox/bl.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/facebox/br.png b/chef-server-slice/public/facebox/br.png
deleted file mode 100644
index 31f204fc45..0000000000
--- a/chef-server-slice/public/facebox/br.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/facebox/closelabel.gif b/chef-server-slice/public/facebox/closelabel.gif
deleted file mode 100755
index 87b4f8bd69..0000000000
--- a/chef-server-slice/public/facebox/closelabel.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/facebox/facebox.css b/chef-server-slice/public/facebox/facebox.css
deleted file mode 100644
index 97ebe3cab3..0000000000
--- a/chef-server-slice/public/facebox/facebox.css
+++ /dev/null
@@ -1,95 +0,0 @@
-#facebox .b {
- background:url(/facebox/b.png);
-}
-
-#facebox .tl {
- background:url(/facebox/tl.png);
-}
-
-#facebox .tr {
- background:url(/facebox/tr.png);
-}
-
-#facebox .bl {
- background:url(/facebox/bl.png);
-}
-
-#facebox .br {
- background:url(/facebox/br.png);
-}
-
-#facebox {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 100;
- text-align: left;
-}
-
-#facebox .popup {
- position: relative;
-}
-
-#facebox table {
- border-collapse: collapse;
-}
-
-#facebox td {
- border-bottom: 0;
- padding: 0;
-}
-
-#facebox .body {
- padding: 10px;
- background: #fff;
- width: 370px;
-}
-
-#facebox .loading {
- text-align: center;
-}
-
-#facebox .image {
- text-align: center;
-}
-
-#facebox img {
- border: 0;
- margin: 0;
-}
-
-#facebox .footer {
- border-top: 1px solid #DDDDDD;
- padding-top: 5px;
- margin-top: 10px;
- text-align: right;
-}
-
-#facebox .tl, #facebox .tr, #facebox .bl, #facebox .br {
- height: 10px;
- width: 10px;
- overflow: hidden;
- padding: 0;
-}
-
-#facebox_overlay {
- position: fixed;
- top: 0px;
- left: 0px;
- height:100%;
- width:100%;
-}
-
-.facebox_hide {
- z-index:-100;
-}
-
-.facebox_overlayBG {
- background-color: #000;
- z-index: 99;
-}
-
-* html #facebox_overlay { /* ie6 hack */
- position: absolute;
- height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
-}
diff --git a/chef-server-slice/public/facebox/facebox.js b/chef-server-slice/public/facebox/facebox.js
deleted file mode 100644
index cbbb450b10..0000000000
--- a/chef-server-slice/public/facebox/facebox.js
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * Facebox (for jQuery)
- * version: 1.2 (05/05/2008)
- * @requires jQuery v1.2 or later
- *
- * Examples at http://famspam.com/facebox/
- *
- * Licensed under the MIT:
- * http://www.opensource.org/licenses/mit-license.php
- *
- * Copyright 2007, 2008 Chris Wanstrath [ chris@ozmm.org ]
- *
- * Usage:
- *
- * jQuery(document).ready(function() {
- * jQuery('a[rel*=facebox]').facebox()
- * })
- *
- * <a href="#terms" rel="facebox">Terms</a>
- * Loads the #terms div in the box
- *
- * <a href="terms.html" rel="facebox">Terms</a>
- * Loads the terms.html page in the box
- *
- * <a href="terms.png" rel="facebox">Terms</a>
- * Loads the terms.png image in the box
- *
- *
- * You can also use it programmatically:
- *
- * jQuery.facebox('some html')
- *
- * The above will open a facebox with "some html" as the content.
- *
- * jQuery.facebox(function($) {
- * $.get('blah.html', function(data) { $.facebox(data) })
- * })
- *
- * The above will show a loading screen before the passed function is called,
- * allowing for a better ajaxy experience.
- *
- * The facebox function can also display an ajax page or image:
- *
- * jQuery.facebox({ ajax: 'remote.html' })
- * jQuery.facebox({ image: 'dude.jpg' })
- *
- * Want to close the facebox? Trigger the 'close.facebox' document event:
- *
- * jQuery(document).trigger('close.facebox')
- *
- * Facebox also has a bunch of other hooks:
- *
- * loading.facebox
- * beforeReveal.facebox
- * reveal.facebox (aliased as 'afterReveal.facebox')
- * init.facebox
- *
- * Simply bind a function to any of these hooks:
- *
- * $(document).bind('reveal.facebox', function() { ...stuff to do after the facebox and contents are revealed... })
- *
- */
-(function($) {
- $.facebox = function(data, klass) {
- $.facebox.loading()
-
- if (data.ajax) fillFaceboxFromAjax(data.ajax)
- else if (data.image) fillFaceboxFromImage(data.image)
- else if (data.div) fillFaceboxFromHref(data.div)
- else if ($.isFunction(data)) data.call($)
- else $.facebox.reveal(data, klass)
- }
-
- /*
- * Public, $.facebox methods
- */
-
- $.extend($.facebox, {
- settings: {
- opacity : 0,
- overlay : true,
- loadingImage : '/facebox/loading.gif',
- closeImage : '/facebox/closelabel.gif',
- imageTypes : [ 'png', 'jpg', 'jpeg', 'gif' ],
- faceboxHtml : '\
- <div id="facebox" style="display:none;"> \
- <div class="popup"> \
- <table> \
- <tbody> \
- <tr> \
- <td class="tl"/><td class="b"/><td class="tr"/> \
- </tr> \
- <tr> \
- <td class="b"/> \
- <td class="body"> \
- <div class="content"> \
- </div> \
- <div class="footer"> \
- <a href="#" class="close"> \
- <img src="/facebox/closelabel.gif" title="close" class="close_image" /> \
- </a> \
- </div> \
- </td> \
- <td class="b"/> \
- </tr> \
- <tr> \
- <td class="bl"/><td class="b"/><td class="br"/> \
- </tr> \
- </tbody> \
- </table> \
- </div> \
- </div>'
- },
-
- loading: function() {
- init()
- if ($('#facebox .loading').length == 1) return true
- showOverlay()
-
- $('#facebox .content').empty()
- $('#facebox .body').children().hide().end().
- append('<div class="loading"><img src="'+$.facebox.settings.loadingImage+'"/></div>')
-
- $('#facebox').css({
- top: getPageScroll()[1] + (getPageHeight() / 10),
- left: 385.5
- }).show()
-
- $(document).bind('keydown.facebox', function(e) {
- if (e.keyCode == 27) $.facebox.close()
- return true
- })
- $(document).trigger('loading.facebox')
- },
-
- reveal: function(data, klass) {
- $(document).trigger('beforeReveal.facebox')
- if (klass) $('#facebox .content').addClass(klass)
- $('#facebox .content').append(data)
- $('#facebox .loading').remove()
- $('#facebox .body').children().fadeIn('normal')
- $('#facebox').css('left', $(window).width() / 2 - ($('#facebox table').width() / 2))
- $(document).trigger('reveal.facebox').trigger('afterReveal.facebox')
- },
-
- close: function() {
- $(document).trigger('close.facebox')
- return false
- }
- })
-
- /*
- * Public, $.fn methods
- */
-
- $.fn.facebox = function(settings) {
- init(settings)
-
- function clickHandler() {
- $.facebox.loading(true)
-
- // support for rel="facebox.inline_popup" syntax, to add a class
- // also supports deprecated "facebox[.inline_popup]" syntax
- var klass = this.rel.match(/facebox\[?\.(\w+)\]?/)
- if (klass) klass = klass[1]
-
- fillFaceboxFromHref(this.href, klass)
- return false
- }
-
- return this.click(clickHandler)
- }
-
- /*
- * Private methods
- */
-
- // called one time to setup facebox on this page
- function init(settings) {
- if ($.facebox.settings.inited) return true
- else $.facebox.settings.inited = true
-
- $(document).trigger('init.facebox')
- makeCompatible()
-
- var imageTypes = $.facebox.settings.imageTypes.join('|')
- $.facebox.settings.imageTypesRegexp = new RegExp('\.' + imageTypes + '$', 'i')
-
- if (settings) $.extend($.facebox.settings, settings)
- $('body').append($.facebox.settings.faceboxHtml)
-
- var preload = [ new Image(), new Image() ]
- preload[0].src = $.facebox.settings.closeImage
- preload[1].src = $.facebox.settings.loadingImage
-
- $('#facebox').find('.b:first, .bl, .br, .tl, .tr').each(function() {
- preload.push(new Image())
- preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1')
- })
-
- $('#facebox .close').click($.facebox.close)
- $('#facebox .close_image').attr('src', $.facebox.settings.closeImage)
- }
-
- // getPageScroll() by quirksmode.com
- function getPageScroll() {
- var xScroll, yScroll;
- if (self.pageYOffset) {
- yScroll = self.pageYOffset;
- xScroll = self.pageXOffset;
- } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
- yScroll = document.documentElement.scrollTop;
- xScroll = document.documentElement.scrollLeft;
- } else if (document.body) {// all other Explorers
- yScroll = document.body.scrollTop;
- xScroll = document.body.scrollLeft;
- }
- return new Array(xScroll,yScroll)
- }
-
- // Adapted from getPageSize() by quirksmode.com
- function getPageHeight() {
- var windowHeight
- if (self.innerHeight) { // all except Explorer
- windowHeight = self.innerHeight;
- } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
- windowHeight = document.documentElement.clientHeight;
- } else if (document.body) { // other Explorers
- windowHeight = document.body.clientHeight;
- }
- return windowHeight
- }
-
- // Backwards compatibility
- function makeCompatible() {
- var $s = $.facebox.settings
-
- $s.loadingImage = $s.loading_image || $s.loadingImage
- $s.closeImage = $s.close_image || $s.closeImage
- $s.imageTypes = $s.image_types || $s.imageTypes
- $s.faceboxHtml = $s.facebox_html || $s.faceboxHtml
- }
-
- // Figures out what you want to display and displays it
- // formats are:
- // div: #id
- // image: blah.extension
- // ajax: anything else
- function fillFaceboxFromHref(href, klass) {
- // div
- if (href.match(/#/)) {
- var url = window.location.href.split('#')[0]
- var target = href.replace(url,'')
- $.facebox.reveal($(target).clone().show(), klass)
-
- // image
- } else if (href.match($.facebox.settings.imageTypesRegexp)) {
- fillFaceboxFromImage(href, klass)
- // ajax
- } else {
- fillFaceboxFromAjax(href, klass)
- }
- }
-
- function fillFaceboxFromImage(href, klass) {
- var image = new Image()
- image.onload = function() {
- $.facebox.reveal('<div class="image"><img src="' + image.src + '" /></div>', klass)
- }
- image.src = href
- }
-
- function fillFaceboxFromAjax(href, klass) {
- $.get(href, function(data) { $.facebox.reveal(data, klass) })
- }
-
- function skipOverlay() {
- return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null
- }
-
- function showOverlay() {
- if (skipOverlay()) return
-
- if ($('facebox_overlay').length == 0)
- $("body").append('<div id="facebox_overlay" class="facebox_hide"></div>')
-
- $('#facebox_overlay').hide().addClass("facebox_overlayBG")
- .css('opacity', $.facebox.settings.opacity)
- .click(function() { $(document).trigger('close.facebox') })
- .fadeIn(200)
- return false
- }
-
- function hideOverlay() {
- if (skipOverlay()) return
-
- $('#facebox_overlay').fadeOut(200, function(){
- $("#facebox_overlay").removeClass("facebox_overlayBG")
- $("#facebox_overlay").addClass("facebox_hide")
- $("#facebox_overlay").remove()
- })
-
- return false
- }
-
- /*
- * Bindings
- */
-
- $(document).bind('close.facebox', function() {
- $(document).unbind('keydown.facebox')
- $('#facebox').fadeOut(function() {
- $('#facebox .content').removeClass().addClass('content')
- hideOverlay()
- $('#facebox .loading').remove()
- })
- })
-
-})(jQuery);
diff --git a/chef-server-slice/public/facebox/loading.gif b/chef-server-slice/public/facebox/loading.gif
deleted file mode 100755
index f864d5fd38..0000000000
--- a/chef-server-slice/public/facebox/loading.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/facebox/tl.png b/chef-server-slice/public/facebox/tl.png
deleted file mode 100644
index d99c8f6c6e..0000000000
--- a/chef-server-slice/public/facebox/tl.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/facebox/tr.png b/chef-server-slice/public/facebox/tr.png
deleted file mode 100644
index e99b6ec831..0000000000
--- a/chef-server-slice/public/facebox/tr.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/avatar.png b/chef-server-slice/public/images/avatar.png
deleted file mode 100644
index 66488481ae..0000000000
--- a/chef-server-slice/public/images/avatar.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/black_big.png b/chef-server-slice/public/images/black_big.png
deleted file mode 100644
index 9cfe72609c..0000000000
--- a/chef-server-slice/public/images/black_big.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/indicator.gif b/chef-server-slice/public/images/indicator.gif
deleted file mode 100644
index 085ccaecaf..0000000000
--- a/chef-server-slice/public/images/indicator.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/merb.jpg b/chef-server-slice/public/images/merb.jpg
deleted file mode 100644
index a19dcf4048..0000000000
--- a/chef-server-slice/public/images/merb.jpg
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/toggle-collapse-dark.png b/chef-server-slice/public/images/toggle-collapse-dark.png
deleted file mode 100644
index 76577a57a2..0000000000
--- a/chef-server-slice/public/images/toggle-collapse-dark.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/toggle-collapse-light.png b/chef-server-slice/public/images/toggle-collapse-light.png
deleted file mode 100644
index ed1612fd9b..0000000000
--- a/chef-server-slice/public/images/toggle-collapse-light.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/toggle-collapse.gif b/chef-server-slice/public/images/toggle-collapse.gif
deleted file mode 100644
index f0979304ac..0000000000
--- a/chef-server-slice/public/images/toggle-collapse.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/toggle-expand-dark.png b/chef-server-slice/public/images/toggle-expand-dark.png
deleted file mode 100644
index cfb42a4512..0000000000
--- a/chef-server-slice/public/images/toggle-expand-dark.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/toggle-expand-light.png b/chef-server-slice/public/images/toggle-expand-light.png
deleted file mode 100644
index 27b52344dc..0000000000
--- a/chef-server-slice/public/images/toggle-expand-light.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/toggle-expand.gif b/chef-server-slice/public/images/toggle-expand.gif
deleted file mode 100644
index 03fa8360dd..0000000000
--- a/chef-server-slice/public/images/toggle-expand.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/Thumbs.db b/chef-server-slice/public/images/treeBuilderImages/Thumbs.db
deleted file mode 100755
index 934ed17cb5..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/Thumbs.db
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/doc.gif b/chef-server-slice/public/images/treeBuilderImages/doc.gif
deleted file mode 100755
index a0f4dd5dfb..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/doc.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/docNode.gif b/chef-server-slice/public/images/treeBuilderImages/docNode.gif
deleted file mode 100755
index 40167db1a5..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/docNode.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/docNodeLast.gif b/chef-server-slice/public/images/treeBuilderImages/docNodeLast.gif
deleted file mode 100755
index b7b3e55cd0..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/docNodeLast.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/docNodeLastFirst.gif b/chef-server-slice/public/images/treeBuilderImages/docNodeLastFirst.gif
deleted file mode 100755
index 2cbb765d7c..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/docNodeLastFirst.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/folder.gif b/chef-server-slice/public/images/treeBuilderImages/folder.gif
deleted file mode 100755
index 3952b3d234..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/folder.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/folderNode.gif b/chef-server-slice/public/images/treeBuilderImages/folderNode.gif
deleted file mode 100755
index 5b680136ee..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/folderNode.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/folderNodeFirst.gif b/chef-server-slice/public/images/treeBuilderImages/folderNodeFirst.gif
deleted file mode 100755
index 9039327677..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/folderNodeFirst.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/folderNodeLast.gif b/chef-server-slice/public/images/treeBuilderImages/folderNodeLast.gif
deleted file mode 100755
index b87f003154..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/folderNodeLast.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/folderNodeLastFirst.gif b/chef-server-slice/public/images/treeBuilderImages/folderNodeLastFirst.gif
deleted file mode 100755
index 64c4d7ae07..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/folderNodeLastFirst.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/folderNodeOpen.gif b/chef-server-slice/public/images/treeBuilderImages/folderNodeOpen.gif
deleted file mode 100755
index b43ce87bf7..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/folderNodeOpen.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/folderNodeOpenFirst.gif b/chef-server-slice/public/images/treeBuilderImages/folderNodeOpenFirst.gif
deleted file mode 100755
index d8ee1fc1b1..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/folderNodeOpenFirst.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/folderNodeOpenLast.gif b/chef-server-slice/public/images/treeBuilderImages/folderNodeOpenLast.gif
deleted file mode 100755
index 11ae43a5ae..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/folderNodeOpenLast.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/folderNodeOpenLastFirst.gif b/chef-server-slice/public/images/treeBuilderImages/folderNodeOpenLastFirst.gif
deleted file mode 100755
index ba5c0d168d..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/folderNodeOpenLastFirst.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/folderOpen.gif b/chef-server-slice/public/images/treeBuilderImages/folderOpen.gif
deleted file mode 100755
index 7df8d32261..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/folderOpen.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/images/treeBuilderImages/vertLine.gif b/chef-server-slice/public/images/treeBuilderImages/vertLine.gif
deleted file mode 100755
index 63ee93a0f3..0000000000
--- a/chef-server-slice/public/images/treeBuilderImages/vertLine.gif
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/javascripts/JSONeditor.js b/chef-server-slice/public/javascripts/JSONeditor.js
deleted file mode 100755
index b6dac054ba..0000000000
--- a/chef-server-slice/public/javascripts/JSONeditor.js
+++ /dev/null
@@ -1,1171 +0,0 @@
-/*
-jsonEditor 1.02
-copyright 2007-2009 Thomas Frank
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-JSONeditor={
- start:function(treeDivName,formDivName,json,showExamples){
- if(this.examples.length<6){
- var e=this.treeBuilder.JSONstring.make(this)
- eval("this.examples[5]={JSONeditor:"+e+"}")
- }
- this.treeDivName=treeDivName
- var t=this.treeBuilder, $=t.$
- treeBuilder=t
- var s=$(treeDivName).style
- var f=$(formDivName)
- var fs=f.style
- f.innerHTML=this.formHTML
- if(!showExamples){$('jExamples').style.display="none"}
- fs.fontSize=s.fontSize="11px"
- fs.fontFamily=s.fontFamily="Verdana,Arial,Helvetica,sans-serif"
- var e=f.getElementsByTagName("*")
- for(var i=0;i<e.length;i++){
- var s=e[i].style
- if(s){
- s.fontSize="11px"
- s.fontFamily="Verdana,Arial,Helvetica,sans-serif"
- }
- }
- json=json||{}
- t.JSONbuild(treeDivName,json)
- },
- loadExample:function(x){
- treeBuilder.hasRunJSONbuildOnce=false
- treeBuilder.JSONbuild(this.treeDivName,this.examples[x/1])
- },
- formHTML:"<form name=\"jsoninput\" onsubmit=\"return treeBuilder.jsonChange(this)\"><div id=\"jExamples\">Load an example:&nbsp;<select name=\"jloadExamples\" onchange=\"JSONeditor.loadExample(this.value)\"><option value=\"0\">None/empty</option><option value=\"1\">Employee data</option><option value=\"2\">Sample Konfabulator Widget</option><option value=\"3\">Member data</option><option value=\"4\">A menu system</option><option value=\"5\">The source code of this JSON editor</option></select><br><br></div>\nLabel:<br><input name=\"jlabel\" type=\"text\" value=\"\" size=\"60\" style=\"width:400px\"><br><br>\nValue: <br><textarea name=\"jvalue\" rows=\"10\" cols=\"50\" style=\"width:400px\"></textarea><br><br>\nData type: <select onchange=\"treeBuilder.changeJsonDataType(this.value,this.parentNode)\" name=\"jtype\">\n<option value=\"object\">object</option>\n<option value=\"array\">array</option>\n<option value=\"function\">function</option>\n<option value=\"string\">string</option>\n<option value=\"number\">number</option>\n<option value=\"boolean\">boolean</option>\n<option value=\"null\">null</option>\n<option value=\"undefined\">undefined</option>\n</select>&nbsp;&nbsp;&nbsp;&nbsp;\n<input name=\"orgjlabel\" type=\"hidden\" value=\"\" size=\"50\" style=\"width:300px\">\n<input onfocus=\"this.blur()\" type=\"submit\" value=\"Save\">&nbsp;\n<br><br>\n<input name=\"jAddChild\" onfocus=\"this.blur()\" type=\"button\" onclick=\"treeBuilder.jsonAddChild(this.parentNode)\" value=\"Add child\">\n<input name=\"jAddSibling\" onfocus=\"this.blur()\" type=\"button\" onclick=\"treeBuilder.jsonAddSibling(this.parentNode)\" value=\"Add sibling\">\n<br><br>\n<input name=\"jRemove\" onfocus=\"this.blur()\" type=\"button\" onclick=\"treeBuilder.jsonRemove(this.parentNode)\" value=\"Delete\">&nbsp;\n<input name=\"jRename\" onfocus=\"this.blur()\" type=\"button\" onclick=\"treeBuilder.jsonRename(this.parentNode)\" value=\"Rename\">&nbsp;\n<input name=\"jCut\" onfocus=\"this.blur()\" type=\"button\" onclick=\"treeBuilder.jsonCut(this.parentNode)\" value=\"Cut\">&nbsp;\n<input name=\"jCopy\" onfocus=\"this.blur()\" type=\"button\" onclick=\"treeBuilder.jsonCopy(this.parentNode)\" value=\"Copy\">&nbsp;\n<input name=\"jPaste\" onfocus=\"this.blur()\" type=\"button\" onclick=\"treeBuilder.jsonPaste(this.parentNode)\" value=\"Paste\">&nbsp;\n<br><br>\n<input type=\"checkbox\" name=\"jbefore\">Add children first/siblings before\n<br>\n<input type=\"checkbox\" name=\"jPasteAsChild\">Paste as child on objects & arrays\n<br><br><div id=\"jformMessage\"></div>\n</form>",
- examples:[{},
-{employee:{gid:102, companyID:121, defaultActionID:444,names:{firstName:"Stive", middleInitial:"Jr",lastName:"Martin"},address:{city:"Albany",state:"NY",zipCode:"14410-585",addreess:"41 State Street"},job:{departmentID:102,jobTitleID:100,hireDate:"1/02/2000",terminationDate:"1/12/2007"},contact:{phoneHome:"12-123-2133", beeper:"5656",email1:"info@soft-amis.com",fax:"21-321-23223",phoneMobile:"32-434-3433",phoneOffice:"82-900-8993"},login:{employeeID:"eID102",password:"password",superUser:true,lastLoginDate:"1/12/2007",text:"text", regexp:/^mmm/, date: new Date() },comment:{PCDATA:"comment"},roles:[{role:102},{role:103}]}},
-{"widget": {"debug": true,"window": {"title": "Sample Konfabulator Widget","name": "main_window","width": 500,"height": 500},"Pairs": [ {"src": "Images/Sun.png","name": "sun1"},{"hOffset": 250,"vOffset": 200},null,{"alignment": "center"}],"text": {"a very long item label here": "Click Here","size": 36,"style": "null","name": "text1","hOffset": 250,"vOffset": 100,"alignment": "center","onmouseover": function(){alert("Hello World");},"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"}}},
-{"members": [{"href": "1","entity": {"category": [{"term": "weblog", "label": "Weblog stuff"}],"updated": "2007-05-02T23:32:03Z","title": "This is the second post","author": {"uri": "http://dealmeida.net/","email": "roberto@dealmeida.net","name": "Rob de Almeida"},"summary": "Testing search","content": {"content": "This is my second post, to test the search.","type": "text"},"id": "1"}},{"href": "0","entity": {"category": [{"term": "weblog", "label": "Weblog stuff"},{"term": "json", "label": "JSON"}],"updated": "2007-05-02T23:25:59Z","title": "This is the second version of the first post","author": {"uri": "http://dealmeida.net/","email": "roberto@dealmeida.net","name": "Rob de Almeida"},"summary": "This is my first post here, after some modifications","content": {"content": "This is my first post, testing the jsonstore WSGI microapp PUT.","type": "html"},"id": "0"}}],"next": null},
-{"menu": {"header": "SVG Viewer","items": [{"id": "Open"},{"id": "OpenNew", "label": "Open New", "thing": "thing"},{"id": "ZoomIn", "label": "Zoom In"},{"id": "ZoomOut", "label": "Zoom Out"},{"id": "OriginalView", "label": "Original View"},null,{"id": "Quality"},{"id": "Pause"},{"id": "Mute"},null,{"id": "Find", "label": "Find..."},{"id": "FindAgain", "label": "Find Again"},{"id": "Copy"},{"id": "CopyAgain", "label": "Copy Again"},{"id": "CopySVG", "label": "Copy SVG"},{"id": "ViewSVG", "label": "View SVG"}]}}
- ]
-}
-
-
-/*
-treeBuilder v 1.00 + a lot of json stuff added...
-copyright 2007 Thomas Frank
-*/
-JSONeditor.treeBuilder={
- stateMem:{},
- images:{
- folderNode:'',
- folderNodeOpen:'',
- folderNodeLast:'',
- folderNodeOpenLast:'',
- docNode:'',
- docNodeLast:'',
- folder:'',
- folderOpen:'',
- doc:'',
- vertLine:'',
- folderNodeFirst:'',
- folderNodeOpenFirst:'',
- folderNodeLastFirst:'',
- folderNodeOpenLastFirst:'',
- path:'../../images/treeBuilderImages/',
- nodeWidth:16
- },
- $:function(x){return document.getElementById(x)},
- preParse:function(x){
- var x=x.innerHTML.split("\n");
- var d=[];
- for(var i=0;i<x.length;i++){
- if(x[i]){
- var y=x[i].split("\t");
- var l=0;while(!y[l]){l++};
- var la=y[l]?y[l]:'';l++;
- var t=y[l]?y[l]:'';
- d.push({level:l,label:la,todo:t});
- }
- };
- return d
- },
- isArray:function(x){
- return x.constructor==Array
- },
- jSyncTree:function(x){
- var d=this.$(this.baseDiv).getElementsByTagName('div')
- for(var i=0;i<d.length;i++){
-
- treeBuilder.maniClick="giveItBack"
- var p=d[i].onclick()
- if(p==x){
- var t=d[i]
- treeBuilder.maniClick="selectIt"
- t.onclick()
- t=t.parentNode
- while(t.id!=this.baseDiv){if(t.style){this.openAndClose(t.id,"open")};t=t.parentNode}
- }
- }
- treeBuilder.maniClick=false
- },
- jsonResponder:function(x){
- this.jTypeChanged=false
- treeBuilder.jSyncTree(x)
- var t=treeBuilder
- eval("var a=treeBuilder."+x)
- eval("var ap=treeBuilder."+treeBuilder.jsonParent(x))
- var b=JSON.stringify(a, null, ' ');
- var t=(a && treeBuilder.isArray(a))?"array":typeof a
- var tp=(ap && treeBuilder.isArray(ap))?"array":typeof ap
- if(a===null){t="null"}
- var f=document.forms.jsoninput
- if(t=="string"){eval("b="+b)}
- f.jlabel.value=x
- f.orgjlabel.value=x
- f.jvalue.value=b
- f.jtype.value=t
- f.jlabel.disabled=f.jlabel.value=="json"
- f.jtype.disabled=f.jlabel.disabled
- f.jRemove.disabled=f.jlabel.disabled
- f.jAddSibling.disabled=f.jlabel.disabled
- f.jRename.disabled=f.jlabel.disabled || tp=="array"
- f.jAddChild.disabled=t!="array" && t!="object"
- f.jPaste.disabled=!treeBuilder.jClipboard
- f.jCut.disabled=f.jlabel.disabled
- },
- jsonParent:function(x){
- // inmproved thanks to \x000
- if(x=="json"){return "treeBuilder"}
- if (x.charAt(x.length-1)==']') {return x.substring(0,x.lastIndexOf('['))}
- return x.substring(0,x.lastIndexOf('.'))
- },
- jsonChild:function(el1){
- var p=this.jsonParent(el1)
- el1=el1.split(p).join("")
- if(el1.charAt(0)=="."){el1=el1.substring(1)}
- if(el1.charAt(0)=="["){el1=el1.substring(2,el1.length-2)}
- return el1
- },
- jsonRemove:function(f){
- this.jsonChange(f,true)
- },
- jsonAlreadyExists:function(o,l){
- if(o[l]!==undefined){
- var co=2
- while(o[l+"_"+co]!==undefined){co++}
- var n=l+"_"+co
- var p='"'+l+'" already exists in this object.\nDo you want to rename? (otherwise the old "'+l+'" will be overwritten.)'
- p=prompt(p,n)
- if(p){l=p}
- }
- return l
- },
- jsonAddChild:function(f,label){
- var first=f.jbefore.checked
- var l=f.orgjlabel.value
- eval('var o=this.'+l)
- var t=(o && this.isArray(o))?"array":typeof o
- if(t=="object"){
- var nl=label||prompt("Label (without path):","")
- if(!nl){return}
- if(nl/1==nl){nl="$"+nl}
- nl=this.jsonAlreadyExists(o,nl)
- var n=nl.replace(/\w/g,'')===""?l+"."+nl:l+'["'+nl+'"]'
- eval('this.'+n+'={}')
- if(first){
- eval("var t=this."+l+";this."+l+"={};var s=this."+l)
- eval('this.'+n+'={}')
- for(var i in t){s[i]=t[i]}
- }
- }
- if(t=="array"){
- o.push({})
- n=l+"["+(o.length-1)+"]"
- if(first){
- for(var i=o.length-1;i>0;i--){o[i]=o[i-1]}
- o[0]={}
- n=l+"[0]"
- }
- }
- this.JSONbuild(this.baseDiv,this.json)
- for(var i in this.stateMem){this.openAndClose(i,true)}
- this.jsonResponder(n)
- },
- jsonAddSibling:function(f,label){
- var before=f.jbefore.checked
- var l=f.orgjlabel.value
- var r=Math.random()
- eval('var temp=this.'+l)
- eval('this.'+l+"=r")
- var s=this.JSONstring.make(this.json)
- s=s.split(r+",")
- if(s.length<2){s=s[0].split(r)}
- var lp=this.jsonParent(l)
- eval('var o=this.'+lp)
- var t=(o && this.isArray(o))?"array":typeof o
- if(t=="object"){
- var nl=label||prompt("Label (without path):","")
- if(!nl){return}
- if(nl/1==nl){nl="$"+nl}
- nl=this.jsonAlreadyExists(o,nl)
- var n=nl.replace(/\w/g,'')===""?"."+nl:'["'+nl+'"]'
- s=s.join('null,"'+nl+'":{},')
- lp+=n
- }
- if(t=="array"){
- s=s.join('null,{},')
- var k=l.split("[")
- k[k.length-1]=(k[k.length-1].split("]").join("")/1+1)+"]"
- lp=k.join("[")
- }
- s=s.split("},}").join("}}") // replace with something better soon
- eval('this.json='+s)
- eval('this.'+l+'=temp')
- if(before){lp=this.jsonSwitchPlace(this.jsonParent(l),l,lp)}
- this.JSONbuild(this.baseDiv,this.json)
- for(var i in this.stateMem){this.openAndClose(i,true)}
- this.jsonResponder(lp)
- },
- jSaveFirst:function(f,a){
- var l=f.orgjlabel.value
- eval("var orgj=this."+l)
- orgj=this.JSONstring.make(orgj)
- var v=f.jvalue.value
- v=f.jtype.value=="string"?this.JSONstring.make(v):v
- v=v.split("\r").join("")
- if(orgj!=v || f.orgjlabel.value!=f.jlabel.value || this.jTypeChanged){
- var k=confirm("Save before "+a+"?")
- if(k){this.jsonChange(f)}
- }
- },
- jsonRename:function(f){
- this.jSaveFirst(f,"renaming")
- var orgl=l=f.orgjlabel.value
- l=this.jsonChild(l)
- var nl=prompt("Label (without path):",l)
- if(!nl){return}
- this.jsonResponder(orgl)
- var nl=nl.replace(/\w/g,'')===""?"."+nl:'["'+nl+'"]'
- f.jlabel.value=this.jsonParent(orgl)+nl
- this.jsonChange(f,false,true)
- },
- jsonSwitchPlace:function(p,el1,el2){
- var orgel1=el1, orgel2=el2
- eval("var o=this."+p)
- if(this.isArray(o)){
- eval("var t=this."+el1)
- eval("this."+el1+"=this."+el2)
- eval("this."+el2+"=t")
- return orgel1
- }
- el1=this.jsonChild(el1)
- el2=this.jsonChild(el2)
- var o2={}
- for(var i in o){
- if(i==el1){o2[el2]=o[el2];o2[el1]=o[el1];continue}
- if(i==el2){continue}
- o2[i]=o[i]
- }
- eval("this."+p+"=o2")
- return orgel2
- },
- jsonCut:function(f){
- this.jSaveFirst(f,"cutting")
- this.jsonCopy(f,true)
- this.jsonChange(f,true)
- this.setJsonMessage('Cut to clipboard!')
- },
- jsonCopy:function(f,r){
- if(!r){this.jSaveFirst(f,"copying")}
- var l=f.orgjlabel.value
- eval("var v=this."+l)
- v=this.JSONstring.make(v)
- var l=this.jsonChild(l)
- this.jClipboard={label:l,jvalue:v}
- this.jsonResponder(f.jlabel.value)
- if(!r){this.setJsonMessage('Copied to clipboard!')}
- },
- jsonPaste:function(f,r){
- var t=f.jtype.value
- var sibling=t!="object" && t!="array"
- if(!f.jPasteAsChild.checked){sibling=true}
- if(f.orgjlabel.value=="json"){sibling=false}
- if(sibling){this.jsonAddSibling(f,this.jClipboard.label)}
- else {this.jsonAddChild(f,this.jClipboard.label)}
- var l=f.orgjlabel.value
- eval("this."+l+"="+this.jClipboard.jvalue)
- this.jsonResponder(l)
- this.jsonChange(f)
- if(!r){this.setJsonMessage('Pasted!')}
- },
- setJsonMessage:function(x){
- this.$('jformMessage').innerHTML=x
- setTimeout("treeBuilder.$('jformMessage').innerHTML=''",1500)
- },
- changeJsonDataType:function(x,f){
- this.jTypeChanged=true
- var v=f.jvalue.value
- var orgv=v;
- v=x=='object'?'{"label":"'+v+'"}':v
- v=x=='array'?'["'+v+'"]':v
- if(!orgv){
- v=x=='object'?'{}':v
- v=x=='array'?'[]':v
- }
- v=x=='function'?'function(){'+v+'}':v
- v=x=='string'?v:v
- v=x=='number'?v/1:v
- v=x=='boolean'?!!v:v
- v=x=='null'?'null':v
- v=x=='undefined'?'undefined':v
- f.jvalue.value=v
- },
- jsonChange:function(f,remove,rename){
- try {
- var l=f.jlabel.value
- var orgl=f.orgjlabel.value||"json.not1r2e3a4l"
- eval("var cur=this."+l)
- if(l!=orgl && cur!==undefined){
- var c=confirm(l+"\n\nalready contains other data. Overwrite?")
- if(!c){return false}
- }
- var v=f.jvalue.value.split("\r").join("")
- if(f.jtype.value=="string"){
- v=this.JSONstring.make(v)
- }
- if(l=="json"){
- eval("v="+v)
- this.JSONbuild(this.baseDiv,v)
- for(var i in this.stateMem){this.openAndClose(i,true)}
- this.setJsonMessage('Saved!')
- return false
- }
- eval("var json="+this.JSONstring.make(this.json))
- var randi=Math.random()
- eval(orgl+'='+randi)
- var paname=this.jsonParent(orgl)
- var samepa=this.jsonParent(orgl)==this.jsonParent(l)
- eval("var pa="+paname)
- if(this.isArray(pa)){
- eval(paname+'=[];var newpa='+paname)
- for(var i=0;i<pa.length;i++){
- if(pa[i]!=randi){newpa[i]=pa[i]}
- }
- if(remove){
- var pos=l.substring(l.lastIndexOf("[")+1,l.lastIndexOf("]"))/1
- newpa=newpa.splice(pos,1)
- }
- if(!remove){eval(l+"="+v)}
- }
- else {
- eval(paname+'={};var newpa='+paname)
- for(var i in pa){
- if(pa[i]!=randi){newpa[i]=pa[i]}
- else if(samepa && !remove){eval(l+"="+v)}
- }
- if(!samepa && !remove){eval(l+"="+v)}
- }
- this.json=json
- var selId=this.selectedElement?this.selectedElement.id:null
- this.JSONbuild(this.baseDiv,this.json)
- for(var i in this.stateMem){this.openAndClose(i,true)}
- this.selectedElement=this.$(selId)
- if(this.selectedElement && !remove && orgl!="json.not1r2e3a4l"){
- this.selectedElement.style.fontWeight="bold"
- }
- if(remove){l=""}
- this.setJsonMessage(remove?'Deleted!':rename?'Renamed!':'Saved!')
- if(!remove){this.jsonResponder(l)}
- }
- catch(err){
- alert(err+"\n\n"+"Save error!")
- }
- return false
- },
- JSONbuild:function(divName,x,y,z){
- if(!z){
- this.partMem=[]
- this.JSONmem=[]
- this.json=x
- this.baseDiv=divName
- }
- var t=(x && this.isArray(x))?"array":typeof x
- y=y===undefined?"json":y
- z=z||0
- this.partMem[z]='["'+y+'"]'
- if(typeof y!="number" && y.replace(/\w/g,'')===""){this.partMem[z]="."+y}
- if(typeof y=="number"){this.partMem[z]="["+y+"]"}
- if(z===0){this.partMem[z]="json"}
- this.partMem=this.partMem.slice(0,z+1)
- var x2=x
- this.JSONmem.push({type:t,label:y,todo:this.partMem.join(""),level:z+1})
- if(t=="object"){
- var l = new Array();
- for(var i in x)
- l.push(i);
- l.sort();
- for(var i=0;i<l.length;i++){
- this.JSONbuild(false,x[l[i]],l[i],z+1)
- }
- }
- if(t=="array"){
- for(var i=0;i<x.length;i++){
- this.JSONbuild(false,x[i],i,z+1)
- }
- }
- if(divName){
- this.build(divName,this.jsonResponder,this.JSONmem)
- if(!this.hasRunJSONbuildOnce){this.jsonResponder('json')}
- this.hasRunJSONbuildOnce=true
- }
- },
- build:function(divName,todoFunc,data){
- //
- // divName is the id of the div we'll build the tree inside
- //
- // todoFunc - a function to call on label click with todo as parameter
- //
- // data should be an array of objects
- // each object should contain label,todo + level or id and pid (parentId)
- //
- var d=data, n=divName, $=this.$, lastlevel=0, levelmem=[], im=this.images;
- this.treeBaseDiv=divName
- if(!d){
- var c=$(divName).childNodes;
- for(var i=0;i<c.length;i++){
- if((c[i].tagName+"").toLowerCase()=='pre'){d=this.preParse(c[i])}
- };
- if(!d){return}
- };
- $(n).style.display="none";
- while ($(n).firstChild){$(n).removeChild($(n).firstChild)};
- for(var i=0;i<d.length;i++){
- if(d[i].level && !lastlevel){lastlevel=d[i].level};
- if(d[i].level && d[i].level>lastlevel){levelmem.push(n);n=d[i-1].id};
- if(d[i].level && d[i].level>lastlevel+1){return 'Trying to jump levels!'};
- if(d[i].level && d[i].level<lastlevel){
- for(var j=d[i].level;j<lastlevel;j++){n=levelmem.pop()}
- };
- if(!d[i].id){d[i].id=n+"_"+i};
- if(!d[i].pid){d[i].pid=n};
- lastlevel=d[i].level;
- var a=document.createElement('div');
- var t=document.createElement('span');
- t.style.verticalAlign='middle';
- a.style.whiteSpace='nowrap';
- var t2=document.createTextNode(d[i].label);
- t.appendChild(t2);
- a.style.paddingLeft=d[i].pid==divName?'0px':im.nodeWidth+'px';
- a.style.cursor='pointer';
- a.style.display=(d[i].pid==divName)?'':'none';
- a.id=d[i].id;
- a.t=t;
- var f=function(){
- var todo=d[i].todo;
- var func=todoFunc;
- a.onclick=function(e){
- if(treeBuilder.maniClick=="giveItBack"){return todo}
- if(treeBuilder.selectedElement){
- treeBuilder.selectedElement.style.fontWeight=""
- }
- this.style.fontWeight="bold"
- treeBuilder.selectedElement=this
- if(treeBuilder.maniClick=="selectIt"){return}
- func(todo);
- if (!e){e=window.event};
- e.cancelBubble = true;
- if(e.stopPropagation){e.stopPropagation()};
- };
- a.onmouseover=function(e){
- //this.style.color="#999"
- if (!e){e=window.event};
- e.cancelBubble = true;
- if(e.stopPropagation){e.stopPropagation()};
- };
- a.onmouseout=function(e){
- //this.style.color=""
- if (!e){e=window.event};
- e.cancelBubble = true;
- if(e.stopPropagation){e.stopPropagation()};
- };
- };
- f();
- $(d[i].pid).appendChild(a);
- if(d[i].pid==divName && !a.previousSibling){a.first=true};
- };
- // calculate necessary element looks before initial display
- for(var i=0;i<d.length;i++){var x=$(d[i].id);if(x && x.style.display!="none"){this.setElementLook(x)}};
- $(divName).style.display="";
- },
- setElementLook:function(m){
- var $=this.$, im=this.images
- if(!m.inited){
- var co=0
- for(var j in im){
- if(!Object.prototype[j]){
- if(j=="vertLine"){break};
- var img=document.createElement('img');
- var k=(m.first && j.indexOf('Node')>=0)?j+'First':j;
- img.src=im.path+(im[k]?im[k]:k+'.gif');
- img.style.display="none";
- img.style.verticalAlign="middle";
- img.id=m.id+"_"+j;
- if(j.indexOf('folderNode')==0){
- img.onclick=function(e){
- treeBuilder.openAndClose(this);
- if (!e){e=window.event};
- e.cancelBubble = true;
- if(e.stopPropagation){e.stopPropagation()};
- }
- };
- if(m.firstChild){m.insertBefore(img,m.childNodes[co]); co++}
- else {m.appendChild(img)};
- }
- };
- m.insertBefore(m.t,m.childNodes[co]);
- m.inited=true
- };
- var lastChild=m.childNodes[m.childNodes.length-1];
- var isParent=(lastChild.tagName+"").toLowerCase()=="div";
- var isLast=!m.nextSibling;
- var isOpen=isParent && lastChild.style.display!='none';
- $(m.id+"_folder").style.display=!isOpen && isParent?'':'none';
- $(m.id+"_folderOpen").style.display=isOpen && isParent?'':'none';
- $(m.id+"_doc").style.display=isParent?'none':'';
- $(m.id+"_docNode").style.display=isParent || isLast?'none':'';
- $(m.id+"_docNodeLast").style.display=isParent || !isLast?'none':'';
- $(m.id+"_folderNode").style.display=isOpen || !isParent || isLast?'none':'';
- $(m.id+"_folderNodeLast").style.display=isOpen || !isParent || !isLast?'none':'';
- $(m.id+"_folderNodeOpen").style.display=!isOpen || !isParent || isLast?'none':'';
- $(m.id+"_folderNodeOpenLast").style.display=!isOpen || !isParent || !isLast?'none':'';
- var p=m.parentNode.nextSibling;
- if(p && p.id){
- var sp=p;insideBase=false;
- while(sp){if(sp==$(this.treeBaseDiv)){insideBase=true};sp=sp.parentNode}
- if(!insideBase){return}
- var bg=im.path+(im.vertLine?im.vertLine:'vertLine.gif');
- m.style.backgroundImage='url('+bg+')';
- m.style.backgroundRepeat='repeat-y'
- };
- },
- openAndClose:function(x,remem){
- var o, div=remem?this.$(x):x.parentNode;
- if(!div){return}
- if(remem){o=this.stateMem[div.id]}
- else {o=x.id.indexOf('Open')<0}
- if(remem=="open"){o=true}
- this.stateMem[div.id]=o
- var c=div.childNodes;
- for(var i=0;i<c.length;i++){
- if(c[i].tagName.toLowerCase()!="div"){continue};
- c[i].style.display=o?'':'none';
- if(o && !c[i].inited){this.setElementLook(c[i])}
- };
- this.setElementLook(div)
- }
-}
-
-
-
-/*
-JSONstring v 1.0
-copyright 2006 Thomas Frank
-
-Based on Steve Yen's implementation:
-http://trimpath.com/project/wiki/JsonLibrary
-*/
-
-JSONeditor.treeBuilder.JSONstring={
- compactOutput:false,
- includeProtos:false,
- includeFunctions: true,
- detectCirculars:false,
- restoreCirculars:false,
- make:function(arg,restore) {
- this.restore=restore;
- this.mem=[];this.pathMem=[];
- return this.toJsonStringArray(arg).join('');
- },
- toObject:function(x){
- eval("this.myObj="+x);
- if(!this.restoreCirculars || !alert){return this.myObj};
- this.restoreCode=[];
- this.make(this.myObj,true);
- var r=this.restoreCode.join(";")+";";
- eval('r=r.replace(/\\W([0-9]{1,})(\\W)/g,"[$1]$2").replace(/\\.\\;/g,";")');
- eval(r);
- return this.myObj
- },
- toJsonStringArray:function(arg, out) {
- if(!out){this.path=[]};
- out = out || [];
- var u; // undefined
- switch (typeof arg) {
- case 'object':
- this.lastObj=arg;
- if(this.detectCirculars){
- var m=this.mem; var n=this.pathMem;
- for(var i=0;i<m.length;i++){
- if(arg===m[i]){
- out.push('"JSONcircRef:'+n[i]+'"');return out
- }
- };
- m.push(arg); n.push(this.path.join("."));
- };
- if (arg) {
- if (arg.constructor == Array) {
- out.push('[');
- for (var i = 0; i < arg.length; ++i) {
- this.path.push(i);
- if (i > 0)
- out.push(',\n');
- this.toJsonStringArray(arg[i], out);
- this.path.pop();
- }
- out.push(']');
- return out;
- } else if (typeof arg.toString != 'undefined') {
- out.push('{');
- var first = true;
- for (var i in arg) {
- if(!this.includeProtos && arg[i]===arg.constructor.prototype[i]){continue};
- this.path.push(i);
- var curr = out.length;
- if (!first)
- out.push(this.compactOutput?',':',\n');
- this.toJsonStringArray(i, out);
- out.push(':');
- this.toJsonStringArray(arg[i], out);
- if (out[out.length - 1] == u)
- out.splice(curr, out.length - curr);
- else
- first = false;
- this.path.pop();
- }
- out.push('}');
- return out;
- }
- return out;
- }
- out.push('null');
- return out;
- case 'unknown':
- case 'undefined':
- case 'function':
- try {eval('var a='+arg)}
- catch(e){arg='function(){alert("Could not convert the real function to JSON, due to a browser bug only found in Safari. Let us hope it will get fixed in future versions of Safari!")}'}
- out.push(this.includeFunctions?arg:u);
- return out;
- case 'string':
- if(this.restore && arg.indexOf("JSONcircRef:")==0){
- this.restoreCode.push('this.myObj.'+this.path.join(".")+"="+arg.split("JSONcircRef:").join("this.myObj."));
- };
- out.push('"');
- var a=['\n','\\n','\r','\\r','"','\\"'];
- arg+=""; for(var i=0;i<6;i+=2){arg=arg.split(a[i]).join(a[i+1])};
- out.push(arg);
- out.push('"');
- return out;
- default:
- out.push(String(arg));
- return out;
- }
- }
-}
-/*
- http://www.JSON.org/json2.js
- 2009-06-29
-
- Public Domain.
-
- NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
-
- See http://www.JSON.org/js.html
-
- This file creates a global JSON object containing two methods: stringify
- and parse.
-
- JSON.stringify(value, replacer, space)
- value any JavaScript value, usually an object or array.
-
- replacer an optional parameter that determines how object
- values are stringified for objects. It can be a
- function or an array of strings.
-
- space an optional parameter that specifies the indentation
- of nested structures. If it is omitted, the text will
- be packed without extra whitespace. If it is a number,
- it will specify the number of spaces to indent at each
- level. If it is a string (such as '\t' or '&nbsp;'),
- it contains the characters used to indent at each level.
-
- This method produces a JSON text from a JavaScript value.
-
- When an object value is found, if the object contains a toJSON
- method, its toJSON method will be called and the result will be
- stringified. A toJSON method does not serialize: it returns the
- value represented by the name/value pair that should be serialized,
- or undefined if nothing should be serialized. The toJSON method
- will be passed the key associated with the value, and this will be
- bound to the object holding the key.
-
- For example, this would serialize Dates as ISO strings.
-
- Date.prototype.toJSON = function (key) {
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- return this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z';
- };
-
- You can provide an optional replacer method. It will be passed the
- key and value of each member, with this bound to the containing
- object. The value that is returned from your method will be
- serialized. If your method returns undefined, then the member will
- be excluded from the serialization.
-
- If the replacer parameter is an array of strings, then it will be
- used to select the members to be serialized. It filters the results
- such that only members with keys listed in the replacer array are
- stringified.
-
- Values that do not have JSON representations, such as undefined or
- functions, will not be serialized. Such values in objects will be
- dropped; in arrays they will be replaced with null. You can use
- a replacer function to replace those with JSON values.
- JSON.stringify(undefined) returns undefined.
-
- The optional space parameter produces a stringification of the
- value that is filled with line breaks and indentation to make it
- easier to read.
-
- If the space parameter is a non-empty string, then that string will
- be used for indentation. If the space parameter is a number, then
- the indentation will be that many spaces.
-
- Example:
-
- text = JSON.stringify(['e', {pluribus: 'unum'}]);
- // text is '["e",{"pluribus":"unum"}]'
-
-
- text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
- // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
-
- text = JSON.stringify([new Date()], function (key, value) {
- return this[key] instanceof Date ?
- 'Date(' + this[key] + ')' : value;
- });
- // text is '["Date(---current time---)"]'
-
-
- JSON.parse(text, reviver)
- This method parses a JSON text to produce an object or array.
- It can throw a SyntaxError exception.
-
- The optional reviver parameter is a function that can filter and
- transform the results. It receives each of the keys and values,
- and its return value is used instead of the original value.
- If it returns what it received, then the structure is not modified.
- If it returns undefined then the member is deleted.
-
- Example:
-
- // Parse the text. Values that look like ISO date strings will
- // be converted to Date objects.
-
- myData = JSON.parse(text, function (key, value) {
- var a;
- if (typeof value === 'string') {
- a =
-/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
- if (a) {
- return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
- +a[5], +a[6]));
- }
- }
- return value;
- });
-
- myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
- var d;
- if (typeof value === 'string' &&
- value.slice(0, 5) === 'Date(' &&
- value.slice(-1) === ')') {
- d = new Date(value.slice(5, -1));
- if (d) {
- return d;
- }
- }
- return value;
- });
-
-
- This is a reference implementation. You are free to copy, modify, or
- redistribute.
-
- This code should be minified before deployment.
- See http://javascript.crockford.com/jsmin.html
-
- USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
- NOT CONTROL.
-*/
-
-/*jslint evil: true */
-
-/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
- call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
- getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
- lastIndex, length, parse, prototype, push, replace, slice, stringify,
- test, toJSON, toString, valueOf
-*/
-
-// Create a JSON object only if one does not already exist. We create the
-// methods in a closure to avoid creating global variables.
-
-var JSON = JSON || {};
-
-(function () {
-
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- if (typeof Date.prototype.toJSON !== 'function') {
-
- Date.prototype.toJSON = function (key) {
-
- return isFinite(this.valueOf()) ?
- this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z' : null;
- };
-
- String.prototype.toJSON =
- Number.prototype.toJSON =
- Boolean.prototype.toJSON = function (key) {
- return this.valueOf();
- };
- }
-
- var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- gap,
- indent,
- meta = { // table of character substitutions
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '"' : '\\"',
- '\\': '\\\\'
- },
- rep;
-
-
- function quote(string) {
-
-// If the string contains no control characters, no quote characters, and no
-// backslash characters, then we can safely slap some quotes around it.
-// Otherwise we must also replace the offending characters with safe escape
-// sequences.
-
- escapable.lastIndex = 0;
- return escapable.test(string) ?
- '"' + string.replace(escapable, function (a) {
- var c = meta[a];
- return typeof c === 'string' ? c :
- '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- }) + '"' :
- '"' + string + '"';
- }
-
-
- function str(key, holder) {
-
-// Produce a string from holder[key].
-
- var i, // The loop counter.
- k, // The member key.
- v, // The member value.
- length,
- mind = gap,
- partial,
- value = holder[key];
-
-// If the value has a toJSON method, call it to obtain a replacement value.
-
- if (value && typeof value === 'object' &&
- typeof value.toJSON === 'function') {
- value = value.toJSON(key);
- }
-
-// If we were called with a replacer function, then call the replacer to
-// obtain a replacement value.
-
- if (typeof rep === 'function') {
- value = rep.call(holder, key, value);
- }
-
-// What happens next depends on the value's type.
-
- switch (typeof value) {
- case 'string':
- return quote(value);
-
- case 'number':
-
-// JSON numbers must be finite. Encode non-finite numbers as null.
-
- return isFinite(value) ? String(value) : 'null';
-
- case 'boolean':
- case 'null':
-
-// If the value is a boolean or null, convert it to a string. Note:
-// typeof null does not produce 'null'. The case is included here in
-// the remote chance that this gets fixed someday.
-
- return String(value);
-
-// If the type is 'object', we might be dealing with an object or an array or
-// null.
-
- case 'object':
-
-// Due to a specification blunder in ECMAScript, typeof null is 'object',
-// so watch out for that case.
-
- if (!value) {
- return 'null';
- }
-
-// Make an array to hold the partial results of stringifying this object value.
-
- gap += indent;
- partial = [];
-
-// Is the value an array?
-
- if (Object.prototype.toString.apply(value) === '[object Array]') {
-
-// The value is an array. Stringify every element. Use null as a placeholder
-// for non-JSON values.
-
- length = value.length;
- for (i = 0; i < length; i += 1) {
- partial[i] = str(i, value) || 'null';
- }
-
-// Join all of the elements together, separated with commas, and wrap them in
-// brackets.
-
- v = partial.length === 0 ? '[]' :
- gap ? '[\n' + gap +
- partial.join(',\n' + gap) + '\n' +
- mind + ']' :
- '[' + partial.join(',') + ']';
- gap = mind;
- return v;
- }
-
-// If the replacer is an array, use it to select the members to be stringified.
-
- if (rep && typeof rep === 'object') {
- length = rep.length;
- for (i = 0; i < length; i += 1) {
- k = rep[i];
- if (typeof k === 'string') {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- } else {
-
-// Otherwise, iterate through all of the keys in the object.
-
- var z = new Array();
- for (k in value)
- z.push(k);
-
- z.sort();
-
- for (var l=0;l<z.length;l++) {
- if (Object.hasOwnProperty.call(value, z[l])) {
- v = str(z[l], value);
- if (v) {
- partial.push(quote(z[l]) + (gap ? ': ' : ':') + v);
- }
- }
- }
- }
-
-// Join all of the member texts together, separated with commas,
-// and wrap them in braces.
-
- v = partial.length === 0 ? '{}' :
- gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
- mind + '}' : '{' + partial.join(',') + '}';
- gap = mind;
- return v;
- }
- }
-
-// If the JSON object does not yet have a stringify method, give it one.
-
- if (typeof JSON.stringify !== 'function') {
- JSON.stringify = function (value, replacer, space) {
-
-// The stringify method takes a value and an optional replacer, and an optional
-// space parameter, and returns a JSON text. The replacer can be a function
-// that can replace values, or an array of strings that will select the keys.
-// A default replacer method can be provided. Use of the space parameter can
-// produce text that is more easily readable.
-
- var i;
- gap = '';
- indent = '';
-
-// If the space parameter is a number, make an indent string containing that
-// many spaces.
-
- if (typeof space === 'number') {
- for (i = 0; i < space; i += 1) {
- indent += ' ';
- }
-
-// If the space parameter is a string, it will be used as the indent string.
-
- } else if (typeof space === 'string') {
- indent = space;
- }
-
-// If there is a replacer, it must be a function or an array.
-// Otherwise, throw an error.
-
- rep = replacer;
- if (replacer && typeof replacer !== 'function' &&
- (typeof replacer !== 'object' ||
- typeof replacer.length !== 'number')) {
- throw new Error('JSON.stringify');
- }
-
-// Make a fake root object containing our value under the key of ''.
-// Return the result of stringifying the value.
-
- return str('', {'': value});
- };
- }
-
-
-// If the JSON object does not yet have a parse method, give it one.
-
- if (typeof JSON.parse !== 'function') {
- JSON.parse = function (text, reviver) {
-
-// The parse method takes a text and an optional reviver function, and returns
-// a JavaScript value if the text is a valid JSON text.
-
- var j;
-
- function walk(holder, key) {
-
-// The walk method is used to recursively walk the resulting structure so
-// that modifications can be made.
-
- var k, v, value = holder[key];
- if (value && typeof value === 'object') {
- for (k in value) {
- if (Object.hasOwnProperty.call(value, k)) {
- v = walk(value, k);
- if (v !== undefined) {
- value[k] = v;
- } else {
- delete value[k];
- }
- }
- }
- }
- return reviver.call(holder, key, value);
- }
-
-
-// Parsing happens in four stages. In the first stage, we replace certain
-// Unicode characters with escape sequences. JavaScript handles many characters
-// incorrectly, either silently deleting them, or treating them as line endings.
-
- cx.lastIndex = 0;
- if (cx.test(text)) {
- text = text.replace(cx, function (a) {
- return '\\u' +
- ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- });
- }
-
-// In the second stage, we run the text against regular expressions that look
-// for non-JSON patterns. We are especially concerned with '()' and 'new'
-// because they can cause invocation, and '=' because it can cause mutation.
-// But just to be safe, we want to reject all unexpected forms.
-
-// We split the second stage into 4 regexp operations in order to work around
-// crippling inefficiencies in IE's and Safari's regexp engines. First we
-// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
-// replace all simple value tokens with ']' characters. Third, we delete all
-// open brackets that follow a colon or comma or that begin the text. Finally,
-// we look to see that the remaining characters are only whitespace or ']' or
-// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
-
- if (/^[\],:{}\s]*$/.
-test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
-replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
-replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
-
-// In the third stage we use the eval function to compile the text into a
-// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
-// in JavaScript: it can begin a block or an object literal. We wrap the text
-// in parens to eliminate the ambiguity.
-
- j = eval('(' + text + ')');
-
-// In the optional fourth stage, we recursively walk the new structure, passing
-// each name/value pair to a reviver function for possible transformation.
-
- return typeof reviver === 'function' ?
- walk({'': j}, '') : j;
- }
-
-// If the text is not JSON parseable, then a SyntaxError is thrown.
-
- throw new SyntaxError('JSON.parse');
- };
- }
-}());
diff --git a/chef-server-slice/public/javascripts/chef.js b/chef-server-slice/public/javascripts/chef.js
deleted file mode 100644
index dfb8b5a1e4..0000000000
--- a/chef-server-slice/public/javascripts/chef.js
+++ /dev/null
@@ -1,126 +0,0 @@
-//
-// Author:: Adam Jacob (<adam@opscode.com>)
-// Author:: AJ Christensen (<aj@junglist.gen.nz>)
-// Copyright:: Copyright (c) 2008 Opscode, Inc.
-// License:: Apache License, Version 2.0
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-$(document).ready(function(){
-
- $('form#edit_role, form#create_role').submit(function(event) {
- var form = $(this);
- var to_role = $('ul#for_role').sortable('toArray');
- if (form.attr('id') == 'edit_role') {
- form.append('<input type="hidden" name="_method" value="put">');
- }
- form.append($('input#role_name')).css('display', 'none');
- form.append($('textarea#role_description')).css('display', 'none');
- form.append('<input type="hidden" id="default_attributes" name="default_attributes"/>');
- $('input#default_attributes').attr('value', JSONeditor.treeBuilder.JSONstring.make(JSONeditor.treeBuilder.json.defaults))
- form.append('<input type="hidden" id="override_attributes" name="override_attributes"/>');
- $('input#override_attributes').attr('value', JSONeditor.treeBuilder.JSONstring.make(JSONeditor.treeBuilder.json.overrides));
- jQuery.each(to_role, function(i, field) {
- form.append('<input type="hidden" name="for_role[]" value="' + field + '"/>');
- });
- });
-
- $('form#edit_node, form#create_node').submit(function(event) {
- var form = $(this);
- var to_node = $('ul#for_node').sortable('toArray');
- if (form.attr('id') == 'edit_node') {
- form.append('<input type="hidden" name="_method" value="put">');
- }
- form.append($('input#node_name')).css('display', 'none');
- form.append('<input type="hidden" id="attributes" name="attributes"/>');
- $('input#attributes').attr('value', JSONeditor.treeBuilder.JSONstring.make(JSONeditor.treeBuilder.json))
- jQuery.each(to_node, function(i, field) {
- form.append('<input type="hidden" name="for_node[]" value="' + field + '"/>');
- });
- });
-
- // livequery hidden form for link_to ajax magic
- $('a[method]').livequery(function(){
- var message = $(this).attr('confirm');
- var method = $(this).attr('method');
-
- if (!method && !message) return;
-
- $(this).click(function(event){
- if (message && !confirm(message)) {
- event.preventDefault();
- return;
- }
-
- if (method == 'post' || method == 'put' || method == 'delete') {
- event.preventDefault();
- var form = $("<form/>").attr('method', 'post').attr('action', this.href).attr('style', 'display: none');
- if (method != "post") {
- form.append($('<input type="hidden" name="_method"/>').attr('value', method));
- }
- form.insertAfter(this).submit();
- }
- });
- });
-
- // accordion for the cookbooks show view
- $('.accordion .head').click(function() {
- $(this).next().toggle('slow');
- return false;
- }).next().hide();
-
- // global facebox callback
- $('a[rel*=facebox]').facebox();
-
- /*
- JSONEditor.prototype.ADD_IMG = '/images/add.png';
- JSONEditor.prototype.DELETE_IMG = '/images/delete.png';
- var attrib_editor = new JSONEditor($("#attrib_json_edit"), 400, 300);
- attrib_editor.doTruncation(true);
- attrib_editor.showFunctionButtons();
-
- var recipe_editor = new JSONEditor($("#recipe_json_edit"), 400, 300);
- recipe_editor.doTruncation(true);
- recipe_editor.showFunctionButtons();
- */
-
- $('.connectedSortable').sortable({
- placeholder: 'ui-state-highlight',
- connectWith: $('.connectedSortable')
- }).disableSelection();
-
- // The table tree!
- $('table.tree').treeTable({ expandable: true });
- $('span.expander').click(function() { $('tr#' + $(this).attr('toggle')).toggleBranch(); });
-
- // Tooltips
- $("div.tooltip").tooltip({
- position: ['center', 'right'],
- offset: [-5, 10],
- effect: 'toggle',
- opacity: 0.7
- });
-
- // Show the sidebars if they have text in them!
- var sidebar_block_notice_children = $("#sidebar_block_notice").children().length;
- var sidebar_block_children = $("#sidebar_block").children().length;
-
- if (sidebar_block_notice_children > 0) {
- $("#sidebar_block_notice").fadeIn();
- }
-
- if (sidebar_block_children > 0) {
- $("#sidebar_block").fadeIn();
- }
-});
diff --git a/chef-server-slice/public/javascripts/jquery-1.3.2.min.js b/chef-server-slice/public/javascripts/jquery-1.3.2.min.js
deleted file mode 100755
index b1ae21d8b2..0000000000
--- a/chef-server-slice/public/javascripts/jquery-1.3.2.min.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * jQuery JavaScript Library v1.3.2
- * http://jquery.com/
- *
- * Copyright (c) 2009 John Resig
- * Dual licensed under the MIT and GPL licenses.
- * http://docs.jquery.com/License
- *
- * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
- * Revision: 6246
- */
-(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
-/*
- * Sizzle CSS Selector Engine - v0.9.3
- * Copyright 2009, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
- */
-(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file
diff --git a/chef-server-slice/public/javascripts/jquery-ui-1.7.1.custom.min.js b/chef-server-slice/public/javascripts/jquery-ui-1.7.1.custom.min.js
deleted file mode 100755
index 2ea9f4cd52..0000000000
--- a/chef-server-slice/public/javascripts/jquery-ui-1.7.1.custom.min.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * jQuery UI 1.7.1
- *
- * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * http://docs.jquery.com/UI
- */ jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.1",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/*
- * jQuery UI Draggable 1.7.1
- *
- * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * http://docs.jquery.com/UI/Draggables
- *
- * Depends:
- * ui.core.js
- */ (function(a){a.widget("ui.draggable",a.extend({},a.ui.mouse,{_init:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy()},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;if(c.cursorAt){this._adjustOffsetFromHelper(c.cursorAt)}if(c.containment){this._setContainment()}this._trigger("start",b);this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();this._trigger("drag",b,c);this.position=c.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){b._trigger("stop",c);b._clear()})}else{this._trigger("stop",c);this._clear()}return false},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval){this.helper.remove()}this.helper=null;this.cancelHelperRemoval=false},_trigger:function(b,c,d){d=d||this._uiHash();a.ui.plugin.call(this,b,[c,d]);if(b=="drag"){this.positionAbs=this._convertPositionTo("absolute")}return a.widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(b){return{helper:this.helper,position:this.position,absolutePosition:this.positionAbs,offset:this.positionAbs}}}));a.extend(a.ui.draggable,{version:"1.7.1",eventPrefix:"drag",defaults:{addClasses:true,appendTo:"parent",axis:false,cancel:":input,option",connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false}});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,e){var d=a(this).data("draggable"),f=d.options,b=a.extend({},e,{item:d.element});d.sortables=[];a(f.connectToSortable).each(function(){var g=a.data(this,"sortable");if(g&&!g.options.disabled){d.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",c,b)}})},stop:function(c,e){var d=a(this).data("draggable"),b=a.extend({},e,{item:d.element});a.each(d.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;d.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert){this.instance.options.revert=true}this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;if(d.options.helper=="original"){this.instance.currentItem.css({top:"auto",left:"auto"})}}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",c,b)}})},drag:function(c,f){var e=a(this).data("draggable"),b=this;var d=function(i){var n=this.offset.click.top,m=this.offset.click.left;var g=this.positionAbs.top,k=this.positionAbs.left;var j=i.height,l=i.width;var p=i.top,h=i.left;return a.ui.isOver(g+n,k+m,p,h,j,l)};a.each(e.sortables,function(g){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(b).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return f.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}if(this.instance.currentItem){this.instance._mouseDrag(c)}}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder){this.instance.placeholder.remove()}e._trigger("fromSortable",c);e.dropped=false}}})}});a.ui.plugin.add("draggable","cursor",{start:function(c,d){var b=a("body"),e=a(this).data("draggable").options;if(b.css("cursor")){e._cursor=b.css("cursor")}b.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._cursor){a("body").css("cursor",d._cursor)}}});a.ui.plugin.add("draggable","iframeFix",{start:function(b,c){var d=a(this).data("draggable").options;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop+f.scrollSpeed}else{if(d.pageY-c.overflowOffset.top<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop-f.scrollSpeed}}}if(!f.axis||f.axis!="y"){if((c.overflowOffset.left+c.scrollParent[0].offsetWidth)-d.pageX<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft+f.scrollSpeed}else{if(d.pageX-c.overflowOffset.left<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft-f.scrollSpeed}}}}else{if(!f.axis||f.axis!="x"){if(d.pageY-a(document).scrollTop()<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-f.scrollSpeed)}else{if(a(window).height()-(d.pageY-a(document).scrollTop())<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+f.scrollSpeed)}}}if(!f.axis||f.axis!="y"){if(d.pageX-a(document).scrollLeft()<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-f.scrollSpeed)}else{if(a(window).width()-(d.pageX-a(document).scrollLeft())<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+f.scrollSpeed)}}}}if(b!==false&&a.ui.ddmanager&&!f.dropBehaviour){a.ui.ddmanager.prepareOffsets(c,d)}}});a.ui.plugin.add("draggable","snap",{start:function(c,d){var b=a(this).data("draggable"),e=b.options;b.snapElements=[];a(e.snap.constructor!=String?(e.snap.items||":data(draggable)"):e.snap).each(function(){var g=a(this);var f=g.offset();if(this!=b.element[0]){b.snapElements.push({item:this,width:g.outerWidth(),height:g.outerHeight(),top:f.top,left:f.left})}})},drag:function(u,p){var g=a(this).data("draggable"),q=g.options;var y=q.snapTolerance;var x=p.offset.left,w=x+g.helperProportions.width,f=p.offset.top,e=f+g.helperProportions.height;for(var v=g.snapElements.length-1;v>=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y<x&&x<n+y&&m-y<f&&f<A+y)||(s-y<x&&x<n+y&&m-y<e&&e<A+y)||(s-y<w&&w<n+y&&m-y<f&&f<A+y)||(s-y<w&&w<n+y&&m-y<e&&e<A+y))){if(g.snapElements[v].snapping){(g.options.snap.release&&g.options.snap.release.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=false;continue}if(q.snapMode!="inner"){var c=Math.abs(m-e)<=y;var z=Math.abs(A-f)<=y;var j=Math.abs(s-w)<=y;var k=Math.abs(n-x)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m-g.helperProportions.height,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s-g.helperProportions.width}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n}).left-g.margins.left}}var h=(c||z||j||k);if(q.snapMode!="outer"){var c=Math.abs(m-f)<=y;var z=Math.abs(A-e)<=y;var j=Math.abs(s-x)<=y;var k=Math.abs(n-w)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A-g.helperProportions.height,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n-g.helperProportions.width}).left-g.margins.left}}if(!g.snapElements[v].snapping&&(c||z||j||k||h)){(g.options.snap.snap&&g.options.snap.snap.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=(c||z||j||k||h)}}});a.ui.plugin.add("draggable","stack",{start:function(b,c){var e=a(this).data("draggable").options;var d=a.makeArray(a(e.stack.group)).sort(function(g,f){return(parseInt(a(g).css("zIndex"),10)||e.stack.min)-(parseInt(a(f).css("zIndex"),10)||e.stack.min)});a(d).each(function(f){this.style.zIndex=e.stack.min+f});this[0].style.zIndex=e.stack.min+d.length}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("zIndex")){e._zIndex=b.css("zIndex")}b.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._zIndex){a(c.helper).css("zIndex",d._zIndex)}}})})(jQuery);;/*
- * jQuery UI Droppable 1.7.1
- *
- * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * http://docs.jquery.com/UI/Droppables
- *
- * Depends:
- * ui.core.js
- * ui.draggable.js
- */ (function(a){a.widget("ui.droppable",{_init:function(){var c=this.options,b=c.accept;this.isover=0;this.isout=1;this.options.accept=this.options.accept&&a.isFunction(this.options.accept)?this.options.accept:function(e){return e.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[this.options.scope]=a.ui.ddmanager.droppables[this.options.scope]||[];a.ui.ddmanager.droppables[this.options.scope].push(this);(this.options.addClasses&&this.element.addClass("ui-droppable"))},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++){if(b[c]==this){b.splice(c,1)}}this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable")},_setData:function(b,c){if(b=="accept"){this.options.accept=c&&a.isFunction(c)?c:function(e){return e.is(c)}}else{a.widget.prototype._setData.apply(this,arguments)}},_activate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.addClass(this.options.activeClass)}(b&&this._trigger("activate",c,this.ui(b)))},_deactivate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}(b&&this._trigger("deactivate",c,this.ui(b)))},_over:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.addClass(this.options.hoverClass)}this._trigger("over",c,this.ui(b))}},_out:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("out",c,this.ui(b))}},_drop:function(c,d){var b=d||a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return false}var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var f=a.data(this,"droppable");if(f.options.greedy&&a.ui.intersect(b,a.extend(f,{offset:f.element.offset()}),f.options.tolerance)){e=true;return false}});if(e){return false}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("drop",c,this.ui(b));return this.element}return false},ui:function(b){return{draggable:(b.currentItem||b.element),helper:b.helper,position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs}}});a.extend(a.ui.droppable,{version:"1.7.1",eventPrefix:"drop",defaults:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"}});a.ui.intersect=function(q,j,o){if(!j.offset){return false}var e=(q.positionAbs||q.position.absolute).left,d=e+q.helperProportions.width,n=(q.positionAbs||q.position.absolute).top,m=n+q.helperProportions.height;var g=j.offset.left,c=g+j.proportions.width,p=j.offset.top,k=p+j.proportions.height;switch(o){case"fit":return(g<e&&d<c&&p<n&&m<k);break;case"intersect":return(g<e+(q.helperProportions.width/2)&&d-(q.helperProportions.width/2)<c&&p<n+(q.helperProportions.height/2)&&m-(q.helperProportions.height/2)<k);break;case"pointer":var h=((q.positionAbs||q.position.absolute).left+(q.clickOffset||q.offset.click).left),i=((q.positionAbs||q.position.absolute).top+(q.clickOffset||q.offset.click).top),f=a.ui.isOver(i,h,p,g,j.proportions.height,j.proportions.width);return f;break;case"touch":return((n>=p&&n<=k)||(m>=p&&m<=k)||(n<p&&m>k))&&((e>=g&&e<=c)||(d>=g&&d<=c)||(e<g&&d>c));break;default:return false;break}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,g){var b=a.ui.ddmanager.droppables[e.options.scope];var f=g?g.type:null;var h=(e.currentItem||e.element).find(":data(droppable)").andSelf();droppablesLoop:for(var d=0;d<b.length;d++){if(b[d].options.disabled||(e&&!b[d].options.accept.call(b[d].element[0],(e.currentItem||e.element)))){continue}for(var c=0;c<h.length;c++){if(h[c]==b[d].element[0]){b[d].proportions.height=0;continue droppablesLoop}}b[d].visible=b[d].element.css("display")!="none";if(!b[d].visible){continue}b[d].offset=b[d].element.offset();b[d].proportions={width:b[d].element[0].offsetWidth,height:b[d].element[0].offsetHeight};if(f=="mousedown"){b[d]._activate.call(b[d],g)}}},drop:function(b,c){var d=false;a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(!this.options){return}if(!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)){d=this._drop.call(this,c)}if(!this.options.disabled&&this.visible&&this.options.accept.call(this.element[0],(b.currentItem||b.element))){this.isout=1;this.isover=0;this._deactivate.call(this,c)}});return d},drag:function(b,c){if(b.options.refreshPositions){a.ui.ddmanager.prepareOffsets(b,c)}a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(this.options.disabled||this.greedyChild||!this.visible){return}var e=a.ui.intersect(b,this,this.options.tolerance);var g=!e&&this.isover==1?"isout":(e&&this.isover==0?"isover":null);if(!g){return}var f;if(this.options.greedy){var d=this.element.parents(":data(droppable):eq(0)");if(d.length){f=a.data(d[0],"droppable");f.greedyChild=(g=="isover"?1:0)}}if(f&&g=="isover"){f.isover=0;f.isout=1;f._out.call(f,c)}this[g]=1;this[g=="isout"?"isover":"isout"]=0;this[g=="isover"?"_over":"_out"].call(this,c);if(f&&g=="isout"){f.isout=0;f.isover=1;f._over.call(f,c)}})}}})(jQuery);;/*
- * jQuery UI Resizable 1.7.1
- *
- * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- * ui.core.js
- */ (function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.1",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;/*
- * jQuery UI Selectable 1.7.1
- *
- * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * http://docs.jquery.com/UI/Selectables
- *
- * Depends:
- * ui.core.js
- */ (function(a){a.widget("ui.selectable",a.extend({},a.ui.mouse,{_init:function(){var b=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]);c.each(function(){var d=a(this);var e=d.offset();a.data(this,"selectable-item",{element:this,$element:d,left:e.left,top:e.top,right:e.left+d.outerWidth(),bottom:e.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a(document.createElement("div")).css({border:"1px dotted black"}).addClass("ui-selectable-helper")},destroy:function(){this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy()},_mouseStart:function(d){var b=this;this.opos=[d.pageX,d.pageY];if(this.options.disabled){return}var c=this.options;this.selectees=a(c.filter,this.element[0]);this._trigger("start",d);a(c.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:d.clientX,top:d.clientY,width:0,height:0});if(c.autoRefresh){this.refresh()}this.selectees.filter(".ui-selected").each(function(){var e=a.data(this,"selectable-item");e.startselected=true;if(!d.metaKey){e.$element.removeClass("ui-selected");e.selected=false;e.$element.addClass("ui-unselecting");e.unselecting=true;b._trigger("unselecting",d,{unselecting:e.element})}});a(d.target).parents().andSelf().each(function(){var e=a.data(this,"selectable-item");if(e){e.$element.removeClass("ui-unselecting").addClass("ui-selecting");e.unselecting=false;e.selecting=true;e.selected=true;b._trigger("selecting",d,{selecting:e.element});return false}})},_mouseDrag:function(i){var c=this;this.dragged=true;if(this.options.disabled){return}var e=this.options;var d=this.opos[0],h=this.opos[1],b=i.pageX,g=i.pageY;if(d>b){var f=b;b=d;d=f}if(h>g){var f=g;g=h;h=f}this.helper.css({left:d,top:h,width:b-d,height:g-h});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!j||j.element==c.element[0]){return}var k=false;if(e.tolerance=="touch"){k=(!(j.left>b||j.right<d||j.top>g||j.bottom<h))}else{if(e.tolerance=="fit"){k=(j.left>d&&j.right<b&&j.top>h&&j.bottom<g)}}if(k){if(j.selected){j.$element.removeClass("ui-selected");j.selected=false}if(j.unselecting){j.$element.removeClass("ui-unselecting");j.unselecting=false}if(!j.selecting){j.$element.addClass("ui-selecting");j.selecting=true;c._trigger("selecting",i,{selecting:j.element})}}else{if(j.selecting){if(i.metaKey&&j.startselected){j.$element.removeClass("ui-selecting");j.selecting=false;j.$element.addClass("ui-selected");j.selected=true}else{j.$element.removeClass("ui-selecting");j.selecting=false;if(j.startselected){j.$element.addClass("ui-unselecting");j.unselecting=true}c._trigger("unselecting",i,{unselecting:j.element})}}if(j.selected){if(!i.metaKey&&!j.startselected){j.$element.removeClass("ui-selected");j.selected=false;j.$element.addClass("ui-unselecting");j.unselecting=true;c._trigger("unselecting",i,{unselecting:j.element})}}}});return false},_mouseStop:function(d){var b=this;this.dragged=false;var c=this.options;a(".ui-unselecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-unselecting");e.unselecting=false;e.startselected=false;b._trigger("unselected",d,{unselected:e.element})});a(".ui-selecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-selecting").addClass("ui-selected");e.selecting=false;e.selected=true;e.startselected=true;b._trigger("selected",d,{selected:e.element})});this._trigger("stop",d);this.helper.remove();return false}}));a.extend(a.ui.selectable,{version:"1.7.1",defaults:{appendTo:"body",autoRefresh:true,cancel:":input,option",delay:0,distance:0,filter:"*",tolerance:"touch"}})})(jQuery);;/*
- * jQuery UI Sortable 1.7.1
- *
- * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * http://docs.jquery.com/UI/Sortables
- *
- * Depends:
- * ui.core.js
- */ (function(a){a.widget("ui.sortable",a.extend({},a.ui.mouse,{_init:function(){var b=this.options;this.containerCache={};this.element.addClass("ui-sortable");this.refresh();this.floating=this.items.length?(/left|right/).test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--){this.items[b].item.removeData("sortable-item")}},_mouseCapture:function(e,f){if(this.reverting){return false}if(this.options.disabled||this.options.type=="static"){return false}this._refreshItems(e);var d=null,c=this,b=a(e.target).parents().each(function(){if(a.data(this,"sortable-item")==c){d=a(this);return false}});if(a.data(e.target,"sortable-item")==c){d=a(e.target)}if(!d){return false}if(this.options.handle&&!f){var g=false;a(this.options.handle,d).find("*").andSelf().each(function(){if(this==e.target){g=true}});if(!g){return false}}this.currentItem=d;this._removeCurrentsFromItems();return true},_mouseStart:function(e,f,b){var g=this.options,c=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(e);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(e);this.originalPageX=e.pageX;this.originalPageY=e.pageY;if(g.cursorAt){this._adjustOffsetFromHelper(g.cursorAt)}this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide()}this._createPlaceholder();if(g.containment){this._setContainment()}if(g.cursor){if(a("body").css("cursor")){this._storedCursor=a("body").css("cursor")}a("body").css("cursor",g.cursor)}if(g.opacity){if(this.helper.css("opacity")){this._storedOpacity=this.helper.css("opacity")}this.helper.css("opacity",g.opacity)}if(g.zIndex){if(this.helper.css("zIndex")){this._storedZIndex=this.helper.css("zIndex")}this.helper.css("zIndex",g.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){this.overflowOffset=this.scrollParent.offset()}this._trigger("start",e,this._uiHash());if(!this._preserveHelperProportions){this._cacheHelperProportions()}if(!b){for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("activate",e,c._uiHash(this))}}if(a.ui.ddmanager){a.ui.ddmanager.current=this}if(a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,e)}this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(e);return true},_mouseDrag:function(f){this.position=this._generatePosition(f);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}if(this.options.scroll){var g=this.options,b=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-f.pageY<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop+g.scrollSpeed}else{if(f.pageY-this.overflowOffset.top<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop-g.scrollSpeed}}if((this.overflowOffset.left+this.scrollParent[0].offsetWidth)-f.pageX<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft+g.scrollSpeed}else{if(f.pageX-this.overflowOffset.left<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft-g.scrollSpeed}}}else{if(f.pageY-a(document).scrollTop()<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-g.scrollSpeed)}else{if(a(window).height()-(f.pageY-a(document).scrollTop())<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+g.scrollSpeed)}}if(f.pageX-a(document).scrollLeft()<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-g.scrollSpeed)}else{if(a(window).width()-(f.pageX-a(document).scrollLeft())<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+g.scrollSpeed)}}}if(b!==false&&a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,f)}}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d],c=e.item[0],h=this._intersectsWithPointer(e);if(!h){continue}if(c!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=c&&!a.ui.contains(this.placeholder[0],c)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],c):true)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e)){this._rearrange(f,e)}else{break}this._trigger("change",f,this._uiHash());break}}this._contactContainers(f);if(a.ui.ddmanager){a.ui.ddmanager.drag(this,f)}this._trigger("sort",f,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(!c){return}if(a.ui.ddmanager&&!this.options.dropBehaviour){a.ui.ddmanager.drop(this,c)}if(this.options.revert){var b=this;var e=b.placeholder.offset();b.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-b.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-b.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){b._clear(c)})}else{this._clear(c,d)}return false},cancel:function(){var b=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original"){this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,b._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,b._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder[0].parentNode){this.placeholder[0].parentNode.removeChild(this.placeholder[0])}if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode){this.helper.remove()}a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){a(this.domPosition.prev).after(this.currentItem)}else{a(this.domPosition.parent).prepend(this.currentItem)}return true},serialize:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};a(b).each(function(){var e=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||(/(.+)[-=_](.+)/));if(e){c.push((d.key||e[1]+"[]")+"="+(d.key&&d.expression?e[1]:e[2]))}});return c.join("&")},toArray:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};b.each(function(){c.push(a(d.item||this).attr(d.attribute||"id")||"")});return c},_intersectsWith:function(m){var e=this.positionAbs.left,d=e+this.helperProportions.width,k=this.positionAbs.top,j=k+this.helperProportions.height;var f=m.left,c=f+m.width,n=m.top,i=n+m.height;var o=this.offset.click.top,h=this.offset.click.left;var g=(k+o)>n&&(k+o)<i&&(e+h)>f&&(e+h)<c;if(this.options.tolerance=="pointer"||this.options.forcePointerForContainers||(this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>m[this.floating?"width":"height"])){return g}else{return(f<e+(this.helperProportions.width/2)&&d-(this.helperProportions.width/2)<c&&n<k+(this.helperProportions.height/2)&&j-(this.helperProportions.height/2)<i)}},_intersectsWithPointer:function(d){var e=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top,d.height),c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left,d.width),g=e&&c,b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(!g){return false}return this.floating?(((f&&f=="right")||b=="down")?2:1):(b&&(b=="down"?2:1))},_intersectsWithSides:function(e){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+(e.height/2),e.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+(e.width/2),e.width),b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(this.floating&&f){return((f=="right"&&d)||(f=="left"&&!d))}else{return b&&((b=="down"&&c)||(b=="up"&&!c))}},_getDragVerticalDirection:function(){var b=this.positionAbs.top-this.lastPositionAbs.top;return b!=0&&(b>0?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-this.lastPositionAbs.left;return b!=0&&(b>0?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions()},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(b){var l=this;var g=[];var e=[];var h=this._connectWith();if(h&&b){for(var d=h.length-1;d>=0;d--){var k=a(h[d]);for(var c=k.length-1;c>=0;c--){var f=a.data(k[c],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element):a(f.options.items,f.element).not(".ui-sortable-helper"),f])}}}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper"),this]);for(var d=e.length-1;d>=0;d--){e[d][0].each(function(){g.push(this)})}return a(g)},_removeCurrentsFromItems:function(){var d=this.currentItem.find(":data(sortable-item)");for(var c=0;c<this.items.length;c++){for(var b=0;b<d.length;b++){if(d[b]==this.items[c].item[0]){this.items.splice(c,1)}}}},_refreshItems:function(b){this.items=[];this.containers=[this];var h=this.items;var p=this;var f=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]];var l=this._connectWith();if(l){for(var e=l.length-1;e>=0;e--){var m=a(l[e]);for(var d=m.length-1;d>=0;d--){var g=a.data(m[d],"sortable");if(g&&g!=this&&!g.options.disabled){f.push([a.isFunction(g.options.items)?g.options.items.call(g.element[0],b,{item:this.currentItem}):a(g.options.items,g.element),g]);this.containers.push(g)}}}}for(var e=f.length-1;e>=0;e--){var k=f[e][1];var c=f[e][0];for(var d=0,n=c.length;d<n;d++){var o=a(c[d]);o.data("sortable-item",k);h.push({item:o,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){if(this.offsetParent&&this.helper){this.offset.parent=this._getParentOffset()}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d];if(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0]){continue}var c=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!b){e.width=c.outerWidth();e.height=c.outerHeight()}var f=c.offset();e.left=f.left;e.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this)}else{for(var d=this.containers.length-1;d>=0;d--){var f=this.containers[d].element.offset();this.containers[d].containerCache.left=f.left;this.containers[d].containerCache.top=f.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}}},_createPlaceholder:function(d){var b=d||this,e=b.options;if(!e.placeholder||e.placeholder.constructor==String){var c=e.placeholder;e.placeholder={element:function(){var f=a(document.createElement(b.currentItem[0].nodeName)).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!c){f.style.visibility="hidden"}return f},update:function(f,g){if(c&&!e.forcePlaceholderSize){return}if(!g.height()){g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10))}if(!g.width()){g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=a(e.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);e.placeholder.update(b,b.placeholder)},_contactContainers:function(d){for(var c=this.containers.length-1;c>=0;c--){if(this._intersectsWith(this.containers[c].containerCache)){if(!this.containers[c].containerCache.over){if(this.currentContainer!=this.containers[c]){var h=10000;var g=null;var e=this.positionAbs[this.containers[c].floating?"left":"top"];for(var b=this.items.length-1;b>=0;b--){if(!a.ui.contains(this.containers[c].element[0],this.items[b].item[0])){continue}var f=this.items[b][this.containers[c].floating?"left":"top"];if(Math.abs(f-e)<h){h=Math.abs(f-e);g=this.items[b]}}if(!g&&!this.options.dropOnEmpty){continue}this.currentContainer=this.containers[c];g?this._rearrange(d,g,null,true):this._rearrange(d,null,this.containers[c].element,true);this._trigger("change",d,this._uiHash());this.containers[c]._trigger("change",d,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder)}this.containers[c]._trigger("over",d,this._uiHash(this));this.containers[c].containerCache.over=1}}else{if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",d,this._uiHash(this));this.containers[c].containerCache.over=0}}}},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c,this.currentItem])):(d.helper=="clone"?this.currentItem.clone():this.currentItem);if(!b.parents("body").length){a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(b[0])}if(b[0]==this.currentItem[0]){this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}}if(b[0].style.width==""||d.forceHelperSize){b.width(this.currentItem.width())}if(b[0].style.height==""||d.forceHelperSize){b.height(this.currentItem.height())}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.currentItem.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.currentItem.css("marginLeft"),10)||0),top:(parseInt(this.currentItem.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)){var c=a(e.containment)[0];var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_rearrange:function(g,f,c,e){c?c[0].appendChild(this.placeholder[0]):f.item[0].parentNode.insertBefore(this.placeholder[0],(this.direction=="down"?f.item[0]:f.item[0].nextSibling));this.counter=this.counter?++this.counter:1;var d=this,b=this.counter;window.setTimeout(function(){if(b==d.counter){d.refreshPositions(!e)}},0)},_clear:function(d,e){this.reverting=false;var f=[],b=this;if(!this._noFinalSort&&this.currentItem[0].parentNode){this.placeholder.before(this.currentItem)}this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var c in this._storedCSS){if(this._storedCSS[c]=="auto"||this._storedCSS[c]=="static"){this._storedCSS[c]=""}}this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}if(this.fromOutside&&!e){f.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))})}if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!e){f.push(function(g){this._trigger("update",g,this._uiHash())})}if(!a.ui.contains(this.element[0],this.currentItem[0])){if(!e){f.push(function(g){this._trigger("remove",g,this._uiHash())})}for(var c=this.containers.length-1;c>=0;c--){if(a.ui.contains(this.containers[c].element[0],this.currentItem[0])&&!e){f.push((function(g){return function(h){g._trigger("receive",h,this._uiHash(this))}}).call(this,this.containers[c]));f.push((function(g){return function(h){g._trigger("update",h,this._uiHash(this))}}).call(this,this.containers[c]))}}}for(var c=this.containers.length-1;c>=0;c--){if(!e){f.push((function(g){return function(h){g._trigger("deactivate",h,this._uiHash(this))}}).call(this,this.containers[c]))}if(this.containers[c].containerCache.over){f.push((function(g){return function(h){g._trigger("out",h,this._uiHash(this))}}).call(this,this.containers[c]));this.containers[c].containerCache.over=0}}if(this._storedCursor){a("body").css("cursor",this._storedCursor)}if(this._storedOpacity){this.helper.css("opacity",this._storedOpacity)}if(this._storedZIndex){this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex)}this.dragging=false;if(this.cancelHelperRemoval){if(!e){this._trigger("beforeStop",d,this._uiHash());for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}return false}if(!e){this._trigger("beforeStop",d,this._uiHash())}this.placeholder[0].parentNode.removeChild(this.placeholder[0]);if(this.helper[0]!=this.currentItem[0]){this.helper.remove()}this.helper=null;if(!e){for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){if(a.widget.prototype._trigger.apply(this,arguments)===false){this.cancel()}},_uiHash:function(c){var b=c||this;return{helper:b.helper,placeholder:b.placeholder||a([]),position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs,item:b.currentItem,sender:c?c.element:null}}}));a.extend(a.ui.sortable,{getter:"serialize toArray",version:"1.7.1",eventPrefix:"sort",defaults:{appendTo:"parent",axis:false,cancel:":input,option",connectWith:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1000}})})(jQuery);; \ No newline at end of file
diff --git a/chef-server-slice/public/javascripts/jquery.editinline.js b/chef-server-slice/public/javascripts/jquery.editinline.js
deleted file mode 100644
index e97abe1d15..0000000000
--- a/chef-server-slice/public/javascripts/jquery.editinline.js
+++ /dev/null
@@ -1,108 +0,0 @@
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not
-// use this file except in compliance with the License. You may obtain a copy
-// of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations under
-// the License.
-
-(function($) {
-
- function startEditing(elem, options) {
- var editable = $(elem);
- var origHtml = editable.html();
- var origText = options.populate($.trim(editable.text()));
-
- if (!options.begin.apply(elem, [origText])) {
- return;
- }
-
- var input = options.createInput.apply(elem, [origText])
- .addClass("editinline").val(origText)
- .dblclick(function() { return false; })
- .keydown(function(evt) {
- switch (evt.keyCode) {
- case 13: { // return
- if (!input.is("textarea")) applyChange(evt.keyCode);
- break;
- }
- case 27: { // escape
- cancelChange(evt.keyCode);
- break;
- }
- case 9: { // tab
- if (!input.is("textarea")) {
- applyChange(evt.keyCode);
- return false;
- }
- }
- }
- });
-
- function applyChange(keyCode) {
- var newText = input.val();
- if (newText == origText) {
- cancelChange(keyCode);
- return true;
- }
- if ((!options.allowEmpty && !newText.length) ||
- !options.validate.apply(elem, [newText])) {
- input.addClass("invalid");
- return false;
- }
- input.remove();
- tools.remove();
- options.accept.apply(elem, [newText, origText]);
- editable.removeClass("editinline-container");
- options.end.apply(elem, [keyCode]);
- return true;
- }
-
- function cancelChange(keyCode) {
- options.cancel.apply(elem, [origText]);
- editable.html(origHtml).removeClass("editinline-container");
- options.end.apply(elem, [keyCode]);
- }
-
- var tools = $("<span class='editinline-tools'></span>");
- $("<button type='button' class='apply'></button>")
- .text(options.acceptLabel).click(applyChange).appendTo(tools);
- $("<button type='button' class='cancel'></button>")
- .text(options.cancelLabel).click(cancelChange).appendTo(tools)
-
- editable.html("").append(tools).append(input)
- .addClass("editinline-container");
- options.prepareInput.apply(elem, [input[0]]);
- input.each(function() { this.focus(); this.select(); });
- }
-
- $.fn.makeEditable = function(options) {
- options = $.extend({
- allowEmpty: true,
- acceptLabel: "",
- cancelLabel: "",
- toolTip: "Double click to edit",
-
- // callbacks
- begin: function() { return true },
- accept: function(newValue, oldValue) {},
- cancel: function(oldValue) {},
- createInput: function(value) { return $("<input type='text'>") },
- prepareInput: function(input) {},
- end: function(keyCode) {},
- populate: function(value) { return value },
- validate: function() { return true }
- }, options || {});
-
- return this.each(function() {
- $(this).attr("title", options.toolTip).dblclick(function() {
- startEditing(this, options);
- });
- });
- }
-
-})(jQuery);
diff --git a/chef-server-slice/public/javascripts/jquery.jeditable.mini.js b/chef-server-slice/public/javascripts/jquery.jeditable.mini.js
deleted file mode 100644
index fdc46ff456..0000000000
--- a/chef-server-slice/public/javascripts/jquery.jeditable.mini.js
+++ /dev/null
@@ -1,30 +0,0 @@
-
-(function($){$.fn.editable=function(target,options){var settings={target:target,name:'value',id:'id',type:'text',width:'auto',height:'auto',event:'click',onblur:'cancel',loadtype:'GET',loadtext:'Loading...',placeholder:'Click to edit',loaddata:{},submitdata:{}};if(options){$.extend(settings,options);}
-var plugin=$.editable.types[settings.type].plugin||function(){};var submit=$.editable.types[settings.type].submit||function(){};var buttons=$.editable.types[settings.type].buttons||$.editable.types['defaults'].buttons;var content=$.editable.types[settings.type].content||$.editable.types['defaults'].content;var element=$.editable.types[settings.type].element||$.editable.types['defaults'].element;var reset=$.editable.types[settings.type].reset||$.editable.types['defaults'].reset;var callback=settings.callback||function(){};if(!$.isFunction($(this)[settings.event])){$.fn[settings.event]=function(fn){return fn?this.bind(settings.event,fn):this.trigger(settings.event);}}
-$(this).attr('title',settings.tooltip);settings.autowidth='auto'==settings.width;settings.autoheight='auto'==settings.height;return this.each(function(){var self=this;var savedwidth=$(self).width();var savedheight=$(self).height();if(!$.trim($(this).html())){$(this).html(settings.placeholder);}
-$(this)[settings.event](function(e){if(self.editing){return;}
-if(0==$(self).width()){settings.width=savedwidth;settings.height=savedheight;}else{if(settings.width!='none'){settings.width=settings.autowidth?$(self).width():settings.width;}
-if(settings.height!='none'){settings.height=settings.autoheight?$(self).height():settings.height;}}
-if($(this).html().toLowerCase().replace(/;/,'')==settings.placeholder.toLowerCase().replace(/;/,'')){$(this).html('');}
-self.editing=true;self.revert=$(self).html();$(self).html('');var form=$('<form/>');if(settings.cssclass){if('inherit'==settings.cssclass){form.attr('class',$(self).attr('class'));}else{form.attr('class',settings.cssclass);}}
-if(settings.style){if('inherit'==settings.style){form.attr('style',$(self).attr('style'));form.css('display',$(self).css('display'));}else{form.attr('style',settings.style);}}
-var input=element.apply(form,[settings,self]);var input_content;if(settings.loadurl){var t=setTimeout(function(){input.disabled=true;content.apply(form,[settings.loadtext,settings,self]);},100);var loaddata={};loaddata[settings.id]=self.id;if($.isFunction(settings.loaddata)){$.extend(loaddata,settings.loaddata.apply(self,[self.revert,settings]));}else{$.extend(loaddata,settings.loaddata);}
-$.ajax({type:settings.loadtype,url:settings.loadurl,data:loaddata,async:false,success:function(result){window.clearTimeout(t);input_content=result;input.disabled=false;}});}else if(settings.data){input_content=settings.data;if($.isFunction(settings.data)){input_content=settings.data.apply(self,[self.revert,settings]);}}else{input_content=self.revert;}
-content.apply(form,[input_content,settings,self]);input.attr('name',settings.name);buttons.apply(form,[settings,self]);$(self).append(form);plugin.apply(form,[settings,self]);$(':input:visible:enabled:first',form).focus();if(settings.select){input.select();}
-input.keydown(function(e){if(e.keyCode==27){e.preventDefault();reset.apply(form,[settings,self]);}});var t;if('cancel'==settings.onblur){input.blur(function(e){t=setTimeout(function(){reset.apply(form,[settings,self]);},500);});}else if('submit'==settings.onblur){input.blur(function(e){form.submit();});}else if($.isFunction(settings.onblur)){input.blur(function(e){settings.onblur.apply(self,[input.val(),settings]);});}else{input.blur(function(e){});}
-form.submit(function(e){if(t){clearTimeout(t);}
-e.preventDefault();if(false!==submit.apply(form,[settings,self])){if($.isFunction(settings.target)){var str=settings.target.apply(self,[input.val(),settings]);$(self).html(str);self.editing=false;callback.apply(self,[self.innerHTML,settings]);if(!$.trim($(self).html())){$(self).html(settings.placeholder);}}else{var submitdata={};submitdata[settings.name]=input.val();submitdata[settings.id]=self.id;if($.isFunction(settings.submitdata)){$.extend(submitdata,settings.submitdata.apply(self,[self.revert,settings]));}else{$.extend(submitdata,settings.submitdata);}
-if('PUT'==settings.method){submitdata['_method']='put';}
-$(self).html(settings.indicator);$.post(settings.target,submitdata,function(str){$(self).html(str);self.editing=false;callback.apply(self,[self.innerHTML,settings]);if(!$.trim($(self).html())){$(self).html(settings.placeholder);}});}}
-return false;});});this.reset=function(){$(self).html(self.revert);self.editing=false;if(!$.trim($(self).html())){$(self).html(settings.placeholder);}}});};$.editable={types:{defaults:{element:function(settings,original){var input=$('<input type="hidden">');$(this).append(input);return(input);},content:function(string,settings,original){$(':input:first',this).val(string);},reset:function(settings,original){original.reset();},buttons:function(settings,original){var form=this;if(settings.submit){if(settings.submit.match(/>$/)){var submit=$(settings.submit).click(function(){if(submit.attr("type")!="submit"){form.submit();}});}else{var submit=$('<button type="submit">');submit.html(settings.submit);}
-$(this).append(submit);}
-if(settings.cancel){if(settings.cancel.match(/>$/)){var cancel=$(settings.cancel);}else{var cancel=$('<button type="cancel">');cancel.html(settings.cancel);}
-$(this).append(cancel);$(cancel).click(function(event){if($.isFunction($.editable.types[settings.type].reset)){var reset=$.editable.types[settings.type].reset;}else{var reset=$.editable.types['defaults'].reset;}
-reset.apply(form,[settings,original]);return false;});}}},text:{element:function(settings,original){var input=$('<input>');if(settings.width!='none'){input.width(settings.width);}
-if(settings.height!='none'){input.height(settings.height);}
-input.attr('autocomplete','off');$(this).append(input);return(input);}},textarea:{element:function(settings,original){var textarea=$('<textarea>');if(settings.rows){textarea.attr('rows',settings.rows);}else{textarea.height(settings.height);}
-if(settings.cols){textarea.attr('cols',settings.cols);}else{textarea.width(settings.width);}
-$(this).append(textarea);return(textarea);}},select:{element:function(settings,original){var select=$('<select>');$(this).append(select);return(select);},content:function(string,settings,original){if(String==string.constructor){eval('var json = '+string);for(var key in json){if(!json.hasOwnProperty(key)){continue;}
-if('selected'==key){continue;}
-var option=$('<option>').val(key).append(json[key]);$('select',this).append(option);}}
-$('select',this).children().each(function(){if($(this).val()==json['selected']||$(this).text()==original.revert){$(this).attr('selected','selected');};});}}},addInputType:function(name,input){$.editable.types[name]=input;}};})(jQuery); \ No newline at end of file
diff --git a/chef-server-slice/public/javascripts/jquery.livequery.js b/chef-server-slice/public/javascripts/jquery.livequery.js
deleted file mode 100644
index dde8ad8e32..0000000000
--- a/chef-server-slice/public/javascripts/jquery.livequery.js
+++ /dev/null
@@ -1,250 +0,0 @@
-/*! Copyright (c) 2008 Brandon Aaron (http://brandonaaron.net)
- * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
- * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
- *
- * Version: 1.0.3
- * Requires jQuery 1.1.3+
- * Docs: http://docs.jquery.com/Plugins/livequery
- */
-
-(function($) {
-
-$.extend($.fn, {
- livequery: function(type, fn, fn2) {
- var self = this, q;
-
- // Handle different call patterns
- if ($.isFunction(type))
- fn2 = fn, fn = type, type = undefined;
-
- // See if Live Query already exists
- $.each( $.livequery.queries, function(i, query) {
- if ( self.selector == query.selector && self.context == query.context &&
- type == query.type && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) )
- // Found the query, exit the each loop
- return (q = query) && false;
- });
-
- // Create new Live Query if it wasn't found
- q = q || new $.livequery(this.selector, this.context, type, fn, fn2);
-
- // Make sure it is running
- q.stopped = false;
-
- // Run it immediately for the first time
- q.run();
-
- // Contnue the chain
- return this;
- },
-
- expire: function(type, fn, fn2) {
- var self = this;
-
- // Handle different call patterns
- if ($.isFunction(type))
- fn2 = fn, fn = type, type = undefined;
-
- // Find the Live Query based on arguments and stop it
- $.each( $.livequery.queries, function(i, query) {
- if ( self.selector == query.selector && self.context == query.context &&
- (!type || type == query.type) && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) && !this.stopped )
- $.livequery.stop(query.id);
- });
-
- // Continue the chain
- return this;
- }
-});
-
-$.livequery = function(selector, context, type, fn, fn2) {
- this.selector = selector;
- this.context = context || document;
- this.type = type;
- this.fn = fn;
- this.fn2 = fn2;
- this.elements = [];
- this.stopped = false;
-
- // The id is the index of the Live Query in $.livequery.queries
- this.id = $.livequery.queries.push(this)-1;
-
- // Mark the functions for matching later on
- fn.$lqguid = fn.$lqguid || $.livequery.guid++;
- if (fn2) fn2.$lqguid = fn2.$lqguid || $.livequery.guid++;
-
- // Return the Live Query
- return this;
-};
-
-$.livequery.prototype = {
- stop: function() {
- var query = this;
-
- if ( this.type )
- // Unbind all bound events
- this.elements.unbind(this.type, this.fn);
- else if (this.fn2)
- // Call the second function for all matched elements
- this.elements.each(function(i, el) {
- query.fn2.apply(el);
- });
-
- // Clear out matched elements
- this.elements = [];
-
- // Stop the Live Query from running until restarted
- this.stopped = true;
- },
-
- run: function() {
- // Short-circuit if stopped
- if ( this.stopped ) return;
- var query = this;
-
- var oEls = this.elements,
- els = $(this.selector, this.context),
- nEls = els.not(oEls);
-
- // Set elements to the latest set of matched elements
- this.elements = els;
-
- if (this.type) {
- // Bind events to newly matched elements
- nEls.bind(this.type, this.fn);
-
- // Unbind events to elements no longer matched
- if (oEls.length > 0)
- $.each(oEls, function(i, el) {
- if ( $.inArray(el, els) < 0 )
- $.event.remove(el, query.type, query.fn);
- });
- }
- else {
- // Call the first function for newly matched elements
- nEls.each(function() {
- query.fn.apply(this);
- });
-
- // Call the second function for elements no longer matched
- if ( this.fn2 && oEls.length > 0 )
- $.each(oEls, function(i, el) {
- if ( $.inArray(el, els) < 0 )
- query.fn2.apply(el);
- });
- }
- }
-};
-
-$.extend($.livequery, {
- guid: 0,
- queries: [],
- queue: [],
- running: false,
- timeout: null,
-
- checkQueue: function() {
- if ( $.livequery.running && $.livequery.queue.length ) {
- var length = $.livequery.queue.length;
- // Run each Live Query currently in the queue
- while ( length-- )
- $.livequery.queries[ $.livequery.queue.shift() ].run();
- }
- },
-
- pause: function() {
- // Don't run anymore Live Queries until restarted
- $.livequery.running = false;
- },
-
- play: function() {
- // Restart Live Queries
- $.livequery.running = true;
- // Request a run of the Live Queries
- $.livequery.run();
- },
-
- registerPlugin: function() {
- $.each( arguments, function(i,n) {
- // Short-circuit if the method doesn't exist
- if (!$.fn[n]) return;
-
- // Save a reference to the original method
- var old = $.fn[n];
-
- // Create a new method
- $.fn[n] = function() {
- // Call the original method
- var r = old.apply(this, arguments);
-
- // Request a run of the Live Queries
- $.livequery.run();
-
- // Return the original methods result
- return r;
- }
- });
- },
-
- run: function(id) {
- if (id != undefined) {
- // Put the particular Live Query in the queue if it doesn't already exist
- if ( $.inArray(id, $.livequery.queue) < 0 )
- $.livequery.queue.push( id );
- }
- else
- // Put each Live Query in the queue if it doesn't already exist
- $.each( $.livequery.queries, function(id) {
- if ( $.inArray(id, $.livequery.queue) < 0 )
- $.livequery.queue.push( id );
- });
-
- // Clear timeout if it already exists
- if ($.livequery.timeout) clearTimeout($.livequery.timeout);
- // Create a timeout to check the queue and actually run the Live Queries
- $.livequery.timeout = setTimeout($.livequery.checkQueue, 20);
- },
-
- stop: function(id) {
- if (id != undefined)
- // Stop are particular Live Query
- $.livequery.queries[ id ].stop();
- else
- // Stop all Live Queries
- $.each( $.livequery.queries, function(id) {
- $.livequery.queries[ id ].stop();
- });
- }
-});
-
-// Register core DOM manipulation methods
-$.livequery.registerPlugin('append', 'prepend', 'after', 'before', 'wrap', 'attr', 'removeAttr', 'addClass', 'removeClass', 'toggleClass', 'empty', 'remove');
-
-// Run Live Queries when the Document is ready
-$(function() { $.livequery.play(); });
-
-
-// Save a reference to the original init method
-var init = $.prototype.init;
-
-// Create a new init method that exposes two new properties: selector and context
-$.prototype.init = function(a,c) {
- // Call the original init and save the result
- var r = init.apply(this, arguments);
-
- // Copy over properties if they exist already
- if (a && a.selector)
- r.context = a.context, r.selector = a.selector;
-
- // Set properties
- if ( typeof a == 'string' )
- r.context = c || document, r.selector = a;
-
- // Return the result
- return r;
-};
-
-// Give the init function the jQuery prototype for later instantiation (needed after Rev 4091)
-$.prototype.init.prototype = $.prototype;
-
-})(jQuery); \ No newline at end of file
diff --git a/chef-server-slice/public/javascripts/jquery.localscroll.js b/chef-server-slice/public/javascripts/jquery.localscroll.js
deleted file mode 100644
index 596e1ba200..0000000000
--- a/chef-server-slice/public/javascripts/jquery.localscroll.js
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- * jQuery.LocalScroll
- * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
- * Dual licensed under MIT and GPL.
- * Date: 6/3/2008
- *
- * @projectDescription Animated scrolling navigation, using anchors.
- * http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html
- * @author Ariel Flesler
- * @version 1.2.6
- *
- * @id jQuery.fn.localScroll
- * @param {Object} settings Hash of settings, it is passed in to jQuery.ScrollTo, none is required.
- * @return {jQuery} Returns the same jQuery object, for chaining.
- *
- * @example $('ul.links').localScroll();
- *
- * @example $('ul.links').localScroll({ filter:'.animated', duration:400, axis:'x' });
- *
- * @example $.localScroll({ target:'#pane', axis:'xy', queue:true, event:'mouseover' });
- *
- * Notes:
- * - The plugin requires jQuery.ScrollTo.
- * - The hash of settings, is passed to jQuery.ScrollTo, so the settings are valid for that plugin as well.
- * - jQuery.localScroll can be used if the desired links, are all over the document, it accepts the same settings.
- * - If the setting 'lazy' is set to true, then the binding will still work for later added anchors.
- * - The setting 'speed' is deprecated, use 'duration' instead.
- * - If onBefore returns false, the event is ignored.
- **/
-;(function( $ ){
- var URI = location.href.replace(/#.*/,'');//local url without hash
-
- var $localScroll = $.localScroll = function( settings ){
- $('body').localScroll( settings );
- };
-
- //Many of these defaults, belong to jQuery.ScrollTo, check it's demo for an example of each option.
- //@see http://www.freewebs.com/flesler/jQuery.ScrollTo/
- $localScroll.defaults = {//the defaults are public and can be overriden.
- duration:1000, //how long to animate.
- axis:'y',//which of top and left should be modified.
- event:'click',//on which event to react.
- stop:true//avoid queuing animations
- /*
- lock:false,//ignore events if already animating
- lazy:false,//if true, links can be added later, and will still work.
- target:null, //what to scroll (selector or element). Keep it null if want to scroll the whole window.
- filter:null, //filter some anchors out of the matched elements.
- hash: false//if true, the hash of the selected link, will appear on the address bar.
- */
- };
-
- //if the URL contains a hash, it will scroll to the pointed element
- $localScroll.hash = function( settings ){
- settings = $.extend( {}, $localScroll.defaults, settings );
- settings.hash = false;//can't be true
- if( location.hash )
- setTimeout(function(){ scroll( 0, location, settings ); }, 0 );//better wrapped with a setTimeout
- };
-
- $.fn.localScroll = function( settings ){
- settings = $.extend( {}, $localScroll.defaults, settings );
-
- return ( settings.persistent || settings.lazy )
- ? this.bind( settings.event, function( e ){//use event delegation, more links can be added later.
- var a = $([e.target, e.target.parentNode]).filter(filter)[0];//if a valid link was clicked.
- a && scroll( e, a, settings );//do scroll.
- })
- : this.find('a,area')//bind concretely, to each matching link
- .filter( filter ).bind( settings.event, function(e){
- scroll( e, this, settings );
- }).end()
- .end();
-
- function filter(){//is this a link that points to an anchor and passes a possible filter ? href is checked to avoid a bug in FF.
- return !!this.href && !!this.hash && this.href.replace(this.hash,'') == URI && (!settings.filter || $(this).is( settings.filter ));
- };
- };
-
- function scroll( e, link, settings ){
- var id = link.hash.slice(1),
- elem = document.getElementById(id) || document.getElementsByName(id)[0];
- if ( elem ){
- e && e.preventDefault();
- var $target = $( settings.target || $.scrollTo.window() );//if none specified, then the window.
-
- if( settings.lock && $target.is(':animated') ||
- settings.onBefore && settings.onBefore.call(link, e, elem, $target) === false ) return;
-
- if( settings.stop )
- $target.queue('fx',[]).stop();//remove all its animations
- $target
- .scrollTo( elem, settings )//do scroll
- .trigger('notify.serialScroll',[elem]);//notify serialScroll about this change
- if( settings.hash )
- $target.queue(function(){
- location = link.hash;
- // make sure this function is released
- $(this).dequeue();
- });
- }
- };
-
-})( jQuery ); \ No newline at end of file
diff --git a/chef-server-slice/public/javascripts/jquery.scrollTo.js b/chef-server-slice/public/javascripts/jquery.scrollTo.js
deleted file mode 100644
index 688d58e55d..0000000000
--- a/chef-server-slice/public/javascripts/jquery.scrollTo.js
+++ /dev/null
@@ -1,150 +0,0 @@
-/**
- * jQuery.ScrollTo
- * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
- * Dual licensed under MIT and GPL.
- * Date: 2/19/2008
- *
- * @projectDescription Easy element scrolling using jQuery.
- * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
- * Tested with jQuery 1.2.1. On FF 2.0.0.11, IE 6, Opera 9.22 and Safari 3 beta. on Windows.
- *
- * @author Ariel Flesler
- * @version 1.3.3
- *
- * @id jQuery.scrollTo
- * @id jQuery.fn.scrollTo
- * @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements.
- * The different options for target are:
- * - A number position (will be applied to all axes).
- * - A string position ('44', '100px', '+=90', etc ) will be applied to all axes
- * - A jQuery/DOM element ( logically, child of the element to scroll )
- * - A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc )
- * - A hash { top:x, left:y }, x and y can be any kind of number/string like above.
- * @param {Number} duration The OVERALL length of the animation, this argument can be the settings object instead.
- * @param {Object} settings Hash of settings, optional.
- * @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'.
- * @option {Number} duration The OVERALL length of the animation.
- * @option {String} easing The easing method for the animation.
- * @option {Boolean} margin If true, the margin of the target element will be deducted from the final position.
- * @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }.
- * @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes.
- * @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends.
- * @option {Function} onAfter Function to be called after the scrolling ends.
- * @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends.
- * @return {jQuery} Returns the same jQuery object, for chaining.
- *
- * @example $('div').scrollTo( 340 );
- *
- * @example $('div').scrollTo( '+=340px', { axis:'y' } );
- *
- * @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } );
- *
- * @example var second_child = document.getElementById('container').firstChild.nextSibling;
- * $('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){
- * alert('scrolled!!');
- * }});
- *
- * @example $('div').scrollTo( { top: 300, left:'+=200' }, { offset:-20 } );
- *
- * Notes:
- * - jQuery.scrollTo will make the whole window scroll, it accepts the same arguments as jQuery.fn.scrollTo.
- * - If you are interested in animated anchor navigation, check http://jquery.com/plugins/project/LocalScroll.
- * - The options margin, offset and over are ignored, if the target is not a jQuery object or a DOM element.
- * - The option 'queue' won't be taken into account, if only 1 axis is given.
- */
-;(function( $ ){
-
- var $scrollTo = $.scrollTo = function( target, duration, settings ){
- $scrollTo.window().scrollTo( target, duration, settings );
- };
-
- $scrollTo.defaults = {
- axis:'y',
- duration:1
- };
-
- //returns the element that needs to be animated to scroll the window
- $scrollTo.window = function(){
- return $( $.browser.safari ? 'body' : 'html' );
- };
-
- $.fn.scrollTo = function( target, duration, settings ){
- if( typeof duration == 'object' ){
- settings = duration;
- duration = 0;
- }
- settings = $.extend( {}, $scrollTo.defaults, settings );
- duration = duration || settings.speed || settings.duration;//speed is still recognized for backwards compatibility
- settings.queue = settings.queue && settings.axis.length > 1;//make sure the settings are given right
- if( settings.queue )
- duration /= 2;//let's keep the overall speed, the same.
- settings.offset = both( settings.offset );
- settings.over = both( settings.over );
-
- return this.each(function(){
- var elem = this, $elem = $(elem),
- t = target, toff, attr = {},
- win = $elem.is('html,body');
- switch( typeof t ){
- case 'number'://will pass the regex
- case 'string':
- if( /^([+-]=)?\d+(px)?$/.test(t) ){
- t = both( t );
- break;//we are done
- }
- t = $(t,this);// relative selector, no break!
- case 'object':
- if( t.is || t.style )//DOM/jQuery
- toff = (t = $(t)).offset();//get the real position of the target
- }
- $.each( settings.axis.split(''), function( i, axis ){
- var Pos = axis == 'x' ? 'Left' : 'Top',
- pos = Pos.toLowerCase(),
- key = 'scroll' + Pos,
- act = elem[key],
- Dim = axis == 'x' ? 'Width' : 'Height',
- dim = Dim.toLowerCase();
-
- if( toff ){//jQuery/DOM
- attr[key] = toff[pos] + ( win ? 0 : act - $elem.offset()[pos] );
-
- if( settings.margin ){//if it's a dom element, reduce the margin
- attr[key] -= parseInt(t.css('margin'+Pos)) || 0;
- attr[key] -= parseInt(t.css('border'+Pos+'Width')) || 0;
- }
-
- attr[key] += settings.offset[pos] || 0;//add/deduct the offset
-
- if( settings.over[pos] )//scroll to a fraction of its width/height
- attr[key] += t[dim]() * settings.over[pos];
- }else
- attr[key] = t[pos];//remove the unnecesary 'px'
-
- if( /^\d+$/.test(attr[key]) )//number or 'number'
- attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max(Dim) );//check the limits
-
- if( !i && settings.queue ){//queueing each axis is required
- if( act != attr[key] )//don't waste time animating, if there's no need.
- animate( settings.onAfterFirst );//intermediate animation
- delete attr[key];//don't animate this axis again in the next iteration.
- }
- });
- animate( settings.onAfter );
-
- function animate( callback ){
- $elem.animate( attr, duration, settings.easing, callback && function(){
- callback.call(this, target);
- });
- };
- function max( Dim ){
- var el = win ? $.browser.opera ? document.body : document.documentElement : elem;
- return el['scroll'+Dim] - el['client'+Dim];
- };
- });
- };
-
- function both( val ){
- return typeof val == 'object' ? val : { top:val, left:val };
- };
-
-})( jQuery ); \ No newline at end of file
diff --git a/chef-server-slice/public/javascripts/jquery.tools.min.js b/chef-server-slice/public/javascripts/jquery.tools.min.js
deleted file mode 100644
index 4133a43498..0000000000
--- a/chef-server-slice/public/javascripts/jquery.tools.min.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * jquery.tools 1.0.0 - The missing UI library
- *
- * [tools.tooltip-1.0.0, tools.expose-1.0.2]
- *
- * Copyright (c) 2009 Tero Piirainen
- * http://flowplayer.org/tools/
- *
- * Dual licensed under MIT and GPL 2+ licenses
- * http://www.opensource.org/licenses
- *
- * -----
- *
- * Build: Wed Jun 03 19:51:51 GMT+00:00 2009
- */
-(function(c){c.tools=c.tools||{version:{}};c.tools.version.tooltip="1.0.0";var b={toggle:[function(){this.getTip().show()},function(){this.getTip().hide()}]};c.tools.addTipEffect=function(d,f,e){b[d]=[f,e]};c.tools.addTipEffect("slideup",function(){var d=this.getConf();var e=d.slideOffset||10;this.getTip().css({opacity:0}).animate({top:"-="+e,opacity:d.opacity},d.slideInSpeed||200).show()},function(){var d=this.getConf();var e=d.slideOffset||10;this.getTip().animate({top:"-="+e,opacity:0},d.slideOutSpeed||200,function(){c(this).hide().animate({top:"+="+(e*2)},0)})});function a(g,e){var d=this;function i(j,k){c(d).bind(j,function(m,l){if(k&&k.call(this)===false&&l){l.proceed=false}});return d}c.each(e,function(j,k){if(c.isFunction(k)){i(j,k)}});var f=e.triggers?c(e.triggers):g.prev(e.trigger);if(!f.length){throw"cannot find trigges for tip: "+g.selector}f.bind(f.is("input")?"focus":"mouseover",function(j){d.show(j);g.hover(function(){d.show()},function(){d.hide()})});f.bind(f.is("input")?"blur":"mouseout",function(){d.hide()});g.css("opacity",e.opacity);var h=0;c.extend(d,{show:function(o){if(o){f=c(o.target)}clearTimeout(h);if(g.is(":animated")||g.is(":visible")){return d}var n={proceed:true};c(d).trigger("onBeforeShow",n);if(!n.proceed){return d}var m=f.position().top-g.outerHeight();var j=g.outerHeight()+f.outerHeight();var q=e.position[0];if(q=="center"){m+=j/2}if(q=="bottom"){m+=j}var k=f.outerWidth()+g.outerWidth();var l=f.position().left+f.outerWidth();q=e.position[1];if(q=="center"){l-=k/2}if(q=="left"){l-=k}m+=e.offset[0];l+=e.offset[1];g.css({position:"absolute",top:m,left:l});b[e.effect][0].call(d);c(d).trigger("onShow");return d},hide:function(){clearTimeout(h);h=setTimeout(function(){if(g.is(":animated")||!g.is(":visible")){return d}var j={proceed:true};c(d).trigger("onBeforeHide",j);if(!j.proceed){return d}b[e.effect][1].call(d);c(d).trigger("onHide")},e.delay||1);return d},isShown:function(){return g.is(":visible, :animated")},getConf:function(){return e},getTip:function(){return g},getTrigger:function(){return f},onBeforeShow:function(j){return i("onBeforeShow",j)},onShow:function(j){return i("onShow",j)},onBeforeHide:function(j){return i("onBeforeHide",j)},onHide:function(j){return i("onHide",j)}})}c.prototype.tooltip=function(d){var e=this.eq(typeof d=="number"?d:0).data("tooltip");if(e){return e}var f={trigger:null,triggers:null,effect:"slideup",delay:30,opacity:1,position:["top","center"],offset:[0,0],api:false};if(c.isFunction(d)){d={onBeforeShow:d}}c.extend(f,d);this.each(function(){e=new a(c(this),f);c(this).data("tooltip",e)});return f.api?e:this}})(jQuery);
-(function(b){b.tools=b.tools||{version:{}};b.tools.version.expose="1.0.2";function a(){var e=b(window).width();if(b.browser.mozilla){return e}var d;if(window.innerHeight&&window.scrollMaxY){d=window.innerWidth+window.scrollMaxX}else{if(document.body.scrollHeight>document.body.offsetHeight){d=document.body.scrollWidth}else{d=document.body.offsetWidth}}return d<e?d+20:e}function c(g,h){var e=this,d=null,f=false,i=0;function j(k,l){b(e).bind(k,function(n,m){if(l&&l.call(this)===false&&m){m.proceed=false}});return e}b.each(h,function(k,l){if(b.isFunction(l)){j(k,l)}});b(window).bind("resize.expose",function(){if(d){d.css({width:a(),height:b(document).height()})}});b.extend(this,{getMask:function(){return d},getExposed:function(){return g},getConf:function(){return h},isLoaded:function(){return f},load:function(){if(f){return e}i=g.eq(0).css("zIndex");if(h.maskId){d=b("#"+h.maskId)}if(!d||!d.length){d=b("<div/>").css({position:"absolute",top:0,left:0,width:a(),height:b(document).height(),display:"none",opacity:0,zIndex:h.zIndex});if(h.maskId){d.attr("id",h.maskId)}b("body").append(d);var k=d.css("backgroundColor");if(!k||k=="transparent"||k=="rgba(0, 0, 0, 0)"){d.css("backgroundColor",h.color)}if(h.closeOnEsc){b(document).bind("keydown.unexpose",function(n){if(n.keyCode==27){e.close()}})}if(h.closeOnClick){d.bind("click.unexpose",function(){e.close()})}}var m={proceed:true};b(e).trigger("onBeforeLoad",m);if(!m.proceed){return e}b.each(g,function(){var n=b(this);if(!/relative|absolute/i.test(n.css("position"))){n.css("position","relative")}});g.css({zIndex:h.zIndex+1});var l=d.height();if(!this.isLoaded()){d.css({opacity:0,display:"block"}).fadeTo(h.loadSpeed,h.opacity,function(){if(d.height()!=l){d.css("height",l)}b(e).trigger("onLoad")})}f=true;return e},close:function(){if(!f){return e}var k={proceed:true};b(e).trigger("onBeforeClose",k);if(k.proceed===false){return e}d.fadeOut(h.closeSpeed,function(){b(e).trigger("onClose");g.css({zIndex:b.browser.msie?i:null})});f=false;return e},onBeforeLoad:function(k){return j("onBeforeLoad",k)},onLoad:function(k){return j("onLoad",k)},onBeforeClose:function(k){return j("onBeforeClose",k)},onClose:function(k){return j("onClose",k)}})}b.fn.expose=function(d){var e=this.eq(typeof d=="number"?d:0).data("expose");if(e){return e}var f={maskId:null,loadSpeed:"slow",closeSpeed:"fast",closeOnClick:true,closeOnEsc:true,zIndex:9998,opacity:0.8,color:"#456",api:false};if(typeof d=="string"){d={color:d}}b.extend(f,d);this.each(function(){e=new c(b(this),f);b(this).data("expose",e)});return f.api?e:this}})(jQuery);
diff --git a/chef-server-slice/public/javascripts/jquery.treeTable.min.js b/chef-server-slice/public/javascripts/jquery.treeTable.min.js
deleted file mode 100644
index be94663a80..0000000000
--- a/chef-server-slice/public/javascripts/jquery.treeTable.min.js
+++ /dev/null
@@ -1,165 +0,0 @@
-/* jQuery treeTable Plugin 2.2.1 - http://ludo.cubicphuse.nl/jquery-plugins/treeTable/ */
-(function($) {
- // Helps to make options available to all functions
- // TODO: This gives problems when there are both expandable and non-expandable
- // trees on a page. The options shouldn't be global to all these instances!
- var options;
-
- $.fn.treeTable = function(opts) {
- options = $.extend({}, $.fn.treeTable.defaults, opts);
-
- return this.each(function() {
- $(this).addClass("treeTable").find("tbody tr").each(function() {
- // Initialize root nodes only whenever possible
- if(!options.expandable || $(this)[0].className.search("child-of-") == -1) {
- initialize($(this));
- }
- });
- });
- };
-
- $.fn.treeTable.defaults = {
- childPrefix: "child-of-",
- expandable: true,
- indent: 19,
- initialState: "collapsed",
- treeColumn: 0
- };
-
- // Recursively hide all node's children in a tree
- $.fn.collapse = function() {
- $(this).addClass("collapsed");
-
- childrenOf($(this)).each(function() {
- initialize($(this));
-
- if(!$(this).hasClass("collapsed")) {
- $(this).collapse();
- }
-
- $(this).hide();
- });
-
- return this;
- };
-
- // Recursively show all node's children in a tree
- $.fn.expand = function() {
- $(this).removeClass("collapsed").addClass("expanded");
-
- childrenOf($(this)).each(function() {
- initialize($(this));
-
- if($(this).is(".expanded.parent")) {
- $(this).expand();
- }
-
- $(this).show();
- });
-
- return this;
- };
-
- // Add an entire branch to +destination+
- $.fn.appendBranchTo = function(destination) {
- var node = $(this);
- var parent = parentOf(node);
-
- var ancestorNames = $.map(ancestorsOf($(destination)), function(a) { return a.id; });
-
- // Conditions:
- // 1: +node+ should not be inserted in a location in a branch if this would
- // result in +node+ being an ancestor of itself.
- // 2: +node+ should not have a parent OR the destination should not be the
- // same as +node+'s current parent (this last condition prevents +node+
- // from being moved to the same location where it already is).
- // 3: +node+ should not be inserted as a child of +node+ itself.
- if($.inArray(node[0].id, ancestorNames) == -1 && (!parent || (destination.id != parent[0].id)) && destination.id != node[0].id) {
- indent(node, ancestorsOf(node).length * options.indent * -1); // Remove indentation
-
- if(parent) { node.removeClass(options.childPrefix + parent[0].id); }
-
- node.addClass(options.childPrefix + destination.id);
- move(node, destination); // Recursively move nodes to new location
- indent(node, ancestorsOf(node).length * options.indent);
- }
-
- return this;
- };
-
- // Add reverse() function from JS Arrays
- $.fn.reverse = function() {
- return this.pushStack(this.get().reverse(), arguments);
- };
-
- // Toggle an entire branch
- $.fn.toggleBranch = function() {
- if($(this).hasClass("collapsed")) {
- $(this).expand();
- } else {
- $(this).removeClass("expanded").collapse();
- }
-
- return this;
- };
-
- // === Private functions
-
- function ancestorsOf(node) {
- var ancestors = [];
- while(node = parentOf(node)) {
- ancestors[ancestors.length] = node[0];
- }
- return ancestors;
- };
-
- function childrenOf(node) {
- return $("table.treeTable tbody tr." + options.childPrefix + node[0].id);
- };
-
- function indent(node, value) {
- var cell = $(node.children("td")[options.treeColumn]);
- var padding = parseInt(cell.css("padding-left"), 10) + value;
-
- cell.css("padding-left", + padding + "px");
-
- childrenOf(node).each(function() {
- indent($(this), value);
- });
- };
-
- function initialize(node) {
- if(!node.hasClass("initialized")) {
- node.addClass("initialized");
-
- var childNodes = childrenOf(node);
-
- if(node.hasClass("parent")) {
- var cell = $(node.children("td")[options.treeColumn]);
- var padding = parseInt(cell.css("padding-left"), 10) + options.indent;
-
- childNodes.each(function() {
- $($(this).children("td")[options.treeColumn]).css("padding-left", padding + "px");
- });
-
- $(cell[0].firstChild).css({ "margin-left": '-' + options.indent + 'px', "padding-left": options.indent + 'px' });
- }
- }
- };
-
- function move(node, destination) {
- node.insertAfter(destination);
- childrenOf(node).reverse().each(function() { move($(this), node[0]); });
- };
-
- function parentOf(node) {
- var classNames = node[0].className.split(' ');
-
- for(key in classNames) {
- if(classNames[key].match("child-of-")) {
- return $("#" + classNames[key].substring(9));
- }
- }
- };
-})(jQuery);
-
diff --git a/chef-server-slice/public/stylesheets/base.css b/chef-server-slice/public/stylesheets/base.css
deleted file mode 100644
index 0da62086ed..0000000000
--- a/chef-server-slice/public/stylesheets/base.css
+++ /dev/null
@@ -1,336 +0,0 @@
-* {margin:0;padding:0}
-.clear { clear: both; height: 0; }
-
-h1 { margin: 15px 0; font-size: 22px; font-weight: normal; }
-h2 { font-size: 22px; margin: 15px 0; font-weight: normal;}
-h3 { font-size: 18px; margin: 10px 0; font-weight: normal;}
-h4 { font-size: 16px; margin: 10px 0; font-weight: normal;}
-hr {height: 1px; border: 0; }
-p { margin: 15px 0;}
-a img { border: none; }
-
-body {
- font-size: 12px;
- font-family: sans-serif;
-}
-
-#container {
- min-width: 960px;
-}
-
-#header, #wrapper {
- padding: 0 20px;
-}
-
-#header {
- position: relative;
- padding-top: 1px;
-}
-
-#header h1 {
- margin: 0;
- padding: 10px 0;
- font-size: 30px;
-}
-
-#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
- text-decoration: none;
-}
-
-#main {
- width: 80%;
- float: left;
-}
-
-.actions-bar {
- padding: 10px 1px;
-}
-
-.actions-bar .actions {
- float: left;
-}
-
-
-.actions-bar .pagination {
- float: right;
- padding: 1px 0;
-}
-
-#sidebar {
- width: 15%;
- float: right;
-}
-
-#sidebar h3 {
- padding: 10px 15px;
- margin: 0;
- font-size: 13px;
-}
-
-#sidebar .block {
- margin-bottom: 20px;
- padding-bottom: 10px;
-}
-
-#sidebar .block .content {
- padding: 0 15px;
-}
-
-#sidebar ul.navigation li a:link, #sidebar ul.navigation li a:visited {
- display: block;
- padding: 10px 15px;
-}
-
-#sidebar .block .sidebar-block, #sidebar .notice {
- padding:10px;
-}
-
-#wrapper {
- padding-top: 20px;
-}
-
-#main .block {
- margin-bottom: 20px;
- padding-top: 1px;
-}
-
-#main .block .content .inner {
- padding: 0 15px 15px;
-}
-
-#main .main p.first {
- margin-top: 0;
-}
-
-#user-navigation {
- position: absolute;
- top: 0px;
- right: 20px;
-}
-
-#main-navigation {
- width: 100%;
-}
-
-#user-navigation ul, #main-navigation ul, .secondary-navigation ul, #sidebar ul.navigation {
- margin: 0;
- padding: 0;
- list-style-type: none;
-}
-
-#user-navigation ul li, #main-navigation ul li, .secondary-navigation ul li {
- float: left;
-}
-
-#main-navigation ul li {
- margin-right: 5px;
-}
-
-#user-navigation ul li {
- padding: 5px 10px;
-}
-
-#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
-.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
-#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
- text-decoration: none;
-}
-
-#main-navigation ul li a {
- font-size: 15px;
- display: block;
- padding: 8px 15px;
-}
-
-.secondary-navigation {
- font-size: 13px;
- border-bottom-width: 10px;
- border-bottom-style: solid;
-}
-
-.secondary-navigation ul li a {
- display: block;
- padding: 10px 15px;
-}
-
-#footer {
- padding-bottom: 20px;
-}
-
-/* pagination */
-
-.pagination a, .pagination span {
- padding: 2px 5px;
- margin-right: 5px;
- display: block;
- float: left;
- border-style: solid;
- border-width: 1px;
-}
-
-.pagination span.current {
- font-weight: bold;
-}
-
-.pagination a {
- text-decoration: none;
-}
-
-/* tables */
-.table {
- width: 100%;
- border-collapse: collapse;
- margin-bottom: 15px;
-}
-
-.table th {
- padding: 10px;
- font-weight: bold;
- text-align: left;
-}
-
-.table th.first {
- width: 30px;
-}
-
-.table th.last {
- width: 200px;
-}
-
-.table .checkbox {
- margin-left: 10px;
-}
-
-.table td {
- padding: 10px;
-}
-
-.table td.last {
- text-align: right;
-}
-
-/* forms */
-
-input.checkbox {
- margin: 0;
- padding: 0;
-}
-
-.form .group {
- margin-bottom: 15px;
-}
-
-.form div.left {
- width: 20%;
- float: left;
-}
-
-.form div.right {
- width: 75%;
- float: right;
-}
-
-.form .columns .column {
- width: 48%;
-}
-
-.form .columns .left {
- float: left;
-}
-
-.form .columns .right {
- float: right;
-}
-
-.form label.label, .form input.text_field, .form textarea.text_area {
- font-size: 1.2em;
- padding: 1px 0;
- margin: 0;
-}
-
-.form label.right {
- text-align: right;
-}
-
-.form input.checkbox, .form input.radio {
- margin-right: 5px;
-}
-
-.form label.checkbox, .form label.radio {
- line-height: 1.5em;
-}
-
-.form label.label {
- display: block;
- padding-bottom: 2px;
- font-weight: bold;
-}
-
-.form div.fieldWithErrors label.label {
- display: inline;
-}
-
-.form .fieldWithErrors .error {
- color: red;
-}
-
-.form input.text_field, .form textarea.text_area {
- width: 100%;
- border-width: 1px;
- border-style: solid;
-}
-
-/* lists */
-
-ul.list {
- margin: 0;
- padding: 0;
- list-style-type: none;
-}
-
-ul.list li {
- clear: left;
- padding-bottom: 5px;
-}
-
-ul.list li .left {
- float: left;
-}
-
-ul.list li .left .avatar {
- width: 50px;
- height: 50px;
-}
-
-ul.list li .item {
- margin-left: 80px;
-}
-
-ul.list li .item .avatar {
- float: left;
- margin: 0 5px 5px 0;
- width: 30px;
- height: 30px;
-}
-
-/* box */
-
-#box {
- width: 500px;
- margin: 50px auto;
-}
-
-#box .block {
- margin-bottom: 20px;
-}
-
-#box .block h2 {
- padding: 10px 15px;
- margin: 0;
-}
-
-#box .block .content {
- padding: 10px 20px;
-}
-
-
diff --git a/chef-server-slice/public/stylesheets/chef.css b/chef-server-slice/public/stylesheets/chef.css
deleted file mode 100644
index 52a06d056c..0000000000
--- a/chef-server-slice/public/stylesheets/chef.css
+++ /dev/null
@@ -1,157 +0,0 @@
-.ruby .normal {}
-.ruby .comment { color: #005; font-style: italic; }
-.ruby .keyword { color: #A00; font-weight: bold; }
-.ruby .method { color: #077; }
-.ruby .class { color: #074; }
-.ruby .module { color: #050; }
-.ruby .punct { color: #447; font-weight: bold; }
-.ruby .symbol { color: #099; }
-.ruby .string { color: #944; background: #FFE; }
-.ruby .char { color: #F07; }
-.ruby .ident { color: #004; }
-.ruby .constant { color: #07F; }
-.ruby .regex { color: #B66; background: #FEF; }
-.ruby .number { color: #F99; }
-.ruby .attribute { color: #7BB; }
-.ruby .global { color: #7FB; }
-.ruby .expr { color: #227; }
-.ruby .escape { color: #277; }
-
-.files {
- padding-left: 20px;
-}
-
-.code {
- overflow: auto;
- font-size: 0.8em;
-}
-
-.search td {
- /*overflow: auto;*/
- font-size: 0.8em;
-}
-
-dl dt { font-weight: bold; }
-.content td dl { margin: 0; padding: 0; }
-.content td dt {
- background: transparent url(/images/toggle-collapse.gif) 0 3px no-repeat;
- clear: left; color: #333; cursor: pointer; line-height: 1em;
- margin-left: -12px; padding-left: 14px;
-}
-.content td dd { margin: 0;
- padding: 0 0 0 1em;
-}
-.content td dt.collapsed {
- background-image: url(/images/toggle-expand.gif);
-}
-.content td dt.inline { background-image: none; cursor: default;
- float: left; margin-left: 0; padding-left: 2px; padding-right: .5em;
- padding-top: 2px;
-}
-
-div.sortable {
- height: 200px;
- width: 225px;
- margin-right: 10px;
- border: 1px solid black;
- overflow: scroll;
- background: #777777;
-}
-
-div.sortable.run-list {
- height: 430px;
- width: 225px;
- margin-right: 10px;
- border: 1px solid black;
- overflow: scroll;
- background: #777777;
-}
-
-div.clear {
- clear: left;
-}
-
-table.form th {
- /* vertical-align: top; */
- font-weight: bold;
- text-align: right;
- padding-right: 10px;
-}
-
-div.help {
- padding: 10px;
- text-align: left;
- vertical-align: top;
-}
-
-table.form td {
- text-align: left;
- /* vertical-align: top; */
-}
-
-table.sortable td {
- vertical-align: top;
-}
-
-table.sortable ul {
- background: #ff00ff;
- margin: 5px;
- padding: 5px;
-}
-
-td.table-key {
- font-weight: bold;
-}
-
-div.json-attr {
- overflow: auto;
- max-width: 400px;
-}
-
-td.position {
- font-weight: bold;
-}
-
-div#tree {
- float: left;
-}
-
-div#jform {
- float: left;
- margin-left: 50px;
-}
-
-div.editor {
- border: 1px solid black;
-}
-
-#node_available_roles, #node_available_recipes, #for_node, #for_role, #available_recipes { list-style-type: none; margin: 0; padding: 0; float: left; margin-right: 10px; background: #eee; padding: 5px; width: 200px;}
-
-#node_available_roles li, #node_available_recipes li, #for_node li, #for_role li, #available_recipes li { margin: 0 5px 5px 5px; padding: 5px; width: 175px; }
-
-#sidebar_block {
- display: none;
-}
-
-#sidebar_block_notice {
- display: none;
-}
-
-div.tooltip {
- background-color: #000;
- outline: 1px solid #669;
- border: 2px solid #fff;
- padding: 10px 15px;
- /* width: 200px; */
- display: none;
- color: #fff;
- text-align: left;
- font-size: 12px;
- outline-radius: 4px;
- -moz-outline-radius: 4px;
- -webkit-outline-radius: 4px;
-}
-
-table.tooltip {
- width: 190px;
-}
diff --git a/chef-server-slice/public/stylesheets/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png b/chef-server-slice/public/stylesheets/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png
deleted file mode 100755
index d5359734ad..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/images/ui-bg_diagonals-thick_15_444444_40x40.png b/chef-server-slice/public/stylesheets/images/ui-bg_diagonals-thick_15_444444_40x40.png
deleted file mode 100755
index 88e46a6d36..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-bg_diagonals-thick_15_444444_40x40.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/images/ui-bg_glass_100_f0f0f0_1x400.png b/chef-server-slice/public/stylesheets/images/ui-bg_glass_100_f0f0f0_1x400.png
deleted file mode 100755
index 33896e710c..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-bg_glass_100_f0f0f0_1x400.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/images/ui-bg_glass_50_99c2ff_1x400.png b/chef-server-slice/public/stylesheets/images/ui-bg_glass_50_99c2ff_1x400.png
deleted file mode 100755
index 8249158b01..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-bg_glass_50_99c2ff_1x400.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/images/ui-bg_glass_55_fbf5d0_1x400.png b/chef-server-slice/public/stylesheets/images/ui-bg_glass_55_fbf5d0_1x400.png
deleted file mode 100755
index f25dd91065..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-bg_glass_55_fbf5d0_1x400.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/images/ui-bg_glass_80_e6e6e6_1x400.png b/chef-server-slice/public/stylesheets/images/ui-bg_glass_80_e6e6e6_1x400.png
deleted file mode 100755
index abaa23f001..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-bg_glass_80_e6e6e6_1x400.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/images/ui-bg_glass_95_fef1ec_1x400.png b/chef-server-slice/public/stylesheets/images/ui-bg_glass_95_fef1ec_1x400.png
deleted file mode 100755
index 4443fdc1a1..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-bg_glass_95_fef1ec_1x400.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/images/ui-bg_highlight-hard_100_f9f9f9_1x100.png b/chef-server-slice/public/stylesheets/images/ui-bg_highlight-hard_100_f9f9f9_1x100.png
deleted file mode 100755
index 2cb80364bb..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-bg_highlight-hard_100_f9f9f9_1x100.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/images/ui-bg_highlight-soft_100_e7eef3_1x100.png b/chef-server-slice/public/stylesheets/images/ui-bg_highlight-soft_100_e7eef3_1x100.png
deleted file mode 100755
index d39c182270..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-bg_highlight-soft_100_e7eef3_1x100.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/images/ui-icons_222222_256x240.png b/chef-server-slice/public/stylesheets/images/ui-icons_222222_256x240.png
deleted file mode 100755
index 67560da9be..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-icons_222222_256x240.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/images/ui-icons_2694e8_256x240.png b/chef-server-slice/public/stylesheets/images/ui-icons_2694e8_256x240.png
deleted file mode 100755
index dbd78b68ad..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-icons_2694e8_256x240.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/images/ui-icons_2e83ff_256x240.png b/chef-server-slice/public/stylesheets/images/ui-icons_2e83ff_256x240.png
deleted file mode 100755
index b425c446d2..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-icons_2e83ff_256x240.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/images/ui-icons_72a7cf_256x240.png b/chef-server-slice/public/stylesheets/images/ui-icons_72a7cf_256x240.png
deleted file mode 100755
index 58aed4074e..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-icons_72a7cf_256x240.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/images/ui-icons_888888_256x240.png b/chef-server-slice/public/stylesheets/images/ui-icons_888888_256x240.png
deleted file mode 100755
index 2e5180e473..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-icons_888888_256x240.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/images/ui-icons_cd0a0a_256x240.png b/chef-server-slice/public/stylesheets/images/ui-icons_cd0a0a_256x240.png
deleted file mode 100755
index 2db88b796a..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-icons_cd0a0a_256x240.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/images/ui-icons_ffffff_256x240.png b/chef-server-slice/public/stylesheets/images/ui-icons_ffffff_256x240.png
deleted file mode 100755
index 746e6fa257..0000000000
--- a/chef-server-slice/public/stylesheets/images/ui-icons_ffffff_256x240.png
+++ /dev/null
Binary files differ
diff --git a/chef-server-slice/public/stylesheets/jquery-ui-1.7.1.custom.css b/chef-server-slice/public/stylesheets/jquery-ui-1.7.1.custom.css
deleted file mode 100755
index 0e93ed5dd1..0000000000
--- a/chef-server-slice/public/stylesheets/jquery-ui-1.7.1.custom.css
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
-* jQuery UI CSS Framework
-* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
-* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
-*/
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-.ui-helper-clearfix { display: inline-block; }
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix { height:1%; }
-.ui-helper-clearfix { display:block; }
-/* end clearfix */
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-/*
-* jQuery UI CSS Framework
-* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
-* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=3px&bgColorHeader=e7eef3&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=b2c7d7&fcHeader=222222&iconColorHeader=72a7cf&bgColorContent=f9f9f9&bgTextureContent=04_highlight_hard.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=362b36&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=80&borderColorDefault=cccccc&fcDefault=444444&iconColorDefault=888888&bgColorHover=f0f0f0&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=b2c7d7&fcHover=0b5b98&iconColorHover=2694e8&bgColorActive=99c2ff&bgTextureActive=02_glass.png&bgImgOpacityActive=50&borderColorActive=2694e8&fcActive=000000&iconColorActive=ffffff&bgColorHighlight=fbf5d0&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=f9dd34&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=444444&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=15&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=07_diagonals_small.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=0px&offsetTopShadow=4px&offsetLeftShadow=4px&cornerRadiusShadow=4px
-*/
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; }
-.ui-widget-content { border: 1px solid #dddddd; background: #f9f9f9 url(images/ui-bg_highlight-hard_100_f9f9f9_1x100.png) 50% top repeat-x; color: #362b36; }
-.ui-widget-content a { color: #362b36; }
-.ui-widget-header { border: 1px solid #b2c7d7; background: #e7eef3 url(images/ui-bg_highlight-soft_100_e7eef3_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
-.ui-widget-header a { color: #222222; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #cccccc; background: #e6e6e6 url(images/ui-bg_glass_80_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #444444; outline: none; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #444444; text-decoration: none; outline: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #b2c7d7; background: #f0f0f0 url(images/ui-bg_glass_100_f0f0f0_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #0b5b98; outline: none; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #0b5b98; text-decoration: none; outline: none; }
-.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #2694e8; background: #99c2ff url(images/ui-bg_glass_50_99c2ff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #000000; outline: none; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #000000; outline: none; text-decoration: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #f9dd34; background: #fbf5d0 url(images/ui-bg_glass_55_fbf5d0_1x400.png) 50% 50% repeat-x; color: #363636; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
-.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
-.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_72a7cf_256x240.png); }
-.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_2694e8_256x240.png); }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-tl { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; }
-.ui-corner-tr { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; }
-.ui-corner-bl { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; }
-.ui-corner-br { -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; }
-.ui-corner-top { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; }
-.ui-corner-bottom { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; }
-.ui-corner-right { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; }
-.ui-corner-left { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; }
-.ui-corner-all { -moz-border-radius: 3px; -webkit-border-radius: 3px; }
-
-/* Overlays */
-.ui-widget-overlay { background: #444444 url(images/ui-bg_diagonals-thick_15_444444_40x40.png) 50% 50% repeat; opacity: .30;filter:Alpha(Opacity=30); }
-.ui-widget-shadow { margin: 4px 0 0 4px; padding: 0px; background: #aaaaaa url(images/ui-bg_diagonals-small_0_aaaaaa_40x40.png) 50% 50% repeat; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 4px; -webkit-border-radius: 4px; }/* Accordion
-----------------------------------*/
-.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
-.ui-accordion .ui-accordion-li-fix { display: inline; }
-.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
-.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
-.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
-.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
-.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
-----------------------------------*/
-.ui-datepicker { width: 17em; padding: .2em .2em 0; }
-.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
-.ui-datepicker .ui-datepicker-prev { left:2px; }
-.ui-datepicker .ui-datepicker-next { right:2px; }
-.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
-.ui-datepicker .ui-datepicker-next-hover { right:1px; }
-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
-.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
-.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
-.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year { width: 49%;}
-.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
-.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
-.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
-.ui-datepicker td { border: 0; padding: 1px; }
-.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
-.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi { width:auto; }
-.ui-datepicker-multi .ui-datepicker-group { float:left; }
-.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
-.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
-.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
-.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
-.ui-datepicker-row-break { clear:both; width:100%; }
-
-/* RTL support */
-.ui-datepicker-rtl { direction: rtl; }
-.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-
-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
-.ui-datepicker-cover {
- display: none; /*sorry for IE5*/
- display/**/: block; /*sorry for IE5*/
- position: absolute; /*must have*/
- z-index: -1; /*must have*/
- filter: mask(); /*must have*/
- top: -4px; /*must have*/
- left: -4px; /*must have*/
- width: 200px; /*must have*/
- height: 200px; /*must have*/
-}/* Dialog
-----------------------------------*/
-.ui-dialog { position: relative; padding: .2em; width: 300px; }
-.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; }
-.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
-.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
-.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
-.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
-.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
-.ui-draggable .ui-dialog-titlebar { cursor: move; }
-/* Progressbar
-----------------------------------*/
-.ui-progressbar { height:2em; text-align: left; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
-----------------------------------*/
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
-----------------------------------*/
-.ui-slider { position: relative; text-align: left; }
-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
-
-.ui-slider-horizontal { height: .8em; }
-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
-
-.ui-slider-vertical { width: .8em; height: 100px; }
-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
-----------------------------------*/
-.ui-tabs { padding: .2em; zoom: 1; }
-.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
-.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
-.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
-.ui-tabs .ui-tabs-hide { display: none !important; }
diff --git a/chef-server-slice/public/stylesheets/jquery.treeTable.css b/chef-server-slice/public/stylesheets/jquery.treeTable.css
deleted file mode 100644
index 1f37f1ca15..0000000000
--- a/chef-server-slice/public/stylesheets/jquery.treeTable.css
+++ /dev/null
@@ -1,43 +0,0 @@
-/* jQuery TreeTable Core 2.0 stylesheet
- *
- * This file contains styles that are used to display the tree table. Each tree
- * table is assigned the +treeTable+ class.
- * ========================================================================= */
-
-/* jquery.treeTable.collapsible
- * ------------------------------------------------------------------------- */
-.treeTable tr td .expander {
- background-position: left center;
- background-repeat: no-repeat;
- cursor: pointer;
- padding: 0;
- zoom: 1; /* IE7 Hack */
-}
-
-.treeTable tr.collapsed td .expander {
- background-image: url(../images/toggle-expand-dark.png);
-}
-
-.treeTable tr.expanded td .expander {
- background-image: url(../images/toggle-collapse-dark.png);
-}
-
-/* jquery.treeTable.sortable
- * ------------------------------------------------------------------------- */
-.treeTable tr.selected, .treeTable tr.accept {
- background-color: #3875d7;
- color: #fff;
-}
-
-.treeTable tr.collapsed.selected td .expander, .treeTable tr.collapsed.accept td .expander {
- background-image: url(../images/toggle-expand-light.png);
-}
-
-.treeTable tr.expanded.selected td .expander, .treeTable tr.expanded.accept td .expander {
- background-image: url(../images/toggle-collapse-light.png);
-}
-
-.treeTable .ui-draggable-dragging {
- color: #000;
- z-index: 1;
-} \ No newline at end of file
diff --git a/chef-server-slice/public/stylesheets/themes/bec-green/style.css b/chef-server-slice/public/stylesheets/themes/bec-green/style.css
deleted file mode 100644
index 225b6d4e35..0000000000
--- a/chef-server-slice/public/stylesheets/themes/bec-green/style.css
+++ /dev/null
@@ -1,290 +0,0 @@
-a:link, a:visited, a:hover, a:active { color: #33f; }
-h1, h2, h3 {color:#444}
-
-body {
- color: #222;
- background: #e5e5e5;
- font-family: "Bitstream Vera Sans", verdana, sans-serif;
-}
-
-hr {
- background: #f0f0ee;
-}
-
-p {
- font-size: 14px;
- line-height: 20px;
-}
-
-input.checkbox {
- vertical-align:middle;
-}
-
-#header h1 {
- font-size: 28px;
- padding: 5px 0;
- margin: 5px 0;
-}
-
-.hightlight {
- background-color: #ffc;
-}
-.small {
- font-size: 11px;
-}
-.gray {
- color: #999;
-}
-#header {
- background: #48625B;
-}
-
-#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
- color: #FFF;
-}
-
-#main {
- background: #e5e5e5;
- width: 69%;
-}
-
-#main .block {
- -moz-border-radius-topleft: 4px;
- -moz-border-radius-topright: 4px;
- padding: 0;
- margin-bottom:20px;
- padding-bottom: 20px;
- background: #fff;
-}
-
-#main .block h2.title {
- margin: 0 0 20px 0;
- background-color: #E9FAE6;
- padding: 5px 5px 5px 15px;
- font-size:18px;
-}
-
-.main_container {
- padding:10px;
-}
-
-/* #sidebar .block { background: #FFF; padding-bottom:0px; } */
-
-#sidebar .notice {
- background-color: #ffc;
- padding: 0 10px;
- border-bottom:1px solid #ddd;
- border-right:1px solid #ddd;
- border-top:1px solid #fff;
- border-left:1px solid #fff;
-}
-#sidebar .notice h2 {
- font-size:16px;
- margin: 5px 0;
- border-bottom:1px solid #aaa;
-}
-#sidebar .notice p {
- font-size:12px;
-}
-
-#sidebar .block {
- padding-bottom: 0;
-}
-
-#sidebar .block .content {
- padding: 0 10px;
-}
-
-
-#sidebar h3 {
- background: #c7d8d8;
- border-bottom:1px solid #999;
- padding: 5px 10px;
-}
-
-#sidebar ul li a:link, #sidebar ul li a:visited {
- font-size:14px;
-}
-
-#sidebar ul li a:hover, #sidebar ul li a:active {
- background: #E9FAE6;
- color: #444;
- font-size:14px;
- text-decoration:underline;
-}
-#sidebar ul.navigation li.last a {
- border-bottom: none;
-}
-
-#sidebar ul.navigation li a:link,#sidebar ul.navigation li a:visited {
- padding: 5px 10px;
- color:#444;
- text-decoration: none;
-}
-#sidebar ul.navigation li a:hover {
- text-decoration:underline;
-}
-#sidebar .block .sidebar-block h4 {
- border-bottom: 1px solid #bbb;
-}
-#main-navigation ul li {
- background: #30423E;
-}
-
-#main-navigation ul li:hover {
- background: #23302D;
-}
-
-#main-navigation ul li.active {
- background: #e5e5e5;
-}
-
-#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
-.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
-#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
- text-decoration: none;
- color: #FFF;
-}
-
-#main-navigation ul li a {
- font-size: 14px;
- padding: 4px 10px;
-}
-
-#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
- color: #333;
-}
-#user-navigation ul li a:hover {
- text-decoration: underline;
-}
-.secondary-navigation {
- background: #48625B;
- border-bottom-color: #30423e;
- border-bottom: 5px solid #30423e;
-}
-
-.secondary-navigation ul li.active {
- background-color: #30423e;
-}
-
-.secondary-navigation ul li:hover {
- background-color: #23302d;
-}
-
-/* pagination */
-
-.pagination span.current {
- background: #30423e;
- color: #FFF;
- border: 1px solid #30423e;
- -moz-border-radius:5px;
-}
-
-.pagination a {
- color: #364B69;
- border: 1px solid #ddd;
- -moz-border-radius:5px;
-}
-
-.pagination a:hover {
- color: #444;
- background: #E9FAE6;
-}
-
-/* tables */
-
-.table th {
- background: #48625B;
- color: #FFF;
- font-weight:normal;
- padding:3px;
-}
-
-.table th a.toggle {
- display: block;
- width: 12px;
- height: 12px;
- background: transparent url('images/tick.png') center no-repeat;
- text-indent: -9999px;
- -moz-outline: none;
-}
-
-.table th.first {
- width: 30px;
- text-align: center;
-}
-
-.table td {
- border-bottom: 1px solid #F0F0EE;
-}
-
-/* forms */
-
-.form input.text, .form textarea.textarea {
- border: 1px solid #ddd;
- padding: 5px;
- width: 95%;
-}
-
-.form .navform {
- padding:10px;
- background-color: #E9FAE6;
- font-size:14px;
- border-bottom:1px solid #ddd;
- border-right:1px solid #ddd;
- border-top:1px solid #eee;
- border-left:1px solid #eee;
-}
-.form .navform input {
- font-size:14px;
-}
-
-/* flash-messages */
-.flash .message {
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- text-align:center;
- margin:0 auto 5px;
- width:80%;
-}
-.flash .message p {
- margin:8px;
-}
-.flash .error {
- border: 1px solid #fbb;
- background-color: #fdd;
-}
-.flash .warning {
- border: 1px solid #fffaaa;
- background-color: #ffffcc;
-}
-.flash .notice {
- border: 1px solid #ddf;
- background-color: #eef;
-}
-
-/* lists */
-
-ul.list li {
- border-bottom-color: #F0F0EE;
-}
-
-ul.list li .item .avatar {
- border-color: #F0F0EE;
- margin: 3px 10px 0 0;
-}
-
-ul.list li .left {
- padding: 5px 5px;
-}
-
-/* box */
-
-#box .block {
- background: #FFF;
-}
-
-#box .block h2 {
- background: #48625B;
- color: #FFF;
-}
diff --git a/chef-server-slice/public/stylesheets/themes/bec/style.css b/chef-server-slice/public/stylesheets/themes/bec/style.css
deleted file mode 100644
index c94474866a..0000000000
--- a/chef-server-slice/public/stylesheets/themes/bec/style.css
+++ /dev/null
@@ -1,301 +0,0 @@
-a:link, a:visited, a:hover, a:active { color: #33f; }
-h1, h2, h3 {color:#444}
-
-body {
- color: #333;
- background: #e5e5e5;
- font-family: Verdana, Arial, "Bitstream Vera Sans", sans-serif;
-}
-
-hr {
- background: #f0f0ee;
-}
-
-p {
- font-size: 12px;
- line-height: 20px;
-}
-
-input.checkbox {
- vertical-align:middle;
-}
-
-#header h1 {
- font-size: 28px;
- padding: 5px 0;
- margin: 5px 0;
-}
-
-.hightlight {
- background-color: #ffc;
-}
-.small {
- font-size: 11px;
-}
-.gray {
- color: #999;
-}
-#header {
- background: #006666;
-}
-
-#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
- color: #FFF;
-}
-
-#main {
- background: #e5e5e5;
- width: 73%;
-}
-
-#main .block {
- -moz-border-radius-topleft: 4px;
- -moz-border-radius-topright: 4px;
- padding: 0;
- margin-bottom:20px;
- padding-bottom: 20px;
- background: #fff;
-}
-
-#main .block h2.title {
- margin: 0 0 20px 0;
- background-color: #E6FAFA;
- padding: 5px 5px 5px 15px;
- font-size:18px;
-}
-
-.main_container {
- padding:10px;
-}
-
-#footer .block p {
- color:#aaa;
- font-size:11px;
-}
-
-/* #sidebar .block { background: #FFF; padding-bottom:0px; } */
-
-#sidebar .notice {
- background-color: #ffc;
- padding: 0 10px;
- border-bottom:1px solid #ddd;
- border-right:1px solid #ddd;
- border-top:1px solid #fff;
- border-left:1px solid #fff;
-}
-#sidebar .notice h2 {
- font-size:16px;
- margin: 5px 0;
- border-bottom:1px solid #aaa;
-}
-#sidebar .notice p {
- font-size:12px;
-}
-
-#sidebar .block {
- padding-bottom: 0;
-}
-
-#sidebar .block .content {
- padding: 0 10px;
-}
-
-
-#sidebar h3 {
- background: #c7d8d8;
- border-bottom:1px solid #999;
- padding: 5px 10px;
-}
-
-#sidebar ul li a:link, #sidebar ul li a:visited {
- font-size:12px;
-}
-
-#sidebar ul li a:hover, #sidebar ul li a:active {
- background: #e1efef;
- color: #444;
- font-size:12px;
- text-decoration:underline;
-}
-#sidebar ul.navigation li.last a {
- border-bottom: none;
-}
-
-#sidebar ul.navigation li a:link,#sidebar ul.navigation li a:visited {
- padding: 5px 10px;
- color:#444;
- text-decoration: none;
-}
-#sidebar ul.navigation li a:hover {
- text-decoration:underline;
-}
-#sidebar .block .sidebar-block h4 {
- border-bottom: 1px solid #bbb;
-}
-#main-navigation ul li {
- background: #008c8c;
-}
-
-#main-navigation ul li:hover {
- background: #00b2b2;
-}
-
-#main-navigation ul li.active {
- background: #f0f0ee;
-}
-
-#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
-.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
-#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
- text-decoration: none;
- color: #FFF;
-}
-
-#main-navigation ul li a {
- font-size: 12px;
- padding: 4px 10px;
-}
-
-#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
- color: #364b69;
-}
-#user-navigation ul li a:hover {
- text-decoration: underline;
-}
-.secondary-navigation {
- background: #006666;
- border-bottom-color: #008c8c;
- border-bottom: 5px solid #008c8c;
-}
-
-.secondary-navigation ul li.active {
- background-color: #008c8c;
-}
-
-.secondary-navigation ul li:hover {
- background-color: #00b2b2;
-}
-
-/* pagination */
-
-.pagination span.current {
- background: #008c8c;
- color: #FFF;
- border: 1px solid #008c8c;
- -moz-border-radius:5px;
-}
-
-.pagination a {
- color: #364B69;
- border: 1px solid #ddd;
- -moz-border-radius:5px;
- font-size:11px;
-}
-
-.pagination a:hover {
- color: #444;
- background: #E6FAFA;
-}
-
-/* tables */
-
-.table th {
- background: #006666;
- color: #FFF;
- font-weight:normal;
- padding:3px;
-}
-
-.table th a.toggle {
- display: block;
- width: 12px;
- height: 12px;
- background: transparent url('images/tick.png') center no-repeat;
- text-indent: -9999px;
- -moz-outline: none;
-}
-
-.table th.first {
- width: 30px;
- text-align: center;
-}
-
-.table td {
- border-bottom: 1px solid #F0F0EE;
-}
-
-/* forms */
-
-.form input.text, .form textarea.textarea {
- border: 1px solid #ddd;
- padding: 5px;
- width:99%;
-}
-
-.form .navform {
- padding:10px;
- background-color: #f1f8f8;
- font-size:14px;
- border-bottom:1px solid #ddd;
- border-right:1px solid #ddd;
- border-top:1px solid #eee;
- border-left:1px solid #eee;
-}
-.form .navform input {
- font-size:14px;
-}
-
-.description {
- color:#aaa;
- font-family:Georgia, serif;
-}
-
-/* flash-messages */
-.flash .message {
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- text-align:center;
- margin:0 auto 5px;
- width:80%;
-}
-.flash .message p {
- margin:8px;
-}
-.flash .error {
- border: 1px solid #fbb;
- background-color: #fdd;
-}
-.flash .warning {
- border: 1px solid #fffaaa;
- background-color: #ffffcc;
-}
-.flash .notice {
- border: 1px solid #ddf;
- background-color: #eef;
-}
-
-/* lists */
-
-ul.list li {
- border-bottom-color: #F0F0EE;
-}
-
-ul.list li .item .avatar {
- border-color: #F0F0EE;
- margin: 3px 10px 0 0;
-}
-
-ul.list li .left {
- padding: 5px 5px;
-}
-
-/* box */
-
-#box .block {
- background: #FFF;
-}
-
-#box .block h2 {
- background: #006666;
- color: #FFF;
-}
diff --git a/chef-server-slice/public/stylesheets/themes/blue/style.css b/chef-server-slice/public/stylesheets/themes/blue/style.css
deleted file mode 100644
index cce8f4bdf0..0000000000
--- a/chef-server-slice/public/stylesheets/themes/blue/style.css
+++ /dev/null
@@ -1,280 +0,0 @@
-.small { font-size:12px; }
-.gray { color:#999999; }
-.hightlight { background-color:#FFFFCC; }
-
-a:link, a:visited, a:hover, a:active, h1, h2, h3 { color: #2F427A; }
-a { -moz-outline: none; }
-
-body {
- color: #222;
- background: #f0f0ee;
- font-family: helvetica, arial, sans-serif;
- font-size: 14px;
-}
-
-hr {
- background: #f0f0ee;
- color: #f0f0ee;
-}
-
-#header {
- background: #2F427A;
-}
-
-#header h1 {
- padding: 20px 0;
-}
-
-#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
- color: #FFF;
-}
-
-#user-navigation {
- top: auto;
- bottom: 5px;
- right: 25px;
-}
-
-#main .block .content {
- background: #FFF;
- padding-top: 1px;
-}
-
-#main .block .content h2 {
- margin-left: 15px;
-}
-
-#sidebar .block {
- background: #FFF;
-}
-
-#sidebar .notice {
- background: #FFFFCC;
-}
-
-#sidebar h3 {
- background: #2F427A;
- color: #FFF;
- border-bottom: 10px solid #262626;
- font-size: 15px;
-}
-
-#main-navigation ul li {
- padding-left: 15px;
-}
-
-#main-navigation ul li a {
- padding: 8px 0;
-}
-
-#main-navigation ul li.active {
- padding: 0;
- margin-left: 15px;
-}
-
-#main-navigation ul li.active {
- margin-left: 15px;
-}
-
-#main-navigation ul li.active a {
- padding: 8px 15px;
-}
-
-#sidebar ul li a:link, #sidebar ul li a:visited {
- background: #FFF;
- border-bottom: 1px solid #F0F0EE;
- text-decoration: none;
-}
-
-#sidebar ul li a:hover, #sidebar ul li a:active {
- background: #316291;
- color: #FFF;
-}
-
-#main-navigation {
- background: #262626;
-}
-
-#main-navigation ul li {
- background: #262626;
- margin-right: 0;
-}
-
-#main-navigation ul li.active {
- background: #f0f0ee;
-}
-
-#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
-.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
-#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
- text-decoration: none;
- color: #FFF;
-}
-
-.secondary-navigation li a:hover {
- background: #5C637A;
-}
-
-#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
- color: #262626;
-}
-
-.secondary-navigation {
- background: #2F427A;
- border-bottom-color: #262626;
- font-size: 15px;
-}
-
-.secondary-navigation ul li.active, .secondary-navigation ul li.active a:hover {
- background-color: #262626;
-}
-
-#footer .block {
- color: #FFF;
- background: #262626;
-}
-
-#footer .block p {
- margin: 0;
- padding: 10px;
-}
-
-/* pagination */
-
-.pagination span, .pagination a {
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- padding-top: 4px;
-}
-
-.pagination span.current {
- background: #262626;
- color: #FFF;
- border-color: #262626;
-}
-
-.pagination a {
- color: #262626;
- border-color: #262626;
-}
-
-.pagination a:hover {
- color: #FFF;
- background: #262626;
-}
-
-/* tables */
-
-.table th {
- background: #262626;
- color: #FFF;
-}
-
-.table td {
- border-bottom:1px solid #F0F0EE;
-}
-
-/* forms */
-
-.form input.text_field, .form textarea.text_area {
- width: 100%;
- border: 1px solid #262626;
-}
-
-.form input.button {
- background: #EEE;
- color: #262626;
- padding: 2px 5px;
- border: 1px solid #262626;
- cursor: pointer;
-}
-
-.form .description {
- font-style: italic;
- color: #8C8C8C;
- font-size: .9em;
-}
-
-/* flash-messages */
-.flash .message {
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- text-align:center;
- margin: 0 auto 15px;
-
-}
-
-.flash .message p {
- margin:8px;
-}
-.flash .error {
- border: 1px solid #fbb;
- background-color: #fdd;
-}
-.flash .warning {
- border: 1px solid #fffaaa;
- background-color: #ffffcc;
-}
-.flash .notice {
- border: 1px solid #1FDF00;
- background-color: #BBFFB6;
-}
-
-/* lists */
-
-ul.list li {
- border-bottom-color: #F0F0EE;
- border-bottom-width: 1px;
- border-bottom-style: solid;
-}
-
-ul.list li .item .avatar {
- border-color: #F0F0EE;
- border-width: 1px;
- border-style: solid;
- padding: 2px;
-}
-
-/* box */
-
-#box .block {
- background: #FFF;
-}
-
-#box .block h2 {
- background: #2F427A;
- color: #FFF;
-}
-
-
-/* rounded borders */
-
-#main, #main-navigation, #main-navigation li, .secondary-navigation, #main .block, #sidebar .block, #sidebar h3, ul.list li,
-#footer .block, .form input.button, #box .block, #box .block h2 {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
- -moz-border-radius-topright: 4px;
- -webkit-border-top-right-radius: 4px;
-}
-
-.secondary-navigation li.first a, .secondary-navigation ul li.first, .table th.first, .table th.first {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
-}
-
-.table th.last {
- -moz-border-radius-topright: 4px;
- -webkit-border-top-right-radius: 4px;
-}
-
-.secondary-navigation ul li.first {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
-}
-
-#sidebar, #sidebar .block, #main .block, #sidebar ul.navigation, ul.list li, #footer .block, .form input.button, #box .block {
- -moz-border-radius-bottomleft: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -moz-border-radius-bottomright: 4px;
- -webkit-border-bottom-right-radius: 4px;
-} \ No newline at end of file
diff --git a/chef-server-slice/public/stylesheets/themes/default/style.css b/chef-server-slice/public/stylesheets/themes/default/style.css
deleted file mode 100644
index e7a5ee1271..0000000000
--- a/chef-server-slice/public/stylesheets/themes/default/style.css
+++ /dev/null
@@ -1,267 +0,0 @@
-.small { font-size:11px; }
-.gray { color:#999999; }
-.hightlight { background-color:#FFFFCC; }
-
-a:link, a:visited, a:hover, a:active, h1, h2, h3 { color: #7A1818; }
-a { -moz-outline: none; }
-
-body {
- color: #222;
- background: #f0f0ee;
- font-family: helvetica, arial, sans-serif;
-}
-
-hr {
- background: #f0f0ee;
- color: #f0f0ee;
-}
-
-#header {
- background: #7A1818;
-}
-
-#header h1 {
- padding: 20px 0;
-}
-
-#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
- color: #FFF;
-}
-
-#user-navigation {
- top: auto;
- bottom: 5px;
- right: 25px;
-}
-
-#main .block .content {
- background: #FFF;
- padding-top: 1px;
-}
-
-#main .block .content h2 {
- margin-left: 15px;
-}
-
-#sidebar .block {
- background: #FFF;
-}
-
-#sidebar h3 {
- background: #7A1818;
- color: #FFF;
- border-bottom: 10px solid #262626;
-}
-
-#main-navigation ul li {
- padding-left: 15px;
-}
-
-#main-navigation ul li a {
- padding: 8px 0;
-}
-
-#main-navigation ul li.active {
- padding: 0;
- margin-left: 15px;
-}
-
-#main-navigation ul li.active {
- margin-left: 15px;
-}
-
-#main-navigation ul li.active a {
- padding: 8px 15px;
-}
-
-#sidebar ul li a:link, #sidebar ul li a:visited {
- background: #FFF;
- border-bottom: 1px solid #F0F0EE;
- text-decoration: none;
-}
-
-#sidebar ul li a:hover, #sidebar ul li a:active {
- background: #470E0E;
- color: #FFF;
-}
-
-#main-navigation {
- background: #262626;
-}
-
-#main-navigation ul li {
- background: #262626;
- margin-right: 0;
-}
-
-#main-navigation ul li.active {
- background: #f0f0ee;
-}
-
-#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
-.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
-#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
- text-decoration: none;
- color: #FFF;
-}
-
-.secondary-navigation li a:hover {
- background: #470E0E;
-}
-
-#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
- color: #262626;
-}
-
-.secondary-navigation {
- background: #7A1818;
- border-bottom-color: #262626;
-}
-
-.secondary-navigation ul li.active, .secondary-navigation ul li.active a:hover {
- background-color: #262626;
-}
-
-#footer .block {
- color: #FFF;
- background: #262626;
-}
-
-#footer .block p {
- margin: 0;
- padding: 10px;
-}
-
-/* pagination */
-
-.pagination span.current {
- background: #262626;
- color: #FFF;
- border-color: #262626;
-}
-
-.pagination a {
- color: #262626;
- border-color: #262626;
-}
-
-.pagination a:hover {
- color: #FFF;
- background: #262626;
-}
-
-/* tables */
-
-.table th {
- background: #262626;
- color: #FFF;
-}
-
-.table td {
- border-bottom:1px solid #F0F0EE;
-}
-
-/* forms */
-
-.form input.text_field, .form textarea.text_area {
- width: 100%;
- border: 1px solid #262626;
-}
-
-.form input.button {
- background: #EEE;
- color: #262626;
- padding: 2px 5px;
- border: 1px solid #262626;
- cursor: pointer;
-}
-
-.form .description {
- font-style: italic;
- color: #8C8C8C;
- font-size: .9em;
-}
-
-/* flash-messages */
-.flash .message {
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- text-align:center;
- margin: 0 auto 15px;
-
-}
-
-.flash .message p {
- margin:8px;
-}
-.flash .error {
- border: 1px solid #fbb;
- background-color: #fdd;
-}
-.flash .warning {
- border: 1px solid #fffaaa;
- background-color: #ffffcc;
-}
-.flash .notice {
- border: 1px solid #1FDF00;
- background-color: #BBFFB6;
-}
-
-/* lists */
-
-ul.list li {
- border-bottom-color: #F0F0EE;
- border-bottom-width: 1px;
- border-bottom-style: solid;
-}
-
-ul.list li .item .avatar {
- border-color: #F0F0EE;
- border-width: 1px;
- border-style: solid;
- padding: 2px;
-}
-
-/* box */
-
-#box .block {
- background: #FFF;
-}
-
-#box .block h2 {
- background: #7A1818;
- color: #FFF;
-}
-
-
-/* rounded borders */
-
-#main, #main-navigation, #main-navigation li, .secondary-navigation, #main .block, #sidebar .block, #sidebar h3, ul.list li,
-#footer .block, .form input.button, #box .block, #box .block h2 {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
- -moz-border-radius-topright: 4px;
- -webkit-border-top-right-radius: 4px;
-}
-
-.secondary-navigation li.first a, .secondary-navigation ul li.first, .table th.first, .table th.first {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
-}
-
-.table th.last {
- -moz-border-radius-topright: 4px;
- -webkit-border-top-right-radius: 4px;
-}
-
-.secondary-navigation ul li.first {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
-}
-
-#sidebar, #sidebar .block, #main .block, #sidebar ul.navigation, ul.list li, #footer .block, .form input.button, #box .block {
- -moz-border-radius-bottomleft: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -moz-border-radius-bottomright: 4px;
- -webkit-border-bottom-right-radius: 4px;
-} \ No newline at end of file
diff --git a/chef-server-slice/public/stylesheets/themes/djime-cerulean/style.css b/chef-server-slice/public/stylesheets/themes/djime-cerulean/style.css
deleted file mode 100644
index 9b050c6785..0000000000
--- a/chef-server-slice/public/stylesheets/themes/djime-cerulean/style.css
+++ /dev/null
@@ -1,298 +0,0 @@
-/**
- * Cerulean web-app-theme made for Djime: http://github.com/mikl/djime/
- *
- * Please note that we're using CSSEdit's @group comment syntax.
- *
- * Colour sheme:
- * Cerulean: #007BA7
- * Bright blue: #01B8DE
- * Near-white: #F7F7F8
- * Silver grey: #C2C8D1
- * Dark blue: #001C26
- *
- * http://www.colourlovers.com/palette/646252/Cerulean_touch
- */
-
-/* @group General styles */
-
-.small { font-size:11px; }
-.gray { color:#999; }
-.hightlight { background-color:#ffc; }
-
-a:link, a:visited, a:hover, a:active, h1, h2, h3 { color: #007BA7; }
-
-body {
- color: #222;
- background: #C2C8D1;
- font-family: "Helvetica Neue",Helvetica,Arial,"Bitstream Vera Sans",sans-serif;
-}
-
-hr {
- background: #EEF0F0;
- color: #EEF0F0;
-}
-
-/* @end */
-
-/* @group Header */
-
-#header {
- background: #007BA7;
-}
-
-#header h1 {
- padding: 20px 0;
-}
-
-#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
- color: #F7F7F8;
-}
-
-/* @end */
-
-#user-navigation {
- top: auto;
- bottom: 5px;
- right: 25px;
-}
-
-#main .block .content {
- background: #F7F7F8;
- padding-top: 1px;
-}
-
-#main .block .content h2 {
- margin-left: 15px;
-}
-
-
-
-/* @group Main navigation */
-
-#main-navigation ul li {
- padding-left: 0;
-}
-
-#main-navigation ul li a {
- padding: 8px 0;
-}
-
-#main-navigation ul li a {
- padding: 8px 15px;
-}
-
-#main-navigation {
- background-color: #005573;
-}
-
-#main-navigation ul li a:hover {
- background-color: #001C26;
-}
-
-#main-navigation ul li.active a {
- background-color: #C2C8D1;
- background: -webkit-gradient(linear, left top, left bottom, from(#C2C8D1), to(#C2C8D1), color-stop(0.5, #F7F7F8), color-stop(0.5, #F7F7F8));
-
-}
-
-/* @end */
-
-/* @group Secondary navigation */
-
-.secondary-navigation li a:hover {
- background: #005573;
-}
-
-.secondary-navigation {
- background: #007BA7;
- border-bottom-width: 7px;
- border-bottom-color: #005573;
-}
-
-.secondary-navigation ul li.active, .secondary-navigation ul li.active a:hover {
- background-color: #005573;
-}
-
-/* @end */
-
-/* @group Sidebar */
-
-#sidebar .block {
- background: #F7F7F8;
-}
-
-#sidebar h3 {
- background: #007BA7;
- color: #F7F7F8;
- border-bottom: 7px solid #005573;
-}
-
-#sidebar ul li a:link, #sidebar ul li a:visited {
- background: #F7F7F8;
- border-bottom: 1px solid #EEF0F0;
- text-decoration: none;
-}
-
-#sidebar ul li a:hover, #sidebar ul li a:active {
- background: #005573;
- color: #F7F7F8;
-}
-
-/* @end */
-
-#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
-.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
-#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
- text-decoration: none;
- color: #F7F7F8;
-}
-
-#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
- color: #001C26;
-}
-
-#footer .block {
- color: #F7F7F8;
- background: #005573;
-}
-
-#footer .block p {
- margin: 0;
- padding: 10px;
-}
-
-/* pagination */
-
-.pagination span.current {
- background: #005573;
- color: #F7F7F8;
- border-color: #005573;
-}
-
-.pagination a,
-.pagination span {
- color: #001C26;
- border-color: #005573;
-}
-
-.pagination a:hover {
- color: #F7F7F8;
- background: #005573;
-}
-
-/* tables */
-
-.table th {
- background: #C2C8D1;
- color: #001C26;
-}
-
-.table td {
- border-bottom:1px solid #EEF0F0;
-}
-
-/* forms */
-
-.form input.text_field, .form textarea.text_area {
- width: 100%;
- border: 1px solid #001C26;
-}
-
-.form input.button {
- background: #EEE;
- color: #001C26;
- padding: 2px 5px;
- border: 1px solid #001C26;
- cursor: pointer;
-}
-
-.form .description {
- color: #8C8C8C;
- font-size: .9em;
-}
-
-/* @group Flash messages */
-
-.flash .message {
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- text-align:center;
- margin: 0 auto 15px;
-}
-
-.flash .message p {
- margin:8px;
-}
-.flash .error {
- border: 1px solid #fbb;
- background-color: #fdd;
-}
-.flash .warning {
- border: 1px solid #e0d300;
- background-color: #ffffcc;
-}
-.flash .notice {
- border: 1px solid #8ec4df;
- background-color: #dffaff;
-}
-
-/* @end */
-
-/* lists */
-
-ul.list li {
- border-bottom-color: #EEF0F0;
- border-bottom-width: 1px;
- border-bottom-style: solid;
-}
-
-ul.list li .item .avatar {
- border-color: #EEF0F0;
- border-width: 1px;
- border-style: solid;
- padding: 2px;
-}
-
-/* box */
-
-#box .block {
- background: #F7F7F8;
-}
-
-#box .block h2 {
- background: #005573;
- color: #F7F7F8;
-}
-
-
-/* rounded borders */
-
-#main, #main-navigation, #main-navigation li, #main-navigation li a, .secondary-navigation, #main .block, #sidebar .block, #sidebar h3, ul.list li,
-#footer .block, .form input.button, #box .block, #box .block h2 {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
- -moz-border-radius-topright: 4px;
- -webkit-border-top-right-radius: 4px;
-}
-
-.secondary-navigation li.first a, .secondary-navigation ul li.first, .table th.first, .table th.first {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
-}
-
-.table th.last {
- -moz-border-radius-topright: 4px;
- -webkit-border-top-right-radius: 4px;
-}
-
-.secondary-navigation ul li.first {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
-}
-
-#sidebar, #sidebar .block, #main .block, #sidebar ul.navigation, ul.list li, #footer .block, .form input.button, #box .block {
- -moz-border-radius-bottomleft: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -moz-border-radius-bottomright: 4px;
- -webkit-border-bottom-right-radius: 4px;
-} \ No newline at end of file
diff --git a/chef-server-slice/public/stylesheets/themes/kathleene/style.css b/chef-server-slice/public/stylesheets/themes/kathleene/style.css
deleted file mode 100644
index e68a545431..0000000000
--- a/chef-server-slice/public/stylesheets/themes/kathleene/style.css
+++ /dev/null
@@ -1,272 +0,0 @@
-.small { font-size:11px; }
-.gray { color:#999999; }
-.hightlight { background-color:#FFFFCC; }
-
-a:link, a:visited, a:hover, a:active, h1, h2, h3 { color: #AF0000; }
-a { -moz-outline: none; }
-
-body {
- color: #222;
- background: #f0f0ee;
- font-family: helvetica, arial, sans-serif;
-}
-
-hr {
- background: #f0f0ee;
- color: #f0f0ee;
-}
-
-#header {
- background: #AF0000;
-}
-
-#header h1 {
- padding: 20px 0;
-}
-
-#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
- color: #FFF;
-}
-
-#user-navigation {
- top: auto;
- bottom: 5px;
- right: 25px;
-}
-
-#main .block .content {
- background: #FFF;
- padding-top: 1px;
-}
-
-#main .block .content h2 {
- margin-left: 15px;
-}
-
-#sidebar .block {
- background: #FFF;
-}
-
-#sidebar h3 {
- background: #AF0000;
- color: #FFF;
- border-bottom: 5px solid #2a0000;
-}
-
-#main-navigation ul li {
- padding-left: 15px;
-}
-
-#main-navigation ul li a {
- padding: 8px 0;
-}
-
-#main-navigation ul li.active {
- padding: 0;
- margin-left: 15px;
-}
-
-#main-navigation ul li.active {
- margin-left: 15px;
-}
-
-#main-navigation ul li.active a {
- padding: 8px 15px;
-}
-
-#sidebar ul li a:link, #sidebar ul li a:visited {
- background: #FFF;
- border-bottom: 1px solid #F0F0EE;
- text-decoration: none;
-}
-
-#sidebar ul li a:hover, #sidebar ul li a:active {
- background: #470E0E;
- color: #FFF;
-}
-
-#main-navigation {
- background: #2a0000;
-}
-
-#main-navigation ul li {
- background: #2a0000;
- margin-right: 0;
-}
-
-#main-navigation ul li.active {
- background: #f0f0ee;
-}
-
-#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
-.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
-#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
- text-decoration: none;
- color: #FFF;
-}
-
-.secondary-navigation li a:hover {
- background: #470E0E;
-}
-
-#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
- color: #2a0000;
-}
-
-.secondary-navigation {
- background: #AF0000;
- border-bottom-color: #2a0000;
-}
-
-.secondary-navigation ul li.active, .secondary-navigation ul li.active a:hover {
- background-color: #2a0000;
-}
-
-#footer .block {
- color: #FFF;
- background: #2a0000;
-}
-
-#footer .block p {
- margin: 0;
- padding: 10px;
-}
-
-/* pagination */
-
-.pagination span.current {
- background: #2a0000;
- color: #FFF;
- border-color: #2a0000;
-}
-
-.pagination a {
- color: #2a0000;
- border-color: #2a0000;
-}
-
-.pagination a:hover {
- color: #FFF;
- background: #2a0000;
-}
-
-/* tables */
-
-.table th {
- background: #100000;
- border-bottom: 3px solid #700000;
- color: #FFF;
-}
-
-.table td {
- border-bottom:1px solid #F0F0EE;
-}
-
-/* forms */
-
-.form input.text_field, .form textarea.text_area {
- width: 100%;
- border: 1px solid #2a0000;
-}
-
-.form input.button {
- background: #EEE;
- color: #2a0000;
- padding: 2px 5px;
- border: 1px solid #2a0000;
- cursor: pointer;
-}
-
-.form .description {
- font-style: italic;
- color: #8C8C8C;
- font-size: .9em;
-}
-
-/* flash-messages */
-.flash .message {
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- text-align:center;
- margin: 0 auto 15px;
-
-}
-
-.flash .message p {
- margin:8px;
-}
-.flash .error {
- border: 1px solid #fbb;
- background-color: #fdd;
-}
-.flash .warning {
- border: 1px solid #fffaaa;
- background-color: #ffffcc;
-}
-.flash .notice {
- border: 1px solid #1FDF00;
- background-color: #BBFFB6;
-}
-
-/* lists */
-
-ul.list li {
- border-bottom-color: #F0F0EE;
- border-bottom-width: 1px;
- border-bottom-style: solid;
-}
-
-ul.list li .item .avatar {
- border-color: #F0F0EE;
- border-width: 1px;
- border-style: solid;
- padding: 2px;
-}
-
-/* box */
-
-#box .block {
- background: #FFF;
-}
-
-#box .block h2 {
- background: #AF0000;
- color: #FFF;
-}
-
-
-/* rounded borders */
-
-#main, #main-navigation, #main-navigation li, .secondary-navigation, #main .block, #sidebar .block, #sidebar h3, ul.list li,
-#footer .block, .form input.button, #box .block, #box .block h2 {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
- -moz-border-radius-topright: 4px;
- -webkit-border-top-right-radius: 4px;
-}
-
-.secondary-navigation li.first a, .secondary-navigation ul li.first, .table th.first, .table th.first {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
-}
-
-.table th.last {
- -moz-border-radius-topright: 4px;
- -webkit-border-top-right-radius: 4px;
-}
-
-.secondary-navigation ul li.first {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
-}
-
-#sidebar, #sidebar .block, #main .block, #sidebar ul.navigation, ul.list li, #footer .block, .form input.button, #box .block {
- -moz-border-radius-bottomleft: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -moz-border-radius-bottomright: 4px;
- -webkit-border-bottom-right-radius: 4px;
-}
-
-.secondary-navigation {
- border-bottom-width: 5px;
-}
diff --git a/chef-server-slice/public/stylesheets/themes/orange/style.css b/chef-server-slice/public/stylesheets/themes/orange/style.css
deleted file mode 100644
index 90e7d8de58..0000000000
--- a/chef-server-slice/public/stylesheets/themes/orange/style.css
+++ /dev/null
@@ -1,263 +0,0 @@
-.small { font-size:11px; }
-.gray { color:#999999; }
-.hightlight { background-color:#FFFFCC; }
-
-a:link, a:visited, a:hover, a:active, h1, h2, h3 { color: #ff7900; }
-a { -moz-outline: none; }
-
-body {
- color: #222;
- background: #f0f0ee;
- font-family: helvetica, arial, sans-serif;
-}
-
-hr {
- background: #f0f0ee;
- color: #f0f0ee;
-}
-
-#header {
- background: #ff7900;
-}
-
-#header h1 a:link, #header h1 a:active, #header h1 a:hover, #header h1 a:visited {
- color: #FFF;
-}
-
-#user-navigation {
- top: auto;
- bottom: 5px;
- right: 25px;
-}
-
-#main .block .content {
- background: #FFF;
- padding-top: 1px;
-}
-
-#main .block .content h2 {
- margin-left: 15px;
-}
-
-#sidebar .block {
- background: #FFF;
-}
-
-#sidebar h3 {
- background: #ff7900;
- color: #FFF;
- border-bottom: 10px solid #262626;
-}
-
-#main-navigation ul li {
- padding-left: 15px;
-}
-
-#main-navigation ul li a {
- padding: 8px 0;
-}
-
-#main-navigation ul li.active {
- padding: 0;
- margin-left: 15px;
-}
-
-#main-navigation ul li.active {
- margin-left: 15px;
-}
-
-#main-navigation ul li.active a {
- padding: 8px 15px;
-}
-
-#sidebar ul li a:link, #sidebar ul li a:visited {
- background: #FFF;
- border-bottom: 1px solid #F0F0EE;
- text-decoration: none;
-}
-
-#sidebar ul li a:hover, #sidebar ul li a:active {
- background: #863800;
- color: #FFF;
-}
-
-#main-navigation {
- background: #262626;
-}
-
-#main-navigation ul li {
- background: #262626;
- margin-right: 0;
-}
-
-#main-navigation ul li.active {
- background: #f0f0ee;
-}
-
-#main-navigation ul li a:link, #main-navigation ul li a:visited, #main-navigation ul li a:hover, #main-navigation ul li a:active,
-.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited, .secondary-navigation ul li a:hover, .secondary-navigation ul li a:active,
-#user-navigation ul li a:link, #user-navigation ul li a:visited, #user-navigation ul li a:hover, #user-navigation ul li a:active {
- text-decoration: none;
- color: #FFF;
-}
-
-.secondary-navigation li a:hover {
- background: #863800;
-}
-
-#main-navigation ul li.active a:link, #main-navigation ul li.active a:visited, #main-navigation ul li.active a:hover, #main-navigation ul li.active a:active {
- color: #262626;
-}
-
-.secondary-navigation {
- background: #ff7900;
- border-bottom-color: #262626;
-}
-
-.secondary-navigation ul li.active, .secondary-navigation ul li.active a:hover {
- background-color: #262626;
-}
-
-#footer .block {
- color: #FFF;
- background: #262626;
- width: 70%;
-}
-
-#footer .block p {
- margin: 0;
- padding: 10px;
-}
-
-/* pagination */
-
-.pagination span.current {
- background: #262626;
- color: #FFF;
- border-color: #262626;
-}
-
-.pagination a {
- color: #262626;
- border-color: #262626;
-}
-
-.pagination a:hover {
- color: #FFF;
- background: #262626;
-}
-
-/* tables */
-
-.table th {
- background: #262626;
- color: #FFF;
-}
-
-.table td {
- border-bottom:1px solid #F0F0EE;
-}
-
-/* forms */
-
-.form input.text, .form textarea {
- width: 100%;
- border: 1px solid #262626;
-}
-
-.form input.button {
- background: #EEE;
- color: #262626;
- padding: 2px 5px;
- border: 1px solid #262626;
- cursor: pointer;
-}
-
-.form .description {
- font-style: italic;
- color: #8C8C8C;
- font-size: .9em;
-}
-
-/* flash-messages */
-.flash .message {
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- text-align:center;
- margin:0 auto 5px;
-
-}
-.flash .message p {
- margin:8px;
-}
-.flash .error {
- border: 1px solid #fbb;
- background-color: #fdd;
-}
-.flash .warning {
- border: 1px solid #fffaaa;
- background-color: #ffffcc;
-}
-.flash .notice {
- border: 1px solid #1FDF00;
- background-color: #BBFFB6;
-}
-
-/* lists */
-
-ul.list li {
- border-bottom-color: #F0F0EE;
- border-bottom-width: 1px;
- border-bottom-style: solid;
-}
-
-ul.list li .item .avatar {
- border-color: #F0F0EE;
- border-width: 1px;
- border-style: solid;
- padding: 2px;
-}
-
-/* box */
-
-#box .block {
- background: #FFF;
-}
-
-#box .block h2 {
- background: #ff7900;
- color: #FFF;
-}
-
-
-/* rounded borders */
-
-#main, #main-navigation, #main-navigation li, .secondary-navigation, #main .block, #sidebar .block, #sidebar h3, ul.list li,
-#footer .block, .form input.button, #box .block, #box .block h2 {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
- -moz-border-radius-topright: 4px;
- -webkit-border-top-right-radius: 4px;
-}
-
-.secondary-navigation li.first a, .secondary-navigation ul li.first, .table th.first, .table th.first {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
-}
-
-.table th.last {
- -moz-border-radius-topright: 4px;
- -webkit-border-top-right-radius: 4px;
-}
-
-.secondary-navigation ul li.first {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
-}
-
-#sidebar, #sidebar .block, #main .block, #sidebar ul.navigation, ul.list li, #footer .block, .form input.button, #box .block {
- -moz-border-radius-bottomleft: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -moz-border-radius-bottomright: 4px;
- -webkit-border-bottom-right-radius: 4px;
-} \ No newline at end of file
diff --git a/chef-server-slice/public/stylesheets/themes/reidb-greenish/style.css b/chef-server-slice/public/stylesheets/themes/reidb-greenish/style.css
deleted file mode 100644
index 23e5245eb4..0000000000
--- a/chef-server-slice/public/stylesheets/themes/reidb-greenish/style.css
+++ /dev/null
@@ -1,301 +0,0 @@
-.small { font-size:11px; }
-.gray { color:#a2b0b6; }
-.hightlight { background-color:#d6e7c7; }
-
-a:link, a:visited, a:hover, a:active { color: #81B953; }
-h1, h2, h3 { color: #3B5526; }
-a { -moz-outline: none; }
-
-body {
- color: #222;
- background: #e4ebe4;
- font-family: helvetica, arial, sans-serif;
-}
-
-hr {
- background: #f0f0ee;
- color: #f0f0ee;
-}
-
-#header {
- background: #c9deb7;
-
-}
-
-#header h1{
- padding: 20px 0;
- font-weight: bold;
-
-}
-
-#header h1 a:link, #header h1 a:active,
-#header h1 a:hover, #header h1 a:visited {
- color: #3B5526;
-}
-
-#main .block .content {
- background: #FFF;
- padding-top: 1px;
-}
-
-#main .block .content h2 {
- margin-left: 15px;
-}
-
-#main .content { border: 1px solid #81B953;}
-
-#sidebar .block {
- background: #FFF;
- border: none;
-}
-
-#sidebar h3 {
- padding: 8px 12px;
- background: #3B5526;
- color: #FFF;
- font-weight: bold;
- border-bottom: 5px solid #81B953;
-}
-
-
-#sidebar ul li a:link,
-#sidebar ul li a:visited {
- background: #FFF;
- border-bottom: 1px solid #F0F0EE;
- text-decoration: none;
-}
-
-#sidebar ul li a:hover,
-#sidebar ul li a:active {
- background: #D3E8C1;
- color: #FFF;
-}
-
-#main-navigation {
- background: #44721e;
- margin-right: 20px;
- padding: 7px 7px 0 7px;
-}
-
-#main-navigation ul li {
- background: #91B96F;
- margin-right: 7px;
-}
-
-#main-navigation ul li a {
- padding: 10px 10px 5px 10px;
-}
-
-#main-navigation ul li.active {
- background: #e4ebe4;
- border: 1px solid #91B96F;
- border-bottom: none;
- font-weight: bold;
-}
-
-#main-navigation ul li a:hover,
-#main-navigation ul li a:link,
-#main-navigation ul li a:visited,
-#main-navigation ul li a:active,
-.secondary-navigation ul li a:link, .secondary-navigation ul li a:visited,
-.secondary-navigation ul li a:hover, .secondary-navigation ul li a:active {
- text-decoration: none;
- color: #FFF;
-}
-
-#user-navigation ul li a:link,
-#user-navigation ul li a:visited,
-#user-navigation ul li a:active {
- color: #3B5526;
-}
-
-#user-navigation ul li a:hover { color: #fff; }
-
-#main-navigation ul li.active a:link,
-#main-navigation ul li.active a:visited,
-#main-navigation ul li.active a:hover,
-#main-navigation ul li.active a:active {
- color: #262626;
-}
-
-.secondary-navigation {
- background: #3B5526;
- border-bottom: 5px solid #81b953;
-}
-
-.secondary-navigation ul li a {
-display:block;
-padding: 8px 12px;
-}
-
-.secondary-navigation ul li.active {background: #81b953; font-weight: bold;}
-.secondary-navigation ul li.active a:hover {
- background-color: #81B953;
-}
-
-.secondary-navigation li a:hover {
- background: #81B953;
-}
-
-#footer .block {
- color: #FFF;
- background: #3B5526;
-}
-
-#footer .block p {
- margin: 0;
- padding: 5px;
-}
-
-/* pagination */
-
-.pagination span.current {
- background: #262626;
- color: #FFF;
- border-color: #262626;
-}
-
-.pagination a {
- color: #262626;
- border-color: #262626;
-}
-
-.pagination a:hover {
- color: #FFF;
- background: #262626;
-}
-
-/* tables */
-
-
-.table th {
- background: #253618;
- color: #FFF;
-}
-
-.table tr th { padding: 5px; }
-
-.table td {
- border-bottom:1px solid #F0F0EE;
-}
-.table tr.odd {background: #ebfadf;}
-.table tr.even {background: #d3e8c1;}
-
-
-/* forms */
-
-.form input.text_field, .form textarea.text_area {
- width: 100%;
- border: 1px solid #262626;
-}
-
-.form input.button {
- background: #EEE;
- color: #262626;
- padding: 2px 5px;
- border: 1px solid #262626;
- cursor: pointer;
-}
-
-.form .description {
- font-style: italic;
- color: #8C8C8C;
- font-size: .9em;
-}
-
-/* flash-messages */
-.flash .message {
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- text-align:center;
- margin: 0 auto 15px;
-
-}
-
-.flash .message p {
- margin:8px;
-}
-.flash .error {
- border: 1px solid #fbb;
- background-color: #fdd;
-}
-.flash .warning {
- border: 1px solid #fffaaa;
- background-color: #ffffcc;
-}
-.flash .notice {
- border: 1px solid #1FDF00;
- background-color: #BBFFB6;
-}
-
-/* lists */
-
-ul.list li {
- border-bottom-color: #F0F0EE;
- border-bottom-width: 1px;
- border-bottom-style: solid;
-}
-
-ul.list li .item .avatar {
- border-color: #F0F0EE;
- border-width: 1px;
- border-style: solid;
- padding: 2px;
-}
-
-/* box */
-
-#box .block {
- background: #FFF;
-}
-
-#box .block h2 {
- color: #fff;
- background: #3B5526;
- border-bottom: 5px solid #81b953;
-}
-
-#box .block .content { border: 1px solid #81b953; border}
-
-/* login */
-
-#block-login { }
-#block-login h2 { background: #3B5526;border-bottom: 5px solid #81b953;}
-
-/* rounded borders */
-
-#main, #main-navigation, #main-navigation li,
-.secondary-navigation, #main .block, #sidebar .block,
-#sidebar h3, ul.list li, #footer .block,
-.form input.button, #box .block, #box .block h2 {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
- -moz-border-radius-topright: 4px;
- -webkit-border-top-right-radius: 4px;
-}
-
-.secondary-navigation li.first a,
-.secondary-navigation ul li.first,
-.table th.first, .table th.first {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
-}
-
-.table th.last {
- -moz-border-radius-topright: 4px;
- -webkit-border-top-right-radius: 4px;
-}
-
-.secondary-navigation ul li.first {
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
-}
-
-#sidebar, #sidebar .block, #main .block,
-#sidebar ul.navigation, ul.list li,
-#footer .block, .form input.button, #box .block {
- -moz-border-radius-bottomleft: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -moz-border-radius-bottomright: 4px;
- -webkit-border-bottom-right-radius: 4px;
-} \ No newline at end of file