From f0913295f9d6d1eec417b9c0677a59fad9c70a99 Mon Sep 17 00:00:00 2001 From: Willy Karam Date: Sat, 7 Mar 2015 17:42:10 -0500 Subject: [PATCH 1/9] Contrib modules --- .../modules/custom/addressfield/LICENSE.txt | 339 + .../modules/custom/addressfield/addresses.txt | 298 + .../custom/addressfield/addressfield-rtl.css | 10 + .../addressfield.address_formats.inc | 442 + .../addressfield.administrative_areas.inc | 1037 ++ .../custom/addressfield/addressfield.api.php | 114 + .../custom/addressfield/addressfield.css | 26 + .../addressfield.devel_generate.inc | 66 + .../addressfield/addressfield.feeds.inc | 59 + .../custom/addressfield/addressfield.info | 17 + .../custom/addressfield/addressfield.install | 216 + .../addressfield/addressfield.migrate.inc | 172 + .../custom/addressfield/addressfield.module | 893 + .../addressfield/addressfield.tokens.inc | 233 + .../example/addressfield_example.info | 15 + .../example/addressfield_example.module | 10 + .../plugins/format/address-ch-example.inc | 3567 ++++ .../plugins/format/address-hide-country.inc | 40 + .../format/address-hide-postal-code.inc | 24 + .../plugins/format/address-hide-street.inc | 24 + .../plugins/format/address-optional.inc | 36 + .../addressfield/plugins/format/address.inc | 289 + .../addressfield/plugins/format/name-full.inc | 52 + .../plugins/format/name-oneline.inc | 40 + .../plugins/format/organisation.inc | 38 + .../addressfield/views/addressfield.views.inc | 95 + ...dressfield_views_handler_field_country.inc | 40 + ...ressfield_views_handler_filter_country.inc | 9 + .../modules/custom/admin_menu/CHANGELOG.txt | 366 + .../all/modules/custom/admin_menu/LICENSE.txt | 339 + .../all/modules/custom/admin_menu/README.txt | 188 + .../admin_menu/admin_devel/admin_devel.info | 12 + .../admin_menu/admin_devel/admin_devel.js | 40 + .../admin_menu/admin_devel/admin_devel.module | 33 + .../custom/admin_menu/admin_menu-rtl.css | 64 + .../custom/admin_menu/admin_menu.admin.js | 62 + .../custom/admin_menu/admin_menu.api.php | 164 + .../custom/admin_menu/admin_menu.color.css | 45 + .../modules/custom/admin_menu/admin_menu.css | 233 + .../modules/custom/admin_menu/admin_menu.inc | 910 + .../modules/custom/admin_menu/admin_menu.info | 16 + .../custom/admin_menu/admin_menu.install | 123 + .../modules/custom/admin_menu/admin_menu.js | 385 + .../custom/admin_menu/admin_menu.map.inc | 147 + .../custom/admin_menu/admin_menu.module | 852 + .../custom/admin_menu/admin_menu.uid1.css | 9 + .../admin_menu_toolbar/admin_menu_toolbar.css | 145 + .../admin_menu_toolbar.info | 12 + .../admin_menu_toolbar.install | 37 + .../admin_menu_toolbar/admin_menu_toolbar.js | 56 + .../admin_menu_toolbar.module | 118 + .../admin_menu/admin_menu_toolbar/toolbar.png | Bin 0 -> 558 bytes .../custom/admin_menu/images/arrow-rtl.png | Bin 0 -> 273 bytes .../custom/admin_menu/images/arrow.png | Bin 0 -> 183 bytes .../custom/admin_menu/images/bkg-red.png | Bin 0 -> 236 bytes .../modules/custom/admin_menu/images/bkg.png | Bin 0 -> 236 bytes .../custom/admin_menu/images/bkg_tab.png | Bin 0 -> 236 bytes .../custom/admin_menu/images/icon_users.png | Bin 0 -> 629 bytes .../custom/admin_menu/tests/admin_menu.test | 520 + .../custom/adminimal_admin_menu/LICENSE.txt | 339 + .../custom/adminimal_admin_menu/README.txt | 22 + .../adminimal_admin_menu.css | 319 + .../adminimal_admin_menu.info | 12 + .../adminimal_admin_menu.install | 80 + .../adminimal_admin_menu.js | 62 + .../adminimal_admin_menu.module | 148 + .../adminimal_menu_settings.inc | 66 + .../adminimal_admin_menu/images/home.png | Bin 0 -> 1347 bytes .../adminimal_admin_menu/images/shortcut.png | Bin 0 -> 1478 bytes .../adminimal_admin_menu/images/square.png | Bin 0 -> 964 bytes .../custom/autocomplete_deluxe/LICENSE.txt | 339 + .../custom/autocomplete_deluxe/README.txt | 2 + .../autocomplete_deluxe-rtl.css | 36 + .../autocomplete_deluxe.api.php | 54 + .../autocomplete_deluxe.css | 184 + .../autocomplete_deluxe.info | 13 + .../autocomplete_deluxe.js | 464 + .../autocomplete_deluxe.module | 400 + .../autocomplete_deluxe.seven.css | 89 + .../custom/autocomplete_deluxe/throbber.gif | Bin 0 -> 1336 bytes .../modules/custom/autocomplete_deluxe/x.gif | Bin 0 -> 498 bytes .../better_exposed_filters/CHANGELOG.txt | 71 + .../custom/better_exposed_filters/LICENSE.txt | 339 + .../custom/better_exposed_filters/README.txt | 137 + .../better_exposed_filters.api.php | 18 + .../better_exposed_filters.css | 25 + .../better_exposed_filters.info | 15 + .../better_exposed_filters.js | 318 + .../better_exposed_filters.module | 211 + .../better_exposed_filters.theme | 729 + .../better_exposed_filters.views.inc | 31 + ...er_exposed_filters_exposed_form_plugin.inc | 1703 ++ .../bef_test_content.features.field_base.inc | 234 + ...f_test_content.features.field_instance.inc | 322 + .../bef_test_content.features.inc | 29 + .../bef_test_content.features.taxonomy.inc | 36 + .../bef_test_content/bef_test_content.info | 51 + .../bef_test_content/bef_test_content.module | 7 + .../bef_test_content.views_default.inc | 271 + .../tests/better_exposed_filters.test | 789 + .../tests/better_exposed_filters_TestBase.php | 276 + .../modules/custom/better_formats/LICENSE.txt | 339 + .../modules/custom/better_formats/README.txt | 30 + .../better_formats.admin_defaults.inc | 240 + .../better_formats.admin_settings.inc | 36 + .../custom/better_formats/better_formats.info | 11 + .../better_formats/better_formats.install | 39 + .../better_formats/better_formats.module | 412 + sites/all/modules/custom/boxes/LICENSE.txt | 339 + sites/all/modules/custom/boxes/README.txt | 49 + .../all/modules/custom/boxes/boxes.admin.inc | 123 + sites/all/modules/custom/boxes/boxes.css | 31 + sites/all/modules/custom/boxes/boxes.info | 21 + sites/all/modules/custom/boxes/boxes.install | 200 + sites/all/modules/custom/boxes/boxes.js | 142 + sites/all/modules/custom/boxes/boxes.module | 870 + .../custom/boxes/plugins/boxes_box.inc | 163 + .../custom/boxes/plugins/boxes_simple.inc | 56 + .../boxes/plugins/spaces_controller_boxes.inc | 45 + sites/all/modules/custom/boxes/swirly.gif | Bin 0 -> 3196 bytes .../all/modules/custom/boxes/tests/boxes.test | 165 + .../custom/boxes/tests/boxes_spaces.test | 118 + .../modules/custom/bundle_copy/CHANGELOG.txt | 4 + .../modules/custom/bundle_copy/LICENSE.txt | 339 + .../custom/bundle_copy/bundle_copy.api.php | 38 + .../custom/bundle_copy/bundle_copy.info | 12 + .../custom/bundle_copy/bundle_copy.module | 560 + sites/all/modules/custom/chosen/LICENSE.txt | 339 + sites/all/modules/custom/chosen/README.txt | 32 + sites/all/modules/custom/chosen/UPDATE.txt | 8 + .../modules/custom/chosen/chosen.admin.inc | 110 + sites/all/modules/custom/chosen/chosen.info | 12 + .../all/modules/custom/chosen/chosen.install | 99 + sites/all/modules/custom/chosen/chosen.js | 64 + .../modules/custom/chosen/chosen.make.example | 7 + sites/all/modules/custom/chosen/chosen.module | 284 + .../custom/chosen/css/chosen-drupal.css | 30 + .../custom/chosen/drush/chosen.drush.inc | 117 + sites/all/modules/custom/commerce/.gitignore | 6 + sites/all/modules/custom/commerce/LICENSE.txt | 339 + sites/all/modules/custom/commerce/README.txt | 4 + .../modules/custom/commerce/commerce.api.php | 179 + .../all/modules/custom/commerce/commerce.info | 20 + .../modules/custom/commerce/commerce.install | 325 + .../modules/custom/commerce/commerce.module | 1352 ++ .../custom/commerce/commerce.rules.inc | 133 + .../modules/custom/commerce/commerce_ui.info | 12 + .../custom/commerce/commerce_ui.module | 46 + .../modules/custom/commerce/help/README.txt | 1 + .../commerce/includes/commerce.controller.inc | 426 + .../commerce/includes/commerce.currency.inc | 1324 ++ .../commerce/includes/commerce_ui.admin.inc | 60 + .../custom/commerce/includes/views/README.txt | 1 + .../custom/commerce/modules/README.txt | 1 + .../modules/cart/commerce_cart.api.php | 263 + .../commerce/modules/cart/commerce_cart.info | 29 + .../modules/cart/commerce_cart.info.inc | 19 + .../modules/cart/commerce_cart.install | 45 + .../modules/cart/commerce_cart.module | 2745 +++ .../modules/cart/commerce_cart.rules.inc | 222 + .../cart/commerce_cart.rules_defaults.inc | 77 + .../cart/includes/commerce_cart.admin.inc | 57 + .../includes/commerce_cart.checkout_pane.inc | 84 + .../cart/includes/commerce_cart.pages.inc | 53 + .../includes/views/commerce_cart.views.inc | 47 + .../views/commerce_cart.views_default.inc | 504 + .../commerce_cart_handler_area_empty_text.inc | 24 + ...ce_cart_handler_field_add_to_cart_form.inc | 120 + ...argument_default_current_cart_order_id.inc | 26 + .../modules/cart/tests/commerce_cart.test | 546 + .../commerce/modules/cart/theme/buttons.png | Bin 0 -> 2972 bytes .../cart/theme/commerce-cart-block.tpl.php | 19 + .../cart/theme/commerce_cart.theme.css | 36 + .../checkout/commerce_checkout.api.php | 294 + .../modules/checkout/commerce_checkout.info | 20 + .../checkout/commerce_checkout.install | 143 + .../modules/checkout/commerce_checkout.js | 19 + .../modules/checkout/commerce_checkout.module | 1002 ++ .../checkout/commerce_checkout.rules.inc | 121 + .../commerce_checkout.rules_defaults.inc | 238 + .../checkout/commerce_checkout_admin.js | 105 + .../modules/checkout/images/status-active.gif | Bin 0 -> 2196 bytes .../includes/commerce_checkout.admin.inc | 450 + .../commerce_checkout.checkout_pane.inc | 111 + .../includes/commerce_checkout.pages.inc | 473 + .../checkout/tests/commerce_checkout.test | 526 + .../commerce-checkout-errors-message.tpl.php | 21 + .../theme/commerce-checkout-help.tpl.php | 16 + .../theme/commerce_checkout.admin.css | 27 + .../theme/commerce_checkout.base-rtl.css | 7 + .../checkout/theme/commerce_checkout.base.css | 13 + .../theme/commerce_checkout.theme-rtl.css | 15 + .../theme/commerce_checkout.theme.css | 54 + .../customer/commerce_customer.api.php | 162 + .../modules/customer/commerce_customer.info | 29 + .../customer/commerce_customer.info.inc | 79 + .../customer/commerce_customer.install | 267 + .../modules/customer/commerce_customer.js | 19 + .../modules/customer/commerce_customer.module | 1455 ++ .../customer/commerce_customer.tokens.inc | 136 + .../customer/commerce_customer_ui.info | 20 + .../customer/commerce_customer_ui.module | 385 + .../commerce_customer.checkout_pane.inc | 333 + .../commerce_customer_profile.controller.inc | 174 + .../commerce_customer_profile.forms.inc | 209 + .../commerce_customer_ui.profile_types.inc | 64 + .../commerce_customer_ui.profiles.inc | 81 + .../views/commerce_customer.views.inc | 265 + .../commerce_customer_ui.views_default.inc | 203 + ...merce_customer_handler_area_empty_text.inc | 46 + ...ustomer_handler_field_customer_profile.inc | 61 + ...er_handler_field_customer_profile_link.inc | 42 + ...ler_field_customer_profile_link_delete.inc | 29 + ...ndler_field_customer_profile_link_edit.inc | 29 + ...er_handler_field_customer_profile_type.inc | 17 + ...r_handler_filter_customer_profile_type.inc | 17 + .../commerce_customer_profile_dummy_type.info | 13 + ...ommerce_customer_profile_dummy_type.module | 22 + .../customer/tests/commerce_customer_ui.test | 631 + .../theme/commerce_customer.admin.css | 11 + .../theme/commerce_customer.theme.css | 14 + .../line_item/commerce_line_item.api.php | 193 + .../modules/line_item/commerce_line_item.info | 30 + .../line_item/commerce_line_item.info.inc | 113 + .../line_item/commerce_line_item.install | 199 + .../modules/line_item/commerce_line_item.js | 21 + .../line_item/commerce_line_item.module | 1574 ++ .../line_item/commerce_line_item.rules.inc | 332 + .../line_item/commerce_line_item.tokens.inc | 141 + .../line_item/commerce_line_item_ui.info | 17 + .../line_item/commerce_line_item_ui.module | 114 + .../commerce_line_item.controller.inc | 157 + .../includes/commerce_line_item_ui.types.inc | 63 + .../views/commerce_line_item.views.inc | 309 + .../commerce_line_item.views_default.inc | 176 + ...ne_item_handler_area_line_item_summary.inc | 133 + ...andler_argument_line_item_line_item_id.inc | 24 + ...ce_line_item_handler_field_edit_delete.inc | 69 + ..._line_item_handler_field_edit_quantity.inc | 118 + ...ine_item_handler_field_line_item_title.inc | 24 + ...line_item_handler_field_line_item_type.inc | 13 + ...ine_item_handler_filter_line_item_type.inc | 17 + .../theme/commerce-line-item-summary.tpl.php | 36 + .../theme/commerce_line_item.admin-rtl.css | 12 + .../theme/commerce_line_item.admin.css | 36 + .../theme/commerce_line_item.theme-rtl.css | 23 + .../theme/commerce_line_item.theme.css | 47 + .../modules/order/commerce_order.api.php | 180 + .../modules/order/commerce_order.info | 44 + .../modules/order/commerce_order.info.inc | 138 + .../modules/order/commerce_order.install | 473 + .../commerce/modules/order/commerce_order.js | 39 + .../modules/order/commerce_order.module | 1506 ++ .../modules/order/commerce_order.rules.inc | 460 + .../modules/order/commerce_order.tokens.inc | 189 + .../modules/order/commerce_order_ui.info | 24 + .../modules/order/commerce_order_ui.info.inc | 27 + .../modules/order/commerce_order_ui.module | 480 + .../order/commerce_order_ui.tokens.inc | 72 + .../includes/commerce_order.checkout_pane.inc | 153 + .../includes/commerce_order.controller.inc | 142 + .../order/includes/commerce_order.forms.inc | 346 + .../includes/commerce_order_ui.orders.inc | 68 + .../includes/views/commerce_order.views.inc | 549 + .../views/commerce_order_ui.views.inc | 23 + .../views/commerce_order_ui.views_default.inc | 558 + ...commerce_order_handler_area_empty_text.inc | 46 + ...ommerce_order_handler_area_order_total.inc | 58 + ..._order_handler_argument_order_order_id.inc | 26 + .../commerce_order_handler_field_order.inc | 76 + ...ommerce_order_handler_field_order_link.inc | 42 + ..._order_handler_field_order_link_delete.inc | 27 + ...ce_order_handler_field_order_link_edit.inc | 26 + ...ommerce_order_handler_field_order_mail.inc | 37 + ...e_order_handler_field_order_operations.inc | 57 + ...mmerce_order_handler_field_order_state.inc | 30 + ...merce_order_handler_field_order_status.inc | 16 + ...ommerce_order_handler_field_order_type.inc | 13 + ...merce_order_handler_filter_order_state.inc | 43 + ...erce_order_handler_filter_order_status.inc | 18 + ...mmerce_order_handler_filter_order_type.inc | 13 + ...ce_order_plugin_argument_validate_user.inc | 108 + ..._order_ui_handler_area_view_order_form.inc | 55 + .../order/tests/commerce_order.rules.test | 101 + .../modules/order/tests/commerce_order.test | 123 + .../order/tests/commerce_order_ui.test | 442 + .../order/theme/commerce_order.admin-rtl.css | 8 + .../order/theme/commerce_order.admin.css | 24 + .../order/theme/commerce_order.theme.css | 15 + .../modules/payment/commerce_payment.api.php | 460 + .../modules/payment/commerce_payment.info | 38 + .../modules/payment/commerce_payment.info.inc | 133 + .../modules/payment/commerce_payment.install | 295 + .../modules/payment/commerce_payment.js | 11 + .../modules/payment/commerce_payment.module | 1162 ++ .../payment/commerce_payment.rules.inc | 329 + .../commerce_payment.rules_defaults.inc | 33 + .../payment/commerce_payment.tokens.inc | 299 + .../modules/payment/commerce_payment_ui.info | 20 + .../payment/commerce_payment_ui.module | 277 + .../commerce_payment.checkout_pane.inc | 423 + .../includes/commerce_payment.credit_card.inc | 576 + .../includes/commerce_payment.forms.inc | 292 + ...ommerce_payment_transaction.controller.inc | 210 + .../includes/commerce_payment_ui.admin.inc | 117 + .../includes/views/commerce_payment.views.inc | 440 + .../commerce_payment_ui.views_default.inc | 162 + .../commerce_payment_handler_area_totals.inc | 124 + .../commerce_payment_handler_field_amount.inc | 59 + ...commerce_payment_handler_field_balance.inc | 59 + ...ce_payment_handler_field_currency_code.inc | 45 + ...commerce_payment_handler_field_message.inc | 20 + ...e_payment_handler_field_payment_method.inc | 43 + ...handler_field_payment_transaction_link.inc | 44 + ..._field_payment_transaction_link_delete.inc | 20 + ...r_field_payment_transaction_operations.inc | 30 + .../commerce_payment_handler_field_status.inc | 57 + ...e_payment_handler_filter_currency_code.inc | 18 + ..._payment_handler_filter_payment_method.inc | 17 + ...dler_filter_payment_transaction_status.inc | 17 + .../modules/commerce_payment_example.info | 13 + .../modules/commerce_payment_example.module | 102 + .../payment/tests/commerce_payment.rules.test | 59 + .../tests/commerce_payment_dummy_offsite.info | 13 + .../commerce_payment_dummy_offsite.module | 37 + .../payment/tests/commerce_payment_ui.test | 326 + .../theme/commerce-payment-totals.tpl.php | 26 + .../theme/commerce_payment.admin-rtl.css | 23 + .../payment/theme/commerce_payment.admin.css | 59 + .../payment/theme/commerce_payment.theme.css | 23 + .../modules/payment/theme/icon-failure.png | Bin 0 -> 384 bytes .../modules/payment/theme/icon-pending.png | Bin 0 -> 3057 bytes .../modules/payment/theme/icon-success.png | Bin 0 -> 383 bytes .../modules/price/commerce_price.api.php | 137 + .../modules/price/commerce_price.info | 19 + .../modules/price/commerce_price.install | 159 + .../modules/price/commerce_price.module | 1143 ++ .../modules/price/commerce_price.rules.inc | 200 + .../includes/views/commerce_price.views.inc | 26 + ...rce_price_handler_field_commerce_price.inc | 58 + ...e_handler_filter_commerce_price_amount.inc | 46 + .../price/theme/commerce_price.theme-rtl.css | 8 + .../price/theme/commerce_price.theme.css | 18 + .../modules/product/commerce_product.api.php | 170 + .../modules/product/commerce_product.info | 33 + .../modules/product/commerce_product.info.inc | 131 + .../modules/product/commerce_product.install | 422 + .../modules/product/commerce_product.module | 999 + .../product/commerce_product.tokens.inc | 144 + .../modules/product/commerce_product_ui.info | 20 + .../product/commerce_product_ui.info.inc | 15 + .../product/commerce_product_ui.install | 81 + .../product/commerce_product_ui.module | 537 + .../includes/commerce_product.controller.inc | 208 + .../includes/commerce_product.forms.inc | 253 + .../commerce_product.translation_handler.inc | 61 + .../includes/commerce_product_ui.forms.inc | 229 + .../includes/commerce_product_ui.products.inc | 81 + .../includes/commerce_product_ui.types.inc | 138 + .../includes/views/commerce_product.views.inc | 511 + .../commerce_product_ui.views_default.inc | 356 + ...mmerce_product_handler_area_empty_text.inc | 46 + ...ce_product_handler_argument_product_id.inc | 18 + ...commerce_product_handler_field_product.inc | 61 + ...rce_product_handler_field_product_link.inc | 42 + ...duct_handler_field_product_link_delete.inc | 29 + ...roduct_handler_field_product_link_edit.inc | 29 + ...oduct_handler_field_product_operations.inc | 54 + ...rce_product_handler_field_product_type.inc | 39 + ...ce_product_handler_filter_product_type.inc | 14 + .../product/tests/commerce_product.test | 420 + .../tests/commerce_product_crud_test.info | 14 + .../tests/commerce_product_crud_test.module | 10 + .../product/tests/commerce_product_ui.test | 574 + .../theme/commerce-product-sku.tpl.php | 24 + .../theme/commerce-product-status.tpl.php | 24 + .../theme/commerce-product-title.tpl.php | 24 + .../product/theme/commerce_product.admin.css | 15 + .../product/theme/commerce_product.theme.css | 12 + .../commerce_product_pricing.api.php | 77 + .../commerce_product_pricing.info | 16 + .../commerce_product_pricing.install | 26 + .../commerce_product_pricing.module | 487 + .../commerce_product_pricing_ui.info | 18 + .../commerce_product_pricing_ui.module | 145 + .../commerce_product_pricing_ui.admin.inc | 177 + .../commerce_product_reference.api.php | 35 + .../commerce_product_reference.info | 25 + .../commerce_product_reference.install | 36 + .../commerce_product_reference.module | 1506 ++ .../commerce_product_reference.rules.inc | 46 + .../commerce_product_reference.views.inc | 102 + ...handler_filter_node_is_product_display.inc | 19 + ...uct_reference_handler_filter_node_type.inc | 24 + ..._handler_filter_product_line_item_type.inc | 42 + .../tests/commerce_product_reference.test | 414 + .../commerce/modules/tax/commerce_tax.api.php | 214 + .../commerce/modules/tax/commerce_tax.info | 20 + .../commerce/modules/tax/commerce_tax.module | 641 + .../modules/tax/commerce_tax.rules.inc | 175 + .../tax/commerce_tax.rules_defaults.inc | 71 + .../commerce/modules/tax/commerce_tax_ui.info | 18 + .../modules/tax/commerce_tax_ui.install | 226 + .../modules/tax/commerce_tax_ui.module | 459 + .../tax/includes/commerce_tax_ui.admin.inc | 536 + .../modules/tax/tests/commerce_tax_ui.test | 762 + .../modules/tax/theme/commerce_tax.admin.css | 11 + .../tax/theme/commerce_tax.theme-rtl.css | 9 + .../modules/tax/theme/commerce_tax.theme.css | 14 + .../commerce_features/LICENSE.txt | 339 + .../commerce_coupon_type.features.inc | 101 + .../commerce_customer.features.inc | 69 + .../commerce_features/commerce_features.info | 13 + .../commerce_features.module | 194 + .../commerce_line_item_type.features.inc | 89 + .../commerce_order_type.features.inc | 99 + .../commerce_product_type.features.inc | 94 + .../commerce_tax_rate.features.inc | 96 + .../commerce_tax_type.features.inc | 93 + .../commerce_stock/LICENSE.txt | 339 + .../modules_contrib/commerce_stock/README.txt | 81 + .../commerce_stock/commerce_stock.info | 16 + .../commerce_stock/commerce_stock.install | 7 + .../commerce_stock/commerce_stock.module | 487 + .../commerce_stock/commerce_stock.rules.inc | 439 + .../commerce_stock.rules_defaults.inc | 6 + .../commerce_stock/commerce_stock_ui.info | 14 + .../commerce_stock/commerce_stock_ui.module | 189 + .../includes/commerce_stock.admin.inc | 129 + .../modules/commerce_sdf/commerce_sdf.info | 11 + .../modules/commerce_sdf/commerce_sdf.module | 152 + .../modules/commerce_ss/commerce_ss.info | 17 + .../modules/commerce_ss/commerce_ss.install | 21 + .../modules/commerce_ss/commerce_ss.module | 252 + .../modules/commerce_ss/commerce_ss.rules.inc | 160 + .../commerce_ss.rules_defaults.inc | 70 + .../includes/commerce_ss.admin.inc | 345 + .../modules/commerce_ssr/commerce_ssr.info | 16 + .../modules/commerce_ssr/commerce_ssr.module | 2 + .../commerce_ssr.rules_defaults.inc | 212 + .../modules_contrib/commerce_uuid/LICENSE.txt | 339 + .../commerce_uuid/commerce_uuid.info | 14 + .../commerce_uuid/commerce_uuid.install | 193 + .../commerce_uuid/commerce_uuid.module | 134 + .../modules/custom/commerce/tests/README.txt | 1 + .../custom/commerce/tests/commerce_base.test | 1093 ++ .../modules/custom/commerce/theme/README.txt | 1 + sites/all/modules/custom/ctools/API.txt | 54 + sites/all/modules/custom/ctools/CHANGELOG.txt | 82 + sites/all/modules/custom/ctools/LICENSE.txt | 339 + sites/all/modules/custom/ctools/UPGRADE.txt | 63 + .../custom/ctools/bulk_export/bulk_export.css | 18 + .../ctools/bulk_export/bulk_export.info | 14 + .../custom/ctools/bulk_export/bulk_export.js | 29 + .../ctools/bulk_export/bulk_export.module | 279 + .../all/modules/custom/ctools/css/button.css | 31 + .../custom/ctools/css/collapsible-div.css | 26 + .../all/modules/custom/ctools/css/context.css | 10 + .../all/modules/custom/ctools/css/ctools.css | 25 + .../modules/custom/ctools/css/dropbutton.css | 66 + .../modules/custom/ctools/css/dropdown.css | 73 + .../custom/ctools/css/export-ui-list.css | 45 + sites/all/modules/custom/ctools/css/modal.css | 130 + .../all/modules/custom/ctools/css/ruleset.css | 11 + .../modules/custom/ctools/css/stylizer.css | 129 + .../all/modules/custom/ctools/css/wizard.css | 8 + .../all/modules/custom/ctools/ctools.api.php | 268 + sites/all/modules/custom/ctools/ctools.info | 17 + .../all/modules/custom/ctools/ctools.install | 265 + sites/all/modules/custom/ctools/ctools.module | 1020 ++ .../ctools_access_ruleset.info | 13 + .../ctools_access_ruleset.install | 82 + .../ctools_access_ruleset.module | 85 + .../plugins/access/ruleset.inc | 109 + .../export_ui/ctools_access_ruleset.inc | 29 + .../ctools_access_ruleset_ui.class.php | 53 + .../css/ctools-ajax-sample.css | 134 + .../ctools_ajax_sample.info | 13 + .../ctools_ajax_sample.install | 19 + .../ctools_ajax_sample.module | 756 + .../ctools_ajax_sample/images/ajax-loader.gif | Bin 0 -> 10819 bytes .../images/loading-large.gif | Bin 0 -> 2545 bytes .../ctools_ajax_sample/images/loading.gif | Bin 0 -> 1849 bytes .../images/popups-border.png | Bin 0 -> 380 bytes .../js/ctools-ajax-sample.js | 42 + .../ctools_custom_content.info | 13 + .../ctools_custom_content.install | 67 + .../ctools_custom_content.module | 118 + .../export_ui/ctools_custom_content.inc | 20 + .../ctools_custom_content_ui.class.php | 129 + .../ctools/ctools_plugin_example/README.txt | 14 + .../ctools_plugin_example.info | 16 + .../ctools_plugin_example.module | 94 + .../ctools_plugin_example.pages_default.inc | 451 + ...ns--Determining-access-and-visibility.html | 17 + ...nt-Plugins--Starting-at-the-beginning.html | 20 + .../Chaos-Tools--CTools--Plugin-Examples.html | 19 + ...s--Displaying-content-using-a-context.html | 17 + ...Creating-a--context--from-an-argument.html | 21 + .../help/Module-setup-and-hooks.html | 20 + ...etting-one-context-take-us-to-another.html | 18 + .../help/ctools_plugin_example.help.ini | 42 + .../plugins/access/arg_length.inc | 65 + .../plugins/access/example_role.inc | 76 + .../plugins/arguments/simplecontext_arg.inc | 52 + .../plugins/content_types/icon_example.png | Bin 0 -> 566 bytes .../content_types/no_context_content_type.inc | 116 + .../content_types/relcontext_content_type.inc | 103 + .../simplecontext_content_type.inc | 129 + .../plugins/contexts/relcontext.inc | 83 + .../plugins/contexts/simplecontext.inc | 134 + .../plugins/panels.pages.inc | 214 + .../relcontext_from_simplecontext.inc | 50 + .../custom/ctools/drush/ctools.drush.inc | 1017 ++ .../all/modules/custom/ctools/help/about.html | 29 + .../all/modules/custom/ctools/help/ajax.html | 0 .../custom/ctools/help/collapsible-div.html | 1 + .../custom/ctools/help/context-access.html | 12 + .../custom/ctools/help/context-arguments.html | 14 + .../custom/ctools/help/context-content.html | 157 + .../custom/ctools/help/context-context.html | 13 + .../ctools/help/context-relationships.html | 13 + .../modules/custom/ctools/help/context.html | 0 sites/all/modules/custom/ctools/help/css.html | 1 + .../custom/ctools/help/ctools.help.ini | 97 + .../modules/custom/ctools/help/dependent.html | 1 + .../custom/ctools/help/dropbutton.html | 1 + .../modules/custom/ctools/help/dropdown.html | 1 + .../modules/custom/ctools/help/export-ui.html | 85 + .../modules/custom/ctools/help/export.html | 294 + .../all/modules/custom/ctools/help/form.html | 1 + .../all/modules/custom/ctools/help/modal.html | 215 + .../custom/ctools/help/object-cache.html | 132 + .../custom/ctools/help/plugins-api.html | 55 + .../custom/ctools/help/plugins-creating.html | 203 + .../ctools/help/plugins-implementing.html | 62 + .../modules/custom/ctools/help/plugins.html | 5 + .../modules/custom/ctools/help/wizard.html | 311 + .../custom/ctools/images/arrow-active.png | Bin 0 -> 313 bytes .../ctools/images/collapsible-collapsed.png | Bin 0 -> 108 bytes .../ctools/images/collapsible-expanded.png | Bin 0 -> 106 bytes .../custom/ctools/images/expanded-options.png | Bin 0 -> 228 bytes .../ctools/images/icon-close-window.png | Bin 0 -> 877 bytes .../custom/ctools/images/icon-configure.png | Bin 0 -> 765 bytes .../custom/ctools/images/icon-delete.png | Bin 0 -> 877 bytes .../modules/custom/ctools/images/no-icon.png | Bin 0 -> 574 bytes .../custom/ctools/images/status-active.gif | Bin 0 -> 2196 bytes .../modules/custom/ctools/images/throbber.gif | Bin 0 -> 3208 bytes .../ctools/includes/action-links.theme.inc | 33 + .../modules/custom/ctools/includes/ajax.inc | 157 + .../modules/custom/ctools/includes/cache.inc | 169 + .../ctools/includes/cache.plugin-type.inc | 11 + .../custom/ctools/includes/cleanstring.inc | 204 + .../ctools/includes/collapsible.theme.inc | 79 + .../custom/ctools/includes/content.inc | 844 + .../custom/ctools/includes/content.menu.inc | 149 + .../ctools/includes/content.plugin-type.inc | 17 + .../custom/ctools/includes/content.theme.inc | 21 + .../ctools/includes/context-access-admin.inc | 486 + .../custom/ctools/includes/context-admin.inc | 837 + .../ctools/includes/context-task-handler.inc | 540 + .../custom/ctools/includes/context.inc | 1602 ++ .../custom/ctools/includes/context.menu.inc | 40 + .../ctools/includes/context.plugin-type.inc | 24 + .../custom/ctools/includes/context.theme.inc | 344 + .../custom/ctools/includes/css-cache.inc | 52 + .../modules/custom/ctools/includes/css.inc | 573 + .../custom/ctools/includes/dependent.inc | 181 + .../ctools/includes/dropbutton.theme.inc | 143 + .../custom/ctools/includes/dropdown.theme.inc | 90 + .../custom/ctools/includes/export-ui.inc | 475 + .../custom/ctools/includes/export-ui.menu.inc | 24 + .../ctools/includes/export-ui.plugin-type.inc | 20 + .../modules/custom/ctools/includes/export.inc | 1267 ++ .../modules/custom/ctools/includes/fields.inc | 357 + .../custom/ctools/includes/jump-menu.inc | 150 + .../custom/ctools/includes/language.inc | 44 + .../custom/ctools/includes/math-expr.inc | 388 + .../modules/custom/ctools/includes/menu.inc | 98 + .../modules/custom/ctools/includes/modal.inc | 261 + .../ctools/includes/object-cache.cron.inc | 16 + .../custom/ctools/includes/object-cache.inc | 205 + .../custom/ctools/includes/page-wizard.inc | 194 + .../ctools/includes/page-wizard.menu.inc | 32 + .../custom/ctools/includes/plugins-admin.inc | 208 + .../custom/ctools/includes/plugins.inc | 915 + .../custom/ctools/includes/registry.inc | 77 + .../custom/ctools/includes/stylizer.inc | 1654 ++ .../custom/ctools/includes/stylizer.theme.inc | 28 + .../custom/ctools/includes/utility.inc | 31 + .../modules/custom/ctools/includes/uuid.inc | 67 + .../modules/custom/ctools/includes/views.inc | 26 + .../modules/custom/ctools/includes/wizard.inc | 534 + .../custom/ctools/includes/wizard.theme.inc | 22 + .../custom/ctools/js/ajax-responder.js | 126 + .../modules/custom/ctools/js/auto-submit.js | 100 + .../custom/ctools/js/collapsible-div.js | 241 + .../all/modules/custom/ctools/js/dependent.js | 231 + .../modules/custom/ctools/js/dropbutton.js | 94 + .../all/modules/custom/ctools/js/dropdown.js | 87 + .../all/modules/custom/ctools/js/jump-menu.js | 42 + sites/all/modules/custom/ctools/js/modal.js | 569 + .../all/modules/custom/ctools/js/stylizer.js | 220 + .../ctools/page_manager/css/page-manager.css | 372 + .../ctools/page_manager/help/about.html | 11 + .../page_manager/help/api-task-handler.html | 43 + .../page_manager/help/api-task-type.html | 2 + .../ctools/page_manager/help/api-task.html | 38 + .../help/custom-pages-access.html | 2 + .../help/custom-pages-arguments.html | 2 + .../page_manager/help/custom-pages-menu.html | 2 + .../page_manager/help/custom-pages.html | 2 + .../help/getting-started-create.html | 2 + .../help/getting-started-custom-nodes.html | 2 + .../getting-started-custom-vocabulary.html | 2 + .../help/getting-started-members.html | 2 + .../help/getting-started-page-list.html | 2 + .../page_manager/help/getting-started.html | 15 + .../page_manager/help/page-task-type.html | 4 + .../page_manager/help/page_manager.help.ini | 59 + .../ctools/page_manager/help/variants.html | 2 + .../page_manager/images/arrow-active.png | Bin 0 -> 313 bytes .../page_manager/images/locked-other.png | Bin 0 -> 262 bytes .../ctools/page_manager/images/locked.png | Bin 0 -> 273 bytes .../ctools/page_manager/js/page-list.js | 44 + .../page_manager/page_manager.admin.inc | 1904 ++ .../ctools/page_manager/page_manager.api.php | 39 + .../ctools/page_manager/page_manager.info | 13 + .../ctools/page_manager/page_manager.install | 204 + .../ctools/page_manager/page_manager.module | 1340 ++ .../plugins/cache/page_manager_context.inc | 70 + .../plugins/task_handlers/http_response.inc | 315 + .../page_manager/plugins/tasks/blog.inc | 121 + .../page_manager/plugins/tasks/blog_user.inc | 152 + .../plugins/tasks/comment_reply.inc | 162 + .../plugins/tasks/contact_site.inc | 129 + .../plugins/tasks/contact_user.inc | 155 + .../page_manager/plugins/tasks/node_edit.inc | 185 + .../page_manager/plugins/tasks/node_view.inc | 167 + .../page_manager/plugins/tasks/page.admin.inc | 1521 ++ .../page_manager/plugins/tasks/page.inc | 787 + .../page_manager/plugins/tasks/poll.inc | 121 + .../page_manager/plugins/tasks/search.inc | 249 + .../page_manager/plugins/tasks/term_view.inc | 377 + .../page_manager/plugins/tasks/user_edit.inc | 187 + .../page_manager/plugins/tasks/user_view.inc | 161 + .../theme/page-manager-edit-page.tpl.php | 53 + .../page_manager/theme/page_manager.theme.inc | 118 + .../custom/ctools/plugins/access/book.inc | 94 + .../ctools/plugins/access/compare_users.inc | 70 + .../ctools/plugins/access/context_exists.inc | 51 + .../ctools/plugins/access/entity_bundle.inc | 136 + .../plugins/access/entity_field_value.inc | 410 + .../custom/ctools/plugins/access/front.inc | 46 + .../custom/ctools/plugins/access/node.inc | 0 .../ctools/plugins/access/node_access.inc | 89 + .../ctools/plugins/access/node_comment.inc | 31 + .../ctools/plugins/access/node_language.inc | 114 + .../ctools/plugins/access/node_status.inc | 33 + .../ctools/plugins/access/node_type.inc | 117 + .../ctools/plugins/access/path_visibility.inc | 88 + .../custom/ctools/plugins/access/perm.inc | 73 + .../custom/ctools/plugins/access/php.inc | 64 + .../custom/ctools/plugins/access/role.inc | 79 + .../ctools/plugins/access/site_language.inc | 87 + .../ctools/plugins/access/string_equal.inc | 94 + .../ctools/plugins/access/string_length.inc | 80 + .../custom/ctools/plugins/access/term.inc | 129 + .../ctools/plugins/access/term_has_parent.inc | 172 + .../ctools/plugins/access/term_parent.inc | 86 + .../ctools/plugins/access/term_vocabulary.inc | 127 + .../custom/ctools/plugins/access/theme.inc | 70 + .../ctools/plugins/arguments/entity_id.inc | 142 + .../custom/ctools/plugins/arguments/nid.inc | 50 + .../ctools/plugins/arguments/node_add.inc | 32 + .../ctools/plugins/arguments/node_edit.inc | 51 + .../custom/ctools/plugins/arguments/rid.inc | 50 + .../ctools/plugins/arguments/string.inc | 64 + .../custom/ctools/plugins/arguments/term.inc | 163 + .../custom/ctools/plugins/arguments/terms.inc | 77 + .../custom/ctools/plugins/arguments/uid.inc | 53 + .../ctools/plugins/arguments/user_edit.inc | 47 + .../ctools/plugins/arguments/user_name.inc | 47 + .../custom/ctools/plugins/arguments/vid.inc | 46 + .../custom/ctools/plugins/cache/export_ui.inc | 39 + .../custom/ctools/plugins/cache/simple.inc | 51 + .../plugins/content_types/block/block.inc | 565 + .../block/icon_contrib_block.png | Bin 0 -> 574 bytes .../block/icon_contrib_block_empty.png | Bin 0 -> 450 bytes .../content_types/block/icon_contrib_menu.png | Bin 0 -> 552 bytes .../content_types/block/icon_contrib_page.png | Bin 0 -> 460 bytes .../block/icon_core_activeforumtopics.png | Bin 0 -> 603 bytes .../block/icon_core_authorinformation.png | Bin 0 -> 606 bytes .../content_types/block/icon_core_block.png | Bin 0 -> 568 bytes .../block/icon_core_block_empty.png | Bin 0 -> 450 bytes .../block/icon_core_block_menu.png | Bin 0 -> 552 bytes .../block/icon_core_booknavigation.png | Bin 0 -> 626 bytes .../block/icon_core_languageswitcher.png | Bin 0 -> 601 bytes .../block/icon_core_navigation.png | Bin 0 -> 818 bytes .../block/icon_core_newforumtopics.png | Bin 0 -> 604 bytes .../content_types/block/icon_core_page.png | Bin 0 -> 460 bytes .../block/icon_core_popularcontent.png | Bin 0 -> 604 bytes .../block/icon_core_primarylinks.png | Bin 0 -> 892 bytes .../block/icon_core_recentblogposts.png | Bin 0 -> 681 bytes .../block/icon_core_recentcomments.png | Bin 0 -> 662 bytes .../block/icon_core_recentpoll.png | Bin 0 -> 608 bytes .../block/icon_core_searchform.png | Bin 0 -> 717 bytes .../block/icon_core_syndicate.png | Bin 0 -> 803 bytes .../block/icon_core_userlogin.png | Bin 0 -> 601 bytes .../content_types/block/icon_core_whosnew.png | Bin 0 -> 732 bytes .../block/icon_core_whosonline.png | Bin 0 -> 744 bytes .../content_types/comment/comment_links.inc | 80 + .../comment/comment_reply_form.inc | 50 + .../plugins/content_types/contact/contact.inc | 60 + .../content_types/contact/icon_contact.png | Bin 0 -> 606 bytes .../content_types/contact/user_contact.inc | 66 + .../plugins/content_types/custom/custom.inc | 434 + .../custom/icon_block_custom.png | Bin 0 -> 522 bytes .../entity_context/entity_field.inc | 271 + .../entity_context/entity_field_extra.inc | 133 + .../content_types/form/entity_form_field.inc | 125 + .../plugins/content_types/form/form.inc | 62 + .../plugins/content_types/form/icon_form.png | Bin 0 -> 460 bytes .../plugins/content_types/node/icon_node.png | Bin 0 -> 460 bytes .../plugins/content_types/node/node.inc | 251 + .../content_types/node_context/icon_node.png | Bin 0 -> 460 bytes .../node_context/node_attachments.inc | 44 + .../node_context/node_author.inc | 71 + .../content_types/node_context/node_body.inc | 40 + .../node_context/node_book_children.inc | 43 + .../node_context/node_book_nav.inc | 43 + .../node_context/node_comment_form.inc | 96 + .../node_context/node_comment_wrapper.inc | 117 + .../node_context/node_comments.inc | 98 + .../node_context/node_content.inc | 204 + .../node_context/node_created.inc | 74 + .../content_types/node_context/node_links.inc | 105 + .../content_types/node_context/node_terms.inc | 205 + .../content_types/node_context/node_title.inc | 120 + .../node_context/node_type_desc.inc | 47 + .../node_context/node_updated.inc | 75 + .../node_form/icon_node_form.png | Bin 0 -> 460 bytes .../node_form/node_form_attachments.inc | 51 + .../node_form/node_form_author.inc | 52 + .../node_form/node_form_book.inc | 50 + .../node_form/node_form_buttons.inc | 43 + .../node_form/node_form_comment.inc | 50 + .../node_form/node_form_language.inc | 41 + .../content_types/node_form/node_form_log.inc | 47 + .../node_form/node_form_menu.inc | 50 + .../node_form/node_form_path.inc | 51 + .../node_form/node_form_publishing.inc | 54 + .../node_form/node_form_title.inc | 41 + .../content_types/page/page_actions.inc | 32 + .../content_types/page/page_breadcrumb.inc | 32 + .../content_types/page/page_feed_icons.inc | 32 + .../plugins/content_types/page/page_help.inc | 33 + .../plugins/content_types/page/page_logo.inc | 37 + .../content_types/page/page_messages.inc | 33 + .../content_types/page/page_primary_links.inc | 40 + .../page/page_secondary_links.inc | 40 + .../content_types/page/page_site_name.inc | 68 + .../content_types/page/page_slogan.inc | 32 + .../plugins/content_types/page/page_tabs.inc | 89 + .../plugins/content_types/page/page_title.inc | 118 + .../content_types/search/icon_search.png | Bin 0 -> 717 bytes .../content_types/search/search_form.inc | 156 + .../content_types/search/search_result.inc | 204 + .../content_types/term_context/icon_term.png | Bin 0 -> 460 bytes .../term_context/term_description.inc | 50 + .../content_types/term_context/term_list.inc | 172 + .../content_types/term_context/term_name.inc | 121 + .../content_types/token/icon_token.png | Bin 0 -> 460 bytes .../plugins/content_types/token/token.inc | 122 + .../content_types/user_context/icon_user.png | Bin 0 -> 606 bytes .../user_context/profile_fields.inc | 129 + .../user_context/profile_fields_pane.tpl.php | 16 + .../content_types/user_context/user_links.inc | 84 + .../user_context/user_picture.inc | 54 + .../user_context/user_profile.inc | 87 + .../user_context/user_signature.inc | 43 + .../vocabulary_context/icon_vocabulary.png | Bin 0 -> 460 bytes .../vocabulary_context/vocabulary_terms.inc | 100 + .../custom/ctools/plugins/contexts/entity.inc | 273 + .../custom/ctools/plugins/contexts/node.inc | 181 + .../ctools/plugins/contexts/node_add_form.inc | 124 + .../plugins/contexts/node_edit_form.inc | 192 + .../custom/ctools/plugins/contexts/string.inc | 90 + .../custom/ctools/plugins/contexts/term.inc | 166 + .../custom/ctools/plugins/contexts/terms.inc | 98 + .../custom/ctools/plugins/contexts/token.inc | 62 + .../custom/ctools/plugins/contexts/user.inc | 174 + .../plugins/contexts/user_edit_form.inc | 192 + .../ctools/plugins/contexts/vocabulary.inc | 72 + .../export_ui/ctools_export_ui.class.php | 1531 ++ .../plugins/export_ui/ctools_export_ui.inc | 24 + .../plugins/relationships/book_parent.inc | 68 + .../relationships/entity_from_field.inc | 229 + .../relationships/entity_from_schema.inc | 136 + .../node_edit_form_from_node.inc | 31 + .../plugins/relationships/term_from_node.inc | 60 + .../plugins/relationships/term_parent.inc | 68 + .../plugins/relationships/terms_from_node.inc | 83 + .../user_category_edit_form_from_user.inc | 31 + .../plugins/relationships/user_from_node.inc | 38 + .../stylizer/plugins/export_ui/stylizer.inc | 45 + .../plugins/export_ui/stylizer_ui.class.php | 272 + .../custom/ctools/stylizer/stylizer.info | 14 + .../custom/ctools/stylizer/stylizer.install | 70 + .../custom/ctools/stylizer/stylizer.module | 135 + .../term_depth/plugins/access/term_depth.inc | 128 + .../custom/ctools/term_depth/term_depth.info | 13 + .../ctools/term_depth/term_depth.module | 7 + .../modules/custom/ctools/tests/context.test | 62 + .../all/modules/custom/ctools/tests/css.test | 81 + .../custom/ctools/tests/css_cache.test | 48 + .../custom/ctools/tests/ctools.drush.sh | 119 + .../custom/ctools/tests/ctools.plugins.test | 100 + .../ctools_export_test/ctools_export.test | 215 + ...xport_test.default_ctools_export_tests.inc | 31 + .../ctools_export_test.info | 16 + .../ctools_export_test.install | 86 + .../ctools_export_test.module | 10 + .../ctools/tests/ctools_plugin_test.info | 20 + .../ctools/tests/ctools_plugin_test.module | 72 + .../custom/ctools/tests/math_expression.test | 129 + .../ctools/tests/math_expression_stack.test | 63 + .../custom/ctools/tests/object_cache.test | 46 + .../cached/ctoolsCachedPluginArray.class.php | 7 + .../cached/ctoolsCachedPluginArray2.class.php | 7 + .../tests/plugins/cached/plugin_array.inc | 20 + .../tests/plugins/cached/plugin_array2.inc | 20 + .../tests/plugins/cached/plugin_array_dne.inc | 15 + .../ctoolsNotCachedPluginArray.class.php | 7 + .../ctoolsNotCachedPluginArray2.class.php | 7 + .../tests/plugins/not_cached/plugin_array.inc | 20 + .../plugins/not_cached/plugin_array2.inc | 20 + .../plugins/not_cached/plugin_array_dne.inc | 15 + .../content_types/icon_views_block_legacy.png | Bin 0 -> 599 bytes .../plugins/content_types/icon_views_page.png | Bin 0 -> 716 bytes .../content_types/icon_views_page_legacy.png | Bin 0 -> 587 bytes .../plugins/content_types/views.inc | 556 + .../content_types/views_attachments.inc | 75 + .../plugins/content_types/views_empty.inc | 53 + .../plugins/content_types/views_exposed.inc | 51 + .../plugins/content_types/views_feed.inc | 51 + .../plugins/content_types/views_footer.inc | 51 + .../plugins/content_types/views_header.inc | 51 + .../plugins/content_types/views_pager.inc | 52 + .../plugins/content_types/views_panes.inc | 634 + .../plugins/content_types/views_row.inc | 237 + .../plugins/content_types/views_view.inc | 52 + .../views_content/plugins/contexts/view.inc | 174 + .../plugins/relationships/node_from_view.inc | 64 + .../plugins/relationships/term_from_view.inc | 64 + .../plugins/relationships/user_from_view.inc | 64 + .../relationships/view_from_argument.inc | 100 + .../plugins/views/views_content.views.inc | 65 + ..._content_plugin_display_ctools_context.inc | 272 + ...iews_content_plugin_display_panel_pane.inc | 416 + ...ws_content_plugin_style_ctools_context.inc | 53 + .../views_content/views_content.admin.inc | 0 .../ctools/views_content/views_content.info | 18 + .../ctools/views_content/views_content.module | 297 + sites/all/modules/custom/date/CHANGELOG.txt | 674 + sites/all/modules/custom/date/INSTALL.txt | 47 + sites/all/modules/custom/date/LICENSE.txt | 339 + sites/all/modules/custom/date/README.txt | 223 + sites/all/modules/custom/date/date.api.php | 526 + .../custom/date/date.devel_generate.inc | 82 + sites/all/modules/custom/date/date.diff.inc | 79 + sites/all/modules/custom/date/date.field.inc | 545 + sites/all/modules/custom/date/date.info | 20 + sites/all/modules/custom/date/date.install | 194 + sites/all/modules/custom/date/date.js | 159 + .../all/modules/custom/date/date.migrate.inc | 200 + sites/all/modules/custom/date/date.module | 767 + sites/all/modules/custom/date/date.theme | 411 + sites/all/modules/custom/date/date.tokens.inc | 72 + sites/all/modules/custom/date/date_admin.inc | 606 + sites/all/modules/custom/date/date_admin.js | 81 + .../custom/date/date_all_day/README.txt | 9 + .../date/date_all_day/date_all_day.info | 13 + .../date/date_all_day/date_all_day.module | 419 + .../modules/custom/date/date_api/date-rtl.css | 27 + .../all/modules/custom/date/date_api/date.css | 188 + .../custom/date/date_api/date_api.admin.inc | 126 + .../custom/date/date_api/date_api.info | 17 + .../custom/date/date_api/date_api.install | 252 + .../custom/date/date_api/date_api.module | 2784 +++ .../date/date_api/date_api_elements.inc | 753 + .../custom/date/date_api/date_api_ical.inc | 803 + .../custom/date/date_api/date_api_sql.inc | 1144 ++ .../custom/date/date_api/date_year_range.js | 223 + .../custom/date/date_api/images/calendar.png | Bin 0 -> 440 bytes .../custom/date/date_api/images/ical16x16.gif | Bin 0 -> 357 bytes .../custom/date/date_api/theme/theme.inc | 229 + .../date/date_context/date_context.info | 16 + .../date/date_context/date_context.module | 54 + .../plugins/date_context_date_condition.inc | 132 + .../all/modules/custom/date/date_elements.inc | 661 + .../date/date_migrate/date_migrate.info | 12 + .../date/date_migrate/date_migrate.module | 6 + .../date_migrate_example.features.field.inc | 680 + .../date_migrate_example.features.inc | 23 + .../date_migrate_example.info | 28 + .../date_migrate_example.install | 23 + .../date_migrate_example.migrate.inc | 131 + .../date_migrate_example.module | 21 + .../date_migrate_example.xml | 60 + .../modules/custom/date/date_popup/README.txt | 108 + .../custom/date/date_popup/date_popup.info | 15 + .../custom/date/date_popup/date_popup.install | 33 + .../custom/date/date_popup/date_popup.js | 62 + .../custom/date/date_popup/date_popup.module | 740 + .../date/date_popup/jquery.timeentry.pack.js | 7 + .../date/date_popup/themes/datepicker.1.7.css | 59 + .../date_popup/themes/jquery.timeentry.css | 8 + sites/all/modules/custom/date/date_repeat.inc | 6 + .../custom/date/date_repeat/date_repeat.info | 15 + .../date/date_repeat/date_repeat.install | 32 + .../date/date_repeat/date_repeat.module | 419 + .../date/date_repeat/date_repeat_calc.inc | 623 + .../date/date_repeat/date_repeat_form.inc | 975 + .../date/date_repeat/tests/date_repeat.test | 468 + .../date_repeat/tests/date_repeat_form.test | 521 + .../custom/date/date_repeat_field/README.txt | 4 + .../date_repeat_field/date_repeat_field.css | 109 + .../date_repeat_field.devel_generate.inc | 158 + .../date_repeat_field/date_repeat_field.info | 15 + .../date_repeat_field.module | 737 + .../date_tools/date_tools.change_type.inc | 182 + .../custom/date/date_tools/date_tools.info | 14 + .../custom/date/date_tools/date_tools.module | 96 + .../date/date_tools/date_tools.wizard.inc | 392 + .../date/date_tools/tests/date_tools.test | 105 + .../custom/date/date_views/css/date_views.css | 142 + .../custom/date/date_views/date_views.info | 20 + .../custom/date/date_views/date_views.install | 30 + .../custom/date/date_views/date_views.module | 504 + .../date_plugin_display_attachment.inc | 6 + .../date_views/includes/date_views.views.inc | 198 + .../includes/date_views_argument_handler.inc | 200 + .../date_views_argument_handler_simple.inc | 345 + .../date_views/includes/date_views_fields.inc | 169 + .../includes/date_views_filter_handler.inc | 181 + .../date_views_filter_handler_simple.inc | 532 + .../includes/date_views_plugin_pager.inc | 233 + .../theme/date-views-filter-form.tpl.php | 55 + .../date_views/theme/date-views-pager.tpl.php | 49 + .../custom/date/date_views/theme/theme.inc | 214 + .../all/modules/custom/date/tests/README.txt | 16 + .../modules/custom/date/tests/USHolidays.ics | 2029 +++ sites/all/modules/custom/date/tests/Yahoo.csv | 16 + sites/all/modules/custom/date/tests/date.test | 91 + .../modules/custom/date/tests/date_api.test | 409 + .../modules/custom/date/tests/date_field.test | 264 + .../custom/date/tests/date_migrate.test | 80 + .../custom/date/tests/date_timezone.test | 97 + .../custom/date/tests/date_validation.test | 151 + sites/all/modules/custom/date/tests/rrule.ics | 125 + sites/all/modules/custom/devel/LICENSE.txt | 339 + sites/all/modules/custom/devel/README.txt | 59 + .../custom/devel/README_devel_node_access.txt | 42 + sites/all/modules/custom/devel/devel-rtl.css | 8 + .../all/modules/custom/devel/devel.admin.inc | 176 + sites/all/modules/custom/devel/devel.css | 138 + .../all/modules/custom/devel/devel.drush.inc | 207 + sites/all/modules/custom/devel/devel.info | 15 + sites/all/modules/custom/devel/devel.install | 135 + sites/all/modules/custom/devel/devel.js | 45 + sites/all/modules/custom/devel/devel.mail.inc | 82 + sites/all/modules/custom/devel/devel.module | 2154 +++ .../all/modules/custom/devel/devel.pages.inc | 298 + .../all/modules/custom/devel/devel.rules.inc | 24 + sites/all/modules/custom/devel/devel.test | 53 + .../modules/custom/devel/develDrushTest.php | 25 + .../devel_generate/devel_generate.drush.inc | 238 + .../devel_generate/devel_generate.fields.inc | 98 + .../devel/devel_generate/devel_generate.inc | 722 + .../devel/devel_generate/devel_generate.info | 14 + .../devel_generate/devel_generate.module | 522 + .../devel/devel_generate/devel_generate.test | 108 + .../devel_generate/devel_generate_batch.inc | 68 + .../devel_generate/file.devel_generate.inc | 58 + .../devel_generate/image.devel_generate.inc | 94 + .../devel_generate/list.devel_generate.inc | 20 + .../devel_generate/number.devel_generate.inc | 45 + .../taxonomy.devel_generate.inc | 36 + .../devel_generate/text.devel_generate.inc | 35 + .../modules/custom/devel/devel_krumo_path.js | 66 + .../custom/devel/devel_node_access.api.php | 78 + .../custom/devel/devel_node_access.info | 14 + .../custom/devel/devel_node_access.install | 13 + .../modules/custom/devel/devel_node_access.js | 64 + .../custom/devel/devel_node_access.module | 1393 ++ .../custom/devel/jquery-1.4.4-uncompressed.js | 7179 ++++++++ sites/all/modules/custom/devel/krumo/INSTALL | 32 + sites/all/modules/custom/devel/krumo/LICENSE | 504 + sites/all/modules/custom/devel/krumo/README | 103 + sites/all/modules/custom/devel/krumo/TODO | 24 + sites/all/modules/custom/devel/krumo/VERSION | 1 + .../custom/devel/krumo/class.krumo.php | 1317 ++ .../krumo/docs/Krumo/_class.krumo.php.html | 267 + .../custom/devel/krumo/docs/Krumo/krumo.html | 900 + .../custom/devel/krumo/docs/blank.html | 13 + .../devel/krumo/docs/classtrees_Krumo.html | 23 + .../custom/devel/krumo/docs/elementindex.html | 392 + .../devel/krumo/docs/elementindex_Krumo.html | 389 + .../custom/devel/krumo/docs/errors.html | 15 + .../custom/devel/krumo/docs/index.html | 24 + .../custom/devel/krumo/docs/li_Krumo.html | 155 + .../custom/devel/krumo/docs/media/banner.css | 32 + .../krumo/docs/media/images/AbstractClass.png | Bin 0 -> 620 bytes .../docs/media/images/AbstractClass_logo.png | Bin 0 -> 1232 bytes .../docs/media/images/AbstractMethod.png | Bin 0 -> 696 bytes .../media/images/AbstractPrivateClass.png | Bin 0 -> 848 bytes .../images/AbstractPrivateClass_logo.png | Bin 0 -> 1615 bytes .../media/images/AbstractPrivateMethod.png | Bin 0 -> 874 bytes .../devel/krumo/docs/media/images/Class.png | Bin 0 -> 570 bytes .../krumo/docs/media/images/Class_logo.png | Bin 0 -> 1600 bytes .../krumo/docs/media/images/Constant.png | Bin 0 -> 752 bytes .../krumo/docs/media/images/Constructor.png | Bin 0 -> 865 bytes .../krumo/docs/media/images/Destructor.png | Bin 0 -> 956 bytes .../krumo/docs/media/images/Function.png | Bin 0 -> 596 bytes .../devel/krumo/docs/media/images/Global.png | Bin 0 -> 712 bytes .../devel/krumo/docs/media/images/I.png | Bin 0 -> 148 bytes .../devel/krumo/docs/media/images/Index.png | Bin 0 -> 584 bytes .../krumo/docs/media/images/Interface.PNG | Bin 0 -> 1083 bytes .../docs/media/images/Interface_logo.png | Bin 0 -> 1600 bytes .../devel/krumo/docs/media/images/L.png | Bin 0 -> 153 bytes .../devel/krumo/docs/media/images/Lminus.png | Bin 0 -> 219 bytes .../devel/krumo/docs/media/images/Lplus.png | Bin 0 -> 224 bytes .../devel/krumo/docs/media/images/Method.png | Bin 0 -> 661 bytes .../devel/krumo/docs/media/images/Page.png | Bin 0 -> 592 bytes .../krumo/docs/media/images/Page_logo.png | Bin 0 -> 1369 bytes .../krumo/docs/media/images/PrivateClass.png | Bin 0 -> 790 bytes .../docs/media/images/PrivateClass_logo.png | Bin 0 -> 1836 bytes .../krumo/docs/media/images/PrivateMethod.png | Bin 0 -> 918 bytes .../docs/media/images/PrivateVariable.png | Bin 0 -> 772 bytes .../krumo/docs/media/images/StaticMethod.png | Bin 0 -> 661 bytes .../docs/media/images/StaticVariable.png | Bin 0 -> 688 bytes .../devel/krumo/docs/media/images/T.png | Bin 0 -> 152 bytes .../devel/krumo/docs/media/images/Tminus.png | Bin 0 -> 207 bytes .../devel/krumo/docs/media/images/Tplus.png | Bin 0 -> 222 bytes .../krumo/docs/media/images/Variable.png | Bin 0 -> 688 bytes .../devel/krumo/docs/media/images/blank.png | Bin 0 -> 144 bytes .../krumo/docs/media/images/class_folder.png | Bin 0 -> 633 bytes .../devel/krumo/docs/media/images/empty.png | Bin 0 -> 90 bytes .../devel/krumo/docs/media/images/file.png | Bin 0 -> 462 bytes .../devel/krumo/docs/media/images/folder.png | Bin 0 -> 492 bytes .../docs/media/images/function_folder.png | Bin 0 -> 605 bytes .../devel/krumo/docs/media/images/minus.gif | Bin 0 -> 54 bytes .../krumo/docs/media/images/next_button.png | Bin 0 -> 657 bytes .../media/images/next_button_disabled.png | Bin 0 -> 543 bytes .../devel/krumo/docs/media/images/package.png | Bin 0 -> 668 bytes .../docs/media/images/package_folder.png | Bin 0 -> 564 bytes .../devel/krumo/docs/media/images/plus.gif | Bin 0 -> 56 bytes .../docs/media/images/previous_button.png | Bin 0 -> 644 bytes .../media/images/previous_button_disabled.png | Bin 0 -> 541 bytes .../docs/media/images/private_class_logo.png | Bin 0 -> 1836 bytes .../krumo/docs/media/images/tutorial.png | Bin 0 -> 431 bytes .../docs/media/images/tutorial_folder.png | Bin 0 -> 572 bytes .../krumo/docs/media/images/up_button.png | Bin 0 -> 668 bytes .../devel/krumo/docs/media/lib/classTree.js | 454 + .../devel/krumo/docs/media/stylesheet.css | 181 + .../custom/devel/krumo/docs/packages.html | 40 + .../custom/devel/krumo/docs/ric_INSTALL.html | 49 + .../custom/devel/krumo/docs/ric_LICENSE.html | 522 + .../custom/devel/krumo/docs/ric_README.html | 121 + .../custom/devel/krumo/docs/ric_TODO.html | 41 + .../custom/devel/krumo/docs/ric_VERSION.html | 18 + .../all/modules/custom/devel/krumo/krumo.ini | 20 + sites/all/modules/custom/devel/krumo/krumo.js | 97 + .../custom/devel/krumo/skins/blue/bg.gif | Bin 0 -> 141 bytes .../custom/devel/krumo/skins/blue/skin.css | 158 + .../custom/devel/krumo/skins/default/bg.gif | Bin 0 -> 141 bytes .../custom/devel/krumo/skins/default/skin.css | 158 + .../custom/devel/krumo/skins/green/bg.gif | Bin 0 -> 141 bytes .../custom/devel/krumo/skins/green/skin.css | 158 + .../custom/devel/krumo/skins/orange/bg.gif | Bin 0 -> 141 bytes .../custom/devel/krumo/skins/orange/skin.css | 158 + .../devel/krumo/skins/white/collapsed.gif | Bin 0 -> 102 bytes .../custom/devel/krumo/skins/white/dotted.gif | Bin 0 -> 91 bytes .../custom/devel/krumo/skins/white/empty.gif | Bin 0 -> 101 bytes .../devel/krumo/skins/white/expanded.gif | Bin 0 -> 99 bytes .../custom/devel/krumo/skins/white/skin.css | 165 + sites/all/modules/custom/devel/runtests.sh | 22 + sites/all/modules/custom/diff/CHANGELOG.txt | 166 + sites/all/modules/custom/diff/DiffEngine.php | 1349 ++ sites/all/modules/custom/diff/LICENSE.txt | 339 + .../modules/custom/diff/css/diff.boxes.css | 124 + .../modules/custom/diff/css/diff.default.css | 86 + sites/all/modules/custom/diff/diff.admin.inc | 158 + sites/all/modules/custom/diff/diff.api.php | 181 + sites/all/modules/custom/diff/diff.css | 86 + sites/all/modules/custom/diff/diff.diff.inc | 384 + sites/all/modules/custom/diff/diff.info | 12 + sites/all/modules/custom/diff/diff.install | 124 + sites/all/modules/custom/diff/diff.module | 623 + sites/all/modules/custom/diff/diff.pages.inc | 632 + sites/all/modules/custom/diff/diff.theme.inc | 149 + sites/all/modules/custom/diff/diff.tokens.inc | 63 + .../all/modules/custom/diff/includes/file.inc | 111 + .../modules/custom/diff/includes/image.inc | 112 + .../all/modules/custom/diff/includes/list.inc | 71 + .../all/modules/custom/diff/includes/node.inc | 107 + .../modules/custom/diff/includes/number.inc | 17 + .../modules/custom/diff/includes/taxonomy.inc | 107 + .../all/modules/custom/diff/includes/text.inc | 113 + sites/all/modules/custom/diff/js/diff.js | 58 + sites/all/modules/custom/diff/readme.txt | 136 + sites/all/modules/custom/domain/CHANGELOG.txt | 33 + sites/all/modules/custom/domain/INSTALL.txt | 477 + .../custom/domain/INSTALL_QUICKSTART.txt | 91 + sites/all/modules/custom/domain/LICENSE.txt | 339 + sites/all/modules/custom/domain/README.txt | 1485 ++ sites/all/modules/custom/domain/UPGRADE.txt | 228 + .../modules/custom/domain/domain.admin.inc | 1255 ++ .../all/modules/custom/domain/domain.api.php | 869 + .../modules/custom/domain/domain.blocks.inc | 160 + .../custom/domain/domain.bootstrap.inc | 370 + .../modules/custom/domain/domain.drush.inc | 456 + .../modules/custom/domain/domain.features.inc | 83 + sites/all/modules/custom/domain/domain.info | 14 + .../all/modules/custom/domain/domain.install | 453 + .../modules/custom/domain/domain.migrate.inc | 325 + sites/all/modules/custom/domain/domain.module | 4259 +++++ .../modules/custom/domain/domain.tokens.inc | 152 + .../custom/domain/domain_alias/README.txt | 265 + .../domain_alias/domain_alias.admin.inc | 324 + .../domain_alias/domain_alias.domain.inc | 49 + .../domain_alias/domain_alias.features.inc | 113 + .../domain/domain_alias/domain_alias.info | 12 + .../domain/domain_alias/domain_alias.install | 72 + .../domain/domain_alias/domain_alias.module | 424 + .../custom/domain/domain_conf/README.txt | 189 + .../domain/domain_conf/domain_conf.admin.inc | 218 + .../domain/domain_conf/domain_conf.domain.inc | 427 + .../domain/domain_conf/domain_conf.drush.inc | 65 + .../domain_conf/domain_conf.features.inc | 107 + .../domain/domain_conf/domain_conf.info | 12 + .../domain/domain_conf/domain_conf.install | 127 + .../domain/domain_conf/domain_conf.module | 473 + .../custom/domain/domain_content/README.txt | 180 + .../domain_content/domain_content-rtl.css | 15 + .../domain_content/domain_content.admin.inc | 505 + .../domain/domain_content/domain_content.css | 17 + .../domain_content/domain_content.domain.inc | 20 + .../domain/domain_content/domain_content.info | 12 + .../domain_content/domain_content.module | 313 + .../custom/domain/domain_nav/README.txt | 178 + .../custom/domain/domain_nav/domain_nav.css | 4 + .../custom/domain/domain_nav/domain_nav.info | 13 + .../domain/domain_nav/domain_nav.install | 30 + .../domain/domain_nav/domain_nav.module | 330 + .../custom/domain/domain_settings/README.txt | 168 + .../domain_settings/domain_settings.info | 13 + .../domain_settings/domain_settings.install | 23 + .../domain_settings/domain_settings.module | 386 + .../custom/domain/domain_source/README.txt | 168 + .../domain_source/domain_source.domain.inc | 52 + .../domain/domain_source/domain_source.info | 14 + .../domain_source/domain_source.install | 46 + .../domain/domain_source/domain_source.module | 441 + .../domain_source/domain_source.views.inc | 78 + ...domain_source_handler_filter_domain_id.inc | 29 + .../domain_source/tests/domain_source.test | 129 + .../custom/domain/domain_strict/README.txt | 78 + .../domain/domain_strict/domain_strict.info | 13 + .../domain/domain_strict/domain_strict.module | 42 + .../domain/domain_strict/domain_strict.test | 39 + .../custom/domain/domain_theme/README.txt | 208 + .../domain_theme/domain_theme.admin.inc | 409 + .../domain_theme/domain_theme.domain.inc | 104 + .../domain_theme/domain_theme.features.inc | 118 + .../domain/domain_theme/domain_theme.info | 12 + .../domain/domain_theme/domain_theme.install | 55 + .../domain/domain_theme/domain_theme.module | 331 + sites/all/modules/custom/domain/settings.inc | 21 + .../custom/domain/settings_custom_url.inc | 138 + sites/all/modules/custom/domain/tests/200.png | Bin 0 -> 593 bytes .../modules/custom/domain/tests/domain.test | 1271 ++ .../domain/tests/domain_test.domain.inc | 135 + .../custom/domain/tests/domain_test.info | 15 + .../custom/domain/tests/domain_test.module | 62 + .../modules/custom/draggableviews/LICENSE.txt | 339 + .../modules/custom/draggableviews/README.txt | 60 + .../css/draggableviews_list.css | 24 + .../draggableviews/draggableviews.api.php | 24 + .../custom/draggableviews/draggableviews.info | 22 + .../draggableviews/draggableviews.install | 87 + .../draggableviews/draggableviews.module | 333 + .../draggableviews/draggableviews.rules.inc | 30 + .../handlers/draggableviews_handler.inc | 54 + .../draggableviews_handler_fieldapi.inc | 123 + .../draggableviews_handler_native.inc | 65 + .../draggableviews/js/draggableviews_list.js | 45 + .../draggableviews/test/draggableviews.test | 425 + .../draggableviews_test.info | 12 + .../draggableviews_test.module | 11 + .../draggableviews_test.views_default.inc | 248 + .../views/draggableviews.views.inc | 44 + ...draggableviews_handler_field_draggable.inc | 141 + .../views/draggableviews_handler_sort.inc | 138 + .../views/draggableviews_join_handler.inc | 72 + sites/all/modules/custom/ds/LICENSE.txt | 339 + sites/all/modules/custom/ds/README.txt | 57 + sites/all/modules/custom/ds/css/ds.admin.css | 193 + .../all/modules/custom/ds/drush/ds.drush.inc | 218 + .../custom/ds/drush/example_layout/README.txt | 2 + .../example_layout/example-layout.tpl.php | 49 + .../example_layout/example_layout-rtl.css | 12 + .../drush/example_layout/example_layout.css | 14 + .../drush/example_layout/example_layout.inc | 20 + .../drush/example_layout/example_layout.png | Bin 0 -> 760 bytes sites/all/modules/custom/ds/ds.api.php | 616 + .../modules/custom/ds/ds.ds_fields_info.inc | 421 + sites/all/modules/custom/ds/ds.info | 21 + sites/all/modules/custom/ds/ds.install | 293 + sites/all/modules/custom/ds/ds.module | 1319 ++ sites/all/modules/custom/ds/ds.views.inc | 45 + sites/all/modules/custom/ds/images/arrow.png | Bin 0 -> 731 bytes .../all/modules/custom/ds/images/preview.png | Bin 0 -> 1851 bytes .../custom/ds/includes/ds.contextual.inc | 51 + .../custom/ds/includes/ds.displays.inc | 167 + .../custom/ds/includes/ds.field_ui.inc | 2590 +++ .../custom/ds/includes/ds.registry.inc | 590 + .../custom/ds/includes/ds.revision.inc | 25 + sites/all/modules/custom/ds/js/ds.admin.js | 118 + .../custom/ds/layouts/ds_1col/ds-1col.tpl.php | 19 + .../custom/ds/layouts/ds_1col/ds_1col.png | Bin 0 -> 787 bytes .../ds_1col_wrapper/ds-1col-wrapper.tpl.php | 22 + .../ds_1col_wrapper/ds_1col_wrapper.png | Bin 0 -> 787 bytes .../custom/ds/layouts/ds_2col/ds-2col.tpl.php | 26 + .../custom/ds/layouts/ds_2col/ds_2col-rtl.css | 12 + .../custom/ds/layouts/ds_2col/ds_2col.css | 14 + .../custom/ds/layouts/ds_2col/ds_2col.png | Bin 0 -> 760 bytes .../ds_2col_fluid/ds-2col-fluid.tpl.php | 35 + .../ds_2col_fluid/ds_2col_fluid-rtl.css | 12 + .../layouts/ds_2col_fluid/ds_2col_fluid.css | 20 + .../layouts/ds_2col_fluid/ds_2col_fluid.png | Bin 0 -> 1127 bytes .../ds_2col_stacked/ds-2col-stacked.tpl.php | 34 + .../ds_2col_stacked/ds_2col_stacked-rtl.css | 12 + .../ds_2col_stacked/ds_2col_stacked.css | 21 + .../ds_2col_stacked/ds_2col_stacked.png | Bin 0 -> 890 bytes .../ds-2col-stacked-fluid.tpl.php | 43 + .../ds_2col_stacked_fluid-rtl.css | 12 + .../ds_2col_stacked_fluid.css | 27 + .../ds_2col_stacked_fluid.png | Bin 0 -> 1552 bytes .../custom/ds/layouts/ds_3col/ds-3col.tpl.php | 30 + .../custom/ds/layouts/ds_3col/ds_3col-rtl.css | 16 + .../custom/ds/layouts/ds_3col/ds_3col.css | 19 + .../custom/ds/layouts/ds_3col/ds_3col.png | Bin 0 -> 772 bytes .../ds-3col-equal-width.tpl.php | 30 + .../ds_3col_equal_width-rtl.css | 16 + .../ds_3col_equal_width.css | 19 + .../ds_3col_equal_width.png | Bin 0 -> 766 bytes .../ds_3col_stacked/ds-3col-stacked.tpl.php | 38 + .../ds_3col_stacked/ds_3col_stacked-rtl.css | 16 + .../ds_3col_stacked/ds_3col_stacked.css | 27 + .../ds_3col_stacked/ds_3col_stacked.png | Bin 0 -> 862 bytes .../ds-3col-stacked-equal-width.tpl.php | 38 + .../ds_3col_stacked_equal_width-rtl.css | 16 + .../ds_3col_stacked_equal_width.css | 27 + .../ds_3col_stacked_equal_width.png | Bin 0 -> 808 bytes .../ds-3col-stacked-fluid.tpl.php | 50 + .../ds_3col_stacked_fluid-rtl.css | 16 + .../ds_3col_stacked_fluid.css | 35 + .../ds_3col_stacked_fluid.png | Bin 0 -> 1565 bytes .../custom/ds/layouts/ds_4col/ds-4col.tpl.php | 34 + .../custom/ds/layouts/ds_4col/ds_4col-rtl.css | 20 + .../custom/ds/layouts/ds_4col/ds_4col.css | 24 + .../custom/ds/layouts/ds_4col/ds_4col.png | Bin 0 -> 781 bytes .../ds/layouts/ds_reset/ds-reset.tpl.php | 11 + .../custom/ds/layouts/ds_reset/ds_reset.png | Bin 0 -> 1276 bytes .../custom/ds/modules/ds_devel/ds_devel.info | 13 + .../ds/modules/ds_devel/ds_devel.module | 46 + .../custom/ds/modules/ds_extras/README.txt | 20 + .../ds_extras/ds_extras.ds_fields_info.inc | 109 + .../ds/modules/ds_extras/ds_extras.info | 13 + .../ds/modules/ds_extras/ds_extras.install | 135 + .../ds/modules/ds_extras/ds_extras.module | 1030 ++ .../ds_extras/includes/ds_extras.admin.inc | 660 + .../ds_extras/includes/ds_extras.pages.inc | 72 + .../ds_extras/includes/ds_extras.registry.inc | 141 + .../ds_extras/includes/ds_extras.vd.inc | 274 + .../modules/ds_extras/js/ds_extras.admin.js | 126 + .../ds/modules/ds_extras/js/ds_extras.js | 59 + .../ds/modules/ds_format/ds_format.info | 13 + .../ds/modules/ds_format/ds_format.install | 46 + .../ds/modules/ds_format/ds_format.module | 75 + .../modules/ds_forms/css/ds_forms.admin.css | 6 + .../custom/ds/modules/ds_forms/ds_forms.info | 12 + .../ds/modules/ds_forms/ds_forms.install | 16 + .../ds/modules/ds_forms/ds_forms.module | 239 + .../ds/modules/ds_forms/js/ds_forms.admin.js | 79 + .../modules/ds_search/css/ds_search.theme.css | 4 + .../ds/modules/ds_search/ds_search.info | 13 + .../ds/modules/ds_search/ds_search.install | 32 + .../ds/modules/ds_search/ds_search.module | 759 + .../ds_search/includes/ds_search.admin.inc | 362 + .../ds/modules/ds_search/js/ds_search.js | 69 + .../custom/ds/modules/ds_ui/ds_ui.info | 12 + .../custom/ds/modules/ds_ui/ds_ui.module | 170 + .../ds/modules/ds_ui/includes/ds.classes.inc | 43 + .../ds/modules/ds_ui/includes/ds.fields.inc | 555 + .../modules/ds_ui/includes/ds.view_modes.inc | 277 + .../ds/plugins/content_types/dsc/dsc.inc | 91 + .../all/modules/custom/ds/tests/ds.base.test | 874 + .../modules/custom/ds/tests/ds.entities.test | 678 + .../custom/ds/tests/ds.exportables.test | 160 + .../all/modules/custom/ds/tests/ds.forms.test | 63 + .../modules/custom/ds/tests/ds.search.test | 158 + .../all/modules/custom/ds/tests/ds.views.test | 167 + .../ds_exportables_test.info | 12 + .../ds_exportables_test.module | 146 + .../all/modules/custom/ds/tests/ds_test.info | 13 + .../modules/custom/ds/tests/ds_test.module | 279 + .../custom/ds/tests/ds_test.views_default.inc | 361 + .../ds/tests/dstest_1col/dstest-1col.tpl.php | 15 + .../ds/tests/dstest_2col/dstest-2col.tpl.php | 26 + .../ds/tests/dstest_2col/dstest_2col.css | 10 + .../custom/ds/views/ds-row-fields.tpl.php | 10 + .../ds/views/views_plugin_ds_entity_view.inc | 565 + .../ds/views/views_plugin_ds_fields_view.inc | 148 + sites/all/modules/custom/entity/LICENSE.txt | 339 + sites/all/modules/custom/entity/README.txt | 156 + .../ctools/content_types/entity_view.inc | 133 + .../all/modules/custom/entity/entity.api.php | 467 + .../modules/custom/entity/entity.features.inc | 178 + .../all/modules/custom/entity/entity.i18n.inc | 210 + sites/all/modules/custom/entity/entity.info | 33 + .../all/modules/custom/entity/entity.info.inc | 264 + .../all/modules/custom/entity/entity.install | 134 + sites/all/modules/custom/entity/entity.module | 1569 ++ .../modules/custom/entity/entity.rules.inc | 118 + sites/all/modules/custom/entity/entity.test | 2050 +++ .../modules/custom/entity/entity_token.info | 13 + .../modules/custom/entity/entity_token.module | 6 + .../custom/entity/entity_token.tokens.inc | 343 + .../entity/includes/entity.controller.inc | 981 + .../modules/custom/entity/includes/entity.inc | 320 + .../entity/includes/entity.property.inc | 657 + .../custom/entity/includes/entity.ui.inc | 767 + .../custom/entity/includes/entity.wrapper.inc | 1216 ++ .../custom/entity/modules/book.info.inc | 30 + .../custom/entity/modules/callbacks.inc | 1075 ++ .../custom/entity/modules/comment.info.inc | 172 + .../custom/entity/modules/field.info.inc | 170 + .../custom/entity/modules/locale.info.inc | 40 + .../custom/entity/modules/node.info.inc | 166 + .../custom/entity/modules/poll.info.inc | 50 + .../custom/entity/modules/statistics.info.inc | 40 + .../custom/entity/modules/system.info.inc | 132 + .../custom/entity/modules/taxonomy.info.inc | 124 + .../custom/entity/modules/user.info.inc | 110 + .../custom/entity/tests/entity_feature.info | 14 + .../custom/entity/tests/entity_feature.module | 32 + .../custom/entity/tests/entity_test.info | 15 + .../custom/entity/tests/entity_test.install | 164 + .../custom/entity/tests/entity_test.module | 287 + .../custom/entity/tests/entity_test_i18n.info | 13 + .../entity/tests/entity_test_i18n.module | 53 + .../custom/entity/theme/entity.theme.css | 4 + .../custom/entity/theme/entity.theme.inc | 212 + .../custom/entity/theme/entity.tpl.php | 48 + .../custom/entity/views/entity.views.inc | 701 + .../views/entity_views_example_query.php | 88 + .../entity_views_field_handler_helper.inc | 527 + .../entity_views_handler_area_entity.inc | 120 + .../entity_views_handler_field_boolean.inc | 99 + .../entity_views_handler_field_date.inc | 99 + .../entity_views_handler_field_duration.inc | 132 + .../entity_views_handler_field_entity.inc | 207 + .../entity_views_handler_field_field.inc | 105 + .../entity_views_handler_field_numeric.inc | 99 + .../entity_views_handler_field_options.inc | 120 + .../entity_views_handler_field_text.inc | 101 + .../entity_views_handler_field_uri.inc | 99 + .../entity_views_handler_relationship.inc | 51 + ...y_views_handler_relationship_by_bundle.inc | 117 + .../entity_views_plugin_row_entity_view.inc | 95 + .../EntityDependencyIterator.inc | 284 + .../EntityDependencyIteratorInterface.inc | 9 + .../custom/entity_dependency/LICENSE.txt | 339 + .../custom/entity_dependency/README.txt | 32 + .../entity_dependency.api.php | 70 + .../entity_dependency.core.inc | 174 + .../entity_dependency/entity_dependency.info | 14 + .../entity_dependency.module | 128 + .../entity_dependency/entity_dependency.test | 280 + .../custom/entityreference/LICENSE.txt | 339 + .../modules/custom/entityreference/README.txt | 16 + .../entityreference/entityreference.admin.css | 4 + .../entityreference.devel_generate.inc | 28 + .../entityreference/entityreference.diff.inc | 90 + .../entityreference/entityreference.feeds.inc | 171 + .../entityreference/entityreference.info | 31 + .../entityreference/entityreference.install | 164 + .../entityreference.migrate.inc | 27 + .../entityreference/entityreference.module | 1294 ++ .../entityreference_behavior_example.info | 12 + .../entityreference_behavior_example.module | 15 + ...ityReferenceFieldBehaviorExample.class.php | 31 + ...ReferenceInstanceBehaviorExample.class.php | 31 + .../plugins/behavior/test_field_behavior.inc | 8 + .../behavior/test_instance_behavior.inc | 8 + ...yReferenceBehavior_TaxonomyIndex.class.php | 189 + ...erenceBehavior_ViewsFilterSelect.class.php | 18 + .../plugins/behavior/abstract.inc | 214 + .../plugins/behavior/taxonomy-index.inc | 16 + .../plugins/behavior/views-select-list.inc | 10 + ...ference_SelectionHandler_Generic.class.php | 554 + ...Reference_SelectionHandler_Views.class.php | 193 + .../plugins/selection/abstract.inc | 113 + .../plugins/selection/base.inc | 7 + .../plugins/selection/views.inc | 9 + .../tests/entityreference.admin.test | 114 + .../tests/entityreference.feeds.test | 248 + .../tests/entityreference.handlers.test | 597 + .../tests/entityreference.taxonomy.test | 115 + .../entityreference/tests/feeds_test.csv | 3 + .../entityreference_feeds_test.info | 16 + .../entityreference_feeds_test.module | 104 + .../views/entityreference.views.inc | 147 + .../views/entityreference_plugin_display.inc | 125 + .../entityreference_plugin_row_fields.inc | 36 + .../views/entityreference_plugin_style.inc | 64 + sites/all/modules/custom/eva/LICENSE.txt | 339 + sites/all/modules/custom/eva/README.txt | 52 + .../eva/eva-display-entity-view.tpl.php | 84 + sites/all/modules/custom/eva/eva.info | 14 + sites/all/modules/custom/eva/eva.module | 244 + sites/all/modules/custom/eva/eva.theme.inc | 18 + sites/all/modules/custom/eva/eva.views.inc | 24 + .../custom/eva/eva_plugin_display_entity.inc | 292 + sites/all/modules/custom/features/API.txt | 189 + .../all/modules/custom/features/CHANGELOG.txt | 221 + sites/all/modules/custom/features/LICENSE.txt | 339 + sites/all/modules/custom/features/README.txt | 236 + .../custom/features/features.admin.inc | 1589 ++ .../modules/custom/features/features.api.php | 532 + .../all/modules/custom/features/features.css | 579 + .../custom/features/features.drush.inc | 915 + .../custom/features/features.export.inc | 1012 ++ .../all/modules/custom/features/features.info | 14 + .../modules/custom/features/features.install | 128 + sites/all/modules/custom/features/features.js | 429 + .../modules/custom/features/features.module | 1202 ++ .../features/includes/features.block.inc | 40 + .../features/includes/features.context.inc | 54 + .../features/includes/features.ctools.inc | 378 + .../features/includes/features.features.inc | 73 + .../features/includes/features.field.inc | 530 + .../features/includes/features.filter.inc | 120 + .../features/includes/features.image.inc | 101 + .../features/includes/features.locale.inc | 162 + .../features/includes/features.menu.inc | 427 + .../features/includes/features.node.inc | 163 + .../features/includes/features.taxonomy.inc | 105 + .../features/includes/features.user.inc | 290 + .../custom/features/tests/features.test | 289 + .../features_test.features.field_base.inc | 43 + .../features_test.features.field_instance.inc | 76 + .../features_test.features.filter.inc | 56 + .../features_test/features_test.features.inc | 72 + .../features_test.features.taxonomy.inc | 36 + ...features_test.features.user_permission.inc | 24 + .../tests/features_test/features_test.info | 29 + .../tests/features_test/features_test.module | 3 + .../features_test.views_default.inc | 38 + .../theme/features-admin-components.tpl.php | 23 + .../modules/custom/features/theme/theme.inc | 362 + .../modules/custom/field_group/CHANGELOG.txt | 51 + .../modules/custom/field_group/LICENSE.txt | 339 + .../all/modules/custom/field_group/README.txt | 47 + .../custom/field_group/field_group-rtl.css | 7 + .../custom/field_group/field_group.api.php | 460 + .../custom/field_group/field_group.css | 23 + .../field_group/field_group.features.inc | 70 + .../field_group/field_group.field_ui.css | 14 + .../field_group/field_group.field_ui.inc | 1013 ++ .../field_group/field_group.field_ui.js | 137 + .../custom/field_group/field_group.info | 14 + .../custom/field_group/field_group.install | 363 + .../modules/custom/field_group/field_group.js | 225 + .../custom/field_group/field_group.module | 2169 +++ .../horizontal-tabs/horizontal-tabs-rtl.css | 15 + .../horizontal-tabs/horizontal-tabs.css | 101 + .../horizontal-tabs/horizontal-tabs.js | 204 + .../field_group/multipage/multipage-rtl.css | 13 + .../field_group/multipage/multipage.css | 128 + .../custom/field_group/multipage/multipage.js | 269 + .../tests/field_group.display.test | 416 + .../field_group/tests/field_group.ui.test | 109 + .../field_group/tests/field_group_test.info | 13 + .../field_group/tests/field_group_test.module | 17 + .../custom/fieldable_panels_panes/LICENSE.txt | 339 + .../custom/fieldable_panels_panes/README.txt | 28 + .../fieldable-panels-pane.tpl.php | 4 + .../fieldable_panels_panes.info | 29 + .../fieldable_panels_panes.install | 250 + .../fieldable_panels_panes.module | 1034 ++ .../includes/PanelsPaneController.class.php | 325 + .../fieldable_panels_panes/includes/admin.inc | 248 + ...nslation.handler.fieldable_panels_pane.inc | 31 + .../content_types/fieldable_panels_pane.inc | 310 + .../FieldablePanelsPaneEntity.class.php | 40 + .../plugins/entity/fieldable_panels_pane.inc | 17 + .../views/fieldable_panels_panes.views.inc | 394 + .../fieldable_panels_panes.views_default.inc | 355 + ...e_panels_panes_handler_argument_bundle.inc | 29 + ...able_panels_panes_handler_field_bundle.inc | 42 + ...nels_panes_handler_field_delete_entity.inc | 27 + ...ls_panes_handler_field_delete_revision.inc | 27 + ...panels_panes_handler_field_edit_entity.inc | 27 + ...nels_panes_handler_field_edit_revision.inc | 27 + ..._panels_panes_handler_field_is_current.inc | 78 + ...anels_panes_handler_field_make_current.inc | 28 + ...panels_panes_handler_field_view_entity.inc | 48 + ...nels_panes_handler_field_view_revision.inc | 76 + ...ble_panels_panes_handler_filter_bundle.inc | 17 + .../modules/custom/file_entity/LICENSE.txt | 339 + .../file.admin-content-file.inc | 339 + .../custom/file_entity/file_entity.admin.inc | 1121 ++ .../custom/file_entity/file_entity.admin.js | 44 + .../custom/file_entity/file_entity.api.php | 407 + .../custom/file_entity/file_entity.field.inc | 402 + .../custom/file_entity/file_entity.file.inc | 303 + .../file_entity/file_entity.file_api.inc | 791 + .../file_entity.file_default_displays.inc | 174 + .../custom/file_entity/file_entity.info | 33 + .../custom/file_entity/file_entity.install | 1072 ++ .../modules/custom/file_entity/file_entity.js | 16 + .../custom/file_entity/file_entity.module | 2560 +++ .../custom/file_entity/file_entity.pages.inc | 1172 ++ .../file_entity/file_entity.pathauto.inc | 84 + .../custom/file_entity/file_entity.test | 1313 ++ .../custom/file_entity/file_entity.theme.inc | 162 + .../custom/file_entity/file_entity.tokens.inc | 133 + .../custom/file_entity/file_entity.tpl.php | 95 + .../custom/file_entity/file_entity.views.inc | 164 + .../plugins/content_types/file_content.inc | 92 + .../plugins/content_types/file_display.inc | 142 + .../file_entity/tests/file_entity_test.info | 13 + .../file_entity/tests/file_entity_test.module | 15 + .../tests/file_entity_test.pages.inc | 6 + .../views_handler_argument_file_type.inc | 39 + .../views_handler_field_file_filename.inc | 52 + .../views/views_handler_field_file_link.inc | 48 + .../views_handler_field_file_link_delete.inc | 31 + ...views_handler_field_file_link_download.inc | 32 + .../views_handler_field_file_link_edit.inc | 31 + .../views_handler_field_file_link_usage.inc | 41 + .../views_handler_field_file_rendered.inc | 45 + .../views/views_handler_field_file_type.inc | 48 + .../views/views_handler_filter_file_type.inc | 23 + .../views_handler_filter_schema_type.inc | 41 + .../views/views_plugin_row_file_rss.inc | 175 + .../views/views_plugin_row_file_view.inc | 65 + .../custom/filefield_paths/CHANGELOG.txt | 69 + .../custom/filefield_paths/LICENSE.txt | 339 + .../modules/custom/filefield_paths/README.txt | 87 + .../filefield_paths/filefield_paths.drush.inc | 160 + .../filefield_paths/filefield_paths.info | 29 + .../filefield_paths/filefield_paths.install | 192 + .../filefield_paths/filefield_paths.module | 444 + .../filefield_paths/modules/features.inc | 30 + .../custom/filefield_paths/modules/file.inc | 12 + .../modules/filefield_paths.inc | 89 + .../custom/filefield_paths/modules/image.inc | 12 + .../custom/filefield_paths/modules/token.inc | 63 + .../custom/filefield_paths/modules/video.inc | 12 + .../modules/custom/filter_perms/LICENSE.txt | 339 + .../custom/filter_perms/filter_perms.css | 7 + .../custom/filter_perms/filter_perms.info | 11 + .../custom/filter_perms/filter_perms.module | 208 + sites/all/modules/custom/fitvids/LICENSE.txt | 339 + sites/all/modules/custom/fitvids/README.txt | 43 + sites/all/modules/custom/fitvids/fitvids.css | 7 + sites/all/modules/custom/fitvids/fitvids.info | 14 + .../modules/custom/fitvids/fitvids.install | 76 + sites/all/modules/custom/fitvids/fitvids.js | 58 + .../custom/fitvids/fitvids.make.example | 8 + .../all/modules/custom/fitvids/fitvids.module | 187 + sites/all/modules/custom/flag/LICENSE.txt | 339 + sites/all/modules/custom/flag/README.txt | 101 + sites/all/modules/custom/flag/flag.api.php | 394 + sites/all/modules/custom/flag/flag.flag.inc | 110 + sites/all/modules/custom/flag/flag.info | 37 + sites/all/modules/custom/flag/flag.info.inc | 99 + sites/all/modules/custom/flag/flag.install | 732 + sites/all/modules/custom/flag/flag.module | 2642 +++ sites/all/modules/custom/flag/flag.rules.inc | 618 + sites/all/modules/custom/flag/flag.tokens.inc | 219 + .../all/modules/custom/flag/flag_actions.info | 15 + .../modules/custom/flag/flag_actions.install | 95 + .../modules/custom/flag/flag_actions.module | 691 + .../flag/flag_bookmark/flag_bookmark.info | 12 + .../flag/flag_bookmark/flag_bookmark.install | 67 + .../flag/flag_bookmark/flag_bookmark.module | 19 + .../includes/flag_bookmark.views_default.inc | 284 + .../custom/flag/includes/flag.actions.inc | 243 + .../custom/flag/includes/flag.admin.inc | 840 + .../flag/includes/flag.cookie_storage.inc | 170 + .../custom/flag/includes/flag.entity.inc | 24 + .../custom/flag/includes/flag.export.inc | 380 + .../custom/flag/includes/flag.features.inc | 124 + .../custom/flag/includes/flag.pages.inc | 195 + .../flag/includes/flag/flag_comment.inc | 101 + .../custom/flag/includes/flag/flag_entity.inc | 280 + .../custom/flag/includes/flag/flag_flag.inc | 1610 ++ .../custom/flag/includes/flag/flag_node.inc | 127 + .../custom/flag/includes/flag/flag_user.inc | 97 + .../custom/flag/includes/views/flag.views.inc | 272 + .../includes/views/flag.views_convert.inc | 240 + .../views/flag_handler_argument_entity_id.inc | 47 + .../views/flag_handler_field_flagged.inc | 36 + .../includes/views/flag_handler_field_ops.inc | 167 + .../views/flag_handler_filter_flagged.inc | 37 + .../views/flag_handler_relationships.inc | 266 + .../views/flag_handler_sort_flagged.inc | 48 + ..._plugin_argument_validate_flaggability.inc | 229 + .../flag_is_flagged/flag_is_flagged.inc | 123 + .../content_types/flag_link/flag_link.inc | 118 + sites/all/modules/custom/flag/tests/flag.test | 1658 ++ .../flag_fields_test/flag_fields_test.info | 12 + .../flag_fields_test/flag_fields_test.install | 67 + .../flag_fields_test/flag_fields_test.module | 45 + .../tests/flag_hook_test/flag_hook_test.info | 13 + .../flag_hook_test/flag_hook_test.module | 184 + .../tests/flagaccesstest/flagaccesstest.info | 13 + .../flagaccesstest/flagaccesstest.module | 26 + .../all/modules/custom/flag/theme/README.txt | 36 + .../modules/custom/flag/theme/flag-admin.css | 25 + .../modules/custom/flag/theme/flag-admin.js | 64 + .../custom/flag/theme/flag-throbber.gif | Bin 0 -> 2196 bytes sites/all/modules/custom/flag/theme/flag.css | 44 + sites/all/modules/custom/flag/theme/flag.js | 233 + .../modules/custom/flag/theme/flag.tpl.php | 64 + .../custom/google_analytics/LICENSE.txt | 339 + .../custom/google_analytics/README.txt | 79 + .../googleanalytics.admin.inc | 868 + .../google_analytics/googleanalytics.admin.js | 131 + .../google_analytics/googleanalytics.debug.js | 183 + .../google_analytics/googleanalytics.info | 13 + .../google_analytics/googleanalytics.install | 537 + .../google_analytics/googleanalytics.js | 165 + .../google_analytics/googleanalytics.module | 670 + .../google_analytics/googleanalytics.test | 721 + .../google_analytics/googleanalytics.test.js | 119 + .../googleanalytics.tokens.inc | 55 + .../googleanalytics.variable.inc | 51 + .../all/modules/custom/hms_field/LICENSE.txt | 339 + .../hms_field/hms_field.devel_generate.inc | 27 + .../custom/hms_field/hms_field.feeds.inc | 91 + .../modules/custom/hms_field/hms_field.info | 16 + .../custom/hms_field/hms_field.install | 22 + .../all/modules/custom/hms_field/hms_field.js | 133 + .../custom/hms_field/hms_field.migrate.inc | 35 + .../modules/custom/hms_field/hms_field.module | 602 + .../hms_field/views/hms_field.views.inc | 23 + .../hms_field_views_handler_filter_hms.inc | 91 + sites/all/modules/custom/honeypot/LICENSE.txt | 339 + sites/all/modules/custom/honeypot/README.txt | 43 + .../custom/honeypot/honeypot.admin.inc | 180 + .../modules/custom/honeypot/honeypot.api.php | 100 + .../all/modules/custom/honeypot/honeypot.info | 14 + .../modules/custom/honeypot/honeypot.install | 131 + .../modules/custom/honeypot/honeypot.module | 374 + .../all/modules/custom/honeypot/honeypot.test | 229 + .../all/modules/custom/jeditable/LICENSE.txt | 339 + sites/all/modules/custom/jeditable/README.txt | 41 + .../custom/jeditable/drupal_jeditable.js | 26 + .../jeditable/includes/jeditable.views.inc | 63 + .../views_handler_field_jeditable.inc | 48 + .../modules/custom/jeditable/jeditable.css | 11 + .../modules/custom/jeditable/jeditable.info | 15 + .../modules/custom/jeditable/jeditable.module | 529 + .../custom/job_scheduler/CHANGELOG.txt | 33 + .../custom/job_scheduler/JobScheduler.inc | 226 + .../job_scheduler/JobSchedulerCronTab.inc | 279 + .../modules/custom/job_scheduler/LICENSE.txt | 339 + .../modules/custom/job_scheduler/README.txt | 132 + .../job_scheduler/job_scheduler.api.php | 50 + .../custom/job_scheduler/job_scheduler.info | 15 + .../job_scheduler/job_scheduler.install | 180 + .../custom/job_scheduler/job_scheduler.module | 158 + .../modules/job_scheduler_trigger/README.md | 11 + .../job_scheduler_trigger.admin.inc | 157 + .../job_scheduler_trigger.info | 12 + .../job_scheduler_trigger.install | 54 + .../job_scheduler_trigger.module | 126 + sites/all/modules/custom/jplayer/LICENSE.txt | 339 + sites/all/modules/custom/jplayer/README.txt | 118 + .../custom/jplayer/includes/jplayer.admin.inc | 142 + .../custom/jplayer/includes/jplayer.theme.inc | 264 + .../custom/jplayer/includes/jplayer.views.inc | 27 + .../jplayer/includes/jplayer_style_plugin.inc | 162 + sites/all/modules/custom/jplayer/jplayer.info | 22 + .../modules/custom/jplayer/jplayer.install | 111 + .../all/modules/custom/jplayer/jplayer.module | 369 + .../jplayer_protect/jplayer-protect.js | 217 + .../jplayer_protect/jplayer_protect.admin.inc | 93 + .../jplayer_protect/jplayer_protect.info | 16 + .../jplayer_protect/jplayer_protect.install | 85 + .../jplayer_protect/jplayer_protect.module | 206 + .../modules/custom/jplayer/theme/THEMING.txt | 16 + .../jplayer/theme/jplayer.blue.monday.jpg | Bin 0 -> 14525 bytes .../jplayer.blue.monday.video.play.hover.png | Bin 0 -> 6978 bytes .../theme/jplayer.blue.monday.video.play.png | Bin 0 -> 6877 bytes .../modules/custom/jplayer/theme/jplayer.css | 448 + .../modules/custom/jplayer/theme/jplayer.js | 186 + .../custom/jplayer/theme/jplayer.tpl.php | 53 + .../modules/custom/jplayer/theme/pbar-ani.gif | Bin 0 -> 304064 bytes .../modules/custom/jquery_update/LICENSE.txt | 339 + .../modules/custom/jquery_update/README.txt | 37 + .../custom/jquery_update/jquery_update.info | 15 + .../jquery_update/jquery_update.install | 49 + .../custom/jquery_update/jquery_update.module | 494 + .../custom/jquery_update/js/jquery_update.js | 7 + .../replace/jquery/1.10/jquery-1.10.2.min.map | 1 + .../replace/jquery/1.10/jquery.js | 9789 ++++++++++ .../replace/jquery/1.10/jquery.min.js | 6 + .../replace/jquery/1.5/jquery.js | 8316 +++++++++ .../replace/jquery/1.5/jquery.min.js | 16 + .../replace/jquery/1.7/jquery.js | 9266 ++++++++++ .../replace/jquery/1.7/jquery.min.js | 4 + .../replace/jquery/1.8/jquery.js | 9440 ++++++++++ .../replace/jquery/1.8/jquery.min.js | 2 + .../replace/jquery/1.9/jquery.js | 9597 ++++++++++ .../replace/jquery/1.9/jquery.min.js | 5 + .../replace/jquery/1.9/jquery.min.map | 1 + .../replace/misc/1.9/jquery.ba-bbq.js | 1287 ++ .../replace/misc/1.9/jquery.ba-bbq.min.js | 1 + .../replace/misc/1.9/overlay-parent.diff.js | 55 + .../replace/misc/1.9/overlay-parent.js | 993 + .../jquery_update/replace/misc/jquery.form.js | 815 + .../replace/misc/jquery.form.min.js | 11 + .../jquery_update/replace/ui/AUTHORS.txt | 242 + .../ui/external/globalize.culture.de-DE.js | 81 + .../ui/external/globalize.culture.ja-JP.js | 100 + .../replace/ui/external/globalize.js | 1573 ++ .../ui/external/jquery.bgiframe-2.1.2.js | 39 + .../replace/ui/external/jquery.cookie.js | 89 + .../replace/ui/external/jquery.metadata.js | 122 + .../replace/ui/external/jquery.mousewheel.js | 101 + .../replace/ui/external/jshint.js | 4835 +++++ .../replace/ui/external/qunit.css | 244 + .../replace/ui/external/qunit.js | 2152 +++ .../themes/base/images/animated-overlay.gif | Bin 0 -> 1738 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../base/images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../replace/ui/themes/base/jquery-ui.css | 1186 ++ .../ui/themes/base/jquery.ui.accordion.css | 38 + .../replace/ui/themes/base/jquery.ui.all.css | 12 + .../ui/themes/base/jquery.ui.autocomplete.css | 16 + .../replace/ui/themes/base/jquery.ui.base.css | 25 + .../ui/themes/base/jquery.ui.button.css | 114 + .../replace/ui/themes/base/jquery.ui.core.css | 93 + .../ui/themes/base/jquery.ui.datepicker.css | 178 + .../ui/themes/base/jquery.ui.dialog.css | 69 + .../replace/ui/themes/base/jquery.ui.menu.css | 77 + .../ui/themes/base/jquery.ui.progressbar.css | 28 + .../ui/themes/base/jquery.ui.resizable.css | 78 + .../ui/themes/base/jquery.ui.selectable.css | 15 + .../ui/themes/base/jquery.ui.slider.css | 73 + .../ui/themes/base/jquery.ui.spinner.css | 65 + .../replace/ui/themes/base/jquery.ui.tabs.css | 52 + .../ui/themes/base/jquery.ui.theme.css | 406 + .../ui/themes/base/jquery.ui.tooltip.css | 19 + .../base/minified/images/animated-overlay.gif | Bin 0 -> 1738 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../ui/themes/base/minified/jquery-ui.min.css | 4 + .../base/minified/jquery.ui.accordion.min.css | 5 + .../minified/jquery.ui.autocomplete.min.css | 5 + .../base/minified/jquery.ui.button.min.css | 5 + .../base/minified/jquery.ui.core.min.css | 5 + .../minified/jquery.ui.datepicker.min.css | 5 + .../base/minified/jquery.ui.dialog.min.css | 5 + .../base/minified/jquery.ui.menu.min.css | 5 + .../minified/jquery.ui.progressbar.min.css | 5 + .../base/minified/jquery.ui.resizable.min.css | 5 + .../minified/jquery.ui.selectable.min.css | 5 + .../base/minified/jquery.ui.slider.min.css | 5 + .../base/minified/jquery.ui.spinner.min.css | 5 + .../base/minified/jquery.ui.tabs.min.css | 5 + .../base/minified/jquery.ui.theme.min.css | 5 + .../base/minified/jquery.ui.tooltip.min.css | 5 + .../jquery_update/replace/ui/ui/.jshintrc | 18 + .../replace/ui/ui/i18n/jquery-ui-i18n.js | 1793 ++ .../ui/ui/i18n/jquery.ui.datepicker-af.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-ar-DZ.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-ar.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-az.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-be.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-bg.js | 24 + .../ui/ui/i18n/jquery.ui.datepicker-bs.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-ca.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-cs.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-cy-GB.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-da.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-de.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-el.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-en-AU.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-en-GB.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-en-NZ.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-eo.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-es.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-et.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-eu.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-fa.js | 59 + .../ui/ui/i18n/jquery.ui.datepicker-fi.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-fo.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-fr-CA.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-fr-CH.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-fr.js | 25 + .../ui/ui/i18n/jquery.ui.datepicker-gl.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-he.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-hi.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-hr.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-hu.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-hy.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-id.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-is.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-it.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-ja.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-ka.js | 21 + .../ui/ui/i18n/jquery.ui.datepicker-kk.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-km.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-ko.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-ky.js | 24 + .../ui/ui/i18n/jquery.ui.datepicker-lb.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-lt.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-lv.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-mk.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-ml.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-ms.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-nb.js | 22 + .../ui/ui/i18n/jquery.ui.datepicker-nl-BE.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-nl.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-nn.js | 22 + .../ui/ui/i18n/jquery.ui.datepicker-no.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-pl.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-pt-BR.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-pt.js | 22 + .../ui/ui/i18n/jquery.ui.datepicker-rm.js | 21 + .../ui/ui/i18n/jquery.ui.datepicker-ro.js | 26 + .../ui/ui/i18n/jquery.ui.datepicker-ru.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-sk.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-sl.js | 24 + .../ui/ui/i18n/jquery.ui.datepicker-sq.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-sr-SR.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-sr.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-sv.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-ta.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-th.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-tj.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-tr.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-uk.js | 24 + .../ui/ui/i18n/jquery.ui.datepicker-vi.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-zh-CN.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-zh-HK.js | 23 + .../ui/ui/i18n/jquery.ui.datepicker-zh-TW.js | 23 + .../jquery_update/replace/ui/ui/jquery-ui.js | 14987 ++++++++++++++++ .../replace/ui/ui/jquery.ui.accordion.js | 572 + .../replace/ui/ui/jquery.ui.autocomplete.js | 610 + .../replace/ui/ui/jquery.ui.button.js | 419 + .../replace/ui/ui/jquery.ui.core.js | 320 + .../replace/ui/ui/jquery.ui.datepicker.js | 2050 +++ .../replace/ui/ui/jquery.ui.dialog.js | 808 + .../replace/ui/ui/jquery.ui.draggable.js | 933 + .../replace/ui/ui/jquery.ui.droppable.js | 372 + .../replace/ui/ui/jquery.ui.effect-blind.js | 82 + .../replace/ui/ui/jquery.ui.effect-bounce.js | 113 + .../replace/ui/ui/jquery.ui.effect-clip.js | 67 + .../replace/ui/ui/jquery.ui.effect-drop.js | 65 + .../replace/ui/ui/jquery.ui.effect-explode.js | 97 + .../replace/ui/ui/jquery.ui.effect-fade.js | 30 + .../replace/ui/ui/jquery.ui.effect-fold.js | 76 + .../ui/ui/jquery.ui.effect-highlight.js | 50 + .../replace/ui/ui/jquery.ui.effect-pulsate.js | 63 + .../replace/ui/ui/jquery.ui.effect-scale.js | 318 + .../replace/ui/ui/jquery.ui.effect-shake.js | 74 + .../replace/ui/ui/jquery.ui.effect-slide.js | 64 + .../ui/ui/jquery.ui.effect-transfer.js | 47 + .../replace/ui/ui/jquery.ui.effect.js | 1289 ++ .../replace/ui/ui/jquery.ui.menu.js | 621 + .../replace/ui/ui/jquery.ui.mouse.js | 169 + .../replace/ui/ui/jquery.ui.position.js | 497 + .../replace/ui/ui/jquery.ui.progressbar.js | 145 + .../replace/ui/ui/jquery.ui.resizable.js | 968 + .../replace/ui/ui/jquery.ui.selectable.js | 277 + .../replace/ui/ui/jquery.ui.slider.js | 672 + .../replace/ui/ui/jquery.ui.sortable.js | 1282 ++ .../replace/ui/ui/jquery.ui.spinner.js | 493 + .../replace/ui/ui/jquery.ui.tabs.js | 846 + .../replace/ui/ui/jquery.ui.tooltip.js | 402 + .../replace/ui/ui/jquery.ui.widget.js | 521 + .../ui/ui/minified/i18n/jquery-ui-i18n.min.js | 6 + .../i18n/jquery.ui.datepicker-af.min.js | 4 + .../i18n/jquery.ui.datepicker-ar-DZ.min.js | 4 + .../i18n/jquery.ui.datepicker-ar.min.js | 4 + .../i18n/jquery.ui.datepicker-az.min.js | 4 + .../i18n/jquery.ui.datepicker-be.min.js | 4 + .../i18n/jquery.ui.datepicker-bg.min.js | 4 + .../i18n/jquery.ui.datepicker-bs.min.js | 4 + .../i18n/jquery.ui.datepicker-ca.min.js | 4 + .../i18n/jquery.ui.datepicker-cs.min.js | 4 + .../i18n/jquery.ui.datepicker-cy-GB.min.js | 4 + .../i18n/jquery.ui.datepicker-da.min.js | 4 + .../i18n/jquery.ui.datepicker-de.min.js | 4 + .../i18n/jquery.ui.datepicker-el.min.js | 4 + .../i18n/jquery.ui.datepicker-en-AU.min.js | 4 + .../i18n/jquery.ui.datepicker-en-GB.min.js | 4 + .../i18n/jquery.ui.datepicker-en-NZ.min.js | 4 + .../i18n/jquery.ui.datepicker-eo.min.js | 4 + .../i18n/jquery.ui.datepicker-es.min.js | 4 + .../i18n/jquery.ui.datepicker-et.min.js | 4 + .../i18n/jquery.ui.datepicker-eu.min.js | 4 + .../i18n/jquery.ui.datepicker-fa.min.js | 4 + .../i18n/jquery.ui.datepicker-fi.min.js | 4 + .../i18n/jquery.ui.datepicker-fo.min.js | 4 + .../i18n/jquery.ui.datepicker-fr-CA.min.js | 4 + .../i18n/jquery.ui.datepicker-fr-CH.min.js | 4 + .../i18n/jquery.ui.datepicker-fr.min.js | 4 + .../i18n/jquery.ui.datepicker-gl.min.js | 4 + .../i18n/jquery.ui.datepicker-he.min.js | 4 + .../i18n/jquery.ui.datepicker-hi.min.js | 4 + .../i18n/jquery.ui.datepicker-hr.min.js | 4 + .../i18n/jquery.ui.datepicker-hu.min.js | 4 + .../i18n/jquery.ui.datepicker-hy.min.js | 4 + .../i18n/jquery.ui.datepicker-id.min.js | 4 + .../i18n/jquery.ui.datepicker-is.min.js | 4 + .../i18n/jquery.ui.datepicker-it.min.js | 4 + .../i18n/jquery.ui.datepicker-ja.min.js | 4 + .../i18n/jquery.ui.datepicker-ka.min.js | 4 + .../i18n/jquery.ui.datepicker-kk.min.js | 4 + .../i18n/jquery.ui.datepicker-km.min.js | 4 + .../i18n/jquery.ui.datepicker-ko.min.js | 4 + .../i18n/jquery.ui.datepicker-ky.min.js | 4 + .../i18n/jquery.ui.datepicker-lb.min.js | 4 + .../i18n/jquery.ui.datepicker-lt.min.js | 4 + .../i18n/jquery.ui.datepicker-lv.min.js | 4 + .../i18n/jquery.ui.datepicker-mk.min.js | 4 + .../i18n/jquery.ui.datepicker-ml.min.js | 4 + .../i18n/jquery.ui.datepicker-ms.min.js | 4 + .../i18n/jquery.ui.datepicker-nb.min.js | 4 + .../i18n/jquery.ui.datepicker-nl-BE.min.js | 4 + .../i18n/jquery.ui.datepicker-nl.min.js | 4 + .../i18n/jquery.ui.datepicker-nn.min.js | 4 + .../i18n/jquery.ui.datepicker-no.min.js | 4 + .../i18n/jquery.ui.datepicker-pl.min.js | 4 + .../i18n/jquery.ui.datepicker-pt-BR.min.js | 4 + .../i18n/jquery.ui.datepicker-pt.min.js | 4 + .../i18n/jquery.ui.datepicker-rm.min.js | 4 + .../i18n/jquery.ui.datepicker-ro.min.js | 4 + .../i18n/jquery.ui.datepicker-ru.min.js | 4 + .../i18n/jquery.ui.datepicker-sk.min.js | 4 + .../i18n/jquery.ui.datepicker-sl.min.js | 4 + .../i18n/jquery.ui.datepicker-sq.min.js | 4 + .../i18n/jquery.ui.datepicker-sr-SR.min.js | 4 + .../i18n/jquery.ui.datepicker-sr.min.js | 4 + .../i18n/jquery.ui.datepicker-sv.min.js | 4 + .../i18n/jquery.ui.datepicker-ta.min.js | 4 + .../i18n/jquery.ui.datepicker-th.min.js | 4 + .../i18n/jquery.ui.datepicker-tj.min.js | 4 + .../i18n/jquery.ui.datepicker-tr.min.js | 4 + .../i18n/jquery.ui.datepicker-uk.min.js | 4 + .../i18n/jquery.ui.datepicker-vi.min.js | 4 + .../i18n/jquery.ui.datepicker-zh-CN.min.js | 4 + .../i18n/jquery.ui.datepicker-zh-HK.min.js | 4 + .../i18n/jquery.ui.datepicker-zh-TW.min.js | 4 + .../replace/ui/ui/minified/jquery-ui.min.js | 12 + .../ui/ui/minified/jquery.ui.accordion.min.js | 4 + .../ui/minified/jquery.ui.autocomplete.min.js | 4 + .../ui/ui/minified/jquery.ui.button.min.js | 4 + .../ui/ui/minified/jquery.ui.core.min.js | 4 + .../ui/minified/jquery.ui.datepicker.min.js | 5 + .../ui/ui/minified/jquery.ui.dialog.min.js | 4 + .../ui/ui/minified/jquery.ui.draggable.min.js | 4 + .../ui/ui/minified/jquery.ui.droppable.min.js | 4 + .../ui/minified/jquery.ui.effect-blind.min.js | 4 + .../minified/jquery.ui.effect-bounce.min.js | 4 + .../ui/minified/jquery.ui.effect-clip.min.js | 4 + .../ui/minified/jquery.ui.effect-drop.min.js | 4 + .../minified/jquery.ui.effect-explode.min.js | 4 + .../ui/minified/jquery.ui.effect-fade.min.js | 4 + .../ui/minified/jquery.ui.effect-fold.min.js | 4 + .../jquery.ui.effect-highlight.min.js | 4 + .../minified/jquery.ui.effect-pulsate.min.js | 4 + .../ui/minified/jquery.ui.effect-scale.min.js | 4 + .../ui/minified/jquery.ui.effect-shake.min.js | 4 + .../ui/minified/jquery.ui.effect-slide.min.js | 4 + .../minified/jquery.ui.effect-transfer.min.js | 4 + .../ui/ui/minified/jquery.ui.effect.min.js | 4 + .../ui/ui/minified/jquery.ui.menu.min.js | 4 + .../ui/ui/minified/jquery.ui.mouse.min.js | 4 + .../ui/ui/minified/jquery.ui.position.min.js | 4 + .../ui/minified/jquery.ui.progressbar.min.js | 4 + .../ui/ui/minified/jquery.ui.resizable.min.js | 4 + .../ui/minified/jquery.ui.selectable.min.js | 4 + .../ui/ui/minified/jquery.ui.slider.min.js | 4 + .../ui/ui/minified/jquery.ui.sortable.min.js | 4 + .../ui/ui/minified/jquery.ui.spinner.min.js | 4 + .../ui/ui/minified/jquery.ui.tabs.min.js | 4 + .../ui/ui/minified/jquery.ui.tooltip.min.js | 4 + .../ui/ui/minified/jquery.ui.widget.min.js | 4 + .../jquery_update/replace/ui/version.txt | 1 + .../modules/custom/libraries/CHANGELOG.txt | 100 + .../all/modules/custom/libraries/LICENSE.txt | 339 + sites/all/modules/custom/libraries/README.txt | 37 + .../custom/libraries/libraries.api.php | 474 + .../custom/libraries/libraries.drush.inc | 151 + .../modules/custom/libraries/libraries.info | 13 + .../custom/libraries/libraries.install | 27 + .../modules/custom/libraries/libraries.module | 869 + .../custom/libraries/tests/libraries.test | 573 + .../tests/libraries/example/README.txt | 43 + .../tests/libraries/example/example_1.css | 12 + .../tests/libraries/example/example_1.js | 18 + .../tests/libraries/example/example_1.php | 15 + .../tests/libraries/example/example_2.css | 12 + .../tests/libraries/example/example_2.js | 18 + .../tests/libraries/example/example_2.php | 15 + .../tests/libraries/example/example_3.css | 12 + .../tests/libraries/example/example_3.js | 18 + .../tests/libraries/example/example_3.php | 12 + .../tests/libraries/example/example_4.css | 12 + .../tests/libraries/example/example_4.js | 18 + .../tests/libraries/example/example_4.php | 12 + .../example_info_file.libraries.info | 10 + .../libraries_test_module.css | 12 + .../libraries_test_module.inc | 11 + .../libraries_test_module.info | 13 + .../libraries_test_module.js | 18 + .../libraries_test_module.module | 626 + .../libraries_test_module_post_load.inc | 15 + .../libraries_test_theme.css | 12 + .../libraries_test_theme.inc | 11 + .../libraries_test_theme.info | 11 + .../libraries_test_theme.js | 18 + .../themes/libraries_test_theme/template.php | 36 + sites/all/modules/custom/link/LICENSE.txt | 339 + sites/all/modules/custom/link/link-rtl.css | 8 + sites/all/modules/custom/link/link.css | 8 + .../custom/link/link.devel_generate.inc | 32 + sites/all/modules/custom/link/link.diff.inc | 22 + sites/all/modules/custom/link/link.info | 26 + sites/all/modules/custom/link/link.install | 117 + .../all/modules/custom/link/link.migrate.inc | 113 + sites/all/modules/custom/link/link.module | 1441 ++ .../custom/link/tests/link.attribute.test | 494 + .../modules/custom/link/tests/link.crud.test | 72 + .../custom/link/tests/link.crud_browser.test | 315 + sites/all/modules/custom/link/tests/link.test | 51 + .../modules/custom/link/tests/link.token.test | 429 + .../custom/link/tests/link.validate.test | 494 + .../modules/custom/link/views/link.views.inc | 113 + .../link_views_handler_argument_target.inc | 149 + .../link_views_handler_filter_protocol.inc | 107 + .../all/modules/custom/masquerade/LICENSE.txt | 339 + .../all/modules/custom/masquerade/README.txt | 38 + .../modules/custom/masquerade/masquerade.info | 12 + .../custom/masquerade/masquerade.install | 183 + .../custom/masquerade/masquerade.module | 917 + .../modules/custom/masquerade/masquerade.test | 73 + sites/all/modules/custom/media/LICENSE.txt | 339 + sites/all/modules/custom/media/README.txt | 7 + sites/all/modules/custom/media/css/media.css | 147 + .../default/application-octet-stream.png | Bin 0 -> 1520 bytes .../media/images/icons/default/audio-mpeg.png | Bin 0 -> 1770 bytes .../images/icons/default/audio-x-generic.png | Bin 0 -> 1770 bytes .../images/icons/default/file-unknown.png | Bin 0 -> 1522 bytes .../images/icons/default/image-x-generic.png | Bin 0 -> 1166 bytes .../images/icons/default/video-x-generic.png | Bin 0 -> 1828 bytes .../media/includes/MediaBrowserPlugin.inc | 86 + .../includes/MediaBrowserPluginInterface.inc | 44 + .../media/includes/MediaBrowserUpload.inc | 32 + .../media/includes/MediaBrowserView.inc | 56 + .../MediaEntityTranslationHandler.inc | 63 + .../includes/MediaReadOnlyStreamWrapper.inc | 476 + .../custom/media/includes/media.admin.inc | 136 + .../custom/media/includes/media.browser.inc | 272 + .../custom/media/includes/media.fields.inc | 576 + .../custom/media/includes/media.pages.inc | 33 + .../custom/media/includes/media.theme.inc | 102 + ...dia_views_plugin_display_media_browser.inc | 19 + ...media_views_plugin_style_media_browser.inc | 55 + .../modules/custom/media/js/media.admin.js | 77 + .../modules/custom/media/js/media.browser.js | 124 + .../all/modules/custom/media/js/media.core.js | 19 + sites/all/modules/custom/media/js/media.js | 125 + .../modules/custom/media/js/media.popups.js | 384 + .../custom/media/js/plugins/media.views.js | 173 + .../custom/media/js/util/ba-debug.min.js | 12 + .../all/modules/custom/media/js/util/json2.js | 481 + .../media-views-view-media-browser.tpl.php | 23 + sites/all/modules/custom/media/media.api.php | 104 + .../media/media.file_default_displays.inc | 61 + sites/all/modules/custom/media/media.info | 32 + sites/all/modules/custom/media/media.install | 1171 ++ .../all/modules/custom/media/media.media.inc | 110 + sites/all/modules/custom/media/media.module | 1389 ++ .../all/modules/custom/media/media.views.inc | 131 + .../includes/MediaBrowserBulkUpload.inc | 30 + .../includes/media_bulk_upload.admin.inc | 155 + .../includes/media_bulk_upload.pages.inc | 95 + .../media_bulk_upload/media_bulk_upload.info | 21 + .../media_bulk_upload.install | 14 + .../media_bulk_upload.module | 203 + .../tests/media_bulk_upload.test | 105 + .../includes/MediaBrowserInternet.inc | 32 + .../includes/MediaInternetBaseHandler.inc | 77 + .../includes/MediaInternetFileHandler.inc | 67 + .../MediaInternetNoHandlerException.inc | 13 + .../MediaInternetValidationException.inc | 13 + .../media_internet/media_internet.api.php | 25 + .../media_internet/media_internet.info | 20 + .../media_internet/media_internet.install | 21 + .../media_internet/media_internet.media.inc | 35 + .../media_internet/media_internet.module | 318 + .../includes/MediaInternetTestHandler.inc | 45 + .../MediaInternetTestStreamWrapper.inc | 24 + .../media_internet/tests/media_internet.test | 173 + .../tests/media_internet_test.info | 15 + .../tests/media_internet_test.module | 50 + .../media_migrate_file_types.pages.inc | 203 + .../media_migrate_file_types.info | 16 + .../media_migrate_file_types.module | 73 + .../media_wysiwyg/css/media_wysiwyg.css | 20 + .../media_wysiwyg/images/wysiwyg-media.gif | Bin 0 -> 139 bytes .../includes/media_wysiwyg.file_usage.inc | 179 + .../includes/media_wysiwyg.filter.inc | 344 + .../includes/media_wysiwyg.pages.inc | 111 + .../includes/media_wysiwyg.uuid.inc | 88 + .../media_wysiwyg/js/media_wysiwyg.filter.js | 287 + .../js/media_wysiwyg.format_form.js | 69 + .../modules/media_wysiwyg/js/wysiwyg-media.js | 186 + .../media_wysiwyg/media_wysiwyg.api.php | 71 + .../media_wysiwyg/media_wysiwyg.ckeditor.inc | 25 + .../modules/media_wysiwyg/media_wysiwyg.info | 23 + .../media_wysiwyg/media_wysiwyg.install | 45 + .../media_wysiwyg/media_wysiwyg.module | 366 + .../modules/media_wysiwyg/media_wysiwyg.test | 101 + .../media_wysiwyg/media_wysiwyg.variable.inc | 42 + .../tests/media_wysiwyg.file_usage.test | 237 + .../tests/media_wysiwyg.macro.test | 95 + .../media_wysiwyg/wysiwyg_plugins/media.inc | 34 + .../media_ckeditor/images/icon.gif | Bin 0 -> 126 bytes .../wysiwyg_plugins/media_ckeditor/lang/en.js | 14 + .../wysiwyg_plugins/media_ckeditor/library.js | 183 + .../wysiwyg_plugins/media_ckeditor/plugin.js | 217 + .../media_wysiwyg_view_mode.admin.inc | 77 + .../media_wysiwyg_view_mode.info | 17 + .../media_wysiwyg_view_mode.install | 15 + .../media_wysiwyg_view_mode.module | 165 + .../media_wysiwyg_view_mode.test | 65 + .../media/modules/mediafield/mediafield.info | 12 + .../modules/mediafield/mediafield.install | 43 + .../modules/mediafield/mediafield.module | 323 + .../modules/mediafield/mediafield.views.inc | 25 + .../media/templates/media-dialog-page.tpl.php | 91 + .../all/modules/custom/media/tests/media.test | 1144 ++ .../custom/media/tests/media_module_test.info | 12 + .../media/tests/media_module_test.module | 64 + .../custom/media/views/media_default.view.inc | 171 + .../custom/menu_attributes/CHANGELOG.txt | 38 + .../custom/menu_attributes/LICENSE.txt | 339 + .../menu_attributes/menu_attributes.api.php | 54 + .../menu_attributes/menu_attributes.info | 14 + .../menu_attributes/menu_attributes.install | 98 + .../custom/menu_attributes/menu_attributes.js | 119 + .../menu_attributes/menu_attributes.module | 353 + .../menu_attributes/menu_attributes.test | 267 + .../modules/custom/menu_block/CHANGELOG.txt | 155 + .../all/modules/custom/menu_block/LICENSE.txt | 339 + .../all/modules/custom/menu_block/README.txt | 140 + .../menu-block-background-display-options.png | Bin 0 -> 601 bytes .../menu_block/menu-block-wrapper.tpl.php | 23 + .../custom/menu_block/menu-block.admin.css | 71 + .../modules/custom/menu_block/menu-block.js | 36 + .../custom/menu_block/menu_block.admin.inc | 630 + .../custom/menu_block/menu_block.api.php | 97 + .../custom/menu_block/menu_block.follow.inc | 59 + .../modules/custom/menu_block/menu_block.info | 14 + .../custom/menu_block/menu_block.install | 202 + .../custom/menu_block/menu_block.module | 811 + .../custom/menu_block/menu_block.pages.inc | 61 + .../custom/menu_block/menu_block.sort.inc | 54 + .../menu_block/menu_block_export.admin.inc | 117 + .../custom/menu_block/menu_block_export.info | 17 + .../menu_block/menu_block_export.module | 33 + .../menu_tree/icon_contrib_booknavigation.png | Bin 0 -> 415 bytes .../menu_tree/icon_contrib_main_menu.png | Bin 0 -> 785 bytes .../menu_tree/icon_contrib_management.png | Bin 0 -> 719 bytes .../menu_tree/icon_contrib_menu.png | Bin 0 -> 552 bytes .../content_types/menu_tree/menu_tree.inc | 171 + .../custom/module_filter/CHANGELOG.txt | 182 + .../modules/custom/module_filter/LICENSE.txt | 339 + .../modules/custom/module_filter/README.txt | 107 + .../module_filter/css/dynamic_position.css | 23 + .../module_filter/css/module_filter.css | 20 + .../css/module_filter_tab-rtl.css | 54 + .../module_filter/css/module_filter_tab.css | 262 + .../custom/module_filter/css/modules.css | 47 + .../module_filter/css/update_status.css | 18 + .../module_filter/js/dynamic_position.js | 48 + .../custom/module_filter/js/module_filter.js | 271 + .../module_filter/js/module_filter_tab.js | 562 + .../custom/module_filter/js/modules.js | 176 + .../custom/module_filter/js/permissions.js | 67 + .../custom/module_filter/js/update_status.js | 117 + .../module_filter/module_filter.admin.inc | 104 + .../custom/module_filter/module_filter.info | 25 + .../module_filter/module_filter.install | 47 + .../custom/module_filter/module_filter.module | 260 + .../module_filter/module_filter.pages.inc | 46 + .../module_filter/module_filter.theme.inc | 196 + sites/all/modules/custom/mollom/LICENSE.txt | 339 + sites/all/modules/custom/mollom/README.txt | 133 + .../mollom/images/powered-by-mollom-1.gif | Bin 0 -> 1606 bytes .../mollom/images/powered-by-mollom-2.gif | Bin 0 -> 1272 bytes .../modules/custom/mollom/images/refresh.png | Bin 0 -> 800 bytes .../custom/mollom/includes/CHANGELOG.md | 40 + .../custom/mollom/includes/LICENSE-GPL.txt | 339 + .../custom/mollom/includes/LICENSE-MIT.txt | 20 + .../modules/custom/mollom/includes/README.md | 134 + .../modules/custom/mollom/includes/TODO.md | 9 + .../custom/mollom/includes/composer.json | 10 + .../custom/mollom/includes/mollom.class.inc | 1619 ++ .../custom/mollom/mollom-captcha-player.swf | Bin 0 -> 5986 bytes .../custom/mollom/mollom.admin.blacklist.js | 76 + .../modules/custom/mollom/mollom.admin.css | 12 + .../modules/custom/mollom/mollom.admin.inc | 1194 ++ .../all/modules/custom/mollom/mollom.admin.js | 33 + .../all/modules/custom/mollom/mollom.api.php | 456 + .../mollom/mollom.captcha.audio.tpl.php | 133 + .../mollom/mollom.captcha.image.tpl.php | 30 + sites/all/modules/custom/mollom/mollom.css | 32 + .../modules/custom/mollom/mollom.drupal.inc | 490 + .../all/modules/custom/mollom/mollom.flag.css | 30 + .../all/modules/custom/mollom/mollom.flag.inc | 704 + .../all/modules/custom/mollom/mollom.flag.js | 118 + .../custom/mollom/mollom.flag.position.css | 22 + sites/all/modules/custom/mollom/mollom.info | 20 + .../all/modules/custom/mollom/mollom.install | 1305 ++ sites/all/modules/custom/mollom/mollom.js | 110 + sites/all/modules/custom/mollom/mollom.module | 4240 +++++ .../modules/custom/mollom/mollom.pages.inc | 137 + .../custom/mollom/tests/mollom.class.test | 270 + .../modules/custom/mollom/tests/mollom.test | 6123 +++++++ .../custom/mollom/tests/mollom_test.info | 12 + .../custom/mollom/tests/mollom_test.install | 53 + .../custom/mollom/tests/mollom_test.module | 371 + .../mollom/tests/mollom_test_server.info | 12 + .../mollom/tests/mollom_test_server.install | 16 + .../mollom/tests/mollom_test_server.module | 793 + .../custom/multiple_entity_form/LICENSE.txt | 339 + .../custom/multiple_entity_form/README.txt | 45 + .../multiple_entity_form.info | 11 + .../multiple_entity_form.module | 205 + sites/all/modules/custom/name/LICENSE.txt | 339 + sites/all/modules/custom/name/README.txt | 191 + sites/all/modules/custom/name/i18n-ascii.txt | 564 + .../custom/name/includes/name.content.inc | 543 + .../custom/name/includes/name.features.inc | 100 + .../custom/name/includes/name.parser.inc | 334 + .../name_handler_filter_name_fulltext.inc | 113 + .../name/includes/webform.components.inc | 369 + sites/all/modules/custom/name/name.admin.inc | 831 + .../custom/name/name.devel_generate.inc | 73 + sites/all/modules/custom/name/name.diff.inc | 64 + sites/all/modules/custom/name/name.feeds.inc | 59 + sites/all/modules/custom/name/name.info | 19 + sites/all/modules/custom/name/name.install | 267 + .../all/modules/custom/name/name.migrate.inc | 49 + sites/all/modules/custom/name/name.module | 1702 ++ sites/all/modules/custom/name/name.tokens.inc | 296 + sites/all/modules/custom/name/name.views.inc | 29 + sites/all/modules/custom/name/tests/name.test | 779 + sites/all/modules/custom/panels/CHANGELOG.txt | 39 + .../modules/custom/panels/KNOWN_ISSUES.txt | 91 + sites/all/modules/custom/panels/LICENSE.txt | 339 + sites/all/modules/custom/panels/README.txt | 6 + sites/all/modules/custom/panels/UPGRADE.txt | 22 + .../custom/panels/css/panels-dashboard.css | 62 + .../all/modules/custom/panels/css/panels.css | 50 + .../custom/panels/css/panels_admin.css | 165 + .../modules/custom/panels/css/panels_dnd.css | 673 + .../modules/custom/panels/css/panels_page.css | 14 + sites/all/modules/custom/panels/help/api.html | 44 + .../modules/custom/panels/help/display.html | 0 .../all/modules/custom/panels/help/pane.html | 0 .../custom/panels/help/panels.help.ini | 74 + .../custom/panels/help/plugins-layout.html | 87 + .../custom/panels/help/plugins-style.html | 0 .../custom/panels/i18n_panels/README.txt | 93 + .../panels/i18n_panels/i18n_panels.i18n.inc | 50 + .../panels/i18n_panels/i18n_panels.info | 15 + .../panels/i18n_panels/i18n_panels.install | 27 + .../panels/i18n_panels/i18n_panels.module | 442 + .../custom/panels/images/arrow-active.png | Bin 0 -> 313 bytes .../custom/panels/images/arrow-down-light.png | Bin 0 -> 271 bytes .../custom/panels/images/bg-content-modal.png | Bin 0 -> 156 bytes .../custom/panels/images/bg-shade-dark.png | Bin 0 -> 220 bytes .../custom/panels/images/bg-shade-light.png | Bin 0 -> 216 bytes .../custom/panels/images/bg-shade-medium.png | Bin 0 -> 221 bytes .../panels/images/bg-shade-white-lrg.png | Bin 0 -> 214 bytes .../modules/custom/panels/images/blank.gif | Bin 0 -> 49 bytes .../modules/custom/panels/images/close.gif | Bin 0 -> 949 bytes .../modules/custom/panels/images/delete.png | Bin 0 -> 795 bytes .../modules/custom/panels/images/go-down.png | Bin 0 -> 583 bytes .../modules/custom/panels/images/go-right.png | Bin 0 -> 392 bytes .../modules/custom/panels/images/go-up.png | Bin 0 -> 566 bytes .../custom/panels/images/icon-addcontent.png | Bin 0 -> 818 bytes .../custom/panels/images/icon-cache.png | Bin 0 -> 1001 bytes .../custom/panels/images/icon-configure.png | Bin 0 -> 765 bytes .../custom/panels/images/icon-delete.png | Bin 0 -> 877 bytes .../custom/panels/images/icon-draggable.png | Bin 0 -> 236 bytes .../custom/panels/images/icon-hidepane.png | Bin 0 -> 735 bytes .../custom/panels/images/icon-showpane.png | Bin 0 -> 701 bytes .../modules/custom/panels/images/no-icon.png | Bin 0 -> 3398 bytes .../panels/images/portlet-collapsed.png | Bin 0 -> 108 bytes .../custom/panels/images/portlet-expanded.png | Bin 0 -> 106 bytes .../custom/panels/images/screenshot-1.jpg | Bin 0 -> 14072 bytes .../custom/panels/images/screenshot-2.jpg | Bin 0 -> 43830 bytes .../custom/panels/images/screenshot-3.jpg | Bin 0 -> 43224 bytes .../custom/panels/images/screenshot-4.jpg | Bin 0 -> 73474 bytes .../all/modules/custom/panels/images/sky.png | Bin 0 -> 2275 bytes .../modules/custom/panels/images/sprite.png | Bin 0 -> 14325 bytes .../modules/custom/panels/images/throbber.gif | Bin 0 -> 3208 bytes .../custom/panels/images/user-trash.png | Bin 0 -> 507 bytes .../custom/panels/includes/add-content.inc | 86 + .../custom/panels/includes/callbacks.inc | 205 + .../modules/custom/panels/includes/common.inc | 614 + .../custom/panels/includes/display-edit.inc | 328 + .../custom/panels/includes/display-layout.inc | 334 + .../modules/custom/panels/includes/legacy.inc | 41 + .../custom/panels/includes/page-wizard.inc | 86 + .../panels/includes/panels.pipelines.inc | 33 + .../custom/panels/includes/plugins.inc | 506 + .../custom/panels/js/display_editor.js | 551 + sites/all/modules/custom/panels/js/layout.js | 18 + .../modules/custom/panels/js/panels-base.js | 28 + .../all/modules/custom/panels/panels.api.php | 264 + sites/all/modules/custom/panels/panels.info | 19 + .../all/modules/custom/panels/panels.install | 494 + sites/all/modules/custom/panels/panels.module | 1915 ++ .../panels/panels_ipe/css/panels_ipe-rtl.css | 67 + .../panels/panels_ipe/css/panels_ipe.css | 577 + .../panels/panels_ipe/images/dragger.png | Bin 0 -> 946 bytes .../panels/panels_ipe/images/icon-add.png | Bin 0 -> 1052 bytes .../panels_ipe/images/icon-change-layout.png | Bin 0 -> 319 bytes .../panels/panels_ipe/images/icon-close.png | Bin 0 -> 285 bytes .../panels_ipe/images/icon-configure.png | Bin 0 -> 546 bytes .../panels/panels_ipe/images/icon-delete.png | Bin 0 -> 658 bytes .../panels_ipe/images/icon-draggable.png | Bin 0 -> 1454 bytes .../panels/panels_ipe/images/icon-save.png | Bin 0 -> 247 bytes .../panels_ipe/images/icon-settings.png | Bin 0 -> 567 bytes .../panels/panels_ipe/images/icon-style.png | Bin 0 -> 488 bytes .../panels_ipe/images/loading-small.gif | Bin 0 -> 2112 bytes .../includes/panels_ipe.pipelines.inc | 44 + .../custom/panels/panels_ipe/js/panels_ipe.js | 480 + .../custom/panels/panels_ipe/panels_ipe.info | 15 + .../panels/panels_ipe/panels_ipe.module | 270 + .../plugins/display_renderers/ipe.inc | 5 + .../panels_renderer_ipe.class.php | 468 + .../custom/panels/panels_mini/panels_mini.css | 12 + .../panels/panels_mini/panels_mini.info | 13 + .../panels/panels_mini/panels_mini.install | 124 + .../panels/panels_mini/panels_mini.module | 532 + .../content_types/icon_panels_mini.png | Bin 0 -> 450 bytes .../plugins/content_types/panels_mini.inc | 176 + .../plugins/export_ui/panels_mini.inc | 41 + .../export_ui/panels_mini_ui.class.php | 298 + .../panels/panels_node/panels_node.info | 15 + .../panels/panels_node/panels_node.install | 71 + .../panels/panels_node/panels_node.module | 488 + .../custom/panels/plugins/cache/simple.inc | 161 + .../plugins/display_renderers/editor.inc | 5 + .../panels_renderer_editor.class.php | 2032 +++ .../panels_renderer_simple.class.php | 32 + .../panels_renderer_standard.class.php | 654 + .../plugins/display_renderers/simple.inc | 8 + .../plugins/display_renderers/standard.inc | 5 + .../plugins/export_ui/panels_layouts.inc | 23 + .../export_ui/panels_layouts_ui.class.php | 245 + .../layouts/flexible/flexible-admin.css | 87 + .../layouts/flexible/flexible-admin.js | 421 + .../plugins/layouts/flexible/flexible.css | 4 + .../plugins/layouts/flexible/flexible.inc | 1828 ++ .../plugins/layouts/flexible/flexible.png | Bin 0 -> 208 bytes .../layouts/flexible/grippie-vertical.png | Bin 0 -> 265 bytes .../panels/plugins/layouts/onecol/onecol.css | 22 + .../panels/plugins/layouts/onecol/onecol.inc | 14 + .../panels/plugins/layouts/onecol/onecol.png | Bin 0 -> 122 bytes .../layouts/onecol/panels-onecol.tpl.php | 19 + .../panels-threecol-25-50-25.tpl.php | 29 + .../threecol_25_50_25/threecol_25_50_25.css | 35 + .../threecol_25_50_25/threecol_25_50_25.inc | 20 + .../threecol_25_50_25/threecol_25_50_25.png | Bin 0 -> 200 bytes .../panels-threecol-25-50-25-stacked.tpl.php | 46 + .../threecol_25_50_25_stacked.css | 45 + .../threecol_25_50_25_stacked.inc | 17 + .../threecol_25_50_25_stacked.png | Bin 0 -> 208 bytes .../panels-threecol-33-34-33.tpl.php | 31 + .../threecol_33_34_33/threecol_33_34_33.css | 35 + .../threecol_33_34_33/threecol_33_34_33.inc | 15 + .../threecol_33_34_33/threecol_33_34_33.png | Bin 0 -> 196 bytes .../panels-threecol-33-34-33-stacked.tpl.php | 46 + .../threecol_33_34_33_stacked.css | 45 + .../threecol_33_34_33_stacked.inc | 17 + .../threecol_33_34_33_stacked.png | Bin 0 -> 208 bytes .../layouts/twocol/panels-twocol.tpl.php | 25 + .../panels/plugins/layouts/twocol/twocol.css | 37 + .../panels/plugins/layouts/twocol/twocol.inc | 14 + .../panels/plugins/layouts/twocol/twocol.png | Bin 0 -> 193 bytes .../panels-twocol-bricks.tpl.php | 53 + .../layouts/twocol_bricks/twocol_bricks.css | 46 + .../layouts/twocol_bricks/twocol_bricks.inc | 25 + .../layouts/twocol_bricks/twocol_bricks.png | Bin 0 -> 277 bytes .../panels-twocol-stacked.tpl.php | 40 + .../layouts/twocol_stacked/twocol_stacked.css | 41 + .../layouts/twocol_stacked/twocol_stacked.inc | 16 + .../layouts/twocol_stacked/twocol_stacked.png | Bin 0 -> 202 bytes .../plugins/page_wizards/landing_page.inc | 277 + .../style_bases/pane/pane_plain_box/icon.png | Bin 0 -> 3022 bytes .../pane/pane_plain_box/pane-plain-box.css | 11 + .../pane_plain_box/pane-plain-box.tpl.php | 16 + .../pane/pane_plain_box/pane_plain_box.inc | 93 + .../pane/pane_rounded_shadow/box-color.png | Bin 0 -> 4772 bytes .../pane/pane_rounded_shadow/box-shadow.png | Bin 0 -> 2528 bytes .../pane/pane_rounded_shadow/icon.png | Bin 0 -> 3566 bytes .../pane-rounded-shadow.css | 105 + .../pane-rounded-shadow.tpl.php | 31 + .../pane_rounded_shadow.inc | 99 + .../region/region_plain_box/icon.png | Bin 0 -> 3022 bytes .../region_plain_box/region-plain-box.css | 6 + .../region_plain_box/region-plain-box.tpl.php | 28 + .../region_plain_box/region_plain_box.inc | 65 + .../region_rounded_shadow/box-color.png | Bin 0 -> 4772 bytes .../region_rounded_shadow/box-shadow.png | Bin 0 -> 2528 bytes .../region/region_rounded_shadow/icon.png | Bin 0 -> 3566 bytes .../region-rounded-shadow.css | 97 + .../region-rounded-shadow.tpl.php | 28 + .../region_rounded_shadow.inc | 71 + .../custom/panels/plugins/styles/block.inc | 59 + .../plugins/styles/corners/corner-bits.png | Bin 0 -> 514 bytes .../panels-rounded-corners-box.tpl.php | 20 + .../styles/corners/rounded_corners.inc | 205 + .../plugins/styles/corners/shadow-b.png | Bin 0 -> 140 bytes .../plugins/styles/corners/shadow-l.png | Bin 0 -> 137 bytes .../plugins/styles/corners/shadow-r.png | Bin 0 -> 137 bytes .../plugins/styles/corners/shadow-t.png | Bin 0 -> 139 bytes .../custom/panels/plugins/styles/default.inc | 27 + .../custom/panels/plugins/styles/list.inc | 58 + .../custom/panels/plugins/styles/naked.inc | 34 + .../custom/panels/plugins/styles/stylizer.inc | 375 + .../plugins/task_handlers/panel_context.inc | 937 + .../panels/plugins/views/panels.views.inc | 27 + .../views/panels_views_plugin_row_fields.inc | 163 + .../templates/panels-add-content-link.tpl.php | 14 + .../panels-add-content-modal.tpl.php | 38 + .../templates/panels-dashboard-block.tpl.php | 13 + .../templates/panels-dashboard-link.tpl.php | 12 + .../panels/templates/panels-dashboard.tpl.php | 11 + .../panels/templates/panels-pane.tpl.php | 60 + sites/all/modules/custom/pathauto/API.txt | 149 + sites/all/modules/custom/pathauto/INSTALL.txt | 48 + sites/all/modules/custom/pathauto/LICENSE.txt | 339 + sites/all/modules/custom/pathauto/README.txt | 94 + .../custom/pathauto/pathauto.admin.inc | 437 + .../modules/custom/pathauto/pathauto.api.php | 60 + .../all/modules/custom/pathauto/pathauto.inc | 689 + .../all/modules/custom/pathauto/pathauto.info | 15 + .../modules/custom/pathauto/pathauto.install | 182 + sites/all/modules/custom/pathauto/pathauto.js | 22 + .../modules/custom/pathauto/pathauto.module | 840 + .../custom/pathauto/pathauto.pathauto.inc | 392 + .../all/modules/custom/pathauto/pathauto.test | 793 + .../custom/pathauto/pathauto.tokens.inc | 48 + .../all/modules/custom/quicktabs/LICENSE.txt | 339 + sites/all/modules/custom/quicktabs/README.txt | 78 + .../all/modules/custom/quicktabs/add-tab.gif | Bin 0 -> 703 bytes .../custom/quicktabs/css/quicktabs-admin.css | 79 + .../custom/quicktabs/css/quicktabs.css | 17 + .../modules/custom/quicktabs/delete-tab.gif | Bin 0 -> 1284 bytes .../includes/quicktabs_style_plugin.inc | 166 + .../custom/quicktabs/js/qt_accordion.js | 23 + .../modules/custom/quicktabs/js/qt_ui_tabs.js | 21 + .../modules/custom/quicktabs/js/quicktabs.js | 118 + .../custom/quicktabs/js/quicktabs_bbq.js | 37 + .../custom/quicktabs/js/quicktabs_form.js | 17 + .../quicktabs/plugins/QuickAccordion.inc | 100 + .../quicktabs/plugins/QuickBlockContent.inc | 124 + .../plugins/QuickCallbackContent.inc | 92 + .../quicktabs/plugins/QuickNodeContent.inc | 78 + .../quicktabs/plugins/QuickQtabsContent.inc | 65 + .../quicktabs/plugins/QuickQuicktabs.inc | 161 + .../custom/quicktabs/plugins/QuickUiTabs.inc | 115 + .../quicktabs/plugins/QuickViewContent.inc | 140 + .../custom/quicktabs/quicktabs.admin.inc | 655 + .../custom/quicktabs/quicktabs.api.php | 23 + .../custom/quicktabs/quicktabs.classes.inc | 516 + .../modules/custom/quicktabs/quicktabs.info | 16 + .../custom/quicktabs/quicktabs.install | 212 + .../modules/custom/quicktabs/quicktabs.module | 683 + .../custom/quicktabs/quicktabs.views.inc | 28 + .../css/quicktabs-tabstyles-admin.css | 37 + .../quicktabs_tabstyles.info | 11 + .../quicktabs_tabstyles.module | 113 + .../tabstyles/arrows/arrows-rtl.css | 9 + .../tabstyles/arrows/arrows.css | 24 + .../tabstyles/arrows/images/arrows.gif | Bin 0 -> 77 bytes .../tabstyles/basic/basic-rtl.css | 12 + .../tabstyles/basic/basic.css | 43 + .../tabstyles/bullets/bullets-rtl.css | 4 + .../tabstyles/bullets/bullets.css | 49 + .../tabstyles/bullets/images/bullets.gif | Bin 0 -> 2012 bytes .../tabstyles/bullets/images/bullets.png | Bin 0 -> 2495 bytes .../tabstyles/excel/excel-rtl.css | 38 + .../tabstyles/excel/excel.css | 79 + .../tabstyles/excel/images/tab-bar.png | Bin 0 -> 160 bytes .../tabstyles/excel/images/tab-left-rtl.png | Bin 0 -> 3005 bytes .../excel/images/tab-left-sep-rtl.png | Bin 0 -> 3060 bytes .../tabstyles/excel/images/tab-left-sep.png | Bin 0 -> 3029 bytes .../tabstyles/excel/images/tab-left.png | Bin 0 -> 2974 bytes .../tabstyles/excel/images/tab-right-rtl.png | Bin 0 -> 3313 bytes .../excel/images/tab-right-sep-rtl.png | Bin 0 -> 3434 bytes .../tabstyles/excel/images/tab-right-sep.png | Bin 0 -> 3480 bytes .../tabstyles/excel/images/tab-right.png | Bin 0 -> 3388 bytes .../tabstyles/garland/garland-rtl.css | 9 + .../tabstyles/garland/garland.css | 71 + .../tabstyles/garland/images/bg.gif | Bin 0 -> 99 bytes .../garland/images/tab-left-sidebar.gif | Bin 0 -> 1945 bytes .../tabstyles/garland/images/tab-left.gif | Bin 0 -> 1857 bytes .../garland/images/tab-right-sidebar.gif | Bin 0 -> 580 bytes .../tabstyles/garland/images/tab-right.gif | Bin 0 -> 563 bytes .../tabstyles/mac/images/mac.gif | Bin 0 -> 4449 bytes .../tabstyles/mac/images/mac.png | Bin 0 -> 6561 bytes .../tabstyles/mac/mac-rtl.css | 4 + .../quicktabs_tabstyles/tabstyles/mac/mac.css | 50 + .../tabstyles/navlist/navlist.css | 50 + .../tabstyles/phylactere/images/phy.gif | Bin 0 -> 858 bytes .../tabstyles/phylactere/images/phy.png | Bin 0 -> 1558 bytes .../tabstyles/phylactere/images/shade.gif | Bin 0 -> 51 bytes .../tabstyles/phylactere/images/shade.png | Bin 0 -> 120 bytes .../tabstyles/phylactere/phylactere-rtl.css | 4 + .../tabstyles/phylactere/phylactere.css | 53 + .../tabstyles/sky/images/bg-shade-dark.png | Bin 0 -> 220 bytes .../tabstyles/sky/images/bg-shade-light.png | Bin 0 -> 216 bytes .../tabstyles/sky/images/bg-shade-medium.png | Bin 0 -> 221 bytes .../tabstyles/sky/sky-rtl.css | 9 + .../quicktabs_tabstyles/tabstyles/sky/sky.css | 94 + .../tabstyles/zen/images/tab-bar.png | Bin 0 -> 160 bytes .../tabstyles/zen/images/tab-left-ie6.png | Bin 0 -> 331 bytes .../tabstyles/zen/images/tab-right-ie6.png | Bin 0 -> 473 bytes .../tabstyles/zen/zen-rtl.css | 6 + .../quicktabs_tabstyles/tabstyles/zen/zen.css | 53 + .../custom/quicktabs/tests/quicktabs.test | 136 + sites/all/modules/custom/rb/LICENSE.txt | 339 + sites/all/modules/custom/rb/README.txt | 155 + ...hors_about_new_comments.features.field.inc | 80 + ...otify_node_authors_about_new_comments.info | 18 + ...ify_node_authors_about_new_comments.module | 6 + ...hors_about_new_comments.rules_defaults.inc | 42 + ...tify_on_comment_replies.features.field.inc | 79 + .../notify_on_comment_replies.info | 17 + .../notify_on_comment_replies.module | 6 + ...tify_on_comment_replies.rules_defaults.inc | 34 + .../example_rules_login_redirect.info | 14 + .../example_rules_login_redirect.module | 6 + ...le_rules_login_redirect.rules_defaults.inc | 37 + .../example_rules_create_promotion.info | 15 + .../example_rules_create_promotion.module | 6 + ..._rules_create_promotion.rules_defaults.inc | 80 + ...romotion_syncronization.features.field.inc | 224 + ...rule_promotion_syncronization.features.inc | 32 + ...example_rule_promotion_syncronization.info | 36 + ...ample_rule_promotion_syncronization.module | 7 + ...romotion_syncronization.rules_defaults.inc | 123 + ...ule_promotion_syncronization.strongarm.inc | 96 + .../rb/plugins/access/rb_misc_conditions.inc | 147 + .../all/modules/custom/rb/rb_batch/README.txt | 42 + .../modules/custom/rb/rb_batch/rb_batch.info | 13 + .../custom/rb/rb_batch/rb_batch.module | 31 + .../custom/rb/rb_batch/rb_batch.rules.inc | 106 + sites/all/modules/custom/rb/rb_block.info | 13 + sites/all/modules/custom/rb/rb_block.module | 22 + .../all/modules/custom/rb/rb_block.rules.inc | 140 + sites/all/modules/custom/rb/rb_misc.api.php | 23 + sites/all/modules/custom/rb/rb_misc.info | 13 + sites/all/modules/custom/rb/rb_misc.module | 194 + sites/all/modules/custom/rb/rb_misc.rules.inc | 831 + sites/all/modules/custom/rb/rb_theme.info | 13 + sites/all/modules/custom/rb/rb_theme.module | 46 + .../all/modules/custom/rb/rb_theme.rules.inc | 56 + .../all/modules/custom/rb/rb_thinktwice.info | 14 + .../modules/custom/rb/rb_thinktwice.module | 25 + .../modules/custom/rb/rb_thinktwice.rules.inc | 136 + sites/all/modules/custom/rb/rb_views.info | 14 + sites/all/modules/custom/rb/rb_views.module | 218 + .../all/modules/custom/rb/rb_views.rules.inc | 197 + .../custom/rb/views/rb_views.views.inc | 17 + ...ugin_argument_validate_rules_component.inc | 52 + sites/all/modules/custom/redirect/LICENSE.txt | 339 + sites/all/modules/custom/redirect/README.txt | 3 + .../custom/redirect/redirect.admin.inc | 892 + .../modules/custom/redirect/redirect.admin.js | 28 + .../modules/custom/redirect/redirect.api.php | 295 + .../custom/redirect/redirect.drush.inc | 72 + .../custom/redirect/redirect.generate.inc | 182 + .../all/modules/custom/redirect/redirect.info | 23 + .../modules/custom/redirect/redirect.install | 358 + sites/all/modules/custom/redirect/redirect.js | 18 + .../modules/custom/redirect/redirect.module | 1568 ++ .../all/modules/custom/redirect/redirect.test | 244 + .../custom/redirect/views/redirect.views.inc | 219 + .../redirect/views/redirect.views_default.inc | 16 + ...ect_handler_field_redirect_link_delete.inc | 41 + ...irect_handler_field_redirect_link_edit.inc | 41 + ...rect_handler_field_redirect_operations.inc | 68 + ...direct_handler_field_redirect_redirect.inc | 71 + ...redirect_handler_field_redirect_source.inc | 71 + .../redirect_handler_filter_redirect_type.inc | 20 + .../custom/redirect/views/redirects.view | 177 + .../custom/responsive_menus/LICENSE.txt | 339 + .../custom/responsive_menus/README.txt | 55 + .../context/responsive_menus_context.inc | 74 + ...ponsive_menus_context_reaction_general.inc | 44 + .../responsive_menus/responsive_menus.api.php | 185 + .../responsive_menus/responsive_menus.info | 12 + .../responsive_menus/responsive_menus.install | 25 + .../responsive_menus/responsive_menus.module | 978 + ...sponsive_menus_codrops_responsive_multi.js | 55 + .../css/responsive_menus_google_nexus.css | 32 + .../js/responsive_menus_google_nexus.js | 61 + .../styles/meanMenu/README.md | 108 + .../responsive_menus/styles/meanMenu/gpl.txt | 165 + .../styles/meanMenu/jquery.meanmenu.js | 278 + .../styles/meanMenu/jquery.meanmenu.min.js | 6 + .../styles/meanMenu/meanmenu.css | 168 + .../styles/meanMenu/meanmenu.min.css | 8 + .../meanMenu/responsive_menus_mean_menu.js | 44 + .../css/responsive_menus_simple.css | 102 + .../js/responsive_menus_simple.js | 219 + .../styles/sidr/js/responsive_menus_sidr.js | 116 + .../custom/responsive_tables/LICENSE.txt | 339 + .../custom/responsive_tables/css/bartik.css | 17 + .../custom/responsive_tables/css/seven.css | 17 + .../custom/responsive_tables/css/stark.css | 17 + .../responsive_tables/js/tableresponsive.js | 141 + .../responsive_tables/responsive_tables.info | 11 + .../responsive_tables.module | 427 + .../views_plugin_style_table_responsive.inc | 30 + sites/all/modules/custom/rules/DEVELOPER.txt | 26 + sites/all/modules/custom/rules/LICENSE.txt | 339 + sites/all/modules/custom/rules/README.txt | 91 + .../modules/custom/rules/includes/faces.inc | 311 + .../custom/rules/includes/rules.core.inc | 2813 +++ .../custom/rules/includes/rules.event.inc | 411 + .../custom/rules/includes/rules.plugins.inc | 827 + .../custom/rules/includes/rules.processor.inc | 364 + .../custom/rules/includes/rules.state.inc | 769 + .../custom/rules/includes/rules.upgrade.inc | 664 + .../custom/rules/modules/comment.rules.inc | 83 + .../custom/rules/modules/data.eval.inc | 425 + .../custom/rules/modules/data.rules.inc | 762 + .../custom/rules/modules/entity.eval.inc | 174 + .../custom/rules/modules/entity.rules.inc | 583 + .../modules/custom/rules/modules/events.inc | 205 + .../custom/rules/modules/node.eval.inc | 137 + .../custom/rules/modules/node.rules.inc | 161 + .../custom/rules/modules/path.eval.inc | 148 + .../custom/rules/modules/path.rules.inc | 171 + .../modules/custom/rules/modules/php.eval.inc | 151 + .../custom/rules/modules/php.rules.inc | 158 + .../custom/rules/modules/rules_core.eval.inc | 242 + .../custom/rules/modules/rules_core.rules.inc | 338 + .../custom/rules/modules/system.eval.inc | 284 + .../custom/rules/modules/system.rules.inc | 303 + .../custom/rules/modules/taxonomy.rules.inc | 116 + .../custom/rules/modules/user.eval.inc | 134 + .../custom/rules/modules/user.rules.inc | 272 + sites/all/modules/custom/rules/rules.api.php | 1098 ++ .../all/modules/custom/rules/rules.drush.inc | 134 + .../modules/custom/rules/rules.features.inc | 72 + sites/all/modules/custom/rules/rules.info | 30 + sites/all/modules/custom/rules/rules.install | 510 + sites/all/modules/custom/rules/rules.module | 1685 ++ .../all/modules/custom/rules/rules.rules.inc | 115 + .../custom/rules/rules_admin/rules_admin.inc | 436 + .../custom/rules/rules_admin/rules_admin.info | 14 + .../rules/rules_admin/rules_admin.module | 134 + .../rules/rules_i18n/rules_i18n.i18n.inc | 94 + .../custom/rules/rules_i18n/rules_i18n.info | 15 + .../custom/rules/rules_i18n/rules_i18n.module | 132 + .../rules/rules_i18n/rules_i18n.rules.inc | 196 + .../custom/rules/rules_i18n/rules_i18n.test | 183 + .../includes/rules_scheduler.handler.inc | 99 + .../includes/rules_scheduler.views.inc | 83 + .../rules_scheduler.views_default.inc | 180 + .../includes/rules_scheduler_views_filter.inc | 22 + .../rules_scheduler/rules_scheduler.admin.inc | 140 + .../rules_scheduler/rules_scheduler.drush.inc | 81 + .../rules_scheduler/rules_scheduler.info | 21 + .../rules_scheduler/rules_scheduler.install | 191 + .../rules_scheduler/rules_scheduler.module | 214 + .../rules_scheduler/rules_scheduler.rules.inc | 214 + .../rules_scheduler/rules_scheduler.test | 121 + .../tests/rules_scheduler_test.inc | 24 + .../tests/rules_scheduler_test.info | 13 + .../tests/rules_scheduler_test.module | 6 + .../all/modules/custom/rules/tests/rules.test | 2101 +++ .../custom/rules/tests/rules_test.info | 14 + .../custom/rules/tests/rules_test.module | 54 + .../custom/rules/tests/rules_test.rules.inc | 345 + .../rules/tests/rules_test.rules_defaults.inc | 122 + .../custom/rules/tests/rules_test.test.inc | 75 + .../custom/rules/ui/rules.autocomplete.js | 202 + .../modules/custom/rules/ui/rules.debug.js | 68 + .../all/modules/custom/rules/ui/rules.ui.css | 196 + .../custom/rules/ui/rules.ui.seven.css | 95 + .../modules/custom/rules/ui/ui.controller.inc | 324 + sites/all/modules/custom/rules/ui/ui.core.inc | 1275 ++ sites/all/modules/custom/rules/ui/ui.data.inc | 601 + .../all/modules/custom/rules/ui/ui.forms.inc | 964 + .../modules/custom/rules/ui/ui.plugins.inc | 254 + .../all/modules/custom/rules/ui/ui.theme.inc | 287 + sites/all/modules/custom/services/LICENSE.txt | 339 + sites/all/modules/custom/services/README.txt | 33 + .../auth/services_oauth/services_oauth.css | 4 + .../auth/services_oauth/services_oauth.inc | 202 + .../auth/services_oauth/services_oauth.info | 13 + .../services_oauth/services_oauth.install | 45 + .../auth/services_oauth/services_oauth.module | 16 + .../custom/services/css/services.admin.css | 73 + .../services/docs/services.alter.api.php | 200 + .../docs/services.authentication.api.php | 42 + .../services/docs/services.servers.api.php | 54 + .../services/docs/services.services.api.php | 337 + .../services/docs/services.versions.api.php | 52 + .../includes/services.resource_build.inc | 210 + .../includes/services.resource_update.inc | 21 + .../services/includes/services.runtime.inc | 465 + .../custom/services/js/services.admin.js | 73 + .../services_ctools_export_ui.class.php | 500 + .../export_ui/services_ctools_export_ui.inc | 231 + .../services/resources/comment_resource.inc | 402 + .../services/resources/file_resource.inc | 371 + .../services/resources/node_resource.inc | 779 + .../services/resources/system_resource.inc | 101 + .../services/resources/taxonomy_resource.inc | 641 + .../services/resources/user_resource.inc | 948 + .../servers/rest_server/README.markdown | 78 + .../rest_server/includes/RESTServer.inc | 704 + .../ServicesContentTypeNegotiator.inc | 111 + .../rest_server/includes/ServicesContext.inc | 188 + .../includes/ServicesFormatter.inc | 103 + .../rest_server/includes/ServicesParser.inc | 143 + .../includes/ServicesRESTServerFactory.inc | 105 + .../servers/rest_server/lib/bencode.php | 27 + .../servers/rest_server/lib/mimeparse.php | 179 + .../servers/rest_server/rest_server.api.php | 60 + .../servers/rest_server/rest_server.inc | 88 + .../servers/rest_server/rest_server.info | 28 + .../servers/rest_server/rest_server.install | 35 + .../servers/rest_server/rest_server.module | 195 + .../tests/ServicesRESTServerTests.test | 617 + .../tests/rest_server_mock_classes.inc | 78 + .../servers/xmlrpc_server/xmlrpc_server.info | 15 + .../xmlrpc_server/xmlrpc_server.module | 83 + .../custom/services/services.admin.inc | 294 + .../custom/services/services.drush.inc | 43 + .../all/modules/custom/services/services.info | 36 + .../modules/custom/services/services.install | 308 + .../all/modules/custom/services/services.make | 8 + .../modules/custom/services/services.module | 1051 ++ .../functional/NoAuthEndpointTestRunner.test | 30 + .../tests/functional/ServicesAliasTests.test | 126 + .../functional/ServicesArgumentsTests.test | 153 + .../functional/ServicesEndpointTests.test | 86 + .../tests/functional/ServicesParserTests.test | 119 + .../ServicesResourceCommentTests.test | 364 + .../ServicesResourceDisabledTests.test | 97 + .../functional/ServicesResourceFileTests.test | 263 + .../functional/ServicesResourceNodeTests.test | 615 + .../ServicesResourceSystemTests.test | 122 + .../ServicesResourceTaxonomyTests.test | 672 + .../functional/ServicesResourceUserTests.test | 674 + .../functional/ServicesSecurityTests.test | 100 + .../functional/ServicesVersionTests.test | 109 + .../tests/functional/ServicesXMLRPCTests.test | 235 + .../custom/services/tests/services.test | 889 + .../services_test_resource.info | 17 + .../services_test_resource.module | 181 + .../services/tests/ui/ServicesUITests.test | 109 + .../tests/unit/ServicesSpycLibraryTests.test | 40 + .../custom/stage_file_proxy/INSTALL.txt | 81 + .../custom/stage_file_proxy/LICENSE.txt | 339 + .../stage_file_proxy/stage_file_proxy.info | 11 + .../stage_file_proxy/stage_file_proxy.module | 256 + .../all/modules/custom/strongarm/LICENSE.txt | 339 + sites/all/modules/custom/strongarm/README.txt | 59 + .../custom/strongarm/strongarm.admin.inc | 142 + .../modules/custom/strongarm/strongarm.css | 5 + .../custom/strongarm/strongarm.drush.inc | 42 + .../modules/custom/strongarm/strongarm.info | 15 + .../custom/strongarm/strongarm.install | 34 + .../modules/custom/strongarm/strongarm.module | 220 + sites/all/modules/custom/ticket/LICENSE.txt | 339 + .../custom/ticket/includes/ticket.field.inc | 840 + .../includes/ticket_registration.admin.inc | 277 + .../includes/ticket_registration.entity.inc | 152 + .../includes/ticket_registration.metadata.inc | 102 + .../ticket/includes/ticket_type.admin.inc | 19 + .../ticket/includes/ticket_type.entity.inc | 297 + .../ticket/includes/ticket_type.metadata.inc | 74 + .../custom/ticket/js/ticket_type_remove.js | 30 + .../modules/ticket_rules/ticket_rules.info | 14 + .../modules/ticket_rules/ticket_rules.module | 5 + .../ticket_rules/ticket_rules.rules.inc | 103 + .../includes/ticket_state.admin.inc | 253 + .../includes/ticket_state.controller.inc | 12 + .../includes/ticket_state.entity.inc | 29 + .../includes/ticket_state.field.inc | 297 + .../includes/ticket_state.ui_controller.inc | 33 + .../TicketStateSelectionHandler.class.php | 35 + .../selection/ticket_state.inc | 10 + .../modules/ticket_state/ticket_state.info | 21 + .../modules/ticket_state/ticket_state.install | 323 + .../modules/ticket_state/ticket_state.module | 314 + .../ticket_state_basic.info | 13 + .../ticket_state_basic.install | 44 + .../ticket_state_basic.module | 5 + .../ticket_user_registration.info | 14 + .../ticket_user_registration.install | 23 + .../ticket_user_registration.js | 12 + .../ticket_user_registration.module | 347 + .../views/ticket_user_registration.views.inc | 45 + ...ticket_user_registration.views_default.inc | 185 + .../custom/ticket/theme/ticket-type.tpl.php | 19 + .../ticket/theme/ticket-user-tickets.tpl.php | 16 + sites/all/modules/custom/ticket/ticket.info | 35 + .../all/modules/custom/ticket/ticket.install | 515 + sites/all/modules/custom/ticket/ticket.module | 816 + .../custom/ticket/views/ticket.views.inc | 100 + .../ticket/views/ticket.views_default.inc | 379 + ...ticket_views_handler_field_entity_link.inc | 48 + ..._views_handler_field_registration_link.inc | 53 + ...handler_field_registration_link_cancel.inc | 24 + ...s_handler_field_registration_link_edit.inc | 22 + ...ews_plugin_display_ticket_registration.inc | 104 + .../all/modules/custom/timefield/LICENSE.txt | 339 + sites/all/modules/custom/timefield/README.txt | 52 + .../modules/custom/timefield/js/timefield.js | 19 + .../timefield-weekly-minical-box.tpl.php | 20 + .../custom/timefield/theme/timefield.tpl.php | 28 + .../timefield/timefield.devel_generate.inc | 43 + .../custom/timefield/timefield.drush.inc | 101 + .../modules/custom/timefield/timefield.info | 18 + .../custom/timefield/timefield.install | 122 + .../modules/custom/timefield/timefield.module | 1475 ++ .../modules/custom/timefield/timefield.test | 240 + .../timefield/views/timefield.views.inc | 93 + .../timefield_handler_field_timefield.inc | 71 + ...field_handler_field_timefield_duration.inc | 53 + ...ield_handler_filter_timefield_duration.inc | 113 + ...efield_handler_sort_timefield_duration.inc | 19 + .../views/timefield_plugin_style_minical.inc | 136 + sites/all/modules/custom/token/LICENSE.txt | 339 + sites/all/modules/custom/token/README.txt | 2 + sites/all/modules/custom/token/arrow-down.png | Bin 0 -> 118 bytes .../all/modules/custom/token/arrow-right.png | Bin 0 -> 127 bytes .../modules/custom/token/jquery.treeTable.css | 44 + .../modules/custom/token/jquery.treeTable.js | 220 + .../custom/token/tests/token_test.info | 13 + .../custom/token/tests/token_test.module | 33 + sites/all/modules/custom/token/token.css | 27 + .../all/modules/custom/token/token.drush.inc | 22 + sites/all/modules/custom/token/token.info | 11 + sites/all/modules/custom/token/token.install | 332 + sites/all/modules/custom/token/token.js | 87 + sites/all/modules/custom/token/token.module | 1283 ++ .../all/modules/custom/token/token.pages.inc | 364 + sites/all/modules/custom/token/token.test | 1095 ++ .../all/modules/custom/token/token.tokens.inc | 1460 ++ sites/all/modules/custom/url/LICENSE.txt | 339 + sites/all/modules/custom/url/url.field.css | 5 + sites/all/modules/custom/url/url.info | 14 + sites/all/modules/custom/url/url.install | 59 + sites/all/modules/custom/url/url.module | 373 + sites/all/modules/custom/url/url.test | 225 + sites/all/modules/custom/uuid/LICENSE.txt | 339 + sites/all/modules/custom/uuid/README.txt | 32 + sites/all/modules/custom/uuid/UPGRADE.txt | 43 + .../uuid/plugins/arguments/entity_uuid.inc | 78 + sites/all/modules/custom/uuid/uuid.admin.inc | 50 + sites/all/modules/custom/uuid/uuid.api.php | 159 + sites/all/modules/custom/uuid/uuid.core.inc | 449 + sites/all/modules/custom/uuid/uuid.drush.inc | 41 + sites/all/modules/custom/uuid/uuid.entity.inc | 598 + .../all/modules/custom/uuid/uuid.features.inc | 206 + sites/all/modules/custom/uuid/uuid.inc | 204 + sites/all/modules/custom/uuid/uuid.info | 15 + sites/all/modules/custom/uuid/uuid.install | 274 + sites/all/modules/custom/uuid/uuid.module | 229 + sites/all/modules/custom/uuid/uuid.test | 610 + sites/all/modules/custom/uuid/uuid.tokens.inc | 60 + sites/all/modules/custom/uuid/uuid.views.inc | 35 + .../custom/uuid/uuid_path/uuid_path.info | 13 + .../custom/uuid/uuid_path/uuid_path.module | 93 + .../resources/field_collection.resource.inc | 20 + .../uuid_services/uuid_services.admin.inc | 14 + .../uuid/uuid_services/uuid_services.info | 15 + .../uuid/uuid_services/uuid_services.module | 244 + .../uuid_services_example.features.inc | 15 + .../uuid_services_example.info | 19 + .../uuid_services_example.module | 7 + .../uuid_services_example.services.inc | 100 + .../modules/custom/uuid_features/LICENSE.txt | 339 + .../uuid_features/includes/modules/book.inc | 191 + .../modules/commerce_product_reference.inc | 46 + .../includes/modules/content.inc | 38 + .../includes/modules/entity_translation.inc | 75 + .../includes/modules/entityreference.inc | 68 + .../includes/modules/field_collection.inc | 47 + .../includes/modules/file_entity.inc | 147 + .../modules/file_entity_revisions.inc | 30 + .../includes/modules/filefield.inc | 91 + .../includes/modules/microdata.inc | 15 + .../includes/modules/nodereference.inc | 86 + .../includes/modules/panelizer.inc | 147 + .../includes/modules/state_flow.inc | 21 + .../includes/modules/taxonomy.inc | 41 + .../uuid_features/includes/modules/text.inc | 33 + .../uuid_features/includes/modules/title.inc | 22 + .../uuid_features/includes/modules/user.inc | 47 + .../includes/modules/userreference.inc | 44 + .../includes/uuid_bean.features.inc | 181 + .../includes/uuid_book.features.inc | 96 + .../uuid_commerce_product.features.inc | 213 + ..._current_search_configuration.features.inc | 90 + .../includes/uuid_features.drush.inc | 110 + .../uuid_field_collection.features.inc | 170 + .../includes/uuid_file.features.inc | 80 + .../includes/uuid_file_entity.features.inc | 218 + .../includes/uuid_fpp.features.inc | 296 + .../includes/uuid_node.features.inc | 242 + .../includes/uuid_nodequeue_item.features.inc | 124 + .../includes/uuid_panelizer.features.inc | 161 + .../includes/uuid_term.features.inc | 218 + .../includes/uuid_user.features.inc | 172 + .../uuid_features/uuid_features.api.php | 212 + .../custom/uuid_features/uuid_features.info | 16 + .../uuid_features/uuid_features.install | 18 + .../custom/uuid_features/uuid_features.module | 909 + .../custom/view_unpublished/LICENSE.txt | 339 + .../custom/view_unpublished/README.txt | 40 + .../view_unpublished/view_unpublished.info | 16 + .../view_unpublished/view_unpublished.install | 28 + .../view_unpublished/view_unpublished.module | 263 + ...unpublished_handler_filter_node_status.inc | 22 + sites/all/modules/custom/views/D7UPGRADE.txt | 2 + sites/all/modules/custom/views/LICENSE.txt | 339 + sites/all/modules/custom/views/README.txt | 19 + .../custom/views/css/ie/views-admin.ie7.css | 91 + .../custom/views/css/views-admin-rtl.css | 98 + .../views/css/views-admin.advanced_help.css | 24 + .../views/css/views-admin.bartik-rtl.css | 12 + .../custom/views/css/views-admin.bartik.css | 233 + .../views/css/views-admin.contextual.css | 63 + .../modules/custom/views/css/views-admin.css | 361 + .../views/css/views-admin.ctools-rtl.css | 82 + .../custom/views/css/views-admin.ctools.css | 232 + .../views/css/views-admin.garland-rtl.css | 13 + .../custom/views/css/views-admin.garland.css | 263 + .../views/css/views-admin.seven-rtl.css | 43 + .../custom/views/css/views-admin.seven.css | 552 + .../views/css/views-admin.theme-rtl.css | 208 + .../custom/views/css/views-admin.theme.css | 1083 ++ .../modules/custom/views/css/views-rtl.css | 5 + sites/all/modules/custom/views/css/views.css | 42 + .../custom/views/documentation-standards.txt | 5 + .../custom/views/drush/views.drush.inc | 496 + .../views/handlers/views_handler_area.inc | 133 + .../handlers/views_handler_area_messages.inc | 34 + .../handlers/views_handler_area_result.inc | 96 + .../handlers/views_handler_area_text.inc | 110 + .../views_handler_area_text_custom.inc | 56 + .../handlers/views_handler_area_view.inc | 83 + .../views/handlers/views_handler_argument.inc | 1244 ++ .../handlers/views_handler_argument_date.inc | 101 + .../views_handler_argument_formula.inc | 63 + ...iews_handler_argument_group_by_numeric.inc | 29 + .../views_handler_argument_many_to_one.inc | 185 + .../handlers/views_handler_argument_null.inc | 67 + .../views_handler_argument_numeric.inc | 116 + .../views_handler_argument_string.inc | 274 + .../views/handlers/views_handler_field.inc | 1630 ++ .../handlers/views_handler_field_boolean.inc | 110 + .../views_handler_field_contextual_links.inc | 102 + .../handlers/views_handler_field_counter.inc | 66 + .../handlers/views_handler_field_custom.inc | 55 + .../handlers/views_handler_field_date.inc | 150 + .../handlers/views_handler_field_entity.inc | 104 + .../views_handler_field_machine_name.inc | 73 + .../handlers/views_handler_field_markup.inc | 59 + .../handlers/views_handler_field_math.inc | 84 + .../handlers/views_handler_field_numeric.inc | 137 + .../views_handler_field_prerender_list.inc | 158 + .../views_handler_field_serialized.inc | 65 + .../views_handler_field_time_interval.inc | 37 + .../handlers/views_handler_field_url.inc | 46 + .../views/handlers/views_handler_filter.inc | 1423 ++ .../views_handler_filter_boolean_operator.inc | 179 + ...handler_filter_boolean_operator_string.inc | 35 + .../handlers/views_handler_filter_combine.inc | 170 + .../handlers/views_handler_filter_date.inc | 183 + .../views_handler_filter_entity_bundle.inc | 122 + .../views_handler_filter_equality.inc | 45 + .../views_handler_filter_fields_compare.inc | 142 + .../views_handler_filter_group_by_numeric.inc | 56 + .../views_handler_filter_in_operator.inc | 426 + .../views_handler_filter_many_to_one.inc | 125 + .../handlers/views_handler_filter_numeric.inc | 325 + .../handlers/views_handler_filter_string.inc | 338 + .../handlers/views_handler_relationship.inc | 186 + ...ews_handler_relationship_groupwise_max.inc | 382 + .../views/handlers/views_handler_sort.inc | 240 + .../handlers/views_handler_sort_date.inc | 74 + .../views_handler_sort_group_by_numeric.inc | 38 + .../views_handler_sort_menu_hierarchy.inc | 54 + .../handlers/views_handler_sort_random.inc | 22 + .../all/modules/custom/views/help/about.html | 62 + .../custom/views/help/advanced-settings.html | 43 + .../views/help/advanced-style-settings.html | 30 + .../custom/views/help/aggregation.html | 1 + .../views/help/alter-exposed-filter.html | 31 + .../custom/views/help/analyze-theme.html | 24 + .../custom/views/help/api-default-views.html | 103 + .../custom/views/help/api-example.html | 179 + .../modules/custom/views/help/api-forms.html | 88 + .../custom/views/help/api-handler-area.html | 45 + .../modules/custom/views/help/api-tables.html | 262 + .../custom/views/help/api-upgrading.html | 224 + sites/all/modules/custom/views/help/api.html | 24 + .../modules/custom/views/help/argument.html | 106 + .../custom/views/help/basic-settings.html | 20 + .../modules/custom/views/help/demo-video.html | 5 + .../custom/views/help/display-attachment.html | 1 + .../custom/views/help/display-block.html | 11 + .../custom/views/help/display-default.html | 3 + .../custom/views/help/display-feed.html | 1 + .../custom/views/help/display-page.html | 7 + .../modules/custom/views/help/display.html | 13 + .../all/modules/custom/views/help/drush.html | 13 + .../all/modules/custom/views/help/embed.html | 24 + .../modules/custom/views/help/empty-text.html | 3 + .../views/help/example-author-block.html | 77 + .../help/example-filter-by-current-user.html | 46 + .../views/help/example-recent-stories.html | 57 + .../help/example-slideshow-thumb-pager.html | 54 + .../custom/views/help/example-user-feed.html | 73 + .../views/help/example-users-by-role.html | 47 + .../custom/views/help/exposed-form.html | 24 + .../all/modules/custom/views/help/field.html | 27 + .../all/modules/custom/views/help/filter.html | 35 + .../custom/views/help/get-total-rows.html | 16 + .../custom/views/help/getting-started.html | 23 + .../modules/custom/views/help/group-by.html | 17 + .../all/modules/custom/views/help/header.html | 3 + .../images/node-term_node-term_data-large.png | Bin 0 -> 4141 bytes .../help/images/node-term_node-term_data.png | Bin 0 -> 3457 bytes .../views/help/images/overview-ui-large.png | Bin 0 -> 83826 bytes .../views/help/images/overview-ui-small.png | Bin 0 -> 44890 bytes .../help/images/style-breakdown-large.png | Bin 0 -> 47381 bytes .../views/help/images/style-breakdown.png | Bin 0 -> 15182 bytes .../views/help/images/views1-admin-large.png | Bin 0 -> 67878 bytes .../custom/views/help/images/views1-admin.png | Bin 0 -> 24372 bytes .../images/views1-changeviewtype-large.png | Bin 0 -> 37394 bytes .../help/images/views1-changeviewtype.png | Bin 0 -> 17456 bytes .../help/images/views2-addaview-large.png | Bin 0 -> 46121 bytes .../views/help/images/views2-addaview.png | Bin 0 -> 19262 bytes .../help/images/views2-adddisplay-large.png | Bin 0 -> 43413 bytes .../views/help/images/views2-adddisplay.png | Bin 0 -> 19976 bytes .../help/images/views2-addfields-large.png | Bin 0 -> 29487 bytes .../views/help/images/views2-addfields.png | Bin 0 -> 13043 bytes .../images/views2-addfieldsajax-large.png | Bin 0 -> 26423 bytes .../help/images/views2-addfieldsajax.png | Bin 0 -> 16005 bytes .../views/help/images/views2-admin-large.png | Bin 0 -> 53418 bytes .../custom/views/help/images/views2-admin.png | Bin 0 -> 19994 bytes .../views2-changedisplaystyle-large.png | Bin 0 -> 43090 bytes .../help/images/views2-changedisplaystyle.png | Bin 0 -> 16163 bytes .../images/views2-fieldspreview-large.png | Bin 0 -> 40484 bytes .../help/images/views2-fieldspreview.png | Bin 0 -> 12480 bytes .../help/images/views2-newview-large.png | Bin 0 -> 36263 bytes .../views/help/images/views2-newview.png | Bin 0 -> 17308 bytes .../images/views2-rearrangefields-large.png | Bin 0 -> 34183 bytes .../help/images/views2-rearrangefields.png | Bin 0 -> 19129 bytes .../help/images/views2-tablestyle-large.png | Bin 0 -> 38890 bytes .../views/help/images/views2-tablestyle.png | Bin 0 -> 20917 bytes .../images/views3-group-aggregation-types.png | Bin 0 -> 16742 bytes .../help/images/views3-group-aggregation.png | Bin 0 -> 55825 bytes .../help/images/views3-jump-style-menu.png | Bin 0 -> 40328 bytes .../help/images/views3-semanticviews.png | Bin 0 -> 5611 bytes .../views/help/images/views3-views-all.png | Bin 0 -> 38583 bytes sites/all/modules/custom/views/help/menu.html | 21 + .../modules/custom/views/help/misc-notes.html | 11 + sites/all/modules/custom/views/help/new.html | 131 + .../modules/custom/views/help/other-help.html | 9 + .../modules/custom/views/help/overrides.html | 6 + sites/all/modules/custom/views/help/path.html | 7 + .../help/performance-views-vs-displays.html | 5 + .../custom/views/help/performance.html | 1 + .../help/relationship-representative.html | 14 + .../custom/views/help/relationship.html | 17 + .../modules/custom/views/help/reports.html | 3 + ...elect-multple-nids-contextual-filters.html | 28 + .../custom/views/help/semantic-views.html | 18 + sites/all/modules/custom/views/help/sort.html | 28 + .../custom/views/help/style-comment-rss.html | 1 + .../custom/views/help/style-fields.html | 16 + .../modules/custom/views/help/style-grid.html | 22 + .../custom/views/help/style-grouping.html | 7 + .../modules/custom/views/help/style-jump.html | 48 + .../modules/custom/views/help/style-list.html | 20 + .../custom/views/help/style-node-rss.html | 1 + .../modules/custom/views/help/style-node.html | 11 + .../modules/custom/views/help/style-row.html | 11 + .../modules/custom/views/help/style-rss.html | 5 + .../custom/views/help/style-settings.html | 3 + .../views/help/style-summary-unformatted.html | 3 + .../custom/views/help/style-summary.html | 3 + .../custom/views/help/style-table.html | 13 + .../custom/views/help/style-unformatted.html | 1 + .../all/modules/custom/views/help/style.html | 15 + .../views/help/taxonomy-page-override.html | 41 + .../modules/custom/views/help/theme-css.html | 76 + .../modules/custom/views/help/top-pager.html | 18 + .../modules/custom/views/help/ui-crashes.html | 25 + .../custom/views/help/updating-view3.html | 1 + .../modules/custom/views/help/updating.html | 7 + .../modules/custom/views/help/upgrading.html | 8 + .../custom/views/help/using-theme.html | 50 + .../modules/custom/views/help/view-add.html | 25 + .../custom/views/help/view-settings.html | 5 + .../modules/custom/views/help/view-type.html | 21 + .../modules/custom/views/help/views.help.ini | 359 + .../custom/views/images/arrow-active.png | Bin 0 -> 313 bytes .../all/modules/custom/views/images/close.png | Bin 0 -> 227 bytes .../custom/views/images/expanded-options.png | Bin 0 -> 228 bytes .../custom/views/images/loading-small.gif | Bin 0 -> 2112 bytes .../modules/custom/views/images/loading.gif | Bin 0 -> 6733 bytes .../custom/views/images/overridden.gif | Bin 0 -> 175 bytes .../modules/custom/views/images/sprites.png | Bin 0 -> 1777 bytes .../custom/views/images/status-active.gif | Bin 0 -> 2196 bytes .../modules/custom/views/includes/admin.inc | 5458 ++++++ .../modules/custom/views/includes/ajax.inc | 380 + .../modules/custom/views/includes/analyze.inc | 122 + .../modules/custom/views/includes/base.inc | 359 + .../modules/custom/views/includes/cache.inc | 205 + .../custom/views/includes/handlers.inc | 1712 ++ .../modules/custom/views/includes/plugins.inc | 584 + .../modules/custom/views/includes/view.inc | 2657 +++ sites/all/modules/custom/views/js/ajax.js | 237 + .../all/modules/custom/views/js/ajax_view.js | 147 + sites/all/modules/custom/views/js/base.js | 110 + .../custom/views/js/jquery.ui.dialog.patch.js | 27 + .../modules/custom/views/js/views-admin.js | 1028 ++ .../custom/views/js/views-contextual.js | 16 + .../all/modules/custom/views/js/views-list.js | 21 + .../custom/views/modules/aggregator.views.inc | 406 + ...ndler_argument_aggregator_category_cid.inc | 26 + .../views_handler_argument_aggregator_fid.inc | 26 + .../views_handler_argument_aggregator_iid.inc | 30 + ...iews_handler_field_aggregator_category.inc | 60 + ...ws_handler_field_aggregator_title_link.inc | 55 + .../views_handler_field_aggregator_xss.inc | 18 + ...handler_filter_aggregator_category_cid.inc | 26 + .../views_plugin_row_aggregator_rss.inc | 74 + .../custom/views/modules/book.views.inc | 131 + ...iews_plugin_argument_default_book_root.inc | 21 + .../custom/views/modules/comment.views.inc | 662 + .../views/modules/comment.views_default.inc | 285 + ...iews_handler_argument_comment_user_uid.inc | 61 + .../comment/views_handler_field_comment.inc | 73 + .../views_handler_field_comment_depth.inc | 21 + .../views_handler_field_comment_link.inc | 69 + ...ews_handler_field_comment_link_approve.inc | 36 + ...iews_handler_field_comment_link_delete.inc | 29 + .../views_handler_field_comment_link_edit.inc | 52 + ...views_handler_field_comment_link_reply.inc | 29 + .../views_handler_field_comment_node_link.inc | 64 + .../views_handler_field_comment_username.inc | 58 + ...s_handler_field_last_comment_timestamp.inc | 28 + ...ws_handler_field_ncs_last_comment_name.inc | 54 + .../views_handler_field_ncs_last_updated.inc | 18 + .../views_handler_field_node_comment.inc | 26 + .../views_handler_field_node_new_comments.inc | 115 + .../views_handler_filter_comment_user_uid.inc | 29 + .../views_handler_filter_ncs_last_updated.inc | 25 + .../views_handler_filter_node_comment.inc | 21 + .../views_handler_sort_comment_thread.inc | 28 + ...ews_handler_sort_ncs_last_comment_name.inc | 30 + .../views_handler_sort_ncs_last_updated.inc | 19 + .../comment/views_plugin_row_comment_rss.inc | 152 + .../comment/views_plugin_row_comment_view.inc | 97 + .../custom/views/modules/contact.views.inc | 21 + .../views_handler_field_contact_link.inc | 57 + .../custom/views/modules/field.views.inc | 510 + .../views_handler_argument_field_list.inc | 58 + ...ews_handler_argument_field_list_string.inc | 59 + .../field/views_handler_field_field.inc | 934 + .../field/views_handler_filter_field_list.inc | 32 + ...iews_handler_filter_field_list_boolean.inc | 33 + ...ws_handler_relationship_entity_reverse.inc | 84 + .../custom/views/modules/file.views.inc | 73 + .../custom/views/modules/filter.views.inc | 33 + ...views_handler_field_filter_format_name.inc | 36 + .../custom/views/modules/image.views.inc | 72 + .../custom/views/modules/locale.views.inc | 221 + .../views_handler_argument_locale_group.inc | 40 + ...views_handler_argument_locale_language.inc | 38 + .../views_handler_field_locale_group.inc | 21 + .../views_handler_field_locale_language.inc | 36 + .../views_handler_field_locale_link_edit.inc | 60 + .../views_handler_field_node_language.inc | 37 + .../views_handler_filter_locale_group.inc | 23 + .../views_handler_filter_locale_language.inc | 26 + .../views_handler_filter_locale_version.inc | 28 + .../views_handler_filter_node_language.inc | 26 + .../custom/views/modules/node.views.inc | 784 + .../views/modules/node.views_default.inc | 318 + .../views/modules/node.views_template.inc | 135 + .../views_handler_argument_dates_various.inc | 177 + .../views_handler_argument_node_language.inc | 36 + .../node/views_handler_argument_node_nid.inc | 24 + .../node/views_handler_argument_node_type.inc | 39 + ...ews_handler_argument_node_uid_revision.inc | 18 + .../node/views_handler_argument_node_vid.inc | 26 + ...s_handler_field_history_user_timestamp.inc | 82 + .../modules/node/views_handler_field_node.inc | 80 + .../node/views_handler_field_node_link.inc | 48 + .../views_handler_field_node_link_delete.inc | 31 + .../views_handler_field_node_link_edit.inc | 31 + .../node/views_handler_field_node_path.inc | 47 + .../views_handler_field_node_revision.inc | 74 + ...views_handler_field_node_revision_link.inc | 66 + ...andler_field_node_revision_link_delete.inc | 36 + ...andler_field_node_revision_link_revert.inc | 36 + .../node/views_handler_field_node_type.inc | 49 + ..._handler_filter_history_user_timestamp.inc | 87 + .../node/views_handler_filter_node_access.inc | 40 + .../node/views_handler_filter_node_status.inc | 22 + .../node/views_handler_filter_node_type.inc | 26 + ...views_handler_filter_node_uid_revision.inc | 25 + .../views_plugin_argument_default_node.inc | 26 + .../views_plugin_argument_validate_node.inc | 135 + .../node/views_plugin_row_node_rss.inc | 174 + .../node/views_plugin_row_node_view.inc | 110 + .../custom/views/modules/poll.views.inc | 47 + .../custom/views/modules/profile.views.inc | 217 + .../views_handler_field_profile_date.inc | 90 + .../views_handler_field_profile_list.inc | 41 + ...views_handler_filter_profile_selection.inc | 30 + .../custom/views/modules/search.views.inc | 202 + .../views/modules/search.views_default.inc | 119 + .../search/views_handler_argument_search.inc | 100 + .../views_handler_field_search_score.inc | 81 + .../search/views_handler_filter_search.inc | 234 + .../views_handler_sort_search_score.inc | 32 + .../search/views_plugin_row_search_view.inc | 39 + .../custom/views/modules/statistics.views.inc | 263 + .../modules/statistics.views_default.inc | 253 + .../views_handler_field_accesslog_path.inc | 58 + .../custom/views/modules/system.views.inc | 578 + .../views_handler_argument_file_fid.inc | 28 + .../system/views_handler_field_file.inc | 61 + .../views_handler_field_file_extension.inc | 49 + .../views_handler_field_file_filemime.inc | 38 + .../views_handler_field_file_status.inc | 18 + .../system/views_handler_field_file_uri.inc | 35 + .../views_handler_filter_file_status.inc | 19 + .../views_handler_filter_system_type.inc | 21 + .../custom/views/modules/taxonomy.views.inc | 540 + .../views/modules/taxonomy.views_default.inc | 109 + .../views_handler_argument_taxonomy.inc | 29 + .../views_handler_argument_term_node_tid.inc | 49 + ...s_handler_argument_term_node_tid_depth.inc | 145 + ..._argument_term_node_tid_depth_modifier.inc | 64 + ...ndler_argument_vocabulary_machine_name.inc | 26 + .../views_handler_argument_vocabulary_vid.inc | 26 + .../taxonomy/views_handler_field_taxonomy.inc | 85 + .../views_handler_field_term_link_edit.inc | 62 + .../views_handler_field_term_node_tid.inc | 145 + .../views_handler_filter_term_node_tid.inc | 361 + ...ews_handler_filter_term_node_tid_depth.inc | 100 + ...handler_filter_vocabulary_machine_name.inc | 25 + .../views_handler_filter_vocabulary_vid.inc | 25 + ...ws_handler_relationship_node_term_data.inc | 97 + ...s_plugin_argument_default_taxonomy_tid.inc | 154 + ...plugin_argument_validate_taxonomy_term.inc | 223 + .../custom/views/modules/tracker.views.inc | 183 + ...dler_argument_tracker_comment_user_uid.inc | 26 + ...andler_filter_tracker_boolean_operator.inc | 31 + ...andler_filter_tracker_comment_user_uid.inc | 23 + .../views/modules/translation.views.inc | 121 + .../views_handler_argument_node_tnid.inc | 26 + ...iews_handler_field_node_link_translate.inc | 29 + ...ws_handler_field_node_translation_link.inc | 49 + .../views_handler_filter_node_tnid.inc | 45 + .../views_handler_filter_node_tnid_child.inc | 22 + ...views_handler_relationship_translation.inc | 103 + .../custom/views/modules/user.views.inc | 575 + .../user/views_handler_argument_user_uid.inc | 33 + ...views_handler_argument_users_roles_rid.inc | 23 + .../modules/user/views_handler_field_user.inc | 55 + .../views_handler_field_user_language.inc | 39 + .../user/views_handler_field_user_link.inc | 58 + .../views_handler_field_user_link_cancel.inc | 33 + .../views_handler_field_user_link_edit.inc | 30 + .../user/views_handler_field_user_mail.inc | 44 + .../user/views_handler_field_user_name.inc | 83 + .../views_handler_field_user_permissions.inc | 68 + .../user/views_handler_field_user_picture.inc | 114 + .../user/views_handler_field_user_roles.inc | 57 + .../views_handler_filter_user_current.inc | 36 + .../user/views_handler_filter_user_name.inc | 162 + .../views_handler_filter_user_permissions.inc | 35 + .../user/views_handler_filter_user_roles.inc | 28 + ...s_plugin_argument_default_current_user.inc | 18 + .../views_plugin_argument_default_user.inc | 77 + .../views_plugin_argument_validate_user.inc | 140 + .../user/views_plugin_row_user_view.inc | 81 + .../custom/views/modules/views.views.inc | 131 + .../plugins/export_ui/views_ui.class.php | 447 + .../views/plugins/export_ui/views_ui.inc | 37 + .../views/plugins/views_plugin_access.inc | 96 + .../plugins/views_plugin_access_none.inc | 17 + .../plugins/views_plugin_access_perm.inc | 62 + .../plugins/views_plugin_access_role.inc | 66 + .../plugins/views_plugin_argument_default.inc | 94 + .../views_plugin_argument_default_fixed.inc | 46 + .../views_plugin_argument_default_php.inc | 57 + .../views_plugin_argument_default_raw.inc | 50 + .../views_plugin_argument_validate.inc | 99 + ...views_plugin_argument_validate_numeric.inc | 17 + .../views_plugin_argument_validate_php.inc | 57 + .../views/plugins/views_plugin_cache.inc | 318 + .../views/plugins/views_plugin_cache_none.inc | 25 + .../views/plugins/views_plugin_cache_time.inc | 110 + .../views/plugins/views_plugin_display.inc | 3075 ++++ .../views_plugin_display_attachment.inc | 282 + .../plugins/views_plugin_display_block.inc | 243 + .../plugins/views_plugin_display_default.inc | 57 + .../plugins/views_plugin_display_embed.inc | 14 + .../plugins/views_plugin_display_extender.inc | 62 + .../plugins/views_plugin_display_feed.inc | 222 + .../plugins/views_plugin_display_page.inc | 569 + .../plugins/views_plugin_exposed_form.inc | 334 + .../views_plugin_exposed_form_basic.inc | 13 + ...ews_plugin_exposed_form_input_required.inc | 97 + .../plugins/views_plugin_localization.inc | 171 + .../views_plugin_localization_core.inc | 109 + .../views_plugin_localization_none.inc | 36 + .../views/plugins/views_plugin_pager.inc | 236 + .../views/plugins/views_plugin_pager_full.inc | 424 + .../views/plugins/views_plugin_pager_mini.inc | 70 + .../views/plugins/views_plugin_pager_none.inc | 75 + .../views/plugins/views_plugin_pager_some.inc | 62 + .../views/plugins/views_plugin_query.inc | 185 + .../plugins/views_plugin_query_default.inc | 1659 ++ .../custom/views/plugins/views_plugin_row.inc | 152 + .../views/plugins/views_plugin_row_fields.inc | 86 + .../plugins/views_plugin_row_rss_fields.inc | 180 + .../views/plugins/views_plugin_style.inc | 598 + .../plugins/views_plugin_style_default.inc | 25 + .../views/plugins/views_plugin_style_grid.inc | 70 + .../plugins/views_plugin_style_jump_menu.inc | 176 + .../views/plugins/views_plugin_style_list.inc | 53 + .../plugins/views_plugin_style_mapping.inc | 125 + .../views/plugins/views_plugin_style_rss.inc | 123 + .../plugins/views_plugin_style_summary.inc | 76 + .../views_plugin_style_summary_jump_menu.inc | 146 + ...views_plugin_style_summary_unformatted.inc | 34 + .../plugins/views_plugin_style_table.inc | 307 + .../views/plugins/views_wizard/comment.inc | 44 + .../plugins/views_wizard/file_managed.inc | 26 + .../views/plugins/views_wizard/node.inc | 42 + .../plugins/views_wizard/node_revision.inc | 43 + .../plugins/views_wizard/taxonomy_term.inc | 30 + .../views/plugins/views_wizard/users.inc | 35 + .../views_ui_base_views_wizard.class.php | 929 + .../views_ui_comment_views_wizard.class.php | 108 + ...ews_ui_file_managed_views_wizard.class.php | 40 + ...ws_ui_node_revision_views_wizard.class.php | 68 + .../views_ui_node_views_wizard.class.php | 137 + ...ws_ui_taxonomy_term_views_wizard.class.php | 42 + .../views_ui_users_views_wizard.class.php | 42 + ...ews_handler_argument_comment_user_uid.test | 106 + ...views_handler_filter_comment_user_uid.test | 41 + .../views/tests/field/views_fieldapi.test | 494 + .../handlers/views_handler_area_text.test | 52 + .../handlers/views_handler_argument_null.test | 72 + .../views_handler_argument_string.test | 96 + .../tests/handlers/views_handler_field.test | 314 + .../handlers/views_handler_field_boolean.test | 108 + .../handlers/views_handler_field_counter.test | 70 + .../handlers/views_handler_field_custom.test | 47 + .../handlers/views_handler_field_date.test | 117 + .../views_handler_field_file_extension.test | 66 + .../views_handler_field_file_size.test | 64 + .../handlers/views_handler_field_math.test | 45 + .../handlers/views_handler_field_url.test | 60 + .../handlers/views_handler_field_xss.test | 60 + .../views_handler_filter_combine.test | 105 + .../handlers/views_handler_filter_date.test | 190 + .../views_handler_filter_equality.test | 173 + .../views_handler_filter_in_operator.test | 196 + .../views_handler_filter_numeric.test | 409 + .../handlers/views_handler_filter_string.test | 810 + .../tests/handlers/views_handler_sort.test | 121 + .../handlers/views_handler_sort_date.test | 198 + .../handlers/views_handler_sort_random.test | 89 + .../views/tests/handlers/views_handlers.test | 81 + .../node/views_node_revision_relations.test | 177 + .../tests/plugins/views_plugin_display.test | 194 + .../tests/styles/views_plugin_style.test | 264 + .../tests/styles/views_plugin_style_base.test | 33 + .../styles/views_plugin_style_jump_menu.test | 151 + .../styles/views_plugin_style_mapping.test | 144 + .../views_plugin_style_unformatted.test | 53 + ...s_handler_relationship_node_term_data.test | 122 + .../templates/views-view--frontpage.tpl.php | 85 + .../test_handlers/views_test_area_access.inc | 28 + .../views_test_plugin_access_test_dynamic.inc | 26 + .../views_test_plugin_access_test_static.inc | 26 + .../views_test_plugin_style_test_mapping.inc | 52 + .../user/views_handler_field_user_name.test | 96 + .../custom/views/tests/user/views_user.test | 143 + .../user/views_user_argument_default.test | 90 + .../user/views_user_argument_validate.test | 115 + .../custom/views/tests/views_access.test | 285 + .../custom/views/tests/views_analyze.test | 51 + .../views/tests/views_argument_default.test | 137 + .../views/tests/views_argument_validator.test | 106 + .../custom/views/tests/views_basic.test | 178 + .../custom/views/tests/views_cache.test | 308 + .../custom/views/tests/views_cache.test.css | 5 + .../custom/views/tests/views_cache.test.js | 5 + .../views/tests/views_exposed_form.test | 170 + .../custom/views/tests/views_glossary.test | 60 + .../custom/views/tests/views_groupby.test | 326 + .../custom/views/tests/views_handlers.test | 150 + .../custom/views/tests/views_module.test | 217 + .../custom/views/tests/views_pager.test | 496 + .../tests/views_plugin_localization_test.inc | 40 + .../custom/views/tests/views_query.test | 433 + .../custom/views/tests/views_test.info | 13 + .../custom/views/tests/views_test.install | 13 + .../custom/views/tests/views_test.module | 121 + .../views/tests/views_test.views_default.inc | 222 + .../views/tests/views_translatable.test | 221 + .../modules/custom/views/tests/views_ui.test | 973 + .../custom/views/tests/views_upgrade.test | 277 + .../custom/views/tests/views_view.test | 290 + .../all/modules/custom/views/theme/theme.inc | 1155 ++ .../views/theme/views-exposed-form.tpl.php | 80 + .../custom/views/theme/views-more.tpl.php | 19 + .../theme/views-ui-display-tab-bucket.tpl.php | 17 + .../views-ui-display-tab-setting.tpl.php | 15 + .../views/theme/views-ui-edit-item.tpl.php | 45 + .../views/theme/views-ui-edit-view.tpl.php | 46 + .../views/theme/views-view-field.tpl.php | 25 + .../views/theme/views-view-fields.tpl.php | 36 + .../views/theme/views-view-grid.tpl.php | 32 + .../views/theme/views-view-grouping.tpl.php | 25 + .../views/theme/views-view-list.tpl.php | 21 + .../theme/views-view-row-comment.tpl.php | 18 + .../views/theme/views-view-row-rss.tpl.php | 15 + .../custom/views/theme/views-view-rss.tpl.php | 20 + .../views-view-summary-unformatted.tpl.php | 20 + .../views/theme/views-view-summary.tpl.php | 20 + .../views/theme/views-view-table.tpl.php | 48 + .../theme/views-view-unformatted.tpl.php | 17 + .../custom/views/theme/views-view.tpl.php | 90 + sites/all/modules/custom/views/views.api.php | 1183 ++ sites/all/modules/custom/views/views.info | 326 + sites/all/modules/custom/views/views.install | 633 + sites/all/modules/custom/views/views.module | 2567 +++ .../all/modules/custom/views/views.tokens.inc | 94 + .../views/views_export/views_export.module | 10 + sites/all/modules/custom/views/views_ui.info | 15 + .../all/modules/custom/views/views_ui.module | 867 + .../custom/views_accordion/LICENSE.txt | 339 + .../modules/custom/views_accordion/README.txt | 50 + .../help/theming-views-accordion.html | 7 + .../help/using-views-accordion.html | 17 + .../help/views-accordion-style.html | 2 + .../help/views_accordion.help.ini | 17 + .../views_accordion/views-accordion.css | 14 + .../custom/views_accordion/views-accordion.js | 75 + .../views-view-accordion.tpl.php | 33 + .../views_accordion/views_accordion.info | 14 + .../views_accordion/views_accordion.module | 97 + .../views_accordion/views_accordion.views.inc | 26 + .../views_accordion_style_plugin.inc | 285 + .../custom/views_bulk_operations/LICENSE.txt | 339 + .../custom/views_bulk_operations/README.txt | 13 + .../actions/archive.action.inc | 192 + .../actions/argument_selector.action.inc | 49 + .../actions/book.action.inc | 77 + .../actions/delete.action.inc | 37 + .../actions/modify.action.inc | 617 + .../actions/script.action.inc | 92 + .../actions/user_cancel.action.inc | 81 + .../actions/user_roles.action.inc | 68 + .../actions_permissions.info | 11 + .../actions_permissions.module | 51 + .../css/modify.action.css | 4 + .../css/views_bulk_operations.css | 35 + .../js/views_bulk_operations.js | 125 + .../plugins/operation_types/action.class.php | 261 + .../plugins/operation_types/action.inc | 104 + .../plugins/operation_types/base.class.php | 271 + .../operation_types/rules_component.class.php | 129 + .../operation_types/rules_component.inc | 94 + .../views/views_bulk_operations.views.inc | 33 + ...lk_operations_handler_field_operations.inc | 324 + .../views_bulk_operations.api.php | 35 + .../views_bulk_operations.drush.inc | 196 + .../views_bulk_operations.info | 17 + .../views_bulk_operations.install | 14 + .../views_bulk_operations.module | 1283 ++ .../views_bulk_operations.rules.inc | 298 + .../custom/views_datasource/LICENSE.txt | 339 + .../custom/views_datasource/README.txt | 227 + .../views/plugins/views_plugin_style_json.inc | 277 + .../views/plugins/views_plugin_style_rdf.inc | 151 + .../plugins/views_plugin_style_xhtml.inc | 158 + .../views/plugins/views_plugin_style_xml.inc | 204 + .../plugins/views_plugin_style_xml_test.inc | 122 + .../views-views-json-style-exhibit.tpl.php | 42 + .../views-views-json-style-simple.tpl.php | 45 + .../theme/views-views-json-style.tpl.php | 15 + .../theme/views-views-rdf-style-doap.tpl.php | 69 + .../theme/views-views-rdf-style-foaf.tpl.php | 102 + .../theme/views-views-rdf-style-sioc.tpl.php | 125 + .../views/theme/views-views-rdf-style.tpl.php | 15 + .../views-views-xhtml-style-hcalendar.tpl.php | 128 + .../views-views-xhtml-style-hcard.tpl.php | 157 + .../theme/views-views-xhtml-style.tpl.php | 15 + ...views-views-xml-style--singles-xml.tpl.php | 2 + .../theme/views-views-xml-style-atom.tpl.php | 114 + .../theme/views-views-xml-style-opml.tpl.php | 71 + .../theme/views-views-xml-style-raw.tpl.php | 24 + .../views/theme/views-views-xml-style.tpl.php | 16 + .../theme/views_views_json_style.theme.inc | 236 + .../theme/views_views_rdf_style.theme.inc | 647 + .../theme/views_views_xhtml_style.theme.inc | 334 + .../theme/views_views_xml_style.theme.inc | 467 + .../views/views_json.views.inc | 72 + .../views/views_rdf.views.inc | 61 + .../views/views_xhtml.views.inc | 60 + .../views/views_xml.views.inc | 61 + .../custom/views_datasource/views_json.info | 14 + .../custom/views_datasource/views_json.module | 430 + .../custom/views_datasource/views_rdf.info | 14 + .../custom/views_datasource/views_rdf.module | 267 + .../custom/views_datasource/views_xhtml.info | 15 + .../views_datasource/views_xhtml.module | 317 + .../custom/views_datasource/views_xml.info | 14 + .../custom/views_datasource/views_xml.module | 471 + .../custom/views_responsive_grid/LICENSE.txt | 339 + .../custom/views_responsive_grid/README.txt | 42 + .../views-view-responsive-grid.tpl.php | 39 + .../views_responsive_grid.info | 15 + .../views_responsive_grid.module | 137 + .../views_responsive_grid.views.inc | 26 + ...sive_grid_plugin_style_responsive_grid.inc | 137 + sites/all/modules/custom/webform/LICENSE.txt | 339 + sites/all/modules/custom/webform/README.txt | 52 + sites/all/modules/custom/webform/THEMING.txt | 115 + .../custom/webform/components/date.inc | 458 + .../custom/webform/components/email.inc | 305 + .../custom/webform/components/fieldset.inc | 101 + .../custom/webform/components/file.inc | 541 + .../custom/webform/components/grid.inc | 515 + .../custom/webform/components/hidden.inc | 185 + .../custom/webform/components/markup.inc | 106 + .../custom/webform/components/number.inc | 896 + .../custom/webform/components/pagebreak.inc | 99 + .../custom/webform/components/select.inc | 1074 ++ .../custom/webform/components/textarea.inc | 236 + .../custom/webform/components/textfield.inc | 274 + .../custom/webform/components/time.inc | 442 + .../custom/webform/css/webform-admin.css | 224 + .../modules/custom/webform/css/webform.css | 80 + .../custom/webform/images/calendar.png | Bin 0 -> 210 bytes .../includes/exporters/webform_exporter.inc | 72 + .../exporters/webform_exporter_delimited.inc | 47 + .../webform_exporter_excel_delimited.inc | 45 + .../exporters/webform_exporter_excel_xlsx.inc | 242 + .../custom/webform/includes/webform.admin.inc | 325 + .../webform/includes/webform.components.inc | 1142 ++ .../webform/includes/webform.conditionals.inc | 1105 ++ .../webform/includes/webform.emails.inc | 725 + .../webform/includes/webform.export.inc | 114 + .../webform/includes/webform.options.inc | 132 + .../custom/webform/includes/webform.pages.inc | 595 + .../webform/includes/webform.report.inc | 1730 ++ .../webform/includes/webform.submissions.inc | 995 + .../custom/webform/js/node-type-form.js | 19 + .../modules/custom/webform/js/select-admin.js | 58 + .../custom/webform/js/webform-admin.js | 288 + .../all/modules/custom/webform/js/webform.js | 398 + .../webform-analysis-component.tpl.php | 21 + .../templates/webform-analysis.tpl.php | 26 + .../templates/webform-calendar.tpl.php | 8 + .../templates/webform-confirmation.tpl.php | 33 + .../webform/templates/webform-form.tpl.php | 41 + .../webform/templates/webform-mail.tpl.php | 36 + .../templates/webform-progressbar.tpl.php | 57 + .../webform-results-submissions.tpl.php | 35 + .../webform-submission-information.tpl.php | 24 + .../webform-submission-navigation.tpl.php | 30 + .../templates/webform-submission-page.tpl.php | 35 + .../templates/webform-submission.tpl.php | 19 + .../custom/webform/tests/components.test | 37 + .../custom/webform/tests/conditionals.test | 182 + .../custom/webform/tests/permissions.test | 67 + .../custom/webform/tests/submission.test | 176 + .../modules/custom/webform/tests/webform.test | 1063 ++ .../views/default_views/webform_results.inc | 171 + .../default_views/webform_submissions.inc | 213 + .../custom/webform/views/webform.views.inc | 650 + .../webform_handler_area_result_pager.inc | 89 + .../views/webform_handler_field_form_body.inc | 42 + .../views/webform_handler_field_is_draft.inc | 20 + .../webform_handler_field_node_link_edit.inc | 29 + ...ebform_handler_field_node_link_results.inc | 29 + ...webform_handler_field_submission_count.inc | 63 + .../webform_handler_field_submission_data.inc | 216 + .../webform_handler_field_submission_link.inc | 91 + .../webform_handler_field_webform_status.inc | 37 + .../views/webform_handler_filter_is_draft.inc | 25 + ...webform_handler_filter_submission_data.inc | 91 + .../webform_handler_filter_webform_status.inc | 15 + ...m_handler_relationship_submission_data.inc | 57 + .../webform_plugin_row_submission_view.inc | 93 + .../modules/custom/webform/webform.api.php | 1327 ++ .../modules/custom/webform/webform.drush.inc | 106 + sites/all/modules/custom/webform/webform.info | 45 + .../modules/custom/webform/webform.install | 1910 ++ .../all/modules/custom/webform/webform.module | 4902 +++++ .../modules/custom/webform/webform.tokens.inc | 225 + sites/all/modules/custom/weight/LICENSE.txt | 339 + sites/all/modules/custom/weight/README.txt | 33 + .../custom/weight/views/weight.views.inc | 63 + .../weight/views/weight.views_default.inc | 114 + .../views/weight_handler_field_weight.inc | 77 + .../weight_handler_filter_weight_enabled.inc | 55 + .../modules/custom/weight/weight.features.inc | 61 + sites/all/modules/custom/weight/weight.info | 14 + .../all/modules/custom/weight/weight.install | 521 + sites/all/modules/custom/weight/weight.js | 39 + .../modules/custom/weight/weight.migrate.inc | 50 + sites/all/modules/custom/weight/weight.module | 812 + .../custom/wysiwyg_filter/CHANGELOG.txt | 78 + .../modules/custom/wysiwyg_filter/LICENSE.txt | 274 + .../modules/custom/wysiwyg_filter/README.txt | 84 + .../wysiwyg_filter/wysiwyg_filter.admin.css | 6 + .../wysiwyg_filter/wysiwyg_filter.admin.inc | 321 + .../custom/wysiwyg_filter/wysiwyg_filter.inc | 529 + .../custom/wysiwyg_filter/wysiwyg_filter.info | 17 + .../wysiwyg_filter/wysiwyg_filter.install | 19 + .../wysiwyg_filter/wysiwyg_filter.module | 93 + .../wysiwyg_filter/wysiwyg_filter.pages.inc | 518 + 3704 files changed, 696782 insertions(+) create mode 100644 sites/all/modules/custom/addressfield/LICENSE.txt create mode 100644 sites/all/modules/custom/addressfield/addresses.txt create mode 100644 sites/all/modules/custom/addressfield/addressfield-rtl.css create mode 100644 sites/all/modules/custom/addressfield/addressfield.address_formats.inc create mode 100644 sites/all/modules/custom/addressfield/addressfield.administrative_areas.inc create mode 100644 sites/all/modules/custom/addressfield/addressfield.api.php create mode 100644 sites/all/modules/custom/addressfield/addressfield.css create mode 100644 sites/all/modules/custom/addressfield/addressfield.devel_generate.inc create mode 100644 sites/all/modules/custom/addressfield/addressfield.feeds.inc create mode 100644 sites/all/modules/custom/addressfield/addressfield.info create mode 100644 sites/all/modules/custom/addressfield/addressfield.install create mode 100644 sites/all/modules/custom/addressfield/addressfield.migrate.inc create mode 100644 sites/all/modules/custom/addressfield/addressfield.module create mode 100644 sites/all/modules/custom/addressfield/addressfield.tokens.inc create mode 100644 sites/all/modules/custom/addressfield/example/addressfield_example.info create mode 100644 sites/all/modules/custom/addressfield/example/addressfield_example.module create mode 100644 sites/all/modules/custom/addressfield/example/plugins/format/address-ch-example.inc create mode 100644 sites/all/modules/custom/addressfield/plugins/format/address-hide-country.inc create mode 100644 sites/all/modules/custom/addressfield/plugins/format/address-hide-postal-code.inc create mode 100644 sites/all/modules/custom/addressfield/plugins/format/address-hide-street.inc create mode 100644 sites/all/modules/custom/addressfield/plugins/format/address-optional.inc create mode 100644 sites/all/modules/custom/addressfield/plugins/format/address.inc create mode 100644 sites/all/modules/custom/addressfield/plugins/format/name-full.inc create mode 100644 sites/all/modules/custom/addressfield/plugins/format/name-oneline.inc create mode 100644 sites/all/modules/custom/addressfield/plugins/format/organisation.inc create mode 100644 sites/all/modules/custom/addressfield/views/addressfield.views.inc create mode 100644 sites/all/modules/custom/addressfield/views/addressfield_views_handler_field_country.inc create mode 100644 sites/all/modules/custom/addressfield/views/addressfield_views_handler_filter_country.inc create mode 100644 sites/all/modules/custom/admin_menu/CHANGELOG.txt create mode 100644 sites/all/modules/custom/admin_menu/LICENSE.txt create mode 100644 sites/all/modules/custom/admin_menu/README.txt create mode 100644 sites/all/modules/custom/admin_menu/admin_devel/admin_devel.info create mode 100644 sites/all/modules/custom/admin_menu/admin_devel/admin_devel.js create mode 100644 sites/all/modules/custom/admin_menu/admin_devel/admin_devel.module create mode 100644 sites/all/modules/custom/admin_menu/admin_menu-rtl.css create mode 100644 sites/all/modules/custom/admin_menu/admin_menu.admin.js create mode 100644 sites/all/modules/custom/admin_menu/admin_menu.api.php create mode 100644 sites/all/modules/custom/admin_menu/admin_menu.color.css create mode 100644 sites/all/modules/custom/admin_menu/admin_menu.css create mode 100644 sites/all/modules/custom/admin_menu/admin_menu.inc create mode 100644 sites/all/modules/custom/admin_menu/admin_menu.info create mode 100644 sites/all/modules/custom/admin_menu/admin_menu.install create mode 100644 sites/all/modules/custom/admin_menu/admin_menu.js create mode 100644 sites/all/modules/custom/admin_menu/admin_menu.map.inc create mode 100644 sites/all/modules/custom/admin_menu/admin_menu.module create mode 100644 sites/all/modules/custom/admin_menu/admin_menu.uid1.css create mode 100644 sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.css create mode 100644 sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.info create mode 100644 sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.install create mode 100644 sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.js create mode 100644 sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.module create mode 100644 sites/all/modules/custom/admin_menu/admin_menu_toolbar/toolbar.png create mode 100644 sites/all/modules/custom/admin_menu/images/arrow-rtl.png create mode 100644 sites/all/modules/custom/admin_menu/images/arrow.png create mode 100644 sites/all/modules/custom/admin_menu/images/bkg-red.png create mode 100644 sites/all/modules/custom/admin_menu/images/bkg.png create mode 100644 sites/all/modules/custom/admin_menu/images/bkg_tab.png create mode 100644 sites/all/modules/custom/admin_menu/images/icon_users.png create mode 100644 sites/all/modules/custom/admin_menu/tests/admin_menu.test create mode 100755 sites/all/modules/custom/adminimal_admin_menu/LICENSE.txt create mode 100644 sites/all/modules/custom/adminimal_admin_menu/README.txt create mode 100644 sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.css create mode 100644 sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.info create mode 100644 sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.install create mode 100644 sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.js create mode 100644 sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.module create mode 100644 sites/all/modules/custom/adminimal_admin_menu/adminimal_menu_settings.inc create mode 100644 sites/all/modules/custom/adminimal_admin_menu/images/home.png create mode 100644 sites/all/modules/custom/adminimal_admin_menu/images/shortcut.png create mode 100644 sites/all/modules/custom/adminimal_admin_menu/images/square.png create mode 100644 sites/all/modules/custom/autocomplete_deluxe/LICENSE.txt create mode 100755 sites/all/modules/custom/autocomplete_deluxe/README.txt create mode 100644 sites/all/modules/custom/autocomplete_deluxe/autocomplete_deluxe-rtl.css create mode 100755 sites/all/modules/custom/autocomplete_deluxe/autocomplete_deluxe.api.php create mode 100755 sites/all/modules/custom/autocomplete_deluxe/autocomplete_deluxe.css create mode 100644 sites/all/modules/custom/autocomplete_deluxe/autocomplete_deluxe.info create mode 100755 sites/all/modules/custom/autocomplete_deluxe/autocomplete_deluxe.js create mode 100755 sites/all/modules/custom/autocomplete_deluxe/autocomplete_deluxe.module create mode 100644 sites/all/modules/custom/autocomplete_deluxe/autocomplete_deluxe.seven.css create mode 100644 sites/all/modules/custom/autocomplete_deluxe/throbber.gif create mode 100644 sites/all/modules/custom/autocomplete_deluxe/x.gif create mode 100644 sites/all/modules/custom/better_exposed_filters/CHANGELOG.txt create mode 100644 sites/all/modules/custom/better_exposed_filters/LICENSE.txt create mode 100644 sites/all/modules/custom/better_exposed_filters/README.txt create mode 100644 sites/all/modules/custom/better_exposed_filters/better_exposed_filters.api.php create mode 100644 sites/all/modules/custom/better_exposed_filters/better_exposed_filters.css create mode 100644 sites/all/modules/custom/better_exposed_filters/better_exposed_filters.info create mode 100644 sites/all/modules/custom/better_exposed_filters/better_exposed_filters.js create mode 100644 sites/all/modules/custom/better_exposed_filters/better_exposed_filters.module create mode 100644 sites/all/modules/custom/better_exposed_filters/better_exposed_filters.theme create mode 100644 sites/all/modules/custom/better_exposed_filters/better_exposed_filters.views.inc create mode 100644 sites/all/modules/custom/better_exposed_filters/better_exposed_filters_exposed_form_plugin.inc create mode 100644 sites/all/modules/custom/better_exposed_filters/tests/bef_test_content/bef_test_content.features.field_base.inc create mode 100644 sites/all/modules/custom/better_exposed_filters/tests/bef_test_content/bef_test_content.features.field_instance.inc create mode 100644 sites/all/modules/custom/better_exposed_filters/tests/bef_test_content/bef_test_content.features.inc create mode 100644 sites/all/modules/custom/better_exposed_filters/tests/bef_test_content/bef_test_content.features.taxonomy.inc create mode 100644 sites/all/modules/custom/better_exposed_filters/tests/bef_test_content/bef_test_content.info create mode 100644 sites/all/modules/custom/better_exposed_filters/tests/bef_test_content/bef_test_content.module create mode 100644 sites/all/modules/custom/better_exposed_filters/tests/bef_test_content/bef_test_content.views_default.inc create mode 100644 sites/all/modules/custom/better_exposed_filters/tests/better_exposed_filters.test create mode 100644 sites/all/modules/custom/better_exposed_filters/tests/better_exposed_filters_TestBase.php create mode 100644 sites/all/modules/custom/better_formats/LICENSE.txt create mode 100644 sites/all/modules/custom/better_formats/README.txt create mode 100644 sites/all/modules/custom/better_formats/better_formats.admin_defaults.inc create mode 100644 sites/all/modules/custom/better_formats/better_formats.admin_settings.inc create mode 100644 sites/all/modules/custom/better_formats/better_formats.info create mode 100644 sites/all/modules/custom/better_formats/better_formats.install create mode 100644 sites/all/modules/custom/better_formats/better_formats.module create mode 100644 sites/all/modules/custom/boxes/LICENSE.txt create mode 100644 sites/all/modules/custom/boxes/README.txt create mode 100644 sites/all/modules/custom/boxes/boxes.admin.inc create mode 100644 sites/all/modules/custom/boxes/boxes.css create mode 100644 sites/all/modules/custom/boxes/boxes.info create mode 100644 sites/all/modules/custom/boxes/boxes.install create mode 100644 sites/all/modules/custom/boxes/boxes.js create mode 100644 sites/all/modules/custom/boxes/boxes.module create mode 100644 sites/all/modules/custom/boxes/plugins/boxes_box.inc create mode 100644 sites/all/modules/custom/boxes/plugins/boxes_simple.inc create mode 100644 sites/all/modules/custom/boxes/plugins/spaces_controller_boxes.inc create mode 100644 sites/all/modules/custom/boxes/swirly.gif create mode 100644 sites/all/modules/custom/boxes/tests/boxes.test create mode 100644 sites/all/modules/custom/boxes/tests/boxes_spaces.test create mode 100644 sites/all/modules/custom/bundle_copy/CHANGELOG.txt create mode 100644 sites/all/modules/custom/bundle_copy/LICENSE.txt create mode 100644 sites/all/modules/custom/bundle_copy/bundle_copy.api.php create mode 100644 sites/all/modules/custom/bundle_copy/bundle_copy.info create mode 100644 sites/all/modules/custom/bundle_copy/bundle_copy.module create mode 100755 sites/all/modules/custom/chosen/LICENSE.txt create mode 100644 sites/all/modules/custom/chosen/README.txt create mode 100644 sites/all/modules/custom/chosen/UPDATE.txt create mode 100644 sites/all/modules/custom/chosen/chosen.admin.inc create mode 100644 sites/all/modules/custom/chosen/chosen.info create mode 100644 sites/all/modules/custom/chosen/chosen.install create mode 100644 sites/all/modules/custom/chosen/chosen.js create mode 100644 sites/all/modules/custom/chosen/chosen.make.example create mode 100644 sites/all/modules/custom/chosen/chosen.module create mode 100644 sites/all/modules/custom/chosen/css/chosen-drupal.css create mode 100644 sites/all/modules/custom/chosen/drush/chosen.drush.inc create mode 100644 sites/all/modules/custom/commerce/.gitignore create mode 100644 sites/all/modules/custom/commerce/LICENSE.txt create mode 100644 sites/all/modules/custom/commerce/README.txt create mode 100644 sites/all/modules/custom/commerce/commerce.api.php create mode 100644 sites/all/modules/custom/commerce/commerce.info create mode 100644 sites/all/modules/custom/commerce/commerce.install create mode 100644 sites/all/modules/custom/commerce/commerce.module create mode 100644 sites/all/modules/custom/commerce/commerce.rules.inc create mode 100644 sites/all/modules/custom/commerce/commerce_ui.info create mode 100644 sites/all/modules/custom/commerce/commerce_ui.module create mode 100644 sites/all/modules/custom/commerce/help/README.txt create mode 100644 sites/all/modules/custom/commerce/includes/commerce.controller.inc create mode 100644 sites/all/modules/custom/commerce/includes/commerce.currency.inc create mode 100644 sites/all/modules/custom/commerce/includes/commerce_ui.admin.inc create mode 100644 sites/all/modules/custom/commerce/includes/views/README.txt create mode 100644 sites/all/modules/custom/commerce/modules/README.txt create mode 100644 sites/all/modules/custom/commerce/modules/cart/commerce_cart.api.php create mode 100644 sites/all/modules/custom/commerce/modules/cart/commerce_cart.info create mode 100644 sites/all/modules/custom/commerce/modules/cart/commerce_cart.info.inc create mode 100644 sites/all/modules/custom/commerce/modules/cart/commerce_cart.install create mode 100644 sites/all/modules/custom/commerce/modules/cart/commerce_cart.module create mode 100644 sites/all/modules/custom/commerce/modules/cart/commerce_cart.rules.inc create mode 100644 sites/all/modules/custom/commerce/modules/cart/commerce_cart.rules_defaults.inc create mode 100644 sites/all/modules/custom/commerce/modules/cart/includes/commerce_cart.admin.inc create mode 100644 sites/all/modules/custom/commerce/modules/cart/includes/commerce_cart.checkout_pane.inc create mode 100644 sites/all/modules/custom/commerce/modules/cart/includes/commerce_cart.pages.inc create mode 100644 sites/all/modules/custom/commerce/modules/cart/includes/views/commerce_cart.views.inc create mode 100644 sites/all/modules/custom/commerce/modules/cart/includes/views/commerce_cart.views_default.inc create mode 100644 sites/all/modules/custom/commerce/modules/cart/includes/views/handlers/commerce_cart_handler_area_empty_text.inc create mode 100644 sites/all/modules/custom/commerce/modules/cart/includes/views/handlers/commerce_cart_handler_field_add_to_cart_form.inc create mode 100644 sites/all/modules/custom/commerce/modules/cart/includes/views/handlers/commerce_cart_plugin_argument_default_current_cart_order_id.inc create mode 100644 sites/all/modules/custom/commerce/modules/cart/tests/commerce_cart.test create mode 100644 sites/all/modules/custom/commerce/modules/cart/theme/buttons.png create mode 100644 sites/all/modules/custom/commerce/modules/cart/theme/commerce-cart-block.tpl.php create mode 100644 sites/all/modules/custom/commerce/modules/cart/theme/commerce_cart.theme.css create mode 100644 sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.api.php create mode 100644 sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.info create mode 100644 sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.install create mode 100644 sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.js create mode 100644 sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.module create mode 100644 sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.rules.inc create mode 100644 sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.rules_defaults.inc create mode 100644 sites/all/modules/custom/commerce/modules/checkout/commerce_checkout_admin.js create mode 100644 sites/all/modules/custom/commerce/modules/checkout/images/status-active.gif create mode 100644 sites/all/modules/custom/commerce/modules/checkout/includes/commerce_checkout.admin.inc create mode 100644 sites/all/modules/custom/commerce/modules/checkout/includes/commerce_checkout.checkout_pane.inc create mode 100644 sites/all/modules/custom/commerce/modules/checkout/includes/commerce_checkout.pages.inc create mode 100644 sites/all/modules/custom/commerce/modules/checkout/tests/commerce_checkout.test create mode 100644 sites/all/modules/custom/commerce/modules/checkout/theme/commerce-checkout-errors-message.tpl.php create mode 100644 sites/all/modules/custom/commerce/modules/checkout/theme/commerce-checkout-help.tpl.php create mode 100644 sites/all/modules/custom/commerce/modules/checkout/theme/commerce_checkout.admin.css create mode 100644 sites/all/modules/custom/commerce/modules/checkout/theme/commerce_checkout.base-rtl.css create mode 100644 sites/all/modules/custom/commerce/modules/checkout/theme/commerce_checkout.base.css create mode 100644 sites/all/modules/custom/commerce/modules/checkout/theme/commerce_checkout.theme-rtl.css create mode 100644 sites/all/modules/custom/commerce/modules/checkout/theme/commerce_checkout.theme.css create mode 100644 sites/all/modules/custom/commerce/modules/customer/commerce_customer.api.php create mode 100644 sites/all/modules/custom/commerce/modules/customer/commerce_customer.info create mode 100644 sites/all/modules/custom/commerce/modules/customer/commerce_customer.info.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/commerce_customer.install create mode 100644 sites/all/modules/custom/commerce/modules/customer/commerce_customer.js create mode 100644 sites/all/modules/custom/commerce/modules/customer/commerce_customer.module create mode 100644 sites/all/modules/custom/commerce/modules/customer/commerce_customer.tokens.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/commerce_customer_ui.info create mode 100644 sites/all/modules/custom/commerce/modules/customer/commerce_customer_ui.module create mode 100644 sites/all/modules/custom/commerce/modules/customer/includes/commerce_customer.checkout_pane.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/includes/commerce_customer_profile.controller.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/includes/commerce_customer_profile.forms.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/includes/commerce_customer_ui.profile_types.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/includes/commerce_customer_ui.profiles.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/includes/views/commerce_customer.views.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/includes/views/commerce_customer_ui.views_default.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_area_empty_text.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_link.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_link_delete.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_link_edit.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_type.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_filter_customer_profile_type.inc create mode 100644 sites/all/modules/custom/commerce/modules/customer/tests/commerce_customer_profile_dummy_type.info create mode 100644 sites/all/modules/custom/commerce/modules/customer/tests/commerce_customer_profile_dummy_type.module create mode 100644 sites/all/modules/custom/commerce/modules/customer/tests/commerce_customer_ui.test create mode 100644 sites/all/modules/custom/commerce/modules/customer/theme/commerce_customer.admin.css create mode 100644 sites/all/modules/custom/commerce/modules/customer/theme/commerce_customer.theme.css create mode 100644 sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.api.php create mode 100644 sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.info create mode 100644 sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.info.inc create mode 100644 sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.install create mode 100644 sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.js create mode 100644 sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.module create mode 100644 sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.rules.inc create mode 100644 sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.tokens.inc create mode 100644 sites/all/modules/custom/commerce/modules/line_item/commerce_line_item_ui.info create mode 100644 sites/all/modules/custom/commerce/modules/line_item/commerce_line_item_ui.module create mode 100644 sites/all/modules/custom/commerce/modules/line_item/includes/commerce_line_item.controller.inc create mode 100644 sites/all/modules/custom/commerce/modules/line_item/includes/commerce_line_item_ui.types.inc create mode 100644 sites/all/modules/custom/commerce/modules/line_item/includes/views/commerce_line_item.views.inc create mode 100644 sites/all/modules/custom/commerce/modules/line_item/includes/views/commerce_line_item.views_default.inc create mode 100644 sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_area_line_item_summary.inc create mode 100644 sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_argument_line_item_line_item_id.inc create mode 100644 sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_edit_delete.inc create mode 100644 sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_edit_quantity.inc create mode 100644 sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_line_item_title.inc create mode 100644 sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_line_item_type.inc create mode 100644 sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_filter_line_item_type.inc create mode 100644 sites/all/modules/custom/commerce/modules/line_item/theme/commerce-line-item-summary.tpl.php create mode 100644 sites/all/modules/custom/commerce/modules/line_item/theme/commerce_line_item.admin-rtl.css create mode 100644 sites/all/modules/custom/commerce/modules/line_item/theme/commerce_line_item.admin.css create mode 100644 sites/all/modules/custom/commerce/modules/line_item/theme/commerce_line_item.theme-rtl.css create mode 100644 sites/all/modules/custom/commerce/modules/line_item/theme/commerce_line_item.theme.css create mode 100644 sites/all/modules/custom/commerce/modules/order/commerce_order.api.php create mode 100644 sites/all/modules/custom/commerce/modules/order/commerce_order.info create mode 100644 sites/all/modules/custom/commerce/modules/order/commerce_order.info.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/commerce_order.install create mode 100644 sites/all/modules/custom/commerce/modules/order/commerce_order.js create mode 100644 sites/all/modules/custom/commerce/modules/order/commerce_order.module create mode 100644 sites/all/modules/custom/commerce/modules/order/commerce_order.rules.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/commerce_order.tokens.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/commerce_order_ui.info create mode 100644 sites/all/modules/custom/commerce/modules/order/commerce_order_ui.info.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/commerce_order_ui.module create mode 100644 sites/all/modules/custom/commerce/modules/order/commerce_order_ui.tokens.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/commerce_order.checkout_pane.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/commerce_order.controller.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/commerce_order.forms.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/commerce_order_ui.orders.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/commerce_order.views.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/commerce_order_ui.views.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/commerce_order_ui.views_default.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_area_empty_text.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_area_order_total.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_argument_order_order_id.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_link.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_link_delete.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_link_edit.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_mail.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_operations.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_state.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_status.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_type.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_filter_order_state.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_filter_order_status.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_filter_order_type.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_plugin_argument_validate_user.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_ui_handler_area_view_order_form.inc create mode 100644 sites/all/modules/custom/commerce/modules/order/tests/commerce_order.rules.test create mode 100644 sites/all/modules/custom/commerce/modules/order/tests/commerce_order.test create mode 100644 sites/all/modules/custom/commerce/modules/order/tests/commerce_order_ui.test create mode 100644 sites/all/modules/custom/commerce/modules/order/theme/commerce_order.admin-rtl.css create mode 100644 sites/all/modules/custom/commerce/modules/order/theme/commerce_order.admin.css create mode 100644 sites/all/modules/custom/commerce/modules/order/theme/commerce_order.theme.css create mode 100644 sites/all/modules/custom/commerce/modules/payment/commerce_payment.api.php create mode 100644 sites/all/modules/custom/commerce/modules/payment/commerce_payment.info create mode 100644 sites/all/modules/custom/commerce/modules/payment/commerce_payment.info.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/commerce_payment.install create mode 100644 sites/all/modules/custom/commerce/modules/payment/commerce_payment.js create mode 100644 sites/all/modules/custom/commerce/modules/payment/commerce_payment.module create mode 100644 sites/all/modules/custom/commerce/modules/payment/commerce_payment.rules.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/commerce_payment.rules_defaults.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/commerce_payment.tokens.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/commerce_payment_ui.info create mode 100644 sites/all/modules/custom/commerce/modules/payment/commerce_payment_ui.module create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/commerce_payment.checkout_pane.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/commerce_payment.credit_card.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/commerce_payment.forms.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/commerce_payment_transaction.controller.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/commerce_payment_ui.admin.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/views/commerce_payment.views.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/views/commerce_payment_ui.views_default.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_area_totals.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_amount.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_balance.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_currency_code.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_message.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_method.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_transaction_link.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_transaction_link_delete.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_transaction_operations.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_status.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_filter_currency_code.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_filter_payment_method.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_filter_payment_transaction_status.inc create mode 100644 sites/all/modules/custom/commerce/modules/payment/modules/commerce_payment_example.info create mode 100644 sites/all/modules/custom/commerce/modules/payment/modules/commerce_payment_example.module create mode 100644 sites/all/modules/custom/commerce/modules/payment/tests/commerce_payment.rules.test create mode 100644 sites/all/modules/custom/commerce/modules/payment/tests/commerce_payment_dummy_offsite.info create mode 100644 sites/all/modules/custom/commerce/modules/payment/tests/commerce_payment_dummy_offsite.module create mode 100644 sites/all/modules/custom/commerce/modules/payment/tests/commerce_payment_ui.test create mode 100644 sites/all/modules/custom/commerce/modules/payment/theme/commerce-payment-totals.tpl.php create mode 100644 sites/all/modules/custom/commerce/modules/payment/theme/commerce_payment.admin-rtl.css create mode 100644 sites/all/modules/custom/commerce/modules/payment/theme/commerce_payment.admin.css create mode 100644 sites/all/modules/custom/commerce/modules/payment/theme/commerce_payment.theme.css create mode 100644 sites/all/modules/custom/commerce/modules/payment/theme/icon-failure.png create mode 100644 sites/all/modules/custom/commerce/modules/payment/theme/icon-pending.png create mode 100644 sites/all/modules/custom/commerce/modules/payment/theme/icon-success.png create mode 100644 sites/all/modules/custom/commerce/modules/price/commerce_price.api.php create mode 100644 sites/all/modules/custom/commerce/modules/price/commerce_price.info create mode 100644 sites/all/modules/custom/commerce/modules/price/commerce_price.install create mode 100644 sites/all/modules/custom/commerce/modules/price/commerce_price.module create mode 100644 sites/all/modules/custom/commerce/modules/price/commerce_price.rules.inc create mode 100644 sites/all/modules/custom/commerce/modules/price/includes/views/commerce_price.views.inc create mode 100644 sites/all/modules/custom/commerce/modules/price/includes/views/handlers/commerce_price_handler_field_commerce_price.inc create mode 100644 sites/all/modules/custom/commerce/modules/price/includes/views/handlers/commerce_price_handler_filter_commerce_price_amount.inc create mode 100644 sites/all/modules/custom/commerce/modules/price/theme/commerce_price.theme-rtl.css create mode 100644 sites/all/modules/custom/commerce/modules/price/theme/commerce_price.theme.css create mode 100644 sites/all/modules/custom/commerce/modules/product/commerce_product.api.php create mode 100644 sites/all/modules/custom/commerce/modules/product/commerce_product.info create mode 100644 sites/all/modules/custom/commerce/modules/product/commerce_product.info.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/commerce_product.install create mode 100644 sites/all/modules/custom/commerce/modules/product/commerce_product.module create mode 100644 sites/all/modules/custom/commerce/modules/product/commerce_product.tokens.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/commerce_product_ui.info create mode 100644 sites/all/modules/custom/commerce/modules/product/commerce_product_ui.info.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/commerce_product_ui.install create mode 100644 sites/all/modules/custom/commerce/modules/product/commerce_product_ui.module create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/commerce_product.controller.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/commerce_product.forms.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/commerce_product.translation_handler.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/commerce_product_ui.forms.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/commerce_product_ui.products.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/commerce_product_ui.types.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/views/commerce_product.views.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/views/commerce_product_ui.views_default.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_area_empty_text.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_argument_product_id.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_link.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_link_delete.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_link_edit.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_operations.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_type.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_filter_product_type.inc create mode 100644 sites/all/modules/custom/commerce/modules/product/tests/commerce_product.test create mode 100644 sites/all/modules/custom/commerce/modules/product/tests/commerce_product_crud_test.info create mode 100644 sites/all/modules/custom/commerce/modules/product/tests/commerce_product_crud_test.module create mode 100644 sites/all/modules/custom/commerce/modules/product/tests/commerce_product_ui.test create mode 100644 sites/all/modules/custom/commerce/modules/product/theme/commerce-product-sku.tpl.php create mode 100644 sites/all/modules/custom/commerce/modules/product/theme/commerce-product-status.tpl.php create mode 100644 sites/all/modules/custom/commerce/modules/product/theme/commerce-product-title.tpl.php create mode 100644 sites/all/modules/custom/commerce/modules/product/theme/commerce_product.admin.css create mode 100644 sites/all/modules/custom/commerce/modules/product/theme/commerce_product.theme.css create mode 100644 sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing.api.php create mode 100644 sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing.info create mode 100644 sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing.install create mode 100644 sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing.module create mode 100644 sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing_ui.info create mode 100644 sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing_ui.module create mode 100644 sites/all/modules/custom/commerce/modules/product_pricing/includes/commerce_product_pricing_ui.admin.inc create mode 100644 sites/all/modules/custom/commerce/modules/product_reference/commerce_product_reference.api.php create mode 100644 sites/all/modules/custom/commerce/modules/product_reference/commerce_product_reference.info create mode 100644 sites/all/modules/custom/commerce/modules/product_reference/commerce_product_reference.install create mode 100644 sites/all/modules/custom/commerce/modules/product_reference/commerce_product_reference.module create mode 100644 sites/all/modules/custom/commerce/modules/product_reference/commerce_product_reference.rules.inc create mode 100644 sites/all/modules/custom/commerce/modules/product_reference/includes/views/commerce_product_reference.views.inc create mode 100644 sites/all/modules/custom/commerce/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_node_is_product_display.inc create mode 100644 sites/all/modules/custom/commerce/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_node_type.inc create mode 100644 sites/all/modules/custom/commerce/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_product_line_item_type.inc create mode 100644 sites/all/modules/custom/commerce/modules/product_reference/tests/commerce_product_reference.test create mode 100644 sites/all/modules/custom/commerce/modules/tax/commerce_tax.api.php create mode 100644 sites/all/modules/custom/commerce/modules/tax/commerce_tax.info create mode 100644 sites/all/modules/custom/commerce/modules/tax/commerce_tax.module create mode 100644 sites/all/modules/custom/commerce/modules/tax/commerce_tax.rules.inc create mode 100644 sites/all/modules/custom/commerce/modules/tax/commerce_tax.rules_defaults.inc create mode 100644 sites/all/modules/custom/commerce/modules/tax/commerce_tax_ui.info create mode 100644 sites/all/modules/custom/commerce/modules/tax/commerce_tax_ui.install create mode 100644 sites/all/modules/custom/commerce/modules/tax/commerce_tax_ui.module create mode 100644 sites/all/modules/custom/commerce/modules/tax/includes/commerce_tax_ui.admin.inc create mode 100644 sites/all/modules/custom/commerce/modules/tax/tests/commerce_tax_ui.test create mode 100644 sites/all/modules/custom/commerce/modules/tax/theme/commerce_tax.admin.css create mode 100644 sites/all/modules/custom/commerce/modules/tax/theme/commerce_tax.theme-rtl.css create mode 100644 sites/all/modules/custom/commerce/modules/tax/theme/commerce_tax.theme.css create mode 100755 sites/all/modules/custom/commerce/modules_contrib/commerce_features/LICENSE.txt create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_coupon_type.features.inc create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_customer.features.inc create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_features.info create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_features.module create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_line_item_type.features.inc create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_order_type.features.inc create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_product_type.features.inc create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_tax_rate.features.inc create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_tax_type.features.inc create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/LICENSE.txt create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/README.txt create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock.info create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock.install create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock.module create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock.rules.inc create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock.rules_defaults.inc create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock_ui.info create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock_ui.module create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/includes/commerce_stock.admin.inc create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_sdf/commerce_sdf.info create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_sdf/commerce_sdf.module create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.info create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.install create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.module create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.rules.inc create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.rules_defaults.inc create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/includes/commerce_ss.admin.inc create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ssr/commerce_ssr.info create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ssr/commerce_ssr.module create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ssr/commerce_ssr.rules_defaults.inc create mode 100755 sites/all/modules/custom/commerce/modules_contrib/commerce_uuid/LICENSE.txt create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_uuid/commerce_uuid.info create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_uuid/commerce_uuid.install create mode 100644 sites/all/modules/custom/commerce/modules_contrib/commerce_uuid/commerce_uuid.module create mode 100644 sites/all/modules/custom/commerce/tests/README.txt create mode 100644 sites/all/modules/custom/commerce/tests/commerce_base.test create mode 100644 sites/all/modules/custom/commerce/theme/README.txt create mode 100644 sites/all/modules/custom/ctools/API.txt create mode 100644 sites/all/modules/custom/ctools/CHANGELOG.txt create mode 100644 sites/all/modules/custom/ctools/LICENSE.txt create mode 100644 sites/all/modules/custom/ctools/UPGRADE.txt create mode 100644 sites/all/modules/custom/ctools/bulk_export/bulk_export.css create mode 100644 sites/all/modules/custom/ctools/bulk_export/bulk_export.info create mode 100644 sites/all/modules/custom/ctools/bulk_export/bulk_export.js create mode 100644 sites/all/modules/custom/ctools/bulk_export/bulk_export.module create mode 100644 sites/all/modules/custom/ctools/css/button.css create mode 100644 sites/all/modules/custom/ctools/css/collapsible-div.css create mode 100644 sites/all/modules/custom/ctools/css/context.css create mode 100644 sites/all/modules/custom/ctools/css/ctools.css create mode 100644 sites/all/modules/custom/ctools/css/dropbutton.css create mode 100644 sites/all/modules/custom/ctools/css/dropdown.css create mode 100644 sites/all/modules/custom/ctools/css/export-ui-list.css create mode 100644 sites/all/modules/custom/ctools/css/modal.css create mode 100644 sites/all/modules/custom/ctools/css/ruleset.css create mode 100644 sites/all/modules/custom/ctools/css/stylizer.css create mode 100644 sites/all/modules/custom/ctools/css/wizard.css create mode 100644 sites/all/modules/custom/ctools/ctools.api.php create mode 100644 sites/all/modules/custom/ctools/ctools.info create mode 100644 sites/all/modules/custom/ctools/ctools.install create mode 100644 sites/all/modules/custom/ctools/ctools.module create mode 100644 sites/all/modules/custom/ctools/ctools_access_ruleset/ctools_access_ruleset.info create mode 100644 sites/all/modules/custom/ctools/ctools_access_ruleset/ctools_access_ruleset.install create mode 100644 sites/all/modules/custom/ctools/ctools_access_ruleset/ctools_access_ruleset.module create mode 100644 sites/all/modules/custom/ctools/ctools_access_ruleset/plugins/access/ruleset.inc create mode 100644 sites/all/modules/custom/ctools/ctools_access_ruleset/plugins/export_ui/ctools_access_ruleset.inc create mode 100644 sites/all/modules/custom/ctools/ctools_access_ruleset/plugins/export_ui/ctools_access_ruleset_ui.class.php create mode 100644 sites/all/modules/custom/ctools/ctools_ajax_sample/css/ctools-ajax-sample.css create mode 100644 sites/all/modules/custom/ctools/ctools_ajax_sample/ctools_ajax_sample.info create mode 100644 sites/all/modules/custom/ctools/ctools_ajax_sample/ctools_ajax_sample.install create mode 100644 sites/all/modules/custom/ctools/ctools_ajax_sample/ctools_ajax_sample.module create mode 100644 sites/all/modules/custom/ctools/ctools_ajax_sample/images/ajax-loader.gif create mode 100644 sites/all/modules/custom/ctools/ctools_ajax_sample/images/loading-large.gif create mode 100644 sites/all/modules/custom/ctools/ctools_ajax_sample/images/loading.gif create mode 100644 sites/all/modules/custom/ctools/ctools_ajax_sample/images/popups-border.png create mode 100644 sites/all/modules/custom/ctools/ctools_ajax_sample/js/ctools-ajax-sample.js create mode 100644 sites/all/modules/custom/ctools/ctools_custom_content/ctools_custom_content.info create mode 100644 sites/all/modules/custom/ctools/ctools_custom_content/ctools_custom_content.install create mode 100644 sites/all/modules/custom/ctools/ctools_custom_content/ctools_custom_content.module create mode 100644 sites/all/modules/custom/ctools/ctools_custom_content/plugins/export_ui/ctools_custom_content.inc create mode 100644 sites/all/modules/custom/ctools/ctools_custom_content/plugins/export_ui/ctools_custom_content_ui.class.php create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/README.txt create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/ctools_plugin_example.info create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/ctools_plugin_example.module create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/ctools_plugin_example.pages_default.inc create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/help/Access-Plugins--Determining-access-and-visibility.html create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/help/Argument-Plugins--Starting-at-the-beginning.html create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/help/Chaos-Tools--CTools--Plugin-Examples.html create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/help/Content-Type-Plugins--Displaying-content-using-a-context.html create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/help/Context-plugins--Creating-a--context--from-an-argument.html create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/help/Module-setup-and-hooks.html create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/help/Relationships--Letting-one-context-take-us-to-another.html create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/help/ctools_plugin_example.help.ini create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/plugins/access/arg_length.inc create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/plugins/access/example_role.inc create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/plugins/arguments/simplecontext_arg.inc create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/plugins/content_types/icon_example.png create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/plugins/content_types/no_context_content_type.inc create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/plugins/content_types/relcontext_content_type.inc create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/plugins/content_types/simplecontext_content_type.inc create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/plugins/contexts/relcontext.inc create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/plugins/contexts/simplecontext.inc create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/plugins/panels.pages.inc create mode 100644 sites/all/modules/custom/ctools/ctools_plugin_example/plugins/relationships/relcontext_from_simplecontext.inc create mode 100644 sites/all/modules/custom/ctools/drush/ctools.drush.inc create mode 100644 sites/all/modules/custom/ctools/help/about.html create mode 100644 sites/all/modules/custom/ctools/help/ajax.html create mode 100644 sites/all/modules/custom/ctools/help/collapsible-div.html create mode 100644 sites/all/modules/custom/ctools/help/context-access.html create mode 100644 sites/all/modules/custom/ctools/help/context-arguments.html create mode 100644 sites/all/modules/custom/ctools/help/context-content.html create mode 100644 sites/all/modules/custom/ctools/help/context-context.html create mode 100644 sites/all/modules/custom/ctools/help/context-relationships.html create mode 100644 sites/all/modules/custom/ctools/help/context.html create mode 100644 sites/all/modules/custom/ctools/help/css.html create mode 100644 sites/all/modules/custom/ctools/help/ctools.help.ini create mode 100644 sites/all/modules/custom/ctools/help/dependent.html create mode 100644 sites/all/modules/custom/ctools/help/dropbutton.html create mode 100644 sites/all/modules/custom/ctools/help/dropdown.html create mode 100644 sites/all/modules/custom/ctools/help/export-ui.html create mode 100644 sites/all/modules/custom/ctools/help/export.html create mode 100644 sites/all/modules/custom/ctools/help/form.html create mode 100644 sites/all/modules/custom/ctools/help/modal.html create mode 100644 sites/all/modules/custom/ctools/help/object-cache.html create mode 100644 sites/all/modules/custom/ctools/help/plugins-api.html create mode 100644 sites/all/modules/custom/ctools/help/plugins-creating.html create mode 100644 sites/all/modules/custom/ctools/help/plugins-implementing.html create mode 100644 sites/all/modules/custom/ctools/help/plugins.html create mode 100644 sites/all/modules/custom/ctools/help/wizard.html create mode 100644 sites/all/modules/custom/ctools/images/arrow-active.png create mode 100644 sites/all/modules/custom/ctools/images/collapsible-collapsed.png create mode 100644 sites/all/modules/custom/ctools/images/collapsible-expanded.png create mode 100644 sites/all/modules/custom/ctools/images/expanded-options.png create mode 100644 sites/all/modules/custom/ctools/images/icon-close-window.png create mode 100644 sites/all/modules/custom/ctools/images/icon-configure.png create mode 100644 sites/all/modules/custom/ctools/images/icon-delete.png create mode 100644 sites/all/modules/custom/ctools/images/no-icon.png create mode 100644 sites/all/modules/custom/ctools/images/status-active.gif create mode 100644 sites/all/modules/custom/ctools/images/throbber.gif create mode 100644 sites/all/modules/custom/ctools/includes/action-links.theme.inc create mode 100644 sites/all/modules/custom/ctools/includes/ajax.inc create mode 100644 sites/all/modules/custom/ctools/includes/cache.inc create mode 100644 sites/all/modules/custom/ctools/includes/cache.plugin-type.inc create mode 100644 sites/all/modules/custom/ctools/includes/cleanstring.inc create mode 100644 sites/all/modules/custom/ctools/includes/collapsible.theme.inc create mode 100644 sites/all/modules/custom/ctools/includes/content.inc create mode 100644 sites/all/modules/custom/ctools/includes/content.menu.inc create mode 100644 sites/all/modules/custom/ctools/includes/content.plugin-type.inc create mode 100644 sites/all/modules/custom/ctools/includes/content.theme.inc create mode 100644 sites/all/modules/custom/ctools/includes/context-access-admin.inc create mode 100644 sites/all/modules/custom/ctools/includes/context-admin.inc create mode 100644 sites/all/modules/custom/ctools/includes/context-task-handler.inc create mode 100644 sites/all/modules/custom/ctools/includes/context.inc create mode 100644 sites/all/modules/custom/ctools/includes/context.menu.inc create mode 100644 sites/all/modules/custom/ctools/includes/context.plugin-type.inc create mode 100644 sites/all/modules/custom/ctools/includes/context.theme.inc create mode 100644 sites/all/modules/custom/ctools/includes/css-cache.inc create mode 100644 sites/all/modules/custom/ctools/includes/css.inc create mode 100644 sites/all/modules/custom/ctools/includes/dependent.inc create mode 100644 sites/all/modules/custom/ctools/includes/dropbutton.theme.inc create mode 100644 sites/all/modules/custom/ctools/includes/dropdown.theme.inc create mode 100644 sites/all/modules/custom/ctools/includes/export-ui.inc create mode 100644 sites/all/modules/custom/ctools/includes/export-ui.menu.inc create mode 100644 sites/all/modules/custom/ctools/includes/export-ui.plugin-type.inc create mode 100644 sites/all/modules/custom/ctools/includes/export.inc create mode 100644 sites/all/modules/custom/ctools/includes/fields.inc create mode 100644 sites/all/modules/custom/ctools/includes/jump-menu.inc create mode 100644 sites/all/modules/custom/ctools/includes/language.inc create mode 100644 sites/all/modules/custom/ctools/includes/math-expr.inc create mode 100644 sites/all/modules/custom/ctools/includes/menu.inc create mode 100644 sites/all/modules/custom/ctools/includes/modal.inc create mode 100644 sites/all/modules/custom/ctools/includes/object-cache.cron.inc create mode 100644 sites/all/modules/custom/ctools/includes/object-cache.inc create mode 100644 sites/all/modules/custom/ctools/includes/page-wizard.inc create mode 100644 sites/all/modules/custom/ctools/includes/page-wizard.menu.inc create mode 100644 sites/all/modules/custom/ctools/includes/plugins-admin.inc create mode 100644 sites/all/modules/custom/ctools/includes/plugins.inc create mode 100644 sites/all/modules/custom/ctools/includes/registry.inc create mode 100644 sites/all/modules/custom/ctools/includes/stylizer.inc create mode 100644 sites/all/modules/custom/ctools/includes/stylizer.theme.inc create mode 100644 sites/all/modules/custom/ctools/includes/utility.inc create mode 100644 sites/all/modules/custom/ctools/includes/uuid.inc create mode 100644 sites/all/modules/custom/ctools/includes/views.inc create mode 100644 sites/all/modules/custom/ctools/includes/wizard.inc create mode 100644 sites/all/modules/custom/ctools/includes/wizard.theme.inc create mode 100644 sites/all/modules/custom/ctools/js/ajax-responder.js create mode 100644 sites/all/modules/custom/ctools/js/auto-submit.js create mode 100644 sites/all/modules/custom/ctools/js/collapsible-div.js create mode 100644 sites/all/modules/custom/ctools/js/dependent.js create mode 100644 sites/all/modules/custom/ctools/js/dropbutton.js create mode 100644 sites/all/modules/custom/ctools/js/dropdown.js create mode 100644 sites/all/modules/custom/ctools/js/jump-menu.js create mode 100644 sites/all/modules/custom/ctools/js/modal.js create mode 100644 sites/all/modules/custom/ctools/js/stylizer.js create mode 100644 sites/all/modules/custom/ctools/page_manager/css/page-manager.css create mode 100644 sites/all/modules/custom/ctools/page_manager/help/about.html create mode 100644 sites/all/modules/custom/ctools/page_manager/help/api-task-handler.html create mode 100644 sites/all/modules/custom/ctools/page_manager/help/api-task-type.html create mode 100644 sites/all/modules/custom/ctools/page_manager/help/api-task.html create mode 100644 sites/all/modules/custom/ctools/page_manager/help/custom-pages-access.html create mode 100644 sites/all/modules/custom/ctools/page_manager/help/custom-pages-arguments.html create mode 100644 sites/all/modules/custom/ctools/page_manager/help/custom-pages-menu.html create mode 100644 sites/all/modules/custom/ctools/page_manager/help/custom-pages.html create mode 100644 sites/all/modules/custom/ctools/page_manager/help/getting-started-create.html create mode 100644 sites/all/modules/custom/ctools/page_manager/help/getting-started-custom-nodes.html create mode 100644 sites/all/modules/custom/ctools/page_manager/help/getting-started-custom-vocabulary.html create mode 100644 sites/all/modules/custom/ctools/page_manager/help/getting-started-members.html create mode 100644 sites/all/modules/custom/ctools/page_manager/help/getting-started-page-list.html create mode 100644 sites/all/modules/custom/ctools/page_manager/help/getting-started.html create mode 100644 sites/all/modules/custom/ctools/page_manager/help/page-task-type.html create mode 100644 sites/all/modules/custom/ctools/page_manager/help/page_manager.help.ini create mode 100644 sites/all/modules/custom/ctools/page_manager/help/variants.html create mode 100644 sites/all/modules/custom/ctools/page_manager/images/arrow-active.png create mode 100644 sites/all/modules/custom/ctools/page_manager/images/locked-other.png create mode 100644 sites/all/modules/custom/ctools/page_manager/images/locked.png create mode 100644 sites/all/modules/custom/ctools/page_manager/js/page-list.js create mode 100644 sites/all/modules/custom/ctools/page_manager/page_manager.admin.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/page_manager.api.php create mode 100644 sites/all/modules/custom/ctools/page_manager/page_manager.info create mode 100644 sites/all/modules/custom/ctools/page_manager/page_manager.install create mode 100644 sites/all/modules/custom/ctools/page_manager/page_manager.module create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/cache/page_manager_context.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/task_handlers/http_response.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/tasks/blog.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/tasks/blog_user.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/tasks/comment_reply.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/tasks/contact_site.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/tasks/contact_user.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/tasks/node_edit.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/tasks/node_view.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/tasks/page.admin.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/tasks/page.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/tasks/poll.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/tasks/search.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/tasks/term_view.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/tasks/user_edit.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/plugins/tasks/user_view.inc create mode 100644 sites/all/modules/custom/ctools/page_manager/theme/page-manager-edit-page.tpl.php create mode 100644 sites/all/modules/custom/ctools/page_manager/theme/page_manager.theme.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/book.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/compare_users.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/context_exists.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/entity_bundle.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/entity_field_value.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/front.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/node.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/node_access.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/node_comment.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/node_language.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/node_status.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/node_type.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/path_visibility.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/perm.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/php.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/role.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/site_language.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/string_equal.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/string_length.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/term.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/term_has_parent.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/term_parent.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/term_vocabulary.inc create mode 100644 sites/all/modules/custom/ctools/plugins/access/theme.inc create mode 100644 sites/all/modules/custom/ctools/plugins/arguments/entity_id.inc create mode 100644 sites/all/modules/custom/ctools/plugins/arguments/nid.inc create mode 100644 sites/all/modules/custom/ctools/plugins/arguments/node_add.inc create mode 100644 sites/all/modules/custom/ctools/plugins/arguments/node_edit.inc create mode 100644 sites/all/modules/custom/ctools/plugins/arguments/rid.inc create mode 100644 sites/all/modules/custom/ctools/plugins/arguments/string.inc create mode 100644 sites/all/modules/custom/ctools/plugins/arguments/term.inc create mode 100644 sites/all/modules/custom/ctools/plugins/arguments/terms.inc create mode 100644 sites/all/modules/custom/ctools/plugins/arguments/uid.inc create mode 100644 sites/all/modules/custom/ctools/plugins/arguments/user_edit.inc create mode 100644 sites/all/modules/custom/ctools/plugins/arguments/user_name.inc create mode 100644 sites/all/modules/custom/ctools/plugins/arguments/vid.inc create mode 100644 sites/all/modules/custom/ctools/plugins/cache/export_ui.inc create mode 100644 sites/all/modules/custom/ctools/plugins/cache/simple.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/block.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_contrib_block.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_contrib_block_empty.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_contrib_menu.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_contrib_page.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_activeforumtopics.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_authorinformation.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_block.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_block_empty.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_block_menu.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_booknavigation.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_languageswitcher.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_navigation.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_newforumtopics.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_page.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_popularcontent.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_primarylinks.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_recentblogposts.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_recentcomments.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_recentpoll.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_searchform.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_syndicate.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_userlogin.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_whosnew.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_whosonline.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/comment/comment_links.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/comment/comment_reply_form.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/contact/contact.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/contact/icon_contact.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/contact/user_contact.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/custom/custom.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/custom/icon_block_custom.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/entity_context/entity_field.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/entity_context/entity_field_extra.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/form/entity_form_field.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/form/form.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/form/icon_form.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node/icon_node.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node/node.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/icon_node.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/node_attachments.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/node_author.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/node_body.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/node_book_children.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/node_book_nav.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/node_comment_form.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/node_comment_wrapper.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/node_comments.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/node_content.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/node_created.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/node_links.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/node_terms.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/node_title.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/node_type_desc.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_context/node_updated.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_form/icon_node_form.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_attachments.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_author.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_book.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_buttons.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_comment.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_language.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_log.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_menu.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_path.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_publishing.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_title.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/page/page_actions.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/page/page_breadcrumb.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/page/page_feed_icons.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/page/page_help.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/page/page_logo.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/page/page_messages.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/page/page_primary_links.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/page/page_secondary_links.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/page/page_site_name.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/page/page_slogan.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/page/page_tabs.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/page/page_title.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/search/icon_search.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/search/search_form.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/search/search_result.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/term_context/icon_term.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/term_context/term_description.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/term_context/term_list.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/term_context/term_name.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/token/icon_token.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/token/token.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/user_context/icon_user.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/user_context/profile_fields.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/user_context/profile_fields_pane.tpl.php create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/user_context/user_links.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/user_context/user_picture.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/user_context/user_profile.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/user_context/user_signature.inc create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/vocabulary_context/icon_vocabulary.png create mode 100644 sites/all/modules/custom/ctools/plugins/content_types/vocabulary_context/vocabulary_terms.inc create mode 100644 sites/all/modules/custom/ctools/plugins/contexts/entity.inc create mode 100644 sites/all/modules/custom/ctools/plugins/contexts/node.inc create mode 100644 sites/all/modules/custom/ctools/plugins/contexts/node_add_form.inc create mode 100644 sites/all/modules/custom/ctools/plugins/contexts/node_edit_form.inc create mode 100644 sites/all/modules/custom/ctools/plugins/contexts/string.inc create mode 100644 sites/all/modules/custom/ctools/plugins/contexts/term.inc create mode 100644 sites/all/modules/custom/ctools/plugins/contexts/terms.inc create mode 100644 sites/all/modules/custom/ctools/plugins/contexts/token.inc create mode 100644 sites/all/modules/custom/ctools/plugins/contexts/user.inc create mode 100644 sites/all/modules/custom/ctools/plugins/contexts/user_edit_form.inc create mode 100644 sites/all/modules/custom/ctools/plugins/contexts/vocabulary.inc create mode 100644 sites/all/modules/custom/ctools/plugins/export_ui/ctools_export_ui.class.php create mode 100644 sites/all/modules/custom/ctools/plugins/export_ui/ctools_export_ui.inc create mode 100644 sites/all/modules/custom/ctools/plugins/relationships/book_parent.inc create mode 100644 sites/all/modules/custom/ctools/plugins/relationships/entity_from_field.inc create mode 100644 sites/all/modules/custom/ctools/plugins/relationships/entity_from_schema.inc create mode 100644 sites/all/modules/custom/ctools/plugins/relationships/node_edit_form_from_node.inc create mode 100644 sites/all/modules/custom/ctools/plugins/relationships/term_from_node.inc create mode 100644 sites/all/modules/custom/ctools/plugins/relationships/term_parent.inc create mode 100644 sites/all/modules/custom/ctools/plugins/relationships/terms_from_node.inc create mode 100644 sites/all/modules/custom/ctools/plugins/relationships/user_category_edit_form_from_user.inc create mode 100644 sites/all/modules/custom/ctools/plugins/relationships/user_from_node.inc create mode 100644 sites/all/modules/custom/ctools/stylizer/plugins/export_ui/stylizer.inc create mode 100644 sites/all/modules/custom/ctools/stylizer/plugins/export_ui/stylizer_ui.class.php create mode 100644 sites/all/modules/custom/ctools/stylizer/stylizer.info create mode 100644 sites/all/modules/custom/ctools/stylizer/stylizer.install create mode 100644 sites/all/modules/custom/ctools/stylizer/stylizer.module create mode 100644 sites/all/modules/custom/ctools/term_depth/plugins/access/term_depth.inc create mode 100644 sites/all/modules/custom/ctools/term_depth/term_depth.info create mode 100644 sites/all/modules/custom/ctools/term_depth/term_depth.module create mode 100644 sites/all/modules/custom/ctools/tests/context.test create mode 100644 sites/all/modules/custom/ctools/tests/css.test create mode 100644 sites/all/modules/custom/ctools/tests/css_cache.test create mode 100755 sites/all/modules/custom/ctools/tests/ctools.drush.sh create mode 100644 sites/all/modules/custom/ctools/tests/ctools.plugins.test create mode 100644 sites/all/modules/custom/ctools/tests/ctools_export_test/ctools_export.test create mode 100644 sites/all/modules/custom/ctools/tests/ctools_export_test/ctools_export_test.default_ctools_export_tests.inc create mode 100644 sites/all/modules/custom/ctools/tests/ctools_export_test/ctools_export_test.info create mode 100644 sites/all/modules/custom/ctools/tests/ctools_export_test/ctools_export_test.install create mode 100644 sites/all/modules/custom/ctools/tests/ctools_export_test/ctools_export_test.module create mode 100644 sites/all/modules/custom/ctools/tests/ctools_plugin_test.info create mode 100644 sites/all/modules/custom/ctools/tests/ctools_plugin_test.module create mode 100644 sites/all/modules/custom/ctools/tests/math_expression.test create mode 100644 sites/all/modules/custom/ctools/tests/math_expression_stack.test create mode 100644 sites/all/modules/custom/ctools/tests/object_cache.test create mode 100644 sites/all/modules/custom/ctools/tests/plugins/cached/ctoolsCachedPluginArray.class.php create mode 100644 sites/all/modules/custom/ctools/tests/plugins/cached/ctoolsCachedPluginArray2.class.php create mode 100644 sites/all/modules/custom/ctools/tests/plugins/cached/plugin_array.inc create mode 100644 sites/all/modules/custom/ctools/tests/plugins/cached/plugin_array2.inc create mode 100644 sites/all/modules/custom/ctools/tests/plugins/cached/plugin_array_dne.inc create mode 100644 sites/all/modules/custom/ctools/tests/plugins/not_cached/ctoolsNotCachedPluginArray.class.php create mode 100644 sites/all/modules/custom/ctools/tests/plugins/not_cached/ctoolsNotCachedPluginArray2.class.php create mode 100644 sites/all/modules/custom/ctools/tests/plugins/not_cached/plugin_array.inc create mode 100644 sites/all/modules/custom/ctools/tests/plugins/not_cached/plugin_array2.inc create mode 100644 sites/all/modules/custom/ctools/tests/plugins/not_cached/plugin_array_dne.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/content_types/icon_views_block_legacy.png create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/content_types/icon_views_page.png create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/content_types/icon_views_page_legacy.png create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/content_types/views.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/content_types/views_attachments.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/content_types/views_empty.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/content_types/views_exposed.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/content_types/views_feed.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/content_types/views_footer.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/content_types/views_header.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/content_types/views_pager.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/content_types/views_panes.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/content_types/views_row.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/content_types/views_view.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/contexts/view.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/relationships/node_from_view.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/relationships/term_from_view.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/relationships/user_from_view.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/relationships/view_from_argument.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/views/views_content.views.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/views/views_content_plugin_display_ctools_context.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/views/views_content_plugin_display_panel_pane.inc create mode 100644 sites/all/modules/custom/ctools/views_content/plugins/views/views_content_plugin_style_ctools_context.inc create mode 100644 sites/all/modules/custom/ctools/views_content/views_content.admin.inc create mode 100644 sites/all/modules/custom/ctools/views_content/views_content.info create mode 100644 sites/all/modules/custom/ctools/views_content/views_content.module create mode 100644 sites/all/modules/custom/date/CHANGELOG.txt create mode 100644 sites/all/modules/custom/date/INSTALL.txt create mode 100644 sites/all/modules/custom/date/LICENSE.txt create mode 100644 sites/all/modules/custom/date/README.txt create mode 100644 sites/all/modules/custom/date/date.api.php create mode 100644 sites/all/modules/custom/date/date.devel_generate.inc create mode 100644 sites/all/modules/custom/date/date.diff.inc create mode 100644 sites/all/modules/custom/date/date.field.inc create mode 100644 sites/all/modules/custom/date/date.info create mode 100644 sites/all/modules/custom/date/date.install create mode 100644 sites/all/modules/custom/date/date.js create mode 100644 sites/all/modules/custom/date/date.migrate.inc create mode 100644 sites/all/modules/custom/date/date.module create mode 100644 sites/all/modules/custom/date/date.theme create mode 100644 sites/all/modules/custom/date/date.tokens.inc create mode 100644 sites/all/modules/custom/date/date_admin.inc create mode 100644 sites/all/modules/custom/date/date_admin.js create mode 100644 sites/all/modules/custom/date/date_all_day/README.txt create mode 100644 sites/all/modules/custom/date/date_all_day/date_all_day.info create mode 100644 sites/all/modules/custom/date/date_all_day/date_all_day.module create mode 100644 sites/all/modules/custom/date/date_api/date-rtl.css create mode 100644 sites/all/modules/custom/date/date_api/date.css create mode 100644 sites/all/modules/custom/date/date_api/date_api.admin.inc create mode 100644 sites/all/modules/custom/date/date_api/date_api.info create mode 100644 sites/all/modules/custom/date/date_api/date_api.install create mode 100644 sites/all/modules/custom/date/date_api/date_api.module create mode 100644 sites/all/modules/custom/date/date_api/date_api_elements.inc create mode 100644 sites/all/modules/custom/date/date_api/date_api_ical.inc create mode 100644 sites/all/modules/custom/date/date_api/date_api_sql.inc create mode 100644 sites/all/modules/custom/date/date_api/date_year_range.js create mode 100644 sites/all/modules/custom/date/date_api/images/calendar.png create mode 100644 sites/all/modules/custom/date/date_api/images/ical16x16.gif create mode 100644 sites/all/modules/custom/date/date_api/theme/theme.inc create mode 100644 sites/all/modules/custom/date/date_context/date_context.info create mode 100644 sites/all/modules/custom/date/date_context/date_context.module create mode 100644 sites/all/modules/custom/date/date_context/plugins/date_context_date_condition.inc create mode 100644 sites/all/modules/custom/date/date_elements.inc create mode 100644 sites/all/modules/custom/date/date_migrate/date_migrate.info create mode 100644 sites/all/modules/custom/date/date_migrate/date_migrate.module create mode 100644 sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.features.field.inc create mode 100644 sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.features.inc create mode 100644 sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.info create mode 100644 sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.install create mode 100644 sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.migrate.inc create mode 100644 sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.module create mode 100644 sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.xml create mode 100644 sites/all/modules/custom/date/date_popup/README.txt create mode 100644 sites/all/modules/custom/date/date_popup/date_popup.info create mode 100644 sites/all/modules/custom/date/date_popup/date_popup.install create mode 100644 sites/all/modules/custom/date/date_popup/date_popup.js create mode 100644 sites/all/modules/custom/date/date_popup/date_popup.module create mode 100644 sites/all/modules/custom/date/date_popup/jquery.timeentry.pack.js create mode 100644 sites/all/modules/custom/date/date_popup/themes/datepicker.1.7.css create mode 100644 sites/all/modules/custom/date/date_popup/themes/jquery.timeentry.css create mode 100644 sites/all/modules/custom/date/date_repeat.inc create mode 100644 sites/all/modules/custom/date/date_repeat/date_repeat.info create mode 100644 sites/all/modules/custom/date/date_repeat/date_repeat.install create mode 100644 sites/all/modules/custom/date/date_repeat/date_repeat.module create mode 100644 sites/all/modules/custom/date/date_repeat/date_repeat_calc.inc create mode 100644 sites/all/modules/custom/date/date_repeat/date_repeat_form.inc create mode 100644 sites/all/modules/custom/date/date_repeat/tests/date_repeat.test create mode 100644 sites/all/modules/custom/date/date_repeat/tests/date_repeat_form.test create mode 100644 sites/all/modules/custom/date/date_repeat_field/README.txt create mode 100644 sites/all/modules/custom/date/date_repeat_field/date_repeat_field.css create mode 100644 sites/all/modules/custom/date/date_repeat_field/date_repeat_field.devel_generate.inc create mode 100644 sites/all/modules/custom/date/date_repeat_field/date_repeat_field.info create mode 100644 sites/all/modules/custom/date/date_repeat_field/date_repeat_field.module create mode 100644 sites/all/modules/custom/date/date_tools/date_tools.change_type.inc create mode 100644 sites/all/modules/custom/date/date_tools/date_tools.info create mode 100644 sites/all/modules/custom/date/date_tools/date_tools.module create mode 100644 sites/all/modules/custom/date/date_tools/date_tools.wizard.inc create mode 100644 sites/all/modules/custom/date/date_tools/tests/date_tools.test create mode 100644 sites/all/modules/custom/date/date_views/css/date_views.css create mode 100644 sites/all/modules/custom/date/date_views/date_views.info create mode 100644 sites/all/modules/custom/date/date_views/date_views.install create mode 100644 sites/all/modules/custom/date/date_views/date_views.module create mode 100644 sites/all/modules/custom/date/date_views/includes/date_plugin_display_attachment.inc create mode 100644 sites/all/modules/custom/date/date_views/includes/date_views.views.inc create mode 100644 sites/all/modules/custom/date/date_views/includes/date_views_argument_handler.inc create mode 100644 sites/all/modules/custom/date/date_views/includes/date_views_argument_handler_simple.inc create mode 100644 sites/all/modules/custom/date/date_views/includes/date_views_fields.inc create mode 100644 sites/all/modules/custom/date/date_views/includes/date_views_filter_handler.inc create mode 100644 sites/all/modules/custom/date/date_views/includes/date_views_filter_handler_simple.inc create mode 100644 sites/all/modules/custom/date/date_views/includes/date_views_plugin_pager.inc create mode 100644 sites/all/modules/custom/date/date_views/theme/date-views-filter-form.tpl.php create mode 100644 sites/all/modules/custom/date/date_views/theme/date-views-pager.tpl.php create mode 100644 sites/all/modules/custom/date/date_views/theme/theme.inc create mode 100644 sites/all/modules/custom/date/tests/README.txt create mode 100644 sites/all/modules/custom/date/tests/USHolidays.ics create mode 100644 sites/all/modules/custom/date/tests/Yahoo.csv create mode 100644 sites/all/modules/custom/date/tests/date.test create mode 100644 sites/all/modules/custom/date/tests/date_api.test create mode 100644 sites/all/modules/custom/date/tests/date_field.test create mode 100644 sites/all/modules/custom/date/tests/date_migrate.test create mode 100644 sites/all/modules/custom/date/tests/date_timezone.test create mode 100644 sites/all/modules/custom/date/tests/date_validation.test create mode 100644 sites/all/modules/custom/date/tests/rrule.ics create mode 100755 sites/all/modules/custom/devel/LICENSE.txt create mode 100644 sites/all/modules/custom/devel/README.txt create mode 100644 sites/all/modules/custom/devel/README_devel_node_access.txt create mode 100644 sites/all/modules/custom/devel/devel-rtl.css create mode 100644 sites/all/modules/custom/devel/devel.admin.inc create mode 100644 sites/all/modules/custom/devel/devel.css create mode 100644 sites/all/modules/custom/devel/devel.drush.inc create mode 100644 sites/all/modules/custom/devel/devel.info create mode 100644 sites/all/modules/custom/devel/devel.install create mode 100644 sites/all/modules/custom/devel/devel.js create mode 100644 sites/all/modules/custom/devel/devel.mail.inc create mode 100644 sites/all/modules/custom/devel/devel.module create mode 100644 sites/all/modules/custom/devel/devel.pages.inc create mode 100644 sites/all/modules/custom/devel/devel.rules.inc create mode 100644 sites/all/modules/custom/devel/devel.test create mode 100644 sites/all/modules/custom/devel/develDrushTest.php create mode 100644 sites/all/modules/custom/devel/devel_generate/devel_generate.drush.inc create mode 100644 sites/all/modules/custom/devel/devel_generate/devel_generate.fields.inc create mode 100644 sites/all/modules/custom/devel/devel_generate/devel_generate.inc create mode 100644 sites/all/modules/custom/devel/devel_generate/devel_generate.info create mode 100644 sites/all/modules/custom/devel/devel_generate/devel_generate.module create mode 100644 sites/all/modules/custom/devel/devel_generate/devel_generate.test create mode 100644 sites/all/modules/custom/devel/devel_generate/devel_generate_batch.inc create mode 100644 sites/all/modules/custom/devel/devel_generate/file.devel_generate.inc create mode 100644 sites/all/modules/custom/devel/devel_generate/image.devel_generate.inc create mode 100644 sites/all/modules/custom/devel/devel_generate/list.devel_generate.inc create mode 100644 sites/all/modules/custom/devel/devel_generate/number.devel_generate.inc create mode 100644 sites/all/modules/custom/devel/devel_generate/taxonomy.devel_generate.inc create mode 100644 sites/all/modules/custom/devel/devel_generate/text.devel_generate.inc create mode 100644 sites/all/modules/custom/devel/devel_krumo_path.js create mode 100644 sites/all/modules/custom/devel/devel_node_access.api.php create mode 100644 sites/all/modules/custom/devel/devel_node_access.info create mode 100644 sites/all/modules/custom/devel/devel_node_access.install create mode 100644 sites/all/modules/custom/devel/devel_node_access.js create mode 100644 sites/all/modules/custom/devel/devel_node_access.module create mode 100644 sites/all/modules/custom/devel/jquery-1.4.4-uncompressed.js create mode 100755 sites/all/modules/custom/devel/krumo/INSTALL create mode 100755 sites/all/modules/custom/devel/krumo/LICENSE create mode 100755 sites/all/modules/custom/devel/krumo/README create mode 100755 sites/all/modules/custom/devel/krumo/TODO create mode 100755 sites/all/modules/custom/devel/krumo/VERSION create mode 100755 sites/all/modules/custom/devel/krumo/class.krumo.php create mode 100644 sites/all/modules/custom/devel/krumo/docs/Krumo/_class.krumo.php.html create mode 100755 sites/all/modules/custom/devel/krumo/docs/Krumo/krumo.html create mode 100755 sites/all/modules/custom/devel/krumo/docs/blank.html create mode 100755 sites/all/modules/custom/devel/krumo/docs/classtrees_Krumo.html create mode 100755 sites/all/modules/custom/devel/krumo/docs/elementindex.html create mode 100755 sites/all/modules/custom/devel/krumo/docs/elementindex_Krumo.html create mode 100755 sites/all/modules/custom/devel/krumo/docs/errors.html create mode 100755 sites/all/modules/custom/devel/krumo/docs/index.html create mode 100755 sites/all/modules/custom/devel/krumo/docs/li_Krumo.html create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/banner.css create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/AbstractClass.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/AbstractClass_logo.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/AbstractMethod.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/AbstractPrivateClass.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/AbstractPrivateClass_logo.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/AbstractPrivateMethod.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Class.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Class_logo.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Constant.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Constructor.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Destructor.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Function.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Global.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/I.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Index.png create mode 100644 sites/all/modules/custom/devel/krumo/docs/media/images/Interface.PNG create mode 100644 sites/all/modules/custom/devel/krumo/docs/media/images/Interface_logo.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/L.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Lminus.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Lplus.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Method.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Page.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Page_logo.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/PrivateClass.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/PrivateClass_logo.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/PrivateMethod.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/PrivateVariable.png create mode 100644 sites/all/modules/custom/devel/krumo/docs/media/images/StaticMethod.png create mode 100644 sites/all/modules/custom/devel/krumo/docs/media/images/StaticVariable.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/T.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Tminus.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Tplus.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/Variable.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/blank.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/class_folder.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/empty.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/file.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/folder.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/function_folder.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/minus.gif create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/next_button.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/next_button_disabled.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/package.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/package_folder.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/plus.gif create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/previous_button.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/previous_button_disabled.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/private_class_logo.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/tutorial.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/tutorial_folder.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/images/up_button.png create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/lib/classTree.js create mode 100755 sites/all/modules/custom/devel/krumo/docs/media/stylesheet.css create mode 100755 sites/all/modules/custom/devel/krumo/docs/packages.html create mode 100755 sites/all/modules/custom/devel/krumo/docs/ric_INSTALL.html create mode 100755 sites/all/modules/custom/devel/krumo/docs/ric_LICENSE.html create mode 100755 sites/all/modules/custom/devel/krumo/docs/ric_README.html create mode 100755 sites/all/modules/custom/devel/krumo/docs/ric_TODO.html create mode 100755 sites/all/modules/custom/devel/krumo/docs/ric_VERSION.html create mode 100755 sites/all/modules/custom/devel/krumo/krumo.ini create mode 100755 sites/all/modules/custom/devel/krumo/krumo.js create mode 100755 sites/all/modules/custom/devel/krumo/skins/blue/bg.gif create mode 100755 sites/all/modules/custom/devel/krumo/skins/blue/skin.css create mode 100755 sites/all/modules/custom/devel/krumo/skins/default/bg.gif create mode 100755 sites/all/modules/custom/devel/krumo/skins/default/skin.css create mode 100755 sites/all/modules/custom/devel/krumo/skins/green/bg.gif create mode 100755 sites/all/modules/custom/devel/krumo/skins/green/skin.css create mode 100755 sites/all/modules/custom/devel/krumo/skins/orange/bg.gif create mode 100755 sites/all/modules/custom/devel/krumo/skins/orange/skin.css create mode 100755 sites/all/modules/custom/devel/krumo/skins/white/collapsed.gif create mode 100755 sites/all/modules/custom/devel/krumo/skins/white/dotted.gif create mode 100755 sites/all/modules/custom/devel/krumo/skins/white/empty.gif create mode 100755 sites/all/modules/custom/devel/krumo/skins/white/expanded.gif create mode 100755 sites/all/modules/custom/devel/krumo/skins/white/skin.css create mode 100755 sites/all/modules/custom/devel/runtests.sh create mode 100644 sites/all/modules/custom/diff/CHANGELOG.txt create mode 100644 sites/all/modules/custom/diff/DiffEngine.php create mode 100644 sites/all/modules/custom/diff/LICENSE.txt create mode 100644 sites/all/modules/custom/diff/css/diff.boxes.css create mode 100644 sites/all/modules/custom/diff/css/diff.default.css create mode 100644 sites/all/modules/custom/diff/diff.admin.inc create mode 100644 sites/all/modules/custom/diff/diff.api.php create mode 100644 sites/all/modules/custom/diff/diff.css create mode 100644 sites/all/modules/custom/diff/diff.diff.inc create mode 100644 sites/all/modules/custom/diff/diff.info create mode 100644 sites/all/modules/custom/diff/diff.install create mode 100644 sites/all/modules/custom/diff/diff.module create mode 100644 sites/all/modules/custom/diff/diff.pages.inc create mode 100644 sites/all/modules/custom/diff/diff.theme.inc create mode 100644 sites/all/modules/custom/diff/diff.tokens.inc create mode 100644 sites/all/modules/custom/diff/includes/file.inc create mode 100644 sites/all/modules/custom/diff/includes/image.inc create mode 100644 sites/all/modules/custom/diff/includes/list.inc create mode 100644 sites/all/modules/custom/diff/includes/node.inc create mode 100644 sites/all/modules/custom/diff/includes/number.inc create mode 100644 sites/all/modules/custom/diff/includes/taxonomy.inc create mode 100644 sites/all/modules/custom/diff/includes/text.inc create mode 100644 sites/all/modules/custom/diff/js/diff.js create mode 100644 sites/all/modules/custom/diff/readme.txt create mode 100644 sites/all/modules/custom/domain/CHANGELOG.txt create mode 100644 sites/all/modules/custom/domain/INSTALL.txt create mode 100644 sites/all/modules/custom/domain/INSTALL_QUICKSTART.txt create mode 100755 sites/all/modules/custom/domain/LICENSE.txt create mode 100644 sites/all/modules/custom/domain/README.txt create mode 100644 sites/all/modules/custom/domain/UPGRADE.txt create mode 100644 sites/all/modules/custom/domain/domain.admin.inc create mode 100644 sites/all/modules/custom/domain/domain.api.php create mode 100644 sites/all/modules/custom/domain/domain.blocks.inc create mode 100644 sites/all/modules/custom/domain/domain.bootstrap.inc create mode 100644 sites/all/modules/custom/domain/domain.drush.inc create mode 100644 sites/all/modules/custom/domain/domain.features.inc create mode 100644 sites/all/modules/custom/domain/domain.info create mode 100644 sites/all/modules/custom/domain/domain.install create mode 100644 sites/all/modules/custom/domain/domain.migrate.inc create mode 100644 sites/all/modules/custom/domain/domain.module create mode 100644 sites/all/modules/custom/domain/domain.tokens.inc create mode 100644 sites/all/modules/custom/domain/domain_alias/README.txt create mode 100644 sites/all/modules/custom/domain/domain_alias/domain_alias.admin.inc create mode 100644 sites/all/modules/custom/domain/domain_alias/domain_alias.domain.inc create mode 100644 sites/all/modules/custom/domain/domain_alias/domain_alias.features.inc create mode 100644 sites/all/modules/custom/domain/domain_alias/domain_alias.info create mode 100644 sites/all/modules/custom/domain/domain_alias/domain_alias.install create mode 100644 sites/all/modules/custom/domain/domain_alias/domain_alias.module create mode 100644 sites/all/modules/custom/domain/domain_conf/README.txt create mode 100644 sites/all/modules/custom/domain/domain_conf/domain_conf.admin.inc create mode 100644 sites/all/modules/custom/domain/domain_conf/domain_conf.domain.inc create mode 100644 sites/all/modules/custom/domain/domain_conf/domain_conf.drush.inc create mode 100644 sites/all/modules/custom/domain/domain_conf/domain_conf.features.inc create mode 100644 sites/all/modules/custom/domain/domain_conf/domain_conf.info create mode 100644 sites/all/modules/custom/domain/domain_conf/domain_conf.install create mode 100644 sites/all/modules/custom/domain/domain_conf/domain_conf.module create mode 100644 sites/all/modules/custom/domain/domain_content/README.txt create mode 100644 sites/all/modules/custom/domain/domain_content/domain_content-rtl.css create mode 100644 sites/all/modules/custom/domain/domain_content/domain_content.admin.inc create mode 100644 sites/all/modules/custom/domain/domain_content/domain_content.css create mode 100644 sites/all/modules/custom/domain/domain_content/domain_content.domain.inc create mode 100644 sites/all/modules/custom/domain/domain_content/domain_content.info create mode 100644 sites/all/modules/custom/domain/domain_content/domain_content.module create mode 100644 sites/all/modules/custom/domain/domain_nav/README.txt create mode 100644 sites/all/modules/custom/domain/domain_nav/domain_nav.css create mode 100644 sites/all/modules/custom/domain/domain_nav/domain_nav.info create mode 100644 sites/all/modules/custom/domain/domain_nav/domain_nav.install create mode 100644 sites/all/modules/custom/domain/domain_nav/domain_nav.module create mode 100644 sites/all/modules/custom/domain/domain_settings/README.txt create mode 100644 sites/all/modules/custom/domain/domain_settings/domain_settings.info create mode 100644 sites/all/modules/custom/domain/domain_settings/domain_settings.install create mode 100644 sites/all/modules/custom/domain/domain_settings/domain_settings.module create mode 100644 sites/all/modules/custom/domain/domain_source/README.txt create mode 100644 sites/all/modules/custom/domain/domain_source/domain_source.domain.inc create mode 100644 sites/all/modules/custom/domain/domain_source/domain_source.info create mode 100644 sites/all/modules/custom/domain/domain_source/domain_source.install create mode 100644 sites/all/modules/custom/domain/domain_source/domain_source.module create mode 100644 sites/all/modules/custom/domain/domain_source/domain_source.views.inc create mode 100644 sites/all/modules/custom/domain/domain_source/includes/domain_source_handler_filter_domain_id.inc create mode 100644 sites/all/modules/custom/domain/domain_source/tests/domain_source.test create mode 100644 sites/all/modules/custom/domain/domain_strict/README.txt create mode 100644 sites/all/modules/custom/domain/domain_strict/domain_strict.info create mode 100644 sites/all/modules/custom/domain/domain_strict/domain_strict.module create mode 100644 sites/all/modules/custom/domain/domain_strict/domain_strict.test create mode 100644 sites/all/modules/custom/domain/domain_theme/README.txt create mode 100644 sites/all/modules/custom/domain/domain_theme/domain_theme.admin.inc create mode 100644 sites/all/modules/custom/domain/domain_theme/domain_theme.domain.inc create mode 100644 sites/all/modules/custom/domain/domain_theme/domain_theme.features.inc create mode 100644 sites/all/modules/custom/domain/domain_theme/domain_theme.info create mode 100644 sites/all/modules/custom/domain/domain_theme/domain_theme.install create mode 100644 sites/all/modules/custom/domain/domain_theme/domain_theme.module create mode 100644 sites/all/modules/custom/domain/settings.inc create mode 100644 sites/all/modules/custom/domain/settings_custom_url.inc create mode 100644 sites/all/modules/custom/domain/tests/200.png create mode 100644 sites/all/modules/custom/domain/tests/domain.test create mode 100644 sites/all/modules/custom/domain/tests/domain_test.domain.inc create mode 100644 sites/all/modules/custom/domain/tests/domain_test.info create mode 100644 sites/all/modules/custom/domain/tests/domain_test.module create mode 100644 sites/all/modules/custom/draggableviews/LICENSE.txt create mode 100644 sites/all/modules/custom/draggableviews/README.txt create mode 100644 sites/all/modules/custom/draggableviews/css/draggableviews_list.css create mode 100644 sites/all/modules/custom/draggableviews/draggableviews.api.php create mode 100644 sites/all/modules/custom/draggableviews/draggableviews.info create mode 100644 sites/all/modules/custom/draggableviews/draggableviews.install create mode 100644 sites/all/modules/custom/draggableviews/draggableviews.module create mode 100644 sites/all/modules/custom/draggableviews/draggableviews.rules.inc create mode 100644 sites/all/modules/custom/draggableviews/handlers/draggableviews_handler.inc create mode 100644 sites/all/modules/custom/draggableviews/handlers/draggableviews_handler_fieldapi.inc create mode 100644 sites/all/modules/custom/draggableviews/handlers/draggableviews_handler_native.inc create mode 100644 sites/all/modules/custom/draggableviews/js/draggableviews_list.js create mode 100644 sites/all/modules/custom/draggableviews/test/draggableviews.test create mode 100644 sites/all/modules/custom/draggableviews/test/draggableviews_test/draggableviews_test.info create mode 100644 sites/all/modules/custom/draggableviews/test/draggableviews_test/draggableviews_test.module create mode 100644 sites/all/modules/custom/draggableviews/test/draggableviews_test/draggableviews_test.views_default.inc create mode 100644 sites/all/modules/custom/draggableviews/views/draggableviews.views.inc create mode 100644 sites/all/modules/custom/draggableviews/views/draggableviews_handler_field_draggable.inc create mode 100644 sites/all/modules/custom/draggableviews/views/draggableviews_handler_sort.inc create mode 100644 sites/all/modules/custom/draggableviews/views/draggableviews_join_handler.inc create mode 100644 sites/all/modules/custom/ds/LICENSE.txt create mode 100644 sites/all/modules/custom/ds/README.txt create mode 100644 sites/all/modules/custom/ds/css/ds.admin.css create mode 100644 sites/all/modules/custom/ds/drush/ds.drush.inc create mode 100644 sites/all/modules/custom/ds/drush/example_layout/README.txt create mode 100644 sites/all/modules/custom/ds/drush/example_layout/example-layout.tpl.php create mode 100644 sites/all/modules/custom/ds/drush/example_layout/example_layout-rtl.css create mode 100644 sites/all/modules/custom/ds/drush/example_layout/example_layout.css create mode 100644 sites/all/modules/custom/ds/drush/example_layout/example_layout.inc create mode 100644 sites/all/modules/custom/ds/drush/example_layout/example_layout.png create mode 100644 sites/all/modules/custom/ds/ds.api.php create mode 100644 sites/all/modules/custom/ds/ds.ds_fields_info.inc create mode 100644 sites/all/modules/custom/ds/ds.info create mode 100644 sites/all/modules/custom/ds/ds.install create mode 100644 sites/all/modules/custom/ds/ds.module create mode 100644 sites/all/modules/custom/ds/ds.views.inc create mode 100644 sites/all/modules/custom/ds/images/arrow.png create mode 100644 sites/all/modules/custom/ds/images/preview.png create mode 100644 sites/all/modules/custom/ds/includes/ds.contextual.inc create mode 100644 sites/all/modules/custom/ds/includes/ds.displays.inc create mode 100644 sites/all/modules/custom/ds/includes/ds.field_ui.inc create mode 100644 sites/all/modules/custom/ds/includes/ds.registry.inc create mode 100644 sites/all/modules/custom/ds/includes/ds.revision.inc create mode 100644 sites/all/modules/custom/ds/js/ds.admin.js create mode 100644 sites/all/modules/custom/ds/layouts/ds_1col/ds-1col.tpl.php create mode 100644 sites/all/modules/custom/ds/layouts/ds_1col/ds_1col.png create mode 100644 sites/all/modules/custom/ds/layouts/ds_1col_wrapper/ds-1col-wrapper.tpl.php create mode 100644 sites/all/modules/custom/ds/layouts/ds_1col_wrapper/ds_1col_wrapper.png create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col/ds-2col.tpl.php create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col/ds_2col-rtl.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col/ds_2col.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col/ds_2col.png create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col_fluid/ds-2col-fluid.tpl.php create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col_fluid/ds_2col_fluid-rtl.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col_fluid/ds_2col_fluid.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col_fluid/ds_2col_fluid.png create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col_stacked/ds-2col-stacked.tpl.php create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col_stacked/ds_2col_stacked-rtl.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col_stacked/ds_2col_stacked.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col_stacked/ds_2col_stacked.png create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col_stacked_fluid/ds-2col-stacked-fluid.tpl.php create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col_stacked_fluid/ds_2col_stacked_fluid-rtl.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col_stacked_fluid/ds_2col_stacked_fluid.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_2col_stacked_fluid/ds_2col_stacked_fluid.png create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col/ds-3col.tpl.php create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col/ds_3col-rtl.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col/ds_3col.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col/ds_3col.png create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_equal_width/ds-3col-equal-width.tpl.php create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_equal_width/ds_3col_equal_width-rtl.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_equal_width/ds_3col_equal_width.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_equal_width/ds_3col_equal_width.png create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_stacked/ds-3col-stacked.tpl.php create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_stacked/ds_3col_stacked-rtl.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_stacked/ds_3col_stacked.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_stacked/ds_3col_stacked.png create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_stacked_equal_width/ds-3col-stacked-equal-width.tpl.php create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_stacked_equal_width/ds_3col_stacked_equal_width-rtl.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_stacked_equal_width/ds_3col_stacked_equal_width.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_stacked_equal_width/ds_3col_stacked_equal_width.png create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_stacked_fluid/ds-3col-stacked-fluid.tpl.php create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_stacked_fluid/ds_3col_stacked_fluid-rtl.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_stacked_fluid/ds_3col_stacked_fluid.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_3col_stacked_fluid/ds_3col_stacked_fluid.png create mode 100644 sites/all/modules/custom/ds/layouts/ds_4col/ds-4col.tpl.php create mode 100644 sites/all/modules/custom/ds/layouts/ds_4col/ds_4col-rtl.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_4col/ds_4col.css create mode 100644 sites/all/modules/custom/ds/layouts/ds_4col/ds_4col.png create mode 100644 sites/all/modules/custom/ds/layouts/ds_reset/ds-reset.tpl.php create mode 100644 sites/all/modules/custom/ds/layouts/ds_reset/ds_reset.png create mode 100644 sites/all/modules/custom/ds/modules/ds_devel/ds_devel.info create mode 100644 sites/all/modules/custom/ds/modules/ds_devel/ds_devel.module create mode 100644 sites/all/modules/custom/ds/modules/ds_extras/README.txt create mode 100644 sites/all/modules/custom/ds/modules/ds_extras/ds_extras.ds_fields_info.inc create mode 100644 sites/all/modules/custom/ds/modules/ds_extras/ds_extras.info create mode 100644 sites/all/modules/custom/ds/modules/ds_extras/ds_extras.install create mode 100644 sites/all/modules/custom/ds/modules/ds_extras/ds_extras.module create mode 100644 sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.admin.inc create mode 100644 sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.pages.inc create mode 100644 sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.registry.inc create mode 100644 sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.vd.inc create mode 100644 sites/all/modules/custom/ds/modules/ds_extras/js/ds_extras.admin.js create mode 100644 sites/all/modules/custom/ds/modules/ds_extras/js/ds_extras.js create mode 100644 sites/all/modules/custom/ds/modules/ds_format/ds_format.info create mode 100644 sites/all/modules/custom/ds/modules/ds_format/ds_format.install create mode 100644 sites/all/modules/custom/ds/modules/ds_format/ds_format.module create mode 100644 sites/all/modules/custom/ds/modules/ds_forms/css/ds_forms.admin.css create mode 100644 sites/all/modules/custom/ds/modules/ds_forms/ds_forms.info create mode 100644 sites/all/modules/custom/ds/modules/ds_forms/ds_forms.install create mode 100644 sites/all/modules/custom/ds/modules/ds_forms/ds_forms.module create mode 100644 sites/all/modules/custom/ds/modules/ds_forms/js/ds_forms.admin.js create mode 100644 sites/all/modules/custom/ds/modules/ds_search/css/ds_search.theme.css create mode 100644 sites/all/modules/custom/ds/modules/ds_search/ds_search.info create mode 100644 sites/all/modules/custom/ds/modules/ds_search/ds_search.install create mode 100644 sites/all/modules/custom/ds/modules/ds_search/ds_search.module create mode 100644 sites/all/modules/custom/ds/modules/ds_search/includes/ds_search.admin.inc create mode 100644 sites/all/modules/custom/ds/modules/ds_search/js/ds_search.js create mode 100644 sites/all/modules/custom/ds/modules/ds_ui/ds_ui.info create mode 100644 sites/all/modules/custom/ds/modules/ds_ui/ds_ui.module create mode 100644 sites/all/modules/custom/ds/modules/ds_ui/includes/ds.classes.inc create mode 100644 sites/all/modules/custom/ds/modules/ds_ui/includes/ds.fields.inc create mode 100644 sites/all/modules/custom/ds/modules/ds_ui/includes/ds.view_modes.inc create mode 100644 sites/all/modules/custom/ds/plugins/content_types/dsc/dsc.inc create mode 100644 sites/all/modules/custom/ds/tests/ds.base.test create mode 100644 sites/all/modules/custom/ds/tests/ds.entities.test create mode 100644 sites/all/modules/custom/ds/tests/ds.exportables.test create mode 100644 sites/all/modules/custom/ds/tests/ds.forms.test create mode 100644 sites/all/modules/custom/ds/tests/ds.search.test create mode 100644 sites/all/modules/custom/ds/tests/ds.views.test create mode 100644 sites/all/modules/custom/ds/tests/ds_exportables_test/ds_exportables_test.info create mode 100644 sites/all/modules/custom/ds/tests/ds_exportables_test/ds_exportables_test.module create mode 100644 sites/all/modules/custom/ds/tests/ds_test.info create mode 100644 sites/all/modules/custom/ds/tests/ds_test.module create mode 100644 sites/all/modules/custom/ds/tests/ds_test.views_default.inc create mode 100644 sites/all/modules/custom/ds/tests/dstest_1col/dstest-1col.tpl.php create mode 100644 sites/all/modules/custom/ds/tests/dstest_2col/dstest-2col.tpl.php create mode 100644 sites/all/modules/custom/ds/tests/dstest_2col/dstest_2col.css create mode 100644 sites/all/modules/custom/ds/views/ds-row-fields.tpl.php create mode 100644 sites/all/modules/custom/ds/views/views_plugin_ds_entity_view.inc create mode 100644 sites/all/modules/custom/ds/views/views_plugin_ds_fields_view.inc create mode 100755 sites/all/modules/custom/entity/LICENSE.txt create mode 100644 sites/all/modules/custom/entity/README.txt create mode 100644 sites/all/modules/custom/entity/ctools/content_types/entity_view.inc create mode 100644 sites/all/modules/custom/entity/entity.api.php create mode 100644 sites/all/modules/custom/entity/entity.features.inc create mode 100644 sites/all/modules/custom/entity/entity.i18n.inc create mode 100644 sites/all/modules/custom/entity/entity.info create mode 100644 sites/all/modules/custom/entity/entity.info.inc create mode 100644 sites/all/modules/custom/entity/entity.install create mode 100644 sites/all/modules/custom/entity/entity.module create mode 100644 sites/all/modules/custom/entity/entity.rules.inc create mode 100644 sites/all/modules/custom/entity/entity.test create mode 100644 sites/all/modules/custom/entity/entity_token.info create mode 100644 sites/all/modules/custom/entity/entity_token.module create mode 100644 sites/all/modules/custom/entity/entity_token.tokens.inc create mode 100644 sites/all/modules/custom/entity/includes/entity.controller.inc create mode 100644 sites/all/modules/custom/entity/includes/entity.inc create mode 100644 sites/all/modules/custom/entity/includes/entity.property.inc create mode 100644 sites/all/modules/custom/entity/includes/entity.ui.inc create mode 100644 sites/all/modules/custom/entity/includes/entity.wrapper.inc create mode 100644 sites/all/modules/custom/entity/modules/book.info.inc create mode 100644 sites/all/modules/custom/entity/modules/callbacks.inc create mode 100644 sites/all/modules/custom/entity/modules/comment.info.inc create mode 100644 sites/all/modules/custom/entity/modules/field.info.inc create mode 100644 sites/all/modules/custom/entity/modules/locale.info.inc create mode 100644 sites/all/modules/custom/entity/modules/node.info.inc create mode 100644 sites/all/modules/custom/entity/modules/poll.info.inc create mode 100644 sites/all/modules/custom/entity/modules/statistics.info.inc create mode 100644 sites/all/modules/custom/entity/modules/system.info.inc create mode 100644 sites/all/modules/custom/entity/modules/taxonomy.info.inc create mode 100644 sites/all/modules/custom/entity/modules/user.info.inc create mode 100644 sites/all/modules/custom/entity/tests/entity_feature.info create mode 100644 sites/all/modules/custom/entity/tests/entity_feature.module create mode 100644 sites/all/modules/custom/entity/tests/entity_test.info create mode 100644 sites/all/modules/custom/entity/tests/entity_test.install create mode 100644 sites/all/modules/custom/entity/tests/entity_test.module create mode 100644 sites/all/modules/custom/entity/tests/entity_test_i18n.info create mode 100644 sites/all/modules/custom/entity/tests/entity_test_i18n.module create mode 100644 sites/all/modules/custom/entity/theme/entity.theme.css create mode 100644 sites/all/modules/custom/entity/theme/entity.theme.inc create mode 100644 sites/all/modules/custom/entity/theme/entity.tpl.php create mode 100644 sites/all/modules/custom/entity/views/entity.views.inc create mode 100644 sites/all/modules/custom/entity/views/entity_views_example_query.php create mode 100644 sites/all/modules/custom/entity/views/handlers/entity_views_field_handler_helper.inc create mode 100644 sites/all/modules/custom/entity/views/handlers/entity_views_handler_area_entity.inc create mode 100644 sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_boolean.inc create mode 100644 sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_date.inc create mode 100644 sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_duration.inc create mode 100644 sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_entity.inc create mode 100644 sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_field.inc create mode 100644 sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_numeric.inc create mode 100644 sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_options.inc create mode 100644 sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_text.inc create mode 100644 sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_uri.inc create mode 100644 sites/all/modules/custom/entity/views/handlers/entity_views_handler_relationship.inc create mode 100644 sites/all/modules/custom/entity/views/handlers/entity_views_handler_relationship_by_bundle.inc create mode 100644 sites/all/modules/custom/entity/views/plugins/entity_views_plugin_row_entity_view.inc create mode 100644 sites/all/modules/custom/entity_dependency/EntityDependencyIterator.inc create mode 100644 sites/all/modules/custom/entity_dependency/EntityDependencyIteratorInterface.inc create mode 100644 sites/all/modules/custom/entity_dependency/LICENSE.txt create mode 100644 sites/all/modules/custom/entity_dependency/README.txt create mode 100644 sites/all/modules/custom/entity_dependency/entity_dependency.api.php create mode 100644 sites/all/modules/custom/entity_dependency/entity_dependency.core.inc create mode 100644 sites/all/modules/custom/entity_dependency/entity_dependency.info create mode 100644 sites/all/modules/custom/entity_dependency/entity_dependency.module create mode 100644 sites/all/modules/custom/entity_dependency/entity_dependency.test create mode 100755 sites/all/modules/custom/entityreference/LICENSE.txt create mode 100644 sites/all/modules/custom/entityreference/README.txt create mode 100644 sites/all/modules/custom/entityreference/entityreference.admin.css create mode 100644 sites/all/modules/custom/entityreference/entityreference.devel_generate.inc create mode 100644 sites/all/modules/custom/entityreference/entityreference.diff.inc create mode 100644 sites/all/modules/custom/entityreference/entityreference.feeds.inc create mode 100644 sites/all/modules/custom/entityreference/entityreference.info create mode 100644 sites/all/modules/custom/entityreference/entityreference.install create mode 100644 sites/all/modules/custom/entityreference/entityreference.migrate.inc create mode 100644 sites/all/modules/custom/entityreference/entityreference.module create mode 100644 sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.info create mode 100644 sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.module create mode 100644 sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceFieldBehaviorExample.class.php create mode 100644 sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceInstanceBehaviorExample.class.php create mode 100644 sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_field_behavior.inc create mode 100644 sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_instance_behavior.inc create mode 100644 sites/all/modules/custom/entityreference/plugins/behavior/EntityReferenceBehavior_TaxonomyIndex.class.php create mode 100644 sites/all/modules/custom/entityreference/plugins/behavior/EntityReferenceBehavior_ViewsFilterSelect.class.php create mode 100644 sites/all/modules/custom/entityreference/plugins/behavior/abstract.inc create mode 100644 sites/all/modules/custom/entityreference/plugins/behavior/taxonomy-index.inc create mode 100644 sites/all/modules/custom/entityreference/plugins/behavior/views-select-list.inc create mode 100644 sites/all/modules/custom/entityreference/plugins/selection/EntityReference_SelectionHandler_Generic.class.php create mode 100644 sites/all/modules/custom/entityreference/plugins/selection/EntityReference_SelectionHandler_Views.class.php create mode 100644 sites/all/modules/custom/entityreference/plugins/selection/abstract.inc create mode 100644 sites/all/modules/custom/entityreference/plugins/selection/base.inc create mode 100644 sites/all/modules/custom/entityreference/plugins/selection/views.inc create mode 100644 sites/all/modules/custom/entityreference/tests/entityreference.admin.test create mode 100644 sites/all/modules/custom/entityreference/tests/entityreference.feeds.test create mode 100644 sites/all/modules/custom/entityreference/tests/entityreference.handlers.test create mode 100644 sites/all/modules/custom/entityreference/tests/entityreference.taxonomy.test create mode 100644 sites/all/modules/custom/entityreference/tests/feeds_test.csv create mode 100644 sites/all/modules/custom/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.info create mode 100644 sites/all/modules/custom/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.module create mode 100644 sites/all/modules/custom/entityreference/views/entityreference.views.inc create mode 100644 sites/all/modules/custom/entityreference/views/entityreference_plugin_display.inc create mode 100644 sites/all/modules/custom/entityreference/views/entityreference_plugin_row_fields.inc create mode 100644 sites/all/modules/custom/entityreference/views/entityreference_plugin_style.inc create mode 100644 sites/all/modules/custom/eva/LICENSE.txt create mode 100755 sites/all/modules/custom/eva/README.txt create mode 100755 sites/all/modules/custom/eva/eva-display-entity-view.tpl.php create mode 100644 sites/all/modules/custom/eva/eva.info create mode 100755 sites/all/modules/custom/eva/eva.module create mode 100755 sites/all/modules/custom/eva/eva.theme.inc create mode 100755 sites/all/modules/custom/eva/eva.views.inc create mode 100755 sites/all/modules/custom/eva/eva_plugin_display_entity.inc create mode 100644 sites/all/modules/custom/features/API.txt create mode 100644 sites/all/modules/custom/features/CHANGELOG.txt create mode 100644 sites/all/modules/custom/features/LICENSE.txt create mode 100644 sites/all/modules/custom/features/README.txt create mode 100644 sites/all/modules/custom/features/features.admin.inc create mode 100644 sites/all/modules/custom/features/features.api.php create mode 100644 sites/all/modules/custom/features/features.css create mode 100644 sites/all/modules/custom/features/features.drush.inc create mode 100644 sites/all/modules/custom/features/features.export.inc create mode 100644 sites/all/modules/custom/features/features.info create mode 100644 sites/all/modules/custom/features/features.install create mode 100644 sites/all/modules/custom/features/features.js create mode 100644 sites/all/modules/custom/features/features.module create mode 100644 sites/all/modules/custom/features/includes/features.block.inc create mode 100644 sites/all/modules/custom/features/includes/features.context.inc create mode 100644 sites/all/modules/custom/features/includes/features.ctools.inc create mode 100644 sites/all/modules/custom/features/includes/features.features.inc create mode 100644 sites/all/modules/custom/features/includes/features.field.inc create mode 100644 sites/all/modules/custom/features/includes/features.filter.inc create mode 100644 sites/all/modules/custom/features/includes/features.image.inc create mode 100644 sites/all/modules/custom/features/includes/features.locale.inc create mode 100644 sites/all/modules/custom/features/includes/features.menu.inc create mode 100644 sites/all/modules/custom/features/includes/features.node.inc create mode 100644 sites/all/modules/custom/features/includes/features.taxonomy.inc create mode 100644 sites/all/modules/custom/features/includes/features.user.inc create mode 100644 sites/all/modules/custom/features/tests/features.test create mode 100644 sites/all/modules/custom/features/tests/features_test/features_test.features.field_base.inc create mode 100644 sites/all/modules/custom/features/tests/features_test/features_test.features.field_instance.inc create mode 100644 sites/all/modules/custom/features/tests/features_test/features_test.features.filter.inc create mode 100644 sites/all/modules/custom/features/tests/features_test/features_test.features.inc create mode 100644 sites/all/modules/custom/features/tests/features_test/features_test.features.taxonomy.inc create mode 100644 sites/all/modules/custom/features/tests/features_test/features_test.features.user_permission.inc create mode 100644 sites/all/modules/custom/features/tests/features_test/features_test.info create mode 100644 sites/all/modules/custom/features/tests/features_test/features_test.module create mode 100644 sites/all/modules/custom/features/tests/features_test/features_test.views_default.inc create mode 100644 sites/all/modules/custom/features/theme/features-admin-components.tpl.php create mode 100644 sites/all/modules/custom/features/theme/theme.inc create mode 100644 sites/all/modules/custom/field_group/CHANGELOG.txt create mode 100755 sites/all/modules/custom/field_group/LICENSE.txt create mode 100644 sites/all/modules/custom/field_group/README.txt create mode 100644 sites/all/modules/custom/field_group/field_group-rtl.css create mode 100644 sites/all/modules/custom/field_group/field_group.api.php create mode 100644 sites/all/modules/custom/field_group/field_group.css create mode 100644 sites/all/modules/custom/field_group/field_group.features.inc create mode 100644 sites/all/modules/custom/field_group/field_group.field_ui.css create mode 100644 sites/all/modules/custom/field_group/field_group.field_ui.inc create mode 100644 sites/all/modules/custom/field_group/field_group.field_ui.js create mode 100644 sites/all/modules/custom/field_group/field_group.info create mode 100644 sites/all/modules/custom/field_group/field_group.install create mode 100644 sites/all/modules/custom/field_group/field_group.js create mode 100644 sites/all/modules/custom/field_group/field_group.module create mode 100644 sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs-rtl.css create mode 100644 sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs.css create mode 100644 sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs.js create mode 100644 sites/all/modules/custom/field_group/multipage/multipage-rtl.css create mode 100644 sites/all/modules/custom/field_group/multipage/multipage.css create mode 100644 sites/all/modules/custom/field_group/multipage/multipage.js create mode 100644 sites/all/modules/custom/field_group/tests/field_group.display.test create mode 100644 sites/all/modules/custom/field_group/tests/field_group.ui.test create mode 100644 sites/all/modules/custom/field_group/tests/field_group_test.info create mode 100644 sites/all/modules/custom/field_group/tests/field_group_test.module create mode 100644 sites/all/modules/custom/fieldable_panels_panes/LICENSE.txt create mode 100644 sites/all/modules/custom/fieldable_panels_panes/README.txt create mode 100644 sites/all/modules/custom/fieldable_panels_panes/fieldable-panels-pane.tpl.php create mode 100644 sites/all/modules/custom/fieldable_panels_panes/fieldable_panels_panes.info create mode 100644 sites/all/modules/custom/fieldable_panels_panes/fieldable_panels_panes.install create mode 100644 sites/all/modules/custom/fieldable_panels_panes/fieldable_panels_panes.module create mode 100644 sites/all/modules/custom/fieldable_panels_panes/includes/PanelsPaneController.class.php create mode 100644 sites/all/modules/custom/fieldable_panels_panes/includes/admin.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/includes/translation.handler.fieldable_panels_pane.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/content_types/fieldable_panels_pane.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/entity/FieldablePanelsPaneEntity.class.php create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/entity/fieldable_panels_pane.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes.views.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes.views_default.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_argument_bundle.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_bundle.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_delete_entity.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_delete_revision.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_edit_entity.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_edit_revision.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_is_current.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_make_current.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_view_entity.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_view_revision.inc create mode 100644 sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_filter_bundle.inc create mode 100644 sites/all/modules/custom/file_entity/LICENSE.txt create mode 100644 sites/all/modules/custom/file_entity/admin_views_default/file.admin-content-file.inc create mode 100644 sites/all/modules/custom/file_entity/file_entity.admin.inc create mode 100644 sites/all/modules/custom/file_entity/file_entity.admin.js create mode 100644 sites/all/modules/custom/file_entity/file_entity.api.php create mode 100644 sites/all/modules/custom/file_entity/file_entity.field.inc create mode 100644 sites/all/modules/custom/file_entity/file_entity.file.inc create mode 100644 sites/all/modules/custom/file_entity/file_entity.file_api.inc create mode 100644 sites/all/modules/custom/file_entity/file_entity.file_default_displays.inc create mode 100644 sites/all/modules/custom/file_entity/file_entity.info create mode 100644 sites/all/modules/custom/file_entity/file_entity.install create mode 100644 sites/all/modules/custom/file_entity/file_entity.js create mode 100644 sites/all/modules/custom/file_entity/file_entity.module create mode 100644 sites/all/modules/custom/file_entity/file_entity.pages.inc create mode 100644 sites/all/modules/custom/file_entity/file_entity.pathauto.inc create mode 100644 sites/all/modules/custom/file_entity/file_entity.test create mode 100644 sites/all/modules/custom/file_entity/file_entity.theme.inc create mode 100644 sites/all/modules/custom/file_entity/file_entity.tokens.inc create mode 100644 sites/all/modules/custom/file_entity/file_entity.tpl.php create mode 100644 sites/all/modules/custom/file_entity/file_entity.views.inc create mode 100644 sites/all/modules/custom/file_entity/plugins/content_types/file_content.inc create mode 100644 sites/all/modules/custom/file_entity/plugins/content_types/file_display.inc create mode 100644 sites/all/modules/custom/file_entity/tests/file_entity_test.info create mode 100644 sites/all/modules/custom/file_entity/tests/file_entity_test.module create mode 100644 sites/all/modules/custom/file_entity/tests/file_entity_test.pages.inc create mode 100644 sites/all/modules/custom/file_entity/views/views_handler_argument_file_type.inc create mode 100644 sites/all/modules/custom/file_entity/views/views_handler_field_file_filename.inc create mode 100644 sites/all/modules/custom/file_entity/views/views_handler_field_file_link.inc create mode 100644 sites/all/modules/custom/file_entity/views/views_handler_field_file_link_delete.inc create mode 100644 sites/all/modules/custom/file_entity/views/views_handler_field_file_link_download.inc create mode 100644 sites/all/modules/custom/file_entity/views/views_handler_field_file_link_edit.inc create mode 100644 sites/all/modules/custom/file_entity/views/views_handler_field_file_link_usage.inc create mode 100644 sites/all/modules/custom/file_entity/views/views_handler_field_file_rendered.inc create mode 100644 sites/all/modules/custom/file_entity/views/views_handler_field_file_type.inc create mode 100644 sites/all/modules/custom/file_entity/views/views_handler_filter_file_type.inc create mode 100644 sites/all/modules/custom/file_entity/views/views_handler_filter_schema_type.inc create mode 100644 sites/all/modules/custom/file_entity/views/views_plugin_row_file_rss.inc create mode 100644 sites/all/modules/custom/file_entity/views/views_plugin_row_file_view.inc create mode 100644 sites/all/modules/custom/filefield_paths/CHANGELOG.txt create mode 100644 sites/all/modules/custom/filefield_paths/LICENSE.txt create mode 100644 sites/all/modules/custom/filefield_paths/README.txt create mode 100644 sites/all/modules/custom/filefield_paths/filefield_paths.drush.inc create mode 100644 sites/all/modules/custom/filefield_paths/filefield_paths.info create mode 100644 sites/all/modules/custom/filefield_paths/filefield_paths.install create mode 100644 sites/all/modules/custom/filefield_paths/filefield_paths.module create mode 100644 sites/all/modules/custom/filefield_paths/modules/features.inc create mode 100755 sites/all/modules/custom/filefield_paths/modules/file.inc create mode 100644 sites/all/modules/custom/filefield_paths/modules/filefield_paths.inc create mode 100755 sites/all/modules/custom/filefield_paths/modules/image.inc create mode 100644 sites/all/modules/custom/filefield_paths/modules/token.inc create mode 100755 sites/all/modules/custom/filefield_paths/modules/video.inc create mode 100644 sites/all/modules/custom/filter_perms/LICENSE.txt create mode 100644 sites/all/modules/custom/filter_perms/filter_perms.css create mode 100644 sites/all/modules/custom/filter_perms/filter_perms.info create mode 100644 sites/all/modules/custom/filter_perms/filter_perms.module create mode 100644 sites/all/modules/custom/fitvids/LICENSE.txt create mode 100644 sites/all/modules/custom/fitvids/README.txt create mode 100644 sites/all/modules/custom/fitvids/fitvids.css create mode 100644 sites/all/modules/custom/fitvids/fitvids.info create mode 100644 sites/all/modules/custom/fitvids/fitvids.install create mode 100644 sites/all/modules/custom/fitvids/fitvids.js create mode 100644 sites/all/modules/custom/fitvids/fitvids.make.example create mode 100644 sites/all/modules/custom/fitvids/fitvids.module create mode 100755 sites/all/modules/custom/flag/LICENSE.txt create mode 100644 sites/all/modules/custom/flag/README.txt create mode 100644 sites/all/modules/custom/flag/flag.api.php create mode 100644 sites/all/modules/custom/flag/flag.flag.inc create mode 100644 sites/all/modules/custom/flag/flag.info create mode 100644 sites/all/modules/custom/flag/flag.info.inc create mode 100644 sites/all/modules/custom/flag/flag.install create mode 100644 sites/all/modules/custom/flag/flag.module create mode 100644 sites/all/modules/custom/flag/flag.rules.inc create mode 100644 sites/all/modules/custom/flag/flag.tokens.inc create mode 100644 sites/all/modules/custom/flag/flag_actions.info create mode 100644 sites/all/modules/custom/flag/flag_actions.install create mode 100644 sites/all/modules/custom/flag/flag_actions.module create mode 100644 sites/all/modules/custom/flag/flag_bookmark/flag_bookmark.info create mode 100644 sites/all/modules/custom/flag/flag_bookmark/flag_bookmark.install create mode 100644 sites/all/modules/custom/flag/flag_bookmark/flag_bookmark.module create mode 100644 sites/all/modules/custom/flag/flag_bookmark/includes/flag_bookmark.views_default.inc create mode 100644 sites/all/modules/custom/flag/includes/flag.actions.inc create mode 100644 sites/all/modules/custom/flag/includes/flag.admin.inc create mode 100644 sites/all/modules/custom/flag/includes/flag.cookie_storage.inc create mode 100644 sites/all/modules/custom/flag/includes/flag.entity.inc create mode 100644 sites/all/modules/custom/flag/includes/flag.export.inc create mode 100644 sites/all/modules/custom/flag/includes/flag.features.inc create mode 100644 sites/all/modules/custom/flag/includes/flag.pages.inc create mode 100644 sites/all/modules/custom/flag/includes/flag/flag_comment.inc create mode 100644 sites/all/modules/custom/flag/includes/flag/flag_entity.inc create mode 100644 sites/all/modules/custom/flag/includes/flag/flag_flag.inc create mode 100644 sites/all/modules/custom/flag/includes/flag/flag_node.inc create mode 100644 sites/all/modules/custom/flag/includes/flag/flag_user.inc create mode 100644 sites/all/modules/custom/flag/includes/views/flag.views.inc create mode 100644 sites/all/modules/custom/flag/includes/views/flag.views_convert.inc create mode 100644 sites/all/modules/custom/flag/includes/views/flag_handler_argument_entity_id.inc create mode 100644 sites/all/modules/custom/flag/includes/views/flag_handler_field_flagged.inc create mode 100644 sites/all/modules/custom/flag/includes/views/flag_handler_field_ops.inc create mode 100644 sites/all/modules/custom/flag/includes/views/flag_handler_filter_flagged.inc create mode 100644 sites/all/modules/custom/flag/includes/views/flag_handler_relationships.inc create mode 100644 sites/all/modules/custom/flag/includes/views/flag_handler_sort_flagged.inc create mode 100644 sites/all/modules/custom/flag/includes/views/flag_plugin_argument_validate_flaggability.inc create mode 100644 sites/all/modules/custom/flag/plugins/access/flag_is_flagged/flag_is_flagged.inc create mode 100644 sites/all/modules/custom/flag/plugins/content_types/flag_link/flag_link.inc create mode 100644 sites/all/modules/custom/flag/tests/flag.test create mode 100644 sites/all/modules/custom/flag/tests/flag_fields_test/flag_fields_test.info create mode 100644 sites/all/modules/custom/flag/tests/flag_fields_test/flag_fields_test.install create mode 100644 sites/all/modules/custom/flag/tests/flag_fields_test/flag_fields_test.module create mode 100644 sites/all/modules/custom/flag/tests/flag_hook_test/flag_hook_test.info create mode 100644 sites/all/modules/custom/flag/tests/flag_hook_test/flag_hook_test.module create mode 100644 sites/all/modules/custom/flag/tests/flagaccesstest/flagaccesstest.info create mode 100644 sites/all/modules/custom/flag/tests/flagaccesstest/flagaccesstest.module create mode 100644 sites/all/modules/custom/flag/theme/README.txt create mode 100644 sites/all/modules/custom/flag/theme/flag-admin.css create mode 100644 sites/all/modules/custom/flag/theme/flag-admin.js create mode 100644 sites/all/modules/custom/flag/theme/flag-throbber.gif create mode 100644 sites/all/modules/custom/flag/theme/flag.css create mode 100644 sites/all/modules/custom/flag/theme/flag.js create mode 100644 sites/all/modules/custom/flag/theme/flag.tpl.php create mode 100644 sites/all/modules/custom/google_analytics/LICENSE.txt create mode 100644 sites/all/modules/custom/google_analytics/README.txt create mode 100644 sites/all/modules/custom/google_analytics/googleanalytics.admin.inc create mode 100644 sites/all/modules/custom/google_analytics/googleanalytics.admin.js create mode 100644 sites/all/modules/custom/google_analytics/googleanalytics.debug.js create mode 100644 sites/all/modules/custom/google_analytics/googleanalytics.info create mode 100644 sites/all/modules/custom/google_analytics/googleanalytics.install create mode 100644 sites/all/modules/custom/google_analytics/googleanalytics.js create mode 100644 sites/all/modules/custom/google_analytics/googleanalytics.module create mode 100644 sites/all/modules/custom/google_analytics/googleanalytics.test create mode 100644 sites/all/modules/custom/google_analytics/googleanalytics.test.js create mode 100644 sites/all/modules/custom/google_analytics/googleanalytics.tokens.inc create mode 100644 sites/all/modules/custom/google_analytics/googleanalytics.variable.inc create mode 100644 sites/all/modules/custom/hms_field/LICENSE.txt create mode 100644 sites/all/modules/custom/hms_field/hms_field.devel_generate.inc create mode 100644 sites/all/modules/custom/hms_field/hms_field.feeds.inc create mode 100644 sites/all/modules/custom/hms_field/hms_field.info create mode 100644 sites/all/modules/custom/hms_field/hms_field.install create mode 100644 sites/all/modules/custom/hms_field/hms_field.js create mode 100644 sites/all/modules/custom/hms_field/hms_field.migrate.inc create mode 100644 sites/all/modules/custom/hms_field/hms_field.module create mode 100644 sites/all/modules/custom/hms_field/views/hms_field.views.inc create mode 100644 sites/all/modules/custom/hms_field/views/hms_field_views_handler_filter_hms.inc create mode 100755 sites/all/modules/custom/honeypot/LICENSE.txt create mode 100644 sites/all/modules/custom/honeypot/README.txt create mode 100644 sites/all/modules/custom/honeypot/honeypot.admin.inc create mode 100644 sites/all/modules/custom/honeypot/honeypot.api.php create mode 100644 sites/all/modules/custom/honeypot/honeypot.info create mode 100644 sites/all/modules/custom/honeypot/honeypot.install create mode 100644 sites/all/modules/custom/honeypot/honeypot.module create mode 100644 sites/all/modules/custom/honeypot/honeypot.test create mode 100644 sites/all/modules/custom/jeditable/LICENSE.txt create mode 100644 sites/all/modules/custom/jeditable/README.txt create mode 100644 sites/all/modules/custom/jeditable/drupal_jeditable.js create mode 100644 sites/all/modules/custom/jeditable/includes/jeditable.views.inc create mode 100644 sites/all/modules/custom/jeditable/includes/views_handler_field_jeditable.inc create mode 100644 sites/all/modules/custom/jeditable/jeditable.css create mode 100644 sites/all/modules/custom/jeditable/jeditable.info create mode 100644 sites/all/modules/custom/jeditable/jeditable.module create mode 100644 sites/all/modules/custom/job_scheduler/CHANGELOG.txt create mode 100644 sites/all/modules/custom/job_scheduler/JobScheduler.inc create mode 100644 sites/all/modules/custom/job_scheduler/JobSchedulerCronTab.inc create mode 100644 sites/all/modules/custom/job_scheduler/LICENSE.txt create mode 100644 sites/all/modules/custom/job_scheduler/README.txt create mode 100644 sites/all/modules/custom/job_scheduler/job_scheduler.api.php create mode 100644 sites/all/modules/custom/job_scheduler/job_scheduler.info create mode 100644 sites/all/modules/custom/job_scheduler/job_scheduler.install create mode 100644 sites/all/modules/custom/job_scheduler/job_scheduler.module create mode 100644 sites/all/modules/custom/job_scheduler/modules/job_scheduler_trigger/README.md create mode 100644 sites/all/modules/custom/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.admin.inc create mode 100644 sites/all/modules/custom/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.info create mode 100644 sites/all/modules/custom/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.install create mode 100644 sites/all/modules/custom/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.module create mode 100644 sites/all/modules/custom/jplayer/LICENSE.txt create mode 100644 sites/all/modules/custom/jplayer/README.txt create mode 100644 sites/all/modules/custom/jplayer/includes/jplayer.admin.inc create mode 100644 sites/all/modules/custom/jplayer/includes/jplayer.theme.inc create mode 100644 sites/all/modules/custom/jplayer/includes/jplayer.views.inc create mode 100644 sites/all/modules/custom/jplayer/includes/jplayer_style_plugin.inc create mode 100644 sites/all/modules/custom/jplayer/jplayer.info create mode 100644 sites/all/modules/custom/jplayer/jplayer.install create mode 100644 sites/all/modules/custom/jplayer/jplayer.module create mode 100644 sites/all/modules/custom/jplayer/jplayer_protect/jplayer-protect.js create mode 100644 sites/all/modules/custom/jplayer/jplayer_protect/jplayer_protect.admin.inc create mode 100644 sites/all/modules/custom/jplayer/jplayer_protect/jplayer_protect.info create mode 100644 sites/all/modules/custom/jplayer/jplayer_protect/jplayer_protect.install create mode 100644 sites/all/modules/custom/jplayer/jplayer_protect/jplayer_protect.module create mode 100644 sites/all/modules/custom/jplayer/theme/THEMING.txt create mode 100755 sites/all/modules/custom/jplayer/theme/jplayer.blue.monday.jpg create mode 100755 sites/all/modules/custom/jplayer/theme/jplayer.blue.monday.video.play.hover.png create mode 100755 sites/all/modules/custom/jplayer/theme/jplayer.blue.monday.video.play.png create mode 100644 sites/all/modules/custom/jplayer/theme/jplayer.css create mode 100644 sites/all/modules/custom/jplayer/theme/jplayer.js create mode 100644 sites/all/modules/custom/jplayer/theme/jplayer.tpl.php create mode 100755 sites/all/modules/custom/jplayer/theme/pbar-ani.gif create mode 100755 sites/all/modules/custom/jquery_update/LICENSE.txt create mode 100644 sites/all/modules/custom/jquery_update/README.txt create mode 100644 sites/all/modules/custom/jquery_update/jquery_update.info create mode 100644 sites/all/modules/custom/jquery_update/jquery_update.install create mode 100644 sites/all/modules/custom/jquery_update/jquery_update.module create mode 100644 sites/all/modules/custom/jquery_update/js/jquery_update.js create mode 100644 sites/all/modules/custom/jquery_update/replace/jquery/1.10/jquery-1.10.2.min.map create mode 100644 sites/all/modules/custom/jquery_update/replace/jquery/1.10/jquery.js create mode 100644 sites/all/modules/custom/jquery_update/replace/jquery/1.10/jquery.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/jquery/1.5/jquery.js create mode 100644 sites/all/modules/custom/jquery_update/replace/jquery/1.5/jquery.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/jquery/1.7/jquery.js create mode 100644 sites/all/modules/custom/jquery_update/replace/jquery/1.7/jquery.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/jquery/1.8/jquery.js create mode 100644 sites/all/modules/custom/jquery_update/replace/jquery/1.8/jquery.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/jquery/1.9/jquery.js create mode 100644 sites/all/modules/custom/jquery_update/replace/jquery/1.9/jquery.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/jquery/1.9/jquery.min.map create mode 100644 sites/all/modules/custom/jquery_update/replace/misc/1.9/jquery.ba-bbq.js create mode 100644 sites/all/modules/custom/jquery_update/replace/misc/1.9/jquery.ba-bbq.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/misc/1.9/overlay-parent.diff.js create mode 100644 sites/all/modules/custom/jquery_update/replace/misc/1.9/overlay-parent.js create mode 100644 sites/all/modules/custom/jquery_update/replace/misc/jquery.form.js create mode 100644 sites/all/modules/custom/jquery_update/replace/misc/jquery.form.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/AUTHORS.txt create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/external/globalize.culture.de-DE.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/external/globalize.culture.ja-JP.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/external/globalize.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/external/jquery.bgiframe-2.1.2.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/external/jquery.cookie.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/external/jquery.metadata.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/external/jquery.mousewheel.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/external/jshint.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/external/qunit.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/external/qunit.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/animated-overlay.gif create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-icons_222222_256x240.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-icons_2e83ff_256x240.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-icons_454545_256x240.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-icons_888888_256x240.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-icons_cd0a0a_256x240.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery-ui.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.accordion.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.all.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.autocomplete.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.base.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.button.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.core.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.datepicker.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.dialog.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.menu.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.progressbar.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.resizable.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.selectable.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.slider.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.spinner.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.tabs.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.theme.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.tooltip.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/animated-overlay.gif create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-icons_222222_256x240.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-icons_2e83ff_256x240.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-icons_454545_256x240.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-icons_888888_256x240.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-icons_cd0a0a_256x240.png create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery-ui.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.accordion.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.autocomplete.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.button.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.core.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.datepicker.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.dialog.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.menu.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.progressbar.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.resizable.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.selectable.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.slider.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.spinner.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.tabs.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.theme.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.tooltip.min.css create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/.jshintrc create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery-ui-i18n.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-af.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ar-DZ.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ar.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-az.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-be.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-bg.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-bs.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ca.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-cs.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-cy-GB.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-da.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-de.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-el.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-en-AU.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-en-GB.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-en-NZ.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-eo.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-es.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-et.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-eu.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fa.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fi.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fo.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fr-CA.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fr-CH.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fr.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-gl.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-he.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hi.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hr.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hu.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hy.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-id.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-is.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-it.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ja.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ka.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-kk.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-km.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ko.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ky.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-lb.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-lt.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-lv.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-mk.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ml.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ms.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nb.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nl-BE.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nl.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nn.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-no.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-pl.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-pt-BR.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-pt.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-rm.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ro.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ru.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sk.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sl.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sq.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sr-SR.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sr.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sv.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ta.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-th.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-tj.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-tr.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-uk.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-vi.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-zh-CN.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-zh-HK.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-zh-TW.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery-ui.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.accordion.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.autocomplete.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.button.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.core.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.datepicker.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.dialog.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.draggable.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.droppable.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-blind.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-bounce.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-clip.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-drop.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-explode.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-fade.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-fold.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-highlight.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-pulsate.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-scale.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-shake.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-slide.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-transfer.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.menu.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.mouse.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.position.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.progressbar.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.resizable.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.selectable.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.slider.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.sortable.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.spinner.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.tabs.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.tooltip.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.widget.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery-ui-i18n.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-af.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ar-DZ.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ar.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-az.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-be.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-bg.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-bs.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ca.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-cs.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-cy-GB.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-da.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-de.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-el.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-en-AU.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-en-GB.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-en-NZ.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-eo.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-es.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-et.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-eu.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fa.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fi.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fo.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fr-CA.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fr-CH.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fr.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-gl.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-he.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hi.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hr.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hu.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hy.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-id.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-is.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-it.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ja.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ka.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-kk.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-km.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ko.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ky.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-lb.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-lt.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-lv.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-mk.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ml.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ms.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nb.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nl-BE.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nl.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nn.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-no.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-pl.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-pt-BR.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-pt.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-rm.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ro.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ru.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sk.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sl.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sq.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sr-SR.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sr.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sv.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ta.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-th.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-tj.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-tr.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-uk.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-vi.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-zh-CN.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-zh-HK.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-zh-TW.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery-ui.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.accordion.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.autocomplete.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.button.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.core.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.datepicker.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.dialog.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.draggable.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.droppable.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-blind.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-bounce.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-clip.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-drop.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-explode.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-fade.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-fold.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-highlight.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-pulsate.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-scale.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-shake.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-slide.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-transfer.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.menu.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.mouse.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.position.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.progressbar.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.resizable.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.selectable.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.slider.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.sortable.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.spinner.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.tabs.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.tooltip.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.widget.min.js create mode 100644 sites/all/modules/custom/jquery_update/replace/ui/version.txt create mode 100644 sites/all/modules/custom/libraries/CHANGELOG.txt create mode 100755 sites/all/modules/custom/libraries/LICENSE.txt create mode 100644 sites/all/modules/custom/libraries/README.txt create mode 100644 sites/all/modules/custom/libraries/libraries.api.php create mode 100644 sites/all/modules/custom/libraries/libraries.drush.inc create mode 100644 sites/all/modules/custom/libraries/libraries.info create mode 100644 sites/all/modules/custom/libraries/libraries.install create mode 100644 sites/all/modules/custom/libraries/libraries.module create mode 100644 sites/all/modules/custom/libraries/tests/libraries.test create mode 100644 sites/all/modules/custom/libraries/tests/libraries/example/README.txt create mode 100644 sites/all/modules/custom/libraries/tests/libraries/example/example_1.css create mode 100644 sites/all/modules/custom/libraries/tests/libraries/example/example_1.js create mode 100644 sites/all/modules/custom/libraries/tests/libraries/example/example_1.php create mode 100644 sites/all/modules/custom/libraries/tests/libraries/example/example_2.css create mode 100644 sites/all/modules/custom/libraries/tests/libraries/example/example_2.js create mode 100644 sites/all/modules/custom/libraries/tests/libraries/example/example_2.php create mode 100644 sites/all/modules/custom/libraries/tests/libraries/example/example_3.css create mode 100644 sites/all/modules/custom/libraries/tests/libraries/example/example_3.js create mode 100644 sites/all/modules/custom/libraries/tests/libraries/example/example_3.php create mode 100644 sites/all/modules/custom/libraries/tests/libraries/example/example_4.css create mode 100644 sites/all/modules/custom/libraries/tests/libraries/example/example_4.js create mode 100644 sites/all/modules/custom/libraries/tests/libraries/example/example_4.php create mode 100644 sites/all/modules/custom/libraries/tests/libraries/example_info_file.libraries.info create mode 100644 sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module.css create mode 100644 sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module.inc create mode 100644 sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module.info create mode 100644 sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module.js create mode 100644 sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module.module create mode 100644 sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module_post_load.inc create mode 100644 sites/all/modules/custom/libraries/tests/themes/libraries_test_theme/libraries_test_theme.css create mode 100644 sites/all/modules/custom/libraries/tests/themes/libraries_test_theme/libraries_test_theme.inc create mode 100644 sites/all/modules/custom/libraries/tests/themes/libraries_test_theme/libraries_test_theme.info create mode 100644 sites/all/modules/custom/libraries/tests/themes/libraries_test_theme/libraries_test_theme.js create mode 100644 sites/all/modules/custom/libraries/tests/themes/libraries_test_theme/template.php create mode 100644 sites/all/modules/custom/link/LICENSE.txt create mode 100644 sites/all/modules/custom/link/link-rtl.css create mode 100644 sites/all/modules/custom/link/link.css create mode 100644 sites/all/modules/custom/link/link.devel_generate.inc create mode 100644 sites/all/modules/custom/link/link.diff.inc create mode 100644 sites/all/modules/custom/link/link.info create mode 100644 sites/all/modules/custom/link/link.install create mode 100644 sites/all/modules/custom/link/link.migrate.inc create mode 100644 sites/all/modules/custom/link/link.module create mode 100644 sites/all/modules/custom/link/tests/link.attribute.test create mode 100644 sites/all/modules/custom/link/tests/link.crud.test create mode 100644 sites/all/modules/custom/link/tests/link.crud_browser.test create mode 100644 sites/all/modules/custom/link/tests/link.test create mode 100644 sites/all/modules/custom/link/tests/link.token.test create mode 100644 sites/all/modules/custom/link/tests/link.validate.test create mode 100644 sites/all/modules/custom/link/views/link.views.inc create mode 100644 sites/all/modules/custom/link/views/link_views_handler_argument_target.inc create mode 100644 sites/all/modules/custom/link/views/link_views_handler_filter_protocol.inc create mode 100755 sites/all/modules/custom/masquerade/LICENSE.txt create mode 100644 sites/all/modules/custom/masquerade/README.txt create mode 100644 sites/all/modules/custom/masquerade/masquerade.info create mode 100644 sites/all/modules/custom/masquerade/masquerade.install create mode 100644 sites/all/modules/custom/masquerade/masquerade.module create mode 100644 sites/all/modules/custom/masquerade/masquerade.test create mode 100644 sites/all/modules/custom/media/LICENSE.txt create mode 100644 sites/all/modules/custom/media/README.txt create mode 100644 sites/all/modules/custom/media/css/media.css create mode 100644 sites/all/modules/custom/media/images/icons/default/application-octet-stream.png create mode 100644 sites/all/modules/custom/media/images/icons/default/audio-mpeg.png create mode 100644 sites/all/modules/custom/media/images/icons/default/audio-x-generic.png create mode 100644 sites/all/modules/custom/media/images/icons/default/file-unknown.png create mode 100644 sites/all/modules/custom/media/images/icons/default/image-x-generic.png create mode 100644 sites/all/modules/custom/media/images/icons/default/video-x-generic.png create mode 100644 sites/all/modules/custom/media/includes/MediaBrowserPlugin.inc create mode 100644 sites/all/modules/custom/media/includes/MediaBrowserPluginInterface.inc create mode 100644 sites/all/modules/custom/media/includes/MediaBrowserUpload.inc create mode 100644 sites/all/modules/custom/media/includes/MediaBrowserView.inc create mode 100644 sites/all/modules/custom/media/includes/MediaEntityTranslationHandler.inc create mode 100644 sites/all/modules/custom/media/includes/MediaReadOnlyStreamWrapper.inc create mode 100644 sites/all/modules/custom/media/includes/media.admin.inc create mode 100644 sites/all/modules/custom/media/includes/media.browser.inc create mode 100644 sites/all/modules/custom/media/includes/media.fields.inc create mode 100644 sites/all/modules/custom/media/includes/media.pages.inc create mode 100644 sites/all/modules/custom/media/includes/media.theme.inc create mode 100644 sites/all/modules/custom/media/includes/media_views_plugin_display_media_browser.inc create mode 100644 sites/all/modules/custom/media/includes/media_views_plugin_style_media_browser.inc create mode 100644 sites/all/modules/custom/media/js/media.admin.js create mode 100644 sites/all/modules/custom/media/js/media.browser.js create mode 100644 sites/all/modules/custom/media/js/media.core.js create mode 100644 sites/all/modules/custom/media/js/media.js create mode 100644 sites/all/modules/custom/media/js/media.popups.js create mode 100644 sites/all/modules/custom/media/js/plugins/media.views.js create mode 100644 sites/all/modules/custom/media/js/util/ba-debug.min.js create mode 100644 sites/all/modules/custom/media/js/util/json2.js create mode 100644 sites/all/modules/custom/media/media-views-view-media-browser.tpl.php create mode 100644 sites/all/modules/custom/media/media.api.php create mode 100644 sites/all/modules/custom/media/media.file_default_displays.inc create mode 100644 sites/all/modules/custom/media/media.info create mode 100644 sites/all/modules/custom/media/media.install create mode 100644 sites/all/modules/custom/media/media.media.inc create mode 100644 sites/all/modules/custom/media/media.module create mode 100644 sites/all/modules/custom/media/media.views.inc create mode 100644 sites/all/modules/custom/media/modules/media_bulk_upload/includes/MediaBrowserBulkUpload.inc create mode 100644 sites/all/modules/custom/media/modules/media_bulk_upload/includes/media_bulk_upload.admin.inc create mode 100644 sites/all/modules/custom/media/modules/media_bulk_upload/includes/media_bulk_upload.pages.inc create mode 100644 sites/all/modules/custom/media/modules/media_bulk_upload/media_bulk_upload.info create mode 100644 sites/all/modules/custom/media/modules/media_bulk_upload/media_bulk_upload.install create mode 100644 sites/all/modules/custom/media/modules/media_bulk_upload/media_bulk_upload.module create mode 100644 sites/all/modules/custom/media/modules/media_bulk_upload/tests/media_bulk_upload.test create mode 100644 sites/all/modules/custom/media/modules/media_internet/includes/MediaBrowserInternet.inc create mode 100644 sites/all/modules/custom/media/modules/media_internet/includes/MediaInternetBaseHandler.inc create mode 100644 sites/all/modules/custom/media/modules/media_internet/includes/MediaInternetFileHandler.inc create mode 100644 sites/all/modules/custom/media/modules/media_internet/includes/MediaInternetNoHandlerException.inc create mode 100644 sites/all/modules/custom/media/modules/media_internet/includes/MediaInternetValidationException.inc create mode 100644 sites/all/modules/custom/media/modules/media_internet/media_internet.api.php create mode 100644 sites/all/modules/custom/media/modules/media_internet/media_internet.info create mode 100644 sites/all/modules/custom/media/modules/media_internet/media_internet.install create mode 100644 sites/all/modules/custom/media/modules/media_internet/media_internet.media.inc create mode 100644 sites/all/modules/custom/media/modules/media_internet/media_internet.module create mode 100644 sites/all/modules/custom/media/modules/media_internet/tests/includes/MediaInternetTestHandler.inc create mode 100644 sites/all/modules/custom/media/modules/media_internet/tests/includes/MediaInternetTestStreamWrapper.inc create mode 100644 sites/all/modules/custom/media/modules/media_internet/tests/media_internet.test create mode 100644 sites/all/modules/custom/media/modules/media_internet/tests/media_internet_test.info create mode 100644 sites/all/modules/custom/media/modules/media_internet/tests/media_internet_test.module create mode 100644 sites/all/modules/custom/media/modules/media_migrate_file_types/includes/media_migrate_file_types.pages.inc create mode 100644 sites/all/modules/custom/media/modules/media_migrate_file_types/media_migrate_file_types.info create mode 100644 sites/all/modules/custom/media/modules/media_migrate_file_types/media_migrate_file_types.module create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/css/media_wysiwyg.css create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/images/wysiwyg-media.gif create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/includes/media_wysiwyg.file_usage.inc create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/includes/media_wysiwyg.filter.inc create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/includes/media_wysiwyg.pages.inc create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/includes/media_wysiwyg.uuid.inc create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/js/media_wysiwyg.filter.js create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/js/media_wysiwyg.format_form.js create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/js/wysiwyg-media.js create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.api.php create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.ckeditor.inc create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.info create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.install create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.module create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.test create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.variable.inc create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/tests/media_wysiwyg.file_usage.test create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/tests/media_wysiwyg.macro.test create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/wysiwyg_plugins/media.inc create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/wysiwyg_plugins/media_ckeditor/images/icon.gif create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/wysiwyg_plugins/media_ckeditor/lang/en.js create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/wysiwyg_plugins/media_ckeditor/library.js create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg/wysiwyg_plugins/media_ckeditor/plugin.js create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.admin.inc create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.info create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.install create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.module create mode 100644 sites/all/modules/custom/media/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.test create mode 100644 sites/all/modules/custom/media/modules/mediafield/mediafield.info create mode 100644 sites/all/modules/custom/media/modules/mediafield/mediafield.install create mode 100644 sites/all/modules/custom/media/modules/mediafield/mediafield.module create mode 100644 sites/all/modules/custom/media/modules/mediafield/mediafield.views.inc create mode 100644 sites/all/modules/custom/media/templates/media-dialog-page.tpl.php create mode 100644 sites/all/modules/custom/media/tests/media.test create mode 100644 sites/all/modules/custom/media/tests/media_module_test.info create mode 100644 sites/all/modules/custom/media/tests/media_module_test.module create mode 100644 sites/all/modules/custom/media/views/media_default.view.inc create mode 100644 sites/all/modules/custom/menu_attributes/CHANGELOG.txt create mode 100644 sites/all/modules/custom/menu_attributes/LICENSE.txt create mode 100644 sites/all/modules/custom/menu_attributes/menu_attributes.api.php create mode 100644 sites/all/modules/custom/menu_attributes/menu_attributes.info create mode 100644 sites/all/modules/custom/menu_attributes/menu_attributes.install create mode 100644 sites/all/modules/custom/menu_attributes/menu_attributes.js create mode 100644 sites/all/modules/custom/menu_attributes/menu_attributes.module create mode 100644 sites/all/modules/custom/menu_attributes/menu_attributes.test create mode 100644 sites/all/modules/custom/menu_block/CHANGELOG.txt create mode 100755 sites/all/modules/custom/menu_block/LICENSE.txt create mode 100644 sites/all/modules/custom/menu_block/README.txt create mode 100644 sites/all/modules/custom/menu_block/menu-block-background-display-options.png create mode 100644 sites/all/modules/custom/menu_block/menu-block-wrapper.tpl.php create mode 100644 sites/all/modules/custom/menu_block/menu-block.admin.css create mode 100644 sites/all/modules/custom/menu_block/menu-block.js create mode 100644 sites/all/modules/custom/menu_block/menu_block.admin.inc create mode 100644 sites/all/modules/custom/menu_block/menu_block.api.php create mode 100644 sites/all/modules/custom/menu_block/menu_block.follow.inc create mode 100644 sites/all/modules/custom/menu_block/menu_block.info create mode 100644 sites/all/modules/custom/menu_block/menu_block.install create mode 100644 sites/all/modules/custom/menu_block/menu_block.module create mode 100644 sites/all/modules/custom/menu_block/menu_block.pages.inc create mode 100644 sites/all/modules/custom/menu_block/menu_block.sort.inc create mode 100644 sites/all/modules/custom/menu_block/menu_block_export.admin.inc create mode 100644 sites/all/modules/custom/menu_block/menu_block_export.info create mode 100644 sites/all/modules/custom/menu_block/menu_block_export.module create mode 100644 sites/all/modules/custom/menu_block/plugins/content_types/menu_tree/icon_contrib_booknavigation.png create mode 100644 sites/all/modules/custom/menu_block/plugins/content_types/menu_tree/icon_contrib_main_menu.png create mode 100644 sites/all/modules/custom/menu_block/plugins/content_types/menu_tree/icon_contrib_management.png create mode 100644 sites/all/modules/custom/menu_block/plugins/content_types/menu_tree/icon_contrib_menu.png create mode 100644 sites/all/modules/custom/menu_block/plugins/content_types/menu_tree/menu_tree.inc create mode 100644 sites/all/modules/custom/module_filter/CHANGELOG.txt create mode 100644 sites/all/modules/custom/module_filter/LICENSE.txt create mode 100644 sites/all/modules/custom/module_filter/README.txt create mode 100644 sites/all/modules/custom/module_filter/css/dynamic_position.css create mode 100644 sites/all/modules/custom/module_filter/css/module_filter.css create mode 100644 sites/all/modules/custom/module_filter/css/module_filter_tab-rtl.css create mode 100644 sites/all/modules/custom/module_filter/css/module_filter_tab.css create mode 100644 sites/all/modules/custom/module_filter/css/modules.css create mode 100644 sites/all/modules/custom/module_filter/css/update_status.css create mode 100644 sites/all/modules/custom/module_filter/js/dynamic_position.js create mode 100644 sites/all/modules/custom/module_filter/js/module_filter.js create mode 100644 sites/all/modules/custom/module_filter/js/module_filter_tab.js create mode 100644 sites/all/modules/custom/module_filter/js/modules.js create mode 100644 sites/all/modules/custom/module_filter/js/permissions.js create mode 100644 sites/all/modules/custom/module_filter/js/update_status.js create mode 100644 sites/all/modules/custom/module_filter/module_filter.admin.inc create mode 100644 sites/all/modules/custom/module_filter/module_filter.info create mode 100644 sites/all/modules/custom/module_filter/module_filter.install create mode 100644 sites/all/modules/custom/module_filter/module_filter.module create mode 100644 sites/all/modules/custom/module_filter/module_filter.pages.inc create mode 100644 sites/all/modules/custom/module_filter/module_filter.theme.inc create mode 100644 sites/all/modules/custom/mollom/LICENSE.txt create mode 100644 sites/all/modules/custom/mollom/README.txt create mode 100644 sites/all/modules/custom/mollom/images/powered-by-mollom-1.gif create mode 100644 sites/all/modules/custom/mollom/images/powered-by-mollom-2.gif create mode 100644 sites/all/modules/custom/mollom/images/refresh.png create mode 100644 sites/all/modules/custom/mollom/includes/CHANGELOG.md create mode 100644 sites/all/modules/custom/mollom/includes/LICENSE-GPL.txt create mode 100644 sites/all/modules/custom/mollom/includes/LICENSE-MIT.txt create mode 100644 sites/all/modules/custom/mollom/includes/README.md create mode 100644 sites/all/modules/custom/mollom/includes/TODO.md create mode 100644 sites/all/modules/custom/mollom/includes/composer.json create mode 100644 sites/all/modules/custom/mollom/includes/mollom.class.inc create mode 100644 sites/all/modules/custom/mollom/mollom-captcha-player.swf create mode 100644 sites/all/modules/custom/mollom/mollom.admin.blacklist.js create mode 100644 sites/all/modules/custom/mollom/mollom.admin.css create mode 100644 sites/all/modules/custom/mollom/mollom.admin.inc create mode 100644 sites/all/modules/custom/mollom/mollom.admin.js create mode 100644 sites/all/modules/custom/mollom/mollom.api.php create mode 100644 sites/all/modules/custom/mollom/mollom.captcha.audio.tpl.php create mode 100644 sites/all/modules/custom/mollom/mollom.captcha.image.tpl.php create mode 100644 sites/all/modules/custom/mollom/mollom.css create mode 100644 sites/all/modules/custom/mollom/mollom.drupal.inc create mode 100644 sites/all/modules/custom/mollom/mollom.flag.css create mode 100644 sites/all/modules/custom/mollom/mollom.flag.inc create mode 100644 sites/all/modules/custom/mollom/mollom.flag.js create mode 100644 sites/all/modules/custom/mollom/mollom.flag.position.css create mode 100644 sites/all/modules/custom/mollom/mollom.info create mode 100644 sites/all/modules/custom/mollom/mollom.install create mode 100644 sites/all/modules/custom/mollom/mollom.js create mode 100644 sites/all/modules/custom/mollom/mollom.module create mode 100644 sites/all/modules/custom/mollom/mollom.pages.inc create mode 100644 sites/all/modules/custom/mollom/tests/mollom.class.test create mode 100644 sites/all/modules/custom/mollom/tests/mollom.test create mode 100644 sites/all/modules/custom/mollom/tests/mollom_test.info create mode 100644 sites/all/modules/custom/mollom/tests/mollom_test.install create mode 100644 sites/all/modules/custom/mollom/tests/mollom_test.module create mode 100644 sites/all/modules/custom/mollom/tests/mollom_test_server.info create mode 100644 sites/all/modules/custom/mollom/tests/mollom_test_server.install create mode 100644 sites/all/modules/custom/mollom/tests/mollom_test_server.module create mode 100644 sites/all/modules/custom/multiple_entity_form/LICENSE.txt create mode 100644 sites/all/modules/custom/multiple_entity_form/README.txt create mode 100644 sites/all/modules/custom/multiple_entity_form/multiple_entity_form.info create mode 100644 sites/all/modules/custom/multiple_entity_form/multiple_entity_form.module create mode 100644 sites/all/modules/custom/name/LICENSE.txt create mode 100644 sites/all/modules/custom/name/README.txt create mode 100644 sites/all/modules/custom/name/i18n-ascii.txt create mode 100644 sites/all/modules/custom/name/includes/name.content.inc create mode 100644 sites/all/modules/custom/name/includes/name.features.inc create mode 100644 sites/all/modules/custom/name/includes/name.parser.inc create mode 100644 sites/all/modules/custom/name/includes/name_handler_filter_name_fulltext.inc create mode 100644 sites/all/modules/custom/name/includes/webform.components.inc create mode 100644 sites/all/modules/custom/name/name.admin.inc create mode 100644 sites/all/modules/custom/name/name.devel_generate.inc create mode 100644 sites/all/modules/custom/name/name.diff.inc create mode 100644 sites/all/modules/custom/name/name.feeds.inc create mode 100644 sites/all/modules/custom/name/name.info create mode 100644 sites/all/modules/custom/name/name.install create mode 100644 sites/all/modules/custom/name/name.migrate.inc create mode 100644 sites/all/modules/custom/name/name.module create mode 100644 sites/all/modules/custom/name/name.tokens.inc create mode 100644 sites/all/modules/custom/name/name.views.inc create mode 100644 sites/all/modules/custom/name/tests/name.test create mode 100644 sites/all/modules/custom/panels/CHANGELOG.txt create mode 100644 sites/all/modules/custom/panels/KNOWN_ISSUES.txt create mode 100644 sites/all/modules/custom/panels/LICENSE.txt create mode 100644 sites/all/modules/custom/panels/README.txt create mode 100644 sites/all/modules/custom/panels/UPGRADE.txt create mode 100644 sites/all/modules/custom/panels/css/panels-dashboard.css create mode 100644 sites/all/modules/custom/panels/css/panels.css create mode 100644 sites/all/modules/custom/panels/css/panels_admin.css create mode 100644 sites/all/modules/custom/panels/css/panels_dnd.css create mode 100644 sites/all/modules/custom/panels/css/panels_page.css create mode 100644 sites/all/modules/custom/panels/help/api.html create mode 100644 sites/all/modules/custom/panels/help/display.html create mode 100644 sites/all/modules/custom/panels/help/pane.html create mode 100644 sites/all/modules/custom/panels/help/panels.help.ini create mode 100644 sites/all/modules/custom/panels/help/plugins-layout.html create mode 100644 sites/all/modules/custom/panels/help/plugins-style.html create mode 100644 sites/all/modules/custom/panels/i18n_panels/README.txt create mode 100644 sites/all/modules/custom/panels/i18n_panels/i18n_panels.i18n.inc create mode 100644 sites/all/modules/custom/panels/i18n_panels/i18n_panels.info create mode 100644 sites/all/modules/custom/panels/i18n_panels/i18n_panels.install create mode 100644 sites/all/modules/custom/panels/i18n_panels/i18n_panels.module create mode 100644 sites/all/modules/custom/panels/images/arrow-active.png create mode 100644 sites/all/modules/custom/panels/images/arrow-down-light.png create mode 100644 sites/all/modules/custom/panels/images/bg-content-modal.png create mode 100644 sites/all/modules/custom/panels/images/bg-shade-dark.png create mode 100644 sites/all/modules/custom/panels/images/bg-shade-light.png create mode 100644 sites/all/modules/custom/panels/images/bg-shade-medium.png create mode 100644 sites/all/modules/custom/panels/images/bg-shade-white-lrg.png create mode 100644 sites/all/modules/custom/panels/images/blank.gif create mode 100644 sites/all/modules/custom/panels/images/close.gif create mode 100644 sites/all/modules/custom/panels/images/delete.png create mode 100644 sites/all/modules/custom/panels/images/go-down.png create mode 100644 sites/all/modules/custom/panels/images/go-right.png create mode 100644 sites/all/modules/custom/panels/images/go-up.png create mode 100644 sites/all/modules/custom/panels/images/icon-addcontent.png create mode 100644 sites/all/modules/custom/panels/images/icon-cache.png create mode 100644 sites/all/modules/custom/panels/images/icon-configure.png create mode 100644 sites/all/modules/custom/panels/images/icon-delete.png create mode 100644 sites/all/modules/custom/panels/images/icon-draggable.png create mode 100644 sites/all/modules/custom/panels/images/icon-hidepane.png create mode 100644 sites/all/modules/custom/panels/images/icon-showpane.png create mode 100644 sites/all/modules/custom/panels/images/no-icon.png create mode 100644 sites/all/modules/custom/panels/images/portlet-collapsed.png create mode 100644 sites/all/modules/custom/panels/images/portlet-expanded.png create mode 100644 sites/all/modules/custom/panels/images/screenshot-1.jpg create mode 100644 sites/all/modules/custom/panels/images/screenshot-2.jpg create mode 100644 sites/all/modules/custom/panels/images/screenshot-3.jpg create mode 100644 sites/all/modules/custom/panels/images/screenshot-4.jpg create mode 100644 sites/all/modules/custom/panels/images/sky.png create mode 100644 sites/all/modules/custom/panels/images/sprite.png create mode 100644 sites/all/modules/custom/panels/images/throbber.gif create mode 100644 sites/all/modules/custom/panels/images/user-trash.png create mode 100644 sites/all/modules/custom/panels/includes/add-content.inc create mode 100644 sites/all/modules/custom/panels/includes/callbacks.inc create mode 100644 sites/all/modules/custom/panels/includes/common.inc create mode 100644 sites/all/modules/custom/panels/includes/display-edit.inc create mode 100644 sites/all/modules/custom/panels/includes/display-layout.inc create mode 100644 sites/all/modules/custom/panels/includes/legacy.inc create mode 100644 sites/all/modules/custom/panels/includes/page-wizard.inc create mode 100644 sites/all/modules/custom/panels/includes/panels.pipelines.inc create mode 100644 sites/all/modules/custom/panels/includes/plugins.inc create mode 100644 sites/all/modules/custom/panels/js/display_editor.js create mode 100644 sites/all/modules/custom/panels/js/layout.js create mode 100644 sites/all/modules/custom/panels/js/panels-base.js create mode 100644 sites/all/modules/custom/panels/panels.api.php create mode 100644 sites/all/modules/custom/panels/panels.info create mode 100644 sites/all/modules/custom/panels/panels.install create mode 100644 sites/all/modules/custom/panels/panels.module create mode 100644 sites/all/modules/custom/panels/panels_ipe/css/panels_ipe-rtl.css create mode 100644 sites/all/modules/custom/panels/panels_ipe/css/panels_ipe.css create mode 100644 sites/all/modules/custom/panels/panels_ipe/images/dragger.png create mode 100644 sites/all/modules/custom/panels/panels_ipe/images/icon-add.png create mode 100644 sites/all/modules/custom/panels/panels_ipe/images/icon-change-layout.png create mode 100644 sites/all/modules/custom/panels/panels_ipe/images/icon-close.png create mode 100644 sites/all/modules/custom/panels/panels_ipe/images/icon-configure.png create mode 100644 sites/all/modules/custom/panels/panels_ipe/images/icon-delete.png create mode 100644 sites/all/modules/custom/panels/panels_ipe/images/icon-draggable.png create mode 100644 sites/all/modules/custom/panels/panels_ipe/images/icon-save.png create mode 100644 sites/all/modules/custom/panels/panels_ipe/images/icon-settings.png create mode 100644 sites/all/modules/custom/panels/panels_ipe/images/icon-style.png create mode 100644 sites/all/modules/custom/panels/panels_ipe/images/loading-small.gif create mode 100644 sites/all/modules/custom/panels/panels_ipe/includes/panels_ipe.pipelines.inc create mode 100644 sites/all/modules/custom/panels/panels_ipe/js/panels_ipe.js create mode 100644 sites/all/modules/custom/panels/panels_ipe/panels_ipe.info create mode 100644 sites/all/modules/custom/panels/panels_ipe/panels_ipe.module create mode 100644 sites/all/modules/custom/panels/panels_ipe/plugins/display_renderers/ipe.inc create mode 100644 sites/all/modules/custom/panels/panels_ipe/plugins/display_renderers/panels_renderer_ipe.class.php create mode 100644 sites/all/modules/custom/panels/panels_mini/panels_mini.css create mode 100644 sites/all/modules/custom/panels/panels_mini/panels_mini.info create mode 100644 sites/all/modules/custom/panels/panels_mini/panels_mini.install create mode 100644 sites/all/modules/custom/panels/panels_mini/panels_mini.module create mode 100644 sites/all/modules/custom/panels/panels_mini/plugins/content_types/icon_panels_mini.png create mode 100644 sites/all/modules/custom/panels/panels_mini/plugins/content_types/panels_mini.inc create mode 100644 sites/all/modules/custom/panels/panels_mini/plugins/export_ui/panels_mini.inc create mode 100644 sites/all/modules/custom/panels/panels_mini/plugins/export_ui/panels_mini_ui.class.php create mode 100644 sites/all/modules/custom/panels/panels_node/panels_node.info create mode 100644 sites/all/modules/custom/panels/panels_node/panels_node.install create mode 100644 sites/all/modules/custom/panels/panels_node/panels_node.module create mode 100644 sites/all/modules/custom/panels/plugins/cache/simple.inc create mode 100644 sites/all/modules/custom/panels/plugins/display_renderers/editor.inc create mode 100644 sites/all/modules/custom/panels/plugins/display_renderers/panels_renderer_editor.class.php create mode 100644 sites/all/modules/custom/panels/plugins/display_renderers/panels_renderer_simple.class.php create mode 100644 sites/all/modules/custom/panels/plugins/display_renderers/panels_renderer_standard.class.php create mode 100644 sites/all/modules/custom/panels/plugins/display_renderers/simple.inc create mode 100644 sites/all/modules/custom/panels/plugins/display_renderers/standard.inc create mode 100644 sites/all/modules/custom/panels/plugins/export_ui/panels_layouts.inc create mode 100644 sites/all/modules/custom/panels/plugins/export_ui/panels_layouts_ui.class.php create mode 100644 sites/all/modules/custom/panels/plugins/layouts/flexible/flexible-admin.css create mode 100644 sites/all/modules/custom/panels/plugins/layouts/flexible/flexible-admin.js create mode 100644 sites/all/modules/custom/panels/plugins/layouts/flexible/flexible.css create mode 100644 sites/all/modules/custom/panels/plugins/layouts/flexible/flexible.inc create mode 100644 sites/all/modules/custom/panels/plugins/layouts/flexible/flexible.png create mode 100644 sites/all/modules/custom/panels/plugins/layouts/flexible/grippie-vertical.png create mode 100644 sites/all/modules/custom/panels/plugins/layouts/onecol/onecol.css create mode 100644 sites/all/modules/custom/panels/plugins/layouts/onecol/onecol.inc create mode 100644 sites/all/modules/custom/panels/plugins/layouts/onecol/onecol.png create mode 100644 sites/all/modules/custom/panels/plugins/layouts/onecol/panels-onecol.tpl.php create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_25_50_25/panels-threecol-25-50-25.tpl.php create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_25_50_25/threecol_25_50_25.css create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_25_50_25/threecol_25_50_25.inc create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_25_50_25/threecol_25_50_25.png create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_25_50_25_stacked/panels-threecol-25-50-25-stacked.tpl.php create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_25_50_25_stacked/threecol_25_50_25_stacked.css create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_25_50_25_stacked/threecol_25_50_25_stacked.inc create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_25_50_25_stacked/threecol_25_50_25_stacked.png create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_33_34_33/panels-threecol-33-34-33.tpl.php create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_33_34_33/threecol_33_34_33.css create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_33_34_33/threecol_33_34_33.inc create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_33_34_33/threecol_33_34_33.png create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_33_34_33_stacked/panels-threecol-33-34-33-stacked.tpl.php create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_33_34_33_stacked/threecol_33_34_33_stacked.css create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_33_34_33_stacked/threecol_33_34_33_stacked.inc create mode 100644 sites/all/modules/custom/panels/plugins/layouts/threecol_33_34_33_stacked/threecol_33_34_33_stacked.png create mode 100644 sites/all/modules/custom/panels/plugins/layouts/twocol/panels-twocol.tpl.php create mode 100644 sites/all/modules/custom/panels/plugins/layouts/twocol/twocol.css create mode 100644 sites/all/modules/custom/panels/plugins/layouts/twocol/twocol.inc create mode 100644 sites/all/modules/custom/panels/plugins/layouts/twocol/twocol.png create mode 100644 sites/all/modules/custom/panels/plugins/layouts/twocol_bricks/panels-twocol-bricks.tpl.php create mode 100644 sites/all/modules/custom/panels/plugins/layouts/twocol_bricks/twocol_bricks.css create mode 100644 sites/all/modules/custom/panels/plugins/layouts/twocol_bricks/twocol_bricks.inc create mode 100644 sites/all/modules/custom/panels/plugins/layouts/twocol_bricks/twocol_bricks.png create mode 100644 sites/all/modules/custom/panels/plugins/layouts/twocol_stacked/panels-twocol-stacked.tpl.php create mode 100644 sites/all/modules/custom/panels/plugins/layouts/twocol_stacked/twocol_stacked.css create mode 100644 sites/all/modules/custom/panels/plugins/layouts/twocol_stacked/twocol_stacked.inc create mode 100644 sites/all/modules/custom/panels/plugins/layouts/twocol_stacked/twocol_stacked.png create mode 100644 sites/all/modules/custom/panels/plugins/page_wizards/landing_page.inc create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/pane/pane_plain_box/icon.png create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/pane/pane_plain_box/pane-plain-box.css create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/pane/pane_plain_box/pane-plain-box.tpl.php create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/pane/pane_plain_box/pane_plain_box.inc create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/pane/pane_rounded_shadow/box-color.png create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/pane/pane_rounded_shadow/box-shadow.png create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/pane/pane_rounded_shadow/icon.png create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/pane/pane_rounded_shadow/pane-rounded-shadow.css create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/pane/pane_rounded_shadow/pane-rounded-shadow.tpl.php create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/pane/pane_rounded_shadow/pane_rounded_shadow.inc create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/region/region_plain_box/icon.png create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/region/region_plain_box/region-plain-box.css create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/region/region_plain_box/region-plain-box.tpl.php create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/region/region_plain_box/region_plain_box.inc create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/region/region_rounded_shadow/box-color.png create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/region/region_rounded_shadow/box-shadow.png create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/region/region_rounded_shadow/icon.png create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/region/region_rounded_shadow/region-rounded-shadow.css create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/region/region_rounded_shadow/region-rounded-shadow.tpl.php create mode 100644 sites/all/modules/custom/panels/plugins/style_bases/region/region_rounded_shadow/region_rounded_shadow.inc create mode 100644 sites/all/modules/custom/panels/plugins/styles/block.inc create mode 100644 sites/all/modules/custom/panels/plugins/styles/corners/corner-bits.png create mode 100644 sites/all/modules/custom/panels/plugins/styles/corners/panels-rounded-corners-box.tpl.php create mode 100644 sites/all/modules/custom/panels/plugins/styles/corners/rounded_corners.inc create mode 100644 sites/all/modules/custom/panels/plugins/styles/corners/shadow-b.png create mode 100644 sites/all/modules/custom/panels/plugins/styles/corners/shadow-l.png create mode 100644 sites/all/modules/custom/panels/plugins/styles/corners/shadow-r.png create mode 100644 sites/all/modules/custom/panels/plugins/styles/corners/shadow-t.png create mode 100644 sites/all/modules/custom/panels/plugins/styles/default.inc create mode 100644 sites/all/modules/custom/panels/plugins/styles/list.inc create mode 100644 sites/all/modules/custom/panels/plugins/styles/naked.inc create mode 100644 sites/all/modules/custom/panels/plugins/styles/stylizer.inc create mode 100644 sites/all/modules/custom/panels/plugins/task_handlers/panel_context.inc create mode 100644 sites/all/modules/custom/panels/plugins/views/panels.views.inc create mode 100644 sites/all/modules/custom/panels/plugins/views/panels_views_plugin_row_fields.inc create mode 100644 sites/all/modules/custom/panels/templates/panels-add-content-link.tpl.php create mode 100644 sites/all/modules/custom/panels/templates/panels-add-content-modal.tpl.php create mode 100644 sites/all/modules/custom/panels/templates/panels-dashboard-block.tpl.php create mode 100644 sites/all/modules/custom/panels/templates/panels-dashboard-link.tpl.php create mode 100644 sites/all/modules/custom/panels/templates/panels-dashboard.tpl.php create mode 100644 sites/all/modules/custom/panels/templates/panels-pane.tpl.php create mode 100644 sites/all/modules/custom/pathauto/API.txt create mode 100644 sites/all/modules/custom/pathauto/INSTALL.txt create mode 100644 sites/all/modules/custom/pathauto/LICENSE.txt create mode 100644 sites/all/modules/custom/pathauto/README.txt create mode 100644 sites/all/modules/custom/pathauto/pathauto.admin.inc create mode 100644 sites/all/modules/custom/pathauto/pathauto.api.php create mode 100644 sites/all/modules/custom/pathauto/pathauto.inc create mode 100644 sites/all/modules/custom/pathauto/pathauto.info create mode 100644 sites/all/modules/custom/pathauto/pathauto.install create mode 100644 sites/all/modules/custom/pathauto/pathauto.js create mode 100644 sites/all/modules/custom/pathauto/pathauto.module create mode 100644 sites/all/modules/custom/pathauto/pathauto.pathauto.inc create mode 100644 sites/all/modules/custom/pathauto/pathauto.test create mode 100644 sites/all/modules/custom/pathauto/pathauto.tokens.inc create mode 100644 sites/all/modules/custom/quicktabs/LICENSE.txt create mode 100644 sites/all/modules/custom/quicktabs/README.txt create mode 100644 sites/all/modules/custom/quicktabs/add-tab.gif create mode 100644 sites/all/modules/custom/quicktabs/css/quicktabs-admin.css create mode 100644 sites/all/modules/custom/quicktabs/css/quicktabs.css create mode 100644 sites/all/modules/custom/quicktabs/delete-tab.gif create mode 100644 sites/all/modules/custom/quicktabs/includes/quicktabs_style_plugin.inc create mode 100644 sites/all/modules/custom/quicktabs/js/qt_accordion.js create mode 100644 sites/all/modules/custom/quicktabs/js/qt_ui_tabs.js create mode 100644 sites/all/modules/custom/quicktabs/js/quicktabs.js create mode 100644 sites/all/modules/custom/quicktabs/js/quicktabs_bbq.js create mode 100644 sites/all/modules/custom/quicktabs/js/quicktabs_form.js create mode 100644 sites/all/modules/custom/quicktabs/plugins/QuickAccordion.inc create mode 100644 sites/all/modules/custom/quicktabs/plugins/QuickBlockContent.inc create mode 100644 sites/all/modules/custom/quicktabs/plugins/QuickCallbackContent.inc create mode 100644 sites/all/modules/custom/quicktabs/plugins/QuickNodeContent.inc create mode 100644 sites/all/modules/custom/quicktabs/plugins/QuickQtabsContent.inc create mode 100644 sites/all/modules/custom/quicktabs/plugins/QuickQuicktabs.inc create mode 100644 sites/all/modules/custom/quicktabs/plugins/QuickUiTabs.inc create mode 100644 sites/all/modules/custom/quicktabs/plugins/QuickViewContent.inc create mode 100644 sites/all/modules/custom/quicktabs/quicktabs.admin.inc create mode 100644 sites/all/modules/custom/quicktabs/quicktabs.api.php create mode 100644 sites/all/modules/custom/quicktabs/quicktabs.classes.inc create mode 100644 sites/all/modules/custom/quicktabs/quicktabs.info create mode 100644 sites/all/modules/custom/quicktabs/quicktabs.install create mode 100644 sites/all/modules/custom/quicktabs/quicktabs.module create mode 100644 sites/all/modules/custom/quicktabs/quicktabs.views.inc create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/css/quicktabs-tabstyles-admin.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/quicktabs_tabstyles.info create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/quicktabs_tabstyles.module create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/arrows/arrows-rtl.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/arrows/arrows.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/arrows/images/arrows.gif create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/basic/basic-rtl.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/basic/basic.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/bullets/bullets-rtl.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/bullets/bullets.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/bullets/images/bullets.gif create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/bullets/images/bullets.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/excel/excel-rtl.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/excel/excel.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/excel/images/tab-bar.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/excel/images/tab-left-rtl.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/excel/images/tab-left-sep-rtl.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/excel/images/tab-left-sep.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/excel/images/tab-left.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/excel/images/tab-right-rtl.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/excel/images/tab-right-sep-rtl.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/excel/images/tab-right-sep.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/excel/images/tab-right.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/garland/garland-rtl.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/garland/garland.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/garland/images/bg.gif create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/garland/images/tab-left-sidebar.gif create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/garland/images/tab-left.gif create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/garland/images/tab-right-sidebar.gif create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/garland/images/tab-right.gif create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/mac/images/mac.gif create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/mac/images/mac.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/mac/mac-rtl.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/mac/mac.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/navlist/navlist.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/phylactere/images/phy.gif create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/phylactere/images/phy.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/phylactere/images/shade.gif create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/phylactere/images/shade.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/phylactere/phylactere-rtl.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/phylactere/phylactere.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/sky/images/bg-shade-dark.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/sky/images/bg-shade-light.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/sky/images/bg-shade-medium.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/sky/sky-rtl.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/sky/sky.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/zen/images/tab-bar.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/zen/images/tab-left-ie6.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/zen/images/tab-right-ie6.png create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/zen/zen-rtl.css create mode 100644 sites/all/modules/custom/quicktabs/quicktabs_tabstyles/tabstyles/zen/zen.css create mode 100644 sites/all/modules/custom/quicktabs/tests/quicktabs.test create mode 100644 sites/all/modules/custom/rb/LICENSE.txt create mode 100644 sites/all/modules/custom/rb/README.txt create mode 100644 sites/all/modules/custom/rb/example features/comment_notification/notify_node_authors_about_new_comments.features.field.inc create mode 100644 sites/all/modules/custom/rb/example features/comment_notification/notify_node_authors_about_new_comments.info create mode 100644 sites/all/modules/custom/rb/example features/comment_notification/notify_node_authors_about_new_comments.module create mode 100644 sites/all/modules/custom/rb/example features/comment_notification/notify_node_authors_about_new_comments.rules_defaults.inc create mode 100644 sites/all/modules/custom/rb/example features/comment_reply_notification/notify_on_comment_replies.features.field.inc create mode 100644 sites/all/modules/custom/rb/example features/comment_reply_notification/notify_on_comment_replies.info create mode 100644 sites/all/modules/custom/rb/example features/comment_reply_notification/notify_on_comment_replies.module create mode 100644 sites/all/modules/custom/rb/example features/comment_reply_notification/notify_on_comment_replies.rules_defaults.inc create mode 100644 sites/all/modules/custom/rb/example features/login_redirect/example_rules_login_redirect.info create mode 100644 sites/all/modules/custom/rb/example features/login_redirect/example_rules_login_redirect.module create mode 100644 sites/all/modules/custom/rb/example features/login_redirect/example_rules_login_redirect.rules_defaults.inc create mode 100644 sites/all/modules/custom/rb/example features/promotion_create/example_rules_create_promotion.info create mode 100644 sites/all/modules/custom/rb/example features/promotion_create/example_rules_create_promotion.module create mode 100644 sites/all/modules/custom/rb/example features/promotion_create/example_rules_create_promotion.rules_defaults.inc create mode 100644 sites/all/modules/custom/rb/example features/promotion_sync/example_rule_promotion_syncronization.features.field.inc create mode 100644 sites/all/modules/custom/rb/example features/promotion_sync/example_rule_promotion_syncronization.features.inc create mode 100644 sites/all/modules/custom/rb/example features/promotion_sync/example_rule_promotion_syncronization.info create mode 100644 sites/all/modules/custom/rb/example features/promotion_sync/example_rule_promotion_syncronization.module create mode 100644 sites/all/modules/custom/rb/example features/promotion_sync/example_rule_promotion_syncronization.rules_defaults.inc create mode 100644 sites/all/modules/custom/rb/example features/promotion_sync/example_rule_promotion_syncronization.strongarm.inc create mode 100644 sites/all/modules/custom/rb/plugins/access/rb_misc_conditions.inc create mode 100644 sites/all/modules/custom/rb/rb_batch/README.txt create mode 100644 sites/all/modules/custom/rb/rb_batch/rb_batch.info create mode 100644 sites/all/modules/custom/rb/rb_batch/rb_batch.module create mode 100644 sites/all/modules/custom/rb/rb_batch/rb_batch.rules.inc create mode 100644 sites/all/modules/custom/rb/rb_block.info create mode 100644 sites/all/modules/custom/rb/rb_block.module create mode 100644 sites/all/modules/custom/rb/rb_block.rules.inc create mode 100644 sites/all/modules/custom/rb/rb_misc.api.php create mode 100644 sites/all/modules/custom/rb/rb_misc.info create mode 100644 sites/all/modules/custom/rb/rb_misc.module create mode 100644 sites/all/modules/custom/rb/rb_misc.rules.inc create mode 100644 sites/all/modules/custom/rb/rb_theme.info create mode 100644 sites/all/modules/custom/rb/rb_theme.module create mode 100644 sites/all/modules/custom/rb/rb_theme.rules.inc create mode 100644 sites/all/modules/custom/rb/rb_thinktwice.info create mode 100644 sites/all/modules/custom/rb/rb_thinktwice.module create mode 100644 sites/all/modules/custom/rb/rb_thinktwice.rules.inc create mode 100644 sites/all/modules/custom/rb/rb_views.info create mode 100644 sites/all/modules/custom/rb/rb_views.module create mode 100644 sites/all/modules/custom/rb/rb_views.rules.inc create mode 100644 sites/all/modules/custom/rb/views/rb_views.views.inc create mode 100644 sites/all/modules/custom/rb/views/rb_views_plugin_argument_validate_rules_component.inc create mode 100644 sites/all/modules/custom/redirect/LICENSE.txt create mode 100644 sites/all/modules/custom/redirect/README.txt create mode 100644 sites/all/modules/custom/redirect/redirect.admin.inc create mode 100644 sites/all/modules/custom/redirect/redirect.admin.js create mode 100644 sites/all/modules/custom/redirect/redirect.api.php create mode 100644 sites/all/modules/custom/redirect/redirect.drush.inc create mode 100644 sites/all/modules/custom/redirect/redirect.generate.inc create mode 100644 sites/all/modules/custom/redirect/redirect.info create mode 100644 sites/all/modules/custom/redirect/redirect.install create mode 100644 sites/all/modules/custom/redirect/redirect.js create mode 100644 sites/all/modules/custom/redirect/redirect.module create mode 100644 sites/all/modules/custom/redirect/redirect.test create mode 100644 sites/all/modules/custom/redirect/views/redirect.views.inc create mode 100644 sites/all/modules/custom/redirect/views/redirect.views_default.inc create mode 100644 sites/all/modules/custom/redirect/views/redirect_handler_field_redirect_link_delete.inc create mode 100644 sites/all/modules/custom/redirect/views/redirect_handler_field_redirect_link_edit.inc create mode 100644 sites/all/modules/custom/redirect/views/redirect_handler_field_redirect_operations.inc create mode 100644 sites/all/modules/custom/redirect/views/redirect_handler_field_redirect_redirect.inc create mode 100644 sites/all/modules/custom/redirect/views/redirect_handler_field_redirect_source.inc create mode 100644 sites/all/modules/custom/redirect/views/redirect_handler_filter_redirect_type.inc create mode 100644 sites/all/modules/custom/redirect/views/redirects.view create mode 100755 sites/all/modules/custom/responsive_menus/LICENSE.txt create mode 100644 sites/all/modules/custom/responsive_menus/README.txt create mode 100644 sites/all/modules/custom/responsive_menus/includes/context/responsive_menus_context.inc create mode 100644 sites/all/modules/custom/responsive_menus/plugins/context/responsive_menus_context_reaction_general.inc create mode 100644 sites/all/modules/custom/responsive_menus/responsive_menus.api.php create mode 100644 sites/all/modules/custom/responsive_menus/responsive_menus.info create mode 100644 sites/all/modules/custom/responsive_menus/responsive_menus.install create mode 100644 sites/all/modules/custom/responsive_menus/responsive_menus.module create mode 100644 sites/all/modules/custom/responsive_menus/styles/ResponsiveMultiLevelMenu/js/responsive_menus_codrops_responsive_multi.js create mode 100644 sites/all/modules/custom/responsive_menus/styles/google_nexus/css/responsive_menus_google_nexus.css create mode 100644 sites/all/modules/custom/responsive_menus/styles/google_nexus/js/responsive_menus_google_nexus.js create mode 100644 sites/all/modules/custom/responsive_menus/styles/meanMenu/README.md create mode 100644 sites/all/modules/custom/responsive_menus/styles/meanMenu/gpl.txt create mode 100644 sites/all/modules/custom/responsive_menus/styles/meanMenu/jquery.meanmenu.js create mode 100644 sites/all/modules/custom/responsive_menus/styles/meanMenu/jquery.meanmenu.min.js create mode 100644 sites/all/modules/custom/responsive_menus/styles/meanMenu/meanmenu.css create mode 100644 sites/all/modules/custom/responsive_menus/styles/meanMenu/meanmenu.min.css create mode 100644 sites/all/modules/custom/responsive_menus/styles/meanMenu/responsive_menus_mean_menu.js create mode 100644 sites/all/modules/custom/responsive_menus/styles/responsive_menus_simple/css/responsive_menus_simple.css create mode 100644 sites/all/modules/custom/responsive_menus/styles/responsive_menus_simple/js/responsive_menus_simple.js create mode 100644 sites/all/modules/custom/responsive_menus/styles/sidr/js/responsive_menus_sidr.js create mode 100644 sites/all/modules/custom/responsive_tables/LICENSE.txt create mode 100644 sites/all/modules/custom/responsive_tables/css/bartik.css create mode 100644 sites/all/modules/custom/responsive_tables/css/seven.css create mode 100644 sites/all/modules/custom/responsive_tables/css/stark.css create mode 100644 sites/all/modules/custom/responsive_tables/js/tableresponsive.js create mode 100644 sites/all/modules/custom/responsive_tables/responsive_tables.info create mode 100644 sites/all/modules/custom/responsive_tables/responsive_tables.module create mode 100644 sites/all/modules/custom/responsive_tables/views_plugin_style_table_responsive.inc create mode 100644 sites/all/modules/custom/rules/DEVELOPER.txt create mode 100644 sites/all/modules/custom/rules/LICENSE.txt create mode 100644 sites/all/modules/custom/rules/README.txt create mode 100644 sites/all/modules/custom/rules/includes/faces.inc create mode 100644 sites/all/modules/custom/rules/includes/rules.core.inc create mode 100755 sites/all/modules/custom/rules/includes/rules.event.inc create mode 100644 sites/all/modules/custom/rules/includes/rules.plugins.inc create mode 100644 sites/all/modules/custom/rules/includes/rules.processor.inc create mode 100644 sites/all/modules/custom/rules/includes/rules.state.inc create mode 100644 sites/all/modules/custom/rules/includes/rules.upgrade.inc create mode 100644 sites/all/modules/custom/rules/modules/comment.rules.inc create mode 100644 sites/all/modules/custom/rules/modules/data.eval.inc create mode 100644 sites/all/modules/custom/rules/modules/data.rules.inc create mode 100644 sites/all/modules/custom/rules/modules/entity.eval.inc create mode 100644 sites/all/modules/custom/rules/modules/entity.rules.inc create mode 100644 sites/all/modules/custom/rules/modules/events.inc create mode 100644 sites/all/modules/custom/rules/modules/node.eval.inc create mode 100644 sites/all/modules/custom/rules/modules/node.rules.inc create mode 100644 sites/all/modules/custom/rules/modules/path.eval.inc create mode 100644 sites/all/modules/custom/rules/modules/path.rules.inc create mode 100644 sites/all/modules/custom/rules/modules/php.eval.inc create mode 100644 sites/all/modules/custom/rules/modules/php.rules.inc create mode 100644 sites/all/modules/custom/rules/modules/rules_core.eval.inc create mode 100644 sites/all/modules/custom/rules/modules/rules_core.rules.inc create mode 100644 sites/all/modules/custom/rules/modules/system.eval.inc create mode 100644 sites/all/modules/custom/rules/modules/system.rules.inc create mode 100644 sites/all/modules/custom/rules/modules/taxonomy.rules.inc create mode 100644 sites/all/modules/custom/rules/modules/user.eval.inc create mode 100644 sites/all/modules/custom/rules/modules/user.rules.inc create mode 100644 sites/all/modules/custom/rules/rules.api.php create mode 100644 sites/all/modules/custom/rules/rules.drush.inc create mode 100644 sites/all/modules/custom/rules/rules.features.inc create mode 100644 sites/all/modules/custom/rules/rules.info create mode 100644 sites/all/modules/custom/rules/rules.install create mode 100644 sites/all/modules/custom/rules/rules.module create mode 100644 sites/all/modules/custom/rules/rules.rules.inc create mode 100644 sites/all/modules/custom/rules/rules_admin/rules_admin.inc create mode 100644 sites/all/modules/custom/rules/rules_admin/rules_admin.info create mode 100644 sites/all/modules/custom/rules/rules_admin/rules_admin.module create mode 100644 sites/all/modules/custom/rules/rules_i18n/rules_i18n.i18n.inc create mode 100644 sites/all/modules/custom/rules/rules_i18n/rules_i18n.info create mode 100644 sites/all/modules/custom/rules/rules_i18n/rules_i18n.module create mode 100644 sites/all/modules/custom/rules/rules_i18n/rules_i18n.rules.inc create mode 100644 sites/all/modules/custom/rules/rules_i18n/rules_i18n.test create mode 100644 sites/all/modules/custom/rules/rules_scheduler/includes/rules_scheduler.handler.inc create mode 100644 sites/all/modules/custom/rules/rules_scheduler/includes/rules_scheduler.views.inc create mode 100644 sites/all/modules/custom/rules/rules_scheduler/includes/rules_scheduler.views_default.inc create mode 100644 sites/all/modules/custom/rules/rules_scheduler/includes/rules_scheduler_views_filter.inc create mode 100644 sites/all/modules/custom/rules/rules_scheduler/rules_scheduler.admin.inc create mode 100644 sites/all/modules/custom/rules/rules_scheduler/rules_scheduler.drush.inc create mode 100644 sites/all/modules/custom/rules/rules_scheduler/rules_scheduler.info create mode 100644 sites/all/modules/custom/rules/rules_scheduler/rules_scheduler.install create mode 100644 sites/all/modules/custom/rules/rules_scheduler/rules_scheduler.module create mode 100644 sites/all/modules/custom/rules/rules_scheduler/rules_scheduler.rules.inc create mode 100644 sites/all/modules/custom/rules/rules_scheduler/rules_scheduler.test create mode 100644 sites/all/modules/custom/rules/rules_scheduler/tests/rules_scheduler_test.inc create mode 100644 sites/all/modules/custom/rules/rules_scheduler/tests/rules_scheduler_test.info create mode 100644 sites/all/modules/custom/rules/rules_scheduler/tests/rules_scheduler_test.module create mode 100644 sites/all/modules/custom/rules/tests/rules.test create mode 100644 sites/all/modules/custom/rules/tests/rules_test.info create mode 100644 sites/all/modules/custom/rules/tests/rules_test.module create mode 100644 sites/all/modules/custom/rules/tests/rules_test.rules.inc create mode 100644 sites/all/modules/custom/rules/tests/rules_test.rules_defaults.inc create mode 100644 sites/all/modules/custom/rules/tests/rules_test.test.inc create mode 100644 sites/all/modules/custom/rules/ui/rules.autocomplete.js create mode 100644 sites/all/modules/custom/rules/ui/rules.debug.js create mode 100644 sites/all/modules/custom/rules/ui/rules.ui.css create mode 100644 sites/all/modules/custom/rules/ui/rules.ui.seven.css create mode 100644 sites/all/modules/custom/rules/ui/ui.controller.inc create mode 100644 sites/all/modules/custom/rules/ui/ui.core.inc create mode 100644 sites/all/modules/custom/rules/ui/ui.data.inc create mode 100644 sites/all/modules/custom/rules/ui/ui.forms.inc create mode 100644 sites/all/modules/custom/rules/ui/ui.plugins.inc create mode 100644 sites/all/modules/custom/rules/ui/ui.theme.inc create mode 100644 sites/all/modules/custom/services/LICENSE.txt create mode 100644 sites/all/modules/custom/services/README.txt create mode 100644 sites/all/modules/custom/services/auth/services_oauth/services_oauth.css create mode 100644 sites/all/modules/custom/services/auth/services_oauth/services_oauth.inc create mode 100644 sites/all/modules/custom/services/auth/services_oauth/services_oauth.info create mode 100644 sites/all/modules/custom/services/auth/services_oauth/services_oauth.install create mode 100644 sites/all/modules/custom/services/auth/services_oauth/services_oauth.module create mode 100644 sites/all/modules/custom/services/css/services.admin.css create mode 100644 sites/all/modules/custom/services/docs/services.alter.api.php create mode 100644 sites/all/modules/custom/services/docs/services.authentication.api.php create mode 100644 sites/all/modules/custom/services/docs/services.servers.api.php create mode 100644 sites/all/modules/custom/services/docs/services.services.api.php create mode 100644 sites/all/modules/custom/services/docs/services.versions.api.php create mode 100644 sites/all/modules/custom/services/includes/services.resource_build.inc create mode 100644 sites/all/modules/custom/services/includes/services.resource_update.inc create mode 100644 sites/all/modules/custom/services/includes/services.runtime.inc create mode 100644 sites/all/modules/custom/services/js/services.admin.js create mode 100644 sites/all/modules/custom/services/plugins/export_ui/services_ctools_export_ui.class.php create mode 100644 sites/all/modules/custom/services/plugins/export_ui/services_ctools_export_ui.inc create mode 100644 sites/all/modules/custom/services/resources/comment_resource.inc create mode 100644 sites/all/modules/custom/services/resources/file_resource.inc create mode 100644 sites/all/modules/custom/services/resources/node_resource.inc create mode 100644 sites/all/modules/custom/services/resources/system_resource.inc create mode 100644 sites/all/modules/custom/services/resources/taxonomy_resource.inc create mode 100644 sites/all/modules/custom/services/resources/user_resource.inc create mode 100644 sites/all/modules/custom/services/servers/rest_server/README.markdown create mode 100755 sites/all/modules/custom/services/servers/rest_server/includes/RESTServer.inc create mode 100644 sites/all/modules/custom/services/servers/rest_server/includes/ServicesContentTypeNegotiator.inc create mode 100644 sites/all/modules/custom/services/servers/rest_server/includes/ServicesContext.inc create mode 100644 sites/all/modules/custom/services/servers/rest_server/includes/ServicesFormatter.inc create mode 100644 sites/all/modules/custom/services/servers/rest_server/includes/ServicesParser.inc create mode 100644 sites/all/modules/custom/services/servers/rest_server/includes/ServicesRESTServerFactory.inc create mode 100644 sites/all/modules/custom/services/servers/rest_server/lib/bencode.php create mode 100644 sites/all/modules/custom/services/servers/rest_server/lib/mimeparse.php create mode 100644 sites/all/modules/custom/services/servers/rest_server/rest_server.api.php create mode 100644 sites/all/modules/custom/services/servers/rest_server/rest_server.inc create mode 100644 sites/all/modules/custom/services/servers/rest_server/rest_server.info create mode 100644 sites/all/modules/custom/services/servers/rest_server/rest_server.install create mode 100755 sites/all/modules/custom/services/servers/rest_server/rest_server.module create mode 100644 sites/all/modules/custom/services/servers/rest_server/tests/ServicesRESTServerTests.test create mode 100644 sites/all/modules/custom/services/servers/rest_server/tests/rest_server_mock_classes.inc create mode 100644 sites/all/modules/custom/services/servers/xmlrpc_server/xmlrpc_server.info create mode 100644 sites/all/modules/custom/services/servers/xmlrpc_server/xmlrpc_server.module create mode 100644 sites/all/modules/custom/services/services.admin.inc create mode 100644 sites/all/modules/custom/services/services.drush.inc create mode 100644 sites/all/modules/custom/services/services.info create mode 100644 sites/all/modules/custom/services/services.install create mode 100644 sites/all/modules/custom/services/services.make create mode 100644 sites/all/modules/custom/services/services.module create mode 100644 sites/all/modules/custom/services/tests/functional/NoAuthEndpointTestRunner.test create mode 100644 sites/all/modules/custom/services/tests/functional/ServicesAliasTests.test create mode 100644 sites/all/modules/custom/services/tests/functional/ServicesArgumentsTests.test create mode 100644 sites/all/modules/custom/services/tests/functional/ServicesEndpointTests.test create mode 100644 sites/all/modules/custom/services/tests/functional/ServicesParserTests.test create mode 100644 sites/all/modules/custom/services/tests/functional/ServicesResourceCommentTests.test create mode 100644 sites/all/modules/custom/services/tests/functional/ServicesResourceDisabledTests.test create mode 100644 sites/all/modules/custom/services/tests/functional/ServicesResourceFileTests.test create mode 100644 sites/all/modules/custom/services/tests/functional/ServicesResourceNodeTests.test create mode 100644 sites/all/modules/custom/services/tests/functional/ServicesResourceSystemTests.test create mode 100644 sites/all/modules/custom/services/tests/functional/ServicesResourceTaxonomyTests.test create mode 100644 sites/all/modules/custom/services/tests/functional/ServicesResourceUserTests.test create mode 100644 sites/all/modules/custom/services/tests/functional/ServicesSecurityTests.test create mode 100644 sites/all/modules/custom/services/tests/functional/ServicesVersionTests.test create mode 100644 sites/all/modules/custom/services/tests/functional/ServicesXMLRPCTests.test create mode 100644 sites/all/modules/custom/services/tests/services.test create mode 100644 sites/all/modules/custom/services/tests/services_test_resource/services_test_resource.info create mode 100644 sites/all/modules/custom/services/tests/services_test_resource/services_test_resource.module create mode 100644 sites/all/modules/custom/services/tests/ui/ServicesUITests.test create mode 100644 sites/all/modules/custom/services/tests/unit/ServicesSpycLibraryTests.test create mode 100644 sites/all/modules/custom/stage_file_proxy/INSTALL.txt create mode 100644 sites/all/modules/custom/stage_file_proxy/LICENSE.txt create mode 100644 sites/all/modules/custom/stage_file_proxy/stage_file_proxy.info create mode 100644 sites/all/modules/custom/stage_file_proxy/stage_file_proxy.module create mode 100644 sites/all/modules/custom/strongarm/LICENSE.txt create mode 100644 sites/all/modules/custom/strongarm/README.txt create mode 100644 sites/all/modules/custom/strongarm/strongarm.admin.inc create mode 100644 sites/all/modules/custom/strongarm/strongarm.css create mode 100644 sites/all/modules/custom/strongarm/strongarm.drush.inc create mode 100644 sites/all/modules/custom/strongarm/strongarm.info create mode 100644 sites/all/modules/custom/strongarm/strongarm.install create mode 100644 sites/all/modules/custom/strongarm/strongarm.module create mode 100644 sites/all/modules/custom/ticket/LICENSE.txt create mode 100644 sites/all/modules/custom/ticket/includes/ticket.field.inc create mode 100644 sites/all/modules/custom/ticket/includes/ticket_registration.admin.inc create mode 100644 sites/all/modules/custom/ticket/includes/ticket_registration.entity.inc create mode 100644 sites/all/modules/custom/ticket/includes/ticket_registration.metadata.inc create mode 100644 sites/all/modules/custom/ticket/includes/ticket_type.admin.inc create mode 100644 sites/all/modules/custom/ticket/includes/ticket_type.entity.inc create mode 100644 sites/all/modules/custom/ticket/includes/ticket_type.metadata.inc create mode 100644 sites/all/modules/custom/ticket/js/ticket_type_remove.js create mode 100644 sites/all/modules/custom/ticket/modules/ticket_rules/ticket_rules.info create mode 100644 sites/all/modules/custom/ticket/modules/ticket_rules/ticket_rules.module create mode 100644 sites/all/modules/custom/ticket/modules/ticket_rules/ticket_rules.rules.inc create mode 100644 sites/all/modules/custom/ticket/modules/ticket_state/includes/ticket_state.admin.inc create mode 100644 sites/all/modules/custom/ticket/modules/ticket_state/includes/ticket_state.controller.inc create mode 100644 sites/all/modules/custom/ticket/modules/ticket_state/includes/ticket_state.entity.inc create mode 100644 sites/all/modules/custom/ticket/modules/ticket_state/includes/ticket_state.field.inc create mode 100644 sites/all/modules/custom/ticket/modules/ticket_state/includes/ticket_state.ui_controller.inc create mode 100644 sites/all/modules/custom/ticket/modules/ticket_state/plugins/entityreference/selection/TicketStateSelectionHandler.class.php create mode 100644 sites/all/modules/custom/ticket/modules/ticket_state/plugins/entityreference/selection/ticket_state.inc create mode 100644 sites/all/modules/custom/ticket/modules/ticket_state/ticket_state.info create mode 100644 sites/all/modules/custom/ticket/modules/ticket_state/ticket_state.install create mode 100644 sites/all/modules/custom/ticket/modules/ticket_state/ticket_state.module create mode 100644 sites/all/modules/custom/ticket/modules/ticket_state_basic/ticket_state_basic.info create mode 100644 sites/all/modules/custom/ticket/modules/ticket_state_basic/ticket_state_basic.install create mode 100644 sites/all/modules/custom/ticket/modules/ticket_state_basic/ticket_state_basic.module create mode 100644 sites/all/modules/custom/ticket/modules/ticket_user_registration/ticket_user_registration.info create mode 100644 sites/all/modules/custom/ticket/modules/ticket_user_registration/ticket_user_registration.install create mode 100644 sites/all/modules/custom/ticket/modules/ticket_user_registration/ticket_user_registration.js create mode 100644 sites/all/modules/custom/ticket/modules/ticket_user_registration/ticket_user_registration.module create mode 100644 sites/all/modules/custom/ticket/modules/ticket_user_registration/views/ticket_user_registration.views.inc create mode 100644 sites/all/modules/custom/ticket/modules/ticket_user_registration/views/ticket_user_registration.views_default.inc create mode 100644 sites/all/modules/custom/ticket/theme/ticket-type.tpl.php create mode 100644 sites/all/modules/custom/ticket/theme/ticket-user-tickets.tpl.php create mode 100644 sites/all/modules/custom/ticket/ticket.info create mode 100644 sites/all/modules/custom/ticket/ticket.install create mode 100644 sites/all/modules/custom/ticket/ticket.module create mode 100644 sites/all/modules/custom/ticket/views/ticket.views.inc create mode 100644 sites/all/modules/custom/ticket/views/ticket.views_default.inc create mode 100644 sites/all/modules/custom/ticket/views/ticket_views_handler_field_entity_link.inc create mode 100644 sites/all/modules/custom/ticket/views/ticket_views_handler_field_registration_link.inc create mode 100644 sites/all/modules/custom/ticket/views/ticket_views_handler_field_registration_link_cancel.inc create mode 100644 sites/all/modules/custom/ticket/views/ticket_views_handler_field_registration_link_edit.inc create mode 100644 sites/all/modules/custom/ticket/views/ticket_views_plugin_display_ticket_registration.inc create mode 100644 sites/all/modules/custom/timefield/LICENSE.txt create mode 100644 sites/all/modules/custom/timefield/README.txt create mode 100644 sites/all/modules/custom/timefield/js/timefield.js create mode 100644 sites/all/modules/custom/timefield/theme/timefield-weekly-minical-box.tpl.php create mode 100644 sites/all/modules/custom/timefield/theme/timefield.tpl.php create mode 100644 sites/all/modules/custom/timefield/timefield.devel_generate.inc create mode 100644 sites/all/modules/custom/timefield/timefield.drush.inc create mode 100644 sites/all/modules/custom/timefield/timefield.info create mode 100644 sites/all/modules/custom/timefield/timefield.install create mode 100644 sites/all/modules/custom/timefield/timefield.module create mode 100644 sites/all/modules/custom/timefield/timefield.test create mode 100644 sites/all/modules/custom/timefield/views/timefield.views.inc create mode 100644 sites/all/modules/custom/timefield/views/timefield_handler_field_timefield.inc create mode 100644 sites/all/modules/custom/timefield/views/timefield_handler_field_timefield_duration.inc create mode 100644 sites/all/modules/custom/timefield/views/timefield_handler_filter_timefield_duration.inc create mode 100644 sites/all/modules/custom/timefield/views/timefield_handler_sort_timefield_duration.inc create mode 100644 sites/all/modules/custom/timefield/views/timefield_plugin_style_minical.inc create mode 100644 sites/all/modules/custom/token/LICENSE.txt create mode 100644 sites/all/modules/custom/token/README.txt create mode 100644 sites/all/modules/custom/token/arrow-down.png create mode 100644 sites/all/modules/custom/token/arrow-right.png create mode 100644 sites/all/modules/custom/token/jquery.treeTable.css create mode 100644 sites/all/modules/custom/token/jquery.treeTable.js create mode 100644 sites/all/modules/custom/token/tests/token_test.info create mode 100644 sites/all/modules/custom/token/tests/token_test.module create mode 100644 sites/all/modules/custom/token/token.css create mode 100644 sites/all/modules/custom/token/token.drush.inc create mode 100644 sites/all/modules/custom/token/token.info create mode 100644 sites/all/modules/custom/token/token.install create mode 100644 sites/all/modules/custom/token/token.js create mode 100644 sites/all/modules/custom/token/token.module create mode 100644 sites/all/modules/custom/token/token.pages.inc create mode 100644 sites/all/modules/custom/token/token.test create mode 100644 sites/all/modules/custom/token/token.tokens.inc create mode 100644 sites/all/modules/custom/url/LICENSE.txt create mode 100644 sites/all/modules/custom/url/url.field.css create mode 100644 sites/all/modules/custom/url/url.info create mode 100644 sites/all/modules/custom/url/url.install create mode 100644 sites/all/modules/custom/url/url.module create mode 100644 sites/all/modules/custom/url/url.test create mode 100644 sites/all/modules/custom/uuid/LICENSE.txt create mode 100644 sites/all/modules/custom/uuid/README.txt create mode 100644 sites/all/modules/custom/uuid/UPGRADE.txt create mode 100644 sites/all/modules/custom/uuid/plugins/arguments/entity_uuid.inc create mode 100644 sites/all/modules/custom/uuid/uuid.admin.inc create mode 100644 sites/all/modules/custom/uuid/uuid.api.php create mode 100644 sites/all/modules/custom/uuid/uuid.core.inc create mode 100644 sites/all/modules/custom/uuid/uuid.drush.inc create mode 100644 sites/all/modules/custom/uuid/uuid.entity.inc create mode 100644 sites/all/modules/custom/uuid/uuid.features.inc create mode 100644 sites/all/modules/custom/uuid/uuid.inc create mode 100644 sites/all/modules/custom/uuid/uuid.info create mode 100644 sites/all/modules/custom/uuid/uuid.install create mode 100644 sites/all/modules/custom/uuid/uuid.module create mode 100644 sites/all/modules/custom/uuid/uuid.test create mode 100644 sites/all/modules/custom/uuid/uuid.tokens.inc create mode 100644 sites/all/modules/custom/uuid/uuid.views.inc create mode 100644 sites/all/modules/custom/uuid/uuid_path/uuid_path.info create mode 100644 sites/all/modules/custom/uuid/uuid_path/uuid_path.module create mode 100644 sites/all/modules/custom/uuid/uuid_services/resources/field_collection.resource.inc create mode 100644 sites/all/modules/custom/uuid/uuid_services/uuid_services.admin.inc create mode 100644 sites/all/modules/custom/uuid/uuid_services/uuid_services.info create mode 100644 sites/all/modules/custom/uuid/uuid_services/uuid_services.module create mode 100644 sites/all/modules/custom/uuid/uuid_services_example/uuid_services_example.features.inc create mode 100644 sites/all/modules/custom/uuid/uuid_services_example/uuid_services_example.info create mode 100644 sites/all/modules/custom/uuid/uuid_services_example/uuid_services_example.module create mode 100644 sites/all/modules/custom/uuid/uuid_services_example/uuid_services_example.services.inc create mode 100644 sites/all/modules/custom/uuid_features/LICENSE.txt create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/book.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/commerce_product_reference.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/content.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/entity_translation.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/entityreference.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/field_collection.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/file_entity.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/file_entity_revisions.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/filefield.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/microdata.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/nodereference.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/panelizer.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/state_flow.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/taxonomy.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/text.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/title.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/user.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/modules/userreference.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/uuid_bean.features.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/uuid_book.features.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/uuid_commerce_product.features.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/uuid_current_search_configuration.features.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/uuid_features.drush.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/uuid_field_collection.features.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/uuid_file.features.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/uuid_file_entity.features.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/uuid_fpp.features.inc create mode 100755 sites/all/modules/custom/uuid_features/includes/uuid_node.features.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/uuid_nodequeue_item.features.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/uuid_panelizer.features.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/uuid_term.features.inc create mode 100644 sites/all/modules/custom/uuid_features/includes/uuid_user.features.inc create mode 100644 sites/all/modules/custom/uuid_features/uuid_features.api.php create mode 100644 sites/all/modules/custom/uuid_features/uuid_features.info create mode 100644 sites/all/modules/custom/uuid_features/uuid_features.install create mode 100644 sites/all/modules/custom/uuid_features/uuid_features.module create mode 100644 sites/all/modules/custom/view_unpublished/LICENSE.txt create mode 100644 sites/all/modules/custom/view_unpublished/README.txt create mode 100644 sites/all/modules/custom/view_unpublished/view_unpublished.info create mode 100644 sites/all/modules/custom/view_unpublished/view_unpublished.install create mode 100644 sites/all/modules/custom/view_unpublished/view_unpublished.module create mode 100644 sites/all/modules/custom/view_unpublished/view_unpublished_handler_filter_node_status.inc create mode 100644 sites/all/modules/custom/views/D7UPGRADE.txt create mode 100644 sites/all/modules/custom/views/LICENSE.txt create mode 100644 sites/all/modules/custom/views/README.txt create mode 100644 sites/all/modules/custom/views/css/ie/views-admin.ie7.css create mode 100644 sites/all/modules/custom/views/css/views-admin-rtl.css create mode 100644 sites/all/modules/custom/views/css/views-admin.advanced_help.css create mode 100644 sites/all/modules/custom/views/css/views-admin.bartik-rtl.css create mode 100644 sites/all/modules/custom/views/css/views-admin.bartik.css create mode 100644 sites/all/modules/custom/views/css/views-admin.contextual.css create mode 100644 sites/all/modules/custom/views/css/views-admin.css create mode 100644 sites/all/modules/custom/views/css/views-admin.ctools-rtl.css create mode 100644 sites/all/modules/custom/views/css/views-admin.ctools.css create mode 100644 sites/all/modules/custom/views/css/views-admin.garland-rtl.css create mode 100644 sites/all/modules/custom/views/css/views-admin.garland.css create mode 100644 sites/all/modules/custom/views/css/views-admin.seven-rtl.css create mode 100644 sites/all/modules/custom/views/css/views-admin.seven.css create mode 100644 sites/all/modules/custom/views/css/views-admin.theme-rtl.css create mode 100644 sites/all/modules/custom/views/css/views-admin.theme.css create mode 100644 sites/all/modules/custom/views/css/views-rtl.css create mode 100644 sites/all/modules/custom/views/css/views.css create mode 100644 sites/all/modules/custom/views/documentation-standards.txt create mode 100644 sites/all/modules/custom/views/drush/views.drush.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_area.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_area_messages.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_area_result.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_area_text.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_area_text_custom.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_area_view.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_argument.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_argument_date.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_argument_formula.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_argument_group_by_numeric.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_argument_many_to_one.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_argument_null.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_argument_numeric.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_argument_string.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_field.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_field_boolean.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_field_contextual_links.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_field_counter.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_field_custom.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_field_date.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_field_entity.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_field_machine_name.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_field_markup.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_field_math.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_field_numeric.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_field_prerender_list.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_field_serialized.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_field_time_interval.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_field_url.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_filter.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_filter_boolean_operator.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_filter_boolean_operator_string.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_filter_combine.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_filter_date.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_filter_entity_bundle.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_filter_equality.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_filter_fields_compare.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_filter_group_by_numeric.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_filter_in_operator.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_filter_many_to_one.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_filter_numeric.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_filter_string.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_relationship.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_relationship_groupwise_max.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_sort.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_sort_date.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_sort_group_by_numeric.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_sort_menu_hierarchy.inc create mode 100644 sites/all/modules/custom/views/handlers/views_handler_sort_random.inc create mode 100644 sites/all/modules/custom/views/help/about.html create mode 100644 sites/all/modules/custom/views/help/advanced-settings.html create mode 100644 sites/all/modules/custom/views/help/advanced-style-settings.html create mode 100644 sites/all/modules/custom/views/help/aggregation.html create mode 100644 sites/all/modules/custom/views/help/alter-exposed-filter.html create mode 100644 sites/all/modules/custom/views/help/analyze-theme.html create mode 100644 sites/all/modules/custom/views/help/api-default-views.html create mode 100644 sites/all/modules/custom/views/help/api-example.html create mode 100644 sites/all/modules/custom/views/help/api-forms.html create mode 100644 sites/all/modules/custom/views/help/api-handler-area.html create mode 100644 sites/all/modules/custom/views/help/api-tables.html create mode 100644 sites/all/modules/custom/views/help/api-upgrading.html create mode 100644 sites/all/modules/custom/views/help/api.html create mode 100644 sites/all/modules/custom/views/help/argument.html create mode 100644 sites/all/modules/custom/views/help/basic-settings.html create mode 100644 sites/all/modules/custom/views/help/demo-video.html create mode 100644 sites/all/modules/custom/views/help/display-attachment.html create mode 100644 sites/all/modules/custom/views/help/display-block.html create mode 100644 sites/all/modules/custom/views/help/display-default.html create mode 100644 sites/all/modules/custom/views/help/display-feed.html create mode 100644 sites/all/modules/custom/views/help/display-page.html create mode 100644 sites/all/modules/custom/views/help/display.html create mode 100644 sites/all/modules/custom/views/help/drush.html create mode 100644 sites/all/modules/custom/views/help/embed.html create mode 100644 sites/all/modules/custom/views/help/empty-text.html create mode 100644 sites/all/modules/custom/views/help/example-author-block.html create mode 100644 sites/all/modules/custom/views/help/example-filter-by-current-user.html create mode 100644 sites/all/modules/custom/views/help/example-recent-stories.html create mode 100644 sites/all/modules/custom/views/help/example-slideshow-thumb-pager.html create mode 100644 sites/all/modules/custom/views/help/example-user-feed.html create mode 100644 sites/all/modules/custom/views/help/example-users-by-role.html create mode 100644 sites/all/modules/custom/views/help/exposed-form.html create mode 100644 sites/all/modules/custom/views/help/field.html create mode 100644 sites/all/modules/custom/views/help/filter.html create mode 100644 sites/all/modules/custom/views/help/get-total-rows.html create mode 100644 sites/all/modules/custom/views/help/getting-started.html create mode 100644 sites/all/modules/custom/views/help/group-by.html create mode 100644 sites/all/modules/custom/views/help/header.html create mode 100644 sites/all/modules/custom/views/help/images/node-term_node-term_data-large.png create mode 100644 sites/all/modules/custom/views/help/images/node-term_node-term_data.png create mode 100644 sites/all/modules/custom/views/help/images/overview-ui-large.png create mode 100644 sites/all/modules/custom/views/help/images/overview-ui-small.png create mode 100644 sites/all/modules/custom/views/help/images/style-breakdown-large.png create mode 100644 sites/all/modules/custom/views/help/images/style-breakdown.png create mode 100644 sites/all/modules/custom/views/help/images/views1-admin-large.png create mode 100644 sites/all/modules/custom/views/help/images/views1-admin.png create mode 100644 sites/all/modules/custom/views/help/images/views1-changeviewtype-large.png create mode 100644 sites/all/modules/custom/views/help/images/views1-changeviewtype.png create mode 100644 sites/all/modules/custom/views/help/images/views2-addaview-large.png create mode 100644 sites/all/modules/custom/views/help/images/views2-addaview.png create mode 100644 sites/all/modules/custom/views/help/images/views2-adddisplay-large.png create mode 100644 sites/all/modules/custom/views/help/images/views2-adddisplay.png create mode 100644 sites/all/modules/custom/views/help/images/views2-addfields-large.png create mode 100644 sites/all/modules/custom/views/help/images/views2-addfields.png create mode 100644 sites/all/modules/custom/views/help/images/views2-addfieldsajax-large.png create mode 100644 sites/all/modules/custom/views/help/images/views2-addfieldsajax.png create mode 100644 sites/all/modules/custom/views/help/images/views2-admin-large.png create mode 100644 sites/all/modules/custom/views/help/images/views2-admin.png create mode 100644 sites/all/modules/custom/views/help/images/views2-changedisplaystyle-large.png create mode 100644 sites/all/modules/custom/views/help/images/views2-changedisplaystyle.png create mode 100644 sites/all/modules/custom/views/help/images/views2-fieldspreview-large.png create mode 100644 sites/all/modules/custom/views/help/images/views2-fieldspreview.png create mode 100644 sites/all/modules/custom/views/help/images/views2-newview-large.png create mode 100644 sites/all/modules/custom/views/help/images/views2-newview.png create mode 100644 sites/all/modules/custom/views/help/images/views2-rearrangefields-large.png create mode 100644 sites/all/modules/custom/views/help/images/views2-rearrangefields.png create mode 100644 sites/all/modules/custom/views/help/images/views2-tablestyle-large.png create mode 100644 sites/all/modules/custom/views/help/images/views2-tablestyle.png create mode 100644 sites/all/modules/custom/views/help/images/views3-group-aggregation-types.png create mode 100644 sites/all/modules/custom/views/help/images/views3-group-aggregation.png create mode 100644 sites/all/modules/custom/views/help/images/views3-jump-style-menu.png create mode 100644 sites/all/modules/custom/views/help/images/views3-semanticviews.png create mode 100644 sites/all/modules/custom/views/help/images/views3-views-all.png create mode 100644 sites/all/modules/custom/views/help/menu.html create mode 100644 sites/all/modules/custom/views/help/misc-notes.html create mode 100644 sites/all/modules/custom/views/help/new.html create mode 100644 sites/all/modules/custom/views/help/other-help.html create mode 100644 sites/all/modules/custom/views/help/overrides.html create mode 100644 sites/all/modules/custom/views/help/path.html create mode 100644 sites/all/modules/custom/views/help/performance-views-vs-displays.html create mode 100644 sites/all/modules/custom/views/help/performance.html create mode 100644 sites/all/modules/custom/views/help/relationship-representative.html create mode 100644 sites/all/modules/custom/views/help/relationship.html create mode 100644 sites/all/modules/custom/views/help/reports.html create mode 100644 sites/all/modules/custom/views/help/select-multple-nids-contextual-filters.html create mode 100644 sites/all/modules/custom/views/help/semantic-views.html create mode 100644 sites/all/modules/custom/views/help/sort.html create mode 100644 sites/all/modules/custom/views/help/style-comment-rss.html create mode 100644 sites/all/modules/custom/views/help/style-fields.html create mode 100644 sites/all/modules/custom/views/help/style-grid.html create mode 100644 sites/all/modules/custom/views/help/style-grouping.html create mode 100644 sites/all/modules/custom/views/help/style-jump.html create mode 100644 sites/all/modules/custom/views/help/style-list.html create mode 100644 sites/all/modules/custom/views/help/style-node-rss.html create mode 100644 sites/all/modules/custom/views/help/style-node.html create mode 100644 sites/all/modules/custom/views/help/style-row.html create mode 100644 sites/all/modules/custom/views/help/style-rss.html create mode 100644 sites/all/modules/custom/views/help/style-settings.html create mode 100644 sites/all/modules/custom/views/help/style-summary-unformatted.html create mode 100644 sites/all/modules/custom/views/help/style-summary.html create mode 100644 sites/all/modules/custom/views/help/style-table.html create mode 100644 sites/all/modules/custom/views/help/style-unformatted.html create mode 100644 sites/all/modules/custom/views/help/style.html create mode 100644 sites/all/modules/custom/views/help/taxonomy-page-override.html create mode 100644 sites/all/modules/custom/views/help/theme-css.html create mode 100644 sites/all/modules/custom/views/help/top-pager.html create mode 100644 sites/all/modules/custom/views/help/ui-crashes.html create mode 100644 sites/all/modules/custom/views/help/updating-view3.html create mode 100644 sites/all/modules/custom/views/help/updating.html create mode 100644 sites/all/modules/custom/views/help/upgrading.html create mode 100644 sites/all/modules/custom/views/help/using-theme.html create mode 100644 sites/all/modules/custom/views/help/view-add.html create mode 100644 sites/all/modules/custom/views/help/view-settings.html create mode 100644 sites/all/modules/custom/views/help/view-type.html create mode 100644 sites/all/modules/custom/views/help/views.help.ini create mode 100644 sites/all/modules/custom/views/images/arrow-active.png create mode 100644 sites/all/modules/custom/views/images/close.png create mode 100644 sites/all/modules/custom/views/images/expanded-options.png create mode 100644 sites/all/modules/custom/views/images/loading-small.gif create mode 100644 sites/all/modules/custom/views/images/loading.gif create mode 100644 sites/all/modules/custom/views/images/overridden.gif create mode 100644 sites/all/modules/custom/views/images/sprites.png create mode 100644 sites/all/modules/custom/views/images/status-active.gif create mode 100644 sites/all/modules/custom/views/includes/admin.inc create mode 100644 sites/all/modules/custom/views/includes/ajax.inc create mode 100644 sites/all/modules/custom/views/includes/analyze.inc create mode 100644 sites/all/modules/custom/views/includes/base.inc create mode 100644 sites/all/modules/custom/views/includes/cache.inc create mode 100644 sites/all/modules/custom/views/includes/handlers.inc create mode 100644 sites/all/modules/custom/views/includes/plugins.inc create mode 100644 sites/all/modules/custom/views/includes/view.inc create mode 100644 sites/all/modules/custom/views/js/ajax.js create mode 100644 sites/all/modules/custom/views/js/ajax_view.js create mode 100644 sites/all/modules/custom/views/js/base.js create mode 100644 sites/all/modules/custom/views/js/jquery.ui.dialog.patch.js create mode 100644 sites/all/modules/custom/views/js/views-admin.js create mode 100644 sites/all/modules/custom/views/js/views-contextual.js create mode 100644 sites/all/modules/custom/views/js/views-list.js create mode 100644 sites/all/modules/custom/views/modules/aggregator.views.inc create mode 100644 sites/all/modules/custom/views/modules/aggregator/views_handler_argument_aggregator_category_cid.inc create mode 100644 sites/all/modules/custom/views/modules/aggregator/views_handler_argument_aggregator_fid.inc create mode 100644 sites/all/modules/custom/views/modules/aggregator/views_handler_argument_aggregator_iid.inc create mode 100644 sites/all/modules/custom/views/modules/aggregator/views_handler_field_aggregator_category.inc create mode 100644 sites/all/modules/custom/views/modules/aggregator/views_handler_field_aggregator_title_link.inc create mode 100644 sites/all/modules/custom/views/modules/aggregator/views_handler_field_aggregator_xss.inc create mode 100644 sites/all/modules/custom/views/modules/aggregator/views_handler_filter_aggregator_category_cid.inc create mode 100644 sites/all/modules/custom/views/modules/aggregator/views_plugin_row_aggregator_rss.inc create mode 100644 sites/all/modules/custom/views/modules/book.views.inc create mode 100644 sites/all/modules/custom/views/modules/book/views_plugin_argument_default_book_root.inc create mode 100644 sites/all/modules/custom/views/modules/comment.views.inc create mode 100644 sites/all/modules/custom/views/modules/comment.views_default.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_argument_comment_user_uid.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_field_comment.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_field_comment_depth.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_field_comment_link.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_field_comment_link_approve.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_field_comment_link_delete.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_field_comment_link_edit.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_field_comment_link_reply.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_field_comment_node_link.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_field_comment_username.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_field_last_comment_timestamp.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_field_ncs_last_comment_name.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_field_ncs_last_updated.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_field_node_comment.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_field_node_new_comments.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_filter_comment_user_uid.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_filter_ncs_last_updated.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_filter_node_comment.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_sort_comment_thread.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_sort_ncs_last_comment_name.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_handler_sort_ncs_last_updated.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_plugin_row_comment_rss.inc create mode 100644 sites/all/modules/custom/views/modules/comment/views_plugin_row_comment_view.inc create mode 100644 sites/all/modules/custom/views/modules/contact.views.inc create mode 100644 sites/all/modules/custom/views/modules/contact/views_handler_field_contact_link.inc create mode 100644 sites/all/modules/custom/views/modules/field.views.inc create mode 100644 sites/all/modules/custom/views/modules/field/views_handler_argument_field_list.inc create mode 100644 sites/all/modules/custom/views/modules/field/views_handler_argument_field_list_string.inc create mode 100644 sites/all/modules/custom/views/modules/field/views_handler_field_field.inc create mode 100644 sites/all/modules/custom/views/modules/field/views_handler_filter_field_list.inc create mode 100644 sites/all/modules/custom/views/modules/field/views_handler_filter_field_list_boolean.inc create mode 100644 sites/all/modules/custom/views/modules/field/views_handler_relationship_entity_reverse.inc create mode 100644 sites/all/modules/custom/views/modules/file.views.inc create mode 100644 sites/all/modules/custom/views/modules/filter.views.inc create mode 100644 sites/all/modules/custom/views/modules/filter/views_handler_field_filter_format_name.inc create mode 100644 sites/all/modules/custom/views/modules/image.views.inc create mode 100644 sites/all/modules/custom/views/modules/locale.views.inc create mode 100644 sites/all/modules/custom/views/modules/locale/views_handler_argument_locale_group.inc create mode 100644 sites/all/modules/custom/views/modules/locale/views_handler_argument_locale_language.inc create mode 100644 sites/all/modules/custom/views/modules/locale/views_handler_field_locale_group.inc create mode 100644 sites/all/modules/custom/views/modules/locale/views_handler_field_locale_language.inc create mode 100644 sites/all/modules/custom/views/modules/locale/views_handler_field_locale_link_edit.inc create mode 100644 sites/all/modules/custom/views/modules/locale/views_handler_field_node_language.inc create mode 100644 sites/all/modules/custom/views/modules/locale/views_handler_filter_locale_group.inc create mode 100644 sites/all/modules/custom/views/modules/locale/views_handler_filter_locale_language.inc create mode 100644 sites/all/modules/custom/views/modules/locale/views_handler_filter_locale_version.inc create mode 100644 sites/all/modules/custom/views/modules/locale/views_handler_filter_node_language.inc create mode 100644 sites/all/modules/custom/views/modules/node.views.inc create mode 100644 sites/all/modules/custom/views/modules/node.views_default.inc create mode 100644 sites/all/modules/custom/views/modules/node.views_template.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_argument_dates_various.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_argument_node_language.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_argument_node_nid.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_argument_node_type.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_argument_node_uid_revision.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_argument_node_vid.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_field_history_user_timestamp.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_field_node.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_field_node_link.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_field_node_link_delete.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_field_node_link_edit.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_field_node_path.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_field_node_revision.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_field_node_revision_link.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_field_node_revision_link_delete.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_field_node_revision_link_revert.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_field_node_type.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_filter_history_user_timestamp.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_filter_node_access.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_filter_node_status.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_filter_node_type.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_handler_filter_node_uid_revision.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_plugin_argument_default_node.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_plugin_argument_validate_node.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_plugin_row_node_rss.inc create mode 100644 sites/all/modules/custom/views/modules/node/views_plugin_row_node_view.inc create mode 100644 sites/all/modules/custom/views/modules/poll.views.inc create mode 100644 sites/all/modules/custom/views/modules/profile.views.inc create mode 100644 sites/all/modules/custom/views/modules/profile/views_handler_field_profile_date.inc create mode 100644 sites/all/modules/custom/views/modules/profile/views_handler_field_profile_list.inc create mode 100644 sites/all/modules/custom/views/modules/profile/views_handler_filter_profile_selection.inc create mode 100644 sites/all/modules/custom/views/modules/search.views.inc create mode 100644 sites/all/modules/custom/views/modules/search.views_default.inc create mode 100644 sites/all/modules/custom/views/modules/search/views_handler_argument_search.inc create mode 100644 sites/all/modules/custom/views/modules/search/views_handler_field_search_score.inc create mode 100644 sites/all/modules/custom/views/modules/search/views_handler_filter_search.inc create mode 100644 sites/all/modules/custom/views/modules/search/views_handler_sort_search_score.inc create mode 100644 sites/all/modules/custom/views/modules/search/views_plugin_row_search_view.inc create mode 100644 sites/all/modules/custom/views/modules/statistics.views.inc create mode 100644 sites/all/modules/custom/views/modules/statistics.views_default.inc create mode 100644 sites/all/modules/custom/views/modules/statistics/views_handler_field_accesslog_path.inc create mode 100644 sites/all/modules/custom/views/modules/system.views.inc create mode 100644 sites/all/modules/custom/views/modules/system/views_handler_argument_file_fid.inc create mode 100644 sites/all/modules/custom/views/modules/system/views_handler_field_file.inc create mode 100644 sites/all/modules/custom/views/modules/system/views_handler_field_file_extension.inc create mode 100644 sites/all/modules/custom/views/modules/system/views_handler_field_file_filemime.inc create mode 100644 sites/all/modules/custom/views/modules/system/views_handler_field_file_status.inc create mode 100644 sites/all/modules/custom/views/modules/system/views_handler_field_file_uri.inc create mode 100644 sites/all/modules/custom/views/modules/system/views_handler_filter_file_status.inc create mode 100644 sites/all/modules/custom/views/modules/system/views_handler_filter_system_type.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy.views.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy.views_default.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_handler_argument_taxonomy.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_handler_argument_term_node_tid.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_handler_argument_term_node_tid_depth.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_handler_argument_term_node_tid_depth_modifier.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_handler_argument_vocabulary_machine_name.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_handler_argument_vocabulary_vid.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_handler_field_taxonomy.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_handler_field_term_link_edit.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_handler_field_term_node_tid.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_handler_filter_term_node_tid.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_handler_filter_term_node_tid_depth.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_handler_filter_vocabulary_machine_name.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_handler_filter_vocabulary_vid.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_handler_relationship_node_term_data.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_plugin_argument_default_taxonomy_tid.inc create mode 100644 sites/all/modules/custom/views/modules/taxonomy/views_plugin_argument_validate_taxonomy_term.inc create mode 100644 sites/all/modules/custom/views/modules/tracker.views.inc create mode 100644 sites/all/modules/custom/views/modules/tracker/views_handler_argument_tracker_comment_user_uid.inc create mode 100644 sites/all/modules/custom/views/modules/tracker/views_handler_filter_tracker_boolean_operator.inc create mode 100644 sites/all/modules/custom/views/modules/tracker/views_handler_filter_tracker_comment_user_uid.inc create mode 100644 sites/all/modules/custom/views/modules/translation.views.inc create mode 100644 sites/all/modules/custom/views/modules/translation/views_handler_argument_node_tnid.inc create mode 100644 sites/all/modules/custom/views/modules/translation/views_handler_field_node_link_translate.inc create mode 100644 sites/all/modules/custom/views/modules/translation/views_handler_field_node_translation_link.inc create mode 100644 sites/all/modules/custom/views/modules/translation/views_handler_filter_node_tnid.inc create mode 100644 sites/all/modules/custom/views/modules/translation/views_handler_filter_node_tnid_child.inc create mode 100644 sites/all/modules/custom/views/modules/translation/views_handler_relationship_translation.inc create mode 100644 sites/all/modules/custom/views/modules/user.views.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_argument_user_uid.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_argument_users_roles_rid.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_field_user.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_field_user_language.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_field_user_link.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_field_user_link_cancel.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_field_user_link_edit.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_field_user_mail.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_field_user_name.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_field_user_permissions.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_field_user_picture.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_field_user_roles.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_filter_user_current.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_filter_user_name.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_filter_user_permissions.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_handler_filter_user_roles.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_plugin_argument_default_current_user.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_plugin_argument_default_user.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_plugin_argument_validate_user.inc create mode 100644 sites/all/modules/custom/views/modules/user/views_plugin_row_user_view.inc create mode 100644 sites/all/modules/custom/views/modules/views.views.inc create mode 100644 sites/all/modules/custom/views/plugins/export_ui/views_ui.class.php create mode 100644 sites/all/modules/custom/views/plugins/export_ui/views_ui.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_access.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_access_none.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_access_perm.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_access_role.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_argument_default.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_argument_default_fixed.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_argument_default_php.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_argument_default_raw.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_argument_validate.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_argument_validate_numeric.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_argument_validate_php.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_cache.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_cache_none.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_cache_time.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_display.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_display_attachment.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_display_block.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_display_default.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_display_embed.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_display_extender.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_display_feed.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_display_page.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_exposed_form.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_exposed_form_basic.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_exposed_form_input_required.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_localization.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_localization_core.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_localization_none.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_pager.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_pager_full.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_pager_mini.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_pager_none.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_pager_some.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_query.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_query_default.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_row.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_row_fields.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_row_rss_fields.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_style.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_style_default.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_style_grid.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_style_jump_menu.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_style_list.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_style_mapping.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_style_rss.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_style_summary.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_style_summary_jump_menu.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_style_summary_unformatted.inc create mode 100644 sites/all/modules/custom/views/plugins/views_plugin_style_table.inc create mode 100644 sites/all/modules/custom/views/plugins/views_wizard/comment.inc create mode 100644 sites/all/modules/custom/views/plugins/views_wizard/file_managed.inc create mode 100644 sites/all/modules/custom/views/plugins/views_wizard/node.inc create mode 100644 sites/all/modules/custom/views/plugins/views_wizard/node_revision.inc create mode 100644 sites/all/modules/custom/views/plugins/views_wizard/taxonomy_term.inc create mode 100644 sites/all/modules/custom/views/plugins/views_wizard/users.inc create mode 100644 sites/all/modules/custom/views/plugins/views_wizard/views_ui_base_views_wizard.class.php create mode 100644 sites/all/modules/custom/views/plugins/views_wizard/views_ui_comment_views_wizard.class.php create mode 100644 sites/all/modules/custom/views/plugins/views_wizard/views_ui_file_managed_views_wizard.class.php create mode 100644 sites/all/modules/custom/views/plugins/views_wizard/views_ui_node_revision_views_wizard.class.php create mode 100644 sites/all/modules/custom/views/plugins/views_wizard/views_ui_node_views_wizard.class.php create mode 100644 sites/all/modules/custom/views/plugins/views_wizard/views_ui_taxonomy_term_views_wizard.class.php create mode 100644 sites/all/modules/custom/views/plugins/views_wizard/views_ui_users_views_wizard.class.php create mode 100644 sites/all/modules/custom/views/tests/comment/views_handler_argument_comment_user_uid.test create mode 100644 sites/all/modules/custom/views/tests/comment/views_handler_filter_comment_user_uid.test create mode 100644 sites/all/modules/custom/views/tests/field/views_fieldapi.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_area_text.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_argument_null.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_argument_string.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_field.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_field_boolean.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_field_counter.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_field_custom.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_field_date.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_field_file_extension.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_field_file_size.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_field_math.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_field_url.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_field_xss.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_filter_combine.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_filter_date.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_filter_equality.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_filter_in_operator.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_filter_numeric.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_filter_string.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_sort.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_sort_date.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handler_sort_random.test create mode 100644 sites/all/modules/custom/views/tests/handlers/views_handlers.test create mode 100644 sites/all/modules/custom/views/tests/node/views_node_revision_relations.test create mode 100644 sites/all/modules/custom/views/tests/plugins/views_plugin_display.test create mode 100644 sites/all/modules/custom/views/tests/styles/views_plugin_style.test create mode 100644 sites/all/modules/custom/views/tests/styles/views_plugin_style_base.test create mode 100644 sites/all/modules/custom/views/tests/styles/views_plugin_style_jump_menu.test create mode 100644 sites/all/modules/custom/views/tests/styles/views_plugin_style_mapping.test create mode 100644 sites/all/modules/custom/views/tests/styles/views_plugin_style_unformatted.test create mode 100644 sites/all/modules/custom/views/tests/taxonomy/views_handler_relationship_node_term_data.test create mode 100644 sites/all/modules/custom/views/tests/templates/views-view--frontpage.tpl.php create mode 100644 sites/all/modules/custom/views/tests/test_handlers/views_test_area_access.inc create mode 100644 sites/all/modules/custom/views/tests/test_plugins/views_test_plugin_access_test_dynamic.inc create mode 100644 sites/all/modules/custom/views/tests/test_plugins/views_test_plugin_access_test_static.inc create mode 100644 sites/all/modules/custom/views/tests/test_plugins/views_test_plugin_style_test_mapping.inc create mode 100644 sites/all/modules/custom/views/tests/user/views_handler_field_user_name.test create mode 100644 sites/all/modules/custom/views/tests/user/views_user.test create mode 100644 sites/all/modules/custom/views/tests/user/views_user_argument_default.test create mode 100644 sites/all/modules/custom/views/tests/user/views_user_argument_validate.test create mode 100644 sites/all/modules/custom/views/tests/views_access.test create mode 100644 sites/all/modules/custom/views/tests/views_analyze.test create mode 100644 sites/all/modules/custom/views/tests/views_argument_default.test create mode 100644 sites/all/modules/custom/views/tests/views_argument_validator.test create mode 100644 sites/all/modules/custom/views/tests/views_basic.test create mode 100644 sites/all/modules/custom/views/tests/views_cache.test create mode 100644 sites/all/modules/custom/views/tests/views_cache.test.css create mode 100644 sites/all/modules/custom/views/tests/views_cache.test.js create mode 100644 sites/all/modules/custom/views/tests/views_exposed_form.test create mode 100644 sites/all/modules/custom/views/tests/views_glossary.test create mode 100644 sites/all/modules/custom/views/tests/views_groupby.test create mode 100644 sites/all/modules/custom/views/tests/views_handlers.test create mode 100644 sites/all/modules/custom/views/tests/views_module.test create mode 100644 sites/all/modules/custom/views/tests/views_pager.test create mode 100644 sites/all/modules/custom/views/tests/views_plugin_localization_test.inc create mode 100644 sites/all/modules/custom/views/tests/views_query.test create mode 100644 sites/all/modules/custom/views/tests/views_test.info create mode 100644 sites/all/modules/custom/views/tests/views_test.install create mode 100644 sites/all/modules/custom/views/tests/views_test.module create mode 100644 sites/all/modules/custom/views/tests/views_test.views_default.inc create mode 100644 sites/all/modules/custom/views/tests/views_translatable.test create mode 100644 sites/all/modules/custom/views/tests/views_ui.test create mode 100644 sites/all/modules/custom/views/tests/views_upgrade.test create mode 100644 sites/all/modules/custom/views/tests/views_view.test create mode 100644 sites/all/modules/custom/views/theme/theme.inc create mode 100644 sites/all/modules/custom/views/theme/views-exposed-form.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-more.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-ui-display-tab-bucket.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-ui-display-tab-setting.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-ui-edit-item.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-ui-edit-view.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-view-field.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-view-fields.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-view-grid.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-view-grouping.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-view-list.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-view-row-comment.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-view-row-rss.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-view-rss.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-view-summary-unformatted.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-view-summary.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-view-table.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-view-unformatted.tpl.php create mode 100644 sites/all/modules/custom/views/theme/views-view.tpl.php create mode 100644 sites/all/modules/custom/views/views.api.php create mode 100644 sites/all/modules/custom/views/views.info create mode 100644 sites/all/modules/custom/views/views.install create mode 100644 sites/all/modules/custom/views/views.module create mode 100644 sites/all/modules/custom/views/views.tokens.inc create mode 100644 sites/all/modules/custom/views/views_export/views_export.module create mode 100644 sites/all/modules/custom/views/views_ui.info create mode 100644 sites/all/modules/custom/views/views_ui.module create mode 100644 sites/all/modules/custom/views_accordion/LICENSE.txt create mode 100644 sites/all/modules/custom/views_accordion/README.txt create mode 100644 sites/all/modules/custom/views_accordion/help/theming-views-accordion.html create mode 100644 sites/all/modules/custom/views_accordion/help/using-views-accordion.html create mode 100644 sites/all/modules/custom/views_accordion/help/views-accordion-style.html create mode 100644 sites/all/modules/custom/views_accordion/help/views_accordion.help.ini create mode 100644 sites/all/modules/custom/views_accordion/views-accordion.css create mode 100644 sites/all/modules/custom/views_accordion/views-accordion.js create mode 100644 sites/all/modules/custom/views_accordion/views-view-accordion.tpl.php create mode 100644 sites/all/modules/custom/views_accordion/views_accordion.info create mode 100644 sites/all/modules/custom/views_accordion/views_accordion.module create mode 100644 sites/all/modules/custom/views_accordion/views_accordion.views.inc create mode 100644 sites/all/modules/custom/views_accordion/views_accordion_style_plugin.inc create mode 100755 sites/all/modules/custom/views_bulk_operations/LICENSE.txt create mode 100644 sites/all/modules/custom/views_bulk_operations/README.txt create mode 100644 sites/all/modules/custom/views_bulk_operations/actions/archive.action.inc create mode 100644 sites/all/modules/custom/views_bulk_operations/actions/argument_selector.action.inc create mode 100644 sites/all/modules/custom/views_bulk_operations/actions/book.action.inc create mode 100644 sites/all/modules/custom/views_bulk_operations/actions/delete.action.inc create mode 100644 sites/all/modules/custom/views_bulk_operations/actions/modify.action.inc create mode 100644 sites/all/modules/custom/views_bulk_operations/actions/script.action.inc create mode 100644 sites/all/modules/custom/views_bulk_operations/actions/user_cancel.action.inc create mode 100644 sites/all/modules/custom/views_bulk_operations/actions/user_roles.action.inc create mode 100644 sites/all/modules/custom/views_bulk_operations/actions_permissions.info create mode 100644 sites/all/modules/custom/views_bulk_operations/actions_permissions.module create mode 100644 sites/all/modules/custom/views_bulk_operations/css/modify.action.css create mode 100644 sites/all/modules/custom/views_bulk_operations/css/views_bulk_operations.css create mode 100644 sites/all/modules/custom/views_bulk_operations/js/views_bulk_operations.js create mode 100644 sites/all/modules/custom/views_bulk_operations/plugins/operation_types/action.class.php create mode 100644 sites/all/modules/custom/views_bulk_operations/plugins/operation_types/action.inc create mode 100644 sites/all/modules/custom/views_bulk_operations/plugins/operation_types/base.class.php create mode 100644 sites/all/modules/custom/views_bulk_operations/plugins/operation_types/rules_component.class.php create mode 100644 sites/all/modules/custom/views_bulk_operations/plugins/operation_types/rules_component.inc create mode 100644 sites/all/modules/custom/views_bulk_operations/views/views_bulk_operations.views.inc create mode 100644 sites/all/modules/custom/views_bulk_operations/views/views_bulk_operations_handler_field_operations.inc create mode 100644 sites/all/modules/custom/views_bulk_operations/views_bulk_operations.api.php create mode 100644 sites/all/modules/custom/views_bulk_operations/views_bulk_operations.drush.inc create mode 100644 sites/all/modules/custom/views_bulk_operations/views_bulk_operations.info create mode 100644 sites/all/modules/custom/views_bulk_operations/views_bulk_operations.install create mode 100644 sites/all/modules/custom/views_bulk_operations/views_bulk_operations.module create mode 100644 sites/all/modules/custom/views_bulk_operations/views_bulk_operations.rules.inc create mode 100644 sites/all/modules/custom/views_datasource/LICENSE.txt create mode 100644 sites/all/modules/custom/views_datasource/README.txt create mode 100644 sites/all/modules/custom/views_datasource/views/plugins/views_plugin_style_json.inc create mode 100644 sites/all/modules/custom/views_datasource/views/plugins/views_plugin_style_rdf.inc create mode 100644 sites/all/modules/custom/views_datasource/views/plugins/views_plugin_style_xhtml.inc create mode 100644 sites/all/modules/custom/views_datasource/views/plugins/views_plugin_style_xml.inc create mode 100644 sites/all/modules/custom/views_datasource/views/plugins/views_plugin_style_xml_test.inc create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views-views-json-style-exhibit.tpl.php create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views-views-json-style-simple.tpl.php create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views-views-json-style.tpl.php create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views-views-rdf-style-doap.tpl.php create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views-views-rdf-style-foaf.tpl.php create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views-views-rdf-style-sioc.tpl.php create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views-views-rdf-style.tpl.php create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views-views-xhtml-style-hcalendar.tpl.php create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views-views-xhtml-style-hcard.tpl.php create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views-views-xhtml-style.tpl.php create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views-views-xml-style--singles-xml.tpl.php create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views-views-xml-style-atom.tpl.php create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views-views-xml-style-opml.tpl.php create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views-views-xml-style-raw.tpl.php create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views-views-xml-style.tpl.php create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views_views_json_style.theme.inc create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views_views_rdf_style.theme.inc create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views_views_xhtml_style.theme.inc create mode 100644 sites/all/modules/custom/views_datasource/views/theme/views_views_xml_style.theme.inc create mode 100644 sites/all/modules/custom/views_datasource/views/views_json.views.inc create mode 100644 sites/all/modules/custom/views_datasource/views/views_rdf.views.inc create mode 100644 sites/all/modules/custom/views_datasource/views/views_xhtml.views.inc create mode 100644 sites/all/modules/custom/views_datasource/views/views_xml.views.inc create mode 100644 sites/all/modules/custom/views_datasource/views_json.info create mode 100644 sites/all/modules/custom/views_datasource/views_json.module create mode 100644 sites/all/modules/custom/views_datasource/views_rdf.info create mode 100644 sites/all/modules/custom/views_datasource/views_rdf.module create mode 100644 sites/all/modules/custom/views_datasource/views_xhtml.info create mode 100644 sites/all/modules/custom/views_datasource/views_xhtml.module create mode 100644 sites/all/modules/custom/views_datasource/views_xml.info create mode 100644 sites/all/modules/custom/views_datasource/views_xml.module create mode 100644 sites/all/modules/custom/views_responsive_grid/LICENSE.txt create mode 100644 sites/all/modules/custom/views_responsive_grid/README.txt create mode 100644 sites/all/modules/custom/views_responsive_grid/views-view-responsive-grid.tpl.php create mode 100644 sites/all/modules/custom/views_responsive_grid/views_responsive_grid.info create mode 100644 sites/all/modules/custom/views_responsive_grid/views_responsive_grid.module create mode 100644 sites/all/modules/custom/views_responsive_grid/views_responsive_grid.views.inc create mode 100644 sites/all/modules/custom/views_responsive_grid/views_responsive_grid_plugin_style_responsive_grid.inc create mode 100644 sites/all/modules/custom/webform/LICENSE.txt create mode 100644 sites/all/modules/custom/webform/README.txt create mode 100644 sites/all/modules/custom/webform/THEMING.txt create mode 100644 sites/all/modules/custom/webform/components/date.inc create mode 100644 sites/all/modules/custom/webform/components/email.inc create mode 100644 sites/all/modules/custom/webform/components/fieldset.inc create mode 100644 sites/all/modules/custom/webform/components/file.inc create mode 100644 sites/all/modules/custom/webform/components/grid.inc create mode 100644 sites/all/modules/custom/webform/components/hidden.inc create mode 100644 sites/all/modules/custom/webform/components/markup.inc create mode 100644 sites/all/modules/custom/webform/components/number.inc create mode 100644 sites/all/modules/custom/webform/components/pagebreak.inc create mode 100644 sites/all/modules/custom/webform/components/select.inc create mode 100644 sites/all/modules/custom/webform/components/textarea.inc create mode 100644 sites/all/modules/custom/webform/components/textfield.inc create mode 100644 sites/all/modules/custom/webform/components/time.inc create mode 100644 sites/all/modules/custom/webform/css/webform-admin.css create mode 100644 sites/all/modules/custom/webform/css/webform.css create mode 100644 sites/all/modules/custom/webform/images/calendar.png create mode 100644 sites/all/modules/custom/webform/includes/exporters/webform_exporter.inc create mode 100644 sites/all/modules/custom/webform/includes/exporters/webform_exporter_delimited.inc create mode 100644 sites/all/modules/custom/webform/includes/exporters/webform_exporter_excel_delimited.inc create mode 100644 sites/all/modules/custom/webform/includes/exporters/webform_exporter_excel_xlsx.inc create mode 100644 sites/all/modules/custom/webform/includes/webform.admin.inc create mode 100644 sites/all/modules/custom/webform/includes/webform.components.inc create mode 100644 sites/all/modules/custom/webform/includes/webform.conditionals.inc create mode 100644 sites/all/modules/custom/webform/includes/webform.emails.inc create mode 100644 sites/all/modules/custom/webform/includes/webform.export.inc create mode 100644 sites/all/modules/custom/webform/includes/webform.options.inc create mode 100644 sites/all/modules/custom/webform/includes/webform.pages.inc create mode 100644 sites/all/modules/custom/webform/includes/webform.report.inc create mode 100644 sites/all/modules/custom/webform/includes/webform.submissions.inc create mode 100644 sites/all/modules/custom/webform/js/node-type-form.js create mode 100644 sites/all/modules/custom/webform/js/select-admin.js create mode 100644 sites/all/modules/custom/webform/js/webform-admin.js create mode 100644 sites/all/modules/custom/webform/js/webform.js create mode 100644 sites/all/modules/custom/webform/templates/webform-analysis-component.tpl.php create mode 100644 sites/all/modules/custom/webform/templates/webform-analysis.tpl.php create mode 100644 sites/all/modules/custom/webform/templates/webform-calendar.tpl.php create mode 100644 sites/all/modules/custom/webform/templates/webform-confirmation.tpl.php create mode 100644 sites/all/modules/custom/webform/templates/webform-form.tpl.php create mode 100644 sites/all/modules/custom/webform/templates/webform-mail.tpl.php create mode 100644 sites/all/modules/custom/webform/templates/webform-progressbar.tpl.php create mode 100644 sites/all/modules/custom/webform/templates/webform-results-submissions.tpl.php create mode 100644 sites/all/modules/custom/webform/templates/webform-submission-information.tpl.php create mode 100644 sites/all/modules/custom/webform/templates/webform-submission-navigation.tpl.php create mode 100644 sites/all/modules/custom/webform/templates/webform-submission-page.tpl.php create mode 100644 sites/all/modules/custom/webform/templates/webform-submission.tpl.php create mode 100644 sites/all/modules/custom/webform/tests/components.test create mode 100644 sites/all/modules/custom/webform/tests/conditionals.test create mode 100644 sites/all/modules/custom/webform/tests/permissions.test create mode 100644 sites/all/modules/custom/webform/tests/submission.test create mode 100644 sites/all/modules/custom/webform/tests/webform.test create mode 100644 sites/all/modules/custom/webform/views/default_views/webform_results.inc create mode 100644 sites/all/modules/custom/webform/views/default_views/webform_submissions.inc create mode 100644 sites/all/modules/custom/webform/views/webform.views.inc create mode 100644 sites/all/modules/custom/webform/views/webform_handler_area_result_pager.inc create mode 100644 sites/all/modules/custom/webform/views/webform_handler_field_form_body.inc create mode 100644 sites/all/modules/custom/webform/views/webform_handler_field_is_draft.inc create mode 100644 sites/all/modules/custom/webform/views/webform_handler_field_node_link_edit.inc create mode 100644 sites/all/modules/custom/webform/views/webform_handler_field_node_link_results.inc create mode 100644 sites/all/modules/custom/webform/views/webform_handler_field_submission_count.inc create mode 100644 sites/all/modules/custom/webform/views/webform_handler_field_submission_data.inc create mode 100644 sites/all/modules/custom/webform/views/webform_handler_field_submission_link.inc create mode 100644 sites/all/modules/custom/webform/views/webform_handler_field_webform_status.inc create mode 100644 sites/all/modules/custom/webform/views/webform_handler_filter_is_draft.inc create mode 100644 sites/all/modules/custom/webform/views/webform_handler_filter_submission_data.inc create mode 100644 sites/all/modules/custom/webform/views/webform_handler_filter_webform_status.inc create mode 100644 sites/all/modules/custom/webform/views/webform_handler_relationship_submission_data.inc create mode 100644 sites/all/modules/custom/webform/views/webform_plugin_row_submission_view.inc create mode 100644 sites/all/modules/custom/webform/webform.api.php create mode 100644 sites/all/modules/custom/webform/webform.drush.inc create mode 100644 sites/all/modules/custom/webform/webform.info create mode 100644 sites/all/modules/custom/webform/webform.install create mode 100644 sites/all/modules/custom/webform/webform.module create mode 100644 sites/all/modules/custom/webform/webform.tokens.inc create mode 100644 sites/all/modules/custom/weight/LICENSE.txt create mode 100644 sites/all/modules/custom/weight/README.txt create mode 100644 sites/all/modules/custom/weight/views/weight.views.inc create mode 100644 sites/all/modules/custom/weight/views/weight.views_default.inc create mode 100644 sites/all/modules/custom/weight/views/weight_handler_field_weight.inc create mode 100644 sites/all/modules/custom/weight/views/weight_handler_filter_weight_enabled.inc create mode 100644 sites/all/modules/custom/weight/weight.features.inc create mode 100644 sites/all/modules/custom/weight/weight.info create mode 100644 sites/all/modules/custom/weight/weight.install create mode 100644 sites/all/modules/custom/weight/weight.js create mode 100644 sites/all/modules/custom/weight/weight.migrate.inc create mode 100644 sites/all/modules/custom/weight/weight.module create mode 100644 sites/all/modules/custom/wysiwyg_filter/CHANGELOG.txt create mode 100644 sites/all/modules/custom/wysiwyg_filter/LICENSE.txt create mode 100644 sites/all/modules/custom/wysiwyg_filter/README.txt create mode 100644 sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.admin.css create mode 100644 sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.admin.inc create mode 100644 sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.inc create mode 100644 sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.info create mode 100644 sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.install create mode 100644 sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.module create mode 100644 sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.pages.inc diff --git a/sites/all/modules/custom/addressfield/LICENSE.txt b/sites/all/modules/custom/addressfield/LICENSE.txt new file mode 100644 index 0000000000..d159169d10 --- /dev/null +++ b/sites/all/modules/custom/addressfield/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/sites/all/modules/custom/addressfield/addresses.txt b/sites/all/modules/custom/addressfield/addresses.txt new file mode 100644 index 0000000000..e64b82023e --- /dev/null +++ b/sites/all/modules/custom/addressfield/addresses.txt @@ -0,0 +1,298 @@ +AT NULL Feldkirch NULL 6800 Pater Grimm Weg 20 +AU NULL Melbourne NULL +AU NULL Sydney NULL +AU 04 NULL NORMANBY NULL 4059 30 Normanby Terrace +BD NULL Dhaka NULL 1205 23, Subal Das Road, Chowdhury Bazar, Lalbagh +BD NULL Dhaka NULL 1207 R-1,H-19,Kallaynpur,Mirpur,Dhaka +BD NULL Dhaka NULL 1207 World Bank Office Dhaka, Plot E 32, Agargaon, Sher-E-Bangla Nagar +BD NULL Dhaka NULL 1209 House# 66B, Flat# B2 Zigatola +BD NULL Dhaka NULL 1219 390 West Rampura Dhaka +BD NULL Dhaka NULL 1230 Uttara +BD 81 NULL Dhaka NULL 1000 Institute of Water and Flood Management +BD 81 NULL Dhaka NULL 1203 84/a maniknagar +BD 81 NULL Dhaka NULL 1205 Dhaka Bangladesh +BD 81 NULL Dhaka NULL 1207 BetterStories Limited 17 West Panthopath +BD 81 NULL Dhaka NULL 1216 Mirpur, Dhaka +BD 81 NULL Dhaka NULL 1230 830, Prembagan, Dhakshin Khan +BD 82 NULL khulna NULL 9203 +BD NULL NULL Dhaka NULL 1000 Institute of Water and Flood Management +BD NULL NULL Dhaka NULL 1207 World Bank Office Dhaka, Plot E 32, Agargaon, Sher-E-Bangla Nagar +BE NULL Brussels NULL +BE NULL Watermael-Boitsfort NULL 1170 Avenue des Staphylins +BH NULL Manama NULL 00973 Manama Bahrain Manama Bahrain +BR NULL Porto Alegre NULL +BR NULL Recife NULL +BR RJ NULL Rio de Janeiro NULL +BW NULL Francistown NULL NULL +BW NULL NULL Francistown NULL NULL +CA NULL Montreal NULL +CA NULL Toronto NULL +CA BC NULL Vancouver NULL +CA ON NULL Kitchener NULL +CA ON NULL wterloo NULL n2l3g1 200 University Avenue West +CH NULL Geneva NULL 1202 15, chemin Louis-Dunant +CH 25 NULL Zurich NULL 8098 UBS Optimus Foundation Augustinerhof 1 +DE NULL Berlin NULL +DE 05 NULL Frankfurt am Main NULL 60386 Johanna-Tesch-Platz 7 +DK NULL Aarhus NULL +ES NULL Bilbao NULL +ET 44 NULL ADDIS ABABA NULL 11945 ADDIS ABABA,P.O.BOX 11945 +FI NULL Espoo NULL 02130 Mahlarinne 3B +FI NULL Helsinki NULL 00580 Hermannin rantatie 2 A Hermannin rantatie 2 A +FI NULL Tampere NULL 33101 Tampere Univerity of Technology +FI 13 NULL Espoo NULL 02150 Aalto Venture Garage Betonimiehenkuja 3 +GB NULL Exeter NULL +GB NULL London NULL +GB NULL London NULL N4 2DP 2 Myddleton Ave +GB NULL London NULL N7 0AH 104 St George’s Avenue +GB NULL London NULL SE16 3UL 25 Blue Anchor Lane +GB NULL London NULL SW18 5SP Flat 1 150 Merton road +GB NULL London NULL W1T 4BQ 13 Fitzroy Street +GB NULL Oxford NULL +GB NULL Southampton NULL +GB C3 NULL NULL cb244qg 32 market street swavesey +GB E7 NULL London NULL SE3 7TP +GB F3 NULL Wood Green NULL N22 5RU 6 Cedar House +GB H1 NULL London NULL SE11 5JD 47-49 Durham Street +GB H6 NULL London NULL SE8 4DD 8 Harton St Deptford +GB K2 NULL Oxford NULL OX2 6QY 3 The Villas, Rutherway +GH 05 NULL NSAWAM NULL NULL P.O.BOX 455 +GH NULL NULL Accra NULL NULL +ID NULL Bandung NULL 40134 Jalan Sadang Hegar 1 No. 12 RT04 RW13 Sadang Serang +ID NULL Bekasi NULL 17411 Jl.Binadharma 1 No.62. Jatiwaringin +ID NULL Jakarta NULL +ID NULL Jakarta NULL 12440 Jl. H. Niin 7 Lebak Bulus, Cilandak +ID NULL Jakarta NULL 13330 Otista +ID NULL Jakarta selatan NULL 12000 jl. rawa jati timur 6 no. 10 +ID NULL Jakarta Timur NULL Jl.Mulia No.15B Kel.Bidara Cina, Kec.Jatinegara, Jakarta Timur +ID NULL Pematang Siantar NULL 51511 Jl. Durian I 30 +ID 04 NULL Bogor NULL 16165 +ID 04 NULL jakarta NULL otista +ID 04 NULL Jakarta NULL 12520 Jl. Pertanian Raya III No.42 Jakarta Selatan Pasar Minggu +ID 04 NULL Jakarta NULL 13330 Jakarta +ID 04 NULL Jakarta NULL 13330 Jl Sensus IIC Bidaracina Jaktim +ID 04 NULL Jakarta NULL 13330 Jl. Bonasut 2 no.22 +ID 04 NULL Jakarta NULL 13330 Otista 64c +ID 04 NULL jakarta NULL 13330 Otista jaktim +ID 04 NULL Jakarta Timur NULL 13330 Kebon Sayur I no. 1 RT 10/15 +ID 04 NULL Jakarta Timur NULL 13460 Jl. Pondok Kopi Blok G4/5 RT. 005/08 Jakarta Timur +ID 04 NULL Jakarta Timur NULL 13810 Jl. Raya Pondok Gede Rt03 Rw08 no.35 , Lubang Buaya, Jakarta Timur Jl. Raya Pondok Gede Rt03 Rw08 no.35 , Lubang Buaya, Jakarta Timur +ID 07 NULL Brebes NULL 54321 Jl Kersem Blok D14 Perum Taman Indo Kaligangsa Wetan Brebes +ID 07 NULL Semarang NULL 50143 Puspowarno Tengah 2/2 +ID 08 NULL Lumajang NULL 67373 Desa Tumpeng Kecamatan Candipuro Lumajang +ID 30 NULL Bandung NULL 55241 Jl Pelesiran No 55A/56 +ID 30 NULL Bekasi NULL 17510 bekasi West Java Indonesia +ID 30 NULL Depok NULL 16245 Jalan juragan sinda 2 no 10 +ID 30 NULL Depok NULL 16424 Jalan Margonda RayaJalan Kober Gang Mawar +ID 30 NULL Depok NULL 16424 Jl. Haji Yahya Nuih no.24, Pondok Cina +ID 30 NULL Depok NULL 16425 Kukusan Kelurahan +ID 30 NULL Depok NULL 16518 Jl. Salak No.1/C.88 Durenseribu Bojongsari +ID 30 NULL Depok NULL 16952 Jl. Merak No.34 -36 Rt.004/014 Jl. Merak No. 34 -36 Rt. 004/014 +ID 36 NULL biak numfor NULL 98111 jl. s. mamberamo no 6782 biak numfor +IL NULL Tel Aviv NULL +IN NULL Bangalore NULL +IN NULL India NULL +IN NULL new delhi NULL 110003 55 lodi estate +IN 07 NULL NEW DELHI NULL 110018 15/11 A 1ST FLOOR TILAK NAGAR +IN 07 NULL New Delhu NULL 110075 B 54 Hilansh Apartments Plot No 1, Sector 10, Dwarka +IN 10 NULL Gurgaon NULL D- 201 Ivy Apartments Sushant Lok 1 Gurgaon Haryana +IN 13 NULL Trivandrum NULL 695010 TC 9/1615, SRMH Road, Sasthamangalam, Trivandrum +IN 16 NULL Mumbai NULL 400020 Bharat Mahal, Flat#55 Marine Drive +IN 16 NULL Mumbai NULL 400028 303,Shree Parvati Co-Op Housing Society, D.L.Vaidya Road,Dadar +IN 16 NULL Pune NULL +IN 16 NULL Pune NULL Infosys Campus Hinjewadi Phase 2 +IN 16 NULL Pune NULL 400705 #22 Iris Garden Gokhale Road +IN 16 NULL PUNE NULL 411043 +IN 16 NULL Pune NULL 411051 +IN 16 NULL Pune NULL 411057 Infosys Ltd. Rajiv gandhi infostech park Hinjewadi phase 2 +IN 16 NULL Pune NULL 412108 Pune Maharatshtra +IN 16 NULL Pune NULL 433011 502 utkarsh vihar golande state pune +IN 19 NULL Bangalore NULL 560080 Indian Institute for Human Settlements IIHS Bangalore City Campus, Sadashivanagar, +IN 19 NULL Bangalore NULL 560100 electronic city +IN 19 NULL Bhalki NULL 585411 bhalki,bidar ,karnataka karnataka +IN 24 NULL Jaipur NULL 302011 Institute of Health Management Research 1, Prabhu Dayal Marg +IR 26 NULL Tehran NULL 1118844454 Baharestan sq. mostafa khomeini str., javahery Ave., no. 11, +IT NULL Trento NULL +JM 08 NULL Kingston NULL Kgn 7 MOna Campus UWI +KE NULL Nairobi NULL +KE 05 NULL Nairobi NULL 30300 212,kapsabet +KH NULL NULL Phnom Penh NULL +LR NULL Monrovia NULL 00000 +NG 11 NULL Abuja NULL 930001 17 Bechar street Wuse zone 2 +PE 15 NULL Lima NULL 18 Lima Lima +PE 15 NULL Lima NULL Lima 18 123 Miraflores +PE NULL NULL Lima NULL 03 Calle Granada 104 +PE NULL NULL Lima NULL 18 Lima Lima +PH NULL Manila NULL Globe Telepark 111 Valero Street +PH NULL Quezon Coty NULL 1109 86 Harvard Street, Cubao, Quezon City, Philippines 84 Harvard Street, Cubao, Quezon City,hilippines +PH 20 NULL Silang NULL 4118 370 Bayungan Kaong Silang Cavite +PH 57 NULL Kidapawan NULL 9400 Kidapawan City Kidapawan City +PH 66 NULL zamboanga NULL 7000 29-tripplet rd san jose 29-tripplet rd san jose +PH D9 NULL Pasig City NULL World Bank Office Manila, 20/F Taipan Place F. Ortigas Jr. Road, Ortigas Center +PK NULL Lahore NULL 54000 17-R Model Town Lahore +PK NULL Lahore NULL 54000 53- chamber lane road Lahore +PK NULL Lahore NULL 54000 85 E block Model Town +PK NULL Lahore NULL 54000 House no 227, street no 5, Imamia Colony Shahadra Lahore +PK NULL LAHORE NULL 54000 room no.6 khalid bim waleed hall, near New Anarkali, LAHORE room no.6 khalid bim waleed hall, near New Anarkali, LAHORE +PK NULL Lahore NULL pk097 LUMS, Lahore, +PK NULL Sheikhupura NULL 03935 D.H.Q.Hospital Sheikhupura House number 08. Room no 109 Khalid bin waleed haal, punjab University lahore old campus. +PK 02 NULL Quetta NULL 87000 Postal Address 87000, Kuchlak, Quetta, Balochistan. H#24 Peer Abul Khair road Quetta, Balochistan. +PK 02 NULL Quetta NULL 87300 block no-1 falt no. 7 New Crime Branch Abbas Ali Road Cantt +PK 02 NULL Quetta NULL 87300 Flat no. 3 Shafeen Centre Jinnah Town ,Near I.T university , Quetta +PK 02 NULL Quetta NULL 87300 H-no. C-220 Zarghoonabad Phase-2 , Nawa Killi ,Quetta +PK 04 NULL burewala NULL 60101 Fatima Fayyaz Hazrat Sakina hall girls hostel number 9 Punjab university Lahore Pakistan Sardar Wajid Azim Azeem abad Burewala dist Vehari Pakistan +PK 04 NULL Faisalabad NULL 38000 P 101/1, Green Town, Millat Road, Faisalabad +PK 04 NULL Islamabad NULL 44000 P.O Tarlai kalan chappar Islamabad +PK 04 NULL lahore NULL +PK 04 NULL Lahore NULL 54000 +PK 04 NULL lahore NULL 54000 Street No.63 House 36/A Al-madad Pak Colony Ravi Road, Lahore. Street No.63 House 36/A Al-madad Pak Colony Ravi Road, Lahore. +PK 04 NULL Lahore NULL 54000 1149-1-D2 Green Town Lahore +PK 04 NULL Lahore NULL 54000 124, street# 2, karim block Allama Iqbal Town lahore. 124, street# 2, karim block Allama Iqbal Town lahore. +PK 04 NULL Lahore NULL 54000 150 A Qila Lachman Singh Ravi Road lahore +PK 04 NULL Lahore NULL 54000 166/1L DHA Lahore +PK 04 NULL Lahore NULL 54000 172 A2 Township Lahore +PK 04 NULL Lahore NULL 54000 183,S/Block, Model Town, Lhr +PK 04 NULL lahore NULL 54000 19- A block ,Eden Lane Villas Raiwind Road ,Lahore +PK 04 NULL lahore NULL 54000 3-c kaliyar road opposite kids lyceum, rustam park near mor samnabad +PK 04 NULL Lahore NULL 54000 31 Saeed Block, Canal Bank Scheme +PK 04 NULL Lahore NULL 54000 31c DHA Lahore +PK 04 NULL Lahore NULL 54000 387 E1 wapda town, Lahore +PK 04 NULL Lahore NULL 54000 45-D dha eme sector multan road,lahore +PK 04 NULL Lahore NULL 54000 5 Zafar Ali Road +PK 04 NULL Lahore NULL 54000 54-R PGECHS +PK 04 NULL lahore NULL 54000 566 E-1 johar town lahore 566 E-1 johar town lahore +PK 04 NULL Lahore NULL 54000 82/1 Z Block, Phase 3 DHA +PK 04 NULL Lahore NULL 54000 A-1 VRI Zarrar shaheed road lahore cantt A-1 VRI Zarrar shaheed road lahore cantt +PK 04 NULL lahore NULL 54000 e5/39D street 6 zaman colony cavalry ground ext +PK 04 NULL Lahore NULL 54000 Ho # 61, Block G3, Johar Town Lahore +PK 04 NULL LAhore NULL 54000 House #19-A street #5 Usman nagr Ghaziabad Lahore +PK 04 NULL lahore NULL 54000 House no 692 street no 67 sadar bazar +PK 04 NULL Lahore NULL 54000 Khosa Law Chamber 1 Turner Road +PK 04 NULL Lahore NULL 54000 Lahore,Pakistan Lahore,Pakistan +PK 04 NULL Lahore NULL 54000 room no 69, khalid bin waleed hall, anarkali +PK 04 NULL Lahore NULL 54000 Suite # 8, Al-Hafeez Suites, Gulberg II +PK 04 NULL Lahore NULL 54085 199 Shadman 2 +PK 04 NULL Lahore NULL 54300 Mughalpura Lahore Pakistan +PK 04 NULL Lahore NULL 54660 SD 69 falcon complex gulberg III lahore +PK 04 NULL lahore NULL 54800 764-G4 johar town ,lahore +PK 04 NULL Rawalpindi NULL 44000 House 522, F-Block Sattellite Town, Rawalpindi +PK 04 NULL Rawalpindi NULL 46000 1950/c, Indusroad 2, Tariqabad, Rawalpindi Cantt +PK 04 NULL Rawalpindi NULL 46000 House 54-E Lane 9 Sector 4, AECHS Chaklala Rawalpindi +PK 04 NULL Rawalpindi NULL 46000 House B-1343, Sattellite town Rawalpindi +PK 04 NULL Rawalpindi NULL 46000 House CB-299F, Street 1, Lane 4 Peshawar Road Rawalpindi +PK 04 NULL Rawalpindi NULL 46300 House No 1518 Umer Block phase 8 BehriaTown +PK 04 NULL sialkot NULL 51310 The National Model School, Ismaiealabad, Pacca Garah Sialkot +PK 08 NULL Islamabad NULL CIomsats Institute of Information Technology Islamabad +PK 08 NULL Islamabad NULL 38700 COMSATS tarlai boys hostel Islamabad. COMSATS tarlai boys hostel Islamabad (Room 30) +PK 08 NULL Islamabad NULL 44000 +PK 08 NULL Islamabad NULL 44000 House # 256, Street # 9, Shahzad Town, Islamabad. +PK 08 NULL Islamabad NULL 44000 Islamabad , Comsats University Islamabd ,Pakistan +PK 08 NULL Islamabad NULL 44000 World Bank Building Sector G 5 +PK 08 NULL lahore NULL 54000 3c zafar ali road gulburg 5 3c zafar ali road gulburg 5 +PK 08 NULL lahore NULL 54000 49-a bilal park, chaburgy 49-a bilal park, chaburgy +PK NULL NULL Lahore NULL 54000 +PK NULL NULL Lahore NULL 54000 85 E block Model Town +SN 01 NULL NULL ouakam cité comico en face 217 +SN 01 NULL Dakar NULL +SN 01 NULL Dakar NULL IDEV-ic Patte d'oie Builder's Villa B11 +SN 01 NULL Dakar NULL liberte 6/ dakar +SN 01 NULL Dakar NULL ngor +SN 01 NULL Dakar NULL 4027 ZAC Mbao Cité Fadia +SN NULL NULL Dakar NULL IDEV-ic Patte d'oie Builder's Villa B11 +TZ NULL Dar es Salaam NULL NULL +TZ NULL Dar es salaam NULL NULL 76021 Dar es salaam 1507 Morogoro +TZ NULL Dar es salaam NULL NULL dar es salaam nassoro.ahmedy@yahoo.com +TZ NULL DAR ES SALAAM NULL NULL dar es salaam UDSM +TZ NULL Dar es salaam NULL NULL NA +TZ NULL DAR ES SALAAM NULL NULL P O BOX 23409 +TZ NULL dar es salaam NULL NULL p. o. box 104994 +TZ NULL Dar es Salaam NULL NULL P.o. BOX 71415 Dar es Salaam +TZ NULL Dar es Salaam NULL NULL P.O.BOx 66675 DSM +TZ NULL Dar es salaam NULL NULL Tz Tz +TZ NULL dsm NULL NULL +TZ 02 NULL Bagamoyo NULL NULL PO.Box 393 +TZ 02 NULL Dar es salaam NULL NULL 22548 +TZ 03 NULL Dar-es-salaam NULL NULL Dodoma Municipal Kimara, Dar-es-salaa, +TZ 23 NULL Dar es Salaam NULL NULL +TZ 23 NULL dar es salaam NULL NULL 35074 +TZ 23 NULL dar es salaam NULL NULL 67389 +TZ 23 NULL Dar es Salaam NULL NULL COSTECH, Dar es Salaam, Tanzania +TZ 23 NULL Dar es salaam NULL NULL na +TZ 23 NULL dar es salaam NULL NULL p o box 60164 +TZ 23 NULL dar es salaam NULL NULL P. O. Box 77588 +TZ 23 NULL dar es salaam NULL NULL P.O BOX 78144 +TZ 23 NULL Dar es Salaam NULL NULL P.O.BOX 78373 +TZ 23 NULL Dar es salaam NULL NULL UDSM Dar es Salaam +TZ 23 NULL Dar es salaam NULL NULL udsm udsm +TZ 23 NULL Temeke NULL NULL P.O. Box 50127 +TZ NULL NULL Dar es Salaam NULL NULL +TZ NULL NULL Dar es Salaam NULL NULL Kigoma +TZ NULL NULL Dar es Salaam NULL NULL Mwanza +UG NULL Kampala NULL NULL +UG NULL Kampala NULL NULL Kampala Uganda East Africa +US NULL London NULL SE1 8RT Capital Tower 91 Waterloo Road +US CA NULL Los Angeles NULL +US CA NULL Pleasanton NULL 94588 3412 Pickens Lane +US CA NULL Sacramento NULL +US CA NULL San Francisco NULL +US CA NULL seattle NULL 98113 1234 1st st +US CO NULL Denver NULL 80235 6666 West Quincy Ave +US CT NULL Greenwich NULL 06830 140 Milbank +US CT NULL Hartford NULL 06106 Center for Urban and Global Studies at Trinity College, 70 Vernon Street +US DC NULL Washington NULL +US DC NULL Washington NULL 20007 World Bank Headquarters 1818 H Street NW +US DC NULL Washington NULL 20010 +US DC NULL Washington NULL 20036 +US DC NULL Washington NULL 20405 1889 F St NW +US DC NULL Washington NULL 20433 +US DC NULL Washington NULL 20433 1818 H Street NW +US DC NULL Washington NULL 20433 1818H St +US DC NULL Washington NULL 20433 1818 H Street NW +US DC NULL Washington DC NULL 20005 1424, K Street, NW Suite 600 +US DC NULL Washington DC NULL 20010 1818 H Street, NW +US DC NULL Washington, DC NULL 20003 1818 H Street NW +US DE NULL Virgin Islands|Charlotte Amalie,Cruz Bay,Christiansted NULL Morocco|Tafraout,Rabat,Tangier,Tetouan,Casablanca,Marrakesh,Fez,Oujda,Meknes,Agadir United Arab Emirates|Garhoud,Dubai,Bur Dubai,Ras al Khaymah,Abu Dhabi,Ajman,Al Fujayrah,Sharjah +US FL NULL Falmouth NULL Falmouth Falmouth +US FL NULL Lilongwe NULL Lilongwe Lilongwe +US GA NULL Atlanta NULL +US GU NULL Herndon NULL 15642 Ht USA +US GU NULL Miami NULL Miami Miami +US MD NULL Gaithersburg NULL 20877 554 N Frederick Avenue Suite 216 +US MD NULL Potomac NULL 20854 14 Sandalfoot Court +US MD NULL Silver Spring NULL 20901 9202 Whitney St. +US MI NULL Traverse City NULL 49685 PO Box 792 +US ND NULL Pirassununga NULL Pirassununga Pirassununga +US NJ NULL Princeton NULL +US NY NULL Brooklyn NULL 11206-1980 25 Montrose Ave. Apt 304 +US NY NULL Brooklyn NULL 11225 975 washington ave 2d +US NY NULL Brooklyn NULL 11217 150 4TH AVE APT 9E +US NY NULL New York NULL +US NY NULL New York NULL 10013 148 Lafayette St. PH +US NY NULL New York NULL 10017 UNICEF 3 UN Plaza +US NY NULL New York NULL 10019 25 Columbus Circle Suite 52E +US NY NULL New York NULL 10024 65 West 85th Street 3A +US NY NULL New York NULL 10027 606 W. 116th Street #22 +US NY NULL New York NULL 10037 +US NY NULL Rochester NULL +US NY NULL Scarsdale NULL 10583-1423 54 Walworth Avenue +US OR NULL Portland NULL +US PA NULL Philadelphia NULL +US PA NULL Philadelphia NULL +US PR NULL Colonel Hill NULL Colonel Hill Colonel Hill +US SD NULL Banjul NULL Banjul Banjul +US SD NULL London NULL London London +US TX NULL Aledo NULL 76008 1588 Hunterglenn Dr +US TX NULL Keller NULL 76248 810 Placid View Ct. +US WA NULL Seattle NULL +ZA NULL Cape Town NULL +ZA NULL Cape Town NULL 7945 Alexander Road Muizenberg +ZA NULL Pretoria NULL +ZA 11 NULL Cape Town NULL +ZA 11 NULL Cape Town NULL 7435 PostNet Suite #57, Private Bag X18 Milnerton +ZA 11 NULL Cape town NULL 7508 24 Solyet Court, Lansdowne Road Claremont +ZA 11 NULL Cape Town NULL 7701 +ZA 11 NULL Cape Town NULL 7785 10 Nyamakazi Road Luzuko Park Phillipi East +ZA 11 NULL Cape Town NULL 7915 66 Albert Rd +ZA 11 NULL Cape Town NULL 8001 210 Long Street +ZM NULL Lusaka NULL +ZM 09 NULL LUSAKA NULL 10101 P.O. BOX FW 174 diff --git a/sites/all/modules/custom/addressfield/addressfield-rtl.css b/sites/all/modules/custom/addressfield/addressfield-rtl.css new file mode 100644 index 0000000000..d979946d38 --- /dev/null +++ b/sites/all/modules/custom/addressfield/addressfield-rtl.css @@ -0,0 +1,10 @@ +div.addressfield-container-inline > div.form-item { + float: right; + margin-right: 0; + margin-left: 1em; +} + +div.addressfield-container-inline.country-GB > div.form-item { + margin-left: auto; + margin-right: 0; +} diff --git a/sites/all/modules/custom/addressfield/addressfield.address_formats.inc b/sites/all/modules/custom/addressfield/addressfield.address_formats.inc new file mode 100644 index 0000000000..5ab599544e --- /dev/null +++ b/sites/all/modules/custom/addressfield/addressfield.address_formats.inc @@ -0,0 +1,442 @@ + array('locality'), + 'required_fields' => array('locality'), + 'dependent_locality_label' => t('Suburb'), + 'locality_label' => t('City'), + 'administrative_area_label' => t('Province'), + 'postal_code_label' => t('Postal code'), + 'render_administrative_area_value' => FALSE, + ); + + $address_formats = array(); + // These formats differ from the default only by the presence of the + // postal code in 'used_fields'. + $countries_with_optional_postal_code = array( + 'AC', 'AD', 'AL', 'AZ', 'BA', 'BB', 'BD', 'BG', 'BH', 'BM', 'BN', 'BT', + 'CR', 'CY', 'CZ', 'DO', 'DZ', 'EC', 'EH', 'ET', 'FO', 'GE', 'GN', 'GT', + 'GW', 'HR', 'HT', 'HU', 'IL', 'IS', 'JO', 'KE', 'KG', 'KH', 'KW', 'LA', + 'LA', 'LB', 'LK', 'LR', 'LS', 'MA', 'MC', 'MD', 'ME', 'MG', 'MK', 'MM', + 'MT', 'MU', 'MV', 'NE', 'NP', 'OM', 'PK', 'PY', 'RO', 'RS', 'SA', 'SI', + 'SK', 'SN', 'SZ', 'TA', 'TJ', 'TM', 'TN', 'VA', 'VC', 'VG', 'XK', 'ZM', + ); + foreach ($countries_with_optional_postal_code as $code) { + $address_formats[$code] = array( + 'used_fields' => array('locality', 'postal_code'), + ); + } + + // These formats differ from the default only by the presence of the + // postal code in 'used_fields' and 'required_fields'. + $countries_with_required_postal_code = array( + 'AT', 'AX', 'BE', 'BL', 'CH', 'DE', 'DK', 'FI', 'FK', 'FR', 'GF', 'GG', + 'GL', 'GP', 'GR', 'GS', 'IM', 'IO', 'JE', 'LI', 'LU', 'MF', 'MQ', 'NC', + 'NL', 'NO', 'PL', 'PM', 'PN', 'PT', 'RE', 'SE', 'SH', 'SJ', 'TC', 'WF', + 'YT', + ); + foreach ($countries_with_required_postal_code as $code) { + $address_formats[$code] = array( + 'used_fields' => array('locality', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + ); + } + + $address_formats['AE'] = array( + 'used_fields' => array('administrative_area'), + 'administrative_area_label' => t('Emirate'), + ); + $address_formats['AM'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['AR'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['AS'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['AU'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'locality_label' => t('City/Suburb'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('Postcode'), + ); + $address_formats['BR'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'dependent_locality_label' => t('Neighborhood'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + ); + $address_formats['BS'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['BY'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['CA'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['CC'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['CL'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['CN'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + 'dependent_locality_label' => t('District'), + ); + $address_formats['CO'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('Department', array(), array('context' => 'Territory of a country')), + ); + $address_formats['CV'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['CX'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['EG'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('Governorate'), + ); + $address_formats['EE'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'administrative_area_label' => t('County'), + ); + $address_formats['ES'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['FM'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['GB'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'locality_label' => t('Town/City'), + 'administrative_area_label' => t('County'), + 'postal_code_label' => t('Postcode'), + ); + $address_formats['GI'] = array( + 'used_fields' => array('postal_code'), + ); + $address_formats['GU'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['HK'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'required_fields' => array('administrative_area'), + 'locality_label' => t('District'), + 'administrative_area_label' => t('Area', array(), array('context' => 'Territory of a country')), + ); + $address_formats['HN'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + ); + $address_formats['ID'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'locality_label' => t('City/Regency'), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['IE'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'locality_label' => t('Town/City'), + 'administrative_area_label' => t('County'), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['IN'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('PIN code'), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['IQ'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + ); + $address_formats['IR'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + 'dependent_locality_label' => t('Neighborhood'), + ); + $address_formats['IT'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['JM'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'required_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('Parish', array(), array('context' => 'Territory of a country')), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['JP'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('Prefecture'), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['KI'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['KN'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'required_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['KR'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'dependent_locality_label' => t('District'), + ); + $address_formats['KY'] = array( + 'used_fields' => array('administrative_area', 'postal_code'), + 'required_fields' => array('administrative_area'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['KZ'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('Region', array(), array('context' => 'Territory of a country')), + ); + $address_formats['LT'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'administrative_area_label' => t('County'), + ); + $address_formats['LV'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'administrative_area_label' => t('Municipality'), + ); + $address_formats['MH'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['MN'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['MP'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['MX'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'dependent_locality_label' => t('Neighborhood'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + ); + $address_formats['MY'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'dependent_locality_label' => t('Village / Township'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['MZ'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['NF'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['NG'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + ); + $address_formats['NI'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('Department', array(), array('context' => 'Territory of a country')), + ); + $address_formats['NR'] = array( + 'used_fields' => array('administrative_area'), + 'required_fields' => array('administrative_area'), + 'administrative_area_label' => t('District'), + ); + $address_formats['NZ'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'locality_label' => t('Town/City'), + 'postal_code_label' => t('Postcode'), + ); + $address_formats['PA'] = array( + 'used_fields' => array('locality', 'administrative_area'), + ); + $address_formats['PE'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'locality_label' => t('District'), + 'administrative_area_label' => t('Department', array(), array('context' => 'Territory of a country')), + ); + $address_formats['PF'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['PG'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + ); + $address_formats['PH'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + ); + $address_formats['PR'] = array( + 'used_fields' => array('locality', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['PW'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['RU'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + ); + $address_formats['SC'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['SG'] = array( + 'used_fields' => array('postal_code'), + 'required_fields' => array('postal_code'), + ); + $address_formats['SM'] = array( + 'used_fields' => array('locality', 'postal_code'), + 'required_fields' => array('postal_code'), + ); + $address_formats['SO'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + ); + $address_formats['SR'] = array( + 'used_fields' => array('locality', 'administrative_area'), + ); + $address_formats['SV'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + ); + $address_formats['TH'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + ); + $address_formats['TR'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'locality_label' => t('District'), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['TV'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['TW'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['UA'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'administrative_area_label' => t('Region', array(), array('context' => 'Territory of a country')), + ); + $address_formats['UM'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['US'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['UY'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['UZ'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['VE'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['VI'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['VN'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['ZA'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + ); + + // Allow other modules to alter the formats. + drupal_alter('addressfield_address_formats', $address_formats); + + if (isset($address_formats[$country_code])) { + $format = $address_formats[$country_code] + $default_values; + } + else { + // There is no predefined address format for the requested country, + // but the defaults should work fine. + $format = $default_values; + } + + return $format; +} diff --git a/sites/all/modules/custom/addressfield/addressfield.administrative_areas.inc b/sites/all/modules/custom/addressfield/addressfield.administrative_areas.inc new file mode 100644 index 0000000000..88343de9da --- /dev/null +++ b/sites/all/modules/custom/addressfield/addressfield.administrative_areas.inc @@ -0,0 +1,1037 @@ + t('Abu Dhabi'), + 'FU' => t('Fujairah'), + 'UQ' => t('Umm al-Quwain'), + 'SH' => t('Sharjah'), + 'DU' => t('Dubai'), + 'RK' => t('Ras al-Khaimah'), + 'AJ' => t('Ajmān'), + ); + $administrative_areas['AR'] = array( + 'B' => t('Buenos Aires'), + 'K' => t('Catamarca'), + 'H' => t('Chaco'), + 'U' => t('Chubut'), + 'C' => t('Ciudad de Buenos Aires'), + 'X' => t('Córdoba'), + 'W' => t('Corrientes'), + 'E' => t('Entre Ríos'), + 'P' => t('Formosa'), + 'Y' => t('Jujuy'), + 'L' => t('La Pampa'), + 'F' => t('La Rioja'), + 'M' => t('Mendoza'), + 'N' => t('Misiones'), + 'Q' => t('Neuquén'), + 'R' => t('Río Negro'), + 'A' => t('Salta'), + 'J' => t('San Juan'), + 'D' => t('San Luis'), + 'Z' => t('Santa Cruz'), + 'S' => t('Santa Fe'), + 'G' => t('Santiago del Estero'), + 'V' => t('Tierra del Fuego'), + 'T' => t('Tucumán'), + ); + $administrative_areas['AU'] = array( + 'ACT' => t('Australian Capital Territory'), + 'NSW' => t('New South Wales'), + 'NT' => t('Northern Territory'), + 'QLD' => t('Queensland'), + 'SA' => t('South Australia'), + 'TAS' => t('Tasmania'), + 'VIC' => t('Victoria'), + 'WA' => t('Western Australia'), + ); + $administrative_areas['BR'] = array( + 'AC' => t('Acre'), + 'AL' => t('Alagoas'), + 'AM' => t('Amazonas'), + 'AP' => t('Amapá'), + 'BA' => t('Bahia'), + 'CE' => t('Ceará'), + 'DF' => t('Distrito Federal'), + 'ES' => t('Espírito Santo'), + 'GO' => t('Goiás'), + 'MA' => t('Maranhão'), + 'MG' => t('Minas Gerais'), + 'MS' => t('Mato Grosso do Sul'), + 'MT' => t('Mato Grosso'), + 'PA' => t('Pará'), + 'PB' => t('Paraíba'), + 'PE' => t('Pernambuco'), + 'PI' => t('Piauí'), + 'PR' => t('Paraná'), + 'RJ' => t('Rio de Janeiro'), + 'RN' => t('Rio Grande do Norte'), + 'RO' => t('Rondônia'), + 'RR' => t('Roraima'), + 'RS' => t('Rio Grande do Sul'), + 'SC' => t('Santa Catarina'), + 'SE' => t('Sergipe'), + 'SP' => t('São Paulo'), + 'TO' => t('Tocantins'), + ); + $administrative_areas['CA'] = array( + 'AB' => t('Alberta'), + 'BC' => t('British Columbia'), + 'MB' => t('Manitoba'), + 'NB' => t('New Brunswick'), + 'NL' => t('Newfoundland and Labrador'), + 'NT' => t('Northwest Territories'), + 'NS' => t('Nova Scotia'), + 'NU' => t('Nunavut'), + 'ON' => t('Ontario'), + 'PE' => t('Prince Edward Island'), + 'QC' => t('Quebec'), + 'SK' => t('Saskatchewan'), + 'YT' => t('Yukon Territory'), + ); + $administrative_areas['CL'] = array( + 'AI' => t('Aysén del General Carlos Ibáñez del Campo'), + 'AN' => t('Antofagasta'), + 'AR' => t('Araucanía'), + 'AP' => t('Arica y Parinacota'), + 'AT' => t('Atacama'), + 'BI' => t('Biobío'), + 'CO' => t('Coquimbo'), + 'LI' => t('Libertador General Bernardo O\'Higgins'), + 'LL' => t('Los Lagos'), + 'LR' => t('Los Ríos'), + 'MA' => t('Magallanes y de la Antártica Chilena'), + 'ML' => t('Maule'), + 'RM' => t('Metropolitana de Santiago'), + 'TA' => t('Tarapacá'), + 'VS' => t('Valparaíso'), + ); + $administrative_areas['CN'] = array( + '34' => t('Anhui Sheng'), + '92' => t('Macau'), + '11' => t('Beijing Shi'), + '50' => t('Chongqing Shi'), + '35' => t('Fujian Sheng'), + '62' => t('Gansu Sheng'), + '44' => t('Guangdong Sheng'), + '45' => t('Guangxi Zhuangzuzizhiqu'), + '52' => t('Guizhou Sheng'), + '46' => t('Hainan Sheng'), + '13' => t('Hebei Sheng'), + '41' => t('Henan Sheng'), + '23' => t('Heilongjiang Sheng'), + '42' => t('Hubei Sheng'), + '43' => t('Hunan Sheng'), + '22' => t('Jilin Sheng'), + '32' => t('Jiangsu Sheng'), + '36' => t('Jiangxi Sheng'), + '21' => t('Liaoning Sheng'), + '15' => t('Neimenggu Zizhiqu'), + '64' => t('Ningxia Huizuzizhiqu'), + '63' => t('Qinghai Sheng'), + '37' => t('Shandong Sheng'), + '14' => t('Shanxi Sheng'), + '61' => t('Shaanxi Sheng'), + '31' => t('Shanghai Shi'), + '51' => t('Sichuan Sheng'), + '71' => t('Taiwan'), + '12' => t('Tianjin Shi'), + '54' => t('Xizang Zizhiqu'), + '91' => t('Hong Kong'), + '65' => t('Xinjiang Weiwuerzizhiqu'), + '53' => t('Yunnan Sheng'), + '33' => t('Zhejiang Sheng'), + ); + $administrative_areas['CO'] = array( + 'AMA' => t('Amazonas'), + 'ANT' => t('Antioquia'), + 'ARA' => t('Arauca'), + 'ATL' => t('Atlántico'), + 'BOL' => t('Bolívar'), + 'BOY' => t('Boyacá'), + 'CAL' => t('Caldas'), + 'CAQ' => t('Caquetá'), + 'CAS' => t('Casanare'), + 'CAU' => t('Cauca'), + 'CES' => t('Cesar'), + 'COR' => t('Córdoba'), + 'CUN' => t('Cundinamarca'), + 'CHO' => t('Chocó'), + 'GUA' => t('Guainía'), + 'GUV' => t('Guaviare'), + 'HUI' => t('Huila'), + 'LAG' => t('La Guajira'), + 'MAG' => t('Magdalena'), + 'MET' => t('Meta'), + 'NAR' => t('Nariño'), + 'NSA' => t('Norte de Santander'), + 'PUT' => t('Putumayo'), + 'QUI' => t('Quindío'), + 'RIS' => t('Risaralda'), + 'SAP' => t('San Andrés, Providencia y Santa Catalina'), + 'SAN' => t('Santander'), + 'SUC' => t('Sucre'), + 'TOL' => t('Tolima'), + 'VAC' => t('Valle del Cauca'), + 'VAU' => t('Vaupés'), + 'VID' => t('Vichada'), + ); + $administrative_areas['EE'] = array( + '37' => t('Harjumaa'), + '39' => t('Hiiumaa'), + '44' => t('Ida-Virumaa'), + '49' => t('Jõgevamaa'), + '51' => t('Järvamaa'), + '57' => t('Läänemaa'), + '59' => t('Lääne-Virumaa'), + '65' => t('Põlvamaa'), + '67' => t('Pärnumaa'), + '70' => t('Raplamaa'), + '74' => t('Saaremaa'), + '78' => t('Tartumaa'), + '82' => t('Valgamaa'), + '84' => t('Viljandimaa'), + '86' => t('Võrumaa'), + ); + $administrative_areas['EG'] = array( + 'ALX' => t('Alexandria'), + 'ASN' => t('Aswan'), + 'AST' => t('Asyut'), + 'BH' => t('Beheira'), + 'BNS' => t('Beni Suef'), + 'C' => t('Cairo'), + 'DK' => t('Dakahlia'), + 'DT' => t('Damietta'), + 'FYM' => t('Faiyum'), + 'GH' => t('Gharbia'), + 'GZ' => t('Giza'), + 'IS' => t('Ismailia'), + 'KFS' => t('Kafr el-Sheikh'), + 'MT' => t('Matruh'), + 'MN' => t('Minya'), + 'MNF' => t('Monufia'), + 'WAD' => t('New Valley'), + 'SIN' => t('North Sinai'), + 'PTS' => t('Port Said'), + 'KB' => t('Qalyubia'), + 'KN' => t('Qena'), + 'BA' => t('Red Sea'), + 'SHR' => t('Sharqia'), + 'SHG' => t('Sohag'), + 'JS' => t('South Sinai'), + 'SUZ' => t('Suez'), + 'LX' => t('Luxor'), + ); + $administrative_areas['ES'] = array( + 'C' => t("A Coruña"), + 'VI' => t('Alava'), + 'AB' => t('Albacete'), + 'A' => t('Alicante'), + 'AL' => t("Almería"), + 'O' => t('Asturias'), + 'AV' => t("Ávila"), + 'BA' => t('Badajoz'), + 'PM' => t('Baleares'), + 'B' => t('Barcelona'), + 'BU' => t('Burgos'), + 'CC' => t("Cáceres"), + 'CA' => t("Cádiz"), + 'S' => t('Cantabria'), + 'CS' => t("Castellón"), + 'CE' => t('Ceuta'), + 'CR' => t('Ciudad Real'), + 'CO' => t("Córdoba"), + 'CU' => t('Cuenca'), + 'GI' => t('Gerona'), + 'GR' => t('Granada'), + 'GU' => t('Guadalajara'), + 'SS' => t("Guipúzcoa"), + 'H' => t('Huelva'), + 'HU' => t('Huesca'), + 'J' => t("Jaén"), + 'LO' => t('La Rioja'), + 'GC' => t('Las Palmas'), + 'LE' => t("León"), + 'L' => t("Lérida"), + 'LU' => t('Lugo'), + 'M' => t('Madrid'), + 'MA' => t("Málaga"), + 'ML' => t('Melilla'), + 'MU' => t('Murcia'), + 'NA' => t('Navarra'), + 'OR' => t('Ourense'), + 'P' => t('Palencia'), + 'PO' => t('Pontevedra'), + 'SA' => t('Salamanca'), + 'TF' => t('Santa Cruz de Tenerife'), + 'SG' => t('Segovia'), + 'SE' => t('Sevilla'), + 'SO' => t('Soria'), + 'T' => t('Tarragona'), + 'TE' => t('Teruel'), + 'TO' => t('Toledo'), + 'V' => t('Valencia'), + 'VA' => t('Valladolid'), + 'BI' => t('Vizcaya'), + 'ZA' => t('Zamora'), + 'Z' => t('Zaragoza'), + ); + $administrative_areas['HK'] = array( + // HK subdivisions have no ISO codes assigned. + 'Kowloon' => t('Kowloon'), + 'Hong Kong Island' => t('Hong Kong Island'), + 'New Territories' => t('New Territories'), + ); + $administrative_areas['ID'] = array( + 'AC' => t('Aceh'), + 'BA' => t('Bali'), + 'BB' => t('Bangka Belitung'), + 'BT' => t('Banten'), + 'BE' => t('Bengkulu'), + 'JK' => t('DKI Jakarta'), + 'YO' => t('D.I. Yogyakarta'), + 'GO' => t('Gorontalo'), + 'JA' => t('Jambi'), + 'JB' => t('Jawa Barat'), + 'JT' => t('Jawa Tengah'), + 'JI' => t('Jawa Timur'), + 'KB' => t('Kalimantan Barat'), + 'KS' => t('Kalimantan Selatan'), + 'KT' => t('Kalimantan Tengah'), + 'KI' => t('Kalimantan Timur'), + 'KR' => t('Kepulauan Riau'), + 'LA' => t('Lampung'), + 'MA' => t('Maluku'), + 'MU' => t('Maluku Utara'), + 'NB' => t('Nusa Tenggara Barat'), + 'NT' => t('Nusa Tenggara Timur'), + 'PA' => t('Papua'), + 'PB' => t('Papua Barat'), + 'RI' => t('Riau'), + 'SR' => t('Sulawesi Barat'), + 'SN' => t('Sulawesi Selatan'), + 'ST' => t('Sulawesi Tengah'), + 'SG' => t('Sulawesi Tenggara'), + 'SA' => t('Sulawesi Utara'), + 'SB' => t('Sumatera Barat'), + 'SS' => t('Sumatera Selatan'), + 'SU' => t('Sumatera Utara'), + ); + $administrative_areas['IE'] = array( + 'CW' => t('Co Carlow'), + 'CN' => t('Co Cavan'), + 'CE' => t('Co Clare'), + 'CO' => t('Co Cork'), + 'DL' => t('Co Donegal'), + 'D' => t('Co Dublin'), + 'D1' => t('Dublin 1'), + 'D2' => t('Dublin 2'), + 'D3' => t('Dublin 3'), + 'D4' => t('Dublin 4'), + 'D5' => t('Dublin 5'), + 'D6' => t('Dublin 6'), + 'D6W' => t('Dublin 6w'), + 'D7' => t('Dublin 7'), + 'D8' => t('Dublin 8'), + 'D9' => t('Dublin 9'), + 'D10' => t('Dublin 10'), + 'D11' => t('Dublin 11'), + 'D12' => t('Dublin 12'), + 'D13' => t('Dublin 13'), + 'D14' => t('Dublin 14'), + 'D15' => t('Dublin 15'), + 'D16' => t('Dublin 16'), + 'D17' => t('Dublin 17'), + 'D18' => t('Dublin 18'), + 'D19' => t('Dublin 19'), + 'D20' => t('Dublin 20'), + 'D21' => t('Dublin 21'), + 'D22' => t('Dublin 22'), + 'D23' => t('Dublin 23'), + 'D24' => t('Dublin 24'), + 'G' => t('Co Galway'), + 'KY' => t('Co Kerry'), + 'KE' => t('Co Kildare'), + 'KK' => t('Co Kilkenny'), + 'LS' => t('Co Laois'), + 'LM' => t('Co Leitrim'), + 'LK' => t('Co Limerick'), + 'LD' => t('Co Longford'), + 'LH' => t('Co Louth'), + 'MO' => t('Co Mayo'), + 'MH' => t('Co Meath'), + 'MN' => t('Co Monaghan'), + 'OY' => t('Co Offaly'), + 'RN' => t('Co Roscommon'), + 'SO' => t('Co Sligo'), + 'TA' => t('Co Tipperary'), + 'WD' => t('Co Waterford'), + 'WH' => t('Co Westmeath'), + 'WX' => t('Co Wexford'), + 'WW' => t('Co Wicklow'), + ); + $administrative_areas['IN'] = array( + 'AP' => t('Andhra Pradesh'), + 'AR' => t('Arunachal Pradesh'), + 'AS' => t('Assam'), + 'BR' => t('Bihar'), + 'CT' => t('Chhattisgarh'), + 'DD' => t('Daman & Diu'), + 'DN' => t('Dadra & Nagar Haveli'), + 'GA' => t('Goa'), + 'GJ' => t('Gujarat'), + 'HP' => t('Himachal Pradesh'), + 'HR' => t('Haryana'), + 'JH' => t('Jharkhand'), + 'JK' => t('Jammu & Kashmir'), + 'KA' => t('Karnataka'), + 'KL' => t('Kerala'), + 'MH' => t('Maharashtra'), + 'MN' => t('Manipur'), + 'ML' => t('Meghalaya'), + 'MP' => t('Madhya Pradesh'), + 'MZ' => t('Mizoram'), + 'NL' => t('Nagaland'), + 'OR' => t('Odisha'), + 'PB' => t('Punjab'), + 'RJ' => t('Rajasthan'), + 'SK' => t('Sikkim'), + 'TN' => t('Tamil Nadu'), + 'TG' => t('Telangana'), + 'TR' => t('Tripura'), + 'UP' => t('Uttar Pradesh'), + 'UT' => t('Uttarakhand'), + 'WB' => t('West Bengal'), + ' ' => t('--'), + 'AN' => t('Andaman & Nicobar'), + 'CH' => t('Chandigarh'), + 'DN' => t('Dadra & Nagar Haveli'), + 'DD' => t('Daman & Diu'), + 'DL' => t('Delhi'), + 'LD' => t('Lakshadweep'), + 'PY' => t('Puducherry'), + ); + $administrative_areas['IT'] = array( + 'AG' => t('Agrigento'), + 'AL' => t('Alessandria'), + 'AN' => t('Ancona'), + 'AO' => t('Aosta'), + 'AP' => t('Ascoli Piceno'), + 'AQ' => t("L'Aquila"), + 'AR' => t('Arezzo'), + 'AT' => t('Asti'), + 'AV' => t('Avellino'), + 'BA' => t('Bari'), + 'BG' => t('Bergamo'), + 'BI' => t('Biella'), + 'BL' => t('Belluno'), + 'BN' => t('Benevento'), + 'BO' => t('Bologna'), + 'BR' => t('Brindisi'), + 'BS' => t('Brescia'), + 'BT' => t('Barletta-Andria-Trani'), + 'BZ' => t('Bolzano/Bozen'), + 'CA' => t('Cagliari'), + 'CB' => t('Campobasso'), + 'CE' => t('Caserta'), + 'CH' => t('Chieti'), + 'CI' => t('Carbonia-Iglesias'), + 'CL' => t('Caltanissetta'), + 'CN' => t('Cuneo'), + 'CO' => t('Como'), + 'CR' => t('Cremona'), + 'CS' => t('Cosenza'), + 'CT' => t('Catania'), + 'CZ' => t('Catanzaro'), + 'EN' => t('Enna'), + 'FC' => t('Forlì-Cesena'), + 'FE' => t('Ferrara'), + 'FG' => t('Foggia'), + 'FI' => t('Firenze'), + 'FM' => t('Fermo'), + 'FR' => t('Frosinone'), + 'GE' => t('Genova'), + 'GO' => t('Gorizia'), + 'GR' => t('Grosseto'), + 'IM' => t('Imperia'), + 'IS' => t('Isernia'), + 'KR' => t('Crotone'), + 'LC' => t('Lecco'), + 'LE' => t('Lecce'), + 'LI' => t('Livorno'), + 'LO' => t('Lodi'), + 'LT' => t('Latina'), + 'LU' => t('Lucca'), + 'MB' => t('Monza e Brianza'), + 'MC' => t('Macerata'), + 'ME' => t('Messina'), + 'MI' => t('Milano'), + 'MN' => t('Mantova'), + 'MO' => t('Modena'), + 'MS' => t('Massa-Carrara'), + 'MT' => t('Matera'), + 'NA' => t('Napoli'), + 'NO' => t('Novara'), + 'NU' => t('Nuoro'), + 'OG' => t('Ogliastra'), + 'OR' => t('Oristano'), + 'OT' => t('Olbia-Tempio'), + 'PA' => t('Palermo'), + 'PC' => t('Piacenza'), + 'PD' => t('Padova'), + 'PE' => t('Pescara'), + 'PG' => t('Perugia'), + 'PI' => t('Pisa'), + 'PN' => t('Pordenone'), + 'PO' => t('Prato'), + 'PR' => t('Parma'), + 'PT' => t('Pistoia'), + 'PU' => t('Pesaro e Urbino'), + 'PV' => t('Pavia'), + 'PZ' => t('Potenza'), + 'RA' => t('Ravenna'), + 'RC' => t('Reggio Calabria'), + 'RE' => t('Reggio Emilia'), + 'RG' => t('Ragusa'), + 'RI' => t('Rieti'), + 'RM' => t('Roma'), + 'RN' => t('Rimini'), + 'RO' => t('Rovigo'), + 'SA' => t('Salerno'), + 'SI' => t('Siena'), + 'SO' => t('Sondrio'), + 'SP' => t('La Spezia'), + 'SR' => t('Siracusa'), + 'SS' => t('Sassari'), + 'SV' => t('Savona'), + 'TA' => t('Taranto'), + 'TE' => t('Teramo'), + 'TN' => t('Trento'), + 'TO' => t('Torino'), + 'TP' => t('Trapani'), + 'TR' => t('Terni'), + 'TS' => t('Trieste'), + 'TV' => t('Treviso'), + 'UD' => t('Udine'), + 'VA' => t('Varese'), + 'VB' => t('Verbano-Cusio-Ossola'), + 'VC' => t('Vercelli'), + 'VE' => t('Venezia'), + 'VI' => t('Vicenza'), + 'VR' => t('Verona'), + 'VS' => t('Medio Campidano'), + 'VT' => t('Viterbo'), + 'VV' => t('Vibo Valentia'), + ); + $administrative_areas['JM'] = array( + '13' => 'Clarendon', + '09' => 'Hanover', + '01' => 'Kingston', + '12' => 'Manchester', + '04' => 'Portland', + '02' => 'St. Andrew', + '06' => 'St. Ann', + '14' => 'St. Catherine', + '11' => 'St. Elizabeth', + '08' => 'St. James', + '05' => 'St. Mary', + '03' => 'St. Thomas', + '07' => 'Trelawny', + '10' => 'Westmoreland', + ); + $administrative_areas['JP'] = array( + '01' => t('Hokkaido'), + '02' => t('Aomori'), + '03' => t('Iwate'), + '04' => t('Miyagi'), + '05' => t('Akita'), + '06' => t('Yamagata'), + '07' => t('Fukushima'), + '08' => t('Ibaraki'), + '09' => t('Tochigi'), + '10' => t('Gunma'), + '11' => t('Saitama'), + '12' => t('Chiba'), + '13' => t('Tokyo'), + '14' => t('Kanagawa'), + '15' => t('Niigata'), + '16' => t('Toyama'), + '17' => t('Ishikawa'), + '18' => t('Fukui'), + '19' => t('Yamanashi'), + '20' => t('Nagano'), + '21' => t('Gifu'), + '22' => t('Shizuoka'), + '23' => t('Aichi'), + '24' => t('Mie'), + '25' => t('Shiga'), + '26' => t('Kyoto'), + '27' => t('Osaka'), + '28' => t('Hyogo'), + '29' => t('Nara'), + '30' => t('Wakayama'), + '31' => t('Tottori'), + '32' => t('Shimane'), + '33' => t('Okayama'), + '34' => t('Hiroshima'), + '35' => t('Yamaguchi'), + '36' => t('Tokushima'), + '37' => t('Kagawa'), + '38' => t('Ehime'), + '39' => t('Kochi'), + '40' => t('Fukuoka'), + '41' => t('Saga'), + '42' => t('Nagasaki'), + '43' => t('Kumamoto'), + '44' => t('Oita'), + '45' => t('Miyazaki'), + '46' => t('Kagoshima'), + '47' => t('Okinawa'), + ); + $administrative_areas['KR'] = array( + '11' => t('Seoul'), + '26' => t('Busan'), + '27' => t('Daegu'), + '30' => t('Daejeon'), + '29' => t('Gwangju'), + '28' => t('Incheon'), + '31' => t('Ulsan'), + '43' => t('Chungcheongbuk-do'), + '44' => t('Chungcheongnam-do'), + '42' => t('Gangwon-do'), + '41' => t('Gyeonggi-do'), + '47' => t('Gyeongsangbuk-do'), + '48' => t('Gyeongsangnam-do'), + '49' => t('Jeju-do'), + '45' => t('Jeollabuk-do'), + '46' => t('Jeollanam-do'), + '50' => t('Sejong'), + ); + $administrative_areas['KZ'] = array( + 'AST' => t('Astana'), + 'ALA' => t('Almaty'), + 'ALM' => t('Almaty region'), + 'AKM' => t('Aqmola region'), + 'AKT' => t('Aqtöbe region'), + 'ATY' => t('Atyraū region'), + 'ZAP' => t('Batys Qazaqstan region'), + 'MAN' => t('Mangghystaū region'), + 'YUZ' => t('Ongtüstik Qazaqstan region'), + 'PAV' => t('Pavlodar region'), + 'KAR' => t('Qaraghandy region'), + 'KUS' => t('Qostanay region'), + 'KZY' => t('Qyzylorda region'), + 'VOS' => t('Shyghys Qazaqstan region'), + 'SEV' => t('Soltüstik Qazaqstan region'), + 'ZHA' => t('Zhambyl region'), + ); + $administrative_areas['MX'] = array( + 'AGU' => t('Aguascalientes'), + 'BCN' => t('Baja California'), + 'BCS' => t('Baja California Sur'), + 'CAM' => t('Campeche'), + 'COA' => t('Coahuila'), + 'COL' => t('Colima'), + 'CHP' => t('Chiapas'), + 'CHH' => t('Chihuahua'), + 'DIF' => t('Distrito Federal'), + 'DUG' => t('Durango'), + 'MEX' => t('Estado de México'), + 'GUA' => t('Guanajuato'), + 'GRO' => t('Guerrero'), + 'HID' => t('Hidalgo'), + 'JAL' => t('Jalisco'), + 'MIC' => t('Michoacán'), + 'MOR' => t('Morelos'), + 'NAY' => t('Nayarit'), + 'NLE' => t('Nuevo León'), + 'OAX' => t('Oaxaca'), + 'PUE' => t('Puebla'), + 'QUE' => t('Queretaro'), + 'ROO' => t('Quintana Roo'), + 'SLP' => t('San Luis Potosí'), + 'SIN' => t('Sinaloa'), + 'SON' => t('Sonora'), + 'TAB' => t('Tabasco'), + 'TAM' => t('Tamaulipas'), + 'TLA' => t('Tlaxcala'), + 'VER' => t('Veracruz'), + 'YUC' => t('Yucatán'), + 'ZAC' => t('Zacatecas'), + ); + $administrative_areas['MY'] = array( + '01' => t('Johor'), + '02' => t('Kedah'), + '03' => t('Kelantan'), + '14' => t('Kuala Lumpur'), + '15' => t('Labuan'), + '04' => t('Melaka'), + '05' => t('Negeri Sembilan'), + '06' => t('Pahang'), + '08' => t('Perak'), + '09' => t('Perlis'), + '07' => t('Pulau Pinang'), + '16' => t('Putrajaya'), + '12' => t('Sabah'), + '13' => t('Sarawak'), + '10' => t('Selangor'), + '11' => t('Terengganu'), + ); + $administrative_areas['PE'] = array( + 'AMA' => t('Amazonas'), + 'ANC' => t('Ancash'), + 'APU' => t('Apurimac'), + 'ARE' => t('Arequipa'), + 'AYA' => t('Ayacucho'), + 'CAJ' => t('Cajamarca'), + 'CAL' => t('Callao'), + 'CUS' => t('Cusco'), + 'HUV' => t('Huancavelica'), + 'HUC' => t('Huanuco'), + 'ICA' => t('Ica'), + 'JUN' => t('Junin'), + 'LAL' => t('La Libertad'), + 'LAM' => t('Lambayeque'), + 'LIM' => t('Lima'), + 'LOR' => t('Loreto'), + 'MDD' => t('Madre de Dios'), + 'MOQ' => t('Moquegua'), + 'PAS' => t('Pasco'), + 'PIU' => t('Piura'), + 'PUN' => t('Puno'), + 'SAM' => t('San Martin'), + 'TAC' => t('Tacna'), + 'TUM' => t('Tumbes'), + 'UCA' => t('Ucayali'), + ); + $administrative_areas['RU'] = array( + 'MOW' => t('Moskva'), + 'SPE' => t('Sankt-Peterburg'), + 'AD' => t('Adygeya, Respublika'), + 'AL' => t('Altay, Respublika'), + 'BA' => t('Bashkortostan, Respublika'), + 'BU' => t('Buryatiya, Respublika'), + 'CE' => t('Chechenskaya Respublika'), + 'CU' => t('Chuvashskaya Respublika'), + 'DA' => t('Dagestan, Respublika'), + 'IN' => t('Ingushetiya, Respublika'), + 'KB' => t('Kabardino-Balkarskaya Respublika'), + 'KL' => t('Kalmykiya, Respublika'), + 'KC' => t('Karachayevo-Cherkesskaya Respublika'), + 'KR' => t('Kareliya, Respublika'), + 'KK' => t('Khakasiya, Respublika'), + 'KO' => t('Komi, Respublika'), + 'ME' => t('Mariy El, Respublika'), + 'MO' => t('Mordoviya, Respublika'), + 'SA' => t('Sakha, Respublika [Yakutiya]'), + 'SE' => t('Severnaya Osetiya-Alaniya, Respublika'), + 'TA' => t('Tatarstan, Respublika'), + 'TY' => t('Tyva, Respublika [Tuva]'), + 'UD' => t('Udmurtskaya Respublika'), + 'ALT' => t('Altayskiy kray'), + 'KAM' => t('Kamchatskiy kray'), + 'KHA' => t('Khabarovskiy kray'), + 'KDA' => t('Krasnodarskiy kray'), + 'KYA' => t('Krasnoyarskiy kray'), + 'PER' => t('Permskiy kray'), + 'PRI' => t('Primorskiy kray'), + 'STA' => t('Stavropolskiy kray'), + 'ZAB' => t('Zabaykalskiy kray'), + 'AMU' => t('Amurskaya oblast'), + 'ARK' => t('Arkhangelskaya oblast'), + 'AST' => t('Astrakhanskaya oblast'), + 'BEL' => t('Belgorodskaya oblast'), + 'BRY' => t('Bryanskaya oblast'), + 'CHE' => t('Chelyabinskaya oblast'), + 'IRK' => t('Irkutskaya oblast'), + 'IVA' => t('Ivanovskaya oblast'), + 'KGD' => t('Kaliningradskaya oblast'), + 'KLU' => t('Kaluzhskaya oblast'), + 'KEM' => t('Kemerovskaya oblast'), + 'KIR' => t('Kirovskaya oblast'), + 'KOS' => t('Kostromskaya oblast'), + 'KGN' => t('Kurganskaya oblast'), + 'KRS' => t('Kurskaya oblast'), + 'LEN' => t('Leningradskaya oblast'), + 'LIP' => t('Lipetskaya oblast'), + 'MAG' => t('Magadanskaya oblast'), + 'MOS' => t('Moskovskaya oblast'), + 'MUR' => t('Murmanskaya oblast'), + 'NIZ' => t('Nizhegorodskaya oblast'), + 'NGR' => t('Novgorodskaya oblast'), + 'NVS' => t('Novosibirskaya oblast'), + 'OMS' => t('Omskaya oblast'), + 'ORE' => t('Orenburgskaya oblast'), + 'ORL' => t('Orlovskaya oblast'), + 'PNZ' => t('Penzenskaya oblast'), + 'PSK' => t('Pskovskaya oblast'), + 'ROS' => t('Rostovskaya oblast'), + 'RYA' => t('Ryazanskaya oblast'), + 'SAK' => t('Sakhalinskaya oblast'), + 'SAM' => t('Samarskaya oblast'), + 'SAR' => t('Saratovskaya oblast'), + 'SMO' => t('Smolenskaya oblast'), + 'SVE' => t('Sverdlovskaya oblast'), + 'TAM' => t('Tambovskaya oblast'), + 'TOM' => t('Tomskaya oblast'), + 'TUL' => t('Tulskaya oblast'), + 'TVE' => t('Tverskaya oblast'), + 'TYU' => t('Tyumenskaya oblast'), + 'ULY' => t('Ulyanovskaya oblast'), + 'VLA' => t('Vladimirskaya oblast'), + 'VGG' => t('Volgogradskaya oblast'), + 'VLG' => t('Vologodskaya oblast'), + 'VOR' => t('Voronezhskaya oblast'), + 'YAR' => t('Yaroslavskaya oblast'), + 'YEV' => t('Yevreyskaya avtonomnaya oblast'), + 'CHU' => t('Chukotskiy avtonomnyy okrug'), + 'KHM' => t('Khanty-Mansiyskiy avtonomnyy okrug-Yugra'), + 'NEN' => t('Nenetskiy avtonomnyy okrug'), + 'YAN' => t('Yamalo-Nenetskiy avtonomnyy okrug'), + ); + $administrative_areas['TR'] = array( + '01' => t('Adana'), + '02' => t('Adıyaman'), + '03' => t('Afyon'), + '04' => t('Ağrı'), + '68' => t('Aksaray'), + '05' => t('Amasya'), + '06' => t('Ankara'), + '07' => t('Antalya'), + '75' => t('Ardahan'), + '08' => t('Artvin'), + '09' => t('Aydın'), + '10' => t('Balıkesir'), + '74' => t('Bartın'), + '72' => t('Batman'), + '69' => t('Bayburt'), + '11' => t('Bilecik'), + '12' => t('Bingöl'), + '13' => t('Bitlis'), + '14' => t('Bolu'), + '15' => t('Burdur'), + '16' => t('Bursa'), + '17' => t('Çanakkale'), + '18' => t('Çankırı'), + '19' => t('Çorum'), + '20' => t('Denizli'), + '21' => t('Diyarbakır'), + '81' => t('Düzce'), + '22' => t('Edirne'), + '23' => t('Elazığ'), + '24' => t('Erzincan'), + '25' => t('Erzurum'), + '26' => t('Eskişehir'), + '27' => t('Gaziantep'), + '28' => t('Giresun'), + '29' => t('Gümüşhane'), + '30' => t('Hakkari'), + '31' => t('Hatay'), + '76' => t('Iğdır'), + '32' => t('Isparta'), + '34' => t('İstanbul'), + '35' => t('İzmir'), + '46' => t('Kahramanmaraş'), + '78' => t('Karabük'), + '70' => t('Karaman'), + '36' => t('Kars'), + '37' => t('Kastamonu'), + '38' => t('Kayseri'), + '71' => t('Kırıkkale'), + '39' => t('Kırklareli'), + '40' => t('Kırşehir'), + '79' => t('Kilis'), + '41' => t('Kocaeli'), + '42' => t('Konya'), + '43' => t('Kütahya'), + '44' => t('Malatya'), + '45' => t('Manisa'), + '47' => t('Mardin'), + '33' => t('Mersin'), + '48' => t('Muğla'), + '49' => t('Muş'), + '50' => t('Nevşehir'), + '51' => t('Niğde'), + '52' => t('Ordu'), + '80' => t('Osmaniye'), + '53' => t('Rize'), + '54' => t('Sakarya'), + '55' => t('Samsun'), + '56' => t('Siirt'), + '57' => t('Sinop'), + '58' => t('Sivas'), + '63' => t('Şanlıurfa'), + '73' => t('Şırnak'), + '59' => t('Tekirdağ'), + '60' => t('Tokat'), + '61' => t('Trabzon'), + '62' => t('Tunceli'), + '64' => t('Uşak'), + '65' => t('Van'), + '77' => t('Yalova'), + '66' => t('Yozgat'), + '67' => t('Zonguldak'), + ); + $administrative_areas['TW'] = array( + 'TXG' => t('Taichung City'), + 'TPE' => t('Taipei City'), + 'TTT' => t('Taitung County'), + 'TNN' => t('Tainan City'), + 'ILA' => t('Yilan County'), + 'HUA' => t('Hualien County'), + 'Kinmen County' => t('Kinmen County'), + 'NAN' => t('Nantou County'), + 'PIF' => t('Pingtung County'), + 'MIA' => t('Miaoli County'), + 'TAO' => t('Taoyuan County'), + 'KHH' => t('Kaohsiung City'), + 'KEE' => t('Keelung City'), + 'Lienchiang County' => t('Lienchiang County'), + 'YUN' => t('Yunlin County'), + 'TPQ' => t('New Taipei City'), + 'HSZ' => t('Hsinchu City'), + 'HSQ' => t('Hsinchu County'), + 'CYI' => t('Chiayi City'), + 'CYQ' => t('Chiayi County'), + 'CHA' => t('Changhua County'), + 'PEN' => t('Penghu County'), + ); + $administrative_areas['UA'] = array( + '43' => t('Crimea'), + '05' => t('Vinnyts\'ka oblast'), + '07' => t('Volyns\'ka oblast'), + '12' => t('Dnipropetrovsk Oblast'), + '14' => t('Donetsk Oblast'), + '18' => t('Zhytomyrs\'ka oblast'), + '21' => t('Zakarpats\'ka oblast'), + '23' => t('Zaporiz\'ka oblast'), + '26' => t('Ivano-Frankivs\'ka oblast'), + '30' => t('Kyiv city'), + '30' => t('Kiev Oblast'), + '35' => t('Kirovohrads\'ka oblast'), + '09' => t('Luhans\'ka oblast'), + '46' => t('Lviv Oblast'), + '48' => t('Mykolaivs\'ka oblast'), + '51' => t('Odessa Oblast'), + '53' => t('Poltavs\'ka oblast'), + '56' => t('Rivnens\'ka oblast'), + '40' => t('Sevastopol\' city'), + '59' => t('Sums\'ka oblast'), + '61' => t('Ternopil\'s\'ka oblast'), + '63' => t('Kharkiv Oblast'), + '65' => t('Khersons\'ka oblast'), + '68' => t('Khmel\'nyts\'ka oblast'), + '71' => t('Cherkas\'ka oblast'), + '77' => t('Chernivets\'ka oblast'), + '74' => t('Chernihivs\'ka oblast'), + ); + $administrative_areas['US'] = array( + 'AL' => t('Alabama'), + 'AK' => t('Alaska'), + 'AZ' => t('Arizona'), + 'AR' => t('Arkansas'), + 'CA' => t('California'), + 'CO' => t('Colorado'), + 'CT' => t('Connecticut'), + 'DE' => t('Delaware'), + 'DC' => t('District of Columbia'), + 'FL' => t('Florida'), + 'GA' => t('Georgia'), + 'HI' => t('Hawaii'), + 'ID' => t('Idaho'), + 'IL' => t('Illinois'), + 'IN' => t('Indiana'), + 'IA' => t('Iowa'), + 'KS' => t('Kansas'), + 'KY' => t('Kentucky'), + 'LA' => t('Louisiana'), + 'ME' => t('Maine'), + 'MD' => t('Maryland'), + 'MA' => t('Massachusetts'), + 'MI' => t('Michigan'), + 'MN' => t('Minnesota'), + 'MS' => t('Mississippi'), + 'MO' => t('Missouri'), + 'MT' => t('Montana'), + 'NE' => t('Nebraska'), + 'NV' => t('Nevada'), + 'NH' => t('New Hampshire'), + 'NJ' => t('New Jersey'), + 'NM' => t('New Mexico'), + 'NY' => t('New York'), + 'NC' => t('North Carolina'), + 'ND' => t('North Dakota'), + 'OH' => t('Ohio'), + 'OK' => t('Oklahoma'), + 'OR' => t('Oregon'), + 'PA' => t('Pennsylvania'), + 'RI' => t('Rhode Island'), + 'SC' => t('South Carolina'), + 'SD' => t('South Dakota'), + 'TN' => t('Tennessee'), + 'TX' => t('Texas'), + 'UT' => t('Utah'), + 'VT' => t('Vermont'), + 'VA' => t('Virginia'), + 'WA' => t('Washington'), + 'WV' => t('West Virginia'), + 'WI' => t('Wisconsin'), + 'WY' => t('Wyoming'), + ' ' => t('--'), + 'AA' => t('Armed Forces (Americas)'), + 'AE' => t('Armed Forces (Europe, Canada, Middle East, Africa)'), + 'AP' => t('Armed Forces (Pacific)'), + 'AS' => t('American Samoa'), + 'FM' => t('Federated States of Micronesia'), + 'GU' => t('Guam'), + 'MH' => t('Marshall Islands'), + 'MP' => t('Northern Mariana Islands'), + 'PW' => t('Palau'), + 'PR' => t('Puerto Rico'), + 'VI' => t('Virgin Islands'), + ); + $administrative_areas['VE'] = array( + 'Z' => t('Amazonas'), + 'B' => t('Anzoátegui'), + 'C' => t('Apure'), + 'D' => t('Aragua'), + 'E' => t('Barinas'), + 'F' => t('Bolívar'), + 'G' => t('Carabobo'), + 'H' => t('Cojedes'), + 'Y' => t('Delta Amacuro'), + 'W' => t('Dependencias Federales'), + 'A' => t('Distrito Federal'), + 'I' => t('Falcón'), + 'J' => t('Guárico'), + 'K' => t('Lara'), + 'L' => t('Mérida'), + 'M' => t('Miranda'), + 'N' => t('Monagas'), + 'O' => t('Nueva Esparta'), + 'P' => t('Portuguesa'), + 'R' => t('Sucre'), + 'S' => t('Táchira'), + 'T' => t('Trujillo'), + 'X' => t('Vargas'), + 'U' => t('Yaracuy'), + 'V' => t('Zulia'), + ); + + // Allow other modules to alter the administrative areas. + drupal_alter('addressfield_administrative_areas', $administrative_areas); + + return isset($administrative_areas[$country_code]) ? $administrative_areas[$country_code] : null; +} diff --git a/sites/all/modules/custom/addressfield/addressfield.api.php b/sites/all/modules/custom/addressfield/addressfield.api.php new file mode 100644 index 0000000000..b52b9503ad --- /dev/null +++ b/sites/all/modules/custom/addressfield/addressfield.api.php @@ -0,0 +1,114 @@ + t('Aland'), + 'B' => t('Bland'), + ); +} + +/** + * Allows modules to add arbitrary AJAX commands to the array returned from the + * standard address field widget refresh. + * + * @param &$commands + * The array of AJAX commands used to refresh the address field widget. + * @param $form + * The rebuilt form array. + * @param $form_state + * The form state array from the form. + * + * @see addressfield_standard_widget_refresh() + */ +function hook_addressfield_standard_widget_refresh_alter(&$commands, $form, $form_state) { + // Display an alert message. + $commands[] = ajax_command_alert(t('The address field widget has been updated.')); +} diff --git a/sites/all/modules/custom/addressfield/addressfield.css b/sites/all/modules/custom/addressfield/addressfield.css new file mode 100644 index 0000000000..3d7fd40d27 --- /dev/null +++ b/sites/all/modules/custom/addressfield/addressfield.css @@ -0,0 +1,26 @@ +div.addressfield-container-inline > div.form-item { + float: left; /* LTR */ + margin-right: 1em; /* LTR */ +} + +div.addressfield-container-inline.country-GB > div.form-item { + float: none; + margin-right: auto; /* LTR */ +} + +/* Clear-fix markup for the inline container */ +div.addressfield-container-inline:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} +/* IE6 */ +* html div.addressfield-container-inline { + height: 1%; +} +/* IE7 */ +*:first-child + html div.addressfield-container-inline { + min-height: 1%; +} diff --git a/sites/all/modules/custom/addressfield/addressfield.devel_generate.inc b/sites/all/modules/custom/addressfield/addressfield.devel_generate.inc new file mode 100644 index 0000000000..d3b0a1e919 --- /dev/null +++ b/sites/all/modules/custom/addressfield/addressfield.devel_generate.inc @@ -0,0 +1,66 @@ + ($country == 'NULL') ? NULL : trim($country), + 'administrative_area' => ($administrative_area == 'NULL') ? NULL : trim($administrative_area), + 'sub_administrative_area' => ($sub_administrative_area == 'NULL') ? NULL : trim($sub_administrative_area), + 'locality' => ($locality == 'NULL') ? NULL : trim($locality), + 'dependent_locality' => ($dependent_locality == 'NULL') ? NULL : trim($dependent_locality), + 'postal_code' => ($postal_code == 'NULL') ? NULL : trim($postal_code), + 'thoroughfare' => ($thoroughfare == 'NULL') ? NULL : trim($thoroughfare), + 'premise' => ($premise == 'NULL') ? NULL : trim($premise), + 'sub_premise' => ($sub_premise == 'NULL') ? NULL : trim($sub_premise), + ); + } + } + fclose($handle); + } + } + return $fields; +} diff --git a/sites/all/modules/custom/addressfield/addressfield.feeds.inc b/sites/all/modules/custom/addressfield/addressfield.feeds.inc new file mode 100644 index 0000000000..2b8537adfa --- /dev/null +++ b/sites/all/modules/custom/addressfield/addressfield.feeds.inc @@ -0,0 +1,59 @@ + $instance) { + $info = field_info_field($name); + if ($info['type'] == 'addressfield') { + foreach ($info['columns'] as $sub_field => $schema_info) { + $name_label = $instance['label'] . ': ' . drupal_ucfirst(str_replace('_', ' ', $sub_field)); + $targets[$name . ':' . $sub_field] = array( + 'name' => $name_label, + 'callback' => 'addressfield_set_target', + 'real_target' => $info['field_name'], + 'description' => $schema_info['description'], + ); + } + } + } +} + +/** + * Callback for hook_feeds_processor_targets_alter(). + * + * @param $source + * Field mapper source settings. + * @param $entity + * An entity object, for instance a node object. + * @param $target + * A string identifying the target on the node. + * @param $value + * The value to populate the target with. + */ +function addressfield_set_target($source, $entity, $target, $values) { + list($field_name, $sub_field) = explode(':', $target, 2); + + // Convert the values into an array if it isn't one already to correspond to + // Drupal's handling of field value arrays. + if (!is_array($values)) { + $values = array($values); + } + + // If the field is already set on the given entity, update the existing value + // array. Otherwise start with a fresh field value array. + $field = isset($entity->$field_name) ? $entity->$field_name : array(); + + // Loop over the field values array... + foreach ($values as $delta => $value) { + $field[LANGUAGE_NONE][$delta][$sub_field] = $value; + } + + $entity->$field_name = $field; +} diff --git a/sites/all/modules/custom/addressfield/addressfield.info b/sites/all/modules/custom/addressfield/addressfield.info new file mode 100644 index 0000000000..26d4d238fd --- /dev/null +++ b/sites/all/modules/custom/addressfield/addressfield.info @@ -0,0 +1,17 @@ +name = Address Field +description = Manage a flexible address field, implementing the xNAL standard. +core = 7.x +package = Fields + +dependencies[] = ctools + +files[] = addressfield.migrate.inc +files[] = views/addressfield_views_handler_field_country.inc +files[] = views/addressfield_views_handler_filter_country.inc + +; Information added by Drupal.org packaging script on 2015-01-16 +version = "7.x-1.0" +core = "7.x" +project = "addressfield" +datestamp = "1421426885" + diff --git a/sites/all/modules/custom/addressfield/addressfield.install b/sites/all/modules/custom/addressfield/addressfield.install new file mode 100644 index 0000000000..5e74bc14f6 --- /dev/null +++ b/sites/all/modules/custom/addressfield/addressfield.install @@ -0,0 +1,216 @@ + array( + 'description' => 'Two letter ISO country code of this address.', + 'type' => 'varchar', + 'length' => 2, + 'not null' => FALSE, + 'default' => '', + ), + 'administrative_area' => array( + 'description' => 'The administrative area of this address. (i.e. State/Province)', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'sub_administrative_area' => array( + 'description' => 'The sub administrative area of this address.', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'locality' => array( + 'description' => 'The locality of this address. (i.e. City)', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'dependent_locality' => array( + 'description' => 'The dependent locality of this address.', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'postal_code' => array( + 'description' => 'The postal code of this address.', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'thoroughfare' => array( + 'description' => 'The thoroughfare of this address. (i.e. Street address)', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'premise' => array( + 'description' => 'The premise of this address. (i.e. Apartment / Suite number)', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'sub_premise' => array( + 'description' => 'The sub_premise of this address.', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'organisation_name' => array( + 'description' => 'Contents of a primary OrganisationName element in the xNL XML.', + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + 'default' => '', + ), + 'name_line' => array( + 'description' => 'Contents of a primary NameLine element in the xNL XML.', + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + 'default' => '', + ), + 'first_name' => array( + 'description' => 'Contents of the FirstName element of a primary PersonName element in the xNL XML.', + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + 'default' => '', + ), + 'last_name' => array( + 'description' => 'Contents of the LastName element of a primary PersonName element in the xNL XML.', + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + 'default' => '', + ), + 'data' => array( + 'description' => 'Additional data for this address.', + 'type' => 'text', + 'size' => 'big', + 'not null' => FALSE, + 'serialize' => TRUE, + ), + ); + + return array( + 'columns' => $columns, + // TODO Add indexes. + ); +} + +/** + * Update the field configuration to the new plugin structure. + */ +function addressfield_update_7000() { + // Enable ctools. + if (!module_enable(array('ctools'))) { + throw new Exception('This version of addressfield requires ctools, but it could not be enabled.'); + } + + // Get the list of fields of type 'addressfield'. + $address_fields = array(); + foreach (field_info_fields() as $field_name => $field_info) { + if ($field_info['type'] == 'addressfield') { + $address_fields[$field_name] = $field_name; + } + } + + foreach (field_info_instances() as $entity_type => $bundles) { + foreach ($bundles as $bundle_name => $instances) { + foreach (array_intersect_key($instances, $address_fields) as $field_name => $instance) { + $widget_settings = &$instance['widget']['settings']; + + if ($instance['widget']['type'] == 'addressfield_standard') { + // Default to use the country-based address widget. + $format_handlers = array('address'); + + // Map the old 'name_format' setting to the name and organization widgets. + if (in_array($widget_settings['name_format'], array('name_line_organisation', 'first_last_organisation'))) { + $format_handlers[] = 'organisation'; + } + if (in_array($widget_settings['name_format'], array('name_line', 'name_line_organisation'))) { + $format_handlers[] = 'name-oneline'; + } + else { + $format_handlers[] = 'name-full'; + } + unset($widget_settings['name_format']); + $widget_settings['format_handlers'] = $format_handlers; + } + + // Update displays. + foreach ($instance['display'] as $view_mode => &$view_mode_info) { + $display_settings = &$view_mode_info['settings']; + + if ($view_mode_info['type'] == 'addressfield_default') { + if (isset($widget_settings['format_handlers'])) { + $display_settings['use_widget_handlers'] = 1; + } + else { + // If the widget is non-standard, just use a sane default. + $display_settings['use_widget_handlers'] = 0; + $display_settings['format_handlers'] = array('address', 'name-oneline'); + } + } + else if ($view_mode_info['type'] == 'addressfield_name') { + // Migrate the 'addressfield_name' formatter to the new framework. + $view_mode_info['type'] = 'addressfield_default'; + // Start from the widget configuration. + $display_settings['use_widget_handlers'] = 0; + $display_settings['format_handlers'] = isset($widget_settings['format_handlers']) ? $widget_settings['format_handlers'] : array('address', 'name-oneline'); + + if (empty($display_settings['organisation'])) { + $display_settings['format_handlers'] = array_diff( $display_settings['format_handlers'], array('organisation')); + } + unset($display_settings['organisation']); + } + } + + field_update_instance($instance); + } + } + } +} + +/** + * Sets the value of the new "Default country" setting. + */ +function addressfield_update_7001() { + $address_fields = array(); + foreach (field_info_fields() as $field_name => $field_info) { + if ($field_info['type'] == 'addressfield') { + $address_fields[$field_name] = $field_name; + } + } + + foreach (field_info_instances() as $entity_type => $bundles) { + foreach ($bundles as $bundle_name => $instances) { + foreach (array_intersect_key($instances, $address_fields) as $field_name => $instance) { + // Optional fields get the None default. Required fields get the + // previously selected default country. + $default_country = ''; + if (!empty($instance['required']) && !empty($instance['default_value'])) { + $default_country = $instance['default_value']['country']; + } + + $instance['widget']['settings']['default_country'] = $default_country; + unset($instance['default_value']); + + field_update_instance($instance); + } + } + } +} diff --git a/sites/all/modules/custom/addressfield/addressfield.migrate.inc b/sites/all/modules/custom/addressfield/addressfield.migrate.inc new file mode 100644 index 0000000000..6e74d63f07 --- /dev/null +++ b/sites/all/modules/custom/addressfield/addressfield.migrate.inc @@ -0,0 +1,172 @@ + 2, + 'field handlers' => array('MigrateAddressFieldHandler'), + ); + return $api; +} + +/** + * Primary value passed to this field must be the two letter ISO country code of + * the address. + * + * Arguments are used to specify all the other values: + * 'administrative_area' - The administrative area of this address. (i.e. State/Province) + * 'sub_administrative_area' - The sub administrative area of this address. + * 'locality' - The locality of this address. (i.e. City) + * 'dependent_locality' - The dependent locality of this address. + * 'postal_code' - The postal code of this address. + * 'thoroughfare' - The thoroughfare of this address. (i.e. Street address) + * 'premise' - The premise of this address. (i.e. Apartment / Suite number) + * 'sub_premise' - The sub_premise of this address. + * 'organisation_name' - Contents of a primary OrganisationName element in the xNL XML. + * 'name_line' - Contents of a primary NameLine element in the xNL XML. + * 'first_name' - Contents of the FirstName element of a primary PersonName element in the xNL XML. + * 'last_name' - Contents of the LastName element of a primary PersonName element in the xNL XML. + * 'data' - Additional data for this address. + * + * Add the source field mappings to the argument array then add null mappings to + * avoid having fields flagged as as unmapped: + * @code + * // The country should be passed in as the primary value. + * $this->addFieldMapping('field_address', 'profile_country'); + * $this->addFieldMapping('field_address:thoroughfare', 'profile_address'); + * $this->addFieldMapping('field_address:locality', 'profile_city'); + * $this->addFieldMapping('field_address:administrative_area', 'profile_state'); + * @endcode + */ +class MigrateAddressFieldHandler extends MigrateFieldHandler { + public function __construct() { + $this->registerTypes(array('addressfield')); + } + + /** + * Provide subfields for the addressfield columns. + */ + public function fields() { + // Declare our arguments to also be available as subfields. + $fields = array( + 'administrative_area' => t('The administrative area of ' . + 'this address (i.e. State/Province)', + array('@doc' => 'http://drupal.org/node/1996546#administrative_area')), + 'sub_administrative_area' => t('The sub administrative ' . + 'area of this address', + array('@doc' => 'http://drupal.org/node/1996546#sub_administrative_area')), + 'locality' => t('The locality of this address (i.e. ' . + 'City)', + array('@doc' => 'http://drupal.org/node/1996546#locality')), + 'dependent_locality' => t('The dependent locality of ' . + 'this address', + array('@doc' => 'http://drupal.org/node/1996546#dependent_locality')), + 'postal_code' => t('The postal code of this address', + array('@doc' => 'http://drupal.org/node/1996546#postal_code')), + 'thoroughfare' => t('The thoroughfare of this address ' . + '(i.e. Street address)', + array('@doc' => 'http://drupal.org/node/1996546#thoroughfare')), + 'premise' => t('The premise of this address (i.e. Apartment / Suite number)', + array('@doc' => 'http://drupal.org/node/1996546#premise')), + 'sub_premise' => t('The sub_premise of this address', + array('@doc' => 'http://drupal.org/node/1996546#sub_premise')), + 'organisation_name' => t('Contents of a primary ' . + 'OrganisationName element in the xNL XML', + array('@doc' => 'http://drupal.org/node/1996546#organisation_name')), + 'name_line' => t('Contents of a primary NameLine element ' . + 'in the xNL XML', + array('@doc' => 'http://drupal.org/node/1996546#name_line')), + 'first_name' => t('Contents of the FirstName element of ' . + 'a primary PersonName element in the xNL XML', + array('@doc' => 'http://drupal.org/node/1996546#first_name')), + 'last_name' => t('Contents of the LastName element of a ' . + 'primary PersonName element in the xNL XML', + array('@doc' => 'http://drupal.org/node/1996546#last_name')), + 'data' => t('Additional data for this address', + array('@doc' => 'http://drupal.org/node/1996546#data')), + ); + return $fields; + } + + /** + * Implements MigrateFieldHandler::prepare(). + * + * @param $entity + * @param array $field_info + * @param array $instance + * @param array $values + * + * @return null + */ + public function prepare($entity, array $field_info, array $instance, + array $values) { + $arguments = array(); + if (isset($values['arguments'])) { + $arguments = array_filter($values['arguments']); + unset($values['arguments']); + } + $language = $this->getFieldLanguage($entity, $field_info, $arguments); + + // Setup the standard Field API array for saving. + $delta = 0; + foreach ($values as $value) { + $return[$language][$delta] = array('country' => $value) + + $this->prepareArguments($arguments, $field_info, $delta); + $delta++; + } + + return isset($return) ? $return : NULL; + } + + /** + * Builds an array with additional data for the current $delta. + * + * @param array $arguments + * @param array $field_info + * @param $delta + * + * @return array + */ + protected function prepareArguments(array $arguments, array $field_info, $delta) { + $result = array(); + $data = array(); + + foreach ($arguments as $column_key => $column_value) { + $value = NULL; + + if (is_array($arguments[$column_key])) { + if (!empty($arguments[$column_key][$delta])) { + $value = $arguments[$column_key][$delta]; + } + } + else { + $value = $arguments[$column_key]; + } + + if ($value) { + if (isset($field_info['columns'][$column_key])) { + // Store the data in a seperate column. + $result[$column_key] = $value; + } + else { + // Add the data to the 'data' column. + $data[$column_key] = $value; + } + } + } + + // Store all the other data as a serialized array in the data field. + if (!empty($data)) { + $result['data'] = serialize($data); + } + + return $result; + } +} diff --git a/sites/all/modules/custom/addressfield/addressfield.module b/sites/all/modules/custom/addressfield/addressfield.module new file mode 100644 index 0000000000..81082c2e30 --- /dev/null +++ b/sites/all/modules/custom/addressfield/addressfield.module @@ -0,0 +1,893 @@ + TRUE, + ); + return $plugins; +} + +/** + * Implements hook_views_api(). + */ +function addressfield_views_api() { + return array( + 'api' => 3, + 'path' => drupal_get_path('module', 'addressfield') . '/views', + ); +} + +/** + * Implements hook_module_implements_alter(). + * + * Moves the hook_token_info_alter() implementation to the bottom so it is + * invoked after all modules implementing the same hook. + */ +function addressfield_module_implements_alter(&$implementations, $hook) { + if ($hook == 'token_info_alter') { + // Make sure that the $implementations list is populated before altering it, + // to work around a crash experienced by some people (#2181001). + if (isset($implementations['addressfield'])) { + $group = $implementations['addressfield']; + unset($implementations['addressfield']); + $implementations['addressfield'] = $group; + } + } +} + +/** + * Returns TRUE if a field map array value represents an addressfield. + * + * Provided for use as a callback by array_filter(). + */ +function addressfield_field_map_filter($field) { + return !empty($field['type']) && $field['type'] == 'addressfield'; +} + +/** + * Get the list of format plugins. + */ +function addressfield_format_plugins() { + ctools_include('plugins'); + $plugins = ctools_get_plugins('addressfield', 'format'); + uasort($plugins, 'ctools_plugin_sort'); + + return $plugins; +} + +/** + * Get the list of format plugins in a format suitable for #options. + */ +function addressfield_format_plugins_options() { + $options = array(); + foreach (addressfield_format_plugins() as $widget => $info) { + $options[$widget] = check_plain($info['title']); + } + return $options; +} + +/** + * @defgroup addressfield_format Address format API + * @{ + * API for generating address forms and display formats. + * + * Addresses forms and display formats are collaboratively generated by one or + * more format handler plugins. An address with a name and a company, for example, + * will be generated by three handlers: + * - 'address' that will generate the country, locality, street blocks + * - 'organisation' that will add the organisation block to the address + * - 'name-full' that will add a first name and last name block to the address + * + * A format handler is a CTools plugin of type 'addressfield' / 'format'. Each + * handler is passed the format in turn, and can add to or modify the format. + * + * The format itself is a renderable array stub. This stub will be transformed + * into either a Form API array suitable for use as part of a form or into a + * renderable array suitable for use with drupal_render(). The following + * modifications are done: + * - when rendering as a form, every element which name (its key in the array) + * is a valid addressfield column (see addressfield_field_schema()), will + * be transformed into a form element, either using a type explicitly + * defined in '#widget_type' or using 'select' if '#options' is set or + * 'textfield' if it is not. In addition, the '#default_value' of every + * field will be populated from the address being edited. + * - when rendering as a formatter, every element which name (its key in the array) + * is a valid addressfield column (see addressfield_field_schema()), will + * be transformed into a renderable element, either using a type explicitly + * defined in '#render_type' or else using 'addressfield_container'. When + * the type is 'addressfield_container' the element will be rendered as + * an HTML element set by '#tag' (default: span). + */ + +/** + * Generate a format for a given address. + * + * @param $address + * The address format being generated. + * @param $handlers + * The format handlers to use to generate the format. + * @param $context + * An associative array of context information pertaining to how the address + * format should be generated. If no mode is given, it will initialize to the + * default value. The remaining context keys should only be present when the + * address format is being generated for a field: + * - mode: either 'form' or 'render'; defaults to 'render'. + * - field: the field info array. + * - instance: the field instance array. + * - langcode: the langcode of the language the field is being rendered in. + * - delta: the delta value of the given address. + * + * @return + * A renderable array suitable for use as part of a form (if 'mode' is 'form') + * or for formatted address output when passed to drupal_render(). + */ +function addressfield_generate($address, array $handlers, array $context = array()) { + // If no mode is given in the context array, default it to 'render'. + if (empty($context['mode'])) { + $context['mode'] = 'render'; + } + + ctools_include('plugins'); + $format = array(); + // Add the handlers, ordered by weight. + $plugins = addressfield_format_plugins(); + $format['#handlers'] = array_intersect(array_keys($plugins), $handlers); + + foreach ($format['#handlers'] as $handler) { + if ($callback = ctools_plugin_load_function('addressfield', 'format', $handler, 'format callback')) { + $callback($format, $address, $context); + } + } + + // Store the address in the format, for processing. + $format['#address'] = $address; + + // Post-process the format stub, depending on the rendering mode. + if ($context['mode'] == 'form') { + $format['#addressfield'] = TRUE; + $format['#process'][] = 'addressfield_process_format_form'; + } + elseif ($context['mode'] == 'render') { + $format['#pre_render'][] = 'addressfield_render_address'; + } + + return $format; +} + +/** + * Generate a full-fledged form from a format snippet, as returned by addressfield_formats(). + */ +function addressfield_process_format_form($format, &$form_state, $complete_form) { + // Make sure to load all the plugins that participated in this format. + ctools_include('plugins'); + foreach ($format['#handlers'] as $handler) { + ctools_plugin_load_function('addressfield', 'format', $handler, 'format callback'); + } + + _addressfield_process_format_form($format, $format['#address']); + return $format; +} + +function _addressfield_process_format_form(&$format, $address) { + foreach (element_children($format) as $key) { + $child = &$format[$key]; + + // Automatically convert any element in the format array to an appropriate + // form element that matches one of the address component names. + if (in_array($key, array('name_line', 'first_name', 'last_name', 'organisation_name', 'country', 'administrative_area', 'sub_administrative_area', 'locality', 'dependent_locality', 'postal_code', 'thoroughfare', 'premise', 'sub_premise'))) { + // Set the form element type for the address component to whatever the + // address format specified in its #widget_type property. + if (isset($child['#widget_type'])) { + $child['#type'] = $child['#widget_type']; + } + else { + // If the element didn't specify a #widget_type and has options, turn it + // into a select list and unset its #size value, which is typically used + // to provide the width of a textfield. + if (isset($child['#options'])) { + $child['#type'] = 'select'; + unset($child['#size']); + } + else { + // Otherwise go ahead and make it a textfield. + $child['#type'] = 'textfield'; + } + } + + if (isset($address[$key])) { + $child['#default_value'] = $address[$key]; + } + } + + // Recurse through the element's children if it has any. + _addressfield_process_format_form($child, $address); + } +} + +/** + * Render an address in a given format. + */ +function addressfield_render_address($format) { + _addressfield_render_address($format, $format['#address']); + return $format; +} + +function _addressfield_render_address(&$format, $address) { + foreach (element_children($format) as $key) { + $child = &$format[$key]; + + // Automatically expand elements that match one of the fields of the address + // structure. + if (in_array($key, array('name_line', 'first_name', 'last_name', 'organisation_name', 'country', 'administrative_area', 'sub_administrative_area', 'locality', 'dependent_locality', 'postal_code', 'thoroughfare', 'premise', 'sub_premise'), TRUE)) { + if (isset($child['#render_type'])) { + $child['#type'] = $child['#render_type']; + } + else { + $child['#type'] = 'addressfield_container'; + if (!isset($child['#tag'])) { + $child['#tag'] = 'span'; + } + } + + // If the element instructs us to render the option value instead of the + // raw address element value and its #options array has a matching key, + // swap it out for the option value now. + if (!empty($child['#render_option_value']) && isset($address[$key]) && isset($child['#options'][$address[$key]])) { + $child['#children'] = check_plain($child['#options'][$address[$key]]); + } + elseif (isset($address[$key])) { + $child['#children'] = check_plain($address[$key]); + } + else { + $child['#children'] = ''; + } + + // Skip empty elements. + if ((string) $child['#children'] === '') { + $child['#access'] = FALSE; + } + + // Add #field_prefix and #field_suffix to the prefixes and suffixes. + if (isset($child['#field_prefix'])) { + $child['#prefix'] = (isset($child['#prefix']) ? $child['#prefix'] : '') . $child['#field_prefix']; + } + if (isset($child['#field_suffix'])) { + $child['#suffix'] = (isset($child['#suffix']) ? $child['#suffix'] : '') . $child['#field_suffix']; + } + } + + // Recurse through the child. + _addressfield_render_address($child, $address); + } +} + +/** + * @} End of "ingroup addressfield_format" + */ + +/** + * Implementation of hook_theme(). + */ +function addressfield_theme() { + $hooks['addressfield_container'] = array( + 'render element' => 'element', + ); + return $hooks; +} + +/** + * Render a container for a set of address fields. + */ +function theme_addressfield_container($variables) { + $element = $variables['element']; + $element['#children'] = trim($element['#children']); + // Remove the autocomplete attributes because the W3C validator complains. + // They are only used on forms anyway. + unset($element['#attributes']['autocomplete']); + unset($element['#attributes']['x-autocompletetype']); + + if (strlen($element['#children']) > 0) { + $output = '<' . $element['#tag'] . drupal_attributes($element['#attributes']) . '>'; + $output .= $element['#children']; + $output .= '"; + return $output; + } + else { + return ''; + } +} + +/** + * Implementation of hook_element_info(). + */ +function addressfield_element_info() { + $types['addressfield_container'] = array( + '#theme_wrappers' => array('addressfield_container'), + '#process' => array('addressfield_widget_process'), + '#attributes' => array(), + '#tag' => 'div', + ); + return $types; +} + +/** + * Form API process function: set the #parents of the children of this element so they appear at the same level as the parent. + */ +function addressfield_widget_process($element) { + foreach (element_children($element) as $key) { + $element[$key]['#parents'] = $element['#parents']; + $element[$key]['#parents'][count($element[$key]['#parents']) - 1] = $key; + } + + return $element; +} + +/** + * Implements hook_field_info() + */ +function addressfield_field_info() { + $fields = array(); + + $fields['addressfield'] = array( + 'label' => t('Postal address'), + 'description' => t('A field type used for storing postal addresses according the xNAL standard.'), + 'settings' => array(), + 'instance_settings' => array(), + 'default_widget' => 'addressfield_standard', + 'default_formatter' => 'addressfield_default', + 'property_type' => 'addressfield', + 'property_callbacks' => array('addressfield_property_info_callback'), + ); + + return $fields; +} + +/** + * Returns an array of default values for the addressfield form elements. + * + * @param $field + * The field array. + * @param $instance + * The instance array. + * @param $address + * The current address values, if known. Allows for per-country defaults. + * + * @return + * An array of default values. + */ +function addressfield_default_values($field, $instance, array $address = array()) { + $available_countries = _addressfield_country_options_list($field, $instance); + $default_country = $instance['widget']['settings']['default_country']; + // If the default country is not in the list of available countries, + // fallback to the first country in the list. + if ($default_country && !isset($available_countries[$default_country])) { + $default_country = key($available_countries); + } + + $default_values = array( + 'country' => $default_country, + 'name_line' => '', + 'first_name' => '', + 'last_name' => '', + 'organisation_name' => '', + 'administrative_area' => '', + 'sub_administrative_area' => '', + 'locality' => '', + 'dependent_locality' => '', + 'postal_code' => '', + 'thoroughfare' => '', + 'premise' => '', + 'sub_premise' => '', + 'data' => '', + ); + + // Allow other modules to alter the default values. + $context = array( + 'field' => $field, + 'instance' => $instance, + 'address' => $address, + ); + drupal_alter('addressfield_default_values', $default_values, $context); + + return $default_values; +} + +/** + * Implements hook_field_is_empty(). + */ +function addressfield_field_is_empty($item, $field) { + // Every address field must have at least a country value or it is considered + // empty, even if it has name information. + return empty($item['country']); +} + +/** + * Implements hook_field_presave(). + */ +function addressfield_field_presave($entity_type, $entity, $field, $instance, $langcode, &$items) { + foreach ($items as $delta => &$item) { + // If the first name and last name are set but the name line isn't... + if (isset($item['first_name']) && isset($item['last_name']) && !isset($item['name_line'])) { + // Combine the first and last name to be the name line. + $items[$delta]['name_line'] = $items[$delta]['first_name'] . ' ' . $items[$delta]['last_name']; + } + elseif (isset($item['name_line'])) { + // Otherwise if the name line is set, separate it out into a best guess at + // the first and last name. + $names = explode(' ', $item['name_line']); + + $item['first_name'] = array_shift($names); + $item['last_name'] = implode(' ', $names); + } + + // Trim whitespace from all of the address components and convert any double + // spaces to single spaces. + foreach ($item as $key => &$value) { + if (!in_array($key, array('data')) && is_string($value)) { + $value = trim(str_replace(' ', ' ', $value)); + } + } + } +} + +/** + * Implements hook_field_widget_info() + */ +function addressfield_field_widget_info() { + $widgets = array(); + + $widgets['addressfield_standard'] = array( + 'label' => t('Dynamic address form'), + 'field types' => array('addressfield'), + 'settings' => array( + 'available_countries' => array(), + 'default_country' => '', + 'format_handlers' => array('address'), + ), + ); + + return $widgets; +} + +/** + * Implements hook_field_widget_settings_form() + */ +function addressfield_field_widget_settings_form($field, $instance) { + $widget = $instance['widget']; + $defaults = field_info_widget_settings($widget['type']); + $settings = array_merge($defaults, $widget['settings']); + $form = array(); + + if ($widget['type'] == 'addressfield_standard') { + $form['available_countries'] = array( + '#type' => 'select', + '#multiple' => TRUE, + '#title' => t('Available countries'), + '#description' => t('If no countries are selected, all countries will be available.'), + '#options' => _addressfield_country_options_list(), + '#default_value' => $settings['available_countries'], + ); + $form['default_country'] = array( + '#type' => 'select', + '#title' => t('Default country'), + '#options' => _addressfield_country_options_list(), + '#default_value' => $settings['default_country'], + '#empty_value' => '', + ); + $form['format_handlers'] = array( + '#type' => 'checkboxes', + '#title' => t('Format handlers'), + '#options' => addressfield_format_plugins_options(), + '#default_value' => $settings['format_handlers'], + ); + } + + return $form; +} + +/** + * Implements hook_form_BASE_FORM_ID_alter(). + * + * Removes the default values form from the field settings page. + * Allows the module to implement its own, more predictable default value + * handling, getting around #1253820 and other bugs. + */ +function addressfield_form_field_ui_field_edit_form_alter(&$form, $form_state) { + if ($form['#field']['type'] == 'addressfield') { + $form['instance']['default_value_widget']['#access'] = FALSE; + } +} + +/** + * Implements hook_field_widget_form() + */ +function addressfield_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $settings = $instance['widget']['settings']; + + $address = array(); + // If the form has been rebuilt via AJAX, use the form state values. + // $form_state['values'] is empty because of #limit_validation_errors, so + // $form_state['input'] needs to be used instead. + $parents = array_merge($element['#field_parents'], array($element['#field_name'], $langcode, $delta)); + $input_address = drupal_array_get_nested_value($form_state['input'], $parents); + if (!empty($input_address)) { + $address = $input_address; + } + elseif (!empty($items[$delta]['country'])) { + // Else use the saved value for the field. + $address = $items[$delta]; + } + + // Determine the list of available countries, and if the currently selected + // country is not in it, unset it so it can be reset to the default country. + $countries = _addressfield_country_options_list($field, $instance); + if (!empty($address['country']) && !isset($countries[$address['country']])) { + unset($address['country']); + } + + // Merge in default values. + $address += addressfield_default_values($field, $instance, $address); + + // Add the form elements for the standard widget, which includes a country + // select list at the top that reloads the available address elements when the + // country is changed. + if ($instance['widget']['type'] == 'addressfield_standard') { + // Wrap everything in a fieldset. This is not the best looking element, + // but it's the only wrapper available in Drupal we can properly use + // in that context, and it is overridable if necessary. + $element['#type'] = 'fieldset'; + + if (!empty($instance['description'])) { + // Checkout panes convert the fieldset into a container, causing + // #description to not be rendered. Hence, a real element is added and + // the old #description is removed. + $element['#description'] = ''; + $element['element_description'] = array( + '#markup' => $instance['description'], + '#prefix' => '
', + '#suffix' => '
', + '#weight' => -999, + ); + } + + // Generate the address form. + $context = array( + 'mode' => 'form', + 'field' => $field, + 'instance' => $instance, + 'langcode' => $langcode, + 'delta' => $delta, + ); + $element += addressfield_generate($address, $settings['format_handlers'], $context); + + // Remove any already saved default value. + // See addressfield_form_field_ui_field_edit_form_alter() for the reasoning. + if ($form_state['build_info']['form_id'] == 'field_ui_field_edit_form') { + $element['#address'] = array('country' => ''); + } + } + + return $element; +} + +/** + * Element validate callback: rebuilds the form on country change. + */ +function addressfield_standard_country_validate($element, &$form_state) { + if ($element['#default_value'] != $element['#value']) { + $parents = $element['#parents']; + array_pop($parents); + $address = drupal_array_get_nested_value($form_state['values'], $parents); + + // Clear the country-specific field values. + $country_specific_data = array( + 'dependent_locality' => '', + 'locality' => '', + 'administrative_area' => '', + 'postal_code' => '', + ); + $address = array_diff_key($address, $country_specific_data); + + drupal_array_set_nested_value($form_state['values'], $parents, $address); + drupal_array_set_nested_value($form_state['input'], $parents, $address); + + $form_state['rebuild'] = TRUE; + } +} + +/** + * Ajax callback in response to a change of country in an address field. + * + * The only thing we have to do is to find the proper element to render. + */ +function addressfield_standard_widget_refresh($form, $form_state) { + // The target element is one element below the triggering country selector. + $array_parents = $form_state['triggering_element']['#array_parents']; + array_pop($array_parents); + + // Iterate over the form parents to find the element. + $element = $form; + foreach ($array_parents as $name) { + $element = &$element[$name]; + if (!empty($element['#addressfield'])) { + break; + } + } + + // Return the address block, but remove the '_weight' element inserted + // by the field API. + unset($element['_weight']); + + // Replace the address field widget with the updated widget and focus on the + // new country select list. + $commands[] = ajax_command_replace(NULL, render($element)); + $commands[] = ajax_command_invoke('#' . $element['country']['#id'], 'focus'); + // Add the status messages inside the new addressfield's wrapper element, + // just like core does. + $commands[] = ajax_command_prepend(NULL, theme('status_messages')); + + // Allow other modules to add arbitrary AJAX commands on the refresh. + drupal_alter('addressfield_standard_widget_refresh', $commands, $form, $form_state); + + return array('#type' => 'ajax', '#commands' => $commands); +} + +/** + * Implements hook_field_formatter_info(). + */ +function addressfield_field_formatter_info() { + return array( + 'addressfield_default' => array( + 'label' => t('Default'), + 'field types' => array('addressfield'), + 'settings' => array( + 'use_widget_handlers' => 1, + 'format_handlers' => array('address'), + ), + ), + ); +} + +/** + * Implements hook_field_formatter_settings_form(). + */ +function addressfield_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) { + $display = $instance['display'][$view_mode]; + $settings = $display['settings']; + + $element['use_widget_handlers'] = array( + '#type' => 'checkbox', + '#title' => t('Use the same configuration as the widget.'), + '#default_value' => !empty($settings['use_widget_handlers']), + ); + + $element['format_handlers'] = array( + '#type' => 'checkboxes', + '#title' => t('Format handlers'), + '#options' => addressfield_format_plugins_options(), + '#default_value' => $settings['format_handlers'], + '#process' => array('form_process_checkboxes', '_addressfield_field_formatter_settings_form_process_add_state'), + '#element_validate' => array('_addressfield_field_formatter_settings_form_validate') + ); + + return $element; +} + +/** + * Helper function: set the proper #states to the use widget handlers checkbox. + */ +function _addressfield_field_formatter_settings_form_process_add_state($element, $form_state) { + // Build a #parents based on the current checkbox. + $target_parents = array_slice($element['#parents'], 0, -1); + $target_parents[] = 'use_widget_handlers'; + $target_parents = array_shift($target_parents) . ($target_parents ? '[' . implode('][', $target_parents) . ']' : ''); + + $element['#states']['visible'] = array( + ':input[name="' . $target_parents . '"]' => array('checked' => FALSE), + ); + + return $element; +} + +/** + * Helper function: filter the results of the checkboxes form element. + */ +function _addressfield_field_formatter_settings_form_validate($element, &$element_state) { + form_set_value($element, array_filter($element['#value']), $element_state); +} + +/** + * Implements hook_field_formatter_settings_summary(). + */ +function addressfield_field_formatter_settings_summary($field, $instance, $view_mode) { + $display = $instance['display'][$view_mode]; + $settings = $display['settings']; + + $summary = ''; + + if ($settings['use_widget_handlers']) { + return t('Use widget configuration'); + } + else { + $summary = array(); + $plugins = addressfield_format_plugins(); + foreach ($settings['format_handlers'] as $handler) { + $summary[] = $plugins[$handler]['title']; + } + return $summary ? implode(', ', $summary) : t('No handler'); + } +} + +/** + * Implements hook_field_formatter_view(). + */ +function addressfield_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) { + $settings = $display['settings']; + $element = array(); + + switch ($display['type']) { + case 'addressfield_default': + if (!empty($settings['use_widget_handlers'])) { + $handlers = $instance['widget']['settings']['format_handlers']; + } + else { + $handlers = $settings['format_handlers']; + } + foreach ($items as $delta => $address) { + // Generate the address format. + $context = array( + 'mode' => 'render', + 'field' => $field, + 'instance' => $instance, + 'langcode' => $langcode, + 'delta' => $delta, + ); + $element[$delta] = addressfield_generate($address, $handlers, $context); + } + break; + } + + return $element; +} + +/** + * Callback to alter the property info of address fields. + * + * @see addressfield_field_info(). + */ +function addressfield_property_info_callback(&$info, $entity_type, $field, $instance, $field_type) { + $name = $field['field_name']; + $property = &$info[$entity_type]['bundles'][$instance['bundle']]['properties'][$name]; + + $property['type'] = ($field['cardinality'] != 1) ? 'list' : 'addressfield'; + $property['getter callback'] = 'entity_metadata_field_verbatim_get'; + $property['setter callback'] = 'entity_metadata_field_verbatim_set'; + $property['auto creation'] = 'addressfield_auto_creation'; + $property['property info'] = addressfield_data_property_info(); + + unset($property['query callback']); +} + +/** + * Auto creation callback for an addressfield value array. + * + * @see addressfield_property_info_callback() + */ +function addressfield_auto_creation($property_name, $context) { + return addressfield_default_values($context['field'], $context['instance']); +} + +/** + * Defines info for the properties of the address field data structure. + */ +function addressfield_data_property_info($name = NULL) { + // Build an array of basic property information for the address field. + $properties = array( + 'country' => array( + 'label' => t('Country'), + 'options list' => '_addressfield_country_options_list', + ), + 'name_line' => array( + 'label' => t('Full name'), + ), + 'first_name' => array( + 'label' => t('First name'), + ), + 'last_name' => array( + 'label' => t('Last name'), + ), + 'organisation_name' => array( + 'label' => t('Company'), + ), + 'administrative_area' => array( + 'label' => t('Administrative area (i.e. State / Province)'), + ), + 'sub_administrative_area' => array( + 'label' => t('Sub administrative area'), + ), + 'locality' => array( + 'label' => t('Locality (i.e. City)'), + ), + 'dependent_locality' => array( + 'label' => t('Dependent locality'), + ), + 'postal_code' => array( + 'label' => t('Postal code'), + ), + 'thoroughfare' => array( + 'label' => t('Thoroughfare (i.e. Street address)'), + ), + 'premise' => array( + 'label' => t('Premise (i.e. Apartment / Suite number)'), + ), + 'sub_premise' => array( + 'label' => t('Sub Premise (i.e. Suite, Apartment, Floor, Unknown.'), + ), + ); + + // Add the default values for each of the address field properties. + foreach ($properties as $key => &$value) { + $value += array( + 'description' => !empty($name) ? t('!label of field %name', array('!label' => $value['label'], '%name' => $name)) : '', + 'type' => 'text', + 'getter callback' => 'entity_property_verbatim_get', + 'setter callback' => 'entity_property_verbatim_set', + ); + } + + return $properties; +} + +/** + * Returns the country list in a format suitable for use as an options list. + */ +function _addressfield_country_options_list($field = NULL, $instance = NULL) { + if (module_exists('countries')) { + $countries = countries_get_countries('name', array('enabled' => COUNTRIES_ENABLED)); + } + else { + require_once DRUPAL_ROOT . '/includes/locale.inc'; + $countries = country_get_list(); + } + + if (isset($field)) { + // If the instance is not specified, loop against all the instances of the field. + if (!isset($instance)) { + $instances = array(); + foreach ($field['bundles'] as $entity_type => $bundles) { + foreach ($bundles as $bundle_name) { + $instances[] = field_info_instance($entity_type, $field['field_name'], $bundle_name); + } + } + } + else { + $instances = array($instance); + } + + foreach ($instances as $instance) { + if (!empty($instance['widget']['settings']['available_countries'])) { + $countries = array_intersect_key($countries, $instance['widget']['settings']['available_countries']); + break; + } + } + } + + return $countries; +} diff --git a/sites/all/modules/custom/addressfield/addressfield.tokens.inc b/sites/all/modules/custom/addressfield/addressfield.tokens.inc new file mode 100644 index 0000000000..1c91e53184 --- /dev/null +++ b/sites/all/modules/custom/addressfield/addressfield.tokens.inc @@ -0,0 +1,233 @@ + t('Address field'), + 'description' => t('Tokens related to address field values and their components.'), + 'needs-data' => 'address-field', + 'field' => TRUE, + ); + + // Define tokens for the various components of addresses supported through the + // user interface along with two helper tokens for country and administrative + // area to distinguish between names and abbreviations. + $info['country'] = array( + 'name' => t('Country name'), + 'description' => t('The full name of the country.'), + ); + $info['country-code'] = array( + 'name' => t('Country code'), + 'description' => t('The two letter ISO country code.'), + ); + $info['administrative-area'] = array( + 'name' => t('Administrative area (i.e. State/Province)'), + 'description' => t('The administrative area value, expanded to the full name if applicable.'), + ); + $info['administrative-area-raw'] = array( + 'name' => t('Administrative area (raw value)'), + 'description' => t('The raw administrative area value.'), + ); + $info['locality'] = array( + 'name' => t('Locality (i.e. City)'), + 'description' => t('The locality value.'), + ); + $info['postal-code'] = array( + 'name' => t('Postal code'), + 'description' => t('The postal code value.'), + ); + $info['thoroughfare'] = array( + 'name' => t('Thoroughfare (i.e. Street address)'), + 'description' => t('The thoroughfare value.'), + ); + $info['premise'] = array( + 'name' => t('Premise (i.e. Street address)'), + 'description' => t('The premise value.'), + ); + $info['sub_premise'] = array( + 'name' => t('Sub Premise (i.e. Suite, Apartment, Floor, Unknown.)'), + 'description' => t('The sub premise value.'), + ); + $info['organisation'] = array( + 'name' => t('Organisation'), + 'description' => t('The organisation name value.'), + ); + $info['name-line'] = array( + 'name' => t('Full name'), + 'description' => t('The name line value of the address.'), + ); + $info['first-name'] = array( + 'name' => t('First name'), + 'description' => t('The first name value.'), + ); + $info['last-name'] = array( + 'name' => t('Last name'), + 'description' => t('The last name value.'), + ); + + // Add a helper token to format addresses as expected by MailChimp. + $info['format-mailchimp'] = array( + 'name' => t('Address formatted for MailChimp'), + 'description' => t('The full address formatted for import into MailChimp.'), + ); + + return array( + 'types' => array('address-field' => $type), + 'tokens' => array('address-field' => $info), + ); +} + +/** + * Implements hook_token_info_alter(). + */ +function addressfield_token_info_alter(&$data) { + // Loop over every address field on the site. + foreach (array_filter(field_info_field_map(), 'addressfield_field_map_filter') as $field_name => $field) { + foreach ($data['tokens'] as $group => $token){ + if (isset($data['tokens'][$group][$field_name]) && is_array($data['tokens'][$group][$field_name])) { + // Set the token type for the field to use the addressfield child tokens. + $data['tokens'][$group][$field_name]['type'] = 'address-field'; + } + } + } +} + +/** + * Implements hook_tokens(). + */ +function addressfield_tokens($type, $tokens, array $data = array(), array $options = array()) { + if (isset($options['language'])) { + $language_code = $options['language']->language; + } + else { + $language_code = LANGUAGE_NONE; + } + + $sanitize = !empty($options['sanitize']); + + $replacements = array(); + + // If we're generating tokens for an address field, extract the address data + // from the field value array and generate the necessary replacements. + if ($type == 'address-field' && !empty($data['address-field'][$language_code]) && is_array($data['address-field'][$language_code])) { + $address = reset($data['address-field'][$language_code]); + + foreach ($tokens as $name => $original) { + switch ($name) { + case 'country': + $countries = _addressfield_country_options_list(); + $replacements[$original] = $sanitize ? check_plain($countries[$address['country']]) : $countries[$address['country']]; + break; + + case 'country-code': + $replacements[$original] = $sanitize ? check_plain($address['country']) : $address['country']; + break; + + case 'administrative-area': + // If we received format handlers in the data array, generate the form + // for the address field to see if the administrative area should be + // expanded from an abbreviation to a related name. + $administrative_area = $address['administrative_area']; + + if (!empty($data['format_handlers'])) { + $form = addressfield_generate($address, $data['format_handlers'], array('mode' => 'form')); + + if (!empty($form['locality_block']['administrative_area']['#options'][$administrative_area])) { + $administrative_area = $form['locality_block']['administrative_area']['#options'][$administrative_area]; + } + } + + $replacements[$original] = $sanitize ? check_plain($administrative_area) : $administrative_area; + break; + + case 'administrative-area-raw': + $replacements[$original] = $sanitize ? check_plain($address['administrative_area']) : $address['administrative_area']; + break; + + case 'locality': + $replacements[$original] = $sanitize ? check_plain($address['locality']) : $address['locality']; + break; + + case 'postal-code': + $replacements[$original] = $sanitize ? check_plain($address['postal_code']) : $address['postal_code']; + break; + + case 'thoroughfare': + $replacements[$original] = $sanitize ? check_plain($address['thoroughfare']) : $address['thoroughfare']; + break; + + case 'premise': + $replacements[$original] = $sanitize ? check_plain($address['premise']) : $address['premise']; + break; + + case 'sub_premise': + $replacements[$original] = $sanitize ? check_plain($address['sub_premise']) : $address['sub_premise']; + break; + + case 'organisation': + $replacements[$original] = $sanitize ? check_plain($address['organisation_name']) : $address['organisation_name']; + break; + + case 'name-line': + $replacements[$original] = $sanitize ? check_plain($address['name_line']) : $address['name_line']; + break; + + case 'first-name': + $replacements[$original] = $sanitize ? check_plain($address['first_name']) : $address['first_name']; + break; + + case 'last-name': + $replacements[$original] = $sanitize ? check_plain($address['last_name']) : $address['last_name']; + break; + + // See: http://kb.mailchimp.com/article/how-do-i-format-my-list-fields-to-import-them + case 'format-mailchimp': + $components = array(); + + foreach (array('thoroughfare', 'premise', 'locality', 'administrative_area', 'postal_code', 'country') as $component) { + if (!empty($address[$component])) { + $components[] = $address[$component]; + } + } + + $format_mailchimp = implode(' ', $components); + $replacements[$original] = $sanitize ? check_plain($format_mailchimp) : $format_mailchimp; + break; + } + } + } + + // The Token module extends direct token generation by using a generic entity + // token generation process. Since we intend to overwrite the default Token + // module implementation of address field tokens, we use this generic token + // generation process to find and replace address field tokens on relevant + // entities. This ensures our tokens aren't overwritten by the Token module + // and helps us avoid having to do the entity detection ourselves. + if ($type == 'entity') { + // Loop over the address fields defined on the site. + foreach (array_filter(field_info_field_map(), 'addressfield_field_map_filter') as $field_name => $field) { + // If there are any address field tokens in the token list... + if ($addressfield_tokens = token_find_with_prefix($tokens, $field_name)) { + // If the current field is on the matching entity type... + if (!empty($field['bundles'][$data['entity_type']])) { + // Extract the format handlers selected in a representative instance + // settings form for use in formatting tokens. + $instance = field_info_instance($data['entity_type'], $field_name, reset($field['bundles'][$data['entity_type']])); + $format_handlers = $instance['widget']['settings']['format_handlers']; + } + + // Generate the necessary address field tokens for the entity. + $replacements += token_generate('address-field', $addressfield_tokens, array('address-field' => $data['entity']->$field_name, 'format_handlers' => $format_handlers), $options); + } + } + } + + return $replacements; +} diff --git a/sites/all/modules/custom/addressfield/example/addressfield_example.info b/sites/all/modules/custom/addressfield/example/addressfield_example.info new file mode 100644 index 0000000000..2e68b51fb7 --- /dev/null +++ b/sites/all/modules/custom/addressfield/example/addressfield_example.info @@ -0,0 +1,15 @@ +name = Address Field Example +description = Example module for how to implement an addressfield format handler. +core = 7.x +package = Fields +hidden = TRUE + +dependencies[] = ctools +dependencies[] = addressfield + +; Information added by Drupal.org packaging script on 2015-01-16 +version = "7.x-1.0" +core = "7.x" +project = "addressfield" +datestamp = "1421426885" + diff --git a/sites/all/modules/custom/addressfield/example/addressfield_example.module b/sites/all/modules/custom/addressfield/example/addressfield_example.module new file mode 100644 index 0000000000..453b625996 --- /dev/null +++ b/sites/all/modules/custom/addressfield/example/addressfield_example.module @@ -0,0 +1,10 @@ + t('Address form (CH add-on)'), + 'format callback' => 'addressfield_format_address_ch_generate', + 'type' => 'address', + 'weight' => -80, +); + +function addressfield_format_address_ch_generate(&$format, $address, $context = array()) { + if ($address['country'] == 'CH' && $context['mode'] == 'form') { + $format['locality_block']['postal_code']['#wrapper_id'] = $format['#wrapper_id']; + $format['locality_block']['postal_code']['#process'][] = 'ajax_process_form'; + $format['locality_block']['postal_code']['#process'][] = 'addressfield_format_address_ch_postal_code_process'; + + $format['locality_block']['postal_code']['#element_validate'] = array('addressfield_form_ch_postal_code_validation'); + $format['locality_block']['postal_code']['#ajax'] = array( + 'callback' => 'addressfield_standard_widget_refresh', + 'wrapper' => $format['#wrapper_id'], + ); + } + else { + if (isset($format['locality_block']['postal_code'])) { + // Cancel the AJAX for forms we don't control. + $format['locality_block']['postal_code']['#ajax'] = array(); + } + } +} + +function addressfield_format_address_ch_postal_code_process($element) { + $element['#limit_validation_errors'] = array($element['#parents']); + + return $element; +} + +function addressfield_form_ch_postal_code_validation($element, &$form_state, &$form) { + $data = array( + '1000' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1001' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1002' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1003' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1004' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1005' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1006' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1007' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1008' => array('town' => 'Prilly', 'canton' => 'VD'), + '1009' => array('town' => 'Pully', 'canton' => 'VD'), + '1010' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1011' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1012' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1014' => array('town' => 'Lausanne Adm cant', 'canton' => 'VD'), + '1015' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1018' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1020' => array('town' => 'Renens VD', 'canton' => 'VD'), + '1022' => array('town' => 'Chavannes-Renens', 'canton' => 'VD'), + '1023' => array('town' => 'Crissier', 'canton' => 'VD'), + '1024' => array('town' => 'Ecublens VD', 'canton' => 'VD'), + '1025' => array('town' => 'St-Sulpice VD', 'canton' => 'VD'), + '1026' => array('town' => 'Echandens-Denges', 'canton' => 'VD'), + '1027' => array('town' => 'Lonay', 'canton' => 'VD'), + '1028' => array('town' => 'Préverenges', 'canton' => 'VD'), + '1030' => array('town' => 'Bussigny-Lausanne', 'canton' => 'VD'), + '1032' => array('town' => 'Romanel-s-Lausanne', 'canton' => 'VD'), + '1033' => array('town' => 'Cheseaux-Lausanne', 'canton' => 'VD'), + '1037' => array('town' => 'Etagnières', 'canton' => 'VD'), + '1038' => array('town' => 'Bercher', 'canton' => 'VD'), + '1040' => array('town' => 'Echallens', 'canton' => 'VD'), + '1377' => array('town' => 'Oulens-Echallens', 'canton' => 'VD'), + '1042' => array('town' => 'Bettens', 'canton' => 'VD'), + '1417' => array('town' => 'Epautheyres', 'canton' => 'VD'), + '1041' => array('town' => 'Dommartin', 'canton' => 'VD'), + '1063' => array('town' => 'Peyres-Possens', 'canton' => 'VD'), + '1053' => array('town' => 'Bretigny-Morrens', 'canton' => 'VD'), + '1034' => array('town' => 'Boussens', 'canton' => 'VD'), + '1035' => array('town' => 'Bournens', 'canton' => 'VD'), + '1036' => array('town' => 'Sullens', 'canton' => 'VD'), + '1043' => array('town' => 'Sugnens', 'canton' => 'VD'), + '1044' => array('town' => 'Fey', 'canton' => 'VD'), + '1045' => array('town' => 'Ogens', 'canton' => 'VD'), + '1407' => array('town' => 'Bioley-Magnoux', 'canton' => 'VD'), + '1052' => array('town' => 'Mont-sur-Lausanne', 'canton' => 'VD'), + '1054' => array('town' => 'Morrens VD', 'canton' => 'VD'), + '1055' => array('town' => 'Froideville', 'canton' => 'VD'), + '1410' => array('town' => 'Thierrens', 'canton' => 'VD'), + '1066' => array('town' => 'Epalinges', 'canton' => 'VD'), + '1073' => array('town' => 'Savigny', 'canton' => 'VD'), + '1083' => array('town' => 'Mézières VD', 'canton' => 'VD'), + '1092' => array('town' => 'Belmont-Lausanne', 'canton' => 'VD'), + '1093' => array('town' => 'La Conversion', 'canton' => 'VD'), + '1094' => array('town' => 'Paudex', 'canton' => 'VD'), + '1095' => array('town' => 'Lutry', 'canton' => 'VD'), + '1096' => array('town' => 'Cully', 'canton' => 'VD'), + '1097' => array('town' => 'Riex', 'canton' => 'VD'), + '1098' => array('town' => 'Epesses', 'canton' => 'VD'), + '1058' => array('town' => 'Villars-Tiercelin', 'canton' => 'VD'), + '1059' => array('town' => 'Peney-le-Jorat', 'canton' => 'VD'), + '1061' => array('town' => 'Villars-Mendraz', 'canton' => 'VD'), + '1062' => array('town' => 'Sottens', 'canton' => 'VD'), + '1080' => array('town' => 'Les Cullayes', 'canton' => 'VD'), + '1081' => array('town' => 'Montpreveyres', 'canton' => 'VD'), + '1082' => array('town' => 'Corcelles-le-Jorat', 'canton' => 'VD'), + '1088' => array('town' => 'Ropraz', 'canton' => 'VD'), + '1084' => array('town' => 'Carrouge VD', 'canton' => 'VD'), + '1085' => array('town' => 'Vulliens', 'canton' => 'VD'), + '1509' => array('town' => 'Vucherens', 'canton' => 'VD'), + '1510' => array('town' => 'Syens', 'canton' => 'VD'), + '1076' => array('town' => 'Ferlens VD', 'canton' => 'VD'), + '1077' => array('town' => 'Servion', 'canton' => 'VD'), + '1078' => array('town' => 'Essertes', 'canton' => 'VD'), + '1673' => array('town' => 'Auboranges', 'canton' => 'FR'), + '1110' => array('town' => 'Morges', 'canton' => 'VD'), + '1112' => array('town' => 'Echichens', 'canton' => 'VD'), + '1167' => array('town' => 'Lussy-sur-Morges', 'canton' => 'VD'), + '1132' => array('town' => 'Lully VD', 'canton' => 'VD'), + '1131' => array('town' => 'Tolochenaz', 'canton' => 'VD'), + '1125' => array('town' => 'Monnaz', 'canton' => 'VD'), + '1126' => array('town' => 'Vaux-sur-Morges', 'canton' => 'VD'), + '1127' => array('town' => 'Clarmont', 'canton' => 'VD'), + '1128' => array('town' => 'Reverolle', 'canton' => 'VD'), + '1113' => array('town' => 'St-Saphorin-Morges', 'canton' => 'VD'), + '1114' => array('town' => 'Colombier VD', 'canton' => 'VD'), + '1115' => array('town' => 'Vullierens', 'canton' => 'VD'), + '1116' => array('town' => 'Cottens VD', 'canton' => 'VD'), + '1117' => array('town' => 'Grancy', 'canton' => 'VD'), + '1304' => array('town' => 'Senarclens', 'canton' => 'VD'), + '1121' => array('town' => 'Bremblens', 'canton' => 'VD'), + '1122' => array('town' => 'Romanel-sur-Morges', 'canton' => 'VD'), + '1123' => array('town' => 'Aclens', 'canton' => 'VD'), + '1124' => array('town' => 'Gollion', 'canton' => 'VD'), + '1134' => array('town' => 'Vufflens-Château', 'canton' => 'VD'), + '1135' => array('town' => 'Denens', 'canton' => 'VD'), + '1136' => array('town' => 'Bussy-Chardonney', 'canton' => 'VD'), + '1169' => array('town' => 'Yens', 'canton' => 'VD'), + '1168' => array('town' => 'Villars-sous-Yens', 'canton' => 'VD'), + '1144' => array('town' => 'Ballens', 'canton' => 'VD'), + '1149' => array('town' => 'Berolle', 'canton' => 'VD'), + '1146' => array('town' => 'Mollens VD', 'canton' => 'VD'), + '1147' => array('town' => 'Montricher', 'canton' => 'VD'), + '1142' => array('town' => 'Pampigny', 'canton' => 'VD'), + '1141' => array('town' => 'Sévery', 'canton' => 'VD'), + '1143' => array('town' => 'Apples', 'canton' => 'VD'), + '1145' => array('town' => 'Bière', 'canton' => 'VD'), + '1148' => array('town' => 'L\'Isle', 'canton' => 'VD'), + '1162' => array('town' => 'St-Prex', 'canton' => 'VD'), + '1163' => array('town' => 'Etoy', 'canton' => 'VD'), + '1164' => array('town' => 'Buchillon', 'canton' => 'VD'), + '1165' => array('town' => 'Allaman', 'canton' => 'VD'), + '1166' => array('town' => 'Perroy', 'canton' => 'VD'), + '1170' => array('town' => 'Aubonne', 'canton' => 'VD'), + '1172' => array('town' => 'Bougy-Villars', 'canton' => 'VD'), + '1173' => array('town' => 'Féchy', 'canton' => 'VD'), + '1174' => array('town' => 'Montherod', 'canton' => 'VD'), + '1175' => array('town' => 'Lavigny', 'canton' => 'VD'), + '1176' => array('town' => 'St-Livres', 'canton' => 'VD'), + '1180' => array('town' => 'Rolle', 'canton' => 'VD'), + '1182' => array('town' => 'Gilly', 'canton' => 'VD'), + '1183' => array('town' => 'Bursins', 'canton' => 'VD'), + '1184' => array('town' => 'Vinzel', 'canton' => 'VD'), + '1185' => array('town' => 'Mont-sur-Rolle', 'canton' => 'VD'), + '1186' => array('town' => 'Essertines-Rolle', 'canton' => 'VD'), + '1187' => array('town' => 'St-Oyens', 'canton' => 'VD'), + '1189' => array('town' => 'Saubraz', 'canton' => 'VD'), + '1188' => array('town' => 'Gimel', 'canton' => 'VD'), + '1195' => array('town' => 'Dully-Bursinel', 'canton' => 'VD'), + '1196' => array('town' => 'Gland', 'canton' => 'VD'), + '1197' => array('town' => 'Prangins', 'canton' => 'VD'), + '1200' => array('town' => 'Genève', 'canton' => 'GE'), + '1201' => array('town' => 'Genève', 'canton' => 'GE'), + '1202' => array('town' => 'Genève', 'canton' => 'GE'), + '1203' => array('town' => 'Genève', 'canton' => 'GE'), + '1204' => array('town' => 'Genève', 'canton' => 'GE'), + '1205' => array('town' => 'Genève', 'canton' => 'GE'), + '1206' => array('town' => 'Genève', 'canton' => 'GE'), + '1207' => array('town' => 'Genève', 'canton' => 'GE'), + '1208' => array('town' => 'Genève', 'canton' => 'GE'), + '1209' => array('town' => 'Genève', 'canton' => 'GE'), + '1211' => array('town' => 'Genève 1', 'canton' => 'GE'), + '1212' => array('town' => 'Grand-Lancy', 'canton' => 'GE'), + '1213' => array('town' => 'Petit-Lancy', 'canton' => 'GE'), + '1214' => array('town' => 'Vernier', 'canton' => 'GE'), + '1215' => array('town' => 'Genève', 'canton' => 'GE'), + '1216' => array('town' => 'Cointrin', 'canton' => 'GE'), + '1217' => array('town' => 'Meyrin', 'canton' => 'GE'), + '1218' => array('town' => 'Le Grand-Saconnex', 'canton' => 'GE'), + '1219' => array('town' => 'Le Lignon', 'canton' => 'GE'), + '1220' => array('town' => 'Les Avanchets', 'canton' => 'GE'), + '1222' => array('town' => 'Vésenaz', 'canton' => 'GE'), + '1223' => array('town' => 'Cologny', 'canton' => 'GE'), + '1224' => array('town' => 'Chêne-Bougeries', 'canton' => 'GE'), + '1225' => array('town' => 'Chêne-Bourg', 'canton' => 'GE'), + '1226' => array('town' => 'Thônex', 'canton' => 'GE'), + '1227' => array('town' => 'Carouge GE', 'canton' => 'GE'), + '1228' => array('town' => 'Plan-les-Ouates', 'canton' => 'GE'), + '1231' => array('town' => 'Conches', 'canton' => 'GE'), + '1232' => array('town' => 'Confignon', 'canton' => 'GE'), + '1233' => array('town' => 'Bernex', 'canton' => 'GE'), + '1234' => array('town' => 'Vessy', 'canton' => 'GE'), + '1236' => array('town' => 'Cartigny', 'canton' => 'GE'), + '1237' => array('town' => 'Avully', 'canton' => 'GE'), + '1239' => array('town' => 'Collex', 'canton' => 'GE'), + '1241' => array('town' => 'Puplinge', 'canton' => 'GE'), + '1242' => array('town' => 'Satigny', 'canton' => 'GE'), + '1243' => array('town' => 'Presinge', 'canton' => 'GE'), + '1244' => array('town' => 'Choulex', 'canton' => 'GE'), + '1245' => array('town' => 'Collonge-Bellerive', 'canton' => 'GE'), + '1246' => array('town' => 'Corsier GE', 'canton' => 'GE'), + '1247' => array('town' => 'Anières', 'canton' => 'GE'), + '1248' => array('town' => 'Hermance', 'canton' => 'GE'), + '1251' => array('town' => 'Gy', 'canton' => 'GE'), + '1252' => array('town' => 'Meinier', 'canton' => 'GE'), + '1253' => array('town' => 'Vandoeuvres', 'canton' => 'GE'), + '1254' => array('town' => 'Jussy', 'canton' => 'GE'), + '1255' => array('town' => 'Veyrier', 'canton' => 'GE'), + '1256' => array('town' => 'Troinex', 'canton' => 'GE'), + '1257' => array('town' => 'La Croix-de-Rozon', 'canton' => 'GE'), + '1258' => array('town' => 'Perly', 'canton' => 'GE'), + '1260' => array('town' => 'Nyon', 'canton' => 'VD'), + '1277' => array('town' => 'Borex', 'canton' => 'VD'), + '1278' => array('town' => 'La Rippe', 'canton' => 'VD'), + '1279' => array('town' => 'Chavannes-de-Bogis', 'canton' => 'VD'), + '1274' => array('town' => 'Grens', 'canton' => 'VD'), + '1275' => array('town' => 'Chéserex', 'canton' => 'VD'), + '1276' => array('town' => 'Gingins', 'canton' => 'VD'), + '1270' => array('town' => 'Trélex', 'canton' => 'VD'), + '1271' => array('town' => 'Givrins', 'canton' => 'VD'), + '1272' => array('town' => 'Genolier', 'canton' => 'VD'), + '1273' => array('town' => 'Le Muids', 'canton' => 'VD'), + '1268' => array('town' => 'Burtigny', 'canton' => 'VD'), + '1261' => array('town' => 'Marchissy', 'canton' => 'VD'), + '1269' => array('town' => 'Bassins', 'canton' => 'VD'), + '1262' => array('town' => 'Eysins', 'canton' => 'VD'), + '1263' => array('town' => 'Crassier', 'canton' => 'VD'), + '1264' => array('town' => 'St-Cergue', 'canton' => 'VD'), + '1265' => array('town' => 'La Cure', 'canton' => 'VD'), + '1266' => array('town' => 'Duillier', 'canton' => 'VD'), + '1267' => array('town' => 'Vich-Coinsins', 'canton' => 'VD'), + '1281' => array('town' => 'Russin', 'canton' => 'GE'), + '1283' => array('town' => 'Dardagny', 'canton' => 'GE'), + '1284' => array('town' => 'Chancy', 'canton' => 'GE'), + '1285' => array('town' => 'Athenaz (Avusy)', 'canton' => 'GE'), + '1286' => array('town' => 'Soral', 'canton' => 'GE'), + '1287' => array('town' => 'Laconnex', 'canton' => 'GE'), + '1288' => array('town' => 'Aire-la-Ville', 'canton' => 'GE'), + '1290' => array('town' => 'Versoix', 'canton' => 'GE'), + '1291' => array('town' => 'Commugny', 'canton' => 'VD'), + '1292' => array('town' => 'Chambésy', 'canton' => 'GE'), + '1293' => array('town' => 'Bellevue', 'canton' => 'GE'), + '1294' => array('town' => 'Genthod', 'canton' => 'GE'), + '1295' => array('town' => 'Mies-Tannay', 'canton' => 'VD'), + '1296' => array('town' => 'Coppet', 'canton' => 'VD'), + '1297' => array('town' => 'Founex', 'canton' => 'VD'), + '1298' => array('town' => 'Céligny', 'canton' => 'GE'), + '1299' => array('town' => 'Crans-près-Céligny', 'canton' => 'VD'), + '1302' => array('town' => 'Vufflens-la-Ville', 'canton' => 'VD'), + '1307' => array('town' => 'Lussery-Villars', 'canton' => 'VD'), + '1305' => array('town' => 'Penthalaz', 'canton' => 'VD'), + '1315' => array('town' => 'La Sarraz', 'canton' => 'VD'), + '1317' => array('town' => 'Orny', 'canton' => 'VD'), + '1316' => array('town' => 'Chevilly', 'canton' => 'VD'), + '1337' => array('town' => 'Vallorbe', 'canton' => 'VD'), + '1338' => array('town' => 'Ballaigues', 'canton' => 'VD'), + '1341' => array('town' => 'Orient', 'canton' => 'VD'), + '1346' => array('town' => 'Les Bioux', 'canton' => 'VD'), + '1344' => array('town' => 'L\'Abbaye', 'canton' => 'VD'), + '1342' => array('town' => 'Le Pont', 'canton' => 'VD'), + '1343' => array('town' => 'Les Charbonnières', 'canton' => 'VD'), + '1345' => array('town' => 'Le Lieu', 'canton' => 'VD'), + '1347' => array('town' => 'Le Sentier', 'canton' => 'VD'), + '1348' => array('town' => 'Le Brassus', 'canton' => 'VD'), + '1306' => array('town' => 'Daillens', 'canton' => 'VD'), + '1303' => array('town' => 'Penthaz', 'canton' => 'VD'), + '1308' => array('town' => 'La Chaux-Cossonay', 'canton' => 'VD'), + '1313' => array('town' => 'Ferreyres', 'canton' => 'VD'), + '1321' => array('town' => 'Arnex-sur-Orbe', 'canton' => 'VD'), + '1318' => array('town' => 'Pompaples', 'canton' => 'VD'), + '1312' => array('town' => 'Eclépens', 'canton' => 'VD'), + '1329' => array('town' => 'Bretonnières', 'canton' => 'VD'), + '1322' => array('town' => 'Croy', 'canton' => 'VD'), + '1323' => array('town' => 'Romainmôtier', 'canton' => 'VD'), + '1324' => array('town' => 'Premier', 'canton' => 'VD'), + '1325' => array('town' => 'Vaulion', 'canton' => 'VD'), + '1326' => array('town' => 'Juriens', 'canton' => 'VD'), + '1350' => array('town' => 'Orbe', 'canton' => 'VD'), + '1352' => array('town' => 'Agiez', 'canton' => 'VD'), + '1353' => array('town' => 'Bofflens', 'canton' => 'VD'), + '1354' => array('town' => 'Montcherand', 'canton' => 'VD'), + '1355' => array('town' => 'L\'Abergement', 'canton' => 'VD'), + '1356' => array('town' => 'Les Clées', 'canton' => 'VD'), + '1357' => array('town' => 'Lignerolle', 'canton' => 'VD'), + '1358' => array('town' => 'Valeyres-Rances', 'canton' => 'VD'), + '1439' => array('town' => 'Rances', 'canton' => 'VD'), + '1373' => array('town' => 'Chavornay', 'canton' => 'VD'), + '1372' => array('town' => 'Bavois', 'canton' => 'VD'), + '1374' => array('town' => 'Corcelles-Chavorn', 'canton' => 'VD'), + '1375' => array('town' => 'Penthéréaz', 'canton' => 'VD'), + '1376' => array('town' => 'Goumoens-la-Ville', 'canton' => 'VD'), + '1400' => array('town' => 'Yverdon-les-Bains', 'canton' => 'VD'), + '1401' => array('town' => 'Yverdon-les-Bains', 'canton' => 'VD'), + '1416' => array('town' => 'Pailly', 'canton' => 'VD'), + '1418' => array('town' => 'Vuarrens', 'canton' => 'VD'), + '1420' => array('town' => 'Fiez', 'canton' => 'VD'), + '1421' => array('town' => 'Fontaines-Grandson', 'canton' => 'VD'), + '1423' => array('town' => 'Villars-Burquin', 'canton' => 'VD'), + '1453' => array('town' => 'Mauborget', 'canton' => 'VD'), + '1429' => array('town' => 'Giez', 'canton' => 'VD'), + '1430' => array('town' => 'Orges', 'canton' => 'VD'), + '1431' => array('town' => 'Vugelles-La Mothe', 'canton' => 'VD'), + '1405' => array('town' => 'Pomy', 'canton' => 'VD'), + '1406' => array('town' => 'Cronay', 'canton' => 'VD'), + '1408' => array('town' => 'Prahins', 'canton' => 'VD'), + '1409' => array('town' => 'Chanéaz', 'canton' => 'VD'), + '1412' => array('town' => 'Valeyres-Ursins', 'canton' => 'VD'), + '1413' => array('town' => 'Orzens', 'canton' => 'VD'), + '1046' => array('town' => 'Rueyres', 'canton' => 'VD'), + '1404' => array('town' => 'Cuarny', 'canton' => 'VD'), + '1427' => array('town' => 'Bonvillars', 'canton' => 'VD'), + '1424' => array('town' => 'Champagne', 'canton' => 'VD'), + '1415' => array('town' => 'Molondin', 'canton' => 'VD'), + '1422' => array('town' => 'Grandson', 'canton' => 'VD'), + '1425' => array('town' => 'Onnens VD', 'canton' => 'VD'), + '1426' => array('town' => 'Concise', 'canton' => 'VD'), + '1432' => array('town' => 'Belmont-Yverdon', 'canton' => 'VD'), + '1433' => array('town' => 'Suchy', 'canton' => 'VD'), + '1434' => array('town' => 'Ependes VD', 'canton' => 'VD'), + '1435' => array('town' => 'Essert-Pittet', 'canton' => 'VD'), + '1436' => array('town' => 'Treycovagnes', 'canton' => 'VD'), + '1437' => array('town' => 'Suscévaz', 'canton' => 'VD'), + '1438' => array('town' => 'Mathod', 'canton' => 'VD'), + '1441' => array('town' => 'Valeyres-Montagny', 'canton' => 'VD'), + '1442' => array('town' => 'Montagny-Yverdon', 'canton' => 'VD'), + '1443' => array('town' => 'Champvent', 'canton' => 'VD'), + '1445' => array('town' => 'Vuiteboeuf', 'canton' => 'VD'), + '1446' => array('town' => 'Baulmes', 'canton' => 'VD'), + '1450' => array('town' => 'Ste-Croix', 'canton' => 'VD'), + '1454' => array('town' => 'L\'Auberson', 'canton' => 'VD'), + '1452' => array('town' => 'Les Rasses', 'canton' => 'VD'), + '1462' => array('town' => 'Yvonand', 'canton' => 'VD'), + '1463' => array('town' => 'Rovray', 'canton' => 'VD'), + '1464' => array('town' => 'Chavannes-le-Chêne', 'canton' => 'VD'), + '1468' => array('town' => 'Cheyres', 'canton' => 'FR'), + '1470' => array('town' => 'Estavayer-le-Lac', 'canton' => 'FR'), + '1473' => array('town' => 'Font', 'canton' => 'FR'), + '1474' => array('town' => 'Châbles FR', 'canton' => 'FR'), + '1483' => array('town' => 'Montet (Broye)', 'canton' => 'FR'), + '1482' => array('town' => 'Cugy FR', 'canton' => 'FR'), + '1541' => array('town' => 'Bussy FR', 'canton' => 'FR'), + '1484' => array('town' => 'Aumont', 'canton' => 'FR'), + '1485' => array('town' => 'Nuvilly', 'canton' => 'FR'), + '1486' => array('town' => 'Vuissens', 'canton' => 'FR'), + '1537' => array('town' => 'Champtauroz', 'canton' => 'VD'), + '1538' => array('town' => 'Treytorrens-Payern', 'canton' => 'VD'), + '1489' => array('town' => 'Murist', 'canton' => 'FR'), + '1512' => array('town' => 'Chavannes-s-Moudon', 'canton' => 'VD'), + '1513' => array('town' => 'Hermenches', 'canton' => 'VD'), + '1514' => array('town' => 'Bussy-sur-Moudon', 'canton' => 'VD'), + '1522' => array('town' => 'Oulens-sur-Lucens', 'canton' => 'VD'), + '1515' => array('town' => 'Villars-le-Comte', 'canton' => 'VD'), + '1521' => array('town' => 'Curtilles', 'canton' => 'VD'), + '1523' => array('town' => 'Granges-Marnand', 'canton' => 'VD'), + '1527' => array('town' => 'Villeneuve FR', 'canton' => 'FR'), + '1528' => array('town' => 'Surpierre', 'canton' => 'FR'), + '1529' => array('town' => 'Cheiry', 'canton' => 'FR'), + '1530' => array('town' => 'Payerne', 'canton' => 'VD'), + '1532' => array('town' => 'Fétigny', 'canton' => 'FR'), + '1533' => array('town' => 'Ménières', 'canton' => 'FR'), + '1534' => array('town' => 'Sassel', 'canton' => 'VD'), + '1536' => array('town' => 'Combremont-Petit', 'canton' => 'VD'), + '1526' => array('town' => 'Forel-sur-Lucens', 'canton' => 'VD'), + '1542' => array('town' => 'Rueyres-les-Prés', 'canton' => 'FR'), + '1543' => array('town' => 'Grandcour', 'canton' => 'VD'), + '1544' => array('town' => 'Gletterens', 'canton' => 'FR'), + '1545' => array('town' => 'Chevroux', 'canton' => 'VD'), + '1551' => array('town' => 'Vers-chez-Perrin', 'canton' => 'VD'), + '1552' => array('town' => 'Trey', 'canton' => 'VD'), + '1553' => array('town' => 'Châtonnaye', 'canton' => 'FR'), + '1554' => array('town' => 'Sédeilles', 'canton' => 'VD'), + '1555' => array('town' => 'Villarzel', 'canton' => 'VD'), + '1682' => array('town' => 'Villars-Bramard', 'canton' => 'VD'), + '1535' => array('town' => 'Combremont-Grand', 'canton' => 'VD'), + '1562' => array('town' => 'Corcelles-Payerne', 'canton' => 'VD'), + '1563' => array('town' => 'Dompierre FR', 'canton' => 'FR'), + '1564' => array('town' => 'Domdidier', 'canton' => 'FR'), + '1565' => array('town' => 'Missy', 'canton' => 'VD'), + '1475' => array('town' => 'Autavaux', 'canton' => 'FR'), + '1567' => array('town' => 'Delley', 'canton' => 'FR'), + '1568' => array('town' => 'Portalban', 'canton' => 'FR'), + '1566' => array('town' => 'St-Aubin FR', 'canton' => 'FR'), + '1580' => array('town' => 'Avenches', 'canton' => 'VD'), + '1582' => array('town' => 'Donatyre', 'canton' => 'VD'), + '1583' => array('town' => 'Villarepos', 'canton' => 'FR'), + '1584' => array('town' => 'Villars-le-Grand', 'canton' => 'VD'), + '1585' => array('town' => 'Salavaux', 'canton' => 'VD'), + '1586' => array('town' => 'Vallamand', 'canton' => 'VD'), + '1587' => array('town' => 'Montmagny', 'canton' => 'VD'), + '1589' => array('town' => 'Chabrey', 'canton' => 'VD'), + '1588' => array('town' => 'Cudrefin', 'canton' => 'VD'), + '1595' => array('town' => 'Faoug', 'canton' => 'VD'), + '1607' => array('town' => 'Palézieux-Village', 'canton' => 'VD'), + '1610' => array('town' => 'Châtillens', 'canton' => 'VD'), + '1525' => array('town' => 'Henniez', 'canton' => 'VD'), + '1524' => array('town' => 'Marnand', 'canton' => 'VD'), + '1090' => array('town' => 'La Croix (Lutry)', 'canton' => 'VD'), + '1091' => array('town' => 'Grandvaux', 'canton' => 'VD'), + '1070' => array('town' => 'Puidoux-Gare', 'canton' => 'VD'), + '1071' => array('town' => 'Chexbres', 'canton' => 'VD'), + '1072' => array('town' => 'Forel (Lavaux)', 'canton' => 'VD'), + '1614' => array('town' => 'Granges (Veveyse)', 'canton' => 'FR'), + '1615' => array('town' => 'Bossonnens', 'canton' => 'FR'), + '1616' => array('town' => 'Attalens', 'canton' => 'FR'), + '1617' => array('town' => 'Remaufens', 'canton' => 'FR'), + '1618' => array('town' => 'Châtel-St-Denis', 'canton' => 'FR'), + '1619' => array('town' => 'Les Paccots', 'canton' => 'FR'), + '1623' => array('town' => 'Semsales', 'canton' => 'FR'), + '1624' => array('town' => 'La Verrerie', 'canton' => 'FR'), + '1627' => array('town' => 'Vaulruz', 'canton' => 'FR'), + '1628' => array('town' => 'Vuadens', 'canton' => 'FR'), + '1630' => array('town' => 'Bulle', 'canton' => 'FR'), + '1633' => array('town' => 'Vuippens', 'canton' => 'FR'), + '1642' => array('town' => 'Sorens', 'canton' => 'FR'), + '1643' => array('town' => 'Gumefens', 'canton' => 'FR'), + '1644' => array('town' => 'Avry-devant-Pont', 'canton' => 'FR'), + '1645' => array('town' => 'Le Bry', 'canton' => 'FR'), + '1646' => array('town' => 'Echarlens', 'canton' => 'FR'), + '1647' => array('town' => 'Corbières', 'canton' => 'FR'), + '1648' => array('town' => 'Hauteville', 'canton' => 'FR'), + '1656' => array('town' => 'Im Fang', 'canton' => 'FR'), + '1657' => array('town' => 'Abländschen', 'canton' => 'BE'), + '1654' => array('town' => 'Cerniat FR', 'canton' => 'FR'), + '1651' => array('town' => 'Villarvolard', 'canton' => 'FR'), + '1652' => array('town' => 'Botterens', 'canton' => 'FR'), + '1638' => array('town' => 'Morlon', 'canton' => 'FR'), + '1663' => array('town' => 'Moléson-s-Gruyères', 'canton' => 'FR'), + '1632' => array('town' => 'Riaz', 'canton' => 'FR'), + '1634' => array('town' => 'La Roche FR', 'canton' => 'FR'), + '1649' => array('town' => 'Pont-la-Ville', 'canton' => 'FR'), + '1635' => array('town' => 'La Tour-de-Trême', 'canton' => 'FR'), + '1636' => array('town' => 'Broc', 'canton' => 'FR'), + '1637' => array('town' => 'Charmey (Gruyère)', 'canton' => 'FR'), + '1661' => array('town' => 'Pâquier-Montbarry', 'canton' => 'FR'), + '1665' => array('town' => 'Estavannens', 'canton' => 'FR'), + '1667' => array('town' => 'Enney', 'canton' => 'FR'), + '1669' => array('town' => 'Neirivue', 'canton' => 'FR'), + '1666' => array('town' => 'Grandvillard', 'canton' => 'FR'), + '1675' => array('town' => 'Vauderens', 'canton' => 'FR'), + '1670' => array('town' => 'Ursy', 'canton' => 'FR'), + '1674' => array('town' => 'Vuarmarens', 'canton' => 'FR'), + '1678' => array('town' => 'Siviriez', 'canton' => 'FR'), + '1679' => array('town' => 'Villaraboud', 'canton' => 'FR'), + '1676' => array('town' => 'Chavannes-Forts', 'canton' => 'FR'), + '1677' => array('town' => 'Prez-vers-Siviriez', 'canton' => 'FR'), + '1680' => array('town' => 'Romont FR', 'canton' => 'FR'), + '1681' => array('town' => 'Billens', 'canton' => 'FR'), + '1683' => array('town' => 'Brenles', 'canton' => 'VD'), + '1694' => array('town' => 'Orsonnens', 'canton' => 'FR'), + '1695' => array('town' => 'Villarlod', 'canton' => 'FR'), + '1696' => array('town' => 'Vuisternens-Ogoz', 'canton' => 'FR'), + '1684' => array('town' => 'Mézières FR', 'canton' => 'FR'), + '1685' => array('town' => 'Villariaz', 'canton' => 'FR'), + '1687' => array('town' => 'Estévenens', 'canton' => 'FR'), + '1686' => array('town' => 'Grangettes-Romont', 'canton' => 'FR'), + '1689' => array('town' => 'Châtelard-p-Romont', 'canton' => 'FR'), + '1688' => array('town' => 'Sommentier', 'canton' => 'FR'), + '1626' => array('town' => 'Romanens', 'canton' => 'FR'), + '1692' => array('town' => 'Massonnens', 'canton' => 'FR'), + '1625' => array('town' => 'Sâles (Gruyère)', 'canton' => 'FR'), + '1612' => array('town' => 'Ecoteaux', 'canton' => 'VD'), + '1613' => array('town' => 'Maracon', 'canton' => 'VD'), + '1608' => array('town' => 'Oron-le-Châtel', 'canton' => 'VD'), + '1609' => array('town' => 'St-Martin FR', 'canton' => 'FR'), + '1611' => array('town' => 'Le Crêt-p-Semsales', 'canton' => 'FR'), + '1697' => array('town' => 'La Joux FR', 'canton' => 'FR'), + '1699' => array('town' => 'Bouloz', 'canton' => 'FR'), + '1700' => array('town' => 'Fribourg', 'canton' => 'FR'), + '1702' => array('town' => 'Fribourg', 'canton' => 'FR'), + '1704' => array('town' => 'Fribourg', 'canton' => 'FR'), + '1705' => array('town' => 'Fribourg', 'canton' => 'FR'), + '1707' => array('town' => 'Fribourg', 'canton' => 'FR'), + '1708' => array('town' => 'Fribourg', 'canton' => 'FR'), + '1763' => array('town' => 'Granges-Paccot', 'canton' => 'FR'), + '1701' => array('town' => 'Fribourg', 'canton' => 'FR'), + '1720' => array('town' => 'Corminboeuf', 'canton' => 'FR'), + '1721' => array('town' => 'Misery-Courtion', 'canton' => 'FR'), + '1735' => array('town' => 'Giffers', 'canton' => 'FR'), + '1736' => array('town' => 'St. Silvester', 'canton' => 'FR'), + '1737' => array('town' => 'Plasselb', 'canton' => 'FR'), + '1738' => array('town' => 'Sangernboden', 'canton' => 'BE'), + '1716' => array('town' => 'Schwarzsee', 'canton' => 'FR'), + '1724' => array('town' => 'Bonnefontaine', 'canton' => 'FR'), + '1727' => array('town' => 'Corpataux-Magneden', 'canton' => 'FR'), + '1728' => array('town' => 'Rossens FR', 'canton' => 'FR'), + '1719' => array('town' => 'Brünisried', 'canton' => 'FR'), + '1731' => array('town' => 'Ependes FR', 'canton' => 'FR'), + '1732' => array('town' => 'Arconciel', 'canton' => 'FR'), + '1733' => array('town' => 'Treyvaux', 'canton' => 'FR'), + '1712' => array('town' => 'Tafers', 'canton' => 'FR'), + '1713' => array('town' => 'St. Antoni', 'canton' => 'FR'), + '1714' => array('town' => 'Heitenried', 'canton' => 'FR'), + '1715' => array('town' => 'Alterswil FR', 'canton' => 'FR'), + '1717' => array('town' => 'St. Ursen', 'canton' => 'FR'), + '1718' => array('town' => 'Rechthalten', 'canton' => 'FR'), + '1722' => array('town' => 'Bourguillon', 'canton' => 'FR'), + '1723' => array('town' => 'Marly', 'canton' => 'FR'), + '1725' => array('town' => 'Posieux', 'canton' => 'FR'), + '1726' => array('town' => 'Farvagny', 'canton' => 'FR'), + '1746' => array('town' => 'Prez-vers-Noréaz', 'canton' => 'FR'), + '1747' => array('town' => 'Corserey', 'canton' => 'FR'), + '1748' => array('town' => 'Torny-le-Grand', 'canton' => 'FR'), + '1749' => array('town' => 'Middes', 'canton' => 'FR'), + '1740' => array('town' => 'Neyruz FR', 'canton' => 'FR'), + '1741' => array('town' => 'Cottens FR', 'canton' => 'FR'), + '1744' => array('town' => 'Chénens', 'canton' => 'FR'), + '1745' => array('town' => 'Lentigny', 'canton' => 'FR'), + '1742' => array('town' => 'Autigny', 'canton' => 'FR'), + '1691' => array('town' => 'Villarimboud', 'canton' => 'FR'), + '1752' => array('town' => 'Villars-sur-Glâne', 'canton' => 'FR'), + '1753' => array('town' => 'Matran', 'canton' => 'FR'), + '1754' => array('town' => 'Rosé', 'canton' => 'FR'), + '1756' => array('town' => 'Onnens FR', 'canton' => 'FR'), + '1757' => array('town' => 'Noréaz', 'canton' => 'FR'), + '1690' => array('town' => 'Villaz-St-Pierre', 'canton' => 'FR'), + '1762' => array('town' => 'Givisiez', 'canton' => 'FR'), + '1772' => array('town' => 'Grolley', 'canton' => 'FR'), + '1773' => array('town' => 'Léchelles', 'canton' => 'FR'), + '1774' => array('town' => 'Cousset', 'canton' => 'FR'), + '1776' => array('town' => 'Montagny-la-Ville', 'canton' => 'FR'), + '1795' => array('town' => 'Courlevon', 'canton' => 'FR'), + '1796' => array('town' => 'Courgevaux', 'canton' => 'FR'), + '1797' => array('town' => 'Münchenwiler', 'canton' => 'BE'), + '1794' => array('town' => 'Salvenach', 'canton' => 'FR'), + '1793' => array('town' => 'Jeuss', 'canton' => 'FR'), + '1792' => array('town' => 'Cordast', 'canton' => 'FR'), + '1791' => array('town' => 'Courtaman', 'canton' => 'FR'), + '1788' => array('town' => 'Praz (Vully)', 'canton' => 'FR'), + '1789' => array('town' => 'Lugnorre', 'canton' => 'FR'), + '1782' => array('town' => 'Belfaux', 'canton' => 'FR'), + '1783' => array('town' => 'Pensier', 'canton' => 'FR'), + '1784' => array('town' => 'Courtepin', 'canton' => 'FR'), + '1785' => array('town' => 'Cressier FR', 'canton' => 'FR'), + '1786' => array('town' => 'Sugiez', 'canton' => 'FR'), + '1787' => array('town' => 'Môtier (Vully)', 'canton' => 'FR'), + '1800' => array('town' => 'Vevey', 'canton' => 'VD'), + '1801' => array('town' => 'Le Mont-Pèlerin', 'canton' => 'VD'), + '1808' => array('town' => 'Monts-de-Corsier', 'canton' => 'VD'), + '1809' => array('town' => 'Fenil-sur-Corsier', 'canton' => 'VD'), + '1802' => array('town' => 'Corseaux', 'canton' => 'VD'), + '1803' => array('town' => 'Chardonne', 'canton' => 'VD'), + '1804' => array('town' => 'Corsier-sur-Vevey', 'canton' => 'VD'), + '1805' => array('town' => 'Jongny', 'canton' => 'VD'), + '1806' => array('town' => 'St-Légier-Chiésaz', 'canton' => 'VD'), + '1807' => array('town' => 'Blonay', 'canton' => 'VD'), + '1814' => array('town' => 'La Tour-de-Peilz', 'canton' => 'VD'), + '1815' => array('town' => 'Clarens', 'canton' => 'VD'), + '1816' => array('town' => 'Chailly-Montreux', 'canton' => 'VD'), + '1817' => array('town' => 'Brent', 'canton' => 'VD'), + '1820' => array('town' => 'Montreux', 'canton' => 'VD'), + '1822' => array('town' => 'Chernex', 'canton' => 'VD'), + '1823' => array('town' => 'Glion', 'canton' => 'VD'), + '1824' => array('town' => 'Caux', 'canton' => 'VD'), + '1832' => array('town' => 'Villard-sur-Chamby', 'canton' => 'VD'), + '1658' => array('town' => 'La Tine', 'canton' => 'VD'), + '1660' => array('town' => 'Les Moulins', 'canton' => 'VD'), + '1659' => array('town' => 'Flendruz', 'canton' => 'VD'), + '1833' => array('town' => 'Les Avants', 'canton' => 'VD'), + '1844' => array('town' => 'Villeneuve VD', 'canton' => 'VD'), + '1847' => array('town' => 'Rennaz', 'canton' => 'VD'), + '1845' => array('town' => 'Noville', 'canton' => 'VD'), + '1846' => array('town' => 'Chessel', 'canton' => 'VD'), + '1852' => array('town' => 'Roche VD', 'canton' => 'VD'), + '1853' => array('town' => 'Yvorne', 'canton' => 'VD'), + '1854' => array('town' => 'Leysin', 'canton' => 'VD'), + '1867' => array('town' => 'St-Triphon', 'canton' => 'VD'), + '1860' => array('town' => 'Aigle', 'canton' => 'VD'), + '1856' => array('town' => 'Corbeyrier', 'canton' => 'VD'), + '1862' => array('town' => 'La Comballaz', 'canton' => 'VD'), + '1866' => array('town' => 'La Forclaz VD', 'canton' => 'VD'), + '1884' => array('town' => 'Huémoz', 'canton' => 'VD'), + '1863' => array('town' => 'Le Sépey', 'canton' => 'VD'), + '1864' => array('town' => 'Vers-l\'Eglise', 'canton' => 'VD'), + '1865' => array('town' => 'Les Diablerets', 'canton' => 'VD'), + '1868' => array('town' => 'Collombey', 'canton' => 'VS'), + '1870' => array('town' => 'Monthey', 'canton' => 'VS'), + '1871' => array('town' => 'Choëx', 'canton' => 'VS'), + '1872' => array('town' => 'Troistorrents', 'canton' => 'VS'), + '1873' => array('town' => 'Val-d\'Illiez', 'canton' => 'VS'), + '1874' => array('town' => 'Champéry', 'canton' => 'VS'), + '1875' => array('town' => 'Morgins', 'canton' => 'VS'), + '1880' => array('town' => 'Bex', 'canton' => 'VD'), + '1882' => array('town' => 'Les Posses-sur-Bex', 'canton' => 'VD'), + '1885' => array('town' => 'Chesières', 'canton' => 'VD'), + '1890' => array('town' => 'St-Maurice', 'canton' => 'VS'), + '1891' => array('town' => 'Vérossaz', 'canton' => 'VS'), + '1869' => array('town' => 'Massongex', 'canton' => 'VS'), + '1895' => array('town' => 'Vionnaz', 'canton' => 'VS'), + '1897' => array('town' => 'Les Evouettes', 'canton' => 'VS'), + '1899' => array('town' => 'Torgon', 'canton' => 'VS'), + '1892' => array('town' => 'Lavey-Village', 'canton' => 'VD'), + '1893' => array('town' => 'Muraz (Collombey)', 'canton' => 'VS'), + '1896' => array('town' => 'Vouvry', 'canton' => 'VS'), + '1898' => array('town' => 'St-Gingolph', 'canton' => 'VS'), + '1902' => array('town' => 'Evionnaz', 'canton' => 'VS'), + '1903' => array('town' => 'Collonges', 'canton' => 'VS'), + '1904' => array('town' => 'Vernayaz', 'canton' => 'VS'), + '1905' => array('town' => 'Dorénaz', 'canton' => 'VS'), + '1906' => array('town' => 'Charrat', 'canton' => 'VS'), + '1907' => array('town' => 'Saxon', 'canton' => 'VS'), + '1908' => array('town' => 'Riddes', 'canton' => 'VS'), + '1912' => array('town' => 'Leytron', 'canton' => 'VS'), + '1911' => array('town' => 'Ovronnaz', 'canton' => 'VS'), + '1913' => array('town' => 'Saillon', 'canton' => 'VS'), + '1914' => array('town' => 'Isérables', 'canton' => 'VS'), + '1918' => array('town' => 'La Tzoumaz', 'canton' => 'VS'), + '1955' => array('town' => 'Chamoson', 'canton' => 'VS'), + '1957' => array('town' => 'Ardon', 'canton' => 'VS'), + '1920' => array('town' => 'Martigny', 'canton' => 'VS'), + '1921' => array('town' => 'Martigny-Croix', 'canton' => 'VS'), + '1923' => array('town' => 'Le Trétien', 'canton' => 'VS'), + '1925' => array('town' => 'Le Châtelard VS', 'canton' => 'VS'), + '1927' => array('town' => 'Chemin', 'canton' => 'VS'), + '1929' => array('town' => 'Trient', 'canton' => 'VS'), + '1928' => array('town' => 'Ravoire', 'canton' => 'VS'), + '1922' => array('town' => 'Salvan', 'canton' => 'VS'), + '1926' => array('town' => 'Fully', 'canton' => 'VS'), + '1932' => array('town' => 'Bovernier', 'canton' => 'VS'), + '1947' => array('town' => 'Versegères', 'canton' => 'VS'), + '1941' => array('town' => 'Vollèges', 'canton' => 'VS'), + '1942' => array('town' => 'Levron', 'canton' => 'VS'), + '1948' => array('town' => 'Lourtier', 'canton' => 'VS'), + '1945' => array('town' => 'Liddes', 'canton' => 'VS'), + '1946' => array('town' => 'Bourg-St-Pierre', 'canton' => 'VS'), + '1943' => array('town' => 'Praz-de-Fort', 'canton' => 'VS'), + '1944' => array('town' => 'La Fouly VS', 'canton' => 'VS'), + '1933' => array('town' => 'Sembrancher', 'canton' => 'VS'), + '1934' => array('town' => 'Le Châble VS', 'canton' => 'VS'), + '1936' => array('town' => 'Verbier', 'canton' => 'VS'), + '1937' => array('town' => 'Orsières', 'canton' => 'VS'), + '1938' => array('town' => 'Champex-Lac', 'canton' => 'VS'), + '1950' => array('town' => 'Sion', 'canton' => 'VS'), + '1951' => array('town' => 'Sion', 'canton' => 'VS'), + '1975' => array('town' => 'St-Séverin', 'canton' => 'VS'), + '1976' => array('town' => 'Erde', 'canton' => 'VS'), + '1971' => array('town' => 'Grimisuat', 'canton' => 'VS'), + '1974' => array('town' => 'Arbaz', 'canton' => 'VS'), + '1961' => array('town' => 'Vernamiège', 'canton' => 'VS'), + '1973' => array('town' => 'Nax', 'canton' => 'VS'), + '1968' => array('town' => 'Mase', 'canton' => 'VS'), + '1969' => array('town' => 'St-Martin VS', 'canton' => 'VS'), + '1981' => array('town' => 'Vex', 'canton' => 'VS'), + '1982' => array('town' => 'Euseigne', 'canton' => 'VS'), + '1984' => array('town' => 'Les Haudères', 'canton' => 'VS'), + '1986' => array('town' => 'Arolla', 'canton' => 'VS'), + '1985' => array('town' => 'La Sage', 'canton' => 'VS'), + '1987' => array('town' => 'Hérémence', 'canton' => 'VS'), + '1988' => array('town' => 'Les Collons', 'canton' => 'VS'), + '1991' => array('town' => 'Salins', 'canton' => 'VS'), + '1992' => array('town' => 'Les Agettes', 'canton' => 'VS'), + '1993' => array('town' => 'Veysonnaz', 'canton' => 'VS'), + '1997' => array('town' => 'Siviez (Nendaz)', 'canton' => 'VS'), + '1996' => array('town' => 'Fey (Nendaz)', 'canton' => 'VS'), + '1994' => array('town' => 'Aproz (Nendaz)', 'canton' => 'VS'), + '1962' => array('town' => 'Pont-de-la-Morge', 'canton' => 'VS'), + '1963' => array('town' => 'Vétroz', 'canton' => 'VS'), + '1964' => array('town' => 'Conthey', 'canton' => 'VS'), + '1965' => array('town' => 'Savièse', 'canton' => 'VS'), + '1966' => array('town' => 'Ayent', 'canton' => 'VS'), + '1967' => array('town' => 'Bramois', 'canton' => 'VS'), + '1983' => array('town' => 'Evolène', 'canton' => 'VS'), + '1972' => array('town' => 'Anzère', 'canton' => 'VS'), + '2000' => array('town' => 'Neuchâtel', 'canton' => 'NE'), + '2004' => array('town' => 'Neuchâtel 4', 'canton' => 'NE'), + '2007' => array('town' => 'Neuchâtel 7', 'canton' => 'NE'), + '2008' => array('town' => 'Neuchâtel', 'canton' => 'NE'), + '2009' => array('town' => 'Neuchâtel 9', 'canton' => 'NE'), + '2001' => array('town' => 'Neuchâtel 1', 'canton' => 'NE'), + '2002' => array('town' => 'Neuchâtel 2', 'canton' => 'NE'), + '2003' => array('town' => 'Neuchâtel 3', 'canton' => 'NE'), + '2006' => array('town' => 'Neuchâtel 6', 'canton' => 'NE'), + '2012' => array('town' => 'Auvernier', 'canton' => 'NE'), + '2013' => array('town' => 'Colombier NE', 'canton' => 'NE'), + '2014' => array('town' => 'Bôle', 'canton' => 'NE'), + '2015' => array('town' => 'Areuse', 'canton' => 'NE'), + '2016' => array('town' => 'Cortaillod', 'canton' => 'NE'), + '2017' => array('town' => 'Boudry', 'canton' => 'NE'), + '2022' => array('town' => 'Bevaix', 'canton' => 'NE'), + '2023' => array('town' => 'Gorgier', 'canton' => 'NE'), + '2024' => array('town' => 'St-Aubin-Sauges', 'canton' => 'NE'), + '2025' => array('town' => 'Chez-le-Bart', 'canton' => 'NE'), + '2028' => array('town' => 'Vaumarcus', 'canton' => 'NE'), + '2034' => array('town' => 'Peseux', 'canton' => 'NE'), + '2035' => array('town' => 'Corcelles NE', 'canton' => 'NE'), + '2036' => array('town' => 'Cormondrèche', 'canton' => 'NE'), + '2042' => array('town' => 'Valangin', 'canton' => 'NE'), + '2043' => array('town' => 'Boudevilliers', 'canton' => 'NE'), + '2046' => array('town' => 'Fontaines NE', 'canton' => 'NE'), + '2052' => array('town' => 'Fontainemelon', 'canton' => 'NE'), + '2053' => array('town' => 'Cernier', 'canton' => 'NE'), + '2054' => array('town' => 'Chézard-St-Martin', 'canton' => 'NE'), + '2056' => array('town' => 'Dombresson', 'canton' => 'NE'), + '2057' => array('town' => 'Villiers', 'canton' => 'NE'), + '2058' => array('town' => 'Le Pâquier NE', 'canton' => 'NE'), + '2063' => array('town' => 'Vilars NE', 'canton' => 'NE'), + '2065' => array('town' => 'Savagnier', 'canton' => 'NE'), + '2067' => array('town' => 'Chaumont', 'canton' => 'NE'), + '2068' => array('town' => 'Hauterive NE', 'canton' => 'NE'), + '2072' => array('town' => 'St-Blaise', 'canton' => 'NE'), + '2073' => array('town' => 'Enges', 'canton' => 'NE'), + '2074' => array('town' => 'Marin-Epagnier', 'canton' => 'NE'), + '3238' => array('town' => 'Gals', 'canton' => 'BE'), + '2087' => array('town' => 'Cornaux NE', 'canton' => 'NE'), + '2088' => array('town' => 'Cressier NE', 'canton' => 'NE'), + '2318' => array('town' => 'Brot-Plamboz', 'canton' => 'NE'), + '2103' => array('town' => 'Noiraigue', 'canton' => 'NE'), + '2105' => array('town' => 'Travers', 'canton' => 'NE'), + '2108' => array('town' => 'Couvet', 'canton' => 'NE'), + '2112' => array('town' => 'Môtiers NE', 'canton' => 'NE'), + '2113' => array('town' => 'Boveresse', 'canton' => 'NE'), + '2114' => array('town' => 'Fleurier', 'canton' => 'NE'), + '2115' => array('town' => 'Buttes', 'canton' => 'NE'), + '2117' => array('town' => 'La Côte-aux-Fées', 'canton' => 'NE'), + '2123' => array('town' => 'St-Sulpice NE', 'canton' => 'NE'), + '2406' => array('town' => 'La Brévine', 'canton' => 'NE'), + '2126' => array('town' => 'Les Verrières', 'canton' => 'NE'), + '2127' => array('town' => 'Les Bayards', 'canton' => 'NE'), + '2149' => array('town' => 'Champ-du-Moulin', 'canton' => 'NE'), + '2124' => array('town' => 'Les Sagnettes', 'canton' => 'NE'), + '2116' => array('town' => 'Mont-de-Buttes', 'canton' => 'NE'), + '2019' => array('town' => 'Chambrelien', 'canton' => 'NE'), + '2037' => array('town' => 'Montmollin', 'canton' => 'NE'), + '2206' => array('town' => 'Geneveys-Coffrane', 'canton' => 'NE'), + '2207' => array('town' => 'Coffrane', 'canton' => 'NE'), + '2208' => array('town' => 'Les Hauts-Geneveys', 'canton' => 'NE'), + '2300' => array('town' => 'La Chaux-de-Fonds', 'canton' => 'NE'), + '2302' => array('town' => 'La Chaux-de-Fonds', 'canton' => 'NE'), + '2303' => array('town' => 'La Chaux-de-Fonds', 'canton' => 'NE'), + '2306' => array('town' => 'La Chaux-de-Fonds', 'canton' => 'NE'), + '2301' => array('town' => 'La Chaux-de-Fonds', 'canton' => 'NE'), + '2304' => array('town' => 'La Chaux-de-Fonds', 'canton' => 'NE'), + '2316' => array('town' => 'Petit-Martel', 'canton' => 'NE'), + '2338' => array('town' => 'Les Emibois', 'canton' => 'JU'), + '2314' => array('town' => 'La Sagne NE', 'canton' => 'NE'), + '2322' => array('town' => 'Le Crêt-du-Locle', 'canton' => 'NE'), + '2325' => array('town' => 'Les Planchettes', 'canton' => 'NE'), + '2333' => array('town' => 'La Ferrière', 'canton' => 'BE'), + '2336' => array('town' => 'Les Bois', 'canton' => 'JU'), + '2400' => array('town' => 'Le Locle', 'canton' => 'NE'), + '2405' => array('town' => 'La Chaux-du-Milieu', 'canton' => 'NE'), + '2414' => array('town' => 'Cerneux-Péquignot', 'canton' => 'NE'), + '2416' => array('town' => 'Les Brenets', 'canton' => 'NE'), + '2500' => array('town' => 'Biel/Bienne', 'canton' => 'BE'), + '2501' => array('town' => 'Biel/Bienne', 'canton' => 'BE'), + '2502' => array('town' => 'Biel/Bienne', 'canton' => 'BE'), + '2503' => array('town' => 'Biel/Bienne', 'canton' => 'BE'), + '2504' => array('town' => 'Biel/Bienne', 'canton' => 'BE'), + '2505' => array('town' => 'Biel/Bienne', 'canton' => 'BE'), + '2512' => array('town' => 'Tüscherz-Alfermée', 'canton' => 'BE'), + '2513' => array('town' => 'Twann', 'canton' => 'BE'), + '2514' => array('town' => 'Ligerz', 'canton' => 'BE'), + '2515' => array('town' => 'Prêles', 'canton' => 'BE'), + '2516' => array('town' => 'Lamboing', 'canton' => 'BE'), + '2517' => array('town' => 'Diesse', 'canton' => 'BE'), + '2518' => array('town' => 'Nods', 'canton' => 'BE'), + '2520' => array('town' => 'La Neuveville', 'canton' => 'BE'), + '2523' => array('town' => 'Lignières', 'canton' => 'NE'), + '2525' => array('town' => 'Le Landeron', 'canton' => 'NE'), + '2532' => array('town' => 'Magglingen/Macolin', 'canton' => 'BE'), + '2533' => array('town' => 'Evilard', 'canton' => 'BE'), + '2534' => array('town' => 'Orvin', 'canton' => 'BE'), + '2535' => array('town' => 'Frinvillier', 'canton' => 'BE'), + '2536' => array('town' => 'Plagne', 'canton' => 'BE'), + '2537' => array('town' => 'Vauffelin', 'canton' => 'BE'), + '2538' => array('town' => 'Romont BE', 'canton' => 'BE'), + '2540' => array('town' => 'Grenchen', 'canton' => 'SO'), + '2542' => array('town' => 'Pieterlen', 'canton' => 'BE'), + '2543' => array('town' => 'Lengnau BE', 'canton' => 'BE'), + '2544' => array('town' => 'Bettlach', 'canton' => 'SO'), + '2545' => array('town' => 'Selzach', 'canton' => 'SO'), + '2552' => array('town' => 'Orpund', 'canton' => 'BE'), + '2553' => array('town' => 'Safnern', 'canton' => 'BE'), + '2554' => array('town' => 'Meinisberg', 'canton' => 'BE'), + '2555' => array('town' => 'Brügg BE', 'canton' => 'BE'), + '2556' => array('town' => 'Scheuren', 'canton' => 'BE'), + '2557' => array('town' => 'Studen BE', 'canton' => 'BE'), + '2558' => array('town' => 'Aegerten', 'canton' => 'BE'), + '2560' => array('town' => 'Nidau', 'canton' => 'BE'), + '2562' => array('town' => 'Port', 'canton' => 'BE'), + '2563' => array('town' => 'Ipsach', 'canton' => 'BE'), + '2564' => array('town' => 'Bellmund', 'canton' => 'BE'), + '2565' => array('town' => 'Jens', 'canton' => 'BE'), + '2572' => array('town' => 'Sutz', 'canton' => 'BE'), + '2575' => array('town' => 'Täuffelen', 'canton' => 'BE'), + '2576' => array('town' => 'Lüscherz', 'canton' => 'BE'), + '2577' => array('town' => 'Siselen BE', 'canton' => 'BE'), + '3237' => array('town' => 'Brüttelen', 'canton' => 'BE'), + '2603' => array('town' => 'Péry', 'canton' => 'BE'), + '2604' => array('town' => 'La Heutte', 'canton' => 'BE'), + '2605' => array('town' => 'Sonceboz-Sombeval', 'canton' => 'BE'), + '2606' => array('town' => 'Corgémont', 'canton' => 'BE'), + '2607' => array('town' => 'Cortébert', 'canton' => 'BE'), + '2608' => array('town' => 'Courtelary', 'canton' => 'BE'), + '2610' => array('town' => 'St-Imier', 'canton' => 'BE'), + '2612' => array('town' => 'Cormoret', 'canton' => 'BE'), + '2613' => array('town' => 'Villeret', 'canton' => 'BE'), + '2615' => array('town' => 'Sonvilier', 'canton' => 'BE'), + '2616' => array('town' => 'Renan BE', 'canton' => 'BE'), + '2710' => array('town' => 'Tavannes', 'canton' => 'BE'), + '2712' => array('town' => 'Le Fuet', 'canton' => 'BE'), + '2714' => array('town' => 'Le Prédame', 'canton' => 'JU'), + '2717' => array('town' => 'Fornet-Dessous', 'canton' => 'BE'), + '2718' => array('town' => 'Fornet-Dessus', 'canton' => 'JU'), + '2716' => array('town' => 'Sornetan', 'canton' => 'BE'), + '2713' => array('town' => 'Bellelay', 'canton' => 'BE'), + '2720' => array('town' => 'Tramelan', 'canton' => 'BE'), + '2722' => array('town' => 'Les Reussilles', 'canton' => 'BE'), + '2723' => array('town' => 'Mont-Tramelan', 'canton' => 'BE'), + '2345' => array('town' => 'Les Breuleux', 'canton' => 'JU'), + '2340' => array('town' => 'Le Noirmont', 'canton' => 'JU'), + '2350' => array('town' => 'Saignelégier', 'canton' => 'JU'), + '2353' => array('town' => 'Les Pommerats', 'canton' => 'JU'), + '2354' => array('town' => 'Goumois', 'canton' => 'JU'), + '2732' => array('town' => 'Reconvilier', 'canton' => 'BE'), + '2733' => array('town' => 'Pontenet', 'canton' => 'BE'), + '2735' => array('town' => 'Malleray-Bévilard', 'canton' => 'BE'), + '2736' => array('town' => 'Sorvilier', 'canton' => 'BE'), + '2738' => array('town' => 'Court', 'canton' => 'BE'), + '2740' => array('town' => 'Moutier', 'canton' => 'BE'), + '2742' => array('town' => 'Perrefitte', 'canton' => 'BE'), + '2748' => array('town' => 'Souboz', 'canton' => 'BE'), + '2743' => array('town' => 'Eschert', 'canton' => 'BE'), + '2744' => array('town' => 'Belprahon', 'canton' => 'BE'), + '2747' => array('town' => 'Seehof', 'canton' => 'BE'), + '2745' => array('town' => 'Grandval', 'canton' => 'BE'), + '2746' => array('town' => 'Crémines', 'canton' => 'BE'), + '2762' => array('town' => 'Roches BE', 'canton' => 'BE'), + '2832' => array('town' => 'Rebeuvelier', 'canton' => 'JU'), + '2830' => array('town' => 'Courrendlin', 'canton' => 'JU'), + '2800' => array('town' => 'Delémont', 'canton' => 'JU'), + '2802' => array('town' => 'Develier', 'canton' => 'JU'), + '2803' => array('town' => 'Bourrignon', 'canton' => 'JU'), + '2805' => array('town' => 'Soyhières', 'canton' => 'JU'), + '2806' => array('town' => 'Mettembert', 'canton' => 'JU'), + '2807' => array('town' => 'Pleigne', 'canton' => 'JU'), + '2812' => array('town' => 'Movelier', 'canton' => 'JU'), + '2813' => array('town' => 'Ederswiler', 'canton' => 'JU'), + '2814' => array('town' => 'Roggenburg', 'canton' => 'BL'), + '2822' => array('town' => 'Courroux', 'canton' => 'JU'), + '2823' => array('town' => 'Courcelon', 'canton' => 'JU'), + '2824' => array('town' => 'Vicques', 'canton' => 'JU'), + '2825' => array('town' => 'Courchapoix', 'canton' => 'JU'), + '2826' => array('town' => 'Corban', 'canton' => 'JU'), + '2827' => array('town' => 'Mervelier', 'canton' => 'JU'), + '2828' => array('town' => 'Montsevelier', 'canton' => 'JU'), + '2829' => array('town' => 'Vermes', 'canton' => 'JU'), + '2842' => array('town' => 'Rossemaison', 'canton' => 'JU'), + '2843' => array('town' => 'Châtillon JU', 'canton' => 'JU'), + '2852' => array('town' => 'Courtételle', 'canton' => 'JU'), + '2853' => array('town' => 'Courfaivre', 'canton' => 'JU'), + '2854' => array('town' => 'Bassecourt', 'canton' => 'JU'), + '2855' => array('town' => 'Glovelier', 'canton' => 'JU'), + '2856' => array('town' => 'Boécourt', 'canton' => 'JU'), + '2857' => array('town' => 'Montavon', 'canton' => 'JU'), + '2863' => array('town' => 'Undervelier', 'canton' => 'JU'), + '2864' => array('town' => 'Soulce', 'canton' => 'JU'), + '2873' => array('town' => 'Saulcy', 'canton' => 'JU'), + '2882' => array('town' => 'St-Ursanne', 'canton' => 'JU'), + '2883' => array('town' => 'Montmelon', 'canton' => 'JU'), + '2884' => array('town' => 'Montenol', 'canton' => 'JU'), + '2885' => array('town' => 'Epauvillers', 'canton' => 'JU'), + '2886' => array('town' => 'Epiquerez', 'canton' => 'JU'), + '2887' => array('town' => 'Soubey', 'canton' => 'JU'), + '2888' => array('town' => 'Seleute', 'canton' => 'JU'), + '2889' => array('town' => 'Ocourt', 'canton' => 'JU'), + '2950' => array('town' => 'Courgenay', 'canton' => 'JU'), + '2900' => array('town' => 'Porrentruy', 'canton' => 'JU'), + '2902' => array('town' => 'Fontenais', 'canton' => 'JU'), + '2903' => array('town' => 'Villars-Fontenais', 'canton' => 'JU'), + '2904' => array('town' => 'Bressaucourt', 'canton' => 'JU'), + '2905' => array('town' => 'Courtedoux', 'canton' => 'JU'), + '2906' => array('town' => 'Chevenez', 'canton' => 'JU'), + '2907' => array('town' => 'Rocourt', 'canton' => 'JU'), + '2908' => array('town' => 'Grandfontaine', 'canton' => 'JU'), + '2912' => array('town' => 'Roche-d\'Or', 'canton' => 'JU'), + '2914' => array('town' => 'Damvant', 'canton' => 'JU'), + '2915' => array('town' => 'Bure', 'canton' => 'JU'), + '2916' => array('town' => 'Fahy', 'canton' => 'JU'), + '2922' => array('town' => 'Courchavon', 'canton' => 'JU'), + '2923' => array('town' => 'Courtemaîche', 'canton' => 'JU'), + '2924' => array('town' => 'Montignez', 'canton' => 'JU'), + '2925' => array('town' => 'Buix', 'canton' => 'JU'), + '2926' => array('town' => 'Boncourt', 'canton' => 'JU'), + '2932' => array('town' => 'Coeuve', 'canton' => 'JU'), + '2935' => array('town' => 'Beurnevésin', 'canton' => 'JU'), + '2942' => array('town' => 'Alle', 'canton' => 'JU'), + '2943' => array('town' => 'Vendlincourt', 'canton' => 'JU'), + '2944' => array('town' => 'Bonfol', 'canton' => 'JU'), + '2946' => array('town' => 'Miécourt', 'canton' => 'JU'), + '2947' => array('town' => 'Charmoille', 'canton' => 'JU'), + '2952' => array('town' => 'Cornol', 'canton' => 'JU'), + '2953' => array('town' => 'Fregiécourt-Pleuj', 'canton' => 'JU'), + '2954' => array('town' => 'Asuel', 'canton' => 'JU'), + '3000' => array('town' => 'Bern', 'canton' => 'BE'), + '3001' => array('town' => 'Bern', 'canton' => 'BE'), + '3002' => array('town' => 'Bern Postfinance', 'canton' => 'BE'), + '3003' => array('town' => 'Bern', 'canton' => 'BE'), + '3004' => array('town' => 'Bern', 'canton' => 'BE'), + '3005' => array('town' => 'Bern', 'canton' => 'BE'), + '3006' => array('town' => 'Bern', 'canton' => 'BE'), + '3007' => array('town' => 'Bern', 'canton' => 'BE'), + '3008' => array('town' => 'Bern', 'canton' => 'BE'), + '3010' => array('town' => 'Bern', 'canton' => 'BE'), + '3011' => array('town' => 'Bern', 'canton' => 'BE'), + '3012' => array('town' => 'Bern', 'canton' => 'BE'), + '3013' => array('town' => 'Bern', 'canton' => 'BE'), + '3014' => array('town' => 'Bern', 'canton' => 'BE'), + '3015' => array('town' => 'Bern', 'canton' => 'BE'), + '3018' => array('town' => 'Bern', 'canton' => 'BE'), + '3019' => array('town' => 'Bern', 'canton' => 'BE'), + '3020' => array('town' => 'Bern', 'canton' => 'BE'), + '3027' => array('town' => 'Bern', 'canton' => 'BE'), + '3095' => array('town' => 'Spiegel b. Bern', 'canton' => 'BE'), + '3032' => array('town' => 'Hinterkappelen', 'canton' => 'BE'), + '3033' => array('town' => 'Wohlen b. Bern', 'canton' => 'BE'), + '3034' => array('town' => 'Murzelen', 'canton' => 'BE'), + '3035' => array('town' => 'Frieswil', 'canton' => 'BE'), + '3036' => array('town' => 'Detligen', 'canton' => 'BE'), + '3037' => array('town' => 'Herrenschwanden', 'canton' => 'BE'), + '3038' => array('town' => 'Kirchlindach', 'canton' => 'BE'), + '3042' => array('town' => 'Ortschwaben', 'canton' => 'BE'), + '3043' => array('town' => 'Uettligen', 'canton' => 'BE'), + '3049' => array('town' => 'Säriswil', 'canton' => 'BE'), + '3045' => array('town' => 'Meikirch', 'canton' => 'BE'), + '3046' => array('town' => 'Wahlendorf', 'canton' => 'BE'), + '3047' => array('town' => 'Bremgarten b. Bern', 'canton' => 'BE'), + '3048' => array('town' => 'Worblaufen', 'canton' => 'BE'), + '3052' => array('town' => 'Zollikofen', 'canton' => 'BE'), + '3053' => array('town' => 'Münchenbuchsee', 'canton' => 'BE'), + '3054' => array('town' => 'Schüpfen', 'canton' => 'BE'), + '3063' => array('town' => 'Ittigen', 'canton' => 'BE'), + '3065' => array('town' => 'Bolligen', 'canton' => 'BE'), + '3066' => array('town' => 'Stettlen', 'canton' => 'BE'), + '3067' => array('town' => 'Boll', 'canton' => 'BE'), + '3068' => array('town' => 'Utzigen', 'canton' => 'BE'), + '3072' => array('town' => 'Ostermundigen', 'canton' => 'BE'), + '3073' => array('town' => 'Gümligen', 'canton' => 'BE'), + '3074' => array('town' => 'Muri b. Bern', 'canton' => 'BE'), + '3075' => array('town' => 'Rüfenacht BE', 'canton' => 'BE'), + '3076' => array('town' => 'Worb', 'canton' => 'BE'), + '3077' => array('town' => 'Enggistein', 'canton' => 'BE'), + '3078' => array('town' => 'Richigen', 'canton' => 'BE'), + '3082' => array('town' => 'Schlosswil', 'canton' => 'BE'), + '3083' => array('town' => 'Trimstein', 'canton' => 'BE'), + '3084' => array('town' => 'Wabern', 'canton' => 'BE'), + '3088' => array('town' => 'Oberbütschel', 'canton' => 'BE'), + '3086' => array('town' => 'Zimmerwald', 'canton' => 'BE'), + '3087' => array('town' => 'Niedermuhlern', 'canton' => 'BE'), + '3089' => array('town' => 'Hinterfultigen', 'canton' => 'BE'), + '3096' => array('town' => 'Oberbalm', 'canton' => 'BE'), + '3097' => array('town' => 'Liebefeld', 'canton' => 'BE'), + '3098' => array('town' => 'Köniz', 'canton' => 'BE'), + '3099' => array('town' => 'Rüti b. Riggisberg', 'canton' => 'BE'), + '3110' => array('town' => 'Münsingen', 'canton' => 'BE'), + '3112' => array('town' => 'Allmendingen b. BE', 'canton' => 'BE'), + '3114' => array('town' => 'Wichtrach', 'canton' => 'BE'), + '3115' => array('town' => 'Gerzensee', 'canton' => 'BE'), + '3116' => array('town' => 'Kirchdorf BE', 'canton' => 'BE'), + '3629' => array('town' => 'Kiesen', 'canton' => 'BE'), + '3628' => array('town' => 'Uttigen', 'canton' => 'BE'), + '3122' => array('town' => 'Kehrsatz', 'canton' => 'BE'), + '3123' => array('town' => 'Belp', 'canton' => 'BE'), + '3124' => array('town' => 'Belpberg', 'canton' => 'BE'), + '3125' => array('town' => 'Toffen', 'canton' => 'BE'), + '3126' => array('town' => 'Kaufdorf', 'canton' => 'BE'), + '3127' => array('town' => 'Mühlethurnen', 'canton' => 'BE'), + '3128' => array('town' => 'Kirchenthurnen', 'canton' => 'BE'), + '3132' => array('town' => 'Riggisberg', 'canton' => 'BE'), + '3664' => array('town' => 'Burgistein', 'canton' => 'BE'), + '3665' => array('town' => 'Wattenwil', 'canton' => 'BE'), + '3662' => array('town' => 'Seftigen', 'canton' => 'BE'), + '3663' => array('town' => 'Gurzelen', 'canton' => 'BE'), + '3661' => array('town' => 'Uetendorf', 'canton' => 'BE'), + '3144' => array('town' => 'Gasel', 'canton' => 'BE'), + '3145' => array('town' => 'Niederscherli', 'canton' => 'BE'), + '3147' => array('town' => 'Mittelhäusern', 'canton' => 'BE'), + '3148' => array('town' => 'Lanzenhäusern', 'canton' => 'BE'), + '3150' => array('town' => 'Schwarzenburg', 'canton' => 'BE'), + '3152' => array('town' => 'Mamishaus', 'canton' => 'BE'), + '3153' => array('town' => 'Rüschegg Gambach', 'canton' => 'BE'), + '3154' => array('town' => 'Rüschegg Heubach', 'canton' => 'BE'), + '3155' => array('town' => 'Helgisried', 'canton' => 'BE'), + '3156' => array('town' => 'Riffenmatt', 'canton' => 'BE'), + '3157' => array('town' => 'Milken', 'canton' => 'BE'), + '3158' => array('town' => 'Guggisberg', 'canton' => 'BE'), + '3159' => array('town' => 'Riedstätt', 'canton' => 'BE'), + '3172' => array('town' => 'Niederwangen BE', 'canton' => 'BE'), + '3173' => array('town' => 'Oberwangen b. Bern', 'canton' => 'BE'), + '3174' => array('town' => 'Thörishaus', 'canton' => 'BE'), + '3175' => array('town' => 'Flamatt', 'canton' => 'FR'), + '3176' => array('town' => 'Neuenegg', 'canton' => 'BE'), + '3177' => array('town' => 'Laupen BE', 'canton' => 'BE'), + '3178' => array('town' => 'Bösingen', 'canton' => 'FR'), + '3179' => array('town' => 'Kriechenwil', 'canton' => 'BE'), + '3182' => array('town' => 'Ueberstorf', 'canton' => 'FR'), + '3183' => array('town' => 'Albligen', 'canton' => 'BE'), + '3184' => array('town' => 'Wünnewil', 'canton' => 'FR'), + '3186' => array('town' => 'Düdingen', 'canton' => 'FR'), + '3202' => array('town' => 'Frauenkappelen', 'canton' => 'BE'), + '3203' => array('town' => 'Mühleberg', 'canton' => 'BE'), + '3204' => array('town' => 'Rosshäusern', 'canton' => 'BE'), + '3205' => array('town' => 'Gümmenen', 'canton' => 'BE'), + '3206' => array('town' => 'Rizenbach', 'canton' => 'BE'), + '3207' => array('town' => 'Wileroltigen', 'canton' => 'BE'), + '3208' => array('town' => 'Gurbrü', 'canton' => 'BE'), + '3210' => array('town' => 'Kerzers', 'canton' => 'FR'), + '3216' => array('town' => 'Ried b. Kerzers', 'canton' => 'FR'), + '3215' => array('town' => 'Gempenach', 'canton' => 'FR'), + '3214' => array('town' => 'Ulmiz', 'canton' => 'FR'), + '3213' => array('town' => 'Liebistorf', 'canton' => 'FR'), + '3212' => array('town' => 'Gurmels', 'canton' => 'FR'), + '3225' => array('town' => 'Müntschemier', 'canton' => 'BE'), + '3226' => array('town' => 'Treiten', 'canton' => 'BE'), + '3232' => array('town' => 'Ins', 'canton' => 'BE'), + '3233' => array('town' => 'Tschugg', 'canton' => 'BE'), + '3234' => array('town' => 'Vinelz', 'canton' => 'BE'), + '3235' => array('town' => 'Erlach', 'canton' => 'BE'), + '3236' => array('town' => 'Gampelen', 'canton' => 'BE'), + '3250' => array('town' => 'Lyss', 'canton' => 'BE'), + '3251' => array('town' => 'Wengi b. Büren', 'canton' => 'BE'), + '3252' => array('town' => 'Worben', 'canton' => 'BE'), + '3253' => array('town' => 'Schnottwil', 'canton' => 'SO'), + '3254' => array('town' => 'Messen', 'canton' => 'SO'), + '3255' => array('town' => 'Rapperswil BE', 'canton' => 'BE'), + '3256' => array('town' => 'Dieterswil', 'canton' => 'BE'), + '3257' => array('town' => 'Grossaffoltern', 'canton' => 'BE'), + '3262' => array('town' => 'Suberg', 'canton' => 'BE'), + '3263' => array('town' => 'Büetigen', 'canton' => 'BE'), + '3264' => array('town' => 'Diessbach b. Büren', 'canton' => 'BE'), + '3266' => array('town' => 'Wiler b. Seedorf', 'canton' => 'BE'), + '3267' => array('town' => 'Seedorf BE', 'canton' => 'BE'), + '3268' => array('town' => 'Lobsigen', 'canton' => 'BE'), + '3270' => array('town' => 'Aarberg', 'canton' => 'BE'), + '3271' => array('town' => 'Radelfingen', 'canton' => 'BE'), + '3272' => array('town' => 'Walperswil', 'canton' => 'BE'), + '3273' => array('town' => 'Kappelen', 'canton' => 'BE'), + '3274' => array('town' => 'Hermrigen', 'canton' => 'BE'), + '3280' => array('town' => 'Murten', 'canton' => 'FR'), + '3282' => array('town' => 'Bargen BE', 'canton' => 'BE'), + '3283' => array('town' => 'Kallnach', 'canton' => 'BE'), + '3284' => array('town' => 'Fräschels', 'canton' => 'FR'), + '3285' => array('town' => 'Galmiz', 'canton' => 'FR'), + '3286' => array('town' => 'Muntelier', 'canton' => 'FR'), + '3292' => array('town' => 'Busswil b. Büren', 'canton' => 'BE'), + '3293' => array('town' => 'Dotzigen', 'canton' => 'BE'), + '3294' => array('town' => 'Büren an der Aare', 'canton' => 'BE'), + '3295' => array('town' => 'Rüti b. Büren', 'canton' => 'BE'), + '3296' => array('town' => 'Arch', 'canton' => 'BE'), + '3297' => array('town' => 'Leuzigen', 'canton' => 'BE'), + '3298' => array('town' => 'Oberwil b. Büren', 'canton' => 'BE'), + '3302' => array('town' => 'Moosseedorf', 'canton' => 'BE'), + '3303' => array('town' => 'Jegenstorf', 'canton' => 'BE'), + '3308' => array('town' => 'Grafenried', 'canton' => 'BE'), + '3312' => array('town' => 'Fraubrunnen', 'canton' => 'BE'), + '3313' => array('town' => 'Büren zum Hof', 'canton' => 'BE'), + '3314' => array('town' => 'Schalunen', 'canton' => 'BE'), + '3315' => array('town' => 'Bätterkinden', 'canton' => 'BE'), + '3321' => array('town' => 'Schönbühl EKZ', 'canton' => 'BE'), + '3322' => array('town' => 'Urtenen-Schönbühl', 'canton' => 'BE'), + '3323' => array('town' => 'Bäriswil BE', 'canton' => 'BE'), + '3324' => array('town' => 'Hindelbank', 'canton' => 'BE'), + '3325' => array('town' => 'Hettiswil', 'canton' => 'BE'), + '3326' => array('town' => 'Krauchthal', 'canton' => 'BE'), + '3305' => array('town' => 'Iffwil', 'canton' => 'BE'), + '3306' => array('town' => 'Etzelkofen', 'canton' => 'BE'), + '3307' => array('town' => 'Brunnenthal', 'canton' => 'SO'), + '3309' => array('town' => 'Kernenried', 'canton' => 'BE'), + '3317' => array('town' => 'Limpach', 'canton' => 'BE'), + '3360' => array('town' => 'Herzogenbuchsee', 'canton' => 'BE'), + '4556' => array('town' => 'Aeschi SO', 'canton' => 'SO'), + '3376' => array('town' => 'Graben', 'canton' => 'BE'), + '3372' => array('town' => 'Wanzwil', 'canton' => 'BE'), + '3373' => array('town' => 'Heimenhausen', 'canton' => 'BE'), + '3374' => array('town' => 'Wangenried', 'canton' => 'BE'), + '3362' => array('town' => 'Niederönz', 'canton' => 'BE'), + '3363' => array('town' => 'Oberönz', 'canton' => 'BE'), + '3365' => array('town' => 'Seeberg', 'canton' => 'BE'), + '3366' => array('town' => 'Bettenhausen', 'canton' => 'BE'), + '3367' => array('town' => 'Thörigen', 'canton' => 'BE'), + '3368' => array('town' => 'Bleienbach', 'canton' => 'BE'), + '3400' => array('town' => 'Burgdorf', 'canton' => 'BE'), + '3401' => array('town' => 'Burgdorf', 'canton' => 'BE'), + '3402' => array('town' => 'Burgdorf', 'canton' => 'BE'), + '3412' => array('town' => 'Heimiswil', 'canton' => 'BE'), + '3413' => array('town' => 'Kaltacker', 'canton' => 'BE'), + '3414' => array('town' => 'Oberburg', 'canton' => 'BE'), + '3415' => array('town' => 'Hasle-Rüegsau', 'canton' => 'BE'), + '3416' => array('town' => 'Affoltern BE', 'canton' => 'BE'), + '3417' => array('town' => 'Rüegsau', 'canton' => 'BE'), + '3418' => array('town' => 'Rüegsbach', 'canton' => 'BE'), + '3419' => array('town' => 'Biembach', 'canton' => 'BE'), + '3421' => array('town' => 'Lyssach', 'canton' => 'BE'), + '3422' => array('town' => 'Kirchberg BE', 'canton' => 'BE'), + '3423' => array('town' => 'Ersigen', 'canton' => 'BE'), + '3424' => array('town' => 'Niederösch', 'canton' => 'BE'), + '3425' => array('town' => 'Koppigen', 'canton' => 'BE'), + '3426' => array('town' => 'Aefligen', 'canton' => 'BE'), + '3427' => array('town' => 'Utzenstorf', 'canton' => 'BE'), + '3428' => array('town' => 'Wiler b.Utzenstorf', 'canton' => 'BE'), + '3432' => array('town' => 'Lützelflüh-Goldb', 'canton' => 'BE'), + '3433' => array('town' => 'Schwanden i. E.', 'canton' => 'BE'), + '3434' => array('town' => 'Obergoldbach', 'canton' => 'BE'), + '3435' => array('town' => 'Ramsei', 'canton' => 'BE'), + '3436' => array('town' => 'Zollbrück', 'canton' => 'BE'), + '3437' => array('town' => 'Rüderswil', 'canton' => 'BE'), + '3438' => array('town' => 'Lauperswil', 'canton' => 'BE'), + '3439' => array('town' => 'Ranflüh', 'canton' => 'BE'), + '3452' => array('town' => 'Grünenmatt', 'canton' => 'BE'), + '3453' => array('town' => 'Heimisbach', 'canton' => 'BE'), + '3454' => array('town' => 'Sumiswald', 'canton' => 'BE'), + '3455' => array('town' => 'Grünen', 'canton' => 'BE'), + '3456' => array('town' => 'Trachselwald', 'canton' => 'BE'), + '3457' => array('town' => 'Wasen im Emmental', 'canton' => 'BE'), + '3462' => array('town' => 'Weier im Emmental', 'canton' => 'BE'), + '3463' => array('town' => 'Häusernmoos', 'canton' => 'BE'), + '3464' => array('town' => 'Schmidigen-Mühlew', 'canton' => 'BE'), + '3465' => array('town' => 'Dürrenroth', 'canton' => 'BE'), + '3472' => array('town' => 'Wynigen', 'canton' => 'BE'), + '3473' => array('town' => 'Alchenstorf', 'canton' => 'BE'), + '3474' => array('town' => 'Rüedisbach', 'canton' => 'BE'), + '3475' => array('town' => 'Riedtwil', 'canton' => 'BE'), + '3476' => array('town' => 'Oschwand', 'canton' => 'BE'), + '3111' => array('town' => 'Tägertschi', 'canton' => 'BE'), + '3503' => array('town' => 'Gysenstein', 'canton' => 'BE'), + '3504' => array('town' => 'Niederhünigen', 'canton' => 'BE'), + '3506' => array('town' => 'Grosshöchstetten', 'canton' => 'BE'), + '3507' => array('town' => 'Biglen', 'canton' => 'BE'), + '3508' => array('town' => 'Arni BE', 'canton' => 'BE'), + '3510' => array('town' => 'Konolfingen', 'canton' => 'BE'), + '3512' => array('town' => 'Walkringen', 'canton' => 'BE'), + '3513' => array('town' => 'Bigenthal', 'canton' => 'BE'), + '3672' => array('town' => 'Oberdiessbach', 'canton' => 'BE'), + '3673' => array('town' => 'Linden', 'canton' => 'BE'), + '3674' => array('town' => 'Bleiken', 'canton' => 'BE'), + '3671' => array('town' => 'Brenzikofen', 'canton' => 'BE'), + '3531' => array('town' => 'Oberthal', 'canton' => 'BE'), + '3532' => array('town' => 'Zäziwil', 'canton' => 'BE'), + '3533' => array('town' => 'Bowil', 'canton' => 'BE'), + '3534' => array('town' => 'Signau', 'canton' => 'BE'), + '3535' => array('town' => 'Schüpbach', 'canton' => 'BE'), + '3536' => array('town' => 'Aeschau', 'canton' => 'BE'), + '3537' => array('town' => 'Eggiwil', 'canton' => 'BE'), + '3538' => array('town' => 'Röthenbach i. E.', 'canton' => 'BE'), + '3543' => array('town' => 'Emmenmatt', 'canton' => 'BE'), + '3550' => array('town' => 'Langnau i. E.', 'canton' => 'BE'), + '3551' => array('town' => 'Oberfrittenbach', 'canton' => 'BE'), + '3552' => array('town' => 'Bärau', 'canton' => 'BE'), + '3553' => array('town' => 'Gohl', 'canton' => 'BE'), + '3555' => array('town' => 'Trubschachen', 'canton' => 'BE'), + '3556' => array('town' => 'Trub', 'canton' => 'BE'), + '3557' => array('town' => 'Fankhaus (Trub)', 'canton' => 'BE'), + '3600' => array('town' => 'Thun', 'canton' => 'BE'), + '3601' => array('town' => 'Thun', 'canton' => 'BE'), + '3602' => array('town' => 'Thun 2', 'canton' => 'BE'), + '3603' => array('town' => 'Thun', 'canton' => 'BE'), + '3604' => array('town' => 'Thun', 'canton' => 'BE'), + '3605' => array('town' => 'Thun', 'canton' => 'BE'), + '3607' => array('town' => 'Thun', 'canton' => 'BE'), + '3608' => array('town' => 'Thun', 'canton' => 'BE'), + '3617' => array('town' => 'Fahrni b. Thun', 'canton' => 'BE'), + '3618' => array('town' => 'Süderen', 'canton' => 'BE'), + '3619' => array('town' => 'Eriz', 'canton' => 'BE'), + '3622' => array('town' => 'Homberg b. Thun', 'canton' => 'BE'), + '3635' => array('town' => 'Uebeschi', 'canton' => 'BE'), + '3631' => array('town' => 'Höfen b. Thun', 'canton' => 'BE'), + '3636' => array('town' => 'Längenbühl', 'canton' => 'BE'), + '3612' => array('town' => 'Steffisburg', 'canton' => 'BE'), + '3613' => array('town' => 'Steffisburg', 'canton' => 'BE'), + '3614' => array('town' => 'Unterlangenegg', 'canton' => 'BE'), + '3615' => array('town' => 'Heimenschwand', 'canton' => 'BE'), + '3616' => array('town' => 'Schwarzenegg', 'canton' => 'BE'), + '3623' => array('town' => 'Teuffenthal BE', 'canton' => 'BE'), + '3624' => array('town' => 'Goldiwil (Thun)', 'canton' => 'BE'), + '3625' => array('town' => 'Heiligenschwendi', 'canton' => 'BE'), + '3626' => array('town' => 'Hünibach', 'canton' => 'BE'), + '3627' => array('town' => 'Heimberg', 'canton' => 'BE'), + '3633' => array('town' => 'Amsoldingen', 'canton' => 'BE'), + '3634' => array('town' => 'Thierachern', 'canton' => 'BE'), + '3638' => array('town' => 'Blumenstein', 'canton' => 'BE'), + '3645' => array('town' => 'Gwatt (Thun)', 'canton' => 'BE'), + '3646' => array('town' => 'Einigen', 'canton' => 'BE'), + '3647' => array('town' => 'Reutigen', 'canton' => 'BE'), + '3652' => array('town' => 'Hilterfingen', 'canton' => 'BE'), + '3653' => array('town' => 'Oberhofen Thun\'see', 'canton' => 'BE'), + '3654' => array('town' => 'Gunten', 'canton' => 'BE'), + '3655' => array('town' => 'Sigriswil', 'canton' => 'BE'), + '3656' => array('town' => 'Tschingel', 'canton' => 'BE'), + '3657' => array('town' => 'Schwanden Sigrisw', 'canton' => 'BE'), + '3658' => array('town' => 'Merligen', 'canton' => 'BE'), + '3700' => array('town' => 'Spiez', 'canton' => 'BE'), + '3702' => array('town' => 'Hondrich', 'canton' => 'BE'), + '3703' => array('town' => 'Aeschi b. Spiez', 'canton' => 'BE'), + '3704' => array('town' => 'Krattigen', 'canton' => 'BE'), + '3705' => array('town' => 'Faulensee', 'canton' => 'BE'), + '3706' => array('town' => 'Leissigen', 'canton' => 'BE'), + '3707' => array('town' => 'Därligen', 'canton' => 'BE'), + '3711' => array('town' => 'Emdthal', 'canton' => 'BE'), + '3713' => array('town' => 'Reichenbach i. K.', 'canton' => 'BE'), + '3714' => array('town' => 'Frutigen', 'canton' => 'BE'), + '3715' => array('town' => 'Adelboden', 'canton' => 'BE'), + '3716' => array('town' => 'Kandergrund', 'canton' => 'BE'), + '3717' => array('town' => 'Blausee-Mitholz', 'canton' => 'BE'), + '3718' => array('town' => 'Kandersteg', 'canton' => 'BE'), + '3722' => array('town' => 'Scharnachtal', 'canton' => 'BE'), + '3723' => array('town' => 'Kiental', 'canton' => 'BE'), + '3724' => array('town' => 'Ried (Frutigen)', 'canton' => 'BE'), + '3725' => array('town' => 'Achseten', 'canton' => 'BE'), + '3752' => array('town' => 'Wimmis', 'canton' => 'BE'), + '3753' => array('town' => 'Oey', 'canton' => 'BE'), + '3754' => array('town' => 'Diemtigen', 'canton' => 'BE'), + '3755' => array('town' => 'Horboden', 'canton' => 'BE'), + '3756' => array('town' => 'Zwischenflüh', 'canton' => 'BE'), + '3757' => array('town' => 'Schwenden', 'canton' => 'BE'), + '3758' => array('town' => 'Latterbach', 'canton' => 'BE'), + '3762' => array('town' => 'Erlenbach i. S.', 'canton' => 'BE'), + '3763' => array('town' => 'Därstetten', 'canton' => 'BE'), + '3764' => array('town' => 'Weissenburg', 'canton' => 'BE'), + '3765' => array('town' => 'Oberwil i. S.', 'canton' => 'BE'), + '3766' => array('town' => 'Boltigen', 'canton' => 'BE'), + '3770' => array('town' => 'Zweisimmen', 'canton' => 'BE'), + '3771' => array('town' => 'Blankenburg', 'canton' => 'BE'), + '3772' => array('town' => 'St. Stephan', 'canton' => 'BE'), + '3773' => array('town' => 'Matten(St.Stephan)', 'canton' => 'BE'), + '3775' => array('town' => 'Lenk im Simmental', 'canton' => 'BE'), + '3776' => array('town' => 'Oeschseite', 'canton' => 'BE'), + '3777' => array('town' => 'Saanenmöser', 'canton' => 'BE'), + '3778' => array('town' => 'Schönried', 'canton' => 'BE'), + '3780' => array('town' => 'Gstaad', 'canton' => 'BE'), + '3781' => array('town' => 'Turbach', 'canton' => 'BE'), + '3782' => array('town' => 'Lauenen b. Gstaad', 'canton' => 'BE'), + '3783' => array('town' => 'Grund b. Gstaad', 'canton' => 'BE'), + '3784' => array('town' => 'Feutersoey', 'canton' => 'BE'), + '3785' => array('town' => 'Gsteig b. Gstaad', 'canton' => 'BE'), + '3792' => array('town' => 'Saanen', 'canton' => 'BE'), + '3800' => array('town' => 'Interlaken', 'canton' => 'BE'), + '3801' => array('town' => 'Jungfraujoch', 'canton' => 'VS'), + '3803' => array('town' => 'Beatenberg', 'canton' => 'BE'), + '3804' => array('town' => 'Habkern', 'canton' => 'BE'), + '3805' => array('town' => 'Goldswil', 'canton' => 'BE'), + '3806' => array('town' => 'Bönigen', 'canton' => 'BE'), + '3807' => array('town' => 'Iseltwald', 'canton' => 'BE'), + '3812' => array('town' => 'Wilderswil', 'canton' => 'BE'), + '3813' => array('town' => 'Saxeten', 'canton' => 'BE'), + '3814' => array('town' => 'Gsteigwiler', 'canton' => 'BE'), + '3815' => array('town' => 'Zweilütschinen', 'canton' => 'BE'), + '3816' => array('town' => 'Lütschental', 'canton' => 'BE'), + '3818' => array('town' => 'Grindelwald', 'canton' => 'BE'), + '3822' => array('town' => 'Lauterbrunnen', 'canton' => 'BE'), + '3823' => array('town' => 'Wengen', 'canton' => 'BE'), + '3824' => array('town' => 'Stechelberg', 'canton' => 'BE'), + '3825' => array('town' => 'Mürren', 'canton' => 'BE'), + '3826' => array('town' => 'Gimmelwald', 'canton' => 'BE'), + '3852' => array('town' => 'Ringgenberg BE', 'canton' => 'BE'), + '3853' => array('town' => 'Niederried Interl', 'canton' => 'BE'), + '3854' => array('town' => 'Oberried Brienz', 'canton' => 'BE'), + '3855' => array('town' => 'Brienz BE', 'canton' => 'BE'), + '3856' => array('town' => 'Brienzwiler', 'canton' => 'BE'), + '3857' => array('town' => 'Unterbach BE', 'canton' => 'BE'), + '3858' => array('town' => 'Hofstetten BE', 'canton' => 'BE'), + '3860' => array('town' => 'Meiringen', 'canton' => 'BE'), + '3862' => array('town' => 'Innertkirchen', 'canton' => 'BE'), + '3863' => array('town' => 'Gadmen', 'canton' => 'BE'), + '3864' => array('town' => 'Guttannen', 'canton' => 'BE'), + '3900' => array('town' => 'Brig', 'canton' => 'VS'), + '3949' => array('town' => 'Hohtenn', 'canton' => 'VS'), + '3903' => array('town' => 'Birgisch', 'canton' => 'VS'), + '3914' => array('town' => 'Blatten b. Naters', 'canton' => 'VS'), + '3913' => array('town' => 'Rosswald', 'canton' => 'VS'), + '3911' => array('town' => 'Ried-Brig', 'canton' => 'VS'), + '3912' => array('town' => 'Termen', 'canton' => 'VS'), + '3901' => array('town' => 'Rothwald', 'canton' => 'VS'), + '3907' => array('town' => 'Simplon Hospiz', 'canton' => 'VS'), + '3922' => array('town' => 'Eisten', 'canton' => 'VS'), + '3908' => array('town' => 'Saas-Balen', 'canton' => 'VS'), + '3910' => array('town' => 'Saas-Grund', 'canton' => 'VS'), + '3902' => array('town' => 'Glis', 'canton' => 'VS'), + '3917' => array('town' => 'Goppenstein', 'canton' => 'VS'), + '3916' => array('town' => 'Ferden', 'canton' => 'VS'), + '3918' => array('town' => 'Wiler (Lötschen)', 'canton' => 'VS'), + '3919' => array('town' => 'Blatten(Lötschen)', 'canton' => 'VS'), + '3904' => array('town' => 'Naters', 'canton' => 'VS'), + '3905' => array('town' => 'Saas-Almagell', 'canton' => 'VS'), + '3906' => array('town' => 'Saas-Fee', 'canton' => 'VS'), + '3920' => array('town' => 'Zermatt', 'canton' => 'VS'), + '3923' => array('town' => 'Törbel', 'canton' => 'VS'), + '3926' => array('town' => 'Embd', 'canton' => 'VS'), + '3927' => array('town' => 'Herbriggen', 'canton' => 'VS'), + '3928' => array('town' => 'Randa', 'canton' => 'VS'), + '3929' => array('town' => 'Täsch', 'canton' => 'VS'), + '3924' => array('town' => 'St. Niklaus VS', 'canton' => 'VS'), + '3925' => array('town' => 'Grächen', 'canton' => 'VS'), + '3930' => array('town' => 'Visp', 'canton' => 'VS'), + '3942' => array('town' => 'St. German', 'canton' => 'VS'), + '3933' => array('town' => 'Staldenried', 'canton' => 'VS'), + '3937' => array('town' => 'Baltschieder', 'canton' => 'VS'), + '3938' => array('town' => 'Ausserberg', 'canton' => 'VS'), + '3939' => array('town' => 'Eggerberg', 'canton' => 'VS'), + '3931' => array('town' => 'Lalden', 'canton' => 'VS'), + '3932' => array('town' => 'Visperterminen', 'canton' => 'VS'), + '3934' => array('town' => 'Zeneggen', 'canton' => 'VS'), + '3935' => array('town' => 'Bürchen', 'canton' => 'VS'), + '3943' => array('town' => 'Eischoll', 'canton' => 'VS'), + '3944' => array('town' => 'Unterbäch VS', 'canton' => 'VS'), + '3947' => array('town' => 'Ergisch', 'canton' => 'VS'), + '3948' => array('town' => 'Unterems', 'canton' => 'VS'), + '3946' => array('town' => 'Gruben', 'canton' => 'VS'), + '3951' => array('town' => 'Agarn', 'canton' => 'VS'), + '3955' => array('town' => 'Albinen', 'canton' => 'VS'), + '3956' => array('town' => 'Guttet-Feschel', 'canton' => 'VS'), + '3957' => array('town' => 'Erschmatt', 'canton' => 'VS'), + '3953' => array('town' => 'Varen', 'canton' => 'VS'), + '3976' => array('town' => 'Noës', 'canton' => 'VS'), + '3978' => array('town' => 'Flanthey', 'canton' => 'VS'), + '1978' => array('town' => 'Lens', 'canton' => 'VS'), + '1977' => array('town' => 'Icogne', 'canton' => 'VS'), + '3979' => array('town' => 'Grône', 'canton' => 'VS'), + '3945' => array('town' => 'Gampel', 'canton' => 'VS'), + '3952' => array('town' => 'Susten', 'canton' => 'VS'), + '3954' => array('town' => 'Leukerbad', 'canton' => 'VS'), + '3970' => array('town' => 'Salgesch', 'canton' => 'VS'), + '3977' => array('town' => 'Granges VS', 'canton' => 'VS'), + '1958' => array('town' => 'St-Léonard', 'canton' => 'VS'), + '3960' => array('town' => 'Sierre', 'canton' => 'VS'), + '3971' => array('town' => 'Chermignon', 'canton' => 'VS'), + '3972' => array('town' => 'Miège', 'canton' => 'VS'), + '3973' => array('town' => 'Venthône', 'canton' => 'VS'), + '3974' => array('town' => 'Mollens VS', 'canton' => 'VS'), + '3975' => array('town' => 'Randogne', 'canton' => 'VS'), + '3961' => array('town' => 'Vissoie', 'canton' => 'VS'), + '3967' => array('town' => 'Vercorin', 'canton' => 'VS'), + '3963' => array('town' => 'Montana', 'canton' => 'VS'), + '3965' => array('town' => 'Chippis', 'canton' => 'VS'), + '3966' => array('town' => 'Chalais', 'canton' => 'VS'), + '3968' => array('town' => 'Veyras', 'canton' => 'VS'), + '3982' => array('town' => 'Bitsch', 'canton' => 'VS'), + '3993' => array('town' => 'Grengiols', 'canton' => 'VS'), + '3994' => array('town' => 'Lax', 'canton' => 'VS'), + '3997' => array('town' => 'Bellwald', 'canton' => 'VS'), + '3989' => array('town' => 'Niederwald', 'canton' => 'VS'), + '3998' => array('town' => 'Gluringen', 'canton' => 'VS'), + '3985' => array('town' => 'Geschinen', 'canton' => 'VS'), + '3988' => array('town' => 'Obergesteln', 'canton' => 'VS'), + '3999' => array('town' => 'Oberwald', 'canton' => 'VS'), + '3986' => array('town' => 'Ried-Mörel', 'canton' => 'VS'), + '3987' => array('town' => 'Riederalp', 'canton' => 'VS'), + '3991' => array('town' => 'Betten', 'canton' => 'VS'), + '3992' => array('town' => 'Bettmeralp', 'canton' => 'VS'), + '3995' => array('town' => 'Ernen', 'canton' => 'VS'), + '3996' => array('town' => 'Binn', 'canton' => 'VS'), + '3983' => array('town' => 'Mörel', 'canton' => 'VS'), + '3984' => array('town' => 'Fiesch', 'canton' => 'VS'), + '4000' => array('town' => 'Basel', 'canton' => 'BS'), + '4001' => array('town' => 'Basel', 'canton' => 'BS'), + '4002' => array('town' => 'Basel', 'canton' => 'BS'), + '4003' => array('town' => 'Basel', 'canton' => 'BS'), + '4004' => array('town' => 'Basel', 'canton' => 'BS'), + '4005' => array('town' => 'Basel', 'canton' => 'BS'), + '4007' => array('town' => 'Basel', 'canton' => 'BS'), + '4008' => array('town' => 'Basel', 'canton' => 'BS'), + '4009' => array('town' => 'Basel', 'canton' => 'BS'), + '4010' => array('town' => 'Basel', 'canton' => 'BS'), + '4011' => array('town' => 'Basel', 'canton' => 'BS'), + '4012' => array('town' => 'Basel', 'canton' => 'BS'), + '4013' => array('town' => 'Basel', 'canton' => 'BS'), + '4015' => array('town' => 'Basel', 'canton' => 'BS'), + '4016' => array('town' => 'Basel', 'canton' => 'BS'), + '4017' => array('town' => 'Basel', 'canton' => 'BS'), + '4018' => array('town' => 'Basel', 'canton' => 'BS'), + '4019' => array('town' => 'Basel', 'canton' => 'BS'), + '4020' => array('town' => 'Basel', 'canton' => 'BS'), + '4023' => array('town' => 'Basel', 'canton' => 'BL'), + '4024' => array('town' => 'Basel', 'canton' => 'BS'), + '4025' => array('town' => 'Basel', 'canton' => 'BS'), + '4030' => array('town' => 'Basel', 'canton' => 'BS'), + '4031' => array('town' => 'Basel UniSpital', 'canton' => 'BS'), + '4032' => array('town' => 'Basel', 'canton' => 'BS'), + '4051' => array('town' => 'Basel', 'canton' => 'BS'), + '4052' => array('town' => 'Basel', 'canton' => 'BS'), + '4053' => array('town' => 'Basel', 'canton' => 'BS'), + '4054' => array('town' => 'Basel', 'canton' => 'BS'), + '4055' => array('town' => 'Basel', 'canton' => 'BS'), + '4056' => array('town' => 'Basel', 'canton' => 'BS'), + '4057' => array('town' => 'Basel', 'canton' => 'BS'), + '4058' => array('town' => 'Basel', 'canton' => 'BS'), + '4059' => array('town' => 'Basel', 'canton' => 'BS'), + '4091' => array('town' => 'Basel', 'canton' => 'BS'), + '4101' => array('town' => 'Bruderholz', 'canton' => 'BL'), + '4102' => array('town' => 'Binningen', 'canton' => 'BL'), + '4103' => array('town' => 'Bottmingen', 'canton' => 'BL'), + '4104' => array('town' => 'Oberwil BL', 'canton' => 'BL'), + '4105' => array('town' => 'Biel-Benken BL', 'canton' => 'BL'), + '4106' => array('town' => 'Therwil', 'canton' => 'BL'), + '4107' => array('town' => 'Ettingen', 'canton' => 'BL'), + '4108' => array('town' => 'Witterswil', 'canton' => 'SO'), + '4112' => array('town' => 'Bättwil-Flüh', 'canton' => 'SO'), + '4114' => array('town' => 'Hofstetten SO', 'canton' => 'SO'), + '4115' => array('town' => 'Mariastein', 'canton' => 'SO'), + '4116' => array('town' => 'Metzerlen', 'canton' => 'SO'), + '4117' => array('town' => 'Burg im Leimental', 'canton' => 'BL'), + '4118' => array('town' => 'Rodersdorf', 'canton' => 'SO'), + '4123' => array('town' => 'Allschwil', 'canton' => 'BL'), + '4124' => array('town' => 'Schönenbuch', 'canton' => 'BL'), + '4125' => array('town' => 'Riehen', 'canton' => 'BS'), + '4126' => array('town' => 'Bettingen', 'canton' => 'BS'), + '4127' => array('town' => 'Birsfelden', 'canton' => 'BL'), + '4132' => array('town' => 'Muttenz', 'canton' => 'BL'), + '4133' => array('town' => 'Pratteln', 'canton' => 'BL'), + '4142' => array('town' => 'Münchenstein', 'canton' => 'BL'), + '4143' => array('town' => 'Dornach', 'canton' => 'SO'), + '4144' => array('town' => 'Arlesheim', 'canton' => 'BL'), + '4145' => array('town' => 'Gempen', 'canton' => 'SO'), + '4146' => array('town' => 'Hochwald', 'canton' => 'SO'), + '4147' => array('town' => 'Aesch BL', 'canton' => 'BL'), + '4148' => array('town' => 'Pfeffingen', 'canton' => 'BL'), + '4153' => array('town' => 'Reinach BL', 'canton' => 'BL'), + '4202' => array('town' => 'Duggingen', 'canton' => 'BL'), + '4203' => array('town' => 'Grellingen', 'canton' => 'BL'), + '4206' => array('town' => 'Seewen SO', 'canton' => 'SO'), + '4207' => array('town' => 'Bretzwil', 'canton' => 'BL'), + '4208' => array('town' => 'Nunningen', 'canton' => 'SO'), + '4222' => array('town' => 'Zwingen', 'canton' => 'BL'), + '4225' => array('town' => 'Brislach', 'canton' => 'BL'), + '4226' => array('town' => 'Breitenbach', 'canton' => 'SO'), + '4227' => array('town' => 'Büsserach', 'canton' => 'SO'), + '4228' => array('town' => 'Erschwil', 'canton' => 'SO'), + '4242' => array('town' => 'Laufen', 'canton' => 'BL'), + '4243' => array('town' => 'Dittingen', 'canton' => 'BL'), + '4244' => array('town' => 'Röschenz', 'canton' => 'BL'), + '4245' => array('town' => 'Kleinlützel', 'canton' => 'SO'), + '4204' => array('town' => 'Himmelried', 'canton' => 'SO'), + '4223' => array('town' => 'Blauen', 'canton' => 'BL'), + '4224' => array('town' => 'Nenzlingen', 'canton' => 'BL'), + '4229' => array('town' => 'Beinwil SO', 'canton' => 'SO'), + '4232' => array('town' => 'Fehren', 'canton' => 'SO'), + '4233' => array('town' => 'Meltingen', 'canton' => 'SO'), + '4234' => array('town' => 'Zullwil', 'canton' => 'SO'), + '4246' => array('town' => 'Wahlen b. Laufen', 'canton' => 'BL'), + '4247' => array('town' => 'Grindel', 'canton' => 'SO'), + '4252' => array('town' => 'Bärschwil', 'canton' => 'SO'), + '4253' => array('town' => 'Liesberg', 'canton' => 'BL'), + '4254' => array('town' => 'Liesberg Dorf', 'canton' => 'BL'), + '4302' => array('town' => 'Augst BL', 'canton' => 'BL'), + '4303' => array('town' => 'Kaiseraugst', 'canton' => 'AG'), + '4304' => array('town' => 'Giebenach', 'canton' => 'BL'), + '4305' => array('town' => 'Olsberg', 'canton' => 'AG'), + '4310' => array('town' => 'Rheinfelden', 'canton' => 'AG'), + '4312' => array('town' => 'Magden', 'canton' => 'AG'), + '4313' => array('town' => 'Möhlin', 'canton' => 'AG'), + '4314' => array('town' => 'Zeiningen', 'canton' => 'AG'), + '4315' => array('town' => 'Zuzgen', 'canton' => 'AG'), + '4316' => array('town' => 'Hellikon', 'canton' => 'AG'), + '4317' => array('town' => 'Wegenstetten', 'canton' => 'AG'), + '4322' => array('town' => 'Mumpf', 'canton' => 'AG'), + '4323' => array('town' => 'Wallbach', 'canton' => 'AG'), + '4324' => array('town' => 'Obermumpf', 'canton' => 'AG'), + '4325' => array('town' => 'Schupfart', 'canton' => 'AG'), + '4332' => array('town' => 'Stein AG', 'canton' => 'AG'), + '4333' => array('town' => 'Münchwilen AG', 'canton' => 'AG'), + '4334' => array('town' => 'Sisseln AG', 'canton' => 'AG'), + '5080' => array('town' => 'Laufenburg', 'canton' => 'AG'), + '5082' => array('town' => 'Kaisten', 'canton' => 'AG'), + '5083' => array('town' => 'Ittenthal', 'canton' => 'AG'), + '5084' => array('town' => 'Rheinsulz', 'canton' => 'AG'), + '5085' => array('town' => 'Sulz AG', 'canton' => 'AG'), + '5275' => array('town' => 'Etzgen', 'canton' => 'AG'), + '5274' => array('town' => 'Mettau', 'canton' => 'AG'), + '5273' => array('town' => 'Oberhofen AG', 'canton' => 'AG'), + '5272' => array('town' => 'Gansingen', 'canton' => 'AG'), + '5276' => array('town' => 'Wil AG', 'canton' => 'AG'), + '5277' => array('town' => 'Hottwil', 'canton' => 'AG'), + '5326' => array('town' => 'Schwaderloch', 'canton' => 'AG'), + '5325' => array('town' => 'Leibstadt', 'canton' => 'AG'), + '5324' => array('town' => 'Full-Reuenthal', 'canton' => 'AG'), + '4402' => array('town' => 'Frenkendorf', 'canton' => 'BL'), + '4410' => array('town' => 'Liestal', 'canton' => 'BL'), + '4411' => array('town' => 'Seltisberg', 'canton' => 'BL'), + '4412' => array('town' => 'Nuglar', 'canton' => 'SO'), + '4413' => array('town' => 'Büren SO', 'canton' => 'SO'), + '4414' => array('town' => 'Füllinsdorf', 'canton' => 'BL'), + '4415' => array('town' => 'Lausen', 'canton' => 'BL'), + '4416' => array('town' => 'Bubendorf', 'canton' => 'BL'), + '4417' => array('town' => 'Ziefen', 'canton' => 'BL'), + '4418' => array('town' => 'Reigoldswil', 'canton' => 'BL'), + '4419' => array('town' => 'Lupsingen', 'canton' => 'BL'), + '4421' => array('town' => 'St. Pantaleon', 'canton' => 'SO'), + '4422' => array('town' => 'Arisdorf', 'canton' => 'BL'), + '4423' => array('town' => 'Hersberg', 'canton' => 'BL'), + '4424' => array('town' => 'Arboldswil', 'canton' => 'BL'), + '4425' => array('town' => 'Titterten', 'canton' => 'BL'), + '4426' => array('town' => 'Lauwil', 'canton' => 'BL'), + '4431' => array('town' => 'Bennwil', 'canton' => 'BL'), + '4432' => array('town' => 'Lampenberg', 'canton' => 'BL'), + '4433' => array('town' => 'Ramlinsburg', 'canton' => 'BL'), + '4434' => array('town' => 'Hölstein', 'canton' => 'BL'), + '4435' => array('town' => 'Niederdorf', 'canton' => 'BL'), + '4436' => array('town' => 'Oberdorf BL', 'canton' => 'BL'), + '4437' => array('town' => 'Waldenburg', 'canton' => 'BL'), + '4438' => array('town' => 'Langenbruck', 'canton' => 'BL'), + '4441' => array('town' => 'Thürnen', 'canton' => 'BL'), + '4442' => array('town' => 'Diepflingen', 'canton' => 'BL'), + '4443' => array('town' => 'Wittinsburg', 'canton' => 'BL'), + '4444' => array('town' => 'Rümlingen', 'canton' => 'BL'), + '4445' => array('town' => 'Häfelfingen', 'canton' => 'BL'), + '4446' => array('town' => 'Buckten', 'canton' => 'BL'), + '4447' => array('town' => 'Känerkinden', 'canton' => 'BL'), + '4448' => array('town' => 'Läufelfingen', 'canton' => 'BL'), + '4450' => array('town' => 'Sissach', 'canton' => 'BL'), + '4451' => array('town' => 'Wintersingen', 'canton' => 'BL'), + '4452' => array('town' => 'Itingen', 'canton' => 'BL'), + '4453' => array('town' => 'Nusshof', 'canton' => 'BL'), + '4455' => array('town' => 'Zunzgen', 'canton' => 'BL'), + '4456' => array('town' => 'Tenniken', 'canton' => 'BL'), + '4457' => array('town' => 'Diegten', 'canton' => 'BL'), + '4458' => array('town' => 'Eptingen', 'canton' => 'BL'), + '4460' => array('town' => 'Gelterkinden', 'canton' => 'BL'), + '4461' => array('town' => 'Böckten', 'canton' => 'BL'), + '4465' => array('town' => 'Hemmiken', 'canton' => 'BL'), + '4469' => array('town' => 'Anwil', 'canton' => 'BL'), + '4462' => array('town' => 'Rickenbach BL', 'canton' => 'BL'), + '4463' => array('town' => 'Buus', 'canton' => 'BL'), + '4464' => array('town' => 'Maisprach', 'canton' => 'BL'), + '4466' => array('town' => 'Ormalingen', 'canton' => 'BL'), + '4467' => array('town' => 'Rothenfluh', 'canton' => 'BL'), + '4468' => array('town' => 'Kienberg', 'canton' => 'SO'), + '4492' => array('town' => 'Tecknau', 'canton' => 'BL'), + '4493' => array('town' => 'Wenslingen', 'canton' => 'BL'), + '4494' => array('town' => 'Oltingen', 'canton' => 'BL'), + '4495' => array('town' => 'Zeglingen', 'canton' => 'BL'), + '4496' => array('town' => 'Kilchberg BL', 'canton' => 'BL'), + '4497' => array('town' => 'Rünenberg', 'canton' => 'BL'), + '4500' => array('town' => 'Solothurn', 'canton' => 'SO'), + '4501' => array('town' => 'Solothurn', 'canton' => 'SO'), + '4502' => array('town' => 'Solothurn', 'canton' => 'SO'), + '4503' => array('town' => 'Solothurn', 'canton' => 'SO'), + '4515' => array('town' => 'Weissenstein', 'canton' => 'SO'), + '4525' => array('town' => 'Balm b. Günsberg', 'canton' => 'SO'), + '4523' => array('town' => 'Niederwil SO', 'canton' => 'SO'), + '4535' => array('town' => 'Hubersdorf', 'canton' => 'SO'), + '4539' => array('town' => 'Rumisberg', 'canton' => 'BE'), + '4557' => array('town' => 'Horriwil', 'canton' => 'SO'), + '4558' => array('town' => 'Hersiwil', 'canton' => 'SO'), + '4512' => array('town' => 'Bellach', 'canton' => 'SO'), + '4513' => array('town' => 'Langendorf', 'canton' => 'SO'), + '4514' => array('town' => 'Lommiswil', 'canton' => 'SO'), + '4522' => array('town' => 'Rüttenen', 'canton' => 'SO'), + '4524' => array('town' => 'Günsberg', 'canton' => 'SO'), + '4528' => array('town' => 'Zuchwil', 'canton' => 'SO'), + '4532' => array('town' => 'Feldbrunnen', 'canton' => 'SO'), + '4533' => array('town' => 'Riedholz', 'canton' => 'SO'), + '4534' => array('town' => 'Flumenthal', 'canton' => 'SO'), + '4536' => array('town' => 'Attiswil', 'canton' => 'BE'), + '4537' => array('town' => 'Wiedlisbach', 'canton' => 'BE'), + '4538' => array('town' => 'Oberbipp', 'canton' => 'BE'), + '4552' => array('town' => 'Derendingen', 'canton' => 'SO'), + '4553' => array('town' => 'Subingen', 'canton' => 'SO'), + '4554' => array('town' => 'Etziken', 'canton' => 'SO'), + '3375' => array('town' => 'Inkwil', 'canton' => 'BE'), + '4562' => array('town' => 'Biberist', 'canton' => 'SO'), + '4563' => array('town' => 'Gerlafingen', 'canton' => 'SO'), + '4564' => array('town' => 'Obergerlafingen', 'canton' => 'SO'), + '4565' => array('town' => 'Recherswil', 'canton' => 'SO'), + '4566' => array('town' => 'Kriegstetten', 'canton' => 'SO'), + '4581' => array('town' => 'Küttigkofen', 'canton' => 'SO'), + '4586' => array('town' => 'Kyburg-Buchegg', 'canton' => 'SO'), + '4582' => array('town' => 'Brügglen', 'canton' => 'SO'), + '4583' => array('town' => 'Mühledorf SO', 'canton' => 'SO'), + '4579' => array('town' => 'Gossliwil', 'canton' => 'SO'), + '4578' => array('town' => 'Bibern SO', 'canton' => 'SO'), + '4571' => array('town' => 'Lüterkofen-Ichert', 'canton' => 'SO'), + '4576' => array('town' => 'Tscheppach', 'canton' => 'SO'), + '4577' => array('town' => 'Hessigkofen', 'canton' => 'SO'), + '4585' => array('town' => 'Biezwil', 'canton' => 'SO'), + '4587' => array('town' => 'Aetingen', 'canton' => 'SO'), + '4588' => array('town' => 'Unterramsern', 'canton' => 'SO'), + '4574' => array('town' => 'Nennigkofen', 'canton' => 'SO'), + '4600' => array('town' => 'Olten', 'canton' => 'SO'), + '4601' => array('town' => 'Olten', 'canton' => 'SO'), + '4603' => array('town' => 'Olten', 'canton' => 'SO'), + '4612' => array('town' => 'Wangen b. Olten', 'canton' => 'SO'), + '4613' => array('town' => 'Rickenbach SO', 'canton' => 'SO'), + '4614' => array('town' => 'Hägendorf', 'canton' => 'SO'), + '4616' => array('town' => 'Kappel SO', 'canton' => 'SO'), + '4617' => array('town' => 'Gunzgen', 'canton' => 'SO'), + '4618' => array('town' => 'Boningen', 'canton' => 'SO'), + '4622' => array('town' => 'Egerkingen', 'canton' => 'SO'), + '4623' => array('town' => 'Neuendorf', 'canton' => 'SO'), + '4624' => array('town' => 'Härkingen', 'canton' => 'SO'), + '4625' => array('town' => 'Oberbuchsiten', 'canton' => 'SO'), + '4626' => array('town' => 'Niederbuchsiten', 'canton' => 'SO'), + '4632' => array('town' => 'Trimbach', 'canton' => 'SO'), + '4652' => array('town' => 'Winznau', 'canton' => 'SO'), + '4653' => array('town' => 'Obergösgen', 'canton' => 'SO'), + '4654' => array('town' => 'Lostorf', 'canton' => 'SO'), + '4655' => array('town' => 'Stüsslingen', 'canton' => 'SO'), + '4656' => array('town' => 'Starrkirch-Wil', 'canton' => 'SO'), + '4657' => array('town' => 'Dulliken', 'canton' => 'SO'), + '4658' => array('town' => 'Däniken SO', 'canton' => 'SO'), + '5010' => array('town' => 'Däniken PZ', 'canton' => 'SO'), + '4663' => array('town' => 'Aarburg', 'canton' => 'AG'), + '4665' => array('town' => 'Oftringen', 'canton' => 'AG'), + '4615' => array('town' => 'Allerheiligenberg', 'canton' => 'SO'), + '4633' => array('town' => 'Hauenstein', 'canton' => 'SO'), + '4634' => array('town' => 'Wisen SO', 'canton' => 'SO'), + '4702' => array('town' => 'Oensingen', 'canton' => 'SO'), + '4703' => array('town' => 'Kestenholz', 'canton' => 'SO'), + '4704' => array('town' => 'Niederbipp', 'canton' => 'BE'), + '3380' => array('town' => 'Wangen an der Aare', 'canton' => 'BE'), + '3377' => array('town' => 'Walliswil b.Wangen', 'canton' => 'BE'), + '4543' => array('town' => 'Deitingen', 'canton' => 'SO'), + '4542' => array('town' => 'Luterbach', 'canton' => 'SO'), + '4710' => array('town' => 'Balsthal', 'canton' => 'SO'), + '4714' => array('town' => 'Aedermannsdorf', 'canton' => 'SO'), + '4715' => array('town' => 'Herbetswil', 'canton' => 'SO'), + '4719' => array('town' => 'Ramiswil', 'canton' => 'SO'), + '4712' => array('town' => 'Laupersdorf', 'canton' => 'SO'), + '4713' => array('town' => 'Matzendorf', 'canton' => 'SO'), + '4716' => array('town' => 'Welschenrohr', 'canton' => 'SO'), + '4717' => array('town' => 'Mümliswil', 'canton' => 'SO'), + '4718' => array('town' => 'Holderbank SO', 'canton' => 'SO'), + '4800' => array('town' => 'Zofingen', 'canton' => 'AG'), + '4801' => array('town' => 'Zofingen', 'canton' => 'AG'), + '4802' => array('town' => 'Strengelbach', 'canton' => 'AG'), + '4803' => array('town' => 'Vordemwald', 'canton' => 'AG'), + '4805' => array('town' => 'Brittnau', 'canton' => 'AG'), + '4806' => array('town' => 'Wikon', 'canton' => 'LU'), + '4812' => array('town' => 'Mühlethal', 'canton' => 'AG'), + '4813' => array('town' => 'Uerkheim', 'canton' => 'AG'), + '4814' => array('town' => 'Bottenwil', 'canton' => 'AG'), + '4852' => array('town' => 'Rothrist', 'canton' => 'AG'), + '4853' => array('town' => 'Murgenthal', 'canton' => 'AG'), + '4629' => array('town' => 'Fulenbach', 'canton' => 'SO'), + '4628' => array('town' => 'Wolfwil', 'canton' => 'SO'), + '4856' => array('town' => 'Glashütten', 'canton' => 'AG'), + '4900' => array('town' => 'Langenthal', 'canton' => 'BE'), + '4901' => array('town' => 'Langenthal', 'canton' => 'BE'), + '4902' => array('town' => 'Langenthal', 'canton' => 'BE'), + '4911' => array('town' => 'Schwarzhäusern', 'canton' => 'BE'), + '4912' => array('town' => 'Aarwangen', 'canton' => 'BE'), + '4913' => array('town' => 'Bannwil', 'canton' => 'BE'), + '4914' => array('town' => 'Roggwil BE', 'canton' => 'BE'), + '4915' => array('town' => 'St. Urban', 'canton' => 'LU'), + '4916' => array('town' => 'Untersteckholz', 'canton' => 'BE'), + '4917' => array('town' => 'Melchnau', 'canton' => 'BE'), + '4955' => array('town' => 'Gondiswil', 'canton' => 'BE'), + '4919' => array('town' => 'Reisiswil', 'canton' => 'BE'), + '4922' => array('town' => 'Bützberg', 'canton' => 'BE'), + '4923' => array('town' => 'Wynau', 'canton' => 'BE'), + '4924' => array('town' => 'Obersteckholz', 'canton' => 'BE'), + '4932' => array('town' => 'Lotzwil', 'canton' => 'BE'), + '4933' => array('town' => 'Rütschelen', 'canton' => 'BE'), + '4934' => array('town' => 'Madiswil', 'canton' => 'BE'), + '4935' => array('town' => 'Leimiswil', 'canton' => 'BE'), + '4936' => array('town' => 'Kleindietwil', 'canton' => 'BE'), + '4937' => array('town' => 'Ursenbach', 'canton' => 'BE'), + '4938' => array('town' => 'Rohrbach', 'canton' => 'BE'), + '4942' => array('town' => 'Walterswil BE', 'canton' => 'BE'), + '4943' => array('town' => 'Oeschenbach', 'canton' => 'BE'), + '4944' => array('town' => 'Auswil', 'canton' => 'BE'), + '4950' => array('town' => 'Huttwil', 'canton' => 'BE'), + '4952' => array('town' => 'Eriswil', 'canton' => 'BE'), + '4953' => array('town' => 'Schwarzenbach BE', 'canton' => 'BE'), + '4954' => array('town' => 'Wyssachen', 'canton' => 'BE'), + '5000' => array('town' => 'Aarau', 'canton' => 'AG'), + '5001' => array('town' => 'Aarau', 'canton' => 'AG'), + '5004' => array('town' => 'Aarau', 'canton' => 'AG'), + '5012' => array('town' => 'Schönenwerd', 'canton' => 'SO'), + '5013' => array('town' => 'Niedergösgen', 'canton' => 'SO'), + '5014' => array('town' => 'Gretzenbach', 'canton' => 'SO'), + '5015' => array('town' => 'Erlinsbach SO', 'canton' => 'SO'), + '5017' => array('town' => 'Barmelweid', 'canton' => 'AG'), + '5022' => array('town' => 'Rombach', 'canton' => 'AG'), + '5023' => array('town' => 'Biberstein', 'canton' => 'AG'), + '5024' => array('town' => 'Küttigen', 'canton' => 'AG'), + '5025' => array('town' => 'Asp', 'canton' => 'AG'), + '5026' => array('town' => 'Densbüren', 'canton' => 'AG'), + '5027' => array('town' => 'Herznach', 'canton' => 'AG'), + '5028' => array('town' => 'Ueken', 'canton' => 'AG'), + '5032' => array('town' => 'Aarau Rohr', 'canton' => 'AG'), + '5033' => array('town' => 'Buchs AG', 'canton' => 'AG'), + '5034' => array('town' => 'Suhr', 'canton' => 'AG'), + '5035' => array('town' => 'Unterentfelden', 'canton' => 'AG'), + '5036' => array('town' => 'Oberentfelden', 'canton' => 'AG'), + '5037' => array('town' => 'Muhen', 'canton' => 'AG'), + '5040' => array('town' => 'Schöftland', 'canton' => 'AG'), + '5042' => array('town' => 'Hirschthal', 'canton' => 'AG'), + '5043' => array('town' => 'Holziken', 'canton' => 'AG'), + '5044' => array('town' => 'Schlossrued', 'canton' => 'AG'), + '5046' => array('town' => 'Schmiedrued', 'canton' => 'AG'), + '5053' => array('town' => 'Staffelbach', 'canton' => 'AG'), + '5054' => array('town' => 'Kirchleerau-Moosle', 'canton' => 'AG'), + '5056' => array('town' => 'Attelwil', 'canton' => 'AG'), + '5057' => array('town' => 'Reitnau', 'canton' => 'AG'), + '5102' => array('town' => 'Rupperswil', 'canton' => 'AG'), + '5103' => array('town' => 'Wildegg', 'canton' => 'AG'), + '5105' => array('town' => 'Auenstein', 'canton' => 'AG'), + '5106' => array('town' => 'Veltheim AG', 'canton' => 'AG'), + '5107' => array('town' => 'Schinznach Dorf', 'canton' => 'AG'), + '5108' => array('town' => 'Oberflachs', 'canton' => 'AG'), + '5112' => array('town' => 'Thalheim AG', 'canton' => 'AG'), + '5113' => array('town' => 'Holderbank AG', 'canton' => 'AG'), + '5116' => array('town' => 'Schinznach Bad', 'canton' => 'AG'), + '5245' => array('town' => 'Habsburg', 'canton' => 'AG'), + '5246' => array('town' => 'Scherz', 'canton' => 'AG'), + '5200' => array('town' => 'Brugg AG', 'canton' => 'AG'), + '5210' => array('town' => 'Windisch', 'canton' => 'AG'), + '5201' => array('town' => 'Brugg AG', 'canton' => 'AG'), + '5212' => array('town' => 'Hausen AG', 'canton' => 'AG'), + '5213' => array('town' => 'Villnachern', 'canton' => 'AG'), + '5222' => array('town' => 'Umiken', 'canton' => 'AG'), + '5223' => array('town' => 'Riniken', 'canton' => 'AG'), + '5224' => array('town' => 'Unterbözberg', 'canton' => 'AG'), + '5225' => array('town' => 'Oberbözberg', 'canton' => 'AG'), + '5233' => array('town' => 'Stilli', 'canton' => 'AG'), + '5234' => array('town' => 'Villigen', 'canton' => 'AG'), + '5235' => array('town' => 'Rüfenach AG', 'canton' => 'AG'), + '5236' => array('town' => 'Remigen', 'canton' => 'AG'), + '5237' => array('town' => 'Mönthal', 'canton' => 'AG'), + '5242' => array('town' => 'Birr-Lupfig', 'canton' => 'AG'), + '5243' => array('town' => 'Mülligen', 'canton' => 'AG'), + '5244' => array('town' => 'Birrhard', 'canton' => 'AG'), + '5078' => array('town' => 'Effingen', 'canton' => 'AG'), + '5076' => array('town' => 'Bözen', 'canton' => 'AG'), + '5077' => array('town' => 'Elfingen', 'canton' => 'AG'), + '5079' => array('town' => 'Zeihen', 'canton' => 'AG'), + '5075' => array('town' => 'Hornussen', 'canton' => 'AG'), + '5070' => array('town' => 'Frick', 'canton' => 'AG'), + '5072' => array('town' => 'Oeschgen', 'canton' => 'AG'), + '5073' => array('town' => 'Gipf-Oberfrick', 'canton' => 'AG'), + '5064' => array('town' => 'Wittnau', 'canton' => 'AG'), + '5063' => array('town' => 'Wölflinswil', 'canton' => 'AG'), + '5062' => array('town' => 'Oberhof', 'canton' => 'AG'), + '5074' => array('town' => 'Eiken', 'canton' => 'AG'), + '5300' => array('town' => 'Turgi', 'canton' => 'AG'), + '5301' => array('town' => 'Siggenthal Station', 'canton' => 'AG'), + '5303' => array('town' => 'Würenlingen', 'canton' => 'AG'), + '5304' => array('town' => 'Endingen', 'canton' => 'AG'), + '5305' => array('town' => 'Unterendingen', 'canton' => 'AG'), + '5306' => array('town' => 'Tegerfelden', 'canton' => 'AG'), + '5312' => array('town' => 'Döttingen', 'canton' => 'AG'), + '5313' => array('town' => 'Klingnau', 'canton' => 'AG'), + '5314' => array('town' => 'Kleindöttingen', 'canton' => 'AG'), + '5315' => array('town' => 'Böttstein', 'canton' => 'AG'), + '5316' => array('town' => 'Leuggern', 'canton' => 'AG'), + '5317' => array('town' => 'Hettenschwil', 'canton' => 'AG'), + '5318' => array('town' => 'Mandach', 'canton' => 'AG'), + '5322' => array('town' => 'Koblenz', 'canton' => 'AG'), + '5400' => array('town' => 'Baden', 'canton' => 'AG'), + '5408' => array('town' => 'Ennetbaden', 'canton' => 'AG'), + '5401' => array('town' => 'Baden', 'canton' => 'AG'), + '5402' => array('town' => 'Baden', 'canton' => 'AG'), + '5404' => array('town' => 'Baden', 'canton' => 'AG'), + '5405' => array('town' => 'Baden', 'canton' => 'AG'), + '5406' => array('town' => 'Baden', 'canton' => 'AG'), + '5412' => array('town' => 'Gebenstorf', 'canton' => 'AG'), + '5413' => array('town' => 'Birmenstorf AG', 'canton' => 'AG'), + '5415' => array('town' => 'Nussbaumen AG', 'canton' => 'AG'), + '5416' => array('town' => 'Kirchdorf AG', 'canton' => 'AG'), + '5417' => array('town' => 'Untersiggenthal', 'canton' => 'AG'), + '5420' => array('town' => 'Ehrendingen', 'canton' => 'AG'), + '5423' => array('town' => 'Freienwil', 'canton' => 'AG'), + '5425' => array('town' => 'Schneisingen', 'canton' => 'AG'), + '5426' => array('town' => 'Lengnau AG', 'canton' => 'AG'), + '5430' => array('town' => 'Wettingen', 'canton' => 'AG'), + '5431' => array('town' => 'Wettingen Sonderd', 'canton' => 'AG'), + '5432' => array('town' => 'Neuenhof', 'canton' => 'AG'), + '5442' => array('town' => 'Fislisbach', 'canton' => 'AG'), + '5443' => array('town' => 'Niederrohrdorf', 'canton' => 'AG'), + '5444' => array('town' => 'Künten', 'canton' => 'AG'), + '5445' => array('town' => 'Eggenwil', 'canton' => 'AG'), + '5452' => array('town' => 'Oberrohrdorf', 'canton' => 'AG'), + '5453' => array('town' => 'Remetschwil', 'canton' => 'AG'), + '5454' => array('town' => 'Bellikon', 'canton' => 'AG'), + '5502' => array('town' => 'Hunzenschwil', 'canton' => 'AG'), + '5503' => array('town' => 'Schafisheim', 'canton' => 'AG'), + '5504' => array('town' => 'Othmarsingen', 'canton' => 'AG'), + '5505' => array('town' => 'Brunegg', 'canton' => 'AG'), + '5506' => array('town' => 'Mägenwil', 'canton' => 'AG'), + '5507' => array('town' => 'Mellingen', 'canton' => 'AG'), + '5512' => array('town' => 'Wohlenschwil', 'canton' => 'AG'), + '5522' => array('town' => 'Tägerig', 'canton' => 'AG'), + '5524' => array('town' => 'Nesselnbach', 'canton' => 'AG'), + '5525' => array('town' => 'Fischbach-Göslikon', 'canton' => 'AG'), + '5600' => array('town' => 'Lenzburg', 'canton' => 'AG'), + '5603' => array('town' => 'Staufen', 'canton' => 'AG'), + '5604' => array('town' => 'Hendschiken', 'canton' => 'AG'), + '5605' => array('town' => 'Dottikon', 'canton' => 'AG'), + '5606' => array('town' => 'Dintikon', 'canton' => 'AG'), + '5607' => array('town' => 'Hägglingen', 'canton' => 'AG'), + '5608' => array('town' => 'Stetten AG', 'canton' => 'AG'), + '5610' => array('town' => 'Wohlen AG', 'canton' => 'AG'), + '5611' => array('town' => 'Anglikon', 'canton' => 'AG'), + '5619' => array('town' => 'Büttikon AG', 'canton' => 'AG'), + '5612' => array('town' => 'Villmergen', 'canton' => 'AG'), + '5613' => array('town' => 'Hilfikon', 'canton' => 'AG'), + '5614' => array('town' => 'Sarmenstorf', 'canton' => 'AG'), + '5615' => array('town' => 'Fahrwangen', 'canton' => 'AG'), + '5616' => array('town' => 'Meisterschwanden', 'canton' => 'AG'), + '5617' => array('town' => 'Tennwil', 'canton' => 'AG'), + '5618' => array('town' => 'Bettwil', 'canton' => 'AG'), + '5620' => array('town' => 'Bremgarten AG', 'canton' => 'AG'), + '5621' => array('town' => 'Zufikon', 'canton' => 'AG'), + '5622' => array('town' => 'Waltenschwil', 'canton' => 'AG'), + '5623' => array('town' => 'Boswil', 'canton' => 'AG'), + '5624' => array('town' => 'Bünzen', 'canton' => 'AG'), + '5625' => array('town' => 'Kallern', 'canton' => 'AG'), + '5626' => array('town' => 'Hermetschwil-Staff', 'canton' => 'AG'), + '5627' => array('town' => 'Besenbüren', 'canton' => 'AG'), + '5628' => array('town' => 'Aristau', 'canton' => 'AG'), + '5630' => array('town' => 'Muri AG', 'canton' => 'AG'), + '5632' => array('town' => 'Buttwil', 'canton' => 'AG'), + '5634' => array('town' => 'Merenschwand', 'canton' => 'AG'), + '5636' => array('town' => 'Benzenschwil', 'canton' => 'AG'), + '5637' => array('town' => 'Beinwil (Freiamt)', 'canton' => 'AG'), + '5642' => array('town' => 'Mühlau', 'canton' => 'AG'), + '5643' => array('town' => 'Sins', 'canton' => 'AG'), + '5644' => array('town' => 'Auw', 'canton' => 'AG'), + '5645' => array('town' => 'Aettenschwil', 'canton' => 'AG'), + '5646' => array('town' => 'Abtwil AG', 'canton' => 'AG'), + '5647' => array('town' => 'Oberrüti', 'canton' => 'AG'), + '5702' => array('town' => 'Niederlenz', 'canton' => 'AG'), + '5703' => array('town' => 'Seon', 'canton' => 'AG'), + '5704' => array('town' => 'Egliswil', 'canton' => 'AG'), + '5705' => array('town' => 'Hallwil', 'canton' => 'AG'), + '5706' => array('town' => 'Boniswil', 'canton' => 'AG'), + '5707' => array('town' => 'Seengen', 'canton' => 'AG'), + '5708' => array('town' => 'Birrwil', 'canton' => 'AG'), + '5712' => array('town' => 'Beinwil am See', 'canton' => 'AG'), + '5722' => array('town' => 'Gränichen', 'canton' => 'AG'), + '5723' => array('town' => 'Teufenthal AG', 'canton' => 'AG'), + '5724' => array('town' => 'Dürrenäsch', 'canton' => 'AG'), + '5725' => array('town' => 'Leutwil', 'canton' => 'AG'), + '5726' => array('town' => 'Unterkulm', 'canton' => 'AG'), + '5727' => array('town' => 'Oberkulm', 'canton' => 'AG'), + '5728' => array('town' => 'Gontenschwil', 'canton' => 'AG'), + '5732' => array('town' => 'Zetzwil', 'canton' => 'AG'), + '5733' => array('town' => 'Leimbach AG', 'canton' => 'AG'), + '5734' => array('town' => 'Reinach AG', 'canton' => 'AG'), + '5735' => array('town' => 'Pfeffikon LU', 'canton' => 'LU'), + '5736' => array('town' => 'Burg AG', 'canton' => 'AG'), + '5737' => array('town' => 'Menziken', 'canton' => 'AG'), + '5742' => array('town' => 'Kölliken', 'canton' => 'AG'), + '5745' => array('town' => 'Safenwil', 'canton' => 'AG'), + '5746' => array('town' => 'Walterswil SO', 'canton' => 'SO'), + '6000' => array('town' => 'Luzern', 'canton' => 'LU'), + '6002' => array('town' => 'Luzern', 'canton' => 'LU'), + '6003' => array('town' => 'Luzern', 'canton' => 'LU'), + '6004' => array('town' => 'Luzern', 'canton' => 'LU'), + '6005' => array('town' => 'Luzern', 'canton' => 'LU'), + '6006' => array('town' => 'Luzern', 'canton' => 'LU'), + '6010' => array('town' => 'Kriens', 'canton' => 'LU'), + '6012' => array('town' => 'Obernau', 'canton' => 'LU'), + '6013' => array('town' => 'Eigenthal', 'canton' => 'LU'), + '6014' => array('town' => 'Luzern', 'canton' => 'LU'), + '6015' => array('town' => 'Luzern', 'canton' => 'LU'), + '6016' => array('town' => 'Hellbühl', 'canton' => 'LU'), + '6017' => array('town' => 'Ruswil', 'canton' => 'LU'), + '6019' => array('town' => 'Sigigen', 'canton' => 'LU'), + '6018' => array('town' => 'Buttisholz', 'canton' => 'LU'), + '6020' => array('town' => 'Emmenbrücke', 'canton' => 'LU'), + '6022' => array('town' => 'Grosswangen', 'canton' => 'LU'), + '6023' => array('town' => 'Rothenburg', 'canton' => 'LU'), + '6024' => array('town' => 'Hildisrieden', 'canton' => 'LU'), + '6025' => array('town' => 'Neudorf', 'canton' => 'LU'), + '6026' => array('town' => 'Rain', 'canton' => 'LU'), + '6027' => array('town' => 'Römerswil LU', 'canton' => 'LU'), + '6028' => array('town' => 'Herlisberg', 'canton' => 'LU'), + '6030' => array('town' => 'Ebikon', 'canton' => 'LU'), + '6032' => array('town' => 'Emmen', 'canton' => 'LU'), + '6033' => array('town' => 'Buchrain', 'canton' => 'LU'), + '6034' => array('town' => 'Inwil', 'canton' => 'LU'), + '6035' => array('town' => 'Perlen', 'canton' => 'LU'), + '6036' => array('town' => 'Dierikon', 'canton' => 'LU'), + '6037' => array('town' => 'Root', 'canton' => 'LU'), + '6038' => array('town' => 'Gisikon', 'canton' => 'LU'), + '6042' => array('town' => 'Dietwil', 'canton' => 'AG'), + '6043' => array('town' => 'Adligenswil', 'canton' => 'LU'), + '6044' => array('town' => 'Udligenswil', 'canton' => 'LU'), + '6045' => array('town' => 'Meggen', 'canton' => 'LU'), + '6047' => array('town' => 'Kastanienbaum', 'canton' => 'LU'), + '6048' => array('town' => 'Horw', 'canton' => 'LU'), + '6052' => array('town' => 'Hergiswil NW', 'canton' => 'NW'), + '6053' => array('town' => 'Alpnachstad', 'canton' => 'OW'), + '6055' => array('town' => 'Alpnach Dorf', 'canton' => 'OW'), + '6056' => array('town' => 'Kägiswil', 'canton' => 'OW'), + '6060' => array('town' => 'Sarnen', 'canton' => 'OW'), + '6068' => array('town' => 'Melchsee-Frutt', 'canton' => 'OW'), + '6062' => array('town' => 'Wilen (Sarnen)', 'canton' => 'OW'), + '6063' => array('town' => 'Stalden (Sarnen)', 'canton' => 'OW'), + '6064' => array('town' => 'Kerns', 'canton' => 'OW'), + '6066' => array('town' => 'St. Niklausen OW', 'canton' => 'OW'), + '6067' => array('town' => 'Melchtal', 'canton' => 'OW'), + '6072' => array('town' => 'Sachseln', 'canton' => 'OW'), + '6073' => array('town' => 'Flüeli-Ranft', 'canton' => 'OW'), + '6074' => array('town' => 'Giswil', 'canton' => 'OW'), + '6078' => array('town' => 'Bürglen OW', 'canton' => 'OW'), + '6083' => array('town' => 'Hasliberg Hohfluh', 'canton' => 'BE'), + '6084' => array('town' => 'Hasliberg Wasserw', 'canton' => 'BE'), + '6085' => array('town' => 'Hasliberg Goldern', 'canton' => 'BE'), + '6086' => array('town' => 'Hasliberg Reuti', 'canton' => 'BE'), + '6102' => array('town' => 'Malters', 'canton' => 'LU'), + '6103' => array('town' => 'Schwarzenberg LU', 'canton' => 'LU'), + '6105' => array('town' => 'Schachen LU', 'canton' => 'LU'), + '6106' => array('town' => 'Werthenstein', 'canton' => 'LU'), + '6110' => array('town' => 'Wolhusen', 'canton' => 'LU'), + '6114' => array('town' => 'Steinhuserberg', 'canton' => 'LU'), + '6112' => array('town' => 'Doppleschwand', 'canton' => 'LU'), + '6113' => array('town' => 'Romoos', 'canton' => 'LU'), + '6122' => array('town' => 'Menznau', 'canton' => 'LU'), + '6123' => array('town' => 'Geiss', 'canton' => 'LU'), + '6125' => array('town' => 'Menzberg', 'canton' => 'LU'), + '6126' => array('town' => 'Daiwil', 'canton' => 'LU'), + '6130' => array('town' => 'Willisau', 'canton' => 'LU'), + '6132' => array('town' => 'Rohrmatt', 'canton' => 'LU'), + '6133' => array('town' => 'Hergiswil LU', 'canton' => 'LU'), + '6142' => array('town' => 'Gettnau', 'canton' => 'LU'), + '6143' => array('town' => 'Ohmstal', 'canton' => 'LU'), + '6144' => array('town' => 'Zell LU', 'canton' => 'LU'), + '6145' => array('town' => 'Fischbach LU', 'canton' => 'LU'), + '6146' => array('town' => 'Grossdietwil', 'canton' => 'LU'), + '6147' => array('town' => 'Altbüron', 'canton' => 'LU'), + '6152' => array('town' => 'Hüswil', 'canton' => 'LU'), + '6153' => array('town' => 'Ufhusen', 'canton' => 'LU'), + '6154' => array('town' => 'Hofstatt', 'canton' => 'LU'), + '6156' => array('town' => 'Luthern', 'canton' => 'LU'), + '6160' => array('town' => 'Entlebuch', 'canton' => 'LU'), + '6162' => array('town' => 'Entlebuch', 'canton' => 'LU'), + '6163' => array('town' => 'Ebnet', 'canton' => 'LU'), + '6166' => array('town' => 'Hasle LU', 'canton' => 'LU'), + '6167' => array('town' => 'Bramboden', 'canton' => 'LU'), + '6170' => array('town' => 'Schüpfheim', 'canton' => 'LU'), + '6173' => array('town' => 'Flühli LU', 'canton' => 'LU'), + '6174' => array('town' => 'Sörenberg', 'canton' => 'LU'), + '6182' => array('town' => 'Escholzmatt', 'canton' => 'LU'), + '6192' => array('town' => 'Wiggen', 'canton' => 'LU'), + '6196' => array('town' => 'Marbach LU', 'canton' => 'LU'), + '6197' => array('town' => 'Schangnau', 'canton' => 'BE'), + '6203' => array('town' => 'Sempach Station', 'canton' => 'LU'), + '6204' => array('town' => 'Sempach', 'canton' => 'LU'), + '6205' => array('town' => 'Eich', 'canton' => 'LU'), + '6206' => array('town' => 'Neuenkirch', 'canton' => 'LU'), + '6207' => array('town' => 'Nottwil', 'canton' => 'LU'), + '6208' => array('town' => 'Oberkirch LU', 'canton' => 'LU'), + '6210' => array('town' => 'Sursee', 'canton' => 'LU'), + '6211' => array('town' => 'Buchs LU', 'canton' => 'LU'), + '6212' => array('town' => 'St. Erhard', 'canton' => 'LU'), + '6213' => array('town' => 'Knutwil', 'canton' => 'LU'), + '6214' => array('town' => 'Schenkon', 'canton' => 'LU'), + '6215' => array('town' => 'Beromünster', 'canton' => 'LU'), + '6216' => array('town' => 'Mauensee', 'canton' => 'LU'), + '6217' => array('town' => 'Kottwil', 'canton' => 'LU'), + '6218' => array('town' => 'Ettiswil', 'canton' => 'LU'), + '6221' => array('town' => 'Rickenbach LU', 'canton' => 'LU'), + '6222' => array('town' => 'Gunzwil', 'canton' => 'LU'), + '6231' => array('town' => 'Schlierbach', 'canton' => 'LU'), + '6232' => array('town' => 'Geuensee', 'canton' => 'LU'), + '6233' => array('town' => 'Büron', 'canton' => 'LU'), + '6234' => array('town' => 'Triengen', 'canton' => 'LU'), + '6236' => array('town' => 'Wilihof', 'canton' => 'LU'), + '6235' => array('town' => 'Winikon', 'canton' => 'LU'), + '6242' => array('town' => 'Wauwil', 'canton' => 'LU'), + '6243' => array('town' => 'Egolzwil', 'canton' => 'LU'), + '6244' => array('town' => 'Nebikon', 'canton' => 'LU'), + '6245' => array('town' => 'Ebersecken', 'canton' => 'LU'), + '6246' => array('town' => 'Altishofen', 'canton' => 'LU'), + '6247' => array('town' => 'Schötz', 'canton' => 'LU'), + '6248' => array('town' => 'Alberswil', 'canton' => 'LU'), + '6252' => array('town' => 'Dagmersellen', 'canton' => 'LU'), + '6253' => array('town' => 'Uffikon', 'canton' => 'LU'), + '6260' => array('town' => 'Reiden', 'canton' => 'LU'), + '6262' => array('town' => 'Langnau b. Reiden', 'canton' => 'LU'), + '6263' => array('town' => 'Richenthal', 'canton' => 'LU'), + '6264' => array('town' => 'Pfaffnau', 'canton' => 'LU'), + '6265' => array('town' => 'Roggliswil', 'canton' => 'LU'), + '6274' => array('town' => 'Eschenbach LU', 'canton' => 'LU'), + '6275' => array('town' => 'Ballwil', 'canton' => 'LU'), + '6276' => array('town' => 'Hohenrain', 'canton' => 'LU'), + '6277' => array('town' => 'Kleinwangen', 'canton' => 'LU'), + '6280' => array('town' => 'Hochdorf', 'canton' => 'LU'), + '6283' => array('town' => 'Baldegg', 'canton' => 'LU'), + '6284' => array('town' => 'Gelfingen', 'canton' => 'LU'), + '6285' => array('town' => 'Hitzkirch', 'canton' => 'LU'), + '6289' => array('town' => 'Müswangen', 'canton' => 'LU'), + '6286' => array('town' => 'Altwis', 'canton' => 'LU'), + '6287' => array('town' => 'Aesch LU', 'canton' => 'LU'), + '6288' => array('town' => 'Schongau', 'canton' => 'LU'), + '6294' => array('town' => 'Ermensee', 'canton' => 'LU'), + '6295' => array('town' => 'Mosen', 'canton' => 'LU'), + '6300' => array('town' => 'Zug', 'canton' => 'ZG'), + '6330' => array('town' => 'Cham 2', 'canton' => 'ZG'), + '6301' => array('town' => 'Zug', 'canton' => 'ZG'), + '6310' => array('town' => 'Zug', 'canton' => 'ZG'), + '6313' => array('town' => 'Edlibach', 'canton' => 'ZG'), + '6319' => array('town' => 'Allenwinden', 'canton' => 'ZG'), + '6315' => array('town' => 'Morgarten', 'canton' => 'ZG'), + '6312' => array('town' => 'Steinhausen', 'canton' => 'ZG'), + '6314' => array('town' => 'Unterägeri', 'canton' => 'ZG'), + '6317' => array('town' => 'Oberwil b. Zug', 'canton' => 'ZG'), + '6318' => array('town' => 'Walchwil', 'canton' => 'ZG'), + '6331' => array('town' => 'Hünenberg', 'canton' => 'ZG'), + '6332' => array('town' => 'Hagendorn', 'canton' => 'ZG'), + '6340' => array('town' => 'Baar', 'canton' => 'ZG'), + '6343' => array('town' => 'Rotkreuz', 'canton' => 'ZG'), + '6344' => array('town' => 'Meierskappel', 'canton' => 'LU'), + '6345' => array('town' => 'Neuheim', 'canton' => 'ZG'), + '6353' => array('town' => 'Weggis', 'canton' => 'LU'), + '6354' => array('town' => 'Vitznau', 'canton' => 'LU'), + '6356' => array('town' => 'Rigi Kaltbad', 'canton' => 'LU'), + '6362' => array('town' => 'Stansstad', 'canton' => 'NW'), + '6363' => array('town' => 'Obbürgen', 'canton' => 'NW'), + '6365' => array('town' => 'Kehrsiten', 'canton' => 'NW'), + '6370' => array('town' => 'Stans', 'canton' => 'NW'), + '6372' => array('town' => 'Ennetmoos', 'canton' => 'NW'), + '6373' => array('town' => 'Ennetbürgen', 'canton' => 'NW'), + '6374' => array('town' => 'Buochs', 'canton' => 'NW'), + '6375' => array('town' => 'Beckenried', 'canton' => 'NW'), + '6376' => array('town' => 'Emmetten', 'canton' => 'NW'), + '6377' => array('town' => 'Seelisberg', 'canton' => 'UR'), + '6382' => array('town' => 'Büren NW', 'canton' => 'NW'), + '6383' => array('town' => 'Dallenwil', 'canton' => 'NW'), + '6386' => array('town' => 'Wolfenschiessen', 'canton' => 'NW'), + '6387' => array('town' => 'Oberrickenbach', 'canton' => 'NW'), + '6388' => array('town' => 'Grafenort', 'canton' => 'OW'), + '6390' => array('town' => 'Engelberg', 'canton' => 'OW'), + '6402' => array('town' => 'Merlischachen', 'canton' => 'SZ'), + '6403' => array('town' => 'Küssnacht am Rigi', 'canton' => 'SZ'), + '6404' => array('town' => 'Greppen', 'canton' => 'LU'), + '6405' => array('town' => 'Immensee', 'canton' => 'SZ'), + '6410' => array('town' => 'Goldau', 'canton' => 'SZ'), + '6414' => array('town' => 'Oberarth', 'canton' => 'SZ'), + '6415' => array('town' => 'Arth', 'canton' => 'SZ'), + '6416' => array('town' => 'Steinerberg', 'canton' => 'SZ'), + '6417' => array('town' => 'Sattel', 'canton' => 'SZ'), + '6418' => array('town' => 'Rothenthurm', 'canton' => 'SZ'), + '6422' => array('town' => 'Steinen', 'canton' => 'SZ'), + '6423' => array('town' => 'Seewen SZ', 'canton' => 'SZ'), + '6424' => array('town' => 'Lauerz', 'canton' => 'SZ'), + '6430' => array('town' => 'Schwyz', 'canton' => 'SZ'), + '6436' => array('town' => 'Ried (Muotathal)', 'canton' => 'SZ'), + '6432' => array('town' => 'Rickenbach SZ', 'canton' => 'SZ'), + '6433' => array('town' => 'Stoos SZ', 'canton' => 'SZ'), + '6434' => array('town' => 'Illgau', 'canton' => 'SZ'), + '6438' => array('town' => 'Ibach', 'canton' => 'SZ'), + '6440' => array('town' => 'Brunnen', 'canton' => 'SZ'), + '6441' => array('town' => 'Rütli', 'canton' => 'UR'), + '6442' => array('town' => 'Gersau', 'canton' => 'SZ'), + '6443' => array('town' => 'Morschach', 'canton' => 'SZ'), + '6452' => array('town' => 'Sisikon', 'canton' => 'UR'), + '6454' => array('town' => 'Flüelen', 'canton' => 'UR'), + '6460' => array('town' => 'Altdorf UR', 'canton' => 'UR'), + '6461' => array('town' => 'Isenthal', 'canton' => 'UR'), + '6462' => array('town' => 'Seedorf UR', 'canton' => 'UR'), + '6463' => array('town' => 'Bürglen UR', 'canton' => 'UR'), + '6464' => array('town' => 'Spiringen', 'canton' => 'UR'), + '6465' => array('town' => 'Unterschächen', 'canton' => 'UR'), + '6466' => array('town' => 'Bauen', 'canton' => 'UR'), + '6467' => array('town' => 'Schattdorf', 'canton' => 'UR'), + '6469' => array('town' => 'Haldi b.Schattdorf', 'canton' => 'UR'), + '6468' => array('town' => 'Attinghausen', 'canton' => 'UR'), + '6472' => array('town' => 'Erstfeld', 'canton' => 'UR'), + '6473' => array('town' => 'Silenen', 'canton' => 'UR'), + '6474' => array('town' => 'Amsteg', 'canton' => 'UR'), + '6475' => array('town' => 'Bristen', 'canton' => 'UR'), + '6476' => array('town' => 'Intschi', 'canton' => 'UR'), + '6482' => array('town' => 'Gurtnellen', 'canton' => 'UR'), + '6484' => array('town' => 'Wassen UR', 'canton' => 'UR'), + '6485' => array('town' => 'Meien', 'canton' => 'UR'), + '6487' => array('town' => 'Göschenen', 'canton' => 'UR'), + '6490' => array('town' => 'Andermatt', 'canton' => 'UR'), + '6491' => array('town' => 'Realp', 'canton' => 'UR'), + '6493' => array('town' => 'Hospental', 'canton' => 'UR'), + '6500' => array('town' => 'Bellinzona', 'canton' => 'TI'), + '6501' => array('town' => 'Bellinzona', 'canton' => 'TI'), + '6503' => array('town' => 'Bellinzona', 'canton' => 'TI'), + '6506' => array('town' => 'Bellinzona 6 Autop', 'canton' => 'TI'), + '6512' => array('town' => 'Giubiasco', 'canton' => 'TI'), + '6513' => array('town' => 'Monte Carasso', 'canton' => 'TI'), + '6514' => array('town' => 'Sementina', 'canton' => 'TI'), + '6515' => array('town' => 'Gudo', 'canton' => 'TI'), + '6516' => array('town' => 'Cugnasco', 'canton' => 'TI'), + '6517' => array('town' => 'Arbedo', 'canton' => 'TI'), + '6518' => array('town' => 'Gorduno', 'canton' => 'TI'), + '6525' => array('town' => 'Gnosca', 'canton' => 'TI'), + '6526' => array('town' => 'Prosito', 'canton' => 'TI'), + '6527' => array('town' => 'Lodrino', 'canton' => 'TI'), + '6528' => array('town' => 'Camorino', 'canton' => 'TI'), + '6532' => array('town' => 'Castione', 'canton' => 'TI'), + '6533' => array('town' => 'Lumino', 'canton' => 'TI'), + '6534' => array('town' => 'S. Vittore', 'canton' => 'GR'), + '6535' => array('town' => 'Roveredo GR', 'canton' => 'GR'), + '6537' => array('town' => 'Grono', 'canton' => 'GR'), + '6523' => array('town' => 'Preonzo', 'canton' => 'TI'), + '6524' => array('town' => 'Moleno', 'canton' => 'TI'), + '6582' => array('town' => 'Pianezzo', 'canton' => 'TI'), + '6583' => array('town' => 'S. Antonio', 'canton' => 'TI'), + '6584' => array('town' => 'Carena', 'canton' => 'TI'), + '6549' => array('town' => 'Laura', 'canton' => 'GR'), + '6540' => array('town' => 'Castaneda', 'canton' => 'GR'), + '6541' => array('town' => 'Sta. Maria', 'canton' => 'GR'), + '6538' => array('town' => 'Verdabbio', 'canton' => 'GR'), + '6542' => array('town' => 'Buseno', 'canton' => 'GR'), + '6543' => array('town' => 'Arvigo', 'canton' => 'GR'), + '6544' => array('town' => 'Braggio', 'canton' => 'GR'), + '6545' => array('town' => 'Selma', 'canton' => 'GR'), + '6546' => array('town' => 'Cauco', 'canton' => 'GR'), + '6547' => array('town' => 'Augio', 'canton' => 'GR'), + '6548' => array('town' => 'Rossa', 'canton' => 'GR'), + '6556' => array('town' => 'Leggia', 'canton' => 'GR'), + '6565' => array('town' => 'S. Bernardino', 'canton' => 'GR'), + '6557' => array('town' => 'Cama', 'canton' => 'GR'), + '6558' => array('town' => 'Lostallo', 'canton' => 'GR'), + '6562' => array('town' => 'Soazza', 'canton' => 'GR'), + '6563' => array('town' => 'Mesocco', 'canton' => 'GR'), + '6572' => array('town' => 'Quartino', 'canton' => 'TI'), + '6573' => array('town' => 'Magadino', 'canton' => 'TI'), + '6574' => array('town' => 'Vira (Gambarogno)', 'canton' => 'TI'), + '6575' => array('town' => 'S. Nazzaro', 'canton' => 'TI'), + '6576' => array('town' => 'Gerra (Gambarogno)', 'canton' => 'TI'), + '6577' => array('town' => 'Ranzo', 'canton' => 'TI'), + '6578' => array('town' => 'Caviano', 'canton' => 'TI'), + '6579' => array('town' => 'Piazzogna', 'canton' => 'TI'), + '6571' => array('town' => 'Indemini', 'canton' => 'TI'), + '6592' => array('town' => 'S. Antonino', 'canton' => 'TI'), + '6593' => array('town' => 'Cadenazzo', 'canton' => 'TI'), + '6594' => array('town' => 'Contone', 'canton' => 'TI'), + '6595' => array('town' => 'Riazzino', 'canton' => 'TI'), + '6596' => array('town' => 'Gordola', 'canton' => 'TI'), + '6597' => array('town' => 'Agarone', 'canton' => 'TI'), + '6598' => array('town' => 'Tenero', 'canton' => 'TI'), + '6599' => array('town' => 'Robasacco', 'canton' => 'TI'), + '6600' => array('town' => 'Locarno', 'canton' => 'TI'), + '6601' => array('town' => 'Locarno', 'canton' => 'TI'), + '6604' => array('town' => 'Locarno', 'canton' => 'TI'), + '6605' => array('town' => 'Locarno', 'canton' => 'TI'), + '6656' => array('town' => 'Golino', 'canton' => 'TI'), + '6618' => array('town' => 'Arcegno', 'canton' => 'TI'), + '6646' => array('town' => 'Contra', 'canton' => 'TI'), + '6647' => array('town' => 'Mergoscia', 'canton' => 'TI'), + '6661' => array('town' => 'Auressio', 'canton' => 'TI'), + '6611' => array('town' => 'Mosogno', 'canton' => 'TI'), + '6662' => array('town' => 'Russo', 'canton' => 'TI'), + '6664' => array('town' => 'Vergeletto', 'canton' => 'TI'), + '6663' => array('town' => 'Comologno', 'canton' => 'TI'), + '6632' => array('town' => 'Vogorno', 'canton' => 'TI'), + '6631' => array('town' => 'Corippo', 'canton' => 'TI'), + '6633' => array('town' => 'Lavertezzo', 'canton' => 'TI'), + '6634' => array('town' => 'Brione (Verzasca)', 'canton' => 'TI'), + '6635' => array('town' => 'Gerra (Verzasca)', 'canton' => 'TI'), + '6636' => array('town' => 'Frasco', 'canton' => 'TI'), + '6637' => array('town' => 'Sonogno', 'canton' => 'TI'), + '6612' => array('town' => 'Ascona', 'canton' => 'TI'), + '6613' => array('town' => 'Porto Ronco', 'canton' => 'TI'), + '6614' => array('town' => 'Brissago', 'canton' => 'TI'), + '6616' => array('town' => 'Losone', 'canton' => 'TI'), + '6622' => array('town' => 'Ronco sopra Ascona', 'canton' => 'TI'), + '6644' => array('town' => 'Orselina', 'canton' => 'TI'), + '6645' => array('town' => 'Brione s. Minusio', 'canton' => 'TI'), + '6648' => array('town' => 'Minusio', 'canton' => 'TI'), + '6655' => array('town' => 'Verdasio', 'canton' => 'TI'), + '6657' => array('town' => 'Palagnedra', 'canton' => 'TI'), + '6658' => array('town' => 'Borgnone', 'canton' => 'TI'), + '6659' => array('town' => 'Camedo', 'canton' => 'TI'), + '6652' => array('town' => 'Tegna', 'canton' => 'TI'), + '6653' => array('town' => 'Verscio', 'canton' => 'TI'), + '6654' => array('town' => 'Cavigliano', 'canton' => 'TI'), + '6670' => array('town' => 'Avegno', 'canton' => 'TI'), + '6677' => array('town' => 'Moghegno', 'canton' => 'TI'), + '6678' => array('town' => 'Coglio', 'canton' => 'TI'), + '6674' => array('town' => 'Riveo', 'canton' => 'TI'), + '6682' => array('town' => 'Linescio', 'canton' => 'TI'), + '6683' => array('town' => 'Cerentino', 'canton' => 'TI'), + '6685' => array('town' => 'Bosco/Gurin', 'canton' => 'TI'), + '6684' => array('town' => 'Campo (VM)', 'canton' => 'TI'), + '6690' => array('town' => 'Cavergno', 'canton' => 'TI'), + '6692' => array('town' => 'Brontallo', 'canton' => 'TI'), + '6693' => array('town' => 'Broglio', 'canton' => 'TI'), + '6694' => array('town' => 'Prato-Sornico', 'canton' => 'TI'), + '6695' => array('town' => 'Peccia', 'canton' => 'TI'), + '6696' => array('town' => 'Fusio', 'canton' => 'TI'), + '6672' => array('town' => 'Gordevio', 'canton' => 'TI'), + '6673' => array('town' => 'Maggia', 'canton' => 'TI'), + '6675' => array('town' => 'Cevio', 'canton' => 'TI'), + '6676' => array('town' => 'Bignasco', 'canton' => 'TI'), + '6702' => array('town' => 'Claro', 'canton' => 'TI'), + '6703' => array('town' => 'Osogna', 'canton' => 'TI'), + '6705' => array('town' => 'Cresciano', 'canton' => 'TI'), + '6707' => array('town' => 'Iragna', 'canton' => 'TI'), + '6710' => array('town' => 'Biasca', 'canton' => 'TI'), + '6721' => array('town' => 'Ludiano', 'canton' => 'TI'), + '6722' => array('town' => 'Corzoneso', 'canton' => 'TI'), + '6716' => array('town' => 'Leontica', 'canton' => 'TI'), + '6723' => array('town' => 'Prugiasco', 'canton' => 'TI'), + '6724' => array('town' => 'Ponto Valentino', 'canton' => 'TI'), + '6719' => array('town' => 'Aquila', 'canton' => 'TI'), + '6720' => array('town' => 'Campo (Blenio)', 'canton' => 'TI'), + '6713' => array('town' => 'Malvaglia', 'canton' => 'TI'), + '6714' => array('town' => 'Semione', 'canton' => 'TI'), + '6715' => array('town' => 'Dongio', 'canton' => 'TI'), + '6717' => array('town' => 'Dangio-Torre', 'canton' => 'TI'), + '6718' => array('town' => 'Olivone', 'canton' => 'TI'), + '6742' => array('town' => 'Pollegio', 'canton' => 'TI'), + '6743' => array('town' => 'Bodio TI', 'canton' => 'TI'), + '6745' => array('town' => 'Giornico', 'canton' => 'TI'), + '6746' => array('town' => 'Lavorgo', 'canton' => 'TI'), + '6747' => array('town' => 'Chironico', 'canton' => 'TI'), + '6760' => array('town' => 'Faido', 'canton' => 'TI'), + '6772' => array('town' => 'Rodi-Fiesso', 'canton' => 'TI'), + '6775' => array('town' => 'Ambrì', 'canton' => 'TI'), + '6776' => array('town' => 'Piotta', 'canton' => 'TI'), + '6777' => array('town' => 'Quinto', 'canton' => 'TI'), + '6780' => array('town' => 'Airolo', 'canton' => 'TI'), + '6781' => array('town' => 'Villa Bedretto', 'canton' => 'TI'), + '6744' => array('town' => 'Personico', 'canton' => 'TI'), + '6748' => array('town' => 'Anzonico', 'canton' => 'TI'), + '6749' => array('town' => 'Sobrio', 'canton' => 'TI'), + '6763' => array('town' => 'Mairengo', 'canton' => 'TI'), + '6764' => array('town' => 'Chiggiogna', 'canton' => 'TI'), + '6773' => array('town' => 'Prato (Leventina)', 'canton' => 'TI'), + '6774' => array('town' => 'Dalpe', 'canton' => 'TI'), + '6802' => array('town' => 'Rivera', 'canton' => 'TI'), + '6804' => array('town' => 'Bironico', 'canton' => 'TI'), + '6803' => array('town' => 'Camignolo', 'canton' => 'TI'), + '6807' => array('town' => 'Taverne', 'canton' => 'TI'), + '6808' => array('town' => 'Torricella', 'canton' => 'TI'), + '6814' => array('town' => 'Lamone-Cadempino', 'canton' => 'TI'), + '6815' => array('town' => 'Melide', 'canton' => 'TI'), + '6816' => array('town' => 'Bissone', 'canton' => 'TI'), + '6817' => array('town' => 'Maroggia', 'canton' => 'TI'), + '6818' => array('town' => 'Melano', 'canton' => 'TI'), + '6822' => array('town' => 'Arogno', 'canton' => 'TI'), + '6825' => array('town' => 'Capolago', 'canton' => 'TI'), + '6826' => array('town' => 'Riva San Vitale', 'canton' => 'TI'), + '6828' => array('town' => 'Balerna', 'canton' => 'TI'), + '6830' => array('town' => 'Chiasso', 'canton' => 'TI'), + '6839' => array('town' => 'Sagno', 'canton' => 'TI'), + '6837' => array('town' => 'Caneggio', 'canton' => 'TI'), + '6838' => array('town' => 'Cabbio', 'canton' => 'TI'), + '6832' => array('town' => 'Pedrinate', 'canton' => 'TI'), + '6833' => array('town' => 'Vacallo', 'canton' => 'TI'), + '6834' => array('town' => 'Morbio Inferiore', 'canton' => 'TI'), + '6836' => array('town' => 'Serfontana', 'canton' => 'TI'), + '6835' => array('town' => 'Morbio Superiore', 'canton' => 'TI'), + '6809' => array('town' => 'Medeglia', 'canton' => 'TI'), + '6810' => array('town' => 'Isone', 'canton' => 'TI'), + '6805' => array('town' => 'Mezzovico', 'canton' => 'TI'), + '6806' => array('town' => 'Sigirino', 'canton' => 'TI'), + '6821' => array('town' => 'Rovio', 'canton' => 'TI'), + '6823' => array('town' => 'Pugerna', 'canton' => 'TI'), + '6850' => array('town' => 'Mendrisio', 'canton' => 'TI'), + '6875' => array('town' => 'Monte', 'canton' => 'TI'), + '6873' => array('town' => 'Corteglia', 'canton' => 'TI'), + '6852' => array('town' => 'Genestrerio', 'canton' => 'TI'), + '6853' => array('town' => 'Ligornetto', 'canton' => 'TI'), + '6854' => array('town' => 'S. Pietro', 'canton' => 'TI'), + '6855' => array('town' => 'Stabio', 'canton' => 'TI'), + '6862' => array('town' => 'Rancate', 'canton' => 'TI'), + '6863' => array('town' => 'Besazio', 'canton' => 'TI'), + '6864' => array('town' => 'Arzo', 'canton' => 'TI'), + '6865' => array('town' => 'Tremona', 'canton' => 'TI'), + '6866' => array('town' => 'Meride', 'canton' => 'TI'), + '6867' => array('town' => 'Serpiano', 'canton' => 'TI'), + '6872' => array('town' => 'Salorino', 'canton' => 'TI'), + '6874' => array('town' => 'Castel San Pietro', 'canton' => 'TI'), + '6877' => array('town' => 'Coldrerio', 'canton' => 'TI'), + '6883' => array('town' => 'Novazzano', 'canton' => 'TI'), + '6900' => array('town' => 'Lugano', 'canton' => 'TI'), + '6901' => array('town' => 'Lugano', 'canton' => 'TI'), + '6902' => array('town' => 'Lugano 2 Caselle', 'canton' => 'TI'), + '6903' => array('town' => 'Lugano', 'canton' => 'TI'), + '6904' => array('town' => 'Lugano 4 Caselle', 'canton' => 'TI'), + '6905' => array('town' => 'Lugano 5 Autoposta', 'canton' => 'TI'), + '6906' => array('town' => 'Lugano 6 Caselle', 'canton' => 'TI'), + '6913' => array('town' => 'Carabbia', 'canton' => 'TI'), + '6915' => array('town' => 'Pambio-Noranco', 'canton' => 'TI'), + '6916' => array('town' => 'Grancia', 'canton' => 'TI'), + '6917' => array('town' => 'Barbengo', 'canton' => 'TI'), + '6919' => array('town' => 'Carabietta', 'canton' => 'TI'), + '6921' => array('town' => 'Vico Morcote', 'canton' => 'TI'), + '6928' => array('town' => 'Manno', 'canton' => 'TI'), + '6929' => array('town' => 'Gravesano', 'canton' => 'TI'), + '6930' => array('town' => 'Bedano', 'canton' => 'TI'), + '6939' => array('town' => 'Arosio', 'canton' => 'TI'), + '6938' => array('town' => 'Vezio', 'canton' => 'TI'), + '6937' => array('town' => 'Breno', 'canton' => 'TI'), + '6949' => array('town' => 'Comano', 'canton' => 'TI'), + '6979' => array('town' => 'Brè sopra Lugano', 'canton' => 'TI'), + '6827' => array('town' => 'Brusino Arsizio', 'canton' => 'TI'), + '6912' => array('town' => 'Pazzallo', 'canton' => 'TI'), + '6914' => array('town' => 'Carona', 'canton' => 'TI'), + '6918' => array('town' => 'Figino', 'canton' => 'TI'), + '6922' => array('town' => 'Morcote', 'canton' => 'TI'), + '6924' => array('town' => 'Sorengo', 'canton' => 'TI'), + '6925' => array('town' => 'Gentilino', 'canton' => 'TI'), + '6926' => array('town' => 'Montagnola', 'canton' => 'TI'), + '6927' => array('town' => 'Agra', 'canton' => 'TI'), + '6932' => array('town' => 'Breganzona', 'canton' => 'TI'), + '6933' => array('town' => 'Muzzano', 'canton' => 'TI'), + '6934' => array('town' => 'Bioggio', 'canton' => 'TI'), + '6935' => array('town' => 'Bosco Luganese', 'canton' => 'TI'), + '6936' => array('town' => 'Cademario', 'canton' => 'TI'), + '6942' => array('town' => 'Savosa', 'canton' => 'TI'), + '6943' => array('town' => 'Vezia', 'canton' => 'TI'), + '6948' => array('town' => 'Porza', 'canton' => 'TI'), + '6950' => array('town' => 'Tesserete', 'canton' => 'TI'), + '6944' => array('town' => 'Cureglia', 'canton' => 'TI'), + '6945' => array('town' => 'Origlio', 'canton' => 'TI'), + '6946' => array('town' => 'Ponte Capriasca', 'canton' => 'TI'), + '6947' => array('town' => 'Vaglio', 'canton' => 'TI'), + '6954' => array('town' => 'Sala Capriasca', 'canton' => 'TI'), + '6953' => array('town' => 'Lugaggia', 'canton' => 'TI'), + '6951' => array('town' => 'Insone', 'canton' => 'TI'), + '6956' => array('town' => 'Lopagno', 'canton' => 'TI'), + '6957' => array('town' => 'Roveredo TI', 'canton' => 'TI'), + '6958' => array('town' => 'Bidogno', 'canton' => 'TI'), + '6955' => array('town' => 'Cagiallo', 'canton' => 'TI'), + '6959' => array('town' => 'Cimadera', 'canton' => 'TI'), + '6952' => array('town' => 'Canobbio', 'canton' => 'TI'), + '6962' => array('town' => 'Viganello', 'canton' => 'TI'), + '6963' => array('town' => 'Pregassona', 'canton' => 'TI'), + '6964' => array('town' => 'Davesco-Soragno', 'canton' => 'TI'), + '6965' => array('town' => 'Cadro', 'canton' => 'TI'), + '6966' => array('town' => 'Villa Luganese', 'canton' => 'TI'), + '6967' => array('town' => 'Dino', 'canton' => 'TI'), + '6968' => array('town' => 'Sonvico', 'canton' => 'TI'), + '6974' => array('town' => 'Aldesago', 'canton' => 'TI'), + '6976' => array('town' => 'Castagnola', 'canton' => 'TI'), + '6977' => array('town' => 'Ruvigliana', 'canton' => 'TI'), + '6978' => array('town' => 'Gandria', 'canton' => 'TI'), + '6990' => array('town' => 'Cassina d\'Agno', 'canton' => 'TI'), + '6991' => array('town' => 'Neggio', 'canton' => 'TI'), + '6992' => array('town' => 'Vernate', 'canton' => 'TI'), + '6993' => array('town' => 'Iseo', 'canton' => 'TI'), + '6994' => array('town' => 'Aranno', 'canton' => 'TI'), + '6981' => array('town' => 'Bedigliora', 'canton' => 'TI'), + '6980' => array('town' => 'Castelrotto', 'canton' => 'TI'), + '6999' => array('town' => 'Astano', 'canton' => 'TI'), + '6986' => array('town' => 'Miglieglia', 'canton' => 'TI'), + '6989' => array('town' => 'Purasca', 'canton' => 'TI'), + '6995' => array('town' => 'Molinazzo', 'canton' => 'TI'), + '6996' => array('town' => 'Ponte Cremenaga', 'canton' => 'TI'), + '6997' => array('town' => 'Sessa', 'canton' => 'TI'), + '6998' => array('town' => 'Termine', 'canton' => 'TI'), + '6982' => array('town' => 'Agno', 'canton' => 'TI'), + '6983' => array('town' => 'Magliaso', 'canton' => 'TI'), + '6984' => array('town' => 'Pura', 'canton' => 'TI'), + '6987' => array('town' => 'Caslano', 'canton' => 'TI'), + '6988' => array('town' => 'Ponte Tresa', 'canton' => 'TI'), + '7000' => array('town' => 'Chur', 'canton' => 'GR'), + '7001' => array('town' => 'Chur', 'canton' => 'GR'), + '7002' => array('town' => 'Chur', 'canton' => 'GR'), + '7004' => array('town' => 'Chur', 'canton' => 'GR'), + '7006' => array('town' => 'Chur', 'canton' => 'GR'), + '7007' => array('town' => 'Chur', 'canton' => 'GR'), + '7012' => array('town' => 'Felsberg', 'canton' => 'GR'), + '7013' => array('town' => 'Domat/Ems', 'canton' => 'GR'), + '7015' => array('town' => 'Tamins', 'canton' => 'GR'), + '7017' => array('town' => 'Flims Dorf', 'canton' => 'GR'), + '7018' => array('town' => 'Flims Waldhaus', 'canton' => 'GR'), + '7023' => array('town' => 'Haldenstein', 'canton' => 'GR'), + '7026' => array('town' => 'Maladers', 'canton' => 'GR'), + '7031' => array('town' => 'Laax GR', 'canton' => 'GR'), + '7032' => array('town' => 'Laax GR 2', 'canton' => 'GR'), + '7050' => array('town' => 'Arosa', 'canton' => 'GR'), + '7062' => array('town' => 'Passugg-Araschgen', 'canton' => 'GR'), + '7063' => array('town' => 'Praden', 'canton' => 'GR'), + '7064' => array('town' => 'Tschiertschen', 'canton' => 'GR'), + '7074' => array('town' => 'Malix', 'canton' => 'GR'), + '7075' => array('town' => 'Churwalden', 'canton' => 'GR'), + '7076' => array('town' => 'Parpan', 'canton' => 'GR'), + '7077' => array('town' => 'Valbella', 'canton' => 'GR'), + '7078' => array('town' => 'Lenzerheide/Lai', 'canton' => 'GR'), + '7082' => array('town' => 'Vaz/Obervaz', 'canton' => 'GR'), + '7083' => array('town' => 'Lantsch/Lenz', 'canton' => 'GR'), + '7084' => array('town' => 'Brienz/Brinzauls', 'canton' => 'GR'), + '7014' => array('town' => 'Trin', 'canton' => 'GR'), + '7016' => array('town' => 'Trin Mulin', 'canton' => 'GR'), + '7019' => array('town' => 'Fidaz', 'canton' => 'GR'), + '7027' => array('town' => 'Lüen', 'canton' => 'GR'), + '7028' => array('town' => 'St. Peter', 'canton' => 'GR'), + '7056' => array('town' => 'Molinis', 'canton' => 'GR'), + '7029' => array('town' => 'Peist', 'canton' => 'GR'), + '7057' => array('town' => 'Langwies', 'canton' => 'GR'), + '7058' => array('town' => 'Litzirüti', 'canton' => 'GR'), + '7104' => array('town' => 'Versam', 'canton' => 'GR'), + '7106' => array('town' => 'Tenna', 'canton' => 'GR'), + '7107' => array('town' => 'Safien Platz', 'canton' => 'GR'), + '7109' => array('town' => 'Thalkirch', 'canton' => 'GR'), + '7122' => array('town' => 'Valendas', 'canton' => 'GR'), + '7126' => array('town' => 'Castrisch', 'canton' => 'GR'), + '7130' => array('town' => 'Ilanz', 'canton' => 'GR'), + '7154' => array('town' => 'Ruschein', 'canton' => 'GR'), + '7155' => array('town' => 'Ladir', 'canton' => 'GR'), + '7151' => array('town' => 'Schluein', 'canton' => 'GR'), + '7153' => array('town' => 'Falera', 'canton' => 'GR'), + '7152' => array('town' => 'Sagogn', 'canton' => 'GR'), + '7127' => array('town' => 'Sevgein', 'canton' => 'GR'), + '7128' => array('town' => 'Riein', 'canton' => 'GR'), + '7111' => array('town' => 'Pitasch', 'canton' => 'GR'), + '7112' => array('town' => 'Duvin', 'canton' => 'GR'), + '7113' => array('town' => 'Camuns', 'canton' => 'GR'), + '7114' => array('town' => 'Uors (Lumnezia)', 'canton' => 'GR'), + '7115' => array('town' => 'Surcasti', 'canton' => 'GR'), + '7116' => array('town' => 'Tersnaus', 'canton' => 'GR'), + '7141' => array('town' => 'Luven', 'canton' => 'GR'), + '7142' => array('town' => 'Cumbel', 'canton' => 'GR'), + '7143' => array('town' => 'Morissen', 'canton' => 'GR'), + '7144' => array('town' => 'Vella', 'canton' => 'GR'), + '7145' => array('town' => 'Degen', 'canton' => 'GR'), + '7146' => array('town' => 'Vattiz', 'canton' => 'GR'), + '7147' => array('town' => 'Vignogn', 'canton' => 'GR'), + '7148' => array('town' => 'Lumbrein', 'canton' => 'GR'), + '7149' => array('town' => 'Vrin', 'canton' => 'GR'), + '7137' => array('town' => 'Flond', 'canton' => 'GR'), + '7138' => array('town' => 'Surcuolm', 'canton' => 'GR'), + '7132' => array('town' => 'Vals', 'canton' => 'GR'), + '7133' => array('town' => 'Obersaxen Affeier', 'canton' => 'GR'), + '7134' => array('town' => 'Obersaxen Meierhof', 'canton' => 'GR'), + '7135' => array('town' => 'Obersaxen Giraniga', 'canton' => 'GR'), + '7136' => array('town' => 'Obers Friggahüs', 'canton' => 'GR'), + '7156' => array('town' => 'Pigniu', 'canton' => 'GR'), + '7157' => array('town' => 'Siat', 'canton' => 'GR'), + '7158' => array('town' => 'Waltensburg/Vuorz', 'canton' => 'GR'), + '7159' => array('town' => 'Andiast', 'canton' => 'GR'), + '7162' => array('town' => 'Tavanasa', 'canton' => 'GR'), + '7163' => array('town' => 'Danis', 'canton' => 'GR'), + '7164' => array('town' => 'Dardin', 'canton' => 'GR'), + '7165' => array('town' => 'Breil/Brigels', 'canton' => 'GR'), + '7166' => array('town' => 'Trun', 'canton' => 'GR'), + '7168' => array('town' => 'Schlans', 'canton' => 'GR'), + '7167' => array('town' => 'Zignau', 'canton' => 'GR'), + '7172' => array('town' => 'Rabius', 'canton' => 'GR'), + '7175' => array('town' => 'Sumvitg', 'canton' => 'GR'), + '7174' => array('town' => 'S. Benedetg', 'canton' => 'GR'), + '7180' => array('town' => 'Disentis/Mustér', 'canton' => 'GR'), + '7182' => array('town' => 'Cavardiras', 'canton' => 'GR'), + '7183' => array('town' => 'Mompé Medel', 'canton' => 'GR'), + '7184' => array('town' => 'Curaglia', 'canton' => 'GR'), + '7185' => array('town' => 'Platta', 'canton' => 'GR'), + '7186' => array('town' => 'Segnas', 'canton' => 'GR'), + '7187' => array('town' => 'Camischolas', 'canton' => 'GR'), + '7189' => array('town' => 'Rueras', 'canton' => 'GR'), + '7188' => array('town' => 'Sedrun', 'canton' => 'GR'), + '7173' => array('town' => 'Surrein', 'canton' => 'GR'), + '7176' => array('town' => 'Cumpadials', 'canton' => 'GR'), + '7201' => array('town' => 'Untervaz Bahnhof', 'canton' => 'GR'), + '7203' => array('town' => 'Trimmis', 'canton' => 'GR'), + '7202' => array('town' => 'Says', 'canton' => 'GR'), + '7204' => array('town' => 'Untervaz', 'canton' => 'GR'), + '7205' => array('town' => 'Zizers', 'canton' => 'GR'), + '7206' => array('town' => 'Igis', 'canton' => 'GR'), + '7208' => array('town' => 'Malans GR', 'canton' => 'GR'), + '7212' => array('town' => 'Seewis Dorf', 'canton' => 'GR'), + '7213' => array('town' => 'Valzeina', 'canton' => 'GR'), + '7214' => array('town' => 'Grüsch', 'canton' => 'GR'), + '7215' => array('town' => 'Fanas', 'canton' => 'GR'), + '7220' => array('town' => 'Schiers', 'canton' => 'GR'), + '7228' => array('town' => 'Schuders', 'canton' => 'GR'), + '7226' => array('town' => 'Stels', 'canton' => 'GR'), + '7222' => array('town' => 'Mittellunden', 'canton' => 'GR'), + '7223' => array('town' => 'Buchen', 'canton' => 'GR'), + '7224' => array('town' => 'Putz', 'canton' => 'GR'), + '7231' => array('town' => 'Pragg-Jenaz', 'canton' => 'GR'), + '7232' => array('town' => 'Furna', 'canton' => 'GR'), + '7233' => array('town' => 'Jenaz', 'canton' => 'GR'), + '7235' => array('town' => 'Fideris', 'canton' => 'GR'), + '7240' => array('town' => 'Küblis', 'canton' => 'GR'), + '7242' => array('town' => 'Luzein', 'canton' => 'GR'), + '7243' => array('town' => 'Pany', 'canton' => 'GR'), + '7244' => array('town' => 'Gadenstätt', 'canton' => 'GR'), + '7245' => array('town' => 'Ascharina', 'canton' => 'GR'), + '7246' => array('town' => 'St. Antönien', 'canton' => 'GR'), + '7241' => array('town' => 'Conters', 'canton' => 'GR'), + '7247' => array('town' => 'Saas im Prättigau', 'canton' => 'GR'), + '7249' => array('town' => 'Serneus', 'canton' => 'GR'), + '7250' => array('town' => 'Klosters', 'canton' => 'GR'), + '7252' => array('town' => 'Klosters Dorf', 'canton' => 'GR'), + '7260' => array('town' => 'Davos Dorf', 'canton' => 'GR'), + '7265' => array('town' => 'Davos Wolfgang', 'canton' => 'GR'), + '7270' => array('town' => 'Davos Platz', 'canton' => 'GR'), + '7272' => array('town' => 'Davos Clavadel', 'canton' => 'GR'), + '7276' => array('town' => 'Davos Frauenkirch', 'canton' => 'GR'), + '7277' => array('town' => 'Davos Glaris', 'canton' => 'GR'), + '7278' => array('town' => 'Davos Monstein', 'canton' => 'GR'), + '7302' => array('town' => 'Landquart', 'canton' => 'GR'), + '7303' => array('town' => 'Mastrils', 'canton' => 'GR'), + '7304' => array('town' => 'Maienfeld', 'canton' => 'GR'), + '7306' => array('town' => 'Fläsch', 'canton' => 'GR'), + '7307' => array('town' => 'Jenins', 'canton' => 'GR'), + '7310' => array('town' => 'Bad Ragaz', 'canton' => 'SG'), + '7317' => array('town' => 'Valens', 'canton' => 'SG'), + '7314' => array('town' => 'Vadura', 'canton' => 'SG'), + '7315' => array('town' => 'Vättis', 'canton' => 'SG'), + '7312' => array('town' => 'Pfäfers', 'canton' => 'SG'), + '7313' => array('town' => 'St. Margrethenberg', 'canton' => 'SG'), + '7320' => array('town' => 'Sargans', 'canton' => 'SG'), + '7325' => array('town' => 'Schwendi', 'canton' => 'SG'), + '7326' => array('town' => 'Weisstannen', 'canton' => 'SG'), + '7323' => array('town' => 'Wangs', 'canton' => 'SG'), + '7324' => array('town' => 'Vilters', 'canton' => 'SG'), + '7402' => array('town' => 'Bonaduz', 'canton' => 'GR'), + '7403' => array('town' => 'Rhäzüns', 'canton' => 'GR'), + '7404' => array('town' => 'Feldis/Veulden', 'canton' => 'GR'), + '7405' => array('town' => 'Rothenbrunnen', 'canton' => 'GR'), + '7408' => array('town' => 'Cazis', 'canton' => 'GR'), + '7411' => array('town' => 'Sils im Domleschg', 'canton' => 'GR'), + '7412' => array('town' => 'Scharans', 'canton' => 'GR'), + '7413' => array('town' => 'Fürstenaubruck', 'canton' => 'GR'), + '7414' => array('town' => 'Fürstenau', 'canton' => 'GR'), + '7415' => array('town' => 'Rodels', 'canton' => 'GR'), + '7416' => array('town' => 'Almens', 'canton' => 'GR'), + '7417' => array('town' => 'Paspels', 'canton' => 'GR'), + '7407' => array('town' => 'Trans', 'canton' => 'GR'), + '7418' => array('town' => 'Tumegl/Tomils', 'canton' => 'GR'), + '7419' => array('town' => 'Scheid', 'canton' => 'GR'), + '7430' => array('town' => 'Thusis', 'canton' => 'GR'), + '7425' => array('town' => 'Masein', 'canton' => 'GR'), + '7426' => array('town' => 'Flerden', 'canton' => 'GR'), + '7427' => array('town' => 'Urmein', 'canton' => 'GR'), + '7428' => array('town' => 'Tschappina', 'canton' => 'GR'), + '7421' => array('town' => 'Summaprada', 'canton' => 'GR'), + '7422' => array('town' => 'Tartar', 'canton' => 'GR'), + '7423' => array('town' => 'Sarn', 'canton' => 'GR'), + '7424' => array('town' => 'Präz', 'canton' => 'GR'), + '7431' => array('town' => 'Mutten', 'canton' => 'GR'), + '7432' => array('town' => 'Zillis', 'canton' => 'GR'), + '7433' => array('town' => 'Donat', 'canton' => 'GR'), + '7434' => array('town' => 'Sufers', 'canton' => 'GR'), + '7435' => array('town' => 'Splügen', 'canton' => 'GR'), + '7436' => array('town' => 'Medels', 'canton' => 'GR'), + '7437' => array('town' => 'Nufenen', 'canton' => 'GR'), + '7438' => array('town' => 'Hinterrhein', 'canton' => 'GR'), + '7440' => array('town' => 'Andeer', 'canton' => 'GR'), + '7442' => array('town' => 'Clugin', 'canton' => 'GR'), + '7443' => array('town' => 'Pignia', 'canton' => 'GR'), + '7444' => array('town' => 'Ausserferrera', 'canton' => 'GR'), + '7445' => array('town' => 'Innerferrera', 'canton' => 'GR'), + '7446' => array('town' => 'Campsut-Cröt', 'canton' => 'GR'), + '7447' => array('town' => 'Cresta (Avers)', 'canton' => 'GR'), + '7448' => array('town' => 'Juf', 'canton' => 'GR'), + '7450' => array('town' => 'Tiefencastel', 'canton' => 'GR'), + '7458' => array('town' => 'Mon', 'canton' => 'GR'), + '7459' => array('town' => 'Stierva', 'canton' => 'GR'), + '7451' => array('town' => 'Alvaschein', 'canton' => 'GR'), + '7452' => array('town' => 'Cunter', 'canton' => 'GR'), + '7453' => array('town' => 'Tinizong', 'canton' => 'GR'), + '7454' => array('town' => 'Rona', 'canton' => 'GR'), + '7455' => array('town' => 'Mulegns', 'canton' => 'GR'), + '7456' => array('town' => 'Sur', 'canton' => 'GR'), + '7457' => array('town' => 'Bivio', 'canton' => 'GR'), + '7460' => array('town' => 'Savognin', 'canton' => 'GR'), + '7462' => array('town' => 'Salouf', 'canton' => 'GR'), + '7463' => array('town' => 'Riom', 'canton' => 'GR'), + '7464' => array('town' => 'Parsonz', 'canton' => 'GR'), + '7472' => array('town' => 'Surava', 'canton' => 'GR'), + '7473' => array('town' => 'Alvaneu Bad', 'canton' => 'GR'), + '7477' => array('town' => 'Filisur', 'canton' => 'GR'), + '7482' => array('town' => 'Bergün/Bravuogn', 'canton' => 'GR'), + '7484' => array('town' => 'Latsch', 'canton' => 'GR'), + '7492' => array('town' => 'Alvaneu Dorf', 'canton' => 'GR'), + '7493' => array('town' => 'Schmitten (Albula)', 'canton' => 'GR'), + '7494' => array('town' => 'Davos Wiesen', 'canton' => 'GR'), + '7500' => array('town' => 'St. Moritz', 'canton' => 'GR'), + '7502' => array('town' => 'Bever', 'canton' => 'GR'), + '7503' => array('town' => 'Samedan', 'canton' => 'GR'), + '7504' => array('town' => 'Pontresina', 'canton' => 'GR'), + '7505' => array('town' => 'Celerina', 'canton' => 'GR'), + '7512' => array('town' => 'Champfèr', 'canton' => 'GR'), + '7513' => array('town' => 'Silvaplana', 'canton' => 'GR'), + '7514' => array('town' => 'Sils/Segl Maria', 'canton' => 'GR'), + '7515' => array('town' => 'Sils/Segl Baselgia', 'canton' => 'GR'), + '7516' => array('town' => 'Maloja', 'canton' => 'GR'), + '7517' => array('town' => 'Plaun da Lej', 'canton' => 'GR'), + '7522' => array('town' => 'La Punt-Chamues-ch', 'canton' => 'GR'), + '7523' => array('town' => 'Madulain', 'canton' => 'GR'), + '7524' => array('town' => 'Zuoz', 'canton' => 'GR'), + '7525' => array('town' => 'S-chanf', 'canton' => 'GR'), + '7526' => array('town' => 'Cinuos-chel', 'canton' => 'GR'), + '7527' => array('town' => 'Brail', 'canton' => 'GR'), + '7530' => array('town' => 'Zernez', 'canton' => 'GR'), + '7532' => array('town' => 'Tschierv', 'canton' => 'GR'), + '7533' => array('town' => 'Fuldera', 'canton' => 'GR'), + '7534' => array('town' => 'Lü', 'canton' => 'GR'), + '7535' => array('town' => 'Valchava', 'canton' => 'GR'), + '7536' => array('town' => 'Sta. Maria V. M.', 'canton' => 'GR'), + '7537' => array('town' => 'Müstair', 'canton' => 'GR'), + '7542' => array('town' => 'Susch', 'canton' => 'GR'), + '7543' => array('town' => 'Lavin', 'canton' => 'GR'), + '7545' => array('town' => 'Guarda', 'canton' => 'GR'), + '7546' => array('town' => 'Ardez', 'canton' => 'GR'), + '7550' => array('town' => 'Scuol', 'canton' => 'GR'), + '7551' => array('town' => 'Ftan', 'canton' => 'GR'), + '7552' => array('town' => 'Vulpera', 'canton' => 'GR'), + '7553' => array('town' => 'Tarasp', 'canton' => 'GR'), + '7554' => array('town' => 'Sent', 'canton' => 'GR'), + '7556' => array('town' => 'Ramosch', 'canton' => 'GR'), + '7557' => array('town' => 'Vnà', 'canton' => 'GR'), + '7558' => array('town' => 'Strada', 'canton' => 'GR'), + '7559' => array('town' => 'Tschlin', 'canton' => 'GR'), + '7560' => array('town' => 'Martina', 'canton' => 'GR'), + '7562' => array('town' => 'Samnaun-Compatsch', 'canton' => 'GR'), + '7563' => array('town' => 'Samnaun Dorf', 'canton' => 'GR'), + '7602' => array('town' => 'Casaccia', 'canton' => 'GR'), + '7603' => array('town' => 'Vicosoprano', 'canton' => 'GR'), + '7604' => array('town' => 'Borgonovo', 'canton' => 'GR'), + '7605' => array('town' => 'Stampa', 'canton' => 'GR'), + '7606' => array('town' => 'Promontogno', 'canton' => 'GR'), + '7610' => array('town' => 'Soglio', 'canton' => 'GR'), + '7608' => array('town' => 'Castasegna', 'canton' => 'GR'), + '7742' => array('town' => 'Poschiavo', 'canton' => 'GR'), + '7743' => array('town' => 'Brusio', 'canton' => 'GR'), + '7747' => array('town' => 'Viano', 'canton' => 'GR'), + '7744' => array('town' => 'Campocologno', 'canton' => 'GR'), + '7710' => array('town' => 'Ospizio Bernina', 'canton' => 'GR'), + '7741' => array('town' => 'S. Carlo GR', 'canton' => 'GR'), + '7745' => array('town' => 'Li Curt', 'canton' => 'GR'), + '7746' => array('town' => 'Le Prese', 'canton' => 'GR'), + '7748' => array('town' => 'Campascio', 'canton' => 'GR'), + '8000' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8001' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8002' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8003' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8004' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8005' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8006' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8008' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8010' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8020' => array('town' => 'Zürich 1', 'canton' => 'ZH'), + '8016' => array('town' => 'Zürich 16 Zust', 'canton' => 'ZH'), + '8080' => array('town' => 'Zürich 80', 'canton' => 'ZH'), + '8021' => array('town' => 'Zürich 1 Sihlpost', 'canton' => 'ZH'), + '8022' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8023' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8024' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8026' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8027' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8030' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8031' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8032' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8033' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8034' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8036' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8037' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8038' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8039' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8040' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8041' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8042' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8044' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8045' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8046' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8047' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8048' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8049' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8050' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8051' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8052' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8053' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8055' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8057' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8058' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8061' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8063' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8064' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8065' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8088' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8090' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8091' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8092' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8093' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8099' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8102' => array('town' => 'Oberengstringen', 'canton' => 'ZH'), + '8103' => array('town' => 'Unterengstringen', 'canton' => 'ZH'), + '8104' => array('town' => 'Weiningen ZH', 'canton' => 'ZH'), + '8105' => array('town' => 'Regensdorf', 'canton' => 'ZH'), + '8107' => array('town' => 'Buchs ZH', 'canton' => 'ZH'), + '8108' => array('town' => 'Dällikon', 'canton' => 'ZH'), + '8112' => array('town' => 'Otelfingen', 'canton' => 'ZH'), + '8113' => array('town' => 'Boppelsen', 'canton' => 'ZH'), + '8114' => array('town' => 'Dänikon ZH', 'canton' => 'ZH'), + '8115' => array('town' => 'Hüttikon', 'canton' => 'ZH'), + '5436' => array('town' => 'Würenlos', 'canton' => 'AG'), + '8117' => array('town' => 'Fällanden', 'canton' => 'ZH'), + '8121' => array('town' => 'Benglen', 'canton' => 'ZH'), + '8122' => array('town' => 'Binz', 'canton' => 'ZH'), + '8123' => array('town' => 'Ebmatingen', 'canton' => 'ZH'), + '8124' => array('town' => 'Maur', 'canton' => 'ZH'), + '8125' => array('town' => 'Zollikerberg', 'canton' => 'ZH'), + '8126' => array('town' => 'Zumikon', 'canton' => 'ZH'), + '8127' => array('town' => 'Forch', 'canton' => 'ZH'), + '8132' => array('town' => 'Hinteregg', 'canton' => 'ZH'), + '8133' => array('town' => 'Esslingen', 'canton' => 'ZH'), + '8134' => array('town' => 'Adliswil', 'canton' => 'ZH'), + '8135' => array('town' => 'Langnau am Albis', 'canton' => 'ZH'), + '8136' => array('town' => 'Gattikon', 'canton' => 'ZH'), + '8143' => array('town' => 'Uetliberg', 'canton' => 'ZH'), + '8142' => array('town' => 'Uitikon Waldegg', 'canton' => 'ZH'), + '8152' => array('town' => 'Glattbrugg', 'canton' => 'ZH'), + '8153' => array('town' => 'Rümlang', 'canton' => 'ZH'), + '8154' => array('town' => 'Oberglatt ZH', 'canton' => 'ZH'), + '8155' => array('town' => 'Niederhasli', 'canton' => 'ZH'), + '8156' => array('town' => 'Oberhasli', 'canton' => 'ZH'), + '8157' => array('town' => 'Dielsdorf', 'canton' => 'ZH'), + '8158' => array('town' => 'Regensberg', 'canton' => 'ZH'), + '8162' => array('town' => 'Steinmaur', 'canton' => 'ZH'), + '8164' => array('town' => 'Bachs', 'canton' => 'ZH'), + '8165' => array('town' => 'Schöfflisdorf', 'canton' => 'ZH'), + '8166' => array('town' => 'Niederweningen', 'canton' => 'ZH'), + '8172' => array('town' => 'Niederglatt ZH', 'canton' => 'ZH'), + '8173' => array('town' => 'Neerach', 'canton' => 'ZH'), + '8174' => array('town' => 'Stadel', 'canton' => 'ZH'), + '8175' => array('town' => 'Windlach', 'canton' => 'ZH'), + '8180' => array('town' => 'Bülach', 'canton' => 'ZH'), + '8181' => array('town' => 'Höri', 'canton' => 'ZH'), + '8182' => array('town' => 'Hochfelden', 'canton' => 'ZH'), + '8184' => array('town' => 'Bachenbülach', 'canton' => 'ZH'), + '8185' => array('town' => 'Winkel', 'canton' => 'ZH'), + '8192' => array('town' => 'Glattfelden', 'canton' => 'ZH'), + '8193' => array('town' => 'Eglisau', 'canton' => 'ZH'), + '8194' => array('town' => 'Hüntwangen', 'canton' => 'ZH'), + '8195' => array('town' => 'Wasterkingen', 'canton' => 'ZH'), + '8196' => array('town' => 'Wil ZH', 'canton' => 'ZH'), + '8197' => array('town' => 'Rafz', 'canton' => 'ZH'), + '8200' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8201' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8202' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8203' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8204' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8205' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8207' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8208' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8219' => array('town' => 'Trasadingen', 'canton' => 'SH'), + '8228' => array('town' => 'Beggingen', 'canton' => 'SH'), + '8231' => array('town' => 'Hemmental', 'canton' => 'SH'), + '8234' => array('town' => 'Stetten SH', 'canton' => 'SH'), + '8235' => array('town' => 'Lohn SH', 'canton' => 'SH'), + '8236' => array('town' => 'Opfertshofen SH', 'canton' => 'SH'), + '8242' => array('town' => 'Bibern SH', 'canton' => 'SH'), + '8243' => array('town' => 'Altdorf SH', 'canton' => 'SH'), + '8239' => array('town' => 'Dörflingen', 'canton' => 'SH'), + '8212' => array('town' => 'Neuhausen', 'canton' => 'SH'), + '8213' => array('town' => 'Neunkirch', 'canton' => 'SH'), + '8214' => array('town' => 'Gächlingen', 'canton' => 'SH'), + '8215' => array('town' => 'Hallau', 'canton' => 'SH'), + '8216' => array('town' => 'Oberhallau', 'canton' => 'SH'), + '8217' => array('town' => 'Wilchingen', 'canton' => 'SH'), + '8218' => array('town' => 'Osterfingen', 'canton' => 'SH'), + '8222' => array('town' => 'Beringen', 'canton' => 'SH'), + '8223' => array('town' => 'Guntmadingen', 'canton' => 'SH'), + '8224' => array('town' => 'Löhningen', 'canton' => 'SH'), + '8225' => array('town' => 'Siblingen', 'canton' => 'SH'), + '8226' => array('town' => 'Schleitheim', 'canton' => 'SH'), + '8232' => array('town' => 'Merishausen', 'canton' => 'SH'), + '8233' => array('town' => 'Bargen SH', 'canton' => 'SH'), + '8240' => array('town' => 'Thayngen', 'canton' => 'SH'), + '8241' => array('town' => 'Barzheim', 'canton' => 'SH'), + '8245' => array('town' => 'Feuerthalen', 'canton' => 'ZH'), + '8246' => array('town' => 'Langwiesen', 'canton' => 'ZH'), + '8247' => array('town' => 'Flurlingen', 'canton' => 'ZH'), + '8252' => array('town' => 'Schlatt TG', 'canton' => 'TG'), + '8254' => array('town' => 'Basadingen', 'canton' => 'TG'), + '8259' => array('town' => 'Kaltenbach', 'canton' => 'TG'), + '8253' => array('town' => 'Diessenhofen', 'canton' => 'TG'), + '8255' => array('town' => 'Schlattingen', 'canton' => 'TG'), + '8260' => array('town' => 'Stein am Rhein', 'canton' => 'SH'), + '8261' => array('town' => 'Hemishofen', 'canton' => 'SH'), + '8262' => array('town' => 'Ramsen', 'canton' => 'SH'), + '8263' => array('town' => 'Buch SH', 'canton' => 'SH'), + '8264' => array('town' => 'Eschenz', 'canton' => 'TG'), + '8265' => array('town' => 'Mammern', 'canton' => 'TG'), + '8266' => array('town' => 'Steckborn', 'canton' => 'TG'), + '8267' => array('town' => 'Berlingen', 'canton' => 'TG'), + '8268' => array('town' => 'Mannenbach-Salenst', 'canton' => 'TG'), + '8272' => array('town' => 'Ermatingen', 'canton' => 'TG'), + '8273' => array('town' => 'Triboltingen', 'canton' => 'TG'), + '8274' => array('town' => 'Tägerwilen', 'canton' => 'TG'), + '8280' => array('town' => 'Kreuzlingen', 'canton' => 'TG'), + '8301' => array('town' => 'Glattzentrum', 'canton' => 'ZH'), + '8302' => array('town' => 'Kloten', 'canton' => 'ZH'), + '8303' => array('town' => 'Bassersdorf', 'canton' => 'ZH'), + '8304' => array('town' => 'Wallisellen', 'canton' => 'ZH'), + '8305' => array('town' => 'Dietlikon', 'canton' => 'ZH'), + '8306' => array('town' => 'Brüttisellen', 'canton' => 'ZH'), + '8307' => array('town' => 'Effretikon', 'canton' => 'ZH'), + '8315' => array('town' => 'Lindau', 'canton' => 'ZH'), + '8308' => array('town' => 'Illnau', 'canton' => 'ZH'), + '8309' => array('town' => 'Nürensdorf', 'canton' => 'ZH'), + '8310' => array('town' => 'Kemptthal', 'canton' => 'ZH'), + '8312' => array('town' => 'Winterberg ZH', 'canton' => 'ZH'), + '8311' => array('town' => 'Brütten', 'canton' => 'ZH'), + '8314' => array('town' => 'Kyburg', 'canton' => 'ZH'), + '8130' => array('town' => 'Zumikon Y. Rocher', 'canton' => 'ZH'), + '8320' => array('town' => 'Fehraltorf', 'canton' => 'ZH'), + '8489' => array('town' => 'Wildberg', 'canton' => 'ZH'), + '8322' => array('town' => 'Madetswil', 'canton' => 'ZH'), + '8330' => array('town' => 'Pfäffikon ZH', 'canton' => 'ZH'), + '8331' => array('town' => 'Auslikon', 'canton' => 'ZH'), + '8332' => array('town' => 'Russikon', 'canton' => 'ZH'), + '8335' => array('town' => 'Hittnau', 'canton' => 'ZH'), + '8340' => array('town' => 'Hinwil', 'canton' => 'ZH'), + '8342' => array('town' => 'Wernetshausen', 'canton' => 'ZH'), + '8344' => array('town' => 'Bäretswil', 'canton' => 'ZH'), + '8345' => array('town' => 'Adetswil', 'canton' => 'ZH'), + '8352' => array('town' => 'Elsau', 'canton' => 'ZH'), + '8353' => array('town' => 'Elgg', 'canton' => 'ZH'), + '8354' => array('town' => 'Hofstetten ZH', 'canton' => 'ZH'), + '8355' => array('town' => 'Aadorf', 'canton' => 'TG'), + '8356' => array('town' => 'Ettenhausen TG', 'canton' => 'TG'), + '8357' => array('town' => 'Guntershausen', 'canton' => 'TG'), + '8360' => array('town' => 'Eschlikon TG', 'canton' => 'TG'), + '8362' => array('town' => 'Balterswil', 'canton' => 'TG'), + '8363' => array('town' => 'Bichelsee', 'canton' => 'TG'), + '8370' => array('town' => 'Sirnach', 'canton' => 'TG'), + '8372' => array('town' => 'Wiezikon b.Sirnach', 'canton' => 'TG'), + '8374' => array('town' => 'Oberwangen TG', 'canton' => 'TG'), + '8376' => array('town' => 'Fischingen', 'canton' => 'TG'), + '8400' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8401' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8402' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8404' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8405' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8406' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8408' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8409' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8410' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8411' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8412' => array('town' => 'Aesch (Neftenbach)', 'canton' => 'ZH'), + '8413' => array('town' => 'Neftenbach', 'canton' => 'ZH'), + '8414' => array('town' => 'Buch am Irchel', 'canton' => 'ZH'), + '8415' => array('town' => 'Berg am Irchel', 'canton' => 'ZH'), + '8416' => array('town' => 'Flaach', 'canton' => 'ZH'), + '8418' => array('town' => 'Schlatt', 'canton' => 'ZH'), + '8422' => array('town' => 'Pfungen', 'canton' => 'ZH'), + '8421' => array('town' => 'Dättlikon', 'canton' => 'ZH'), + '8423' => array('town' => 'Embrach-Embraport', 'canton' => 'ZH'), + '8424' => array('town' => 'Embrach', 'canton' => 'ZH'), + '8425' => array('town' => 'Oberembrach', 'canton' => 'ZH'), + '8426' => array('town' => 'Lufingen', 'canton' => 'ZH'), + '8427' => array('town' => 'Rorbas-Freienstein', 'canton' => 'ZH'), + '8428' => array('town' => 'Teufen ZH', 'canton' => 'ZH'), + '8187' => array('town' => 'Weiach', 'canton' => 'ZH'), + '5466' => array('town' => 'Kaiserstuhl AG', 'canton' => 'AG'), + '5467' => array('town' => 'Fisibach', 'canton' => 'AG'), + '5332' => array('town' => 'Rekingen AG', 'canton' => 'AG'), + '5330' => array('town' => 'Bad Zurzach', 'canton' => 'AG'), + '5323' => array('town' => 'Rietheim', 'canton' => 'AG'), + '5464' => array('town' => 'Rümikon AG', 'canton' => 'AG'), + '5465' => array('town' => 'Mellikon', 'canton' => 'AG'), + '5463' => array('town' => 'Wislikofen', 'canton' => 'AG'), + '5462' => array('town' => 'Siglistorf', 'canton' => 'AG'), + '5333' => array('town' => 'Baldingen', 'canton' => 'AG'), + '5334' => array('town' => 'Böbikon', 'canton' => 'AG'), + '8442' => array('town' => 'Hettlingen', 'canton' => 'ZH'), + '8444' => array('town' => 'Henggart', 'canton' => 'ZH'), + '8447' => array('town' => 'Dachsen', 'canton' => 'ZH'), + '8248' => array('town' => 'Uhwiesen', 'canton' => 'ZH'), + '8450' => array('town' => 'Andelfingen', 'canton' => 'ZH'), + '8453' => array('town' => 'Alten', 'canton' => 'ZH'), + '8451' => array('town' => 'Kleinandelfingen', 'canton' => 'ZH'), + '8452' => array('town' => 'Adlikon', 'canton' => 'ZH'), + '8457' => array('town' => 'Humlikon', 'canton' => 'ZH'), + '8458' => array('town' => 'Dorf', 'canton' => 'ZH'), + '8459' => array('town' => 'Volken', 'canton' => 'ZH'), + '8454' => array('town' => 'Buchberg', 'canton' => 'SH'), + '8455' => array('town' => 'Rüdlingen', 'canton' => 'SH'), + '8460' => array('town' => 'Marthalen', 'canton' => 'ZH'), + '8464' => array('town' => 'Ellikon am Rhein', 'canton' => 'ZH'), + '8461' => array('town' => 'Oerlingen', 'canton' => 'ZH'), + '8465' => array('town' => 'Rudolfingen', 'canton' => 'ZH'), + '8466' => array('town' => 'Trüllikon', 'canton' => 'ZH'), + '8462' => array('town' => 'Rheinau', 'canton' => 'ZH'), + '8463' => array('town' => 'Benken ZH', 'canton' => 'ZH'), + '8472' => array('town' => 'Seuzach', 'canton' => 'ZH'), + '8474' => array('town' => 'Dinhard', 'canton' => 'ZH'), + '8475' => array('town' => 'Ossingen', 'canton' => 'ZH'), + '8476' => array('town' => 'Unterstammheim', 'canton' => 'ZH'), + '8477' => array('town' => 'Oberstammheim', 'canton' => 'ZH'), + '8471' => array('town' => 'Rutschwil', 'canton' => 'ZH'), + '8478' => array('town' => 'Thalheim', 'canton' => 'ZH'), + '8479' => array('town' => 'Altikon', 'canton' => 'ZH'), + '8467' => array('town' => 'Truttikon', 'canton' => 'ZH'), + '8468' => array('town' => 'Guntalingen', 'canton' => 'ZH'), + '8482' => array('town' => 'Sennhof', 'canton' => 'ZH'), + '8483' => array('town' => 'Kollbrunn', 'canton' => 'ZH'), + '8484' => array('town' => 'Weisslingen', 'canton' => 'ZH'), + '8486' => array('town' => 'Rikon im Tösstal', 'canton' => 'ZH'), + '8487' => array('town' => 'Rämismühle', 'canton' => 'ZH'), + '8488' => array('town' => 'Turbenthal', 'canton' => 'ZH'), + '8492' => array('town' => 'Wila', 'canton' => 'ZH'), + '8493' => array('town' => 'Saland', 'canton' => 'ZH'), + '8494' => array('town' => 'Bauma', 'canton' => 'ZH'), + '8496' => array('town' => 'Steg im Tösstal', 'canton' => 'ZH'), + '8497' => array('town' => 'Fischenthal', 'canton' => 'ZH'), + '8498' => array('town' => 'Gibswil-Ried', 'canton' => 'ZH'), + '8495' => array('town' => 'Schmidrüti', 'canton' => 'ZH'), + '8499' => array('town' => 'Sternenberg', 'canton' => 'ZH'), + '8500' => array('town' => 'Frauenfeld', 'canton' => 'TG'), + '8501' => array('town' => 'Frauenfeld', 'canton' => 'TG'), + '8502' => array('town' => 'Frauenfeld', 'canton' => 'TG'), + '8503' => array('town' => 'Frauenfeld', 'canton' => 'TG'), + '8505' => array('town' => 'Pfyn', 'canton' => 'TG'), + '8506' => array('town' => 'Lanzenneunforn', 'canton' => 'TG'), + '8507' => array('town' => 'Hörhausen', 'canton' => 'TG'), + '8508' => array('town' => 'Homburg', 'canton' => 'TG'), + '8512' => array('town' => 'Thundorf', 'canton' => 'TG'), + '8514' => array('town' => 'Amlikon-Bissegg', 'canton' => 'TG'), + '8522' => array('town' => 'Häuslenen', 'canton' => 'TG'), + '8523' => array('town' => 'Hagenbuch ZH', 'canton' => 'ZH'), + '8524' => array('town' => 'Uesslingen', 'canton' => 'TG'), + '8525' => array('town' => 'Niederneunforn', 'canton' => 'TG'), + '8526' => array('town' => 'Oberneunforn', 'canton' => 'TG'), + '8532' => array('town' => 'Warth', 'canton' => 'TG'), + '8535' => array('town' => 'Herdern', 'canton' => 'TG'), + '8536' => array('town' => 'Hüttwilen', 'canton' => 'TG'), + '8537' => array('town' => 'Nussbaumen TG', 'canton' => 'TG'), + '8542' => array('town' => 'Wiesendangen', 'canton' => 'ZH'), + '8545' => array('town' => 'Rickenbach ZH', 'canton' => 'ZH'), + '8544' => array('town' => 'Attikon', 'canton' => 'ZH'), + '8546' => array('town' => 'Islikon', 'canton' => 'TG'), + '8547' => array('town' => 'Gachnang', 'canton' => 'TG'), + '8548' => array('town' => 'Ellikon a d Thur', 'canton' => 'ZH'), + '8552' => array('town' => 'Felben-Wellhausen', 'canton' => 'TG'), + '8553' => array('town' => 'Hüttlingen-Mettdf', 'canton' => 'TG'), + '8554' => array('town' => 'Müllheim-Wigoltgn', 'canton' => 'TG'), + '8555' => array('town' => 'Müllheim Dorf', 'canton' => 'TG'), + '8556' => array('town' => 'Wigoltingen', 'canton' => 'TG'), + '8564' => array('town' => 'Lipperswil', 'canton' => 'TG'), + '8558' => array('town' => 'Raperswilen', 'canton' => 'TG'), + '8269' => array('town' => 'Fruthwilen', 'canton' => 'TG'), + '8560' => array('town' => 'Märstetten', 'canton' => 'TG'), + '8561' => array('town' => 'Ottoberg', 'canton' => 'TG'), + '8565' => array('town' => 'Hugelshofen', 'canton' => 'TG'), + '8566' => array('town' => 'Dotnacht', 'canton' => 'TG'), + '8570' => array('town' => 'Weinfelden', 'canton' => 'TG'), + '8572' => array('town' => 'Berg TG', 'canton' => 'TG'), + '8573' => array('town' => 'Siegershausen', 'canton' => 'TG'), + '8574' => array('town' => 'Lengwil-Oberhofen', 'canton' => 'TG'), + '8575' => array('town' => 'Bürglen TG', 'canton' => 'TG'), + '8576' => array('town' => 'Mauren TG', 'canton' => 'TG'), + '8577' => array('town' => 'Schönholzerswilen', 'canton' => 'TG'), + '9217' => array('town' => 'Neukirch', 'canton' => 'TG'), + '8580' => array('town' => 'Amriswil', 'canton' => 'TG'), + '8582' => array('town' => 'Dozwil', 'canton' => 'TG'), + '8581' => array('town' => 'Schocherswil', 'canton' => 'TG'), + '8588' => array('town' => 'Zihlschlacht', 'canton' => 'TG'), + '8589' => array('town' => 'Sitterdorf', 'canton' => 'TG'), + '8583' => array('town' => 'Sulgen', 'canton' => 'TG'), + '8584' => array('town' => 'Leimbach TG', 'canton' => 'TG'), + '8585' => array('town' => 'Mattwil', 'canton' => 'TG'), + '8586' => array('town' => 'Erlen', 'canton' => 'TG'), + '8587' => array('town' => 'Oberaach', 'canton' => 'TG'), + '8590' => array('town' => 'Romanshorn', 'canton' => 'TG'), + '8599' => array('town' => 'Salmsach', 'canton' => 'TG'), + '8592' => array('town' => 'Uttwil', 'canton' => 'TG'), + '8593' => array('town' => 'Kesswil', 'canton' => 'TG'), + '8594' => array('town' => 'Güttingen', 'canton' => 'TG'), + '8595' => array('town' => 'Altnau', 'canton' => 'TG'), + '8596' => array('town' => 'Scherzingen', 'canton' => 'TG'), + '8597' => array('town' => 'Landschlacht', 'canton' => 'TG'), + '8598' => array('town' => 'Bottighofen', 'canton' => 'TG'), + '8600' => array('town' => 'Dübendorf', 'canton' => 'ZH'), + '8602' => array('town' => 'Wangen ZH', 'canton' => 'ZH'), + '8603' => array('town' => 'Schwerzenbach', 'canton' => 'ZH'), + '8604' => array('town' => 'Volketswil', 'canton' => 'ZH'), + '8605' => array('town' => 'Gutenswil', 'canton' => 'ZH'), + '8606' => array('town' => 'Nänikon', 'canton' => 'ZH'), + '8607' => array('town' => 'Aathal-Seegräben', 'canton' => 'ZH'), + '8608' => array('town' => 'Bubikon', 'canton' => 'ZH'), + '8610' => array('town' => 'Uster', 'canton' => 'ZH'), + '8612' => array('town' => 'Uster 2', 'canton' => 'ZH'), + '8613' => array('town' => 'Uster 3', 'canton' => 'ZH'), + '8614' => array('town' => 'Bertschikon Gossau', 'canton' => 'ZH'), + '8615' => array('town' => 'Wermatswil', 'canton' => 'ZH'), + '8616' => array('town' => 'Riedikon', 'canton' => 'ZH'), + '8617' => array('town' => 'Mönchaltorf', 'canton' => 'ZH'), + '8618' => array('town' => 'Oetwil am See', 'canton' => 'ZH'), + '8620' => array('town' => 'Wetzikon ZH', 'canton' => 'ZH'), + '8621' => array('town' => 'Wetzikon ZH 4', 'canton' => 'ZH'), + '8622' => array('town' => 'Wetzikon ZH', 'canton' => 'ZH'), + '8623' => array('town' => 'Wetzikon ZH', 'canton' => 'ZH'), + '8624' => array('town' => 'Grüt (Gossau ZH)', 'canton' => 'ZH'), + '8625' => array('town' => 'Gossau ZH', 'canton' => 'ZH'), + '8626' => array('town' => 'Ottikon', 'canton' => 'ZH'), + '8627' => array('town' => 'Grüningen', 'canton' => 'ZH'), + '8630' => array('town' => 'Rüti ZH', 'canton' => 'ZH'), + '8632' => array('town' => 'Tann', 'canton' => 'ZH'), + '8633' => array('town' => 'Wolfhausen', 'canton' => 'ZH'), + '8634' => array('town' => 'Hombrechtikon', 'canton' => 'ZH'), + '8635' => array('town' => 'Dürnten', 'canton' => 'ZH'), + '8636' => array('town' => 'Wald ZH', 'canton' => 'ZH'), + '8639' => array('town' => 'Faltigberg', 'canton' => 'ZH'), + '8637' => array('town' => 'Laupen ZH', 'canton' => 'ZH'), + '8638' => array('town' => 'Goldingen', 'canton' => 'SG'), + '8640' => array('town' => 'Rapperswil SG', 'canton' => 'SG'), + '8645' => array('town' => 'Jona', 'canton' => 'SG'), + '8646' => array('town' => 'Wagen', 'canton' => 'SG'), + '8700' => array('town' => 'Küsnacht ZH', 'canton' => 'ZH'), + '8702' => array('town' => 'Zollikon', 'canton' => 'ZH'), + '8703' => array('town' => 'Erlenbach ZH', 'canton' => 'ZH'), + '8704' => array('town' => 'Herrliberg', 'canton' => 'ZH'), + '8706' => array('town' => 'Meilen', 'canton' => 'ZH'), + '8707' => array('town' => 'Uetikon am See', 'canton' => 'ZH'), + '8708' => array('town' => 'Männedorf', 'canton' => 'ZH'), + '8712' => array('town' => 'Stäfa', 'canton' => 'ZH'), + '8713' => array('town' => 'Uerikon', 'canton' => 'ZH'), + '8714' => array('town' => 'Feldbach', 'canton' => 'ZH'), + '8715' => array('town' => 'Bollingen', 'canton' => 'SG'), + '8716' => array('town' => 'Schmerikon', 'canton' => 'SG'), + '8717' => array('town' => 'Benken SG', 'canton' => 'SG'), + '8718' => array('town' => 'Schänis', 'canton' => 'SG'), + '8722' => array('town' => 'Kaltbrunn', 'canton' => 'SG'), + '8723' => array('town' => 'Rufi', 'canton' => 'SG'), + '8725' => array('town' => 'Ernetschwil', 'canton' => 'SG'), + '8726' => array('town' => 'Ricken SG', 'canton' => 'SG'), + '8727' => array('town' => 'Walde SG', 'canton' => 'SG'), + '8730' => array('town' => 'Uznach', 'canton' => 'SG'), + '8732' => array('town' => 'Neuhaus SG', 'canton' => 'SG'), + '8733' => array('town' => 'Eschenbach SG', 'canton' => 'SG'), + '8734' => array('town' => 'Ermenswil', 'canton' => 'SG'), + '8735' => array('town' => 'St. Gallenkappel', 'canton' => 'SG'), + '8737' => array('town' => 'Gommiswald', 'canton' => 'SG'), + '8738' => array('town' => 'Uetliburg SG', 'canton' => 'SG'), + '8739' => array('town' => 'Rieden SG', 'canton' => 'SG'), + '8740' => array('town' => 'Uznach Vögele AG', 'canton' => 'SG'), + '8750' => array('town' => 'Glarus', 'canton' => 'GL'), + '8751' => array('town' => 'Urnerboden', 'canton' => 'UR'), + '8752' => array('town' => 'Näfels', 'canton' => 'GL'), + '8753' => array('town' => 'Mollis', 'canton' => 'GL'), + '8754' => array('town' => 'Netstal', 'canton' => 'GL'), + '8755' => array('town' => 'Ennenda', 'canton' => 'GL'), + '8756' => array('town' => 'Mitlödi', 'canton' => 'GL'), + '8762' => array('town' => 'Schwanden GL', 'canton' => 'GL'), + '8765' => array('town' => 'Engi', 'canton' => 'GL'), + '8766' => array('town' => 'Matt', 'canton' => 'GL'), + '8767' => array('town' => 'Elm', 'canton' => 'GL'), + '8772' => array('town' => 'Nidfurn', 'canton' => 'GL'), + '8773' => array('town' => 'Haslen GL', 'canton' => 'GL'), + '8775' => array('town' => 'Luchsingen', 'canton' => 'GL'), + '8777' => array('town' => 'Diesbach GL', 'canton' => 'GL'), + '8782' => array('town' => 'Rüti GL', 'canton' => 'GL'), + '8783' => array('town' => 'Linthal', 'canton' => 'GL'), + '8784' => array('town' => 'Braunwald', 'canton' => 'GL'), + '8800' => array('town' => 'Thalwil', 'canton' => 'ZH'), + '8802' => array('town' => 'Kilchberg ZH', 'canton' => 'ZH'), + '8803' => array('town' => 'Rüschlikon', 'canton' => 'ZH'), + '8804' => array('town' => 'Au ZH', 'canton' => 'ZH'), + '8805' => array('town' => 'Richterswil', 'canton' => 'ZH'), + '8806' => array('town' => 'Bäch SZ', 'canton' => 'SZ'), + '8807' => array('town' => 'Freienbach', 'canton' => 'SZ'), + '8808' => array('town' => 'Pfäffikon SZ', 'canton' => 'SZ'), + '8810' => array('town' => 'Horgen', 'canton' => 'ZH'), + '8812' => array('town' => 'Horgen', 'canton' => 'ZH'), + '8813' => array('town' => 'Horgen', 'canton' => 'ZH'), + '8815' => array('town' => 'Horgenberg', 'canton' => 'ZH'), + '8816' => array('town' => 'Hirzel', 'canton' => 'ZH'), + '8820' => array('town' => 'Wädenswil', 'canton' => 'ZH'), + '8824' => array('town' => 'Schönenberg ZH', 'canton' => 'ZH'), + '8825' => array('town' => 'Hütten', 'canton' => 'ZH'), + '8832' => array('town' => 'Wollerau', 'canton' => 'SZ'), + '8833' => array('town' => 'Samstagern', 'canton' => 'ZH'), + '8834' => array('town' => 'Schindellegi', 'canton' => 'SZ'), + '8835' => array('town' => 'Feusisberg', 'canton' => 'SZ'), + '8836' => array('town' => 'Bennau', 'canton' => 'SZ'), + '8840' => array('town' => 'Einsiedeln', 'canton' => 'SZ'), + '8849' => array('town' => 'Alpthal', 'canton' => 'SZ'), + '8846' => array('town' => 'Willerzell', 'canton' => 'SZ'), + '8847' => array('town' => 'Egg SZ', 'canton' => 'SZ'), + '8841' => array('town' => 'Gross', 'canton' => 'SZ'), + '8844' => array('town' => 'Euthal', 'canton' => 'SZ'), + '8845' => array('town' => 'Studen SZ', 'canton' => 'SZ'), + '8842' => array('town' => 'Unteriberg', 'canton' => 'SZ'), + '8843' => array('town' => 'Oberiberg', 'canton' => 'SZ'), + '8852' => array('town' => 'Altendorf', 'canton' => 'SZ'), + '8853' => array('town' => 'Lachen SZ', 'canton' => 'SZ'), + '8854' => array('town' => 'Siebnen', 'canton' => 'SZ'), + '8855' => array('town' => 'Wangen SZ', 'canton' => 'SZ'), + '8856' => array('town' => 'Tuggen', 'canton' => 'SZ'), + '8857' => array('town' => 'Vorderthal', 'canton' => 'SZ'), + '8858' => array('town' => 'Innerthal', 'canton' => 'SZ'), + '8862' => array('town' => 'Schübelbach', 'canton' => 'SZ'), + '8863' => array('town' => 'Buttikon SZ', 'canton' => 'SZ'), + '8864' => array('town' => 'Reichenburg', 'canton' => 'SZ'), + '8865' => array('town' => 'Bilten', 'canton' => 'GL'), + '8866' => array('town' => 'Ziegelbrücke', 'canton' => 'GL'), + '8867' => array('town' => 'Niederurnen', 'canton' => 'GL'), + '8868' => array('town' => 'Oberurnen', 'canton' => 'GL'), + '8872' => array('town' => 'Weesen', 'canton' => 'SG'), + '8873' => array('town' => 'Amden', 'canton' => 'SG'), + '8874' => array('town' => 'Mühlehorn', 'canton' => 'GL'), + '8758' => array('town' => 'Obstalden', 'canton' => 'GL'), + '8757' => array('town' => 'Filzbach', 'canton' => 'GL'), + '8877' => array('town' => 'Murg', 'canton' => 'SG'), + '8878' => array('town' => 'Quinten', 'canton' => 'SG'), + '8880' => array('town' => 'Walenstadt', 'canton' => 'SG'), + '8881' => array('town' => 'Walenstadtberg', 'canton' => 'SG'), + '8882' => array('town' => 'Unterterzen', 'canton' => 'SG'), + '8883' => array('town' => 'Quarten', 'canton' => 'SG'), + '8884' => array('town' => 'Oberterzen', 'canton' => 'SG'), + '8885' => array('town' => 'Mols', 'canton' => 'SG'), + '8887' => array('town' => 'Mels', 'canton' => 'SG'), + '8886' => array('town' => 'Mädris-Vermol', 'canton' => 'SG'), + '8889' => array('town' => 'Plons', 'canton' => 'SG'), + '8888' => array('town' => 'Heiligkreuz (Mels)', 'canton' => 'SG'), + '8890' => array('town' => 'Flums', 'canton' => 'SG'), + '8892' => array('town' => 'Berschis', 'canton' => 'SG'), + '8893' => array('town' => 'Flums Hochwiese', 'canton' => 'SG'), + '8894' => array('town' => 'Flumserberg Saxli', 'canton' => 'SG'), + '8895' => array('town' => 'Flumserberg Portel', 'canton' => 'SG'), + '8896' => array('town' => 'Flumserberg Bergh', 'canton' => 'SG'), + '8897' => array('town' => 'Flumserberg Theim', 'canton' => 'SG'), + '8898' => array('town' => 'Flumserberg Tboden', 'canton' => 'SG'), + '8902' => array('town' => 'Urdorf', 'canton' => 'ZH'), + '8903' => array('town' => 'Birmensdorf ZH', 'canton' => 'ZH'), + '8904' => array('town' => 'Aesch ZH', 'canton' => 'ZH'), + '8905' => array('town' => 'Arni-Islisberg', 'canton' => 'AG'), + '8906' => array('town' => 'Bonstetten', 'canton' => 'ZH'), + '8907' => array('town' => 'Wettswil', 'canton' => 'ZH'), + '8908' => array('town' => 'Hedingen', 'canton' => 'ZH'), + '8910' => array('town' => 'Affoltern am Albis', 'canton' => 'ZH'), + '8909' => array('town' => 'Zwillikon', 'canton' => 'ZH'), + '8911' => array('town' => 'Rifferswil', 'canton' => 'ZH'), + '8912' => array('town' => 'Obfelden', 'canton' => 'ZH'), + '8913' => array('town' => 'Ottenbach', 'canton' => 'ZH'), + '8914' => array('town' => 'Aeugst am Albis', 'canton' => 'ZH'), + '8915' => array('town' => 'Hausen am Albis', 'canton' => 'ZH'), + '8916' => array('town' => 'Jonen', 'canton' => 'AG'), + '8917' => array('town' => 'Oberlunkhofen', 'canton' => 'AG'), + '8918' => array('town' => 'Unterlunkhofen', 'canton' => 'AG'), + '8919' => array('town' => 'Rottenschwil', 'canton' => 'AG'), + '8925' => array('town' => 'Ebertswil', 'canton' => 'ZH'), + '8926' => array('town' => 'Kappel am Albis', 'canton' => 'ZH'), + '8932' => array('town' => 'Mettmenstetten', 'canton' => 'ZH'), + '8933' => array('town' => 'Maschwanden', 'canton' => 'ZH'), + '8934' => array('town' => 'Knonau', 'canton' => 'ZH'), + '8942' => array('town' => 'Oberrieden', 'canton' => 'ZH'), + '8951' => array('town' => 'Fahrweid', 'canton' => 'ZH'), + '8952' => array('town' => 'Schlieren', 'canton' => 'ZH'), + '8953' => array('town' => 'Dietikon', 'canton' => 'ZH'), + '8954' => array('town' => 'Geroldswil', 'canton' => 'ZH'), + '8955' => array('town' => 'Oetwil a.d. Limmat', 'canton' => 'ZH'), + '8956' => array('town' => 'Killwangen', 'canton' => 'AG'), + '8957' => array('town' => 'Spreitenbach', 'canton' => 'AG'), + '8962' => array('town' => 'Bergdietikon', 'canton' => 'AG'), + '8964' => array('town' => 'Rudolfstetten', 'canton' => 'AG'), + '8965' => array('town' => 'Berikon', 'canton' => 'AG'), + '8966' => array('town' => 'Oberwil-Lieli', 'canton' => 'AG'), + '8967' => array('town' => 'Widen', 'canton' => 'AG'), + '9000' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9001' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9004' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9006' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9007' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9008' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9009' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9010' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9011' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9012' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9013' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9014' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9015' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9016' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9030' => array('town' => 'Abtwil SG', 'canton' => 'SG'), + '9032' => array('town' => 'Engelburg', 'canton' => 'SG'), + '9033' => array('town' => 'Untereggen', 'canton' => 'SG'), + '9034' => array('town' => 'Eggersriet', 'canton' => 'SG'), + '9035' => array('town' => 'Grub AR', 'canton' => 'AR'), + '9036' => array('town' => 'Grub SG', 'canton' => 'SG'), + '9037' => array('town' => 'Speicherschwendi', 'canton' => 'AR'), + '9038' => array('town' => 'Rehetobel', 'canton' => 'AR'), + '9042' => array('town' => 'Speicher', 'canton' => 'AR'), + '9043' => array('town' => 'Trogen', 'canton' => 'AR'), + '9044' => array('town' => 'Wald AR', 'canton' => 'AR'), + '9050' => array('town' => 'Appenzell', 'canton' => 'AI'), + '9052' => array('town' => 'Niederteufen', 'canton' => 'AR'), + '9053' => array('town' => 'Teufen AR', 'canton' => 'AR'), + '9054' => array('town' => 'Haslen AI', 'canton' => 'AI'), + '9055' => array('town' => 'Bühler', 'canton' => 'AR'), + '9056' => array('town' => 'Gais', 'canton' => 'AR'), + '9057' => array('town' => 'Weissbad', 'canton' => 'AI'), + '9058' => array('town' => 'Brülisau', 'canton' => 'AI'), + '9062' => array('town' => 'Lustmühle', 'canton' => 'AR'), + '9063' => array('town' => 'Stein AR', 'canton' => 'AR'), + '9064' => array('town' => 'Hundwil', 'canton' => 'AR'), + '9100' => array('town' => 'Herisau', 'canton' => 'AR'), + '9102' => array('town' => 'Herisau', 'canton' => 'AR'), + '9103' => array('town' => 'Schwellbrunn', 'canton' => 'AR'), + '9104' => array('town' => 'Waldstatt', 'canton' => 'AR'), + '9105' => array('town' => 'Schönengrund', 'canton' => 'AR'), + '9107' => array('town' => 'Urnäsch', 'canton' => 'AR'), + '9108' => array('town' => 'Gonten', 'canton' => 'AI'), + '9112' => array('town' => 'Schachen b.Herisau', 'canton' => 'AR'), + '9113' => array('town' => 'Degersheim', 'canton' => 'SG'), + '9114' => array('town' => 'Hoffeld', 'canton' => 'SG'), + '9115' => array('town' => 'Dicken', 'canton' => 'SG'), + '9116' => array('town' => 'Wolfertswil', 'canton' => 'SG'), + '9122' => array('town' => 'Mogelsberg', 'canton' => 'SG'), + '9123' => array('town' => 'Nassen', 'canton' => 'SG'), + '9125' => array('town' => 'Brunnadern', 'canton' => 'SG'), + '9126' => array('town' => 'Necker', 'canton' => 'SG'), + '9127' => array('town' => 'St. Peterzell', 'canton' => 'SG'), + '9633' => array('town' => 'Bächli (Hemberg)', 'canton' => 'SG'), + '9200' => array('town' => 'Gossau SG', 'canton' => 'SG'), + '9203' => array('town' => 'Niederwil SG', 'canton' => 'SG'), + '9204' => array('town' => 'Andwil SG', 'canton' => 'SG'), + '9205' => array('town' => 'Waldkirch', 'canton' => 'SG'), + '9212' => array('town' => 'Arnegg', 'canton' => 'SG'), + '9213' => array('town' => 'Hauptwil', 'canton' => 'TG'), + '9214' => array('town' => 'Kradolf-Schönenb.', 'canton' => 'TG'), + '9216' => array('town' => 'Heldswil', 'canton' => 'TG'), + '9215' => array('town' => 'Schönenberg TG', 'canton' => 'TG'), + '9220' => array('town' => 'Bischofszell', 'canton' => 'TG'), + '9223' => array('town' => 'Schweizersholz', 'canton' => 'TG'), + '9225' => array('town' => 'Wilen (Gottshaus)', 'canton' => 'TG'), + '9230' => array('town' => 'Flawil', 'canton' => 'SG'), + '9231' => array('town' => 'Egg (Flawil)', 'canton' => 'SG'), + '9604' => array('town' => 'Oberrindal', 'canton' => 'SG'), + '9240' => array('town' => 'Uzwil', 'canton' => 'SG'), + '9242' => array('town' => 'Oberuzwil', 'canton' => 'SG'), + '9248' => array('town' => 'Bichwil', 'canton' => 'SG'), + '9243' => array('town' => 'Jonschwil', 'canton' => 'SG'), + '9244' => array('town' => 'Niederuzwil', 'canton' => 'SG'), + '9245' => array('town' => 'Oberbüren', 'canton' => 'SG'), + '9246' => array('town' => 'Niederbüren', 'canton' => 'SG'), + '9247' => array('town' => 'Henau', 'canton' => 'SG'), + '9249' => array('town' => 'Algetshausen', 'canton' => 'SG'), + '9300' => array('town' => 'Wittenbach', 'canton' => 'SG'), + '9304' => array('town' => 'Bernhardzell', 'canton' => 'SG'), + '9305' => array('town' => 'Berg SG', 'canton' => 'SG'), + '9306' => array('town' => 'Freidorf TG', 'canton' => 'TG'), + '9315' => array('town' => 'Winden', 'canton' => 'TG'), + '9308' => array('town' => 'Lömmenschwil', 'canton' => 'SG'), + '9312' => array('town' => 'Häggenschwil', 'canton' => 'SG'), + '9313' => array('town' => 'Muolen', 'canton' => 'SG'), + '9314' => array('town' => 'Steinebrunn', 'canton' => 'TG'), + '9320' => array('town' => 'Arbon', 'canton' => 'TG'), + '9322' => array('town' => 'Egnach', 'canton' => 'TG'), + '9323' => array('town' => 'Steinach', 'canton' => 'SG'), + '9325' => array('town' => 'Roggwil TG', 'canton' => 'TG'), + '9326' => array('town' => 'Horn', 'canton' => 'TG'), + '9327' => array('town' => 'Tübach', 'canton' => 'SG'), + '9400' => array('town' => 'Rorschach', 'canton' => 'SG'), + '9404' => array('town' => 'Rorschacherberg', 'canton' => 'SG'), + '9402' => array('town' => 'Mörschwil', 'canton' => 'SG'), + '9403' => array('town' => 'Goldach', 'canton' => 'SG'), + '9405' => array('town' => 'Wienacht-Tobel', 'canton' => 'AR'), + '9410' => array('town' => 'Heiden', 'canton' => 'AR'), + '9411' => array('town' => 'Reute AR', 'canton' => 'AR'), + '9413' => array('town' => 'Oberegg', 'canton' => 'AI'), + '9414' => array('town' => 'Schachen b. Reute', 'canton' => 'AR'), + '9422' => array('town' => 'Staad SG', 'canton' => 'SG'), + '9423' => array('town' => 'Altenrhein', 'canton' => 'SG'), + '9424' => array('town' => 'Rheineck', 'canton' => 'SG'), + '9425' => array('town' => 'Thal', 'canton' => 'SG'), + '9426' => array('town' => 'Lutzenberg', 'canton' => 'AR'), + '9427' => array('town' => 'Wolfhalden', 'canton' => 'AR'), + '9428' => array('town' => 'Walzenhausen', 'canton' => 'AR'), + '9430' => array('town' => 'St. Margrethen SG', 'canton' => 'SG'), + '9434' => array('town' => 'Au SG', 'canton' => 'SG'), + '9435' => array('town' => 'Heerbrugg', 'canton' => 'SG'), + '9436' => array('town' => 'Balgach', 'canton' => 'SG'), + '9437' => array('town' => 'Marbach SG', 'canton' => 'SG'), + '9450' => array('town' => 'Lüchingen', 'canton' => 'SG'), + '9442' => array('town' => 'Berneck', 'canton' => 'SG'), + '9443' => array('town' => 'Widnau', 'canton' => 'SG'), + '9444' => array('town' => 'Diepoldsau', 'canton' => 'SG'), + '9445' => array('town' => 'Rebstein', 'canton' => 'SG'), + '9451' => array('town' => 'Kriessern', 'canton' => 'SG'), + '9452' => array('town' => 'Hinterforst', 'canton' => 'SG'), + '9453' => array('town' => 'Eichberg', 'canton' => 'SG'), + '9462' => array('town' => 'Montlingen', 'canton' => 'SG'), + '9463' => array('town' => 'Oberriet SG', 'canton' => 'SG'), + '9464' => array('town' => 'Rüthi (Rheintal)', 'canton' => 'SG'), + '9465' => array('town' => 'Salez', 'canton' => 'SG'), + '9466' => array('town' => 'Sennwald', 'canton' => 'SG'), + '9467' => array('town' => 'Frümsen', 'canton' => 'SG'), + '9468' => array('town' => 'Sax', 'canton' => 'SG'), + '9469' => array('town' => 'Haag (Rheintal)', 'canton' => 'SG'), + '9470' => array('town' => 'Buchs SG', 'canton' => 'SG'), + '9472' => array('town' => 'Grabs', 'canton' => 'SG'), + '9473' => array('town' => 'Gams', 'canton' => 'SG'), + '9475' => array('town' => 'Sevelen', 'canton' => 'SG'), + '9476' => array('town' => 'Weite', 'canton' => 'SG'), + '9477' => array('town' => 'Trübbach', 'canton' => 'SG'), + '9478' => array('town' => 'Azmoos', 'canton' => 'SG'), + '9479' => array('town' => 'Oberschan', 'canton' => 'SG'), + '9485' => array('town' => 'Nendeln', 'canton' => 'FL'), + '9486' => array('town' => 'Schaanwald', 'canton' => 'FL'), + '9487' => array('town' => 'Gamprin-Bendern', 'canton' => 'FL'), + '9488' => array('town' => 'Schellenberg', 'canton' => 'FL'), + '9490' => array('town' => 'Vaduz', 'canton' => 'FL'), + '9491' => array('town' => 'Ruggell', 'canton' => 'FL'), + '9492' => array('town' => 'Eschen', 'canton' => 'FL'), + '9493' => array('town' => 'Mauren FL', 'canton' => 'FL'), + '9494' => array('town' => 'Schaan', 'canton' => 'FL'), + '9495' => array('town' => 'Triesen', 'canton' => 'FL'), + '9496' => array('town' => 'Balzers', 'canton' => 'FL'), + '9497' => array('town' => 'Triesenberg', 'canton' => 'FL'), + '9500' => array('town' => 'Wil SG', 'canton' => 'SG'), + '9502' => array('town' => 'Braunau', 'canton' => 'TG'), + '9503' => array('town' => 'Stehrenberg', 'canton' => 'TG'), + '9504' => array('town' => 'Friltschen', 'canton' => 'TG'), + '9506' => array('town' => 'Lommis', 'canton' => 'TG'), + '9507' => array('town' => 'Stettfurt', 'canton' => 'TG'), + '9508' => array('town' => 'Weingarten-Kalth', 'canton' => 'TG'), + '9512' => array('town' => 'Rossrüti', 'canton' => 'SG'), + '9514' => array('town' => 'Wuppenau', 'canton' => 'TG'), + '9515' => array('town' => 'Hosenruck', 'canton' => 'TG'), + '9517' => array('town' => 'Mettlen', 'canton' => 'TG'), + '9565' => array('town' => 'Rothenhausen', 'canton' => 'TG'), + '9523' => array('town' => 'Züberwangen', 'canton' => 'SG'), + '9524' => array('town' => 'Zuzwil SG', 'canton' => 'SG'), + '9525' => array('town' => 'Lenggenwil', 'canton' => 'SG'), + '9526' => array('town' => 'Zuckenriet', 'canton' => 'SG'), + '9527' => array('town' => 'Niederhelfenschwil', 'canton' => 'SG'), + '9532' => array('town' => 'Rickenbach b. Wil', 'canton' => 'TG'), + '9533' => array('town' => 'Kirchberg SG', 'canton' => 'SG'), + '9534' => array('town' => 'Gähwil', 'canton' => 'SG'), + '9535' => array('town' => 'Wilen b. Wil', 'canton' => 'TG'), + '9536' => array('town' => 'Schwarzenbach SG', 'canton' => 'SG'), + '9542' => array('town' => 'Münchwilen TG', 'canton' => 'TG'), + '9543' => array('town' => 'St. Margarethen TG', 'canton' => 'TG'), + '9545' => array('town' => 'Wängi', 'canton' => 'TG'), + '9546' => array('town' => 'Tuttwil', 'canton' => 'TG'), + '9547' => array('town' => 'Wittenwil', 'canton' => 'TG'), + '9548' => array('town' => 'Matzingen', 'canton' => 'TG'), + '9552' => array('town' => 'Bronschhofen', 'canton' => 'SG'), + '9553' => array('town' => 'Bettwiesen', 'canton' => 'TG'), + '9554' => array('town' => 'Tägerschen', 'canton' => 'TG'), + '9555' => array('town' => 'Tobel', 'canton' => 'TG'), + '9556' => array('town' => 'Affeltrangen', 'canton' => 'TG'), + '9562' => array('town' => 'Märwil', 'canton' => 'TG'), + '9573' => array('town' => 'Littenheid', 'canton' => 'TG'), + '9601' => array('town' => 'Lütisburg Station', 'canton' => 'SG'), + '9602' => array('town' => 'Bazenheid', 'canton' => 'SG'), + '9606' => array('town' => 'Bütschwil', 'canton' => 'SG'), + '9607' => array('town' => 'Mosnang', 'canton' => 'SG'), + '9608' => array('town' => 'Ganterschwil', 'canton' => 'SG'), + '9612' => array('town' => 'Dreien', 'canton' => 'SG'), + '9613' => array('town' => 'Mühlrüti', 'canton' => 'SG'), + '9614' => array('town' => 'Libingen', 'canton' => 'SG'), + '9615' => array('town' => 'Dietfurt', 'canton' => 'SG'), + '9620' => array('town' => 'Lichtensteig', 'canton' => 'SG'), + '9621' => array('town' => 'Oberhelfenschwil', 'canton' => 'SG'), + '9622' => array('town' => 'Krinau', 'canton' => 'SG'), + '9630' => array('town' => 'Wattwil', 'canton' => 'SG'), + '9631' => array('town' => 'Ulisbach', 'canton' => 'SG'), + '9642' => array('town' => 'Ebnat-Kappel', 'canton' => 'SG'), + '9643' => array('town' => 'Krummenau', 'canton' => 'SG'), + '9650' => array('town' => 'Nesslau', 'canton' => 'SG'), + '9651' => array('town' => 'Ennetbühl', 'canton' => 'SG'), + '9655' => array('town' => 'Stein SG', 'canton' => 'SG'), + '9652' => array('town' => 'Neu St. Johann', 'canton' => 'SG'), + '9656' => array('town' => 'Alt St. Johann', 'canton' => 'SG'), + '9657' => array('town' => 'Unterwasser', 'canton' => 'SG'), + '9658' => array('town' => 'Wildhaus', 'canton' => 'SG'), + '3185' => array('town' => 'Schmitten FR', 'canton' => 'FR'), + '3113' => array('town' => 'Rubigen', 'canton' => 'BE'), + '6304' => array('town' => 'Zug', 'canton' => 'ZG'), + '6911' => array('town' => 'Campione', 'canton' => 'IT'), + '8238' => array('town' => 'Büsingen', 'canton' => 'DE'), + '6302' => array('town' => 'Zug', 'canton' => 'ZG'), + '6303' => array('town' => 'Zug', 'canton' => 'ZG'), + '1289' => array('town' => 'Genève Serv. Spéc.', 'canton' => 'GE'), + '7003' => array('town' => 'Chur Postauto', 'canton' => 'GR'), + '3024' => array('town' => 'Bern', 'canton' => 'BE'), + '1017' => array('town' => 'Lausanne Veillon', 'canton' => 'VD'), + '1099' => array('town' => 'Montpreveyres Foto', 'canton' => 'VD'), + '3030' => array('town' => 'Bern', 'canton' => 'BE'), + '1031' => array('town' => 'Mex VD', 'canton' => 'VD'), + '1734' => array('town' => 'Tentlingen', 'canton' => 'FR'), + '1029' => array('town' => 'Villars-Ste-Croix', 'canton' => 'VD'), + '9101' => array('town' => 'Herisau', 'canton' => 'AR'), + '3044' => array('town' => 'Innerberg', 'canton' => 'BE'), + '8317' => array('town' => 'Tagelswangen', 'canton' => 'ZH'), + '6908' => array('town' => 'Massagno Caselle', 'canton' => 'TI'), + '6009' => array('town' => 'Luzern', 'canton' => 'LU'), + '6910' => array('town' => 'Lugano', 'canton' => 'TI'), + '5232' => array('town' => 'Villigen PSI', 'canton' => 'AG'), + '6349' => array('town' => 'Baar', 'canton' => 'ZG'), + '2715' => array('town' => 'Monible', 'canton' => 'BE'), + '1653' => array('town' => 'Châtel-Montsalvens', 'canton' => 'FR'), + '1730' => array('town' => 'Ecuvillens', 'canton' => 'FR'), + '1428' => array('town' => 'Mutrux', 'canton' => 'VD'), + '1047' => array('town' => 'Oppens', 'canton' => 'VD'), + '2027' => array('town' => 'Montalchez', 'canton' => 'NE'), + '2933' => array('town' => 'Damphreux', 'canton' => 'JU'), + '8543' => array('town' => 'Bertschikon', 'canton' => 'ZH'), + '3429' => array('town' => 'Hellsau', 'canton' => 'BE'), + '3632' => array('town' => 'Niederstocken', 'canton' => 'BE'), + '8774' => array('town' => 'Leuggelbach', 'canton' => 'GL'), + '4584' => array('town' => 'Gächliwil', 'canton' => 'SO'), + '5058' => array('town' => 'Wiliberg', 'canton' => 'AG'), + '3940' => array('town' => 'Steg VS', 'canton' => 'VS'), + '9498' => array('town' => 'Planken', 'canton' => 'FL'), + '8801' => array('town' => 'Thalwil', 'canton' => 'ZH'), + '6341' => array('town' => 'Baar', 'canton' => 'ZG'), + '6342' => array('town' => 'Baar', 'canton' => 'ZG'), + '9029' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '1709' => array('town' => 'Fribourg', 'canton' => 'FR'), + '8879' => array('town' => 'Pizolpark (Mels)', 'canton' => 'SG'), + '8118' => array('town' => 'Pfaffhausen', 'canton' => 'ZH'), + '5601' => array('town' => 'Lenzburg Sonderdst', 'canton' => 'AG'), + '9028' => array('town' => 'St. Gallen CV AG', 'canton' => 'SG'), + '9027' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '1811' => array('town' => 'Vevey', 'canton' => 'VD'), + '3609' => array('town' => 'Thun', 'canton' => 'BE'), + '1775' => array('town' => 'Mannens', 'canton' => 'FR'), + '8106' => array('town' => 'Adlikon b.Regensdf', 'canton' => 'ZH'), + '8070' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8071' => array('town' => 'Zürich CS PZ', 'canton' => 'ZH'), + '1631' => array('town' => 'Bulle', 'canton' => 'FR'), + '3040' => array('town' => 'Bern', 'canton' => 'BE'), + '4040' => array('town' => 'Basel', 'canton' => 'BL'), + '6007' => array('town' => 'Luzern', 'canton' => 'LU'), + '8759' => array('town' => 'Netstal', 'canton' => 'GL'), + '9020' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '4573' => array('town' => 'Lohn-Ammannsegg', 'canton' => 'SO'), + '9026' => array('town' => 'St. Gallen K AG', 'canton' => 'SG'), + '6031' => array('town' => 'Ebikon', 'canton' => 'LU'), + '6021' => array('town' => 'Emmenbrücke 1', 'canton' => 'LU'), + '6391' => array('town' => 'Engelberg', 'canton' => 'OW'), + '6281' => array('town' => 'Hochdorf', 'canton' => 'LU'), + '6011' => array('town' => 'Kriens', 'canton' => 'LU'), + '6061' => array('town' => 'Sarnen 1', 'canton' => 'OW'), + '6371' => array('town' => 'Stans', 'canton' => 'NW'), + '6431' => array('town' => 'Schwyz', 'canton' => 'SZ'), + '9025' => array('town' => 'St. Gallen Quelle', 'canton' => 'SG'), + '6907' => array('town' => 'Lugano 7 Caselle', 'canton' => 'TI'), + '1240' => array('town' => 'Genève', 'canton' => 'GE'), + '9471' => array('town' => 'Buchs SG 1', 'canton' => 'SG'), + '9401' => array('town' => 'Rorschach', 'canton' => 'SG'), + '9501' => array('town' => 'Wil SG 1', 'canton' => 'SG'), + '4509' => array('town' => 'Solothurn', 'canton' => 'SO'), + '4070' => array('town' => 'Basel', 'canton' => 'BS'), + '8609' => array('town' => 'Schwerzenbach', 'canton' => 'ZH'), + '6602' => array('town' => 'Muralto', 'canton' => 'TI'), + '6161' => array('town' => 'Entlebuch', 'canton' => 'LU'), + '9201' => array('town' => 'Gossau SG', 'canton' => 'SG'), + '8510' => array('town' => 'Frauenfeld', 'canton' => 'TG'), + '3050' => array('town' => 'Bern', 'canton' => 'BE'), + '8086' => array('town' => 'Zürich R Digest', 'canton' => 'ZH'), + '8085' => array('town' => 'Zürich Versich.', 'canton' => 'ZH'), + '2075' => array('town' => 'Thielle', 'canton' => 'NE'), + '1068' => array('town' => 'Les Monts-de-Pully', 'canton' => 'VD'), + '2010' => array('town' => 'Neuchâtel OFS', 'canton' => 'NE'), + '8285' => array('town' => 'Kreuzlingen Ifolor', 'canton' => 'TG'), + '4039' => array('town' => 'Basel', 'canton' => 'BS'), + '2510' => array('town' => 'Biel/Bienne DistBa', 'canton' => 'BE'), + '5510' => array('town' => 'Hunzenschwil DistB', 'canton' => 'AG'), + '8210' => array('town' => 'Schaffhausen DistB', 'canton' => 'SH'), + '9510' => array('town' => 'Wil SG Dist Ba', 'canton' => 'SG'), + '5018' => array('town' => 'Erlinsbach', 'canton' => 'AG'), + '1310' => array('town' => 'Daillens Dist Ba', 'canton' => 'VD'), + '8098' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8066' => array('town' => 'Zürich', 'canton' => 'ZH'), + '4620' => array('town' => 'Härkingen PZ', 'canton' => 'SO'), + '8183' => array('town' => 'Bülach Dist Ba', 'canton' => 'ZH'), + '8325' => array('town' => 'Effretikon Dist Ba', 'canton' => 'ZH'), + '8520' => array('town' => 'Frauenfeld PZ', 'canton' => 'TG'), + '8343' => array('town' => 'Hinwil Dist Ba', 'canton' => 'ZH'), + '8087' => array('town' => 'Zürich', 'canton' => 'ZH'), + '4078' => array('town' => 'Basel Reader\'s D.', 'canton' => 'BS'), + '9024' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '4609' => array('town' => 'Olten', 'canton' => 'SO'), + '8015' => array('town' => 'Zürich 15', 'canton' => 'ZH'), + '1818' => array('town' => 'Montreux Redoute', 'canton' => 'VD'), + '8540' => array('town' => 'Frauenfeld ST PP 1', 'canton' => 'TG'), + '8530' => array('town' => 'Frauenfeld CALL', 'canton' => 'TG'), + '4640' => array('town' => 'Härkingen ST PP 1', 'canton' => 'SO'), + '4630' => array('town' => 'Härkingen CALL', 'canton' => 'SO'), + '1330' => array('town' => 'Daillens CALL', 'canton' => 'VD'), + '1320' => array('town' => 'Daillens ST PP 1', 'canton' => 'VD'), + '1440' => array('town' => 'Montagny-Chamard', 'canton' => 'VD'), + '4065' => array('town' => 'Basel SBB Cargo AG', 'canton' => 'BS'), + '8075' => array('town' => 'Zürich', 'canton' => 'ZH'), + '4080' => array('town' => 'Basel', 'canton' => 'BS'), + '6039' => array('town' => 'Root Längenbold', 'canton' => 'LU'), + '4034' => array('town' => 'Basel 34 Breite', 'canton' => 'BS'), + '4035' => array('town' => 'Basel', 'canton' => 'BS'), + '4089' => array('town' => 'Basel', 'canton' => 'BS'), + '8068' => array('town' => 'Zürich', 'canton' => 'ZH'), + '3071' => array('town' => 'Ostermundigen Zust', 'canton' => 'BE'), + '4033' => array('town' => 'Basel', 'canton' => 'BS'), + '4081' => array('town' => 'Basel', 'canton' => 'BS'), + '4082' => array('town' => 'Basel', 'canton' => 'BS'), + '8186' => array('town' => 'Bülach', 'canton' => 'ZH'), + '3039' => array('town' => 'Bern PF OC', 'canton' => 'BE'), + '4042' => array('town' => 'Basel PF OC', 'canton' => 'BL'), + '4083' => array('town' => 'Basel', 'canton' => 'BS'), + '4084' => array('town' => 'Basel', 'canton' => 'BS'), + '4085' => array('town' => 'Basel', 'canton' => 'BS'), + '4086' => array('town' => 'Basel', 'canton' => 'BS'), + '4087' => array('town' => 'Basel', 'canton' => 'BS'), + '4088' => array('town' => 'Basel', 'canton' => 'BS'), + '8081' => array('town' => 'Zürich', 'canton' => 'ZH'), + '4092' => array('town' => 'Basel SPI AS 22', 'canton' => 'BS'), + '4093' => array('town' => 'Basel SPI AS 23', 'canton' => 'BS'), + '4094' => array('town' => 'Basel SPI AS 24', 'canton' => 'BS'), + '4095' => array('town' => 'Basel SPI AS 25', 'canton' => 'BS'), + '4096' => array('town' => 'Basel SPI AS 26', 'canton' => 'BS'), + '8901' => array('town' => 'Urdorf', 'canton' => 'ZH'), + '3041' => array('town' => 'Bern', 'canton' => 'BE'), + '6008' => array('town' => 'Luzern', 'canton' => 'LU'), + '4041' => array('town' => 'Basel', 'canton' => 'BS'), + '9489' => array('town' => 'Vaduz', 'canton' => 'FL'), + '4551' => array('town' => 'Derendingen', 'canton' => 'SO'), + '4075' => array('town' => 'Basel', 'canton' => 'BS'), + '9022' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '8109' => array('town' => 'Kloster Fahr', 'canton' => 'AG'), + '1019' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1039' => array('town' => 'Cheseaux Polyval', 'canton' => 'VD'), + '6346' => array('town' => 'Baar 3', 'canton' => 'ZG'), + '3085' => array('town' => 'Wabern Weihnachten', 'canton' => 'BE'), + '1300' => array('town' => 'Eclépens CC', 'canton' => 'VD'), + '3070' => array('town' => 'Ostermundigen LZB', 'canton' => 'BE'), + '4621' => array('town' => 'Härkingen BZ', 'canton' => 'SO'), + '6590' => array('town' => 'Cadenazzo (CLL)', 'canton' => 'TI'), + '1919' => array('town' => 'Martigny Mutuel', 'canton' => 'VS'), + '8096' => array('town' => 'Zürich IBRS local', 'canton' => 'ZH'), + '4808' => array('town' => 'Zofingen PF', 'canton' => 'AG'), + '4807' => array('town' => 'Zofingen PF', 'canton' => 'AG'), + '1311' => array('town' => 'Eclépens SC', 'canton' => 'VD'), + '4611' => array('town' => 'Härkingen SC', 'canton' => 'SO'), + '8011' => array('town' => 'Zürich Mülligen SC', 'canton' => 'ZH'), + '8060' => array('town' => 'Zürich', 'canton' => 'ZH'), + '6333' => array('town' => 'Hünenberg See', 'canton' => 'ZG'), + '4809' => array('town' => 'Zofingen PF', 'canton' => 'AG'), + '8059' => array('town' => 'Zürich 59 EO', 'canton' => 'ZH'), + '3017' => array('town' => 'Bern Zustellung', 'canton' => 'BE'), + '9301' => array('town' => 'Wittenbach', 'canton' => 'SG'), + '6511' => array('town' => 'Cadenazzo SC', 'canton' => 'TI'), + '8074' => array('town' => 'Zürich Voice Pub', 'canton' => 'ZH'), + '3029' => array('town' => 'Bern Entris', 'canton' => 'BE'), + '7110' => array('town' => 'Peiden', 'canton' => 'GR'), + '8012' => array('town' => 'Zürich', 'canton' => 'ZH'), + '2360' => array('town' => 'Le Bémont', 'canton' => 'JU'), + '2362' => array('town' => 'Montfaucon', 'canton' => 'JU'), + '2363' => array('town' => 'Les Enfers', 'canton' => 'JU'), + '2364' => array('town' => 'St-Brais', 'canton' => 'JU'), + '8970' => array('town' => 'Urdorf Exchange', 'canton' => 'ZH'), + ); + + // Check if theres something for autocomplete + if (!empty($element['#value']) && (isset($data[$element['#value']]))) { + // Get the base #parents for this address form. + $base_parents = array_slice($element['#parents'], 0, -1); + $base_array_parents = array_slice($element['#array_parents'], 0, -2); + + $city = $data[$element['#value']]; + + // Set the new values in the form. + drupal_array_set_nested_value($form_state['values'], array_merge($base_parents, array('locality')), $city['town'], TRUE); + drupal_array_set_nested_value($form_state['values'], array_merge($base_parents, array('administrative_area')), $city['canton'], TRUE); + + // Discard value the user has already entered there. + drupal_array_set_nested_value($form_state['input'], array_merge($base_parents, array('locality')), NULL, TRUE); + drupal_array_set_nested_value($form_state['input'], array_merge($base_parents, array('administrative_area')), NULL, TRUE); + } +} diff --git a/sites/all/modules/custom/addressfield/plugins/format/address-hide-country.inc b/sites/all/modules/custom/addressfield/plugins/format/address-hide-country.inc new file mode 100644 index 0000000000..13ebd1cb22 --- /dev/null +++ b/sites/all/modules/custom/addressfield/plugins/format/address-hide-country.inc @@ -0,0 +1,40 @@ + t('Hide the country when only one is available'), + 'format callback' => 'addressfield_format_address_hide_country', + 'type' => 'address', + 'weight' => -80, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_address_hide_country(&$format, $address, $context = array()) { + // Hide the country element only if the whole field is required, otherwise + // there will always be an additional None option. + if ($context['mode'] == 'form' && $context['instance']['required']) { + if (!empty($format['country']['#options']) && count($format['country']['#options']) == 1) { + $format['country']['#access'] = FALSE; + } + } + elseif ($context['mode'] == 'render') { + // However, in render mode, the element does not have an #options list, so + // we look instead in the field instance settings if given. If we find a + // single country option and it matches the country of the current address, + // go ahead and hide it. + if (!empty($context['instance']['widget']['settings']['available_countries']) && + count($context['instance']['widget']['settings']['available_countries']) == 1) { + if (isset($context['instance']['widget']['settings']['available_countries'][$address['country']])) { + $format['country']['#access'] = FALSE; + } + } + } +} diff --git a/sites/all/modules/custom/addressfield/plugins/format/address-hide-postal-code.inc b/sites/all/modules/custom/addressfield/plugins/format/address-hide-postal-code.inc new file mode 100644 index 0000000000..4f058d34c9 --- /dev/null +++ b/sites/all/modules/custom/addressfield/plugins/format/address-hide-postal-code.inc @@ -0,0 +1,24 @@ + t('Hide the postal code'), + 'format callback' => 'addressfield_format_address_hide_postal_code', + 'type' => 'address', + 'weight' => -85, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_address_hide_postal_code(&$format, $address, $context = array()) { + if (isset($format['locality_block']['postal_code'])) { + $format['locality_block']['postal_code']['#access'] = FALSE; + } +} diff --git a/sites/all/modules/custom/addressfield/plugins/format/address-hide-street.inc b/sites/all/modules/custom/addressfield/plugins/format/address-hide-street.inc new file mode 100644 index 0000000000..a5912dce29 --- /dev/null +++ b/sites/all/modules/custom/addressfield/plugins/format/address-hide-street.inc @@ -0,0 +1,24 @@ + t('Hide the street address'), + 'format callback' => 'addressfield_format_address_hide_street', + 'type' => 'address', + 'weight' => -85, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_address_hide_street(&$format, $address, $context = array()) { + if (isset($format['street_block'])) { + $format['street_block']['#access'] = FALSE; + } +} diff --git a/sites/all/modules/custom/addressfield/plugins/format/address-optional.inc b/sites/all/modules/custom/addressfield/plugins/format/address-optional.inc new file mode 100644 index 0000000000..201e40eabc --- /dev/null +++ b/sites/all/modules/custom/addressfield/plugins/format/address-optional.inc @@ -0,0 +1,36 @@ + t('Make all fields optional (Not recommended)'), + 'format callback' => 'addressfield_format_address_optional', + 'type' => 'address', + 'weight' => 100, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_address_optional(&$format, $address, $context = array()) { + if (isset($format['name_block'])) { + if (isset($format['name_block']['name_line'])) { + $format['name_block']['name_line']['#required'] = FALSE; + } + elseif (isset($format['name_block']['first_name'])) { + $format['name_block']['first_name']['#required'] = FALSE; + $format['name_block']['last_name']['#required'] = FALSE; + } + } + $format['street_block']['thoroughfare']['#required'] = FALSE; + $format['locality_block']['postal_code']['#required'] = FALSE; + $format['locality_block']['dependent_locality']['#required'] = FALSE; + $format['locality_block']['locality']['#required'] = FALSE; + $format['locality_block']['administrative_area']['#required'] = FALSE; +} diff --git a/sites/all/modules/custom/addressfield/plugins/format/address.inc b/sites/all/modules/custom/addressfield/plugins/format/address.inc new file mode 100644 index 0000000000..d99b7f9983 --- /dev/null +++ b/sites/all/modules/custom/addressfield/plugins/format/address.inc @@ -0,0 +1,289 @@ + t('Address form (country-specific)'), + 'format callback' => 'addressfield_format_address_generate', + 'type' => 'address', + 'weight' => -100, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_address_generate(&$format, $address, $context = array()) { + // Load the predefined address format for the selected country. + module_load_include('inc', 'addressfield', 'addressfield.address_formats'); + $address_format = addressfield_get_address_format($address['country']); + + // Used to move certain fields to their own row. + $clearfix = '
'; + + // The street block. + $format['street_block'] = array( + '#type' => 'addressfield_container', + '#attributes' => array( + 'class' => array('street-block'), + ), + '#weight' => 0, + ); + $format['street_block']['thoroughfare'] = array( + '#title' => t('Address 1'), + '#tag' => 'div', + '#attributes' => array( + 'class' => array('thoroughfare'), + 'x-autocompletetype' => 'address-line1', + 'autocomplete' => 'address-line1', + ), + '#size' => 30, + '#required' => TRUE, + ); + $format['street_block']['premise'] = array( + '#title' => t('Address 2'), + '#tag' => 'div', + '#attributes' => array( + 'class' => array('premise'), + 'x-autocompletetype' => 'address-line2', + 'autocomplete' => 'address-line2', + ), + '#size' => 30, + ); + $format['locality_block'] = array( + '#type' => 'addressfield_container', + '#attributes' => array( + 'class' => array('addressfield-container-inline', 'locality-block', 'country-' . $address['country']), + ), + '#weight' => 50, + ); + $format['locality_block']['#attached']['css'][] = drupal_get_path('module', 'addressfield') . '/addressfield.css'; + $format['locality_block']['postal_code'] = array( + '#title' => $address_format['postal_code_label'], + '#required' => in_array('postal_code', $address_format['required_fields']), + '#access' => in_array('postal_code', $address_format['used_fields']), + '#size' => 10, + '#attributes' => array( + 'class' => array('postal-code'), + 'x-autocompletetype' => 'postal-code', + 'autocomplete' => 'postal-code', + ), + ); + $format['locality_block']['dependent_locality'] = array( + '#title' => $address_format['dependent_locality_label'], + '#required' => in_array('dependent_locality', $address_format['required_fields']), + '#access' => in_array('dependent_locality', $address_format['used_fields']), + '#size' => 25, + '#tag' => 'div', + '#attributes' => array( + 'class' => array('dependent-locality') + ), + // Most formats place this field in its own row. + '#suffix' => $clearfix, + ); + $format['locality_block']['locality'] = array( + '#title' => $address_format['locality_label'], + '#required' => in_array('locality', $address_format['required_fields']), + '#access' => in_array('locality', $address_format['used_fields']), + '#size' => 30, + '#prefix' => ' ', + '#attributes' => array( + 'class' => array('locality'), + 'x-autocompletetype' => 'locality', + 'autocomplete' => 'locality', + ), + ); + $format['locality_block']['administrative_area'] = array( + '#title' => $address_format['administrative_area_label'], + '#required' => in_array('administrative_area', $address_format['required_fields']), + '#access' => in_array('administrative_area', $address_format['used_fields']), + '#empty_value' => '', + '#size' => 10, + '#prefix' => ' ', + '#render_option_value' => $address_format['render_administrative_area_value'], + '#attributes' => array( + 'class' => array('state'), + 'x-autocompletetype' => 'region', + 'autocomplete' => 'region', + ), + ); + $format['country'] = array( + '#title' => t('Country'), + '#options' => _addressfield_country_options_list(), + '#render_option_value' => TRUE, + '#required' => TRUE, + '#attributes' => array( + 'class' => array('country'), + 'x-autocompletetype' => 'country', + 'autocomplete' => 'country', + ), + '#weight' => 100, + ); + + if (empty($format['locality_block']['postal_code']['#access'])) { + // Remove the prefix from the first widget of the block. + $element_children = element_children($format['locality_block']); + $first_child = reset($element_children); + unset($format['locality_block'][$first_child]['#prefix']); + } + + if (!empty($format['locality_block']['administrative_area']['#access'])) { + // Set the predefined administrative areas, if found. + module_load_include('inc', 'addressfield', 'addressfield.administrative_areas'); + $administrative_areas = addressfield_get_administrative_areas($address['country']); + $format['locality_block']['administrative_area']['#options'] = $administrative_areas; + } + + // Country-specific customizations. + if (in_array($address['country'], array('AU', 'EE', 'LT', 'LV', 'NZ', 'RU'))) { + // These countries don't use the "Address 2" line. + // Leave it as a precaution, but hide the label to avoid confusing users. + $format['street_block']['thoroughfare']['#title'] = t('Address'); + $format['street_block']['premise']['#title_display'] = 'invisible'; + } + elseif ($address['country'] == 'US') { + if ($context['mode'] == 'render') { + $format['locality_block']['locality']['#suffix'] = ','; + } + } + elseif ($address['country'] == 'BR') { + $format['locality_block']['dependent_locality']['#suffix'] = $clearfix; + $format['locality_block']['dependent_locality']['#tag'] = 'div'; + $format['locality_block']['administrative_area']['#suffix'] = $clearfix; + $format['locality_block']['postal_code']['#tag'] = 'div'; + // Change some titles to make translation easier. + $format['street_block']['#attributes'] = array( + 'class' => array('addressfield-container-inline'), + ); + $format['street_block']['thoroughfare']['#title'] = t('Thoroughfare'); + $format['street_block']['thoroughfare']['#tag'] = NULL; + $format['street_block']['premise'] = array( + '#title' => t('Complement'), + '#tag' => NULL, + '#attributes' => array('class' => array('premise')), + '#size' => 20, + '#prefix' => ', ', + ); + $format['locality_block']['locality']['#suffix'] = ' - '; + // Hide suffixes and prefixes while in form. + if ($context['mode'] == 'form') { + $format['street_block']['premise']['#prefix'] = NULL; + $format['street_block']['premise']['#suffix'] = NULL; + $format['locality_block']['locality']['#suffix'] = NULL; + } + } + elseif ($address['country'] == 'CN') { + $format['locality_block']['locality']['#suffix'] = $clearfix; + } + elseif ($address['country'] == 'CA') { + if ($context['mode'] == 'render') { + $format['locality_block']['locality']['#suffix'] = ','; + } + } + elseif ($address['country'] == 'GB') { + $format['locality_block']['administrative_area']['#size'] = '30'; + } + elseif ($address['country'] == 'ID') { + $format['locality_block']['administrative_area']['#weight'] = 1; + } + elseif ($address['country'] == 'JP') { + $format['locality_block']['#weight'] = 10; + $format['locality_block']['postal_code']['#weight'] = 10; + $format['locality_block']['postal_code']['#tag'] = 'div'; + $format['locality_block']['postal_code']['#size'] = 30; + $format['locality_block']['administrative_area']['#weight'] = 20; + $format['locality_block']['administrative_area']['#size'] = 30; + $format['locality_block']['locality']['#weight'] = 30; + $format['street_block']['#weight'] = 20; + } + elseif ($address['country'] == 'PE') { + $format['locality_block']['administrative_area']['#weight'] = 1; + $format['locality_block']['locality']['#weight'] = 2; + } + elseif ($address['country'] == 'PH' || $address['country'] == 'TH') { + $format['locality_block']['dependent_locality']['#suffix'] = ''; + $format['locality_block']['locality']['#suffix'] = $clearfix; + } + + // These countries show every field in its own row. + $countries_field_per_row = array( + 'AM', 'EG', 'FK', 'GB', 'GG', 'GS', 'HK', 'HU', 'IE', 'IM', 'IO', 'JE', 'JM', + 'JP', 'KE', 'KR', 'KZ', 'LK', 'PA', 'PN', 'RU', 'SC', 'SH', 'SZ', 'TC', 'UA', + 'VG', 'ZA', + ); + if (in_array($address['country'], $countries_field_per_row)) { + $format['locality_block']['#attributes']['class'][0] = 'addressfield-container'; + $format['locality_block']['postal_code']['#prefix'] = ''; + $format['locality_block']['postal_code']['#tag'] = 'div'; + $format['locality_block']['locality']['#prefix'] = ''; + $format['locality_block']['locality']['#tag'] = 'div'; + $format['locality_block']['administrative_area']['#prefix'] = ''; + $format['locality_block']['administrative_area']['#tag'] = 'div'; + } + + // These countries tend to put the postal code after the locality. + $countries_postal_code_after_locality = array( + 'AS', 'AU', 'BD', 'BF', 'BH', 'BM', 'BN', 'BR', 'BT', 'CA', 'CC', 'CN', 'CX', + 'EG', 'FK', 'FM', 'GB', 'GG', 'GS', 'GU', 'HN', 'HU', 'ID', 'IL', 'IM', 'IN', + 'IO', 'IQ', 'IR', 'JE', 'JO', 'JP', 'KE', 'KH', 'KR', 'LB', 'LK', 'LS', 'LV', + 'MH', 'MM', 'MN', 'MP', 'MT', 'MV', 'MX', 'MY', 'NF', 'NG', 'NP', 'NZ', 'PG', + 'PH', 'PK', 'PN', 'PR', 'PW', 'RU', 'SA', 'SH', 'SO', 'SZ', 'TC', 'TH', 'TW', + 'UA', 'UM', 'US', 'VE', 'VI', 'VG', 'VN', 'ZA', + ); + if (in_array($address['country'], $countries_postal_code_after_locality)) { + // Take the widget out of the array. + $postal_code_widget = $format['locality_block']['postal_code']; + $postal_code_widget['#prefix'] = ' '; + unset($format['locality_block']['postal_code']); + + // Add it back. + $format['locality_block']['postal_code'] = $postal_code_widget; + + // Remove the prefix from the first widget of the block. + $element_children = element_children($format['locality_block']); + $first_child = reset($element_children); + unset($format['locality_block'][$first_child]['#prefix']); + } + + if ($context['mode'] == 'form') { + // Provide a wrapper ID for AJAX replacement based on country selection. + if (!isset($format['#wrapper_id'])) { + $format['#wrapper_id'] = drupal_html_id('addressfield-wrapper'); + $format['#prefix'] = '
'; + $format['#suffix'] = '
'; + } + // AJAX enable it. + $format['country']['#ajax'] = array( + 'callback' => 'addressfield_standard_widget_refresh', + 'wrapper' => $format['#wrapper_id'], + ); + $format['country']['#element_validate'] = array('addressfield_standard_country_validate'); + // Don't validate any element when the country is changed. + $format['country']['#limit_validation_errors'] = array(); + + // Move the country selector to the top of the form. + $format['country']['#weight'] = -500; + // Limit it to the countries supported by the widget. + if (isset($context['field'])) { + $format['country']['#options'] = _addressfield_country_options_list($context['field'], $context['instance']); + } + + // The whole field is considered empty if the country column is empty. + // Therefore, if the field is optional, allow the country to be optional. + // The same logic applies if the field allows multiple values, in which case + // only the first delta needs to have a value. + if (empty($context['instance']['required']) || (isset($context['delta']) && $context['delta'] > 0)) { + $format['country']['#required'] = FALSE; + $format['country']['#empty_value'] = ''; + // Hide all other fields until the country is selected. + if (empty($address['country'])) { + $format['street_block']['#access'] = FALSE; + $format['locality_block']['#access'] = FALSE; + } + } + } +} diff --git a/sites/all/modules/custom/addressfield/plugins/format/name-full.inc b/sites/all/modules/custom/addressfield/plugins/format/name-full.inc new file mode 100644 index 0000000000..02a67b93a1 --- /dev/null +++ b/sites/all/modules/custom/addressfield/plugins/format/name-full.inc @@ -0,0 +1,52 @@ + t('Name (First name, Last name)'), + 'format callback' => 'addressfield_format_name_full_generate', + 'type' => 'name', + 'weight' => 0, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_name_full_generate(&$format, $address) { + $format['name_block'] = array( + '#type' => 'addressfield_container', + '#attributes' => array( + 'class' => array('addressfield-container-inline', 'name-block'), + ), + '#weight' => -100, + // The addressfield is considered empty without a country, hide all fields + // until one is selected. + '#access' => !empty($address['country']), + ); + $format['name_block']['first_name'] = array( + '#title' => t('First name'), + '#size' => 30, + '#required' => TRUE, + '#attributes' => array( + 'class' => array('first-name'), + 'x-autocompletetype' => 'given-name', + 'autocomplete' => 'given-name', + ), + ); + $format['name_block']['last_name'] = array( + '#title' => t('Last name'), + '#size' => 30, + '#required' => TRUE, + '#prefix' => ' ', + '#attributes' => array( + 'class' => array('last-name'), + 'x-autocompletetype' => 'family-name', + 'autocomplete' => 'family-name', + ), + ); +} diff --git a/sites/all/modules/custom/addressfield/plugins/format/name-oneline.inc b/sites/all/modules/custom/addressfield/plugins/format/name-oneline.inc new file mode 100644 index 0000000000..0f7de04504 --- /dev/null +++ b/sites/all/modules/custom/addressfield/plugins/format/name-oneline.inc @@ -0,0 +1,40 @@ + t('Name (single line)'), + 'format callback' => 'addressfield_format_name_oneline_generate', + 'type' => 'name', + 'weight' => 0, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_name_oneline_generate(&$format, $address) { + $format['name_block'] = array( + '#type' => 'addressfield_container', + '#attributes' => array('class' => array('addressfield-container-inline', 'name-block')), + '#weight' => -100, + // The addressfield is considered empty without a country, hide all fields + // until one is selected. + '#access' => !empty($address['country']), + ); + $format['name_block']['name_line'] = array( + '#title' => t('Full name'), + '#tag' => 'div', + '#attributes' => array( + 'class' => array('name-block'), + 'x-autocompletetype' => 'name', + 'autocomplete' => 'name', + ), + '#size' => 30, + '#required' => TRUE, + ); +} diff --git a/sites/all/modules/custom/addressfield/plugins/format/organisation.inc b/sites/all/modules/custom/addressfield/plugins/format/organisation.inc new file mode 100644 index 0000000000..d658f83f77 --- /dev/null +++ b/sites/all/modules/custom/addressfield/plugins/format/organisation.inc @@ -0,0 +1,38 @@ + t('Organisation (single line)'), + 'format callback' => 'addressfield_format_organisation_generate', + 'type' => 'organisation', + 'weight' => -10, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_organisation_generate(&$format, $address) { + $format['organisation_block'] = array( + '#type' => 'addressfield_container', + '#attributes' => array('class' => array('addressfield-container-inline', 'name-block')), + '#weight' => -50, + // The addressfield is considered empty without a country, hide all fields + // until one is selected. + '#access' => !empty($address['country']), + ); + $format['organisation_block']['organisation_name'] = array( + '#title' => t('Company'), + '#size' => 30, + '#attributes' => array( + 'class' => array('organisation-name'), + 'x-autocompletetype' => 'organization', + 'autocomplete' => 'organization', + ), + ); +} diff --git a/sites/all/modules/custom/addressfield/views/addressfield.views.inc b/sites/all/modules/custom/addressfield/views/addressfield.views.inc new file mode 100644 index 0000000000..9be1637e1c --- /dev/null +++ b/sites/all/modules/custom/addressfield/views/addressfield.views.inc @@ -0,0 +1,95 @@ + $tables) { + foreach ($tables as $table_name => $columns) { + if (!isset($columns['country'])) { + continue; + } + + $column_real_name = $columns['country']; + if (!isset($data[$table_name][$column_real_name]['filter'])) { + continue; + } + + $data[$table_name][$column_real_name]['filter']['handler'] = 'addressfield_views_handler_filter_country'; + } + } + + // Only expose these components as Views field handlers. + $implemented = array( + 'country' => 'addressfield_views_handler_field_country', + 'administrative_area' => 'views_handler_field', + 'sub_administrative_area' => 'views_handler_field', + 'dependent_locality' => 'views_handler_field', + 'locality' => 'views_handler_field', + 'postal_code' => 'views_handler_field', + 'thoroughfare' => 'views_handler_field', + 'premise' => 'views_handler_field', + 'sub_premise' => 'views_handler_field', + 'organisation_name' => 'views_handler_field', + 'name_line' => 'views_handler_field', + 'first_name' => 'views_handler_field', + 'last_name' => 'views_handler_field', + 'data' => 'views_handler_field_serialized', + ); + + // Get the translated field information. + $properties = addressfield_data_property_info(); + + // Iterate over addressfield defined tables. + foreach ($data as &$table) { + // Make sure the parent Views field (addressfield) is defined. + if (isset($table[$field['field_name']]['field'])) { + // Use the parent field definition as a template for component columns. + $field_def = $table[$field['field_name']]['field']; + + // Remove 'additional fields' from the field definition. We don't + // necessarily want all our sibling columns. + unset($field_def['additional fields']); + + // Define the valid columns. + $valid_columns = array(); + foreach ($implemented as $implement => $handler) { + $column_name = $field['field_name'] . '_' . $implement; + $valid_columns[$column_name] = $handler; + } + + // Iterate over the addressfield components. + foreach ($table as $column_name => &$column) { + if (empty($column['field']) && isset($valid_columns[$column_name])) { + // Assign the default component definition. + $column['field'] = $field_def; + $column['field']['real field'] = $column_name; + $column['field']['handler'] = $valid_columns[$column_name]; + + // Assign human-friendly field labels for addressfield components. + $field_labels = field_views_field_label($field['field_name']); + $field_label = array_shift($field_labels); + $property = str_replace($field_def['field_name'] . '_', '', $column_name); + + if (!empty($properties[$property])) { + $property_label = $properties[$property]['label']; + + $title = t('@field-label - @property-label', array( + '@field-label' => $field_label, + '@property-label' => $property_label, + )); + + $column['title'] = $title; + $column['title short'] = $title; + } + } + } + } + } + + return $data; +} diff --git a/sites/all/modules/custom/addressfield/views/addressfield_views_handler_field_country.inc b/sites/all/modules/custom/addressfield/views/addressfield_views_handler_field_country.inc new file mode 100644 index 0000000000..65ca79d3c3 --- /dev/null +++ b/sites/all/modules/custom/addressfield/views/addressfield_views_handler_field_country.inc @@ -0,0 +1,40 @@ + TRUE); + return $options; + } + + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + + $form['display_name'] = array( + '#type' => 'checkbox', + '#title' => t('Display the localized country name instead of the two character country code'), + '#default_value' => $this->options['display_name'], + ); + } + + function get_value($values, $field = NULL) { + $value = parent::get_value($values, $field); + + // If we have a value for the field, look for the country name in the + // Address Field options list array if specified. + if (!empty($value) && !empty($this->options['display_name'])) { + $countries = _addressfield_country_options_list(); + + if (!empty($countries[$value])) { + $value = $countries[$value]; + } + } + + return $value; + } +} diff --git a/sites/all/modules/custom/addressfield/views/addressfield_views_handler_filter_country.inc b/sites/all/modules/custom/addressfield/views/addressfield_views_handler_filter_country.inc new file mode 100644 index 0000000000..d1b11c197e --- /dev/null +++ b/sites/all/modules/custom/addressfield/views/addressfield_views_handler_filter_country.inc @@ -0,0 +1,9 @@ +value_title = t('Country'); + $field = field_info_field($this->definition['field_name']); + $this->value_options = _addressfield_country_options_list($field); + } +} \ No newline at end of file diff --git a/sites/all/modules/custom/admin_menu/CHANGELOG.txt b/sites/all/modules/custom/admin_menu/CHANGELOG.txt new file mode 100644 index 0000000000..b2dcdfefcf --- /dev/null +++ b/sites/all/modules/custom/admin_menu/CHANGELOG.txt @@ -0,0 +1,366 @@ + +Admin Menu 7.x-3.x, xxxx-xx-xx +------------------------------ +#1177202 by das-peter, dereine, sun: Fixed copying and re-injection of child + router items breaks badly. Change them by reference instead. + Requires latest Views 3.x code. +#1212064 by sun: Updated admin_views default views for VBO 3.x. +#1196590 by sun: Fixed errors and notices for admin_views with Views 3. +#1144768 by idlewilder, sun: Fixed devel modules to skip are not displayed. +#1079374 by WillHall: Fixed JS Error: unrecognized expression: [href=/]. +#1114132 by joelstein, sun: Added Field UI to list of developer modules. +#1008380 by bdragon, sun: Updated admin_views for D7. +#1146644 by sun: Fixed PHP 5.3 compability in tests. +#442560 by sun: Fixed 'defer' script attribute breaks Drupal.behaviors in FF3.6. +#1022902 by matglas86, sun: Updated for changed core Toolbar styles. + + +Admin Menu 7.x-3.0-RC1, 2010-01-07 +---------------------------------- +#990774 by sun: Updated for $closure renamed to $page_bottom. +#991906 by johnv, sun: Added configure to .info file. +#947198 by sun: Added hint about disabling Toolbar. +by sun: Updated administrative settings form for D7 UX guidelines. +by sun: Disabled "Rebuild system links" button on settings form. +#420816 by sun, smk-ka: Improved on-demand loading of dynamic paths. +#420816 by tim.plunkett: Fixed dynamic Field UI paths for vocabularies. +#871774 by swentel: Fixed developer modules toggle still uses referer_uri(). +#671760 by sun: Updated for new preprocess defaults. +#731462 by sun: Updated for system_rebuild_theme_data(). +by sun: Re-added a "Rebuild system links" button to settings form. +#420816 by tim.plunkett: Updated taxonomy path map for machine names. +#857688 by sun: Updated for reverted system_settings_form(). +#420816 by smk-ka, sun: Added merging of menu trees containing dynamic paths. +by sun: Fixed tests and minor admin_menu_toolbar styling issues. +by sun: Fixed various styling issues for admin_menu and admin_menu_toolbar. +by sun: Updated for Schema API, DBTNG, coding standards. +by sun: Updated for new admin/modules path. +#701424 by hutch: Updated for new admin/people/people path. +by sun: Removed orphan menu rewrite function. +#667858 by sun: Don't remove the current user from the switch user list. +#631550 by sun: Updated for fixed MENU_VISIBLE_IN_BREADCRUMB behavior. +#658344 by dereine, sun: Updated for removed drupal_session_count(). +by sun: Added separate permission to flush cashes. +by sun: Updated for changed Devel settings form. +by sun: Updated for new {system}.info module data. +#614730 by azriprajwala, sun: Updated for hook_theme() key changes. +by sun: Updated for all theme functions should take a single argument. +by sun: Reverted removal of registry cache flushing option. +#578520 by sun: Fixed destination query parameter is processed wrongly. +#578520 by sun: Updated for $query in url() should always be an array. +by Dave Reid: Updated for PHP 5 date constants. +by sun: Updated for new database API. +by smk-ka: Removed remnants of the registry. Fixed flush admin menu cache + command. +#567618 by smk-ka: Revised test cases. Abstracted out base web test class. +by sun: Updated for removed registry, new admin paths. +#326539 by sun: Updated for class attribute array. +#519782 by sun: Updated for hook_footer() replaced by hook_page_alter(). +#525638 by Razorraser: Updated for admin/build renamed to admin/structure. +by Dave Reid: Updated for hook_permission(). +#482314 by Dave Reid: Updated for node_type_get_types(). +#437506 by yched, Dave Reid: Updated for menu_router_build(). +#376816 by sun: Updated for compatibility for other JavaScript libraries. +#337820 by Dave Reid: Updated for new user/logout path. +#340546 by Dave Reid: Updated for drupal_add_js(). +#340531 by Dave Reid: Updated for module_list(). +#266358 by sun: Updated for drupal_add_css(). +#320526 by yettyn, sun: Updated to UNSTABLE-2 (DBTNG queries, permissions, etc). +by sun: Changed admin_menu_wipe() to admin_menu_flush_caches(). +by sun: Updated content-type edit menu item locations. +by sun: Fixed sess_count() changed to drupal_session_count(). + + +Admin Menu 6.x-3.x, xxxx-xx-xx +------------------------------ +#588936 by fenstrat: Fixed Toolbar shortcuts not visible. +#860390 by Kevin Rogers: Fixed .info file parsing error on uncertain platform. +#551484 by sun: Fixed stale hook_admin_menu_output_alter() docs. + + +Admin Menu 6.x-3.0-ALPHA4, 2010-03-11 +------------------------------------- +#730156 by sun: Fixed Administration views. +by sun: Fixed missing .element-hidden style in D6 for permissions tweak. +#645526 by TravisCarden: Fixed stale local tasks markup after moving them. +#366442 by sun: Added tweak to collapse modules on permissions page. +#655926 by donquixote, sun: Improved performance of delayed mouseout. +#557062 by sun: Fixed admin_menu_toolbar JS/CSS loaded before admin_menu's. +#599462 by sun, koyama: Added background-color to avoid unintentional override. +#601918 by BWPanda: Fixed admin_menu.css overrides admin_menu_toolbar.css. +#586228 by Island Usurper: Fixed for PHP 5.3. +#554124 by Dave Reid: Added missing toolbar.png. +#557062 by Dave Reid: Fixed undefined Drupal.admin error when including + admin_menu_toolbar.js before admin_menu.js. +#511744 by smk-ka, sun: Fixed /admin page links are broken. +by smk-ka: Added missing variables to hook_uninstall(). +#571038 by smk-ka: Removed call to admin_menu_wipe() and cleaned install file. +#552190 by Bartezz: Fixed missing t() for user logout link. + + +Admin Menu 6.x-3.0-ALPHA3, 2009-08-16 +------------------------------------- +#502500 by sun: Added "Create content" menu. +#538714 by sun: Fixed wrong re-parenting in Drupal's menu system. +#550132 by sun: Fixed (temporarily) admin_views menu items. +by sun: Added Administration views sub-module, converting all administrative + listing pages in Drupal core into real, ajaxified, and alterable views. +#547206 by sun: Fixed menu link descriptions lead to mouseover clashes. +#540954 by Rob Loach: Added String Overrides to list of developer modules. +#540762 by Deslack: Added Malay translation. + + +Admin Menu 6.x-3.0-ALPHA2, 2009-08-02 +------------------------------------- +#527908 by sun: Changed theme_admin_menu_links() to use $element['#children']. +#527908 by markus_petrux, sun: Changed admin menu into a renderable array. +#420812 by sun, smk-ka: Added support for hook_js(). +by sun: Fixed destination query string of current page not applied to links. +by sun: Changed Drupal.admin.attachBehaviors() to accept local JS settings. +#276751 by sun: Revamped rendering of menu additions/widgets. +#500866 by sun: Updated for removed t() from getInfo() in tests. +#402058 by sun: Added Administration menu toolbar module. +by markus_petrux, sun: Added API documentation. +#461264 by sun: Added site/domain as CSS class. +#451270 by smk-ka, sun: Changed visual indication for uid1. +by sun: Minor code clean-up. +#490670 by sun: Fixed missing menu after installation/upgrade. +#515718 by joelstein, sun: Added rules_admin module to developer modules list. +#352065 by sun: Added setting to select developer modules to keep enabled. +#511854 by psynaptic: Fixed logout link. +#424960 by markus_petrux, sun: Fixed gzip compression for cached output. +by sun: Fixed opacity of links in sub-menus. +#479922 by sun: Fixed fieldsets not collapsed on admin/build/modules/list*. +#495148 by sun: Fixed MENU_NORMAL_ITEMs do not appear in administration menu. +by sun: Fixed tests for new content-type locations. +#345984 by markus_petrux, sun: Fixed old menu links not removed on upgrade. +#276751 by sun: Major rewrite. Fixed menu items cannot be moved, altered, or + added as well as various performance issues. +by sun: Added variable to allow to disable caching (rewrite). + + +Admin Menu 6.x-3.0-ALPHA1, 2009-06-10 +------------------------------------- +#236657 by sun: Updated for corrected arguments of system_clear_cache_submit(). +#483870 by sun: Fixed compatibility with new Admin module. +#483152 by sun: Fixed admin_menu caches not flushed when clean URLs are toggled. +#479922 by danep: Fixed fieldsets not collapsed on admin/build/modules/list. +#469716 by sun: Fixed wrong AJAX callback URL under various conditions. +#471504 by wulff: Updated Danish translation. +by sun: Fixed admin_menu_suppress() does not suppress margin-top. +#451270 by sun: Added visual indication when working as uid 1. +by Dave Reid: Updated for getInfo() in tests. +#420828 by sun: Added dynamic replacements for cached administration menu. +#420840 by sun: Fixed Drupal.behaviors.adminMenu must be only executed once. +#345984 by markus_petrux, sun: Added client-side caching of administration menu. + Attention: A new era of Drupal user experience starts here. This is the very + first issue of a series of improvements targeting plain awesomeness. +#349169 by sun: Fixed Devel switch user links contain multiple path prefixes. +#345984 by sun: Code clean-up in preparation for client-side caching. +#415196 by psynaptic: Updated for CSS coding standards. +#406672 by mr.j, sun: Fixed "Move local tasks" option leaves stale UL. +by sun: Major code clean-up and sync across 3.x branches. +#349505 by smk-ka, sun: Performance: Added caching of entire menu output. +#315342 by wulff: Added "My account" link (by splitting the "Log out" item). +#384100 by kepol, sun: Fixed content-type items displayed in wrong place. +#373339 by sun: Fixed double-escaped 'Edit ' link titles. +#373372 by sun: Turned procedural JavaScript into admin menu behaviors. +by sun: Fixed admin menu tests (and updated to 6.x for SimpleTest 2.x). +#359158 by nitrospectide, sun: Fixed Devel Themer breaks admin menu. +#365335 by sun: Fixed not all variables removed after uninstall. + + +Admin Menu 6.x-1.3, 2009-01-24 +------------------------------ +#362454 by sun: Fixed Drupal.settings.admin_menu is undefined JS error in some + browsers. + + +Admin Menu 6.x-1.2, 2009-01-20 +------------------------------ +#358697 by sun: Added docs about admin_menu_suppress() to README.txt. +#342684 by darumaki, sun: Added notice about Opera configuration to README.txt. +#350932 by sun: Fixed "Run updates" link repeated per language/site. +#342298 by gustz: Updated Spanish translation. +#346106 by sun: Fixed XHTML-Strict validation for admin menu icon. +#287448 by sun: Fixed unnecessary menu rebuild for users without permission to + use admin menu. +#342002 by AltaVida: Fixed improper test for node/add paths. +#272920 by keith.smith: Changed all text strings throughout the module. +#322731 by sun: Fixed improper use of t() in module install file. +#282030 by sun: Fixed "Run updates" item visible for unprivileged users. +#322877 by sun: Added tweak to move page tabs into administration menu. +#287468 by sun: Fixed module paths directly below "admin" get the wrong parent. +#310423 by sun: Added optional position: fixed configuration setting. +#292657 by smk-ka: Improved rendering performance. +#234149 by yhager, sun: Fixed RTL support for IE. +#323726 by danez1972: Added Spanish translation. +#325057 by sun: Updated README.txt. +#234149 by yhager, levavie, sun: Added RTL support. +#325057 by sun: Added links to flush specific caches. +#324334 by AltaVida: Fixed usernames with spaces not in Devel user switch links. +#319382 by betz: Added Dutch translation. + + +Admin Menu 6.x-1.1, 2008-09-12 +------------------------------ +#295476 by pwolanin, use for icon path to fix front-page path-change + bug and pathauto conflict, add wipe button to admin form. +#301370 by sun: Disabled module fieldset collapsing behavior by default. +#288672 by sun: Fixed JS hover behavior not working in IE. +#290803 by sun: Fixed missing devel_themer in devel modules; added some others. +#286636 by sun: Fixed menus do not drop down in IE6. +#249537 by pwolanin, sun: Added admin_menu_suppress() to allow other modules to + disable the display of admin_menu on certain pages (f.e. popups). +#268211 by sun: Fixed invalid issue queue links for custom modules and + sub-modules of projects. +#261461 by sun: Added FAQ entry for displaying other menus like admin_menu. +#264067 by sun: Added FAQ entry for huge amount of anonymous users displayed. +#280002 by pwolanin: Clean up .test setUp function. +#242377 by sun: Fixed sub-level menu items exceed total document height. + + +Admin Menu 6.x-1.0, 2008-06-26 +------------------------------ +#266308 by sun: Fixed jQuery 1.0.x incompatible selector for collapsing modules. +#268373 by sun: Added hook_update to cleanup for alpha/beta testers. +#268373 by sun: Added menu callback to disable/enable developer modules. +#132524 by pwolanin: Fixed admin_menu links are re-inserted each time menu links + are rebuilt. +by smk-ka: Performance: Use 'defer' attribute for JavaScript to delay execution. +#266099 by sun: Fixed description of "Apply margin-top" configuration setting. +#266308 by sun: Usability: Added Utility module features to collapse module + fieldsets on Modules page. +#251341 by sun: Added docs about display drupal links permission. + + +Admin Menu 6.x-1.0-BETA, 2008-06-08 +----------------------------------- +#132524 by sun: Fixed support for sub-content-types below node/add. +#132524 by pwolanin: Added support for localizable menu links. +#132524 by pwolanin, sun: Fixed menu links adjustments. +#132524 by pwolanin: Added simpletest. +#132524 by pwolanin: Major rewrite to better use Drupal 6 menu system. +#132524 by sun: Moved gettext translation files into translations. +#132524 by sun: Committing pre-alpha code for D6 due to public demand. + + +Admin Menu 5.x-2.x, xxxx-xx-xx +------------------------------ +#246221 by sun: Fixed user counter displays different values than Who's online + block. +#239022 by mikl: Added Danish translation. +#234444 by smk-ka: Fixed admin_menu icon does not respect theme settings. +#198240 by sun: Fixed admin_menu displayed in print output. + + +Admin Menu 5.x-2.4, 2008-02-24 +------------------------------ +#214740 by sun: Regression: Fixed directly applied marginTop not supported by IE. +#214725 by sun: Fixed wrong CSS id in admin_menu.js (missed in 5.x-2.3). + + +Admin Menu 5.x-2.3, 2008-02-24 +------------------------------ +#214725 by sun: Fixed CSS id and classes should not contain underscores. +#209390 by sun: Added note about interaction with user role permissions. +#214740 by jjeff, sun: Added module settings to configure margin-top CSS. +#200737 by sun: Changed admin_menu (fav)icon to use theme setting, if defined. +#203116 by smk-ka: Improved performance of non-cached admin_menu by storing + already processed URLs in the cache. +#224605 by sun: 'Add ' items do not appear without 'administer + nodes' permission. +#210615 by robertgarrigos: Fixed Mozilla Mac: Collapsible fieldsets display + error. + + +Admin Menu 5.x-2.2, 2007-01-08 +------------------------------ +#204884 by jjeff: Usability: Override theme font family declaration. +#204935 by jjeff: Added mouseout delay for hovered menus (yay!). +#193941 by downgang: Fixed margin in IE6 using Garland theme. +#197306 by sun: Fixed 'Run updates' leads to wrong url with clean URLs disabled. +Moved images into sub-folder. +by smk-ka: Fixed icon title for user counter not displayed & coding style. +Fixed user count not displayed without 'administer users' permission. + + +Admin Menu 5.x-2.1, 2007-12-02 +------------------------------ +Fixed adding menu items with negative weight not always working. +Fixed admin_menu_copy_items() is overwriting already existing items. +Fixed display menu item ids in devel settings does not work. + + +Admin Menu 5.x-2.0, 2007-12-02 +------------------------------ +Added devel_admin_menu() for fast access to clear-cache, variable editor and + switch_user. +Added username to logout button. +Added hook_admin_menu() to allow other modules to alter admin_menu. +#194189 by sun: Added counter for current anonymous/authenticated users. +Added Drupal.org project issue queue links for all enabled contrib modules. +#189701 by sun: Changed admin_menu icon to be a menu. +#193925 by sun: Removed obsolete menu slicing code. +#193669 by smk-ka: Moved admin_menu builder functions into include file. + + +Admin Menu 5.x-1.2, 2007-11-18 +------------------------------ +#176969 by smk-ka: Fixed performance issues with path(auto) module by + introducing a menu cache for admin_menu. +#179648 by sun: Inject admin_menu into theme. + Fixes several CSS bugs in various themes and also activation of admin_menu + immediately after installation. +#191213 by Standard: Fixed block info shouldn't contain the word "block". +#187816 by sun: Fixed "Add" not translatable. +#186218 by sun: Fixed admin menu icon too big in Safari. +#182563 by sun: Fixed wrong datatype for array_search in _admin_menu_get_children(). +#183496 by sun: Fixed invalid argument supplied for foreach in admin_menu_copy_items(). + + +Admin Menu 5.x-1.1, 2007-10-10 +------------------------------ +#178876 by sun: Fixed 3rd-level submenus expand without hover over. +#153455 by sun: Fixed add product node sub-elements are empty. +Fixed path_to_theme() call breaking blocks page. +#177582 by sun: Fixed bluebreeze theme compatibility. + + +Admin Menu 5.x-1.0, 2007-09-06 +------------------------------ +#156952 by sun: Fixed admin menu inaccessible due to margins. +#149229 by sun: Fixed admin menu not expanding in IE7. +#172545 by sun: Use opacity instead of -moz-opacity. +#132867 Fixed z-index too low. +- Fixed admin menu block selectors to override any other theme styles. +#155589 by sun: Added permission to access administration menu. +- Fixed a PHP warning when there are no content types defined in the system, as + node/add then has no child menu items. +#155312 by sun: Fixed menu item tooltip clashes. +Added support for custom stylesheets per theme. +Removed 4.7.x compatibility. + + +Admin Menu 4.7-1.3, 2007-03-30 +------------------------------ +#126601 Fixed Users can see inaccessible items. +#121027 Fixed Page not found entries for menu-collapsed.png. + + +Admin Menu 4.7-1.2, 2007-03-04 +------------------------------ +- Fixed menu item adjustments +- Fixed IE / Safari support +- Fixed base_path for IE support +- Added create content options to content management menu + + +Admin Menu 4.7-1.1, 2007-01-24 +------------------------------ +First stable release, compatible to Drupal 4.7.x and 5.x. + + +Admin Menu 4.7-1.0, 2007-01-16 +------------------------------ +Initial release of admin_menu module. Already supporting Drupal 5.0. diff --git a/sites/all/modules/custom/admin_menu/LICENSE.txt b/sites/all/modules/custom/admin_menu/LICENSE.txt new file mode 100644 index 0000000000..d159169d10 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/sites/all/modules/custom/admin_menu/README.txt b/sites/all/modules/custom/admin_menu/README.txt new file mode 100644 index 0000000000..136db70991 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/README.txt @@ -0,0 +1,188 @@ + +-- SUMMARY -- + +The Administration menu module displays the entire administrative menu tree (and +most local tasks) in a drop-down menu, providing administrators one- or +two-click access to most pages. Other modules may also add menu links to the +menu using hook_admin_menu_output_alter(). + +For a full description of the module, visit the project page: + http://drupal.org/project/admin_menu + +To submit bug reports and feature suggestions, or to track changes: + http://drupal.org/project/issues/admin_menu + + +-- REQUIREMENTS -- + +None. + + +-- INSTALLATION -- + +* Install as usual, see http://drupal.org/node/895232 for further information. + +* You likely want to disable Toolbar module, since its output clashes with + Administration menu. + + +-- CONFIGURATION -- + +* Configure user permissions in Administration » People » Permissions: + + - Use the administration pages and help (System module) + + The top-level administration categories require this permission to be + accessible. The administration menu will be empty unless this permission is + granted. + + - Access administration menu + + Users in roles with the "Access administration menu" permission will see + the administration menu at the top of each page. + + - Display Drupal links + + Users in roles with the "Display drupal links" permission will receive + links to drupal.org issue queues for all enabled contributed modules. The + issue queue links appear under the administration menu icon. + + Note that the menu items displayed in the administration menu depend on the + actual permissions of the viewing user. For example, the "People" menu item + is not displayed to a user who is not a member of a role with the "Administer + users" permission. + +* Customize the menu settings in Administration » Configuration and modules » + Administration » Administration menu. + +* To prevent administrative menu items from appearing twice, you may hide the + "Management" menu block. + + +-- CUSTOMIZATION -- + +* To override the default administration menu icon, you may: + + 1) Disable it via CSS in your theme: + + body #admin-menu-icon { display: none; } + + 2) Alter the image by overriding the theme function: + + Copy the entire theme_admin_menu_icon() function into your template.php, + rename it to phptemplate_admin_menu_icon() or THEMENAME_admin_menu_icon(), + and customize the output according to your needs. + + Remember that the output of the administration menu is cached. To see changes + from your theme override function, you must clear your site cache (via + the "Flush all caches" link on the menu). + +* To override the font size, add the following line to your theme's stylesheet: + + body #admin-menu { font-size: 10px; } + + +-- TROUBLESHOOTING -- + +* If the menu does not display, check the following: + + - Are the "Access administration menu" and "Use the administration pages and help" + permissions enabled for the appropriate roles? + + - Does html.tpl.php of your theme output the $page_bottom variable? + +* If the menu is rendered behind a Flash movie object, add this property to your + Flash object(s): + + + + See http://drupal.org/node/195386 for further information. + + +-- FAQ -- + +Q: When the administration menu module is enabled, blank space is added to the + bottom of my theme. Why? + +A: This is caused by a long list of links to module issue queues at Drupal.org. + Use Administer >> User management >> Permissions to disable the "display + drupal links" permission for all appropriate roles. Note that since UID 1 + automatically receives all permissions, the list of issue queue links cannot + be disabled for UID 1. + + +Q: After upgrading to 6.x-1.x, the menu disappeared. Why? + +A: You may need to regenerate your menu. Visit + http://example.com/admin/build/modules to regenerate your menu (substitute + your site name for example.com). + + +Q: Can I configure the administration menu module to display another menu (like + the Navigation menu, for instance)? + +A: No. As the name implies, administration menu module is for administrative + menu links only. However, you can copy and paste the contents of + admin_menu.css into your theme's stylesheet and replace #admin-menu with any + other menu block id (#block-menu-1, for example). + + +Q: Sometimes, the user counter displays a lot of anonymous users, but no spike + of users or requests appear in Google Analytics or other tracking tools. + +A: If your site was concurrently spidered by search-engine robots, it may have + a significant number of anonymous users for a short time. Most web tracking + tools like Google Analytics automatically filter out these requests. + + +Q: I enabled "Aggregate and compress CSS files", but admin_menu.css is still + there. Is this normal? + +A: Yes, this is the intended behavior. the administration menu module only loads + its stylesheet as needed (i.e., on page requests by logged-on, administrative + users). + + +Q: Why are sub-menus not visible in Opera? + +A: In the Opera browser preferences under "web pages" there is an option to fit + to width. By disabling this option, sub-menus in the administration menu + should appear. + + +Q: How can the administration menu be hidden on certain pages? + +A: You can suppress it by simply calling the following function in PHP: + + module_invoke('admin_menu', 'suppress'); + + However, this needs to happen as early as possible in the page request, so + placing it in the theming layer (resp. a page template file) is too late. + Ideally, the function is called in hook_init() in a custom module. If you do + not have a custom module, placing it into some conditional code at the top of + template.php may work out, too. + + +-- CONTACT -- + +Current maintainers: +* Daniel F. Kudwien (sun) - http://drupal.org/user/54136 +* Peter Wolanin (pwolanin) - http://drupal.org/user/49851 +* Stefan M. Kudwien (smk-ka) - http://drupal.org/user/48898 +* Dave Reid (Dave Reid) - http://drupal.org/user/53892 + +Major rewrite for Drupal 6 by Peter Wolanin (pwolanin). + +This project has been sponsored by: +* UNLEASHED MIND + Specialized in consulting and planning of Drupal powered sites, UNLEASHED + MIND offers installation, development, theming, customization, and hosting + to get you started. Visit http://www.unleashedmind.com for more information. + +* Lullabot + Friendly Drupal experts providing professional consulting & education + services. Visit http://www.lullabot.com for more information. + +* Acquia + Commercially Supported Drupal. Visit http://acquia.com for more information. + diff --git a/sites/all/modules/custom/admin_menu/admin_devel/admin_devel.info b/sites/all/modules/custom/admin_menu/admin_devel/admin_devel.info new file mode 100644 index 0000000000..ab3d641ff3 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_devel/admin_devel.info @@ -0,0 +1,12 @@ +name = Administration Development tools +description = Administration and debugging functionality for developers and site builders. +package = Administration +core = 7.x +scripts[] = admin_devel.js + +; Information added by Drupal.org packaging script on 2014-12-19 +version = "7.x-3.0-rc5" +core = "7.x" +project = "admin_menu" +datestamp = "1419029284" + diff --git a/sites/all/modules/custom/admin_menu/admin_devel/admin_devel.js b/sites/all/modules/custom/admin_menu/admin_devel/admin_devel.js new file mode 100644 index 0000000000..833197a1b4 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_devel/admin_devel.js @@ -0,0 +1,40 @@ +(function($) { + +/** + * jQuery debugging helper. + * + * Invented for Dreditor. + * + * @usage + * $.debug(var [, name]); + * $variable.debug( [name] ); + */ +jQuery.extend({ + debug: function () { + // Setup debug storage in global window. We want to look into it. + window.debug = window.debug || []; + + args = jQuery.makeArray(arguments); + // Determine data source; this is an object for $variable.debug(). + // Also determine the identifier to store data with. + if (typeof this == 'object') { + var name = (args.length ? args[0] : window.debug.length); + var data = this; + } + else { + var name = (args.length > 1 ? args.pop() : window.debug.length); + var data = args[0]; + } + // Store data. + window.debug[name] = data; + // Dump data into Firebug console. + if (typeof console != 'undefined') { + console.log(name, data); + } + return this; + } +}); +// @todo Is this the right way? +jQuery.fn.debug = jQuery.debug; + +})(jQuery); diff --git a/sites/all/modules/custom/admin_menu/admin_devel/admin_devel.module b/sites/all/modules/custom/admin_menu/admin_devel/admin_devel.module new file mode 100644 index 0000000000..5884f54ea6 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_devel/admin_devel.module @@ -0,0 +1,33 @@ + 'submit', + '#value' => t('Rebuild system links'), + '#submit' => array('admin_devel_form_admin_menu_theme_settings_alter_rebuild_submit'), + // @todo Not necessarily ready for mass-consumption yet. + '#access' => FALSE, + ); +} + +/** + * Form submit handler to wipe and rebuild all 'module' = 'system' menu links. + */ +function admin_devel_form_admin_menu_theme_settings_alter_rebuild_submit($form, &$form_state) { + // Delete all auto-generated menu links derived from menu router items. + db_delete('menu_links') + ->condition('module', 'system') + ->execute(); + // Rebuild menu links from current menu router items. + menu_rebuild(); + + drupal_set_message(t('System links derived from menu router paths have been rebuilt.')); +} diff --git a/sites/all/modules/custom/admin_menu/admin_menu-rtl.css b/sites/all/modules/custom/admin_menu/admin_menu-rtl.css new file mode 100644 index 0000000000..9414dcf950 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_menu-rtl.css @@ -0,0 +1,64 @@ + +#admin-menu { + text-align: right; +} +#admin-menu .dropdown .admin-menu-users a { + background-position: 10% center; + padding-left: 22px; + padding-right: 0; +} +#admin-menu .dropdown .admin-menu-action, +#admin-menu .dropdown .admin-menu-search { + float: left; +} +#admin-menu .dropdown .admin-menu-action a { + border-left: none; + border-right: 1px solid #323232; +} + +/* All lists */ +#admin-menu a { + text-align: right; +} +#admin-menu .dropdown a { + border-left: 1px solid #323232; + border-right: 0; +} +#admin-menu .dropdown .admin-menu-tab a { + border-left: 1px solid #52565E; + border-right: 0; +} +#admin-menu .dropdown li li a { + border-left: 0; +} + +/* All list items */ +#admin-menu .dropdown li { + float: right; +} +#admin-menu .dropdown li li { +} + +/* Second-level lists */ +#admin-menu .dropdown li ul { + left: auto; + right: -999em; +} + +/* Third-and-above-level lists */ +#admin-menu .dropdown li li.expandable ul { + margin-left: 0; + margin-right: 160px; +} + +/* Lists nested under hovered list items */ +#admin-menu .dropdown li.admin-menu-action:hover ul { + left: 0 !important; + right: auto; +} + +/* Second-and-more-level hovering */ +#admin-menu .dropdown li li.expandable { + background-image: url(images/arrow-rtl.png); + background-position: 5px 6px; +} diff --git a/sites/all/modules/custom/admin_menu/admin_menu.admin.js b/sites/all/modules/custom/admin_menu/admin_menu.admin.js new file mode 100644 index 0000000000..9ee9f36f3a --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_menu.admin.js @@ -0,0 +1,62 @@ +(function($) { + +/** + * Live preview of Administration menu components. + */ +Drupal.behaviors.adminMenuLivePreview = { + attach: function (context, settings) { + $('input[name^="admin_menu_components"]', context).once('admin-menu-live-preview') + .change(function () { + var target = $(this).attr('rel'); + $(target).toggle(this.checked); + }) + .trigger('change'); + } +}; + +/** + * Automatically enables required permissions on demand. + * + * Many users do not understand that two permissions are required for the + * administration menu to appear. Since Drupal core provides no facility for + * this, we implement a simple manual confirmation for automatically enabling + * the "other" permission. + */ +Drupal.behaviors.adminMenuPermissionsSetupHelp = { + attach: function (context, settings) { + $('#permissions', context).once('admin-menu-permissions-setup', function () { + // Retrieve matrix/mapping - these need to use the same indexes for the + // same permissions and roles. + var $roles = $(this).find('th:not(:first)'); + var $admin = $(this).find('input[name$="[access administration pages]"]'); + var $menu = $(this).find('input[name$="[access administration menu]"]'); + + // Retrieve the permission label - without description. + var adminPermission = $.trim($admin.eq(0).parents('td').prev().children().get(0).firstChild.textContent); + var menuPermission = $.trim($menu.eq(0).parents('td').prev().children().get(0).firstChild.textContent); + + $admin.each(function (index) { + // Only proceed if both are not enabled already. + if (!(this.checked && $menu[index].checked)) { + // Stack both checkboxes and attach a click event handler to both. + $(this).add($menu[index]).click(function () { + // Do nothing when disabling a permission. + if (this.checked) { + // Figure out which is the other, check whether it still disabled, + // and if so, ask whether to auto-enable it. + var other = (this == $admin[index] ? $menu[index] : $admin[index]); + if (!other.checked && confirm(Drupal.t('Also allow !name role to !permission?', { + '!name': $roles[index].textContent, + '!permission': (this == $admin[index] ? menuPermission : adminPermission) + }))) { + other.checked = 'checked'; + } + } + }); + } + }); + }); + } +}; + +})(jQuery); diff --git a/sites/all/modules/custom/admin_menu/admin_menu.api.php b/sites/all/modules/custom/admin_menu/admin_menu.api.php new file mode 100644 index 0000000000..2d212fbc33 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_menu.api.php @@ -0,0 +1,164 @@ + Content types. + // The key denotes the dynamic path to expand to multiple menu items. + $map['admin/structure/types/manage/%node_type'] = array( + // Link generated items directly to the "Content types" item. + 'parent' => 'admin/structure/types', + // Create expansion arguments for the '%node_type' placeholder. + 'arguments' => array( + array( + '%node_type' => array_keys(node_type_get_types()), + ), + ), + ); + return $map; +} + +/** + * Add to the administration menu content before it is rendered. + * + * Only use this hook to add new data to the menu structure. Use + * hook_admin_menu_output_alter() to *alter* existing data. + * + * @param array $content + * A structured array suitable for drupal_render(), potentially containing: + * - menu: The administrative menu of links below the path 'admin/*'. + * - icon: The icon menu. + * - account: The user account name and log out link. + * - users: The user counter. + * Additionally, these special properties: + * - #components: The actual components contained in $content are configurable + * and depend on the 'admin_menu_components' configuration value. #components + * holds a copy of that for convenience. + * - #complete: A Boolean indicating whether the complete menu should be built, + * ignoring the current configuration in #components. + * Passed by reference. + * + * @see hook_admin_menu_output_alter() + * @see admin_menu_links_menu() + * @see admin_menu_links_icon() + * @see admin_menu_links_user() + * @see theme_admin_menu_links() + */ +function hook_admin_menu_output_build(&$content) { + // In case your implementation provides a configurable component, check + // whether the component should be displayed: + if (empty($content['#components']['shortcut.links']) && !$content['#complete']) { + return; + } + + // Add new top-level item to the menu. + if (isset($content['menu'])) { + $content['menu']['myitem'] = array( + '#title' => t('My item'), + // #attributes are used for list items (LI). + '#attributes' => array('class' => array('mymodule-myitem')), + '#href' => 'mymodule/path', + // #options are passed to l(). + '#options' => array( + 'query' => drupal_get_destination(), + // Apply a class on the link (anchor). + 'attributes' => array('class' => array('myitem-link-anchor')), + ), + // #weight controls the order of links in the resulting item list. + '#weight' => 50, + ); + } + // Add link to the icon menu to manually run cron. + if (isset($content['icon'])) { + $content['icon']['myitem']['cron'] = array( + '#title' => t('Run cron'), + '#access' => user_access('administer site configuration'), + '#href' => 'admin/reports/status/run-cron', + ); + } +} + +/** + * Change the administration menu content before it is rendered. + * + * Only use this hook to alter existing data in the menu structure. Use + * hook_admin_menu_output_build() to *add* new data. + * + * @param array $content + * A structured array suitable for drupal_render(). Passed by reference. + * + * @see hook_admin_menu_output_build() + */ +function hook_admin_menu_output_alter(&$content) { +} + +/** + * Return content to be replace via JS in the cached menu output. + * + * @param bool $complete + * A Boolean indicating whether all available components of the menu will be + * output and the cache will be skipped. + * + * @return array + * An associative array whose keys are jQuery selectors and whose values are + * strings containing the replacement content. + */ +function hook_admin_menu_replacements($complete) { + $items = array(); + // If the complete menu is output, then it is uncached and will contain the + // current counts already. + if (!$complete) { + // Check whether the users count component is enabled. + $components = variable_get('admin_menu_components', array()); + if (!empty($components['admin_menu.users']) && ($user_count = admin_menu_get_user_count())) { + // Replace the counters in the cached menu output with current counts. + $items['.admin-menu-users a'] = $user_count; + } + } + return $items; +} + +/** + * Inform about additional module-specific caches that can be cleared. + * + * Administration menu uses this hook to gather information about available + * caches that can be flushed individually. Each returned item forms a separate + * menu link below the "Flush all caches" link in the icon menu. + * + * @return array + * An associative array whose keys denote internal identifiers for a + * particular caches (which can be freely defined, but should be in a module's + * namespace) and whose values are associative arrays containing: + * - title: The name of the cache, without "cache" suffix. This label is + * output as link text, but also for the "!title cache cleared." + * confirmation message after flushing the cache; make sure it works and + * makes sense to users in both locations. + * - callback: The name of a function to invoke to flush the individual cache. + */ +function hook_admin_menu_cache_info() { + $caches['update'] = array( + 'title' => t('Update data'), + 'callback' => '_update_cache_clear', + ); + return $caches; +} diff --git a/sites/all/modules/custom/admin_menu/admin_menu.color.css b/sites/all/modules/custom/admin_menu/admin_menu.color.css new file mode 100644 index 0000000000..ea3ef491d5 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_menu.color.css @@ -0,0 +1,45 @@ + +/** + * @file + * Administration menu color override. + */ + +#admin-menu { + background-color: #911; + background-image: url(images/bkg-red.png); +} +#admin-menu li.admin-menu-action a { + border-left-color: #a91f1f; +} + +/* All lists */ +#admin-menu ul a { + border-right-color: #a91f1f; +} +#admin-menu ul li.admin-menu-tab a { + border-right-color: #52565E; +} +#admin-menu li li a { + border-top-color: #801f1f; +} + +/* All list items */ +#admin-menu li li { + background-color: #991f1f; +} + +/* Second-and-more-level hovering */ +#admin-menu li li.expandable { + background-color: #b93f3f; +} +#admin-menu li li:hover { + background-color: #690f0f; +} +#admin-menu li li.expandable:hover a, +#admin-menu li li.expandable:hover li.expandable:hover a { + border-color: #801f1f; +} +#admin-menu li li.expandable:hover li a, +#admin-menu li li.expandable:hover li.expandable:hover li a { + border-color: #801f1f; +} diff --git a/sites/all/modules/custom/admin_menu/admin_menu.css b/sites/all/modules/custom/admin_menu/admin_menu.css new file mode 100644 index 0000000000..52ae3ff54c --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_menu.css @@ -0,0 +1,233 @@ + +/** + * @file + * Administration menu. + * + * Implementation of Sons of Suckerfish Dropdowns. + * + * @see www.htmldog.com/articles/suckerfish + */ + +#admin-menu { + background: #101010 url(images/bkg.png) bottom left repeat-x; + font-size: 9px; + font-family: "lucida grande", tahoma, verdana, arial, sans-serif; + left: 0; + position: absolute; + text-align: left; + top: 0; + width: 100%; +} +#admin-menu-wrapper { + overflow: hidden; +} +#admin-menu .dropdown .admin-menu-icon a { + padding: 1px 8px 4px; +} +#admin-menu .dropdown .admin-menu-icon ul a { + padding: 4px 8px; +} +#admin-menu .dropdown .admin-menu-icon img { + vertical-align: bottom; +} +#admin-menu .dropdown .admin-menu-users a { + background: transparent url(images/icon_users.png) 90% center no-repeat; + padding-right: 22px; +} +#admin-menu .dropdown .admin-menu-action, +#admin-menu .dropdown .admin-menu-search { + float: right; +} +#admin-menu .dropdown .admin-menu-action a { + border-left: 1px solid #323232; + border-right: none; +} +body.admin-menu { + margin-top: 20px !important; +} + +/* All lists */ +#admin-menu, +#admin-menu .dropdown { + line-height: 1.4em; + list-style: none; + margin: 0; + padding: 0; + z-index: 999; +} +#admin-menu .dropdown { + position: static; +} +#admin-menu a, +#admin-menu li > span { + background: transparent none; + border: none; + color: #EEE; + font-weight: normal; + text-align: left; /* LTR */ + text-decoration: none; +} +#admin-menu .dropdown a, +#admin-menu .dropdown li > span { + border-right: 1px solid #323232; /* LTR */ + display: block; + padding: 4px 8px; +} +#admin-menu .dropdown .admin-menu-tab a { + border-right: 1px solid #52565E; /* LTR */ +} +#admin-menu .dropdown li li a { + border-right: none; /* LTR */ + border-top: 1px solid #323232; +} + +/* All list items */ +#admin-menu .dropdown li { + background-image: none; + float: left; /* LTR */ + height: 100%; + list-style-image: none; + list-style-type: none; + margin: 0 !important; + padding: 0; +} +#admin-menu .dropdown .admin-menu-tab { + background: url(images/bkg_tab.png) repeat-x left bottom; + padding-bottom: 1px; +} +#admin-menu .dropdown li li { + background: #202020; + filter: Alpha(opacity=88); + float: none; + opacity: 0.88; + width: 160px; /* Required for Opera */ +} +#admin-menu .dropdown li li li { + filter: Alpha(opacity=100); + opacity: 1; +} + +/* Second-level lists */ +/* Note: We must hide sub-lists or scrollbars might appear (display: none is not read by screen readers). */ +#admin-menu .dropdown li ul { + background: none; + display: none; + left: -999em; /* LTR */ + line-height: 1.2em; + margin: 0; + position: absolute; + width: 160px; +} + +/* Third-and-above-level lists */ +#admin-menu .dropdown li li.expandable ul { + margin: -20px 0 0 160px; /* LTR */ +} + +#admin-menu .dropdown li:hover ul ul, +#admin-menu .dropdown li:hover ul ul ul, +#admin-menu .dropdown li:hover ul ul ul ul, +#admin-menu .dropdown li:hover ul ul ul ul ul { + display: none; + left: -999em; /* LTR */ +} + +/* Lists nested under hovered list items */ +#admin-menu .dropdown li:hover ul, +#admin-menu .dropdown li li:hover ul, +#admin-menu .dropdown li li li:hover ul, +#admin-menu .dropdown li li li li:hover ul, +#admin-menu .dropdown li li li li li:hover ul { + display: block; + left: auto; /* LTR */ +} +#admin-menu .dropdown li.admin-menu-action:hover ul { + right: 0; /* LTR */ +} + +/* Second-and-more-level hovering */ +#admin-menu .dropdown li li.expandable { + background: #45454A url(images/arrow.png) no-repeat 145px 6px; +} +#admin-menu .dropdown li li:hover { + background-color: #111; +} +#admin-menu .dropdown li li:hover a, +#admin-menu .dropdown li li:hover li:hover a, +#admin-menu .dropdown li li:hover li:hover li:hover a { + color: #FFF; +} +#admin-menu .dropdown li li.expandable:hover a, +#admin-menu .dropdown li li.expandable:hover li.expandable:hover a { + border-color: #444; + color: #EEE; +} +#admin-menu .dropdown li li.expandable:hover li a, +#admin-menu .dropdown li li.expandable:hover li.expandable:hover li a { + border-color: #323232; +} +#admin-menu .dropdown li li:hover li a { + color: #EEE; +} + +/* Search form */ +#admin-menu .admin-menu-search .form-item { + margin: 0; + padding: 0; +} +#admin-menu .admin-menu-search input { + background: #fff none center right no-repeat; + border: none; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + font-size: 10px; + margin: 1px 0; + outline: none; + padding: 2px 22px 2px 4px; + width: 158px; +} + +#admin-menu .dropdown .admin-menu-search-results { + display: block !important; + left: auto !important; + top: 100%; +} +#admin-menu .admin-menu-search-results, +#admin-menu .admin-menu-search-results li { + width: 186px; +} + +#admin-menu li.highlight { + background-color: #eee !important; +} +#admin-menu li.highlight > a { + border-color: #ccc !important; + color: #111 !important; +} + +/* #210615: Mozilla on Mac fix */ +html.js fieldset.collapsible div.fieldset-wrapper { + overflow: visible; +} + +/* Hide the menu on print output. */ +@media print { + #admin-menu { + display: none !important; + } + body.admin-menu { + margin-top: 0 !important; + } +} + +/** + * Tweaks permissions, if enabled. + */ +tr.admin-menu-tweak-permissions-processed { + cursor: pointer; + cursor: hand; +} +tr.admin-menu-tweak-permissions-processed td.module { + border-top: 0; +} diff --git a/sites/all/modules/custom/admin_menu/admin_menu.inc b/sites/all/modules/custom/admin_menu/admin_menu.inc new file mode 100644 index 0000000000..2eab789b4f --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_menu.inc @@ -0,0 +1,910 @@ + $data) { + // Convert named placeholders to anonymous placeholders, since the menu + // system stores paths using anonymous placeholders. + $replacements = array_fill_keys(array_keys($data['arguments'][0]), '%'); + $data['parent'] = strtr($data['parent'], $replacements); + $new_map[strtr($path, $replacements)] = $data; + } + $expand_map = $new_map; + unset($new_map); + + // Retrieve dynamic menu link tree for the expansion mappings. + // @todo Skip entire processing if initial $expand_map is empty and directly + // return $tree? + if (!empty($expand_map)) { + $tree_dynamic = admin_menu_tree_dynamic($expand_map); + } + else { + $tree_dynamic = array(); + } + + // Merge local tasks with static menu tree. + $tree = menu_tree_all_data($menu_name); + admin_menu_merge_tree($tree, $tree_dynamic, array()); + + return $tree; +} + +/** + * Load menu link trees for router paths containing dynamic arguments. + * + * @param $expand_map + * An array containing menu router path placeholder expansion argument + * mappings. + * + * @return + * An associative array whose keys are the parent paths of the menu router + * paths given in $expand_map as well as the parent paths of any child link + * deeper down the tree. The parent paths are used in admin_menu_merge_tree() + * to check whether anything needs to be merged. + * + * @see hook_admin_menu_map() + */ +function admin_menu_tree_dynamic(array $expand_map) { + $p_columns = array(); + for ($i = 1; $i <= MENU_MAX_DEPTH; $i++) { + $p_columns[] = 'p' . $i; + } + + // Fetch p* columns for all router paths to expand. + $router_paths = array_keys($expand_map); + $plids = db_select('menu_links', 'ml') + ->fields('ml', $p_columns) + ->condition('router_path', $router_paths) + ->execute() + ->fetchAll(PDO::FETCH_ASSOC); + + // Unlikely, but possible. + if (empty($plids)) { + return array(); + } + + // Use queried plid columns to query sub-trees for the router paths. + $query = db_select('menu_links', 'ml'); + $query->join('menu_router', 'm', 'ml.router_path = m.path'); + $query + ->fields('ml') + ->fields('m', array_diff(drupal_schema_fields_sql('menu_router'), drupal_schema_fields_sql('menu_links'))); + + // The retrieved menu link trees have to be ordered by depth, so parents + // always come before their children for the storage logic below. + foreach ($p_columns as $column) { + $query->orderBy($column, 'ASC'); + } + + $db_or = db_or(); + foreach ($plids as $path_plids) { + $db_and = db_and(); + // plids with value 0 may be ignored. + foreach (array_filter($path_plids) as $column => $plid) { + $db_and->condition($column, $plid); + } + $db_or->condition($db_and); + } + $query->condition($db_or); + $result = $query + ->execute() + ->fetchAllAssoc('mlid', PDO::FETCH_ASSOC); + + // Store dynamic links grouped by parent path for later merging and assign + // placeholder expansion arguments. + $tree_dynamic = array(); + foreach ($result as $mlid => $link) { + // If contained in $expand_map, then this is a (first) parent, and we need + // to store by the defined 'parent' path for later merging, as well as + // provide the expansion map arguments to apply to the dynamic tree. + if (isset($expand_map[$link['path']])) { + $parent_path = $expand_map[$link['path']]['parent']; + $link['expand_map'] = $expand_map[$link['path']]['arguments']; + } + // Otherwise, just store this link keyed by its parent path; the expand_map + // is automatically derived from parent paths. + else { + $parent_path = $result[$link['plid']]['path']; + } + + $tree_dynamic[$parent_path][] = $link; + } + + return $tree_dynamic; +} + +/** + * Walk through the entire menu tree and merge in expanded dynamic menu links. + * + * @param &$tree + * A menu tree structure as returned by menu_tree_all_data(). + * @param $tree_dynamic + * A dynamic menu tree structure as returned by admin_menu_tree_dynamic(). + * @param $expand_map + * An array containing menu router path placeholder expansion argument + * mappings. + * + * @see hook_admin_menu_map() + * @see admin_menu_tree_dynamic() + * @see menu_tree_all_data() + */ +function admin_menu_merge_tree(array &$tree, array $tree_dynamic, array $expand_map) { + foreach ($tree as $key => $data) { + $path = $data['link']['router_path']; + + // Recurse into regular menu tree. + if ($tree[$key]['below']) { + admin_menu_merge_tree($tree[$key]['below'], $tree_dynamic, $expand_map); + } + // Nothing to merge, if this parent path is not in our dynamic tree. + if (!isset($tree_dynamic[$path])) { + continue; + } + + // Add expanded dynamic items. + foreach ($tree_dynamic[$path] as $link) { + // If the dynamic item has custom placeholder expansion parameters set, + // use them, otherwise keep current. + if (isset($link['expand_map'])) { + // If there are currently no expansion parameters, we may use the new + // set immediately. + if (empty($expand_map)) { + $current_expand_map = $link['expand_map']; + } + else { + // Otherwise we need to filter out elements that differ from the + // current set, i.e. that are not in the same path. + $current_expand_map = array(); + foreach ($expand_map as $arguments) { + foreach ($arguments as $placeholder => $value) { + foreach ($link['expand_map'] as $new_arguments) { + // Skip the new argument if it doesn't contain the current + // replacement placeholders or if their values differ. + if (!isset($new_arguments[$placeholder]) || $new_arguments[$placeholder] != $value) { + continue; + } + $current_expand_map[] = $new_arguments; + } + } + } + } + } + else { + $current_expand_map = $expand_map; + } + + // Skip dynamic items without expansion parameters. + if (empty($current_expand_map)) { + continue; + } + + // Expand anonymous to named placeholders. + // @see _menu_load_objects() + $path_args = explode('/', $link['path']); + $load_functions = unserialize($link['load_functions']); + if (is_array($load_functions)) { + foreach ($load_functions as $index => $function) { + if ($function) { + if (is_array($function)) { + list($function,) = each($function); + } + // Add the loader function name minus "_load". + $placeholder = '%' . substr($function, 0, -5); + $path_args[$index] = $placeholder; + } + } + } + $path_dynamic = implode('/', $path_args); + + // Create new menu items using expansion arguments. + foreach ($current_expand_map as $arguments) { + // Create the cartesian product for all arguments and create new + // menu items for each generated combination thereof. + foreach (admin_menu_expand_args($arguments) as $replacements) { + $newpath = strtr($path_dynamic, $replacements); + // Skip this item, if any placeholder could not be replaced. + // Faster than trying to invoke _menu_translate(). + if (strpos($newpath, '%') !== FALSE) { + continue; + } + $map = explode('/', $newpath); + $item = admin_menu_translate($link, $map); + // Skip this item, if the current user does not have access. + if (empty($item)) { + continue; + } + // Build subtree using current replacement arguments. + $new_expand_map = array(); + foreach ($replacements as $placeholder => $value) { + $new_expand_map[$placeholder] = array($value); + } + admin_menu_merge_tree($item, $tree_dynamic, array($new_expand_map)); + $tree[$key]['below'] += $item; + } + } + } + // Sort new subtree items. + ksort($tree[$key]['below']); + } +} + +/** + * Translate an expanded router item into a menu link suitable for rendering. + * + * @param $router_item + * A menu router item. + * @param $map + * A path map with placeholders replaced. + */ +function admin_menu_translate($router_item, $map) { + _menu_translate($router_item, $map, TRUE); + + // Run through hook_translated_menu_link_alter() to add devel information, + // if configured. + $router_item['menu_name'] = 'management'; + // @todo Invoke as usual like _menu_link_translate(). + admin_menu_translated_menu_link_alter($router_item, NULL); + + if ($router_item['access']) { + // Override mlid to make this item unique; since these items are expanded + // from dynamic items, the mlid is always the same, so each item would + // replace any other. + // @todo Doing this instead leads to plenty of duplicate links below + // admin/structure/menu; likely a hidden recursion problem. + // $router_item['mlid'] = $router_item['href'] . $router_item['mlid']; + $router_item['mlid'] = $router_item['href']; + // Turn menu callbacks into regular menu items to make them visible. + if ($router_item['type'] == MENU_CALLBACK) { + $router_item['type'] = MENU_NORMAL_ITEM; + } + + // @see _menu_tree_check_access() + $key = (50000 + $router_item['weight']) . ' ' . $router_item['title'] . ' ' . $router_item['mlid']; + return array($key => array( + 'link' => $router_item, + 'below' => array(), + )); + } + + return array(); +} + +/** + * Create the cartesian product of multiple varying sized argument arrays. + * + * @param $arguments + * A two dimensional array of arguments. + * + * @see hook_admin_menu_map() + */ +function admin_menu_expand_args($arguments) { + $replacements = array(); + + // Initialize line cursors, move out array keys (placeholders) and assign + // numeric keys instead. + $i = 0; + $placeholders = array(); + $new_arguments = array(); + foreach ($arguments as $placeholder => $values) { + // Skip empty arguments. + if (empty($values)) { + continue; + } + $cursor[$i] = 0; + $placeholders[$i] = $placeholder; + $new_arguments[$i] = $values; + $i++; + } + $arguments = $new_arguments; + unset($new_arguments); + + if ($rows = count($arguments)) { + do { + // Collect current argument from each row. + $row = array(); + for ($i = 0; $i < $rows; ++$i) { + $row[$placeholders[$i]] = $arguments[$i][$cursor[$i]]; + } + $replacements[] = $row; + + // Increment cursor position. + $j = $rows - 1; + $cursor[$j]++; + while (!array_key_exists($cursor[$j], $arguments[$j])) { + // No more arguments left: reset cursor, go to next line and increment + // that cursor instead. Repeat until argument found or out of rows. + $cursor[$j] = 0; + if (--$j < 0) { + // We're done. + break 2; + } + $cursor[$j]++; + } + } while (1); + } + + return $replacements; +} + +/** + * Build the administration menu as renderable menu links. + * + * @param $tree + * A data structure representing the administration menu tree as returned from + * menu_tree_all_data(). + * + * @return + * The complete administration menu, suitable for theme_admin_menu_links(). + * + * @see theme_admin_menu_links() + * @see admin_menu_menu_alter() + */ +function admin_menu_links_menu($tree) { + $links = array(); + foreach ($tree as $data) { + // Skip items that are inaccessible, invisible, or link to their parent. + // (MENU_DEFAULT_LOCAL_TASK), and MENU_CALLBACK-alike items that should only + // appear in the breadcrumb. + if (!$data['link']['access'] || $data['link']['type'] & MENU_LINKS_TO_PARENT || $data['link']['type'] == MENU_VISIBLE_IN_BREADCRUMB || $data['link']['hidden'] == 1) { + continue; + } + // Hide 'Administer' and make child links appear on this level. + // @todo Make this configurable. + if ($data['link']['router_path'] == 'admin') { + if ($data['below']) { + $links = array_merge($links, admin_menu_links_menu($data['below'])); + } + continue; + } + // Omit alias lookups. + $data['link']['localized_options']['alias'] = TRUE; + // Remove description to prevent mouseover tooltip clashes. + unset($data['link']['localized_options']['attributes']['title']); + + // Make action links (typically "Add ...") appear first in dropdowns. + // They might appear first already, but only as long as there is no link + // that comes alphabetically first (e.g., a node type with label "Ad"). + if ($data['link']['type'] & MENU_IS_LOCAL_ACTION) { + $data['link']['weight'] -= 1000; + } + + $links[$data['link']['href']] = array( + '#title' => $data['link']['title'], + '#href' => $data['link']['href'], + '#options' => $data['link']['localized_options'], + '#weight' => $data['link']['weight'], + ); + + // Recurse to add any child links. + $children = array(); + if ($data['below']) { + $children = admin_menu_links_menu($data['below']); + $links[$data['link']['href']] += $children; + } + + // Handle links pointing to category/overview pages. + if ($data['link']['page_callback'] == 'system_admin_menu_block_page' || $data['link']['page_callback'] == 'system_admin_config_page') { + // Apply a marker for others to consume. + $links[$data['link']['href']]['#is_category'] = TRUE; + // Automatically hide empty categories. + // Check for empty children first for performance. Only when non-empty + // (typically 'admin/config'), check whether children are accessible. + if (empty($children) || !element_get_visible_children($children)) { + $links[$data['link']['href']]['#access'] = FALSE; + } + } + } + return $links; +} + +/** + * Build icon menu links; mostly containing maintenance helpers. + * + * @see theme_admin_menu_links() + */ +function admin_menu_links_icon() { + $destination = drupal_get_destination(); + + $links = array( + '#theme' => 'admin_menu_links', + '#wrapper_attributes' => array('id' => 'admin-menu-icon'), + '#weight' => -100, + ); + $links['icon'] = array( + '#title' => theme('admin_menu_icon'), + '#attributes' => array('class' => array('admin-menu-icon')), + '#href' => '', + '#options' => array( + 'html' => TRUE, + ), + ); + // Add link to manually run cron. + $links['icon']['cron'] = array( + '#title' => t('Run cron'), + '#weight' => 50, + '#access' => user_access('administer site configuration'), + '#href' => 'admin/reports/status/run-cron', + ); + // Add link to run update.php. + $links['icon']['update'] = array( + '#title' => t('Run updates'), + '#weight' => 50, + // @see update_access_allowed() + '#access' => $GLOBALS['user']->uid == 1 || !empty($GLOBALS['update_free_access']) || user_access('administer software updates'), + '#href' => base_path() . 'update.php', + '#options' => array( + 'external' => TRUE, + ), + ); + // Add link to drupal.org. + $links['icon']['drupal.org'] = array( + '#title' => 'Drupal.org', + '#weight' => 100, + '#access' => user_access('display drupal links'), + '#href' => 'http://drupal.org', + ); + // Add links to project issue queues. + foreach (module_list(FALSE, TRUE) as $module) { + $info = drupal_parse_info_file(drupal_get_path('module', $module) . '/' . $module . '.info'); + if (!isset($info['project']) || isset($links['icon']['drupal.org'][$info['project']])) { + continue; + } + $links['icon']['drupal.org'][$info['project']] = array( + '#title' => t('@project issue queue', array('@project' => $info['name'])), + '#weight' => ($info['project'] == 'drupal' ? -10 : 0), + '#href' => 'http://drupal.org/project/issues/' . $info['project'], + '#options' => array( + 'query' => array('version' => (isset($info['core']) ? $info['core'] : 'All')), + ), + ); + } + // Add items to flush caches. + $links['icon']['flush-cache'] = array( + '#title' => t('Flush all caches'), + '#weight' => 20, + '#access' => user_access('flush caches'), + '#href' => 'admin_menu/flush-cache', + '#options' => array( + 'query' => $destination + array('token' => drupal_get_token('admin_menu/flush-cache')), + ), + ); + $caches = module_invoke_all('admin_menu_cache_info'); + foreach ($caches as $name => $cache) { + $links['icon']['flush-cache'][$name] = array( + '#title' => $cache['title'], + '#href' => 'admin_menu/flush-cache/' . $name, + '#options' => array( + 'query' => $destination + array('token' => drupal_get_token('admin_menu/flush-cache/' . $name)), + ), + ); + } + + // Add Devel module menu links. + if (module_exists('devel')) { + $devel_tree = menu_build_tree('devel'); + $devel_links = admin_menu_links_menu($devel_tree); + if (element_get_visible_children($devel_links)) { + $links['icon']['devel'] = array( + '#title' => t('Development'), + '#weight' => 30, + ) + $devel_links; + } + } + + return $links; +} + +/** + * Builds the account links. + * + * @see theme_admin_menu_links() + */ +function admin_menu_links_account() { + $links = array( + '#theme' => 'admin_menu_links', + '#wrapper_attributes' => array('id' => 'admin-menu-account'), + '#weight' => 100, + ); + $links['account'] = array( + '#title' => format_username($GLOBALS['user']), + '#weight' => -99, + '#attributes' => array('class' => array('admin-menu-action', 'admin-menu-account')), + '#href' => 'user/' . $GLOBALS['user']->uid, + ); + $links['logout'] = array( + '#title' => t('Log out'), + '#weight' => -100, + '#attributes' => array('class' => array('admin-menu-action')), + '#href' => 'user/logout', + ); + // Add Devel module switch user links. + $switch_links = module_invoke('devel', 'switch_user_list'); + if (!empty($switch_links) && count($switch_links) > 1) { + foreach ($switch_links as $uid => $link) { + $links['account'][$link['title']] = array( + '#title' => $link['title'], + '#description' => $link['attributes']['title'], + '#href' => $link['href'], + '#options' => array( + 'query' => $link['query'], + 'html' => !empty($link['html']), + ), + ); + } + } + return $links; +} + +/** + * Builds user counter. + * + * @see theme_admin_menu_links() + */ +function admin_menu_links_users() { + $links = array( + '#theme' => 'admin_menu_links', + '#wrapper_attributes' => array('id' => 'admin-menu-users'), + '#weight' => 150, + ); + // Add link to show current authenticated/anonymous users. + $links['user-counter'] = array( + '#title' => admin_menu_get_user_count(), + '#description' => t('Current anonymous / authenticated users'), + '#weight' => -90, + '#attributes' => array('class' => array('admin-menu-action', 'admin-menu-users')), + '#href' => (user_access('administer users') ? 'admin/people/people' : 'user'), + ); + return $links; +} + +/** + * Build search widget. + * + * @see theme_admin_menu_links() + */ +function admin_menu_links_search() { + $links = array( + '#theme' => 'admin_menu_links', + '#wrapper_attributes' => array('id' => 'admin-menu-search'), + '#weight' => 180, + ); + $links['search'] = array( + '#type' => 'textfield', + '#title' => t('Search'), + '#title_display' => 'attribute', + '#attributes' => array( + 'placeholder' => t('Search'), + 'class' => array('admin-menu-search'), + ), + ); + return $links; +} + +/** + * Form builder function for module settings. + */ +function admin_menu_theme_settings() { + $form['admin_menu_margin_top'] = array( + '#type' => 'checkbox', + '#title' => t('Adjust top margin'), + '#default_value' => variable_get('admin_menu_margin_top', 1), + '#description' => t('Shifts the site output down by approximately 20 pixels from the top of the viewport. If disabled, absolute- or fixed-positioned page elements may be covered by the administration menu.'), + ); + $form['admin_menu_position_fixed'] = array( + '#type' => 'checkbox', + '#title' => t('Keep menu at top of page'), + '#default_value' => variable_get('admin_menu_position_fixed', 1), + '#description' => t('Displays the administration menu always at the top of the browser viewport (even when scrolling the page).'), + ); + // @todo Re-confirm this with latest browser versions. + $form['admin_menu_position_fixed']['#description'] .= '
' . t('In some browsers, this setting may result in a malformed page, an invisible cursor, non-selectable elements in forms, or other issues.') . ''; + + $form['advanced'] = array( + '#type' => 'vertical_tabs', + '#title' => t('Advanced settings'), + ); + + $form['plugins'] = array( + '#type' => 'fieldset', + '#title' => t('Plugins'), + '#group' => 'advanced', + ); + $form['plugins']['admin_menu_components'] = array( + '#type' => 'checkboxes', + '#title' => t('Enabled components'), + '#options' => array( + 'admin_menu.icon' => t('Icon menu'), + 'admin_menu.menu' => t('Administration menu'), + 'admin_menu.search' => t('Search bar'), + 'admin_menu.users' => t('User counts'), + 'admin_menu.account' => t('Account links'), + ), + ); + $form['plugins']['admin_menu_components']['#default_value'] = array_keys(array_filter(variable_get('admin_menu_components', $form['plugins']['admin_menu_components']['#options']))); + + $process = element_info_property('checkboxes', '#process', array()); + $form['plugins']['admin_menu_components']['#process'] = array_merge(array('admin_menu_settings_process_components'), $process); + $form['#attached']['js'][] = drupal_get_path('module', 'admin_menu') . '/admin_menu.admin.js'; + + $form['tweaks'] = array( + '#type' => 'fieldset', + '#title' => t('System tweaks'), + '#group' => 'advanced', + ); + $form['tweaks']['admin_menu_tweak_modules'] = array( + '#type' => 'checkbox', + '#title' => t('Collapse module groups on the %modules page', array( + '%modules' => t('Modules'), + '!modules-url' => url('admin/modules'), + )), + '#default_value' => variable_get('admin_menu_tweak_modules', 0), + ); + if (module_exists('util')) { + $form['tweaks']['admin_menu_tweak_modules']['#description'] .= '
' . t('If the Utility module was installed for this purpose, it can be safely disabled and uninstalled.') . ''; + } + $form['tweaks']['admin_menu_tweak_permissions'] = array( + '#type' => 'checkbox', + '#title' => t('Collapse module groups on the %permissions page', array( + '%permissions' => t('Permissions'), + '@permissions-url' => url('admin/people/permissions'), + )), + '#default_value' => variable_get('admin_menu_tweak_permissions', 0), + ); + $form['tweaks']['admin_menu_tweak_tabs'] = array( + '#type' => 'checkbox', + '#title' => t('Move local tasks into menu'), + '#default_value' => variable_get('admin_menu_tweak_tabs', 0), + '#description' => t('Moves the tabs on all pages into the administration menu. Only possible for themes using the CSS classes tabs primary and tabs secondary.'), + ); + + $form['performance'] = array( + '#type' => 'fieldset', + '#title' => t('Performance'), + '#group' => 'advanced', + ); + $form['performance']['admin_menu_cache_client'] = array( + '#type' => 'checkbox', + '#title' => t('Cache menu in client-side browser'), + '#default_value' => variable_get('admin_menu_cache_client', 1), + ); + + return system_settings_form($form); +} + +/** + * #process callback for component plugin form element in admin_menu_theme_settings(). + */ +function admin_menu_settings_process_components($element) { + // Assign 'rel' attributes to all options to achieve a live preview. + // Unfortunately, #states relies on wrapping .form-wrapper classes, so it + // cannot be used here. + foreach ($element['#options'] as $key => $label) { + if (!isset($element[$key]['#attributes']['rel'])) { + $id = preg_replace('/[^a-z]/', '-', $key); + $element[$key]['#attributes']['rel'] = '#' . $id; + } + } + return $element; +} + +/** + * Form validation handler for admin_menu_theme_settings(). + */ +function admin_menu_theme_settings_validate(&$form, &$form_state) { + // Change the configured components to Boolean values. + foreach ($form_state['values']['admin_menu_components'] as $component => &$enabled) { + $enabled = (bool) $enabled; + } +} + +/** + * Implementation of hook_form_FORM_ID_alter(). + * + * Extends Devel module with Administration menu developer settings. + */ +function _admin_menu_form_devel_admin_settings_alter(&$form, $form_state) { + // Shift system_settings_form buttons. + $weight = isset($form['buttons']['#weight']) ? $form['buttons']['#weight'] : 0; + $form['buttons']['#weight'] = $weight + 1; + + $form['admin_menu'] = array( + '#type' => 'fieldset', + '#title' => t('Administration menu settings'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + $display_options = array('mid', 'weight', 'pid'); + $display_options = array(0 => t('None'), 'mlid' => t('Menu link ID'), 'weight' => t('Weight'), 'plid' => t('Parent link ID')); + $form['admin_menu']['admin_menu_display'] = array( + '#type' => 'radios', + '#title' => t('Display additional data for each menu item'), + '#default_value' => variable_get('admin_menu_display', 0), + '#options' => $display_options, + '#description' => t('Display the selected items next to each menu item link.'), + ); + $form['admin_menu']['admin_menu_show_all'] = array( + '#type' => 'checkbox', + '#title' => t('Display all menu items'), + '#default_value' => variable_get('admin_menu_show_all', 0), + '#description' => t('If enabled, all menu items are displayed regardless of your site permissions. Note: Do not enable on a production site.'), + ); +} + +/** + * Flush all caches or a specific one. + * + * @param $name + * (optional) Name of cache to flush. + */ +function admin_menu_flush_cache($name = NULL) { + if (!isset($_GET['token']) || !drupal_valid_token($_GET['token'], current_path())) { + return MENU_ACCESS_DENIED; + } + if (isset($name)) { + $caches = module_invoke_all('admin_menu_cache_info'); + if (!isset($caches[$name])) { + return MENU_NOT_FOUND; + } + } + else { + $caches[$name] = array( + 'title' => t('Every'), + 'callback' => 'drupal_flush_all_caches', + ); + } + // Pass the cache to flush forward to the callback. + $function = $caches[$name]['callback']; + $function($name); + + drupal_set_message(t('!title cache cleared.', array('!title' => $caches[$name]['title']))); + + // The JavaScript injects a destination request parameter pointing to the + // originating page, so the user is redirected back to that page. Without + // destination parameter, the redirect ends on the front page. + drupal_goto(); +} + +/** + * Implements hook_admin_menu_cache_info(). + */ +function admin_menu_admin_menu_cache_info() { + $caches['admin_menu'] = array( + 'title' => t('Administration menu'), + 'callback' => '_admin_menu_flush_cache', + ); + return $caches; +} + +/** + * Implements hook_admin_menu_cache_info() on behalf of System module. + */ +function system_admin_menu_cache_info() { + $caches = array( + 'assets' => t('CSS and JavaScript'), + 'cache' => t('Page and else'), + 'menu' => t('Menu'), + 'registry' => t('Class registry'), + 'theme' => t('Theme registry'), + ); + foreach ($caches as $name => $cache) { + $caches[$name] = array( + 'title' => $cache, + 'callback' => '_admin_menu_flush_cache', + ); + } + return $caches; +} + +/** + * Implements hook_admin_menu_cache_info() on behalf of Update module. + */ +function update_admin_menu_cache_info() { + $caches['update'] = array( + 'title' => t('Update data'), + 'callback' => '_update_cache_clear', + ); + return $caches; +} + +/** + * Flush all caches or a specific one. + * + * @param $name + * (optional) Name of cache to flush. + * + * @see system_admin_menu_cache_info() + */ +function _admin_menu_flush_cache($name = NULL) { + switch ($name) { + case 'admin_menu': + admin_menu_flush_caches(); + break; + + case 'menu': + menu_rebuild(); + break; + + case 'registry': + registry_rebuild(); + // Fall-through to clear cache tables, since registry information is + // usually the base for other data that is cached (e.g. SimpleTests). + case 'cache': + // Don't clear cache_form - in-progress form submissions may break. + // Ordered so clearing the page cache will always be the last action. + // @see drupal_flush_all_caches() + $core = array('cache', 'cache_bootstrap', 'cache_filter', 'cache_page'); + $cache_tables = array_merge(module_invoke_all('flush_caches'), $core); + foreach ($cache_tables as $table) { + cache_clear_all('*', $table, TRUE); + } + break; + + case 'assets': + // Change query-strings on css/js files to enforce reload for all users. + _drupal_flush_css_js(); + + drupal_clear_css_cache(); + drupal_clear_js_cache(); + + // Clear the page cache, since cached HTML pages might link to old CSS and + // JS aggregates. + cache_clear_all('*', 'cache_page', TRUE); + break; + + case 'theme': + system_rebuild_theme_data(); + drupal_theme_rebuild(); + break; + } +} + +/** + * Preprocesses variables for theme_admin_menu_icon(). + */ +function template_preprocess_admin_menu_icon(&$variables) { + // Image source might have been passed in as theme variable. + if (!isset($variables['src'])) { + if (theme_get_setting('toggle_favicon')) { + $variables['src'] = theme_get_setting('favicon'); + } + else { + $variables['src'] = base_path() . 'misc/favicon.ico'; + } + } + // Strip the protocol without delimiters for transient HTTP/HTTPS support. + // Since the menu is cached on the server-side and client-side, the cached + // version might contain a HTTP link, whereas the actual page is on HTTPS. + // Relative paths will work fine, but theme_get_setting() returns an + // absolute URI. + $variables['src'] = preg_replace('@^https?:@', '', $variables['src']); + $variables['src'] = check_plain($variables['src']); + $variables['alt'] = t('Home'); +} + +/** + * Renders an icon to display in the administration menu. + * + * @ingroup themeable + */ +function theme_admin_menu_icon($variables) { + return '' . $variables['alt'] . ''; +} + diff --git a/sites/all/modules/custom/admin_menu/admin_menu.info b/sites/all/modules/custom/admin_menu/admin_menu.info new file mode 100644 index 0000000000..c6dbd892b3 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_menu.info @@ -0,0 +1,16 @@ +name = Administration menu +description = "Provides a dropdown menu to most administrative tasks and other common destinations (to users with the proper permissions)." +package = Administration +core = 7.x +configure = admin/config/administration/admin_menu +; Requires menu_build_tree() conditions; available after 7.10. +; @see http://drupal.org/node/1025582 +dependencies[] = system (>7.10) +files[] = tests/admin_menu.test + +; Information added by Drupal.org packaging script on 2014-12-19 +version = "7.x-3.0-rc5" +core = "7.x" +project = "admin_menu" +datestamp = "1419029284" + diff --git a/sites/all/modules/custom/admin_menu/admin_menu.install b/sites/all/modules/custom/admin_menu/admin_menu.install new file mode 100644 index 0000000000..4e5443d366 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_menu.install @@ -0,0 +1,123 @@ +fields(array('weight' => 100)) + ->condition('type', 'module') + ->condition('name', 'admin_menu') + ->execute(); +} + +/** + * Implements hook_uninstall(). + */ +function admin_menu_uninstall() { + // Delete variables. + variable_del('admin_menu_components'); + variable_del('admin_menu_margin_top'); + variable_del('admin_menu_position_fixed'); + variable_del('admin_menu_tweak_modules'); + variable_del('admin_menu_tweak_tabs'); + variable_del('admin_menu_show_all'); + variable_del('admin_menu_display'); + variable_del('admin_menu_cache_server'); + variable_del('admin_menu_cache_client'); + // Unused variables still should be deleted. + variable_del('admin_menu_devel_modules'); + variable_del('admin_menu_devel_modules_enabled'); + variable_del('admin_menu_devel_modules_skip'); +} + +/** + * Ensure that admin_menu is rebuilt after upgrading to D6. + */ +function admin_menu_update_6000() { + // Drop the {admin_menu} table in admin_menu_update_6000() on sites that used + // one of the later patches in #132524. + if (db_table_exists('admin_menu')) { + db_drop_table('admin_menu'); + } +} + +/** + * Wipe and rebuild so we can switch the icon path to . + */ +function admin_menu_update_6001() { + db_delete('menu_links')->condition('module', 'admin_menu')->execute(); + menu_cache_clear('admin_menu'); +} + +/** + * Add {cache_admin_menu} table. + */ +function admin_menu_update_7300() { + if (!db_table_exists('cache_admin_menu')) { + $schema = drupal_get_schema_unprocessed('system', 'cache'); + db_create_table('cache_admin_menu', $schema); + } +} + +/** + * Increase the module weight. + * + * @see admin_menu_install() + */ +function admin_menu_update_7302() { + db_update('system') + ->fields(array('weight' => 100)) + ->condition('type', 'module') + ->condition('name', 'admin_menu') + ->execute(); +} + +/** + * Remove local tasks from {menu_links} table. + */ +function admin_menu_update_7303() { + db_delete('menu_router') + ->condition('path', 'admin/%', 'LIKE') + ->condition('type', MENU_IS_LOCAL_TASK, '&') + ->execute(); +} + +/** + * Remove obsolete 'admin_menu' menu and all orphan links in it. + */ +function admin_menu_update_7304() { + // Remove the custom menu used by 6.x-1.x. + if (db_table_exists('menu_custom')) { + db_delete('menu_custom')->condition('menu_name', 'admin_menu')->execute(); + } + + // 6.x-1.x cloned the entire link structure below the path 'admin' into a + // separate 'menu_name' "admin_menu" with 'module' "admin_menu". 6.x-3.x and + // early alpha versions of 7.x-3.x still did something similar. All of these + // records are obsolete. Removal of the 'module' records (without different + // menu_name) is particularly important, since they would otherwise appear + // as duplicate links. + db_delete('menu_links') + ->condition(db_or() + ->condition('module', 'admin_menu') + ->condition('menu_name', 'admin_menu') + ) + ->execute(); +} diff --git a/sites/all/modules/custom/admin_menu/admin_menu.js b/sites/all/modules/custom/admin_menu/admin_menu.js new file mode 100644 index 0000000000..2e28b554a2 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_menu.js @@ -0,0 +1,385 @@ +(function($) { + +Drupal.admin = Drupal.admin || {}; +Drupal.admin.behaviors = Drupal.admin.behaviors || {}; +Drupal.admin.hashes = Drupal.admin.hashes || {}; + +/** + * Core behavior for Administration menu. + * + * Test whether there is an administration menu is in the output and execute all + * registered behaviors. + */ +Drupal.behaviors.adminMenu = { + attach: function (context, settings) { + // Initialize settings. + settings.admin_menu = $.extend({ + suppress: false, + margin_top: false, + position_fixed: false, + tweak_modules: false, + tweak_permissions: false, + tweak_tabs: false, + destination: '', + basePath: settings.basePath, + hash: 0, + replacements: {} + }, settings.admin_menu || {}); + // Check whether administration menu should be suppressed. + if (settings.admin_menu.suppress) { + return; + } + var $adminMenu = $('#admin-menu:not(.admin-menu-processed)', context); + // Client-side caching; if administration menu is not in the output, it is + // fetched from the server and cached in the browser. + if (!$adminMenu.length && settings.admin_menu.hash) { + Drupal.admin.getCache(settings.admin_menu.hash, function (response) { + if (typeof response == 'string' && response.length > 0) { + $('body', context).append(response); + } + var $adminMenu = $('#admin-menu:not(.admin-menu-processed)', context); + // Apply our behaviors. + Drupal.admin.attachBehaviors(context, settings, $adminMenu); + // Allow resize event handlers to recalculate sizes/positions. + $(window).triggerHandler('resize'); + }); + } + // If the menu is in the output already, this means there is a new version. + else { + // Apply our behaviors. + Drupal.admin.attachBehaviors(context, settings, $adminMenu); + } + } +}; + +/** + * Collapse fieldsets on Modules page. + */ +Drupal.behaviors.adminMenuCollapseModules = { + attach: function (context, settings) { + if (settings.admin_menu.tweak_modules) { + $('#system-modules fieldset:not(.collapsed)', context).addClass('collapsed'); + } + } +}; + +/** + * Collapse modules on Permissions page. + */ +Drupal.behaviors.adminMenuCollapsePermissions = { + attach: function (context, settings) { + if (settings.admin_menu.tweak_permissions) { + // Freeze width of first column to prevent jumping. + $('#permissions th:first', context).css({ width: $('#permissions th:first', context).width() }); + // Attach click handler. + $modules = $('#permissions tr:has(td.module)', context).once('admin-menu-tweak-permissions', function () { + var $module = $(this); + $module.bind('click.admin-menu', function () { + // @todo Replace with .nextUntil() in jQuery 1.4. + $module.nextAll().each(function () { + var $row = $(this); + if ($row.is(':has(td.module)')) { + return false; + } + $row.toggleClass('element-hidden'); + }); + }); + }); + // Collapse all but the targeted permission rows set. + if (window.location.hash.length) { + $modules = $modules.not(':has(' + window.location.hash + ')'); + } + $modules.trigger('click.admin-menu'); + } + } +}; + +/** + * Apply margin to page. + * + * Note that directly applying marginTop does not work in IE. To prevent + * flickering/jumping page content with client-side caching, this is a regular + * Drupal behavior. + */ +Drupal.behaviors.adminMenuMarginTop = { + attach: function (context, settings) { + if (!settings.admin_menu.suppress && settings.admin_menu.margin_top) { + $('body:not(.admin-menu)', context).addClass('admin-menu'); + } + } +}; + +/** + * Retrieve content from client-side cache. + * + * @param hash + * The md5 hash of the content to retrieve. + * @param onSuccess + * A callback function invoked when the cache request was successful. + */ +Drupal.admin.getCache = function (hash, onSuccess) { + if (Drupal.admin.hashes.hash !== undefined) { + return Drupal.admin.hashes.hash; + } + $.ajax({ + cache: true, + type: 'GET', + dataType: 'text', // Prevent auto-evaluation of response. + global: false, // Do not trigger global AJAX events. + url: Drupal.settings.admin_menu.basePath.replace(/admin_menu/, 'js/admin_menu/cache/' + hash), + success: onSuccess, + complete: function (XMLHttpRequest, status) { + Drupal.admin.hashes.hash = status; + } + }); +}; + +/** + * TableHeader callback to determine top viewport offset. + * + * @see toolbar.js + */ +Drupal.admin.height = function() { + var $adminMenu = $('#admin-menu'); + var height = $adminMenu.outerHeight(); + // In IE, Shadow filter adds some extra height, so we need to remove it from + // the returned height. + if ($adminMenu.css('filter') && $adminMenu.css('filter').match(/DXImageTransform\.Microsoft\.Shadow/)) { + height -= $adminMenu.get(0).filters.item("DXImageTransform.Microsoft.Shadow").strength; + } + return height; +}; + +/** + * @defgroup admin_behaviors Administration behaviors. + * @{ + */ + +/** + * Attach administrative behaviors. + */ +Drupal.admin.attachBehaviors = function (context, settings, $adminMenu) { + if ($adminMenu.length) { + $adminMenu.addClass('admin-menu-processed'); + $.each(Drupal.admin.behaviors, function() { + this(context, settings, $adminMenu); + }); + } +}; + +/** + * Apply 'position: fixed'. + */ +Drupal.admin.behaviors.positionFixed = function (context, settings, $adminMenu) { + if (settings.admin_menu.position_fixed) { + $adminMenu.addClass('admin-menu-position-fixed'); + $adminMenu.css('position', 'fixed'); + } +}; + +/** + * Move page tabs into administration menu. + */ +Drupal.admin.behaviors.pageTabs = function (context, settings, $adminMenu) { + if (settings.admin_menu.tweak_tabs) { + var $tabs = $(context).find('ul.tabs.primary'); + $adminMenu.find('#admin-menu-wrapper > ul').eq(1) + .append($tabs.find('li').addClass('admin-menu-tab')); + $(context).find('ul.tabs.secondary') + .appendTo('#admin-menu-wrapper > ul > li.admin-menu-tab.active') + .removeClass('secondary'); + $tabs.remove(); + } +}; + +/** + * Perform dynamic replacements in cached menu. + */ +Drupal.admin.behaviors.replacements = function (context, settings, $adminMenu) { + for (var item in settings.admin_menu.replacements) { + $(item, $adminMenu).html(settings.admin_menu.replacements[item]); + } +}; + +/** + * Inject destination query strings for current page. + */ +Drupal.admin.behaviors.destination = function (context, settings, $adminMenu) { + if (settings.admin_menu.destination) { + $('a.admin-menu-destination', $adminMenu).each(function() { + this.search += (!this.search.length ? '?' : '&') + Drupal.settings.admin_menu.destination; + }); + } +}; + +/** + * Apply JavaScript-based hovering behaviors. + * + * @todo This has to run last. If another script registers additional behaviors + * it will not run last. + */ +Drupal.admin.behaviors.hover = function (context, settings, $adminMenu) { + // Delayed mouseout. + $('li.expandable', $adminMenu).hover( + function () { + // Stop the timer. + clearTimeout(this.sfTimer); + // Display child lists. + $('> ul', this) + .css({left: 'auto', display: 'block'}) + // Immediately hide nephew lists. + .parent().siblings('li').children('ul').css({left: '-999em', display: 'none'}); + }, + function () { + // Start the timer. + var uls = $('> ul', this); + this.sfTimer = setTimeout(function () { + uls.css({left: '-999em', display: 'none'}); + }, 400); + } + ); +}; + +/** + * Apply the search bar functionality. + */ +Drupal.admin.behaviors.search = function (context, settings, $adminMenu) { + // @todo Add a HTML ID. + var $input = $('input.admin-menu-search', $adminMenu); + // Initialize the current search needle. + var needle = $input.val(); + // Cache of all links that can be matched in the menu. + var links; + // Minimum search needle length. + var needleMinLength = 2; + // Append the results container. + var $results = $('
').insertAfter($input); + + /** + * Executes the search upon user input. + */ + function keyupHandler() { + var matches, $html, value = $(this).val(); + // Only proceed if the search needle has changed. + if (value !== needle) { + needle = value; + // Initialize the cache of menu links upon first search. + if (!links && needle.length >= needleMinLength) { + // @todo Limit to links in dropdown menus; i.e., skip menu additions. + links = buildSearchIndex($adminMenu.find('li:not(.admin-menu-action, .admin-menu-action li) > a')); + } + // Empty results container when deleting search text. + if (needle.length < needleMinLength) { + $results.empty(); + } + // Only search if the needle is long enough. + if (needle.length >= needleMinLength && links) { + matches = findMatches(needle, links); + // Build the list in a detached DOM node. + $html = buildResultsList(matches); + // Display results. + $results.empty().append($html); + } + } + } + + /** + * Builds the search index. + */ + function buildSearchIndex($links) { + return $links + .map(function () { + var text = (this.textContent || this.innerText); + // Skip menu entries that do not contain any text (e.g., the icon). + if (typeof text === 'undefined') { + return; + } + return { + text: text, + textMatch: text.toLowerCase(), + element: this + }; + }); + } + + /** + * Searches the index for a given needle and returns matching entries. + */ + function findMatches(needle, links) { + var needleMatch = needle.toLowerCase(); + // Select matching links from the cache. + return $.grep(links, function (link) { + return link.textMatch.indexOf(needleMatch) !== -1; + }); + } + + /** + * Builds the search result list in a detached DOM node. + */ + function buildResultsList(matches) { + var $html = $(''; + } + return $output; +} + +/** + * Function used by uasort to sort structured arrays by #weight AND #title. + */ +function admin_menu_element_sort($a, $b) { + // @see element_sort() + $a_weight = isset($a['#weight']) ? $a['#weight'] : 0; + $b_weight = isset($b['#weight']) ? $b['#weight'] : 0; + if ($a_weight == $b_weight) { + // @see element_sort_by_title() + $a_title = isset($a['#title']) ? $a['#title'] : ''; + $b_title = isset($b['#title']) ? $b['#title'] : ''; + return strnatcasecmp($a_title, $b_title); + } + return ($a_weight < $b_weight) ? -1 : 1; +} + +/** + * Implements hook_translated_menu_link_alter(). + * + * Here is where we make changes to links that need dynamic information such + * as the current page path or the number of users. + */ +function admin_menu_translated_menu_link_alter(&$item, $map) { + global $user, $base_url; + static $access_all; + + if ($item['menu_name'] != 'admin_menu') { + return; + } + + // Check whether additional development output is enabled. + if (!isset($access_all)) { + $access_all = variable_get('admin_menu_show_all', 0) && module_exists('devel'); + } + // Prepare links that would not be displayed normally. + if ($access_all && !$item['access']) { + $item['access'] = TRUE; + // Prepare for http://drupal.org/node/266596 + if (!isset($item['localized_options'])) { + _menu_item_localize($item, $map, TRUE); + } + } + + // Don't waste cycles altering items that are not visible + if (!$item['access']) { + return; + } + + // Add developer information to all links, if enabled. + if ($extra = variable_get('admin_menu_display', 0)) { + $item['title'] .= ' ' . $extra[0] . ': ' . $item[$extra]; + } +} + +/** + * Implements hook_flush_caches(). + * + * Flushes client-side caches. + * + * @param int $uid + * (optional) A user ID to limit the cache flush to. + */ +function admin_menu_flush_caches($uid = NULL) { + // A call to menu_rebuild() will trigger potentially thousands of calls into + // menu_link_save(), for which admin_menu has to implement the corresponding + // CRUD hooks, in order to take up any menu link changes, since any menu link + // change could affect the admin menu (which essentially is an aggregate) and + // since there is no other way to get notified about stale caches. The cache + // only needs to be flushed once though, so we prevent a ton of needless + // subsequent calls with this static. + // @see http://drupal.org/node/918538 + $was_flushed = &drupal_static(__FUNCTION__, array()); + // $uid can be NULL. PHP automatically converts that into '' (empty string), + // which is different to uid 0 (zero). + if (isset($was_flushed[$uid])) { + return; + } + $was_flushed[$uid] = TRUE; + + $cid = 'admin_menu:'; + if (isset($uid)) { + $cid .= $uid . ':'; + } + // Flush cached output of admin_menu. + cache_clear_all($cid, 'cache_menu', TRUE); + // Flush client-side cache hashes. + drupal_static_reset('admin_menu_cache_get'); + // db_table_exists() required for SimpleTest. + if (db_table_exists('cache_admin_menu')) { + cache_clear_all(isset($uid) ? $cid : '*', 'cache_admin_menu', TRUE); + } +} + +/** + * Implements hook_form_alter(). + */ +function admin_menu_form_alter(&$form, &$form_state, $form_id) { + $global_flush_ids = array( + 'admin_menu_theme_settings' => 1, + // Update links for clean/non-clean URLs. + 'system_clean_url_settings' => 1, + // Incorporate changed user permissions. + 'user_admin_permissions' => 1, + // Removing a role potentially means less permissions. + 'user_admin_role_delete_confirm' => 1, + // User name and roles may be changed on the user account form. + 'user_profile_form' => 1, + ); + if (isset($global_flush_ids[$form_id])) { + $form['#submit'][] = 'admin_menu_form_alter_flush_cache_submit'; + + // Optionally limit the cache flush to a certain user ID. + $form_state['admin_menu_uid'] = NULL; + if ($form_id == 'user_profile_form') { + $form_state['admin_menu_uid'] = $form_state['user']->uid; + } + } + + // UX: Add a confirmation to the permissions form to ask the user whether to + // auto-enable the 'access administration menu' permission along with + // 'access administration pages'. + if ($form_id == 'user_admin_permissions') { + $form['#attached']['js'][] = drupal_get_path('module', 'admin_menu') . '/admin_menu.admin.js'; + } +} + +/** + * Form submission handler to flush Administration menu caches. + */ +function admin_menu_form_alter_flush_cache_submit($form, &$form_state) { + admin_menu_flush_caches($form_state['admin_menu_uid']); +} + +/** + * Implements hook_form_FORM_ID_alter(). + * + * Extends Devel module with Administration menu developer settings. + */ +function admin_menu_form_devel_admin_settings_alter(&$form, &$form_state) { + form_load_include($form_state, 'inc', 'admin_menu'); + _admin_menu_form_devel_admin_settings_alter($form, $form_state); +} diff --git a/sites/all/modules/custom/admin_menu/admin_menu.uid1.css b/sites/all/modules/custom/admin_menu/admin_menu.uid1.css new file mode 100644 index 0000000000..e375cfe666 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_menu.uid1.css @@ -0,0 +1,9 @@ + +/** + * @file + * Administration menu color override for uid1. + */ + +#admin-menu li.admin-menu-account > a { + background: #911 url(images/bkg-red.png) bottom left repeat-x; +} diff --git a/sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.css b/sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.css new file mode 100644 index 0000000000..a3e9f3e300 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.css @@ -0,0 +1,145 @@ + +/** + * @file + * Toolbar style for Administration menu. + * + * Important: We cannot re-use toolbar.png from Toolbar module, since we cannot + * reliably determine the path to it. + * + * @todo Separate shortcut functionality into own module/widget. + */ + +/* Adjust margin/height */ +html body.admin-menu { + margin-top: 29px !important; +} +html body.admin-menu-with-shortcuts { + margin-top: 65px !important; +} +/* Displace the core Toolbar, if concurrently output. */ +body div#toolbar.toolbar { + top: 30px; +} + +/** + * Base styles. + * + * We use a keyword for the toolbar font size to make it display consistently + * across different themes, while still allowing browsers to resize the text. + */ +#admin-menu { + font: normal small "Lucida Grande", Verdana, sans-serif; + -moz-box-shadow: 0 -10px 20px 13px #000; + -webkit-box-shadow: 0 -10px 20px 13px #000; + box-shadow: 0 -10px 20px 13px #000; + right: 0; + width: auto; +} +#admin-menu-wrapper { + font-size: .846em; + padding: 5px 10px 0; +} + +#admin-menu .dropdown a { + color: #fafafa; +} + +/* Remove border from all lists and actions */ +#admin-menu .dropdown .admin-menu-action a { + border-left: 0; +} +#admin-menu .dropdown .admin-menu-icon > a { + padding: 2px 10px 3px; +} + +/** + * Administration menu. + */ +#admin-menu .dropdown .admin-menu-icon > a span { + vertical-align: text-bottom; + width: 11px; + height: 14px; + display: block; + background: url(toolbar.png) no-repeat 0 -45px; + text-indent: -9999px; +} +#admin-menu > div > .dropdown > li > a { + border-right: 0; + margin-bottom: 4px; + padding: 2px 10px 3px; +} +#admin-menu .dropdown .admin-menu-toolbar-category > a, +#admin-menu .dropdown .admin-menu-action > a { + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} +#admin-menu .dropdown .admin-menu-toolbar-category > a.active-trail { + text-shadow: #333 0 1px 0; + background: url(toolbar.png) 0 0 repeat-x; +} +#admin-menu .dropdown .admin-menu-toolbar-category > a:hover { + background-color: #444; +} +#admin-menu .dropdown .admin-menu-tab a { + border-right: 0; +} +#admin-menu .dropdown li li.expandable ul { + margin: -22px 0 0 160px; +} + +/** + * Shortcuts toggle. + */ +#admin-menu .shortcut-toggle { + cursor: pointer; + background: url(toolbar.png) 0 -20px no-repeat; + display: block; + float: right; + margin: 0 0 0 1.3em; + text-indent: -9999px; + overflow: hidden; + width: 25px; + height: 25px; +} +#admin-menu .shortcut-toggle:focus, +#admin-menu .shortcut-toggle:hover { + background-position: -50px -20px; +} +#admin-menu .shortcut-toggle.active { + background-position: -25px -20px; +} +#admin-menu .shortcut-toggle.active:focus, +#admin-menu .shortcut-toggle.active:hover { + background-position: -75px -20px; +} + +/** + * Shortcuts widget. + */ +#admin-menu .shortcut-toolbar { + background-color: #666; + clear: both; + display: none; + margin: 0 -10px; + overflow: hidden; + /* Align with icon; @see shortcut.css */ + padding-left: 5px; +} +#admin-menu .shortcut-toolbar.active { + display: block; +} +/* Override theme list style; @see shortcut.css */ +#admin-menu .shortcut-toolbar ul { + margin: 0; +} +/* @see toolbar.css */ +#admin-menu .shortcut-toolbar li { + float: left; + list-style-image: none; + list-style-type: none; +} +#admin-menu .shortcut-toolbar a { + display: block; +} + diff --git a/sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.info b/sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.info new file mode 100644 index 0000000000..fa4ca095e8 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.info @@ -0,0 +1,12 @@ +name = Administration menu Toolbar style +description = A better Toolbar. +package = Administration +core = 7.x +dependencies[] = admin_menu + +; Information added by Drupal.org packaging script on 2014-12-19 +version = "7.x-3.0-rc5" +core = "7.x" +project = "admin_menu" +datestamp = "1419029284" + diff --git a/sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.install b/sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.install new file mode 100644 index 0000000000..bf067d7858 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.install @@ -0,0 +1,37 @@ +fields(array('weight' => 101)) + ->condition('type', 'module') + ->condition('name', 'admin_menu_toolbar') + ->execute(); +} + +/** + * Set module weight to a value higher than admin_menu. + * + * At this point, admin_menu should have a weight of 100. To account for + * customized weights, we increase the weight relatively. + * + * @see admin_menu_toolbar_install() + */ +function admin_menu_toolbar_update_6300() { + $weight = db_query("SELECT weight FROM {system} WHERE type = 'module' AND name = 'admin_menu'")->fetchField(); + $weight++; + db_update('system') + ->fields(array('weight' => $weight)) + ->condition('type', 'module') + ->condition('name', 'admin_menu_toolbar') + ->execute(); +} + diff --git a/sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.js b/sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.js new file mode 100644 index 0000000000..809d9ead93 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.js @@ -0,0 +1,56 @@ +(function($) { + +Drupal.admin = Drupal.admin || {}; +Drupal.admin.behaviors = Drupal.admin.behaviors || {}; + +/** + * @ingroup admin_behaviors + * @{ + */ + +/** + * Apply active trail highlighting based on current path. + * + * @todo Not limited to toolbar; move into core? + */ +Drupal.admin.behaviors.toolbarActiveTrail = function (context, settings, $adminMenu) { + if (settings.admin_menu.toolbar && settings.admin_menu.toolbar.activeTrail) { + $adminMenu.find('> div > ul > li > a[href="' + settings.admin_menu.toolbar.activeTrail + '"]').addClass('active-trail'); + } +}; + +/** + * Toggles the shortcuts bar. + */ +Drupal.admin.behaviors.shortcutToggle = function (context, settings, $adminMenu) { + var $shortcuts = $adminMenu.find('.shortcut-toolbar'); + if (!$shortcuts.length) { + return; + } + var storage = window.localStorage || false; + var storageKey = 'Drupal.admin_menu.shortcut'; + var $body = $(context).find('body'); + var $toggle = $adminMenu.find('.shortcut-toggle'); + $toggle.click(function () { + var enable = !$shortcuts.hasClass('active'); + $shortcuts.toggleClass('active', enable); + $toggle.toggleClass('active', enable); + if (settings.admin_menu.margin_top) { + $body.toggleClass('admin-menu-with-shortcuts', enable); + } + // Persist toggle state across requests. + storage && enable ? storage.setItem(storageKey, 1) : storage.removeItem(storageKey); + this.blur(); + return false; + }); + + if (!storage || storage.getItem(storageKey)) { + $toggle.trigger('click'); + } +}; + +/** + * @} End of "ingroup admin_behaviors". + */ + +})(jQuery); diff --git a/sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.module b/sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.module new file mode 100644 index 0000000000..c6111bdc4d --- /dev/null +++ b/sites/all/modules/custom/admin_menu/admin_menu_toolbar/admin_menu_toolbar.module @@ -0,0 +1,118 @@ + TRUE); + + $attached['css'][$path . '/admin_menu_toolbar.css'] = $options; + $attached['js'][$path . '/admin_menu_toolbar.js'] = $options; + + // @todo Stop-gap fix until cached rendering is resolved. + // @see http://drupal.org/node/1567622 + if (module_exists('shortcut')) { + $attached['css'][drupal_get_path('module', 'shortcut') . '/shortcut.css'] = $options; + } + + $settings = array(); + // Add current path to support menu item highlighting. + // @todo Compile real active trail here? + $args = explode('/', $_GET['q']); + if ($args[0] == 'admin' && !empty($args[1])) { + $settings['activeTrail'] = url($args[0] . '/' . $args[1]); + } + elseif (drupal_is_front_page()) { + $settings['activeTrail'] = url(''); + } + + $attached['js'][] = array( + 'data' => array('admin_menu' => array('toolbar' => $settings)), + 'type' => 'setting', + ); +} + +/** + * Implements hook_admin_menu_output_build(). + */ +function admin_menu_toolbar_admin_menu_output_build(&$content) { + if (empty($content['#components']['shortcut.links']) && !$content['#complete']) { + return; + } + // Add shortcuts toggle. + $content['shortcut-toggle'] = array( + '#access' => module_exists('shortcut'), + '#weight' => -200, + '#type' => 'link', + '#title' => t('Show shortcuts'), + '#href' => '', + '#options' => array( + 'attributes' => array('class' => array('shortcut-toggle')), + ), + ); + + // Add shortcuts bar. + $content['shortcut'] = array( + '#access' => module_exists('shortcut'), + '#weight' => 200, + '#prefix' => '
', + '#suffix' => '
', + ); + $content['shortcut']['shortcuts'] = array( + // Shortcut module's CSS relies on Toolbar module's markup. + // @see http://drupal.org/node/1217038 + '#prefix' => '
', + '#suffix' => '
', + // @todo Links may contain .active-trail classes. + '#pre_render' => array('shortcut_toolbar_pre_render'), + ); +} + +/** + * Implements hook_admin_menu_output_alter(). + */ +function admin_menu_toolbar_admin_menu_output_alter(&$content) { + // Add a class to top-level items for styling. + if (isset($content['menu'])) { + foreach (element_children($content['menu']) as $link) { + $content['menu'][$link]['#attributes']['class'][] = 'admin-menu-toolbar-category'; + } + } + + // Alter icon. + if (isset($content['icon'])) { + unset($content['icon']['icon']['#theme']); + $content['icon']['icon']['#title'] = '' . t('Home') . ''; + $content['icon']['icon']['#attributes']['class'][] = 'admin-menu-toolbar-category'; + } + + // Alter user account link. + if (isset($content['account'])) { + $content['account']['account']['#title'] = t('Hello @username', array('@username' => $content['account']['account']['#title'])); + $content['account']['account']['#options']['html'] = TRUE; + } +} + diff --git a/sites/all/modules/custom/admin_menu/admin_menu_toolbar/toolbar.png b/sites/all/modules/custom/admin_menu/admin_menu_toolbar/toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..f2c7f355a6d9d8acb478f25a74ec1670cde26445 GIT binary patch literal 558 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z=!3-q7>(u!JsqFziA+A9B|NsAKX=!j0$Up`_ zDF^_nWMpJyVq#)uW@cew;o#t~wY9agvvYTM_weut2nYxa42+0~04i>1XlQC`YH4X{ zZEbCDZ|~^n=<4d~>FMe1?d|XHpDeT7er_Y!%W7e!$bLPyMJ9qB< z`SX`AU%qbLy7lYVZ{NOs$BrEb4<0;p=+O7?-+%x9{pZi0zkmP!`}Ys%yrsn~H-HY} zD+%%oW?&GIZRqIkn>cmmg$Ez}_rz5JT`J+};uunK>+R)e|3eM}Z4dJ|aEYwo2;*D4 zsOh<|h~SZ*|Mz>F_Znul2~2v|(p{_fEluyOQiAW|phpaXuNMii zXKY*-`iLP%!Nuu_#-;S58)jSFRn#^L^O^ogXL*#0uV19$i$7*o%walDCW~&K+Oa0> zmUq?LCqH_+KRNC`-t{wTpS>B+wc^y+pRN8^dY5|c`gkaQ=D#DX;!4rs_wVoewMggB zWC6~JwLKOtHyGdYoI9vk*&m?e{>0KLRB+{_>l{~)tekk9TOon*-6V94RT zwdDJ>dz$wy2|w|VG%9!UnhPHbBx-MUvW8KKQh)L)I&?cp-kcg7t{Irtt x#G+INhKgIoJ}3RXLO-1G_3`KR^7UEC!k|Bg^~yS)mA*jL44$rjF6*2UngG1CTZjMv literal 0 HcmV?d00001 diff --git a/sites/all/modules/custom/admin_menu/images/arrow.png b/sites/all/modules/custom/admin_menu/images/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..3c3166ffd1a547cf9e484493f7b1a6bb0a1960c2 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>3?#4ne^UZdEa{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+JH<5@CkAK|NsBYnKM6p_~5cQ^#xFn zu_VYZn8D%MjWi%f-P6S}q~camLP84z8=C?XvztLT=Q$=rM;$c*2Vv(x_Oyd%nK=v? YIC2>D6MnFI1GO-Cy85}Sb4q9e0Nq41fB*mh literal 0 HcmV?d00001 diff --git a/sites/all/modules/custom/admin_menu/images/bkg-red.png b/sites/all/modules/custom/admin_menu/images/bkg-red.png new file mode 100644 index 0000000000000000000000000000000000000000..80647b0ec7e3d7553f834d6f80370fda20f71052 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&E!3-qBmhLYC38XvvIx;YR|DNig)WpGT%PfAtr%uP&B4N6T+sVqF1Y6Dbc6W|l#x>8^NY;f>lPtP?*Mq90| z*BTq23klg^X13qeb+e`Ac3az31_rwv98UQ8oeBsz=9^z=kg7NUb0L_g@m`)Ny_DNW|G?;t|D7D;|k&uW%KJHTl@# fpY!OFNCHErDbvrnb{$KACNOxq`njxgN@xNA5DHOC literal 0 HcmV?d00001 diff --git a/sites/all/modules/custom/admin_menu/images/bkg.png b/sites/all/modules/custom/admin_menu/images/bkg.png new file mode 100644 index 0000000000000000000000000000000000000000..9de137bfd4c083461e4ddb9c73fc8dbfd8a80750 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&E!3-qBmhLYC38XvvIx;YR|DNig)WpGT%PfAtr%uP&B4N6T+sVqF1Y6Dbc6W|l#Dj*;rE-r3jVxpy`rKqSV zCMKq)rY0jJqoSf>Y;3HruP-GfB`hp#YHF&Xp`oLrBPb{+CnslUXec5g;u~%A9%zo4 zr;B4q#VwnI?o15|3FsIJ^6_3Q1-*6EOEGg`Wj(H@wyTVn>Sw+z0 cvPc5M#HCC>{R~&O08L=R|DNig)WpGT%PfAtr%uP&B4N6T+sVqF1Y6Dbc6W|l#>Jtzd5u1`zSRNc6pOIUV zm0y~YSr8VTl#rT}l%AJeP! zr;B4q#VwnI?o15|3FsIJ`A1;ESZx(fGm|Z-o99P(_qGxzS(Ql&b c1(5`X`Jzlelak8r15IG?boFyt=akR{0O>qUi~s-t literal 0 HcmV?d00001 diff --git a/sites/all/modules/custom/admin_menu/images/icon_users.png b/sites/all/modules/custom/admin_menu/images/icon_users.png new file mode 100644 index 0000000000000000000000000000000000000000..0923fda05f48ba76034de5eb8bba52744aa543d6 GIT binary patch literal 629 zcmV-*0*d{KP)5r00004XF*Lt006JZ zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!2T4RhRCwBq zQcs8yVHE$y8Pin{gBMpvlcWxLkqm;Ug9n#x1xpA^R7as}5D4A1?T~j*d&twWi*@c4 z1cgDk=pjTwSws(tntw-U`n_qsWn8vpAN=OM_r33X^WOVCLDzN0rPJwbLp=nVe!u@G zyMhQj0Uqx_9RVIQ_6gVx1On?TC1|(X4X7K|;A*wni$o%aFeSQ6M*t<%_#GR4>h=28 zVzIamFpl|r&c@^M?P|5UJDE(r!2gaaGl@jP#oujIP^nbDLEYy8P1Bel2(M$Y*gjm5 zpZ9vb_dcKREzBjeW|~f?FMtz(>{-9xe-jJ_@2uBr5nvp$EI&6}GUUuanfIW!O?OLG z)hC0&Kyx@88$(+zms2QxBSEQDdJOf^dJ!!=KwHe^axFwrJj>E(G~SuR{Fk6uEK+~_ z=jowxQ3b2jYEn2HHqK_V*$L#g**dYJ3xz^~7U!$=F%1?JvS>8QJRT1_7n?Vm&6lZE z>KLvnCX>mh_|qf$8wXM7^?I4x?KW&HK(XX>I(Lxxpj<9bBpm#?=tTCLBaP)M=aY&Y$8`z@SZL!~Mafjua9yWN9)KL3m8{42l!sVo#Z5bDd{ P00000NkvXXu0mjf)ZZAv literal 0 HcmV?d00001 diff --git a/sites/all/modules/custom/admin_menu/tests/admin_menu.test b/sites/all/modules/custom/admin_menu/tests/admin_menu.test new file mode 100644 index 0000000000..4b48c9ab54 --- /dev/null +++ b/sites/all/modules/custom/admin_menu/tests/admin_menu.test @@ -0,0 +1,520 @@ + 'access administration pages', + 'admin_menu' => 'access administration menu', + ); + + function setUp() { + // Enable admin menu module and any other modules. + $modules = func_get_args(); + $modules = isset($modules[0]) ? $modules[0] : $modules; + $modules[] = 'admin_menu'; + parent::setUp($modules); + + // Disable client-side caching. + variable_set('admin_menu_cache_client', FALSE); + // Disable Clean URLs to ensure drupal.org testbot compatibility. + variable_set('clean_url', 0); + } + + /** + * Check that an element exists in HTML markup. + * + * @param $xpath + * An XPath expression. + * @param array $arguments + * (optional) An associative array of XPath replacement tokens to pass to + * DrupalWebTestCase::buildXPathQuery(). + * @param $message + * The message to display along with the assertion. + * @param $group + * The type of assertion - examples are "Browser", "PHP". + * + * @return + * TRUE if the assertion succeeded, FALSE otherwise. + */ + protected function assertElementByXPath($xpath, array $arguments = array(), $message, $group = 'Other') { + $elements = $this->xpath($xpath, $arguments); + return $this->assertTrue(!empty($elements[0]), $message, $group); + } + + /** + * Check that an element does not exist in HTML markup. + * + * @param $xpath + * An XPath expression. + * @param array $arguments + * (optional) An associative array of XPath replacement tokens to pass to + * DrupalWebTestCase::buildXPathQuery(). + * @param $message + * The message to display along with the assertion. + * @param $group + * The type of assertion - examples are "Browser", "PHP". + * + * @return + * TRUE if the assertion succeeded, FALSE otherwise. + */ + protected function assertNoElementByXPath($xpath, array $arguments = array(), $message, $group = 'Other') { + $elements = $this->xpath($xpath, $arguments); + return $this->assertTrue(empty($elements), $message, $group); + } + + /** + * Asserts that links appear in the menu in a specified trail. + * + * @param array $trail + * A list of menu link titles to assert in the menu. + */ + protected function assertLinkTrailByTitle(array $trail) { + $xpath = array(); + $args = array(); + $message = ''; + foreach ($trail as $i => $title) { + $xpath[] = '/li/a[text()=:title' . $i . ']'; + $args[':title' . $i] = $title; + $message .= ($i ? ' » ' : '') . check_plain($title); + } + $xpath = '//div[@id="admin-menu"]/div/ul' . implode('/parent::li/ul', $xpath); + $this->assertElementByXPath($xpath, $args, $message . ' link found.'); + } + + /** + * Asserts that no link appears in the menu for a specified trail. + * + * @param array $trail + * A list of menu link titles to assert in the menu. + */ + protected function assertNoLinkTrailByTitle(array $trail) { + $xpath = array(); + $args = array(); + $message = ''; + foreach ($trail as $i => $title) { + $xpath[] = '/li/a[text()=:title' . $i . ']'; + $args[':title' . $i] = $title; + $message .= ($i ? ' » ' : '') . check_plain($title); + } + $xpath = '//div[@id="admin-menu"]/div/ul' . implode('/parent::li/ul', $xpath); + $this->assertNoElementByXPath($xpath, $args, $message . ' link not found.'); + } +} + +/** + * Tests menu links depending on user permissions. + */ +class AdminMenuPermissionsTestCase extends AdminMenuWebTestCase { + public static function getInfo() { + return array( + 'name' => 'Menu link access permissions', + 'description' => 'Tests appearance of menu links depending on user permissions.', + 'group' => 'Administration menu', + ); + } + + function setUp() { + parent::setUp(array('node')); + } + + /** + * Test that the links are added to the page (no JS testing). + */ + function testPermissions() { + module_enable(array('contact')); + $this->resetAll(); + + // Anonymous users should not see the menu. + $this->drupalGet(''); + $this->assertNoElementByXPath('//div[@id="admin-menu"]', array(), t('Administration menu not found.')); + + // Create a user who + // - can access content overview + // - cannot access drupal.org links + // - cannot administer Contact module + $permissions = $this->basePermissions + array( + 'access content overview', + ); + $admin_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($admin_user); + + // Check that the user can see the admin links, but not the drupal links. + $this->assertElementByXPath('//div[@id="admin-menu"]', array(), 'Administration menu found.'); + $this->assertElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path)]', array(':path' => 'admin/content'), 'Content link found.'); + $this->assertNoElementByXPath('//div[@id="admin-menu"]//a[@href=:path]', array(':path' => 'http://drupal.org'), 'Icon » Drupal.org link not found.'); + $this->assertNoElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path)]', array(':path' => 'admin/structure/contact'), 'Structure » Contact link not found.'); + + // Create a user "reversed" to the above; i.e., who + // - cannot access content overview + // - can access drupal.org links + // - can administer Contact module + $permissions = $this->basePermissions + array( + 'display drupal links', + 'administer contact forms', + ); + $admin_user2 = $this->drupalCreateUser($permissions); + $this->drupalLogin($admin_user2); + $this->assertElementByXPath('//div[@id="admin-menu"]', array(), 'Administration menu found.'); + $this->assertNoElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path)]', array(':path' => 'admin/content'), 'Content link not found.'); + $this->assertElementByXPath('//div[@id="admin-menu"]//a[@href=:path]', array(':path' => 'http://drupal.org'), 'Icon » Drupal.org link found.'); + $this->assertElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path)]', array(':path' => 'admin/structure/contact'), 'Structure » Contact link found.'); + } + + /** + * Tests handling of links pointing to category/overview pages. + */ + function testCategories() { + // Create a user with minimum permissions. + $admin_user = $this->drupalCreateUser($this->basePermissions); + $this->drupalLogin($admin_user); + + // Verify that no category links appear. + $this->assertNoLinkTrailByTitle(array(t('Structure'))); + $this->assertNoLinkTrailByTitle(array(t('Configuration'))); + + // Create a user with access to one configuration category. + $permissions = $this->basePermissions + array( + 'administer users', + ); + $admin_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($admin_user); + + // Verify that only expected category links appear. + $this->assertNoLinkTrailByTitle(array(t('Structure'))); + $this->assertLinkTrailByTitle(array(t('People'))); + $this->assertLinkTrailByTitle(array(t('Configuration'))); + $this->assertLinkTrailByTitle(array(t('Configuration'), t('People'))); + // Random picks are sufficient. + $this->assertNoLinkTrailByTitle(array(t('Configuration'), t('Media'))); + $this->assertNoLinkTrailByTitle(array(t('Configuration'), t('System'))); + } + + /** + * Tests that user role and permission changes are properly taken up. + */ + function testPermissionChanges() { + // Create a user who is able to change permissions. + $permissions = $this->basePermissions + array( + 'administer permissions', + ); + $admin_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($admin_user); + + // Extract the user role ID that was created for above permissions. + $rid = key(array_diff_key($admin_user->roles, array(DRUPAL_AUTHENTICATED_RID => 0))); + + // Verify that Configuration does not appear. + $this->assertNoLinkTrailByTitle(array(t('Configuration'))); + // Grant the 'administer site configuration' permission to ourselves. + $edit = array( + $rid . '[administer site configuration]' => TRUE, + ); + $this->drupalPost('admin/people/permissions', $edit, t('Save permissions')); + // Verify that Configuration appears. + $this->assertLinkTrailByTitle(array(t('Configuration'))); + + // Verify that Structure » Content types does not appear. + $this->assertNoLinkTrailByTitle(array(t('Structure'), t('Content types'))); + // Create a new role. + $edit = array( + 'name' => 'test', + ); + $this->drupalPost('admin/people/permissions/roles', $edit, t('Add role')); + // It should be safe to assume that the new role gets the next ID. + $test_rid = $rid + 1; + // Grant the 'administer content types' permission for the role. + $edit = array( + $test_rid . '[administer content types]' => TRUE, + ); + $this->drupalPost('admin/people/permissions/' . $test_rid, $edit, t('Save permissions')); + // Verify that Structure » Content types does not appear. + $this->assertNoLinkTrailByTitle(array(t('Structure'), t('Content types'))); + + // Assign the role to ourselves. + $edit = array( + 'roles[' . $test_rid . ']' => TRUE, + ); + $this->drupalPost('user/' . $admin_user->uid . '/edit', $edit, t('Save')); + // Verify that Structure » Content types appears. + $this->assertLinkTrailByTitle(array(t('Structure'), t('Content types'))); + + // Delete the role. + $this->drupalPost('admin/people/permissions/roles/edit/' . $test_rid, array(), t('Delete role')); + $this->drupalPost(NULL, array(), t('Delete')); + // Verify that Structure » Content types does not appear. + $this->assertNoLinkTrailByTitle(array(t('Structure'), t('Content types'))); + } +} + +/** + * Tests appearance, localization, and escaping of dynamic links. + */ +class AdminMenuDynamicLinksTestCase extends AdminMenuWebTestCase { + public static function getInfo() { + return array( + 'name' => 'Dynamic links', + 'description' => 'Tests appearance, localization, and escaping of dynamic links.', + 'group' => 'Administration menu', + ); + } + + function setUp() { + parent::setUp(array('node')); + } + + /** + * Tests node type links. + */ + function testNode() { + $type = $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article')); + // Create a content-type with special characters. + $type = $this->drupalCreateContentType(array('type' => 'special', 'name' => 'Cool & Special')); + + $permissions = $this->basePermissions + array( + 'administer content types', + 'create article content', + 'create special content', + ); + $this->admin_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($this->admin_user); + + // Verify that dynamic links are displayed. + $this->drupalGet(''); + $this->assertElementByXPath('//div[@id="admin-menu"]', array(), t('Administration menu found.')); + $this->assertElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path)]', array(':path' => 'admin/structure/types'), "Structure » Content types link found."); + + // Verify link title output escaping. + $this->assertNoRaw('Cool & Special'); + $this->assertRaw(check_plain('Cool & Special')); + + // Verify Manage content type links. + $links = array( + 'admin/structure/types/manage/article' => 'Article', + 'admin/structure/types/manage/special' => 'Cool & Special', + ); + foreach ($links as $path => $title) { + $this->assertElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path) and text()=:title]', array( + ':path' => $path, + ':title' => $title, + ), "Structure » Content types » $title link found."); + } + + // Verify Add content links. + $links = array( + 'node/add/article' => 'Article', + 'node/add/special' => 'Cool & Special', + ); + foreach ($links as $path => $title) { + $this->assertElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path) and text()=:title]', array( + ':path' => $path, + ':title' => $title, + ), "Add content » $title link found."); + } + } + + /** + * Tests Add content links. + */ + function testNodeAdd() { + $type = $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article')); + + // Verify that "Add content" does not appear for unprivileged users. + $permissions = $this->basePermissions + array( + 'access content', + ); + $this->web_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($this->web_user); + $this->assertNoText(t('Add content')); + + // Verify "Add content" appears below "Content" for administrative users. + $permissions = $this->basePermissions + array( + 'access content overview', + 'access content', + 'create article content', + ); + $this->admin_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($this->admin_user); + $this->assertLinkTrailByTitle(array( + t('Content'), + t('Add content'), + )); + + // Verify "Add content" appears on the top-level for regular users. + $permissions = $this->basePermissions + array( + 'access content', + 'create article content', + ); + $this->web_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($this->web_user); + $this->assertLinkTrailByTitle(array( + t('Add content'), + )); + } +} + +/** + * Tests appearance of different types of links. + */ +class AdminMenuLinkTypesTestCase extends AdminMenuWebTestCase { + public static function getInfo() { + return array( + 'name' => 'Link types', + 'description' => 'Tests appearance of different types of links.', + 'group' => 'Administration menu', + ); + } + + function setUp() { + parent::setUp(array('help')); + + $permissions = module_invoke_all('permission'); + $permissions = array_keys($permissions); + $this->admin_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($this->admin_user); + } + + /** + * Tests appearance of different router item link types. + */ + function testLinkTypes() { + // Verify that MENU_NORMAL_ITEMs appear. + $this->assertLinkTrailByTitle(array( + t('Configuration'), + t('System'), + t('Site information'), + )); + + // Verify that MENU_LOCAL_TASKs appear. + $this->assertLinkTrailByTitle(array(t('People'), t('Permissions'))); + $this->assertLinkTrailByTitle(array(t('Appearance'), t('Settings'))); + $this->assertLinkTrailByTitle(array(t('Modules'), t('Uninstall'))); + + // Verify that MENU_LOCAL_ACTIONs appear. + $this->assertLinkTrailByTitle(array( + t('People'), + t('Add user'), + )); + + // Verify that MENU_DEFAULT_LOCAL_TASKs do NOT appear. + $this->assertNoLinkTrailByTitle(array(t('Modules'), t('List'))); + $this->assertNoLinkTrailByTitle(array(t('People'), t('List'))); + $this->assertNoLinkTrailByTitle(array(t('People'), t('Permissions'), t('Permissions'))); + $this->assertNoLinkTrailByTitle(array(t('Appearance'), t('List'))); + + // Verify that MENU_VISIBLE_IN_BREADCRUMB items (exact type) do NOT appear. + $this->assertNoLinkTrailByTitle(array(t('Modules'), t('Uninstall'), t('Uninstall'))); + $this->assertNoLinkTrailByTitle(array(t('Help'), 'admin_menu')); + + // Verify that special "Index" link appears below icon. + $this->assertElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path) and text()=:title]', array( + ':path' => 'admin/index', + ':title' => t('Index'), + ), "Icon » Index link found."); + } +} + +/** + * Tests customized menu links. + */ +class AdminMenuCustomizedTestCase extends AdminMenuWebTestCase { + public static function getInfo() { + return array( + 'name' => 'Customized links', + 'description' => 'Tests customized menu links.', + 'group' => 'Administration menu', + ); + } + + function setUp() { + parent::setUp(array('menu')); + + $this->admin_user = $this->drupalCreateUser($this->basePermissions + array( + 'administer menu', + )); + $this->drupalLogin($this->admin_user); + } + + /** + * Test disabled custom links. + */ + function testCustomDisabled() { + $type = $this->drupalCreateContentType(); + $node = $this->drupalCreateNode(array('type' => $type->type)); + $text = $this->randomName(); + $xpath = $this->buildXPathQuery('//div[@id=:id]//a[contains(text(), :text)]', array( + ':id' => 'admin-menu', + ':text' => $text, + )); + + // Verify that the link does not appear in the menu. + $this->drupalGet('node'); + $elements = $this->xpath($xpath); + $this->assertFalse($elements, 'Custom link not found.'); + + // Add a custom link to the node to the menu. + $edit = array( + 'link_path' => 'node/' . $node->nid, + 'link_title' => $text, + 'parent' => 'management:' . $this->queryMlidByPath('admin'), + ); + $this->drupalPost('admin/structure/menu/manage/management/add', $edit, t('Save')); + + // Verify that the link appears in the menu. + $this->drupalGet('node'); + $elements = $this->xpath($xpath); + $this->assertTrue($elements, 'Custom link found.'); + + // Disable the link. + $edit = array( + 'enabled' => FALSE, + ); + $this->drupalPost('admin/structure/menu/item/' . $this->queryMlidByPath('node/' . $node->nid) . '/edit', $edit, t('Save')); + + // Verify that the disabled link does not appear in the menu. + $this->drupalGet('node'); + $elements = $this->xpath($xpath); + $this->assertFalse($elements, 'Disabled custom link not found.'); + } + + /** + * Tests external links. + */ + function testCustomExternal() { + // Add a custom link to the node to the menu. + $edit = array( + 'link_path' => 'http://example.com', + 'link_title' => 'Example', + 'parent' => 'management:' . $this->queryMlidByPath('admin'), + ); + $this->drupalPost('admin/structure/menu/manage/management/add', $edit, t('Save')); + + // Verify that the link appears in the menu. + $this->drupalGet(''); + $elements = $this->xpath('//div[@id=:id]//a[@href=:href and contains(text(), :text)]', array( + ':id' => 'admin-menu', + ':href' => $edit['link_path'], + ':text' => $edit['link_title'], + )); + $this->assertTrue($elements, 'External link found.'); + } + + /** + * Returns the menu link ID for a given link path in the management menu. + */ + protected function queryMlidByPath($path) { + return db_query('SELECT mlid FROM {menu_links} WHERE menu_name = :menu AND link_path = :path', array( + ':menu' => 'management', + ':path' => $path, + ))->fetchField(); + } +} + diff --git a/sites/all/modules/custom/adminimal_admin_menu/LICENSE.txt b/sites/all/modules/custom/adminimal_admin_menu/LICENSE.txt new file mode 100755 index 0000000000..d159169d10 --- /dev/null +++ b/sites/all/modules/custom/adminimal_admin_menu/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/sites/all/modules/custom/adminimal_admin_menu/README.txt b/sites/all/modules/custom/adminimal_admin_menu/README.txt new file mode 100644 index 0000000000..67ff8806d1 --- /dev/null +++ b/sites/all/modules/custom/adminimal_admin_menu/README.txt @@ -0,0 +1,22 @@ +Quick info: +“Adminimal Administration Menu” changes the style of the +“Administration menu” module. It adds a nice and simple minimalist look and +provides some tweaks to improve you Drupal administration experience. +The menu hierarchy is not simpler and easier to understand +(removing the unnecessary transparency and only highlighting the correct menus). + It also adds shortcut links that can be edited from the core shortcut module. + The shortcut links fit nicely and have a small icon that separates them from + the normal admin menu links. + +Requirements: +Requires the administration menu module (http://drupal.org/project/admin_menu) + +Installation: +1) Download and install like any other drupal module +2) Enable the “Administration menu Adminimal Theme” from the module manager. +If you are using the “Administration menu Toolbar style” it will be disabled +automatically to prevent some styling issues. This change will be saved in your +database, so if you decide to disable the “Administration menu Adminimal Theme” +your old “Administration menu Toolbar style” will be enabled automatically +so you have nothing to worry about. +3) Refresh your administration page and you must be good to go! diff --git a/sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.css b/sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.css new file mode 100644 index 0000000000..91663d3a84 --- /dev/null +++ b/sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.css @@ -0,0 +1,319 @@ +/* Import the Open Sans webfont from Google CDN */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: local('Open Sans Light'), local('OpenSans-Light'), url(https://themes.googleusercontent.com/static/fonts/opensans/v6/DXI1ORHCpsQm3Vp6mXoaTRsxEYwM7FgeyaSgU71cLG0.woff) format('woff'); +} +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans'), local('OpenSans'), url(https://themes.googleusercontent.com/static/fonts/opensans/v6/uYKcPVoh6c5R0NpdEY5A-Q.woff) format('woff'); +} +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(https://themes.googleusercontent.com/static/fonts/opensans/v6/MTP_ySUJH_bn48VBG8sNShsxEYwM7FgeyaSgU71cLG0.woff) format('woff'); +} + +/* Blink Animation */ +@keyframes blink { + 0% {background-color: #f69231;} + 50% {background-color: #d94f13;} + 99% {background-color: #f69231;} +} + +@-moz-keyframes blink { + 0% {background-color: #f69231;} + 50% {background-color: #d94f13;} + 99% {background-color: #f69231;} +} + +@-webkit-keyframes blink { + 0% {background-color: #f69231;} + 50% {background-color: #d94f13;} + 99% {background-color: #f69231;} +} + +@-o-keyframes blink { + 0% {background-color: #f69231;} + 50% {background-color: #d94f13;} + 99% {background-color: #f69231;} +} + +/* Admin menu */ +body.adminimal-menu div#admin-menu { + background: #333; + background: none repeat scroll 0 0 #202020; + border-bottom: 1px solid #111111; + font-family: Open Sans, "Segoe UI", "Helvetica", sans-serif; +} + +body.adminimal-menu div#admin-menu li.admin-menu-toolbar-home-menu { + background: transparent; +} + +body.adminimal-menu div#admin-menu ul.dropdown span.admin-menu-home-icon { + background: url("images/home.png") no-repeat scroll 0 2px transparent; + display: block; + margin: 5px 0 0; + padding: 0; + width: 13px; +} + +body.adminimal-menu div#admin-menu ul.dropdown span.admin-menu-home-icon:hover { + background-position: 0px -86px; +} + +body.adminimal-menu div#admin-menu a, +body.adminimal-menu div#admin-menu span { + border: none !important; + font-family: "Open Sans", "Segoe UI", "Helvetica", sans-serif; + font-size: 12px; + line-height: 18px; +} + +body.adminimal-menu div#admin-menu a:hover { + background-color: #0074bd; + color: #fff; +} + +body.adminimal-menu #admin-menu .dropdown li li { + background-color: #1f1f1f; +} + +body.adminimal-menu #admin-menu .dropdown li li.expandable ul { + margin-top: -28px; +} + +body.adminimal-menu #admin-menu .dropdown li li > li.admin-menu-toolbar-category { + background: #fff !important; +} + +body.adminimal-menu #admin-menu .dropdown li li li:hover, +body.adminimal-menu #admin-menu .dropdown li:hover { + background: #0074bd !important; +} + +body.adminimal-menu #admin-menu .dropdown a { + border-right: none; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-toolbar-category a { + line-height: 20px; +} + +body.adminimal-menu #admin-menu #admin-menu-wrapper .dropdown li li { + opacity: 1; +} + +body.adminimal-menu #admin-menu .dropdown li li:hover, +body.adminimal-menu #admin-menu .dropdown li li.iehover { + background-color: #333; +} + +body.adminimal-menu #admin-menu #admin-menu-wrapper .dropdown li li a { + border: none; +} + +body.adminimal-menu #admin-menu #admin-menu-wrapper .dropdown li li.expandable { + background: url("images/square.png") no-repeat scroll 145px 11px #1f1f1f; +} + +body.adminimal-menu #admin-menu #admin-menu-wrapper .dropdown li li.expandable a { + background: transparent !important; + padding-right: 25px; + width: 135px; +} + +body.adminimal-menu #admin-menu #admin-menu-wrapper .dropdown li li.expandable:hover { + background: url("images/square.png") no-repeat scroll 145px -83px #0074bd !important; +} +/* Shortcuts bar */ + +body.adminimal-menu div.toolbar-shortcuts { + float: left; +} + +body.adminimal-menu div.shortcut-toolbar div#toolbar div.toolbar-shortcuts ul.menu { + margin: 0; + padding: 0; +} + +body.adminimal-menu div.shortcut-toolbar div#toolbar div.toolbar-shortcuts ul.menu li { + float: left; + list-style: none outside none; + padding: 0; +} + +body.adminimal-menu div.shortcut-toolbar div#toolbar a#edit-shortcuts { + float: right; + line-height: 18px; + padding: 5px 10px; +} + +body.adminimal-menu div.shortcut-toolbar div#toolbar a#edit-shortcuts:hover { + text-decoration: none; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-action a { + border: none !important; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-action:first-child a { + background: #444; + padding: 5px 10px; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-action:first-child a:hover { + background: #b73939; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-action.admin-menu-users { + border-left: 1px solid #000; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-action.admin-menu-users a:hover { + background: #0074BD; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-action.admin-menu-account a { + background: #4d8f46 !important; + border: medium none; + padding: 5px 10px; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-action.admin-menu-account a:hover { + background: #277d1e !important; +} + +body.adminimal-menu #admin-menu #admin-menu-wrapper div#toolbar div.toolbar-shortcuts ul li a { + background: url("images/shortcut.png") no-repeat scroll 7px 7px transparent; + border-radius: 0 0 0 0; + display: block; + margin-right: 0; + padding: 5px 10px; + text-indent: 16px; +} + +body.adminimal-menu #admin-menu #admin-menu-wrapper div#toolbar div.toolbar-shortcuts ul li a:hover { + background-color: #0074bd; + background-position: 7px -78px; +} + +body.adminimal-menu #admin-menu .admin-menu-search input { + background: none no-repeat scroll right center #444; + border: medium none; + border-radius: 0 0 0 0; + color: #999999; + font-size: 12px; + margin: 0 !important; + outline: medium none; + padding: 5px 22px 3px 8px; + width: 110px; + height: 20px; +} + +body.adminimal-menu #admin-menu .admin-menu-search input:focus, #admin-menu .admin-menu-search input:hover, #admin-menu .admin-menu-search input:active { + background: none no-repeat scroll right center #888; + color: #eee; +} + +body.adminimal-menu li.admin-menu-search:hover { + background: transparent !important; +} + +body.adminimal-menu #admin-menu li.highlight { + background-color: #ef6114 !important; + animation: blink 0.5s ease infinite; + -moz-animation: blink 0.5s ease infinite; + -webkit-animation: blink 0.5s ease infinite; + -o-animation: blink 0.5s ease infinite; +} + +body.adminimal-menu #admin-menu li.highlight > a { + border-color: #ef6114 !important; + color: #fff !important; +} + +/* Newline render mode */ +body.adminimal-menu.admin-menu.menu-render-newline div#admin-menu div#admin-menu-wrapper div.shortcut-toolbar { + clear: both; + border-top: 1px solid #000; +} + +body.adminimal-menu.admin-menu.menu-render-newline { + margin-top: 56px !important; +} + +body.adminimal-menu.admin-menu.menu-render-newline #overlay-container, body.adminimal-menu.admin-menu.newline .overlay-modal-background, body.adminimal-menu.admin-menu.newline .overlay-element, body.adminimal-menu.admin-menu.newline #overlay { + padding-top: 30px !important; +} + +/* Collapsed render mode */ +body.adminimal-menu.admin-menu.menu-render-collapsed div.shortcut-toolbar div#toolbar div.toolbar-shortcuts ul.menu { + position: absolute; +} + +body.adminimal-menu.admin-menu.menu-render-collapsed div.shortcut-toolbar div#toolbar div.toolbar-shortcuts ul.menu li { + float: none; + display: none; + border: none; +} + +body.adminimal-menu.admin-menu.menu-render-collapsed div.shortcut-toolbar div#toolbar div.toolbar-shortcuts ul.menu li.label { + display: block; + cursor: default; +} + +body.adminimal-menu.admin-menu.menu-render-collapsed div.shortcut-toolbar div#toolbar div.toolbar-shortcuts ul.menu li.label a:hover { + background: url("images/shortcut.png") no-repeat scroll 7px 7px #202020 !important; + color: #EEEEEE !important; +} + +body.adminimal-menu.admin-menu.menu-render-collapsed div.shortcut-toolbar div#toolbar div.toolbar-shortcuts ul.menu:hover li { + display: block; + background: #202020; +} + + +/* Dropdown render mode */ +body.adminimal-menu.admin-menu.menu-render-dropdown .toolbar-shortcuts select#shortcut-menu { + -webkit-appearance: none; + background: url("images/shortcut.png") no-repeat scroll 7px 7px #222222; + border: medium none; + color: #EEEEEE; + font-family: "Open Sans", "Segoe UI", "Helvetica", sans-serif; + font-size: 12px; + padding: 5px 4px 4px 24px; +} + +body.adminimal-menu.admin-menu.menu-render-dropdown .toolbar-shortcuts select#shortcut-menu option:hover { + cursor: pointer; +} + +body.adminimal-menu.admin-menu.menu-render-dropdown .toolbar-shortcuts select#shortcut-menu option:first-child { + display: none; +} + +body.adminimal-menu #admin-menu .dropdown .admin-menu-tab { + background: #444; + padding-bottom: 2px; +} + + +/* Environment indicator 2.x */ +body.adminimal-menu #admin-menu #environment-indicator { + text-shadow: none; +} + +body.adminimal-menu #admin-menu #environment-indicator .environment-indicator-name { + background-image: none; + border-left: 1px solid #323232; + border-radius: 0; + font-size: 12px; + line-height: 18px; + padding: 5px 10px; +} diff --git a/sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.info b/sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.info new file mode 100644 index 0000000000..cf0ec8daf4 --- /dev/null +++ b/sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.info @@ -0,0 +1,12 @@ +name = Administration menu Adminimal Theme +description = Clean and minimal theme for the administration menu module. +package = Administration +core = 7.x +dependencies[] = admin_menu + +; Information added by Drupal.org packaging script on 2014-01-27 +version = "7.x-1.5" +core = "7.x" +project = "adminimal_admin_menu" +datestamp = "1390792706" + diff --git a/sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.install b/sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.install new file mode 100644 index 0000000000..f195a9dbaf --- /dev/null +++ b/sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.install @@ -0,0 +1,80 @@ +Administration menu Adminimal Theme module successfully enabled!
The core "Toolbar" module was automatically disabled to avoid double menu rendering. Disabling the Adminimal menu module will automatically re-enable the core toolbar module, so you have nothing to worry about.'), 'status'); + + // Let the database know that the module was disabled. + variable_set('adminimal_admin_menu_core-toolbar-disabled', TRUE); + + } + + // Check if Admin Toolbar theme is enabled. + if (module_exists('admin_menu_toolbar')) { + + // Disable the admin menu toolbar theme to avoid style issues. + module_disable(array('admin_menu_toolbar'), FALSE); + + // Display message to the administrator that the module is disabled. + drupal_set_message(t('Administration menu Adminimal Theme module successfully enabled!
Your old Administration menu Toolbar theme was automatically disabled to avoid styling issues. Disabling the Adminimal menu module will automatically re-enable your old toolbar theme, so you have nothing to worry about.'), 'status'); + + // Let the database know that the module was disabled. + variable_set('adminimal_admin_menu_toolbar-disabled', TRUE); + + } +} + +/** + * Implements hook_disable(). + */ +function adminimal_admin_menu_disable() { + + // Check if core "Toolbar" module was disabled by adminimal menu. + if (variable_get('adminimal_admin_menu_core-toolbar-disabled', FALSE)) { + + // If true, re-enable the "Administration menu Toolbar style" module. + module_enable(array('toolbar'), FALSE); + + // Display message to the administrator that the module is disabled. + drupal_set_message(t('Administration menu Adminimal Theme module successfully disabled!
The core "Toolbar" module was automatically re-enabled.'), 'status'); + + } + + // Check if "Administration menu Toolbar style" was disabled by this module. + if (variable_get('adminimal_admin_menu_toolbar-disabled', FALSE)) { + + // If true, re-enable the "Administration menu Toolbar style" module. + module_enable(array('admin_menu_toolbar'), FALSE); + + // Display message to the administrator that the module is disabled. + drupal_set_message(t('Administration menu Adminimal Theme module successfully disabled!
The old Toolbar theme was automatically re-enabled.'), 'status'); + + } +} + +/** + * Implements hook_uninstall(). + */ +function adminimal_admin_menu_uninstall() { + + // Clean up the module variables from database after uninstall. + variable_del('adminimal_admin_menu_toolbar-disabled'); + variable_del('adminimal_admin_menu_core-toolbar-disabled'); + variable_del('adminimal_admin_menu_render'); + +} diff --git a/sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.js b/sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.js new file mode 100644 index 0000000000..4c4340bbe0 --- /dev/null +++ b/sites/all/modules/custom/adminimal_admin_menu/adminimal_admin_menu.js @@ -0,0 +1,62 @@ +(function($) { + +Drupal.admin = Drupal.admin || {}; +Drupal.admin.behaviors = Drupal.admin.behaviors || {}; + +/** + * @ingroup admin_behaviors + * @{ + */ + +/** + * Apply active trail highlighting based on current path. + * + * @todo Not limited to toolbar; move into core? + */ +Drupal.admin.behaviors.toolbarActiveTrail = function (context, settings, $adminMenu) { + if (settings.admin_menu.toolbar && settings.admin_menu.toolbar.activeTrail) { + $adminMenu.find('> div > ul > li > a[href="' + settings.admin_menu.toolbar.activeTrail + '"]').addClass('active-trail'); + } +}; + +/** + * @} End of "ingroup admin_behaviors". + */ + +Drupal.admin.behaviors.shorcutcollapsed = function (context, settings, $adminMenu) { + + // Create the dropdown base + $("
  • "+Drupal.t('Shortcuts')+"
  • ").prependTo("body.menu-render-collapsed div.toolbar-shortcuts ul"); + +} + +Drupal.admin.behaviors.shorcutselect = function (context, settings, $adminMenu) { + + // Create the dropdown base + $("').appendTo(this.element); + + close.mousedown(function() { + self.remove(item); + }); + }; + + Drupal.autocomplete_deluxe.MultipleWidget.Item.prototype.remove = function() { + this.element.remove(); + var values = this.widget.valueForm.val(); + var escapedValue = Drupal.autocomplete_deluxe.escapeRegex( this.item.value ); + var regex = new RegExp('()*""' + escapedValue + '""()*', 'gi'); + this.widget.valueForm.val(values.replace(regex, '')); + delete this.widget.items[this.value]; + }; + + Drupal.autocomplete_deluxe.MultipleWidget.prototype.setup = function() { + var jqObject = this.jqObject; + var parent = jqObject.parents('.autocomplete-deluxe-container'); + var value_container = parent.next(); + var value_input = value_container.find('input'); + var items = this.items; + var self = this; + this.valueForm = value_input; + + // Override the resize function, so that the suggestion list doesn't resizes + // all the time. + var autocompleteDataKey = typeof(this.jqObject.data('autocomplete')) === 'object' ? 'autocomplete' : 'ui-autocomplete'; + + jqObject.data(autocompleteDataKey)._resizeMenu = function() {}; + + jqObject.show(); + + value_container.hide(); + + // Add the default values to the box. + var default_values = value_input.val(); + default_values = $.trim(default_values); + default_values = default_values.substr(2, default_values.length-4); + default_values = default_values.split('"" ""'); + + for (var index in default_values) { + var value = default_values[index]; + if (value != '') { + // If a terms is encoded in double quotes, then the label should have + // no double quotes. + var label = value.match(/["][\w|\s|\D|]*["]/gi) !== null ? value.substr(1, value.length-2) : value; + var item = { + label : label, + value : value + }; + var item = new Drupal.autocomplete_deluxe.MultipleWidget.Item(self, item); + item.element.insertBefore(jqObject); + items[item.value] = item; + } + } + + jqObject.addClass('autocomplete-deluxe-multiple'); + parent.addClass('autocomplete-deluxe-multiple'); + + + // Adds a value to the list. + this.addValue = function(ui_item) { + var item = new Drupal.autocomplete_deluxe.MultipleWidget.Item(self, ui_item); + item.element.insertBefore(jqObject); + items[ui_item.value] = item; + var new_value = ' ' + self.wrapper + ui_item.value + self.wrapper; + var values = value_input.val(); + value_input.val(values + new_value); + jqObject.val(''); + }; + + parent.mouseup(function() { + jqObject.autocomplete('search', ''); + jqObject.focus(); + }); + + jqObject.bind("autocompleteselect", function(event, ui) { + self.addValue(ui.item); + jqObject.width(25); + // Return false to prevent setting the last term as value for the jqObject. + return false; + }); + + jqObject.bind("autocompletechange", function(event, ui) { + jqObject.val(''); + }); + + jqObject.blur(function() { + var last_element = jqObject.parent().children('.autocomplete-deluxe-item').last(); + last_element.removeClass('autocomplete-deluxe-item-focus'); + var value = jqObject.val(); + if(value != '') { + var ui_item = { + label: value, + value: value + }; + self.addValue(ui_item); + } + }); + + var clear = false; + + jqObject.keypress(function (event) { + var value = jqObject.val(); + // If a comma was entered and there is none or more then one comma,or the + // enter key was entered, then enter the new term. + if ((event.which == self.delimiter && (value.split('"').length - 1) != 1) || (event.which == 13 && jqObject.val() != "")) { + value = value.substr(0, value.length); + if (typeof self.items[value] == 'undefined' && value != '') { + var ui_item = { + label: value, + value: value + }; + self.addValue(ui_item); + } + clear = true; + if (event.which == 13) { + return false; + } + } + + // If the Backspace key was hit and the input is empty + if (event.which == 8 && value == '') { + var last_element = jqObject.parent().children('.autocomplete-deluxe-item').last(); + // then mark the last item for deletion or deleted it if already marked. + if (last_element.hasClass('autocomplete-deluxe-item-focus')) { + var value = last_element.children('input').val(); + self.items[value].remove(self.items[value]); + jqObject.autocomplete('search', ''); + } else { + last_element.addClass('autocomplete-deluxe-item-focus'); + } + } else { + // Remove the focus class if any other key was hit. + var last_element = jqObject.parent().children('.autocomplete-deluxe-item').last(); + last_element.removeClass('autocomplete-deluxe-item-focus'); + } + }); + + jqObject.autoGrowInput({ + comfortZone: 50, + minWidth: 10, + maxWidth: 460 + }); + + + jqObject.keyup(function (event) { + if (clear) { + // Trigger the search, so it display the values for an empty string. + jqObject.autocomplete('search', ''); + jqObject.val(''); + clear = false; + // Return false to prevent entering the last character. + return false; + } + }); + }; +})(jQuery); diff --git a/sites/all/modules/custom/autocomplete_deluxe/autocomplete_deluxe.module b/sites/all/modules/custom/autocomplete_deluxe/autocomplete_deluxe.module new file mode 100755 index 0000000000..a1efa261e1 --- /dev/null +++ b/sites/all/modules/custom/autocomplete_deluxe/autocomplete_deluxe.module @@ -0,0 +1,400 @@ + array( + 'label' => t('Autocomplete Deluxe'), + 'field types' => array('taxonomy_term_reference'), + 'settings' => array( + 'size' => 60, + 'autocomplete_deluxe_path' => 'autocomplete_deluxe/taxonomy', + ), + 'behaviors' => array( + 'multiple values' => FIELD_BEHAVIOR_CUSTOM, + ), + ), + ); +} + +/** + * Custom taxonomy callback, which also accepts an empty string search. + */ +function autocomplete_deluxe_taxonomy_callback($field_name, $tags_typed = '', $limit = 10) { + $field = field_info_field($field_name); + $use_synonyms = !empty($_GET['synonyms']); + + // The user enters a comma-separated list of tags. We only autocomplete the last tag. + $tags_typed = drupal_explode_tags($tags_typed); + $tag_last = drupal_strtolower(array_pop($tags_typed)); + + $matches = array(); + + // Part of the criteria for the query come from the field's own settings. + $vids = array(); + $vocabularies = taxonomy_vocabulary_get_names(); + foreach ($field['settings']['allowed_values'] as $tree) { + // If the content taxonomy setting content_taxonomy_ignore_in_suggestions + // is set, then the vocabulary is ignored. + if (empty($tree['content_taxonomy_ignore_in_suggestions'])) { + $vids[] = $vocabularies[$tree['vocabulary']]->vid; + } + } + + $query = db_select('taxonomy_term_data', 't'); + $query->addTag('translatable'); + $query->addTag('term_access'); + + if (module_exists('synonyms') && !empty($use_synonyms)) { + $query->leftJoin('field_data_synonyms_synonym', 'fdss', 'fdss.entity_id = t.tid'); + } + + if ($tag_last != '') { + // Do not select already entered terms. + if (!empty($tags_typed)) { + $query->condition('t.name', $tags_typed, 'NOT IN'); + } + // Select rows that match by term name. + $query + ->fields('t', array('tid', 'name')) + ->condition('t.vid', $vids); + + if (module_exists('synonyms') && !empty($use_synonyms)) { + $or = db_or(); + $or->condition('fdss.synonyms_synonym_value', '%' . db_like($tag_last) . '%', 'LIKE'); + $or->condition('t.name', '%' . db_like($tag_last) . '%', 'LIKE'); + $query->condition($or); + } + else { + $query->condition('t.name', '%' . db_like($tag_last) . '%', 'LIKE'); + } + + if (isset($limit) && $limit > 0) { + $query->range(0, $limit); + } + + $tags_return = $query->execute() + ->fetchAllKeyed(); + } + else { + $query + ->fields('t', array('tid', 'name')) + ->condition('t.vid', $vids); + + if (isset($limit) && $limit > 0) { + $query->range(0, $limit); + } + + $tags_return = $query->execute() + ->fetchAllKeyed(); + } + + $prefix = count($tags_typed) ? drupal_implode_tags($tags_typed) . ', ' : ''; + + $term_matches = array(); + foreach ($tags_return as $tid => $name) { + $n = $name; + // Term names containing commas or quotes must be wrapped in quotes. + if (strpos($name, ',') !== FALSE || strpos($name, '"') !== FALSE) { + $n = '"' . str_replace('"', '""', $name) . '"'; + } + $term_matches[$prefix . $n] = check_plain($name); + } + + drupal_json_output($term_matches); +} + +/** + * Returns all allowed terms for a field without any prefix. + */ +function autocomplete_deluxe_allowed_terms($field) { + $options = array(); + foreach ($field['settings']['allowed_values'] as $tree) { + if ($vocabulary = taxonomy_vocabulary_machine_name_load($tree['vocabulary'])) { + if ($terms = taxonomy_get_tree($vocabulary->vid, $tree['parent'])) { + foreach ($terms as $term) { + $options[$term->name] = $term->name; + } + } + } + } + return $options; +} + +/** + * Implements hook_field_widget_settings_form(). + */ +function autocomplete_deluxe_field_widget_settings_form($field, $instance) { + $widget = $instance['widget']; + $settings = $widget['settings']; + + $form['size'] = array( + '#type' => 'textfield', + '#title' => t('Size of textfield'), + '#default_value' => isset($settings['size']) ? $settings['size'] : 6, + '#element_validate' => array('_element_validate_integer_positive'), + '#required' => TRUE, + ); + $form['limit'] = array( + '#type' => 'textfield', + '#title' => t('Limit of the output.'), + '#description' => t('If set to zero no limit will be used'), + '#default_value' => isset($settings['limit']) ? $settings['limit'] : 10, + '#element_validate' => array('_element_validate_integer'), + ); + $form['min_length'] = array( + '#type' => 'textfield', + '#title' => t('Mininum length.'), + '#description' => t('The minimum length of characters to enter to open the suggestion list.'), + '#default_value' => isset($settings['min_length']) ? $settings['min_length'] : 0, + '#element_validate' => array('_element_validate_integer'), + ); + $form['delimiter'] = array( + '#type' => 'textfield', + '#title' => t('Delimiter.'), + '#description' => t('A character which should be used beside the enter key, to seperate terms.'), + '#default_value' => isset($settings['delimiter']) ? $settings['delimiter'] : '', + '#size' => 1, + ); + $form['not_found_message'] = array( + '#type' => 'textfield', + '#title' => t('Term not found message.'), + '#description' => t('A message text which will be displayed, if the entered term was not found.'), + '#default_value' => isset($settings['not_found_message']) ? $settings['not_found_message'] : "The term '@term' will be added.", + ); + + if (module_exists('synonyms')) { + $form['use_synonyms'] = array( + '#type' => 'checkbox', + '#title' => t('Allow synonyms'), + '#description' => t('Should users be able to search for synonyms of terms?'), + '#default_value' => isset($settings['use_synonyms']) ? $settings['use_synonyms'] : FALSE, + ); + } + return $form; +} + +/** + * Implodes the tags from the taxonomy module. + * + * This function is essentially the same as axonomy_implode_tags, with the + * difference, that it uses only a comma instead of a comma and a space to + * implode the tags. It will help keep problems with delimiters to a minimum. + */ +function autocomplete_deluxe_taxonomy_implode_tags($tags, $vid = NULL) { + $typed_tags = array(); + foreach ($tags as $tag) { + // Extract terms belonging to the vocabulary in question. + if (!isset($vid) || $tag->vid == $vid) { + // Make sure we have a completed loaded taxonomy term. + if (isset($tag->name)) { + // Commas and quotes in tag names are special cases, so encode 'em. + if (strpos($tag->name, ',') !== FALSE || strpos($tag->name, '"') !== FALSE) { + $tag->name = '"' . str_replace('"', '""', $tag->name) . '"'; + } + + $typed_tags[] = $tag->name; + } + } + } + return implode(',', $typed_tags); +} + +/** + * Implements hook_field_widget_error(). + */ +function autocomplete_deluxe_field_widget_error($element, $error, $form, &$form_state) { + form_error($element, $error['message']); +} + +/** + * Implements hook_field_widget_form(). + */ +function autocomplete_deluxe_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $element += array( + '#type' => 'autocomplete_deluxe', + '#size' => $instance['widget']['settings']['size'], + '#limit' => isset($instance['widget']['settings']['limit']) ? $instance['widget']['settings']['limit'] : 10, + '#min_length' => isset($instance['widget']['settings']['min_length']) ? $instance['widget']['settings']['min_length'] : 0, + '#use_synonyms' =>isset($instance['widget']['settings']['use_synonyms']) ? $instance['widget']['settings']['use_synonyms'] : 0, + '#delimiter' =>isset($instance['widget']['settings']['delimiter']) ? $instance['widget']['settings']['delimiter'] : '', + '#not_found_message' =>isset($instance['widget']['settings']['not_found_message']) ? $instance['widget']['settings']['not_found_message'] : "The term '@term' will be added.", + ); + + $multiple = $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED ? TRUE : FALSE; + + $tags = array(); + foreach ($items as $item) { + $tags[$item['tid']] = isset($item['taxonomy_term']) ? $item['taxonomy_term'] : taxonomy_term_load($item['tid']); + } + + $element['#element_validate'] = array('taxonomy_autocomplete_validate'); + $element += array( + '#multiple' => $multiple, + '#autocomplete_deluxe_path' => url($instance['widget']['settings']['autocomplete_deluxe_path'] . '/' . $field['field_name'], array('absolute' => TRUE)), + '#default_value' => autocomplete_deluxe_taxonomy_implode_tags($tags), + ); + + return $element; +} + +/** + * Generates the basic form elements and javascript settings. + */ +function autocomplete_deluxe_element_process($element) { + $element['#attached'] = array( + 'library' => array(array('system', 'ui.autocomplete'), array('system', 'ui.button')), + 'js' => array(drupal_get_path('module', 'autocomplete_deluxe') . '/autocomplete_deluxe.js'), + 'css' => array(drupal_get_path('module', 'autocomplete_deluxe') . '/autocomplete_deluxe.css'), + ); + // Workaround for problems with jquery css in seven theme. + if ($GLOBALS['theme'] == 'seven') { + $element['#attached']['css'][] = drupal_get_path('module', 'autocomplete_deluxe') . '/autocomplete_deluxe.seven.css'; + } + + $html_id = drupal_html_id('autocomplete-deluxe-input'); + + $element['#after_build'][] = 'autocomplete_deluxe_after_build'; + + // Set default options for multiple values. + $element['#multiple'] = isset($element['#multiple']) ? $element['#multiple'] : FALSE; + + $element['textfield'] = array( + '#type' => 'textfield', + '#size' => isset($element['#size']) ? $element['#size'] : '', + '#attributes' => array('class' => array('autocomplete-deluxe-form'), 'id' => array($html_id)), + '#default_value' => '', + '#prefix' => '
    ', + '#suffix' => '
    ', + ); + + $js_settings['autocomplete_deluxe'][$html_id] = array( + 'input_id' => $html_id, + 'multiple' => $element['#multiple'], + 'required' => $element['#required'], + 'limit' => isset($element['#limit']) ? $element['#limit'] : 10, + 'min_length' => isset($element['#min_length']) ? $element['#min_length'] : 0, + 'use_synonyms' => isset($element['#use_synonyms']) ? $element['#use_synonyms'] : 0, + 'delimiter' => isset($element['#delimiter']) ? $element['#delimiter'] : '', + 'not_found_message' => isset($element['#not_found_message']) ? $element['#not_found_message'] : "The term '@term' will be added.", + ); + + if (isset($element['#autocomplete_deluxe_path'])) { + if (isset($element['#default_value'])) { + // Split on the comma only if that comma has zero, or an even number of + // quotes in ahead of it. + // http://stackoverflow.com/questions/1757065/java-splitting-a-comma-separated-string-but-ignoring-commas-in-quotes + $default_value = preg_replace('/,(?=([^\"]*\"[^\"]*\")*[^\"]*$)/i', '"" ""', $element['#default_value']); + $default_value = '""' . $default_value . '""'; + } + else { + $default_value = ''; + } + + if ($element['#multiple']) { + $element['value_field'] = array( + '#type' => 'textfield', + '#attributes' => array('class' => array('autocomplete-deluxe-value-field')), + '#default_value' => $default_value, + '#prefix' => '
    ', + '#suffix' => '
    ', + ); + $element['textfield']['#attributes']['style'] = array('display:none'); + } + else { + $element['textfield']['#default_value'] = isset($element['#default_value']) ? $element['#default_value'] : ''; + } + + $js_settings['autocomplete_deluxe'][$html_id] += array( + 'type' => 'ajax', + 'uri' => $element['#autocomplete_deluxe_path'], + ); + } + else { + // If there is no source (path or data), we don't want to add the js + // settings and so the functions will be abborted. + return $element; + } + $element['#attached']['js'][] = array('data' => $js_settings, 'type' => 'setting'); + $element['#tree'] = TRUE; + + return $element; +} + +/** + * Helper function to determine the value for a autocomplete deluxe form + * element. + */ +function autocomplete_deluxe_value(&$element, $input = FALSE, $form_state = NULL) { + // This runs before child elements are processed, so we cannot calculate the + // value here. But we have to make sure the value is an array, so the form + // API is able to proccess the children to set their values in the array. Thus + // once the form API has finished processing the element, the value is an + // array containing the child element values. Then finally the after build + // callback converts it back to the numeric value and sets that. + return array(); +} + +/** + * FAPI after build callback for the duration parameter type form. + * Fixes up the form value by applying the multiplier. + */ +function autocomplete_deluxe_after_build($element, &$form_state) { + // By default drupal sets the maxlength to 128 if the property isn't + // specified, but since the limit isn't useful in some cases, + // we unset the property. + unset($element['textfield']['#maxlength']); + + // Set the elements value from either the value field or text field input. + $element['#value'] = isset($element['value_field']) ? $element['value_field']['#value'] : $element['textfield']['#value']; + + if (isset($element['value_field'])) { + $element['#value'] = trim($element['#value']); + // Replace all double double quotes and space with a comma. This will allows + // us to keep entries in double quotes. + $element['#value'] = str_replace('"" ""', ',', $element['#value']); + $element['#value'] = str_replace('"" ""', ',', $element['#value']); + // Remove the double quotes at the beginning and the end from the first and + // the last term. + $element['#value'] = substr($element['#value'], 2, strlen($element['#value']) - 4); + + unset($element['value_field']['#maxlength']); + } + + + form_set_value($element, $element['#value'], $form_state); + return $element; +} + +/** + * Implements hook_element_info(). + */ +function autocomplete_deluxe_element_info() { + $types['autocomplete_deluxe'] = array( + '#input' => TRUE, + '#value_callback' => 'autocomplete_deluxe_value', + '#pre_render' => array('form_pre_render_conditional_form_element'), + '#process' => array('autocomplete_deluxe_element_process'), + ); + return $types; +} + +/** + * Implements hook_menu(). + */ +function autocomplete_deluxe_menu() { + $items['autocomplete_deluxe/taxonomy'] = array( + 'title' => 'Autocomplete deluxe taxonomy', + 'page callback' => 'autocomplete_deluxe_taxonomy_callback', + 'access arguments' => array('access content'), + 'type' => MENU_CALLBACK, + ); + return $items; +} diff --git a/sites/all/modules/custom/autocomplete_deluxe/autocomplete_deluxe.seven.css b/sites/all/modules/custom/autocomplete_deluxe/autocomplete_deluxe.seven.css new file mode 100644 index 0000000000..0bbe29edc8 --- /dev/null +++ b/sites/all/modules/custom/autocomplete_deluxe/autocomplete_deluxe.seven.css @@ -0,0 +1,89 @@ +@CHARSET "UTF-8"; + +/** + * JQuery UI style sheet fix for seven. + */ + +.ui-button { + border: 1px solid #cccccc; + background: #e6e6e6; +} + +.ui-state-hover, +.ui-state-focus { + border: 1px solid #bbbbbb; +} + +.ui-button.ui-state-active { + border: 1px solid #777777; + font-weight: bold; +} + +/** + * Corner radius + */ +.ui-corner-tl { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; +} + +.ui-corner-tr { + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; +} + +.ui-corner-bl { + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.ui-corner-br { + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.ui-corner-top { + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +.ui-corner-bottom { + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +.ui-corner-right { + -moz-border-radius-bottomright: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} + +.ui-corner-left { + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} + +.ui-corner-all { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} diff --git a/sites/all/modules/custom/autocomplete_deluxe/throbber.gif b/sites/all/modules/custom/autocomplete_deluxe/throbber.gif new file mode 100644 index 0000000000000000000000000000000000000000..4352e64e859bb5e4d2e438f00d9d34c1d27462d1 GIT binary patch literal 1336 zcmZ?wbhEHbQ4?wxw{`P%dE_uhYh4g^5*`~UYq@csXH5cvQ7KL`K~ zSNzZI=Nc01>=@u`q-Vg)2on0q!pa7ub%2-wGjt;xM?96htN#UJ%?T-6rgZtrY<|Ka1OPl_mB6Jg*5LIzfMpw})>Vz{+posxMR zi-3r`qS(tB$*%Owi{%D!oL792{%`J$H8TJ!WCqrdP3uc@?o?A_*6SBIA!xCfoBN~lRKL}M9M}TG4QR6P1VqX}3Jj+37jp#`NeKl+ z>&)2Oz@T087*cX=&L8M`3NOk?4psB${7@Fdqq+!*ZTY z`Gde>Nly`jfCh%+>s)6fl&%oVSz>6|tzodh26yaXCJl3e3{HlJ4mJh>J;4c@TugrF zoRVf0bY%3*eemdGkJ{S6#H*_hFti2t8t>X5u@a4`Pg3W6Zi}G>r{mjWjt}l|Vs6E2wzzH}p_^z{cIIH5S|2 z6hY&ot!Zh!lwNI(MKD3FrGLkhu79F)`sQP9GnyNb2j*RZOQ_8W&w&Nt1-WDZxkxUP zc|ZjeQUmg20azh*Lz1h2W*Bk}(2YvIBwqnVasya5n0yOtkek43@*VJoECE|U$pDk- z0C;b)RDdtQSKu3P1bhd67@LNMEr;V6_zC<1PROd+T(wxLR_nIgeQL9v+U+|YPub`D z?R1v?{@p-ex2b6_7~Btq_FG!cyxxPhwh!&?A3HlgiQ-{b*P$exhr_jwj#?!0ITou$ zqjgcNOVUL=evwFA_V-^VlUJ$Kl`Q{Br>`@a>umP#(9pkJ?)HBrd}D?~P=uIZf}_WFq-buqR(d4@sv}an33glcTtHyNwij!hrQy1N>XZWHo5iT a?x2dsu=XfsE%>|vwI@=vyN>h~Vek%yVatC2 literal 0 HcmV?d00001 diff --git a/sites/all/modules/custom/better_exposed_filters/CHANGELOG.txt b/sites/all/modules/custom/better_exposed_filters/CHANGELOG.txt new file mode 100644 index 0000000000..57dc261a60 --- /dev/null +++ b/sites/all/modules/custom/better_exposed_filters/CHANGELOG.txt @@ -0,0 +1,71 @@ + +Better Exposed Filters change log +--------------------------------- + +Better Exposed Filters 7.x-x.x xxxx-xx-xx +------------------------------------------ +Issue #1240238 by marvil07, Max Ka, gapple, chichilatte: Let use toggle links on the exposed form sorts. +by mikeker: Revamped automated tests. +by mikeker: Fixed (most) Drupal Coding Standards errors and warnings +Issue #1842494 by mikeker: Fixed Combined Sort Order - Rendered in Div of Submit Button. +Issue #1784424 by mikeker: Refactored getting existing and default values. +Issue #1666896 by Staratel: Fixed Filter captions on BEF settings form are empty if filter labels are empty. +Issue #1798350 by mikeker: Fixed: secondary options were using the filter label instead of ID. +By mikeker: Allow rewriting of filter values (similar to the rewrite combined sort option) +Issue #1673562 by buzkall, nedjo: Added Automatically select children in nested checkboxes option. +Issue #1813654 by elbahek, mikeker: Fixed Undefined offset notice on rendered page. +Issue #1627524 by rooby: Added the jQuery slider widget to BEF. +Issue #1873164 by mikeker: Fixed Taxonomy exposed filter links not linking to appropriate page. +By mikeker: Correctly handle hierarchical taxonomy filters when rewriting filter options. + +Better Exposed Filters 7.x-3.0-beta2 2012-09-13 +------------------------------------------------ +Issue #975376 by mikeker, gordon: Inital port. Note: only supports Views 3.x as there is no 2.x release planned for D7. +Issue #1109950 by mikeker, Francois LR: Fixes errors in taxonomy tree +Issue #1099528 by mikeker: Radio button labels not displayed +Issue #1128688 by sreynen: Select All/None not working on nested checkboxes +Issue #1111712 by mikeker: Adds Links as an option for filters +mikeker: Fixed attributes, select all/none issues +Issue #1120244 by mikeker: Fixed collapsible filter options +Issue #1132818 by mikeker: Allows more specific targeting of BEF options based on filter options +Issue #1162488 by klickreflex: Fixes incorrect HTML in nested displays +By mikeker: Added datepicker option +Issue #1194102 by dj1999: Adds BEF options to 'is all of' filters +Issue #1149254 by aaronbauman: Hides Apply button when exposed filters are set to hidden +Issue #1227168 by gionnibgud: Adds IDs to select_as_links filter options +Issue #1260194 by zhuber: Adds toggle functionality to filter links (added --author attribution in a later commit) +Issue #1099528 by Murz: Fixes incorrect depth of '- Any -' option +Issue #1241960 by mikeker: Fixes E_STRICT warning +Issue #1217204 by mikeker: Fixes Undefined index errors when BEF settings page is raised as a standalong page +Issue #1281348 by mikeker: form.js and collapse.js not being aggregated properly +Issue #1272694 by samhassell and mikeker: correctly sets form-item classes for wrapper divs +Issue #1290630 by d.clarke: Removes duplicated IDs from radio buttons +Issue #1289370 by mikeker: Gets Datepicker working again. Note: needs to be added to behaviors. +By mikeker: Added/Cleaned up highlight JS, moved datepicker JS to Drupal.behaviors +Issue #1289370 by ducktape: Adds support for Drupal's default date field and corrects missing JS file +Issue #1297418 by mikeker: Puts exposed operators inside fieldset +Issue #1283998 by mikeker: Added token support in description fields +Issue #1212744 by mikeker: Collapsible option for sort +Issue #1398048 by mikeker: Rewritable combined sort options +Issue #1439216 by KeyboardCowboy: Remove duplicate name attributes on checkboxes (W3C validation) +Issue #1548292 by richard.thomas: Use drupal_add_library() for datepicker option +Issue #1171952 by mikeker: Added single on/off checkbox support +Issue #1286378 by m4olivei: Fixes link filter state being list when non-link filter is used +Issue #1362344 by mikeker, arkz: Adds option to put exposed form elements in a secondary options fieldset. + +Better Exposed Filters 6.x-x.x xxxx-xx-xx +------------------------------------------ +#864614 by OxideInteractive: Fixes extra space in class attributes +#874978 by vosechu: select_as_checkboxes now respects #default_value +#812778 by mikeker: Fixes problem with "Show hierarchy in dropdown enabled" +#811954 by pivica: Fixes duplicate Select All/None links with multiple Behavior executions +#657148 by mikeker: Adds support for exposed sort manipulation +#965388 by mikeker: Adds support for collapsible fieldsets +#965388 by mikeker: Adds support for collapsible fieldsets +mikeker: Adds nested list display for hierarchical taxonomy filters +#894312 by kenorb, mikeker: Adds links as a BEF option +#1006716 by attiks: Corrects
    ', + ); + } + + // Default classes for outer wrapper. + if ($wrapper_key == 'ow') { + $form['ft'][$wrapper_key . '-def-cl'] = array( + '#type' => 'checkbox', + '#title' => t('Add default classes'), + '#default_value' => isset($field_settings[$wrapper_key . '-def-cl']) ? $field_settings[$wrapper_key . '-def-cl'] : FALSE, + '#suffix' => '', + '#states' => array( + 'visible' => array( + ':input[name$="[ft][' . $wrapper_key . ']"]' => array('checked' => TRUE), + ), + ), + ); + } + } + + // Add suffix + $form['ft']['suffix'] = array( + '#type' => 'textfield', + '#title' => t('Suffix'), + '#size' => '100', + '#description' => t('You can enter any html in here.'), + '#default_value' => isset($field_settings['suffix']) ? $field_settings['suffix'] : '', + '#prefix' => '
    ', + '#suffix' => '
    ', + ); + + // Another label needs some other stuff. + unset($form['ft']['lb']['#description']); + $form['ft']['lb']['#type'] = 'textfield'; + $form['ft']['lb']['#size'] = '10'; + $form['ft']['lb']['#attributes'] = array('class' => array('label-change')); + $form['ft']['lb']['#default_value'] = isset($field_settings['lb']) ? $field_settings['lb'] : ''; + + // Let other modules make modifications to the settings form as needed. + drupal_alter('ds_field_theme_functions_settings_form_alter', $form, $field_settings); +} + +/** + * Implements hook_ds_field_format_summary(). + */ +function ds_extras_ds_field_format_summary($field) { + if (isset($field['formatter_settings'])) { + foreach ($field['formatter_settings'] as $key => $value) { + if (!empty($value)) { + return t('Configured'); + break; + } + } + } + return t('Not configured'); +} + +/** + * Implements hook_ds_field_settings_form(). + */ +function ds_extras_ds_field_settings_form($field) { + $form = array(); + + // Switch field. + if (variable_get('ds_extras_switch_field') && $field['name'] == 'ds_switch_field') { + $entity_type = $field['entity_type']; + $bundle = $field['bundle']; + $view_mode = $field['view_mode']; + $settings = isset($field['formatter_settings']['vms']) ? $field['formatter_settings']['vms'] : array(); + $view_modes = ds_entity_view_modes($entity_type); + + $form['info'] = array( + '#markup' => t('Enter a label for the link for the view modes you want to switch to.
    Leave empty to hide link. They will be localized.'), + ); + + foreach ($view_modes as $key => $value) { + + $view_mode_settings = field_view_mode_settings($entity_type, $bundle); + $visible = !empty($view_mode_settings[$key]['custom_settings']); + + if ($visible) { + $form['vms'][$key] = array( + '#type' => 'textfield', + '#default_value' => isset($settings[$key]) ? $settings[$key] : '', + '#size' => 20, + '#title' => check_plain($value['label']), + ); + } + } + } + + return $form; +} + +/** + * Submit callback after Field UI submission of a views display. + */ +function ds_extras_vd_field_ui_submit($form, &$form_state) { + // Add the 'type' key to the extra title key so we can ditch the notice. + $form_state['values']['fields']['title']['type'] = 'hidden'; +} + +/** + * Submit callback: manage block regions. + */ +function ds_extras_block_submit($form, &$form_state) { + + // Create new region. + if (!empty($form_state['values']['additional_settings']['region_to_block']['new_block_region'])) { + + // Get the entity_type, bundle and view mode. + $entity_type = $form['#entity_type']; + $bundle = $form['#bundle']; + $view_mode = $form['#view_mode']; + + $block = array( + 'title' => $form_state['values']['additional_settings']['region_to_block']['new_block_region'], + 'info' => "{$entity_type}_{$bundle}_{$view_mode}", + ); + + $block_key = $form_state['values']['additional_settings']['region_to_block']['new_block_region_key']; + $region_blocks = variable_get('ds_extras_region_blocks', array()); + $region_blocks[$block_key] = $block; + variable_set('ds_extras_region_blocks', $region_blocks); + } + + // Remove a region. + if (isset($form_state['values']['additional_settings']['region_to_block']['remove_block_region'])) { + $variable_set = FALSE; + $region_blocks = variable_get('ds_extras_region_blocks', array()); + $remove = $form_state['values']['additional_settings']['region_to_block']['remove_block_region']; + foreach ($remove as $key => $value) { + if ($key === $value) { + $variable_set = TRUE; + if (module_exists('block')) { + db_delete('block') + ->condition('delta', $key) + ->condition('module', 'ds_extras') + ->execute(); + } + unset($region_blocks[$key]); + } + } + + if ($variable_set) { + variable_set('ds_extras_region_blocks', $region_blocks); + } + } +} + +/** + * Return unique region to block. + */ +function ds_extras_region_to_block_unique($name) { + $region_blocks = variable_get('ds_extras_region_blocks', array()); + $value = strtr($name, array('-' => '_')); + return isset($region_blocks[$value]) ? TRUE : FALSE; +} + +/** + * Helper function to show the page title options. + */ +function _ds_extras_page_title_options($settings, $entity_type) { + + $return['page_option_type'] = array( + '#type' => 'select', + '#title' => t('Page title'), + '#options' => array( + '0' => t('Show'), + '1' => t('Hide'), + '2' => t('Manually set'), + ), + '#default_value' => isset($settings['hide_page_title']) ? $settings['hide_page_title'] : FALSE, + '#weight' => 100, + ); + + // Display Suite Views currently only supports hiding the page title. + if ($entity_type == 'ds_views') { + unset($return['page_option_type']['#options'][2]); + } + + $contexts = ds_get_entity_context($entity_type); + $rows = array(); + foreach ($contexts as $context) { + foreach (ctools_context_get_converters('%' . check_plain($context->keyword) . ':', $context) as $keyword => $title) { + $rows[] = array( + check_plain($keyword), + t('@identifier: @title', array('@title' => $title, '@identifier' => $context->identifier)), + ); + } + } + + $return['page_option_title'] = array( + '#type' => 'textfield', + '#title' => t('Title'), + '#default_value' => isset($settings['page_option_title']) ? $settings['page_option_title'] : '', + '#description' => t('The title, you may use substitutions in this title.'), + '#weight' => 101, + '#access' => $entity_type != 'ds_views', + '#states' => array( + 'visible' => array( + array(':input[name="page_option_type"]' => array('value' => '2')), + array(':input[name="additional_settings[ds_page_title][ds_page_title_options][page_option_type]"]' => array('value' => '2')), + ), + ), + ); + + $header = array(t('Keyword'), t('Value')); + $return['page_option_contexts'] = array( + '#type' => 'fieldset', + '#title' => t('Substitutions'), + // Doesn't work because of http://drupal.org/node/1015798 + //'#collapsible' => TRUE, + //'#collapsed' => TRUE, + '#value' => theme('table', array('header' => $header, 'rows' => $rows)), + '#weight' => 102, + '#access' => $entity_type != 'ds_views', + '#states' => array( + 'visible' => array( + array(':input[name="page_option_type"]' => array('value' => '2')), + array(':input[name="additional_settings[ds_page_title][ds_page_title_options][page_option_type]"]' => array('value' => '2')), + ), + ), + ); + + return $return; +} diff --git a/sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.pages.inc b/sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.pages.inc new file mode 100644 index 0000000000..ff8bf0c52d --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.pages.inc @@ -0,0 +1,72 @@ +title); + $uri = entity_uri('node', $node); + // Set the node path as the canonical URL to prevent duplicate content. + drupal_add_html_head_link(array('rel' => 'canonical', 'href' => url($uri['path'], $uri['options'])), TRUE); + // Set the non-aliased path as a default shortlink. + drupal_add_html_head_link(array('rel' => 'shortlink', 'href' => url($uri['path'], array_merge($uri['options'], array('alias' => TRUE)))), TRUE); + + // Update the history table, stating that this user viewed this node. + node_tag_new($node); + + // For markup consistency with other pages, use node_view_multiple() rather than node_view(). + $view_mode = (!empty($node->ds_switch)) ? $node->ds_switch : 'full'; + + // It's also possible to use $_GET['v'] to switch view modes. + if (isset($_GET['v']) && !empty($_GET['v'])) { + $view_mode = $_GET['v']; + } + drupal_static('ds_extras_view_mode', $view_mode); + return node_view_multiple(array($node->nid => $node), $view_mode); +} + +/** + * Menu callback: switches to another view mode inline. + */ +function ds_switch_view_mode_inline() { + + $content = ''; + $status = TRUE; + $error = FALSE; + + $id = $_REQUEST['id']; + $view_mode = $_REQUEST['view_mode']; + $entity_type = $_REQUEST['entity_type']; + $entity = entity_load($entity_type, array($id)); + + if (!isset($entity[$id])) { + $status = FALSE; + $error = t('Content was not found.'); + } + else { + if (node_access('view', $entity[$id])) { + $element = node_view($entity[$id], $view_mode); + $content = drupal_render($element); + } + else { + $error = t('Access denied'); + } + } + + drupal_add_http_header('Content-Type', 'text/javascript; charset=utf-8'); + print drupal_json_encode(array( + 'status' => $status, + 'content' => $content, + 'errorMessage' => $error, + )); + exit(); +} diff --git a/sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.registry.inc b/sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.registry.inc new file mode 100644 index 0000000000..38b1ac539a --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.registry.inc @@ -0,0 +1,141 @@ + $vd) { + $bundles[$vd->vd] = array( + 'label' => check_plain($vd->label), + 'admin' => array('path' => 'admin/structure/ds/vd/manage/' . $vd->vd), + ); + } + + // Register a views entity on behalf of Views. + $return = array( + 'ds_views' => array( + 'label' => t('Display Suite Views'), + 'bundles' => $bundles, + 'ds_display' => TRUE, + 'base table' => 'views_view', + 'entity keys' => array( + 'id' => 'vid', + 'label' => 'name', + ), + ), + ); + + return $return; +} + +/** + * Implements hook_theme_registry_alter(). + */ +function _ds_extras_theme_registry_alter(&$theme_registry) { + + // Add views preprocess layout. + if (variable_get('ds_extras_vd', FALSE)) { + $theme_registry['views_view']['preprocess functions'][] = 'ds_extras_preprocess_view_layout'; + } + + // Add process page function. + if (variable_get('ds_extras_hide_page_title', FALSE)) { + $theme_registry['page']['process functions'][] = 'ds_extras_process_page_title'; + } + + // Remove ds_preprocess_field in case field templates is not enabled. + if (!variable_get('ds_extras_field_template', FALSE) && isset($theme_registry['field']['preprocess functions'])) { + $key = array_search('ds_extras_preprocess_field', $theme_registry['field']['preprocess functions']); + if (!empty($key)) { + unset($theme_registry['field']['preprocess functions'][$key]); + } + } +} + +/** + * Implements hook_module_implements_alter(). + */ +function _ds_extras_module_implements_alter(&$implementations, $hook) { + + // Because it's possible to turn on/off features for DS extras, + // we'll unset hooks here if necessary which otherwhise do nothing at all. + + // Field template + $ft_hooks = array( + 'ds_field_settings_alter', + 'form_ds_classes_form_alter', + 'form_field_ui_field_edit_form_alter', + 'theme', + ); + if (!variable_get('ds_extras_field_template', FALSE) && in_array($hook, $ft_hooks)) { + unset($implementations['ds_extras']); + } + + // Region to block + $region_hooks = array( + 'ds_layout_region_alter', + 'field_attach_view_alter', + 'block_info', + 'block_view' + ); + if (!variable_get('ds_extras_region_to_block', FALSE) && in_array($hook, $region_hooks)) { + unset($implementations['ds_extras']); + } + + // Switch view mode + $switch_hooks = array( + 'form_node_form_alter', + ); + if (!variable_get('ds_extras_switch_view_mode', FALSE) && in_array($hook, $switch_hooks)) { + unset($implementations['ds_extras']); + } + + // Views displays + $vd_hooks = array( + 'entity_info', + 'ctools_plugin_api', + 'ds_fields_ui_alter', + ); + if (!variable_get('ds_extras_vd', FALSE) && in_array($hook, $vd_hooks)) { + unset($implementations['ds_extras']); + } +} diff --git a/sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.vd.inc b/sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.vd.inc new file mode 100644 index 0000000000..c5e6ec3a3a --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.vd.inc @@ -0,0 +1,274 @@ + $value) { + + // If no initial bundles were created, entity API will create + // one by default, so make sure we do not list that one. + if ($key == 'ds_views') { + continue; + } + + $row = array(); + $row[] = $value['label']; + $operations = l(t('Manage layout'), 'admin/structure/ds/vd/manage/' . $key . '/display'); + + if (isset($vd_settings[$key]) && $vd_settings[$key]->export_type == 1) { + $operations .= ' - ' . l(t('Remove'), 'admin/structure/ds/vd/manage/' . $key . '/remove'); + } + $row[] = $operations; + + $rows[$key] = $row; + } + } + + if (empty($rows)) { + $rows = array( + array(array('data' => t('No views selected.'), 'colspan' => '2')), + ); + } + + $variables = array( + 'header' => array(t('Title'), t('Operations')), + 'rows' => $rows, + ); + $build['list'] = array('#markup' => theme('table', $variables)); + $build['form'] = drupal_get_form('ds_extras_vd_bundle_form', $rows); + + return $build; +} + +/** + * Return the views select form to create a bundle. + */ +function ds_extras_vd_bundle_form($form, $form_state, $rows) { + + $options = array(); + $views = views_get_all_views(); + foreach ($views as $view_key => $view) { + + // Ignore disabled views. + if (isset($view->disabled) && $view->disabled) { + continue; + } + + $get_view = views_get_view($view->name); + + // Loop through all displays. + foreach ($view->display as $display_key => $display) { + // Ignore default displays. + if ($display_key == 'default') { + continue; + } + + $key = $view_key . '-' . $display_key; + $name = drupal_ucfirst($view->name) . ': ' . $display->display_title; + if (!isset($rows[$key])) { + $options[$key] = $name . ' (Views template)'; + } + $get_view->set_display($display_key); + if ($get_view->display_handler->uses_fields() && !isset($rows[$key . '-fields'])) { + $options[$key . '-fields'] = $name . ' (Fields)'; + } + } + } + + $form['vd'] = array( + '#title' => t('Select view'), + '#description' => t('Select a View that you want to manage with Display Suite. If a View uses fields you can also select that view to select a layout and position the fields. Note that html for the label and field are limited.'), + '#type' => 'select', + '#options' => $options, + ); + + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Add'), + ); + + return $form; +} + +/** + * Submit callback: save the new bundle. + */ +function ds_extras_vd_bundle_form_submit($form, &$form_state) { + + // Save new bundle. + $record = new stdClass(); + $record->vd = $form_state['values']['vd']; + $record->label = $form['vd']['#options'][$record->vd]; + drupal_write_record('ds_vd', $record); + + // Clear entity cache and field info fields cache. + cache_clear_all('field_info_fields', 'cache_field'); + cache_clear_all('entity_info', 'cache', TRUE); + + // Message and redirect. + drupal_set_message(t('Bundle @label has been added.', array('@label' => $record->label))); + $form_state['redirect'] = 'admin/structure/ds/vd'; +} + +/** + * Edit the display or remove a views display. + * + * @param $bundle + * The name of the bundle + * @param $action + * The action to take (edit or remove) + */ +function ds_extras_vd_manage($bundle = '', $action = '') { + $entity_info = entity_get_info('ds_views'); + + if (!empty($bundle) && isset($entity_info['bundles'][$bundle]) && $action == 'remove') { + return drupal_get_form('ds_extras_vd_bundle_remove', $bundle, $entity_info['bundles'][$bundle]['label']); + } + + if (!empty($bundle) && isset($entity_info['bundles'][$bundle]) && $action == 'display') { + return ds_extras_vd_field_ui($bundle); + } + + // Redirect to overview. + drupal_set_message(t('No view found to layout.')); + drupal_goto('admin/structure/ds/vd'); +} + +/** + * Return Field UI display screen for a view and bundle. + * + * @param $bundle + * The name of the bundle + */ +function ds_extras_vd_field_ui($bundle) { + + global $conf; + + // Use drupal_build_form instead of drupal_get_form. + $form_state = array(); + $arguments = array('ds_views', $bundle, 'default'); + $form_state['build_info']['args'] = $arguments; + $form_state['no_view_mode_suggestions'] = TRUE; + $form_state['no_panels'] = TRUE; + form_load_include($form_state, 'inc', 'field_ui', 'field_ui.admin'); + form_load_include($form_state, 'inc', 'ds_extras', 'includes/ds_extras.vd'); + + // Deny access to field_group if it exists. + if (module_exists('field_group')) { + $form_state['no_field_group'] = TRUE; + } + + // Build form. + $build = drupal_build_form('field_ui_display_overview_form', $form_state); + + // Deny access to view modes. + $build['additional_settings']['modes']['#access'] = FALSE; + + // Deny access to disabling blocks and regions. + $build['additional_settings']['ds_layouts']['hide_sidebars']['#access'] = FALSE; + + // Deny access to fields table if there's no layout. + if (!ds_get_layout('ds_views', $bundle, 'default')) { + $build['fields']['#access'] = FALSE; + } + + // Add additional validate function so we can remove notices. + if (module_exists('field_group')) { + array_unshift($build['#validate'], 'ds_vd_field_ui_fix_notices'); + } + + return $build; +} + +/** + * Implements hook_ds_fields_ui_alter(). + */ +function ds_extras_ds_fields_ui_alter(&$fields, $context) { + + // Check on the $bundle string to see if the key 2 exists. If it exists, + // we'll call the view to put the fields of this view on and remove + // the fields which comes default by ds_extras_field_extra_fields() + // and only work for the views template. + $bundle = $context['bundle']; + $fields_check = explode('-', $bundle); + + if (isset($fields_check[2])) { + + $field_copy = array( + 'title' => 'dummy', + 'field_type' => DS_FIELD_TYPE_IGNORE, + ); + + // Remove the view template fields. + $remove_fields = ds_extras_ds_fields_info('ds_views'); + foreach ($remove_fields['ds_views'] as $key => $properties) { + unset($fields[$key]); + } + + // Get the view and its fields. + $view = views_get_view($fields_check[0]); + $view->set_display($fields_check[1]); + $fields = $view->display_handler->get_field_labels(); + foreach ($fields as $field_key => $field_label) { + $field_properties = $field_copy; + $field_properties['title'] = $field_label; + $fields[$field_key] = $field_properties; + } + } +} + +/** + * Return confirm form to remove a views bundle + */ +function ds_extras_vd_bundle_remove($form, $form_state, $bundle, $label) { + $form['#bundle'] = $bundle; + $form['#label'] = $label; + return confirm_form($form, t('Are you sure you want to remove bundle @label ?', array('@label' => $label)), 'admin/structure/ds/vd'); +} + +/** + * Submit callback: remove a views bundle + */ +function ds_extras_vd_bundle_remove_submit($form, &$form_state) { + + $bundle = $form['#bundle']; + $label = $form['#label']; + + // Remove bundle. + db_delete('ds_vd') + ->condition('vd', $bundle) + ->execute(); + + // Remove layout. + db_delete('ds_layout_settings') + ->condition('bundle', $bundle) + ->execute(); + + // Remove settings. + db_delete('ds_field_settings') + ->condition('bundle', $bundle) + ->execute(); + + // Remove from bundle settings. + variable_del('field_bundle_settings_ds_views__' . $bundle); + + // Clear entity cache and field info fields cache. + cache_clear_all('field_info_fields', 'cache_field'); + cache_clear_all('entity_info', 'cache', TRUE); + + drupal_set_message(t('Bundle @label has been removed.', array('@label' => $label))); +} diff --git a/sites/all/modules/custom/ds/modules/ds_extras/js/ds_extras.admin.js b/sites/all/modules/custom/ds/modules/ds_extras/js/ds_extras.admin.js new file mode 100644 index 0000000000..f178d95494 --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_extras/js/ds_extras.admin.js @@ -0,0 +1,126 @@ +/** + * @file + * Javascript functionality for the Display Suite Extras administration UI. + */ + +(function ($) { + +Drupal.behaviors.DSExtrasSummaries = { + attach: function (context) { + + $('#edit-additional-settings-fs1', context).drupalSetSummary(function (context) { + var fieldtemplates = $('#edit-additional-settings-fs1-ds-extras-field-template', context); + + if (fieldtemplates.is(':checked')) { + var fieldtemplate = $('#edit-additional-settings-fs1-ft-default option:selected').text(); + return Drupal.t('Enabled') + ': ' + Drupal.t(fieldtemplate); + } + + return Drupal.t('Disabled'); + }); + + $('#edit-additional-settings-fs2', context).drupalSetSummary(function (context) { + var extra_fields = $('#edit-additional-settings-fs2-ds-extras-fields-extra', context); + + if (extra_fields.is(':checked')) { + return Drupal.t('Enabled'); + } + + return Drupal.t('Disabled'); + }); + + $('#edit-additional-settings-fs4', context).drupalSetSummary(function (context) { + var vals = []; + + $('input:checked', context).parent().each(function () { + vals.push(Drupal.checkPlain($.trim($('.option', this).text()))); + }); + + if (vals.length > 0) { + return vals.join(', '); + } + return Drupal.t('Disabled'); + }); + } +}; + +/** + * Field template. + */ +Drupal.behaviors.settingsToggle = { + attach: function (context) { + + // Bind on click. + $('.field-formatter-settings-edit-form', context).once('ds-ft', function() { + + var fieldTemplate = $(this); + + // Bind on field template select button. + fieldTemplate.find('.ds-extras-field-template').change(function() { + ds_show_expert_settings(fieldTemplate); + }); + + ds_show_expert_settings(fieldTemplate); + + }); + + // Show / hide settings on field template form. + function ds_show_expert_settings(element, open) { + field = element; + ft = $('.ds-extras-field-template', field).val(); + + if (ft == 'theme_ds_field_expert') { + // Show second, third, fourth, fifth and sixth label. + if ($('.lb .form-item:nth-child(1)', field).is(':visible')) { + $('.lb .form-item:nth-child(2), .lb .form-item:nth-child(3), .lb .form-item:nth-child(4), .lb .form-item:nth-child(5), .lb .form-item:nth-child(6)', field).show(); + } + // Remove margin from update button. + $('.ft-update', field).css({'margin-top': '-10px'}); + // Show wrappers. + $('.lbw, .ow, .fis, .fi', field).show(); + // Show prefix and suffix + $('.field-prefix', field).show(); + $('.field-suffix', field).show(); + } + else { + // Hide second, third, fourth, fifth and sixth label. + $('.lb .form-item:nth-child(2), .lb .form-item:nth-child(3), .lb .form-item:nth-child(4), .lb .form-item:nth-child(5), .lb .form-item:nth-child(6)', field).hide(); + // Add margin on update button. + $('.ft-update', field).css({'margin-top': '10px'}); + // Hide wrappers. + $('.lbw, .ow, .fis, .fi', field).hide(); + // Hide prefix and suffix + $('.field-prefix', field).hide(); + $('.field-suffix', field).hide(); + } + + // Colon. + if (ft == 'theme_field' || ft == 'theme_ds_field_reset') { + $('.colon-checkbox', field).parent().hide(); + } + else if ($('.lb .form-item:nth-child(1)', field).is(':visible')) { + $('.colon-checkbox', field).parent().show(); + } + + // CSS classes. + if (ft != 'theme_ds_field_expert' && ft != 'theme_ds_field_reset') { + $('.field-classes', field).show(); + } + else { + $('.field-classes', field).hide(); + } + } + + $('.label-change').change(function() { + var field = $(this).parents('tr'); + if ($('.field-template', field).length > 0) { + ft = $('.ds-extras-field-template', field).val(); + if (ft == 'theme_field' || ft == 'theme_ds_field_reset') { + $('.colon-checkbox', field).parent().hide(); + } + } + }); + } +}; + +})(jQuery); diff --git a/sites/all/modules/custom/ds/modules/ds_extras/js/ds_extras.js b/sites/all/modules/custom/ds/modules/ds_extras/js/ds_extras.js new file mode 100644 index 0000000000..f9215bd523 --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_extras/js/ds_extras.js @@ -0,0 +1,59 @@ +/** + * @file + * Javascript functionality for the Display Suite Extras module. + */ + +(function ($) { + +// Switch view mode inline with AJAX, for the 'View mode switcher' option. +Drupal.behaviors.DSExtrasSwitchViewmode = { + attach: function (context) { + + if ($('.switch-view-mode-field').length > 0) { + $('.switch-view-mode-field a').click(function() { + + // Create an object. + var link = $(this); + + // Get params from the class. + var params = $(this).attr('class').split('-'); + + $.ajax({ + type: 'GET', + url: Drupal.settings.basePath + 'ds-switch-view-mode', + data: {entity_type: params[0], view_mode: params[3], id: params[2]}, + dataType: 'json', + success: function (data) { + if (data.status) { + old_view_mode = params[1]; + wrapper = link.parents('.view-mode-' + old_view_mode); + Drupal.theme('DisplaySuiteSwitchViewmode', wrapper, data.content); + Drupal.attachBehaviors(); + } + else { + alert(data.errorMessage); + } + }, + error: function (xmlhttp) { + alert(Drupal.t('An HTTP error @status occurred.', {'@status': xmlhttp.status})); + } + }); + return false; + }); + } + } +}; + +/** + * Theme function for a replacing content of Display Suite content wrapper. + * + * @param wrapper + * The HTML object which needs to be replaced + * @param content + * The new content + */ +Drupal.theme.prototype.DisplaySuiteSwitchViewmode = function (wrapper, content) { + wrapper.replaceWith(content); +}; + +})(jQuery); diff --git a/sites/all/modules/custom/ds/modules/ds_format/ds_format.info b/sites/all/modules/custom/ds/modules/ds_format/ds_format.info new file mode 100644 index 0000000000..e0185c5ee0 --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_format/ds_format.info @@ -0,0 +1,13 @@ +name = "Display Suite Format" +description = "Provides the Display Suite Code format filter." +core = "7.x" +package = "Display Suite" +dependencies[] = ds +configure = admin/structure/ds/list/extras + +; Information added by Drupal.org packaging script on 2014-10-28 +version = "7.x-2.7" +core = "7.x" +project = "ds" +datestamp = "1414483431" + diff --git a/sites/all/modules/custom/ds/modules/ds_format/ds_format.install b/sites/all/modules/custom/ds/modules/ds_format/ds_format.install new file mode 100644 index 0000000000..a8f45ec9c1 --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_format/ds_format.install @@ -0,0 +1,46 @@ + 'ds_code'))->fetchField(); + // Add a Display Suite code text format, if it does not exist. Do this only for the + // first install (or if the format has been manually deleted) as there is no + // reliable method to identify the format in an uninstall hook or in + // subsequent clean installs. + if (!$format_exists) { + $ds_format = array( + 'format' => 'ds_code', + 'name' => 'Display Suite code', + // 'Plain text' format is installed with a weight of 10 by default. Use a + // higher weight here to ensure that this format will not be the default + // format for anyone. + 'weight' => 12, + 'filters' => array( + // Enable the DS evaluator filter. + 'ds_code' => array( + 'weight' => 0, + 'status' => 1, + ), + ), + ); + $ds_format = (object) $ds_format; + filter_format_save($ds_format); + + drupal_set_message(t('A Display Suite code text format has been created.', array('@ds-code' => url('admin/config/content/formats/' . $ds_format->format)))); + } +} + +/** + * Implements hook_disable(). + */ +function ds_format_disable() { + drupal_set_message(t('The Display Suite Format module has been disabled. Any existing content that was using the Display Suite filter will now be visible in plain text. This might pose a security risk by exposing sensitive information, if any, used in the PHP code.')); +} + diff --git a/sites/all/modules/custom/ds/modules/ds_format/ds_format.module b/sites/all/modules/custom/ds/modules/ds_format/ds_format.module new file mode 100644 index 0000000000..d7c9956b94 --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_format/ds_format.module @@ -0,0 +1,75 @@ + t('Display Suite evaluator'), + 'description' => t('This filter will only work in the Display Suite text format, machine name is ds_code. No other filters can be enabled either.'), + 'process callback' => 'ds_format_php_eval', + 'tips callback' => 'ds_format_filter_tips', + 'cache' => FALSE, + ); + return $filters; +} + +/** + * Tips callback for Display Suite php filter. + */ +function ds_format_filter_tips($filter, $format, $long = FALSE) { + global $base_url; + if ($long) { + $output = '

    ' . t('Using custom code with Display Suite') . '

    '; + $output .= t('Include <?php ?> tags when using PHP. The $entity object is available.'); + return $output; + } + else { + return t('You may post Display Suite code. You should include <?php ?> tags when using PHP. The $entity object is available.'); + } +} + +/** + * Wrapper function around PHP eval(). We don't use php_eval from + * the PHP module because custom fields might need properties from + * the current entity. + * + * @param $code + * The code to evaluate from the custom field. + * @param $object + * An object to use for evaluation. + * @return $output + * The output from eval. + */ +function ds_format_php_eval($code, $entity, $build = array()) { + global $theme_path, $theme_info, $conf; + + // Store current theme path. + $old_theme_path = $theme_path; + + // Restore theme_path to the theme, as long as ds_php_eval() executes, + // so code evaluted will not see the caller module as the current theme. + // If theme info is not initialized get the path from theme_default. + if (!isset($theme_info)) { + $theme_path = drupal_get_path('theme', $conf['theme_default']); + } + else { + $theme_path = dirname($theme_info->filename); + } + + ob_start(); + print eval('?>' . $code); + $output = ob_get_contents(); + ob_end_clean(); + + // Recover original theme path. + $theme_path = $old_theme_path; + + return $output; +} + diff --git a/sites/all/modules/custom/ds/modules/ds_forms/css/ds_forms.admin.css b/sites/all/modules/custom/ds/modules/ds_forms/css/ds_forms.admin.css new file mode 100644 index 0000000000..92e9c63722 --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_forms/css/ds_forms.admin.css @@ -0,0 +1,6 @@ +/** + * Refresh button on manage fields form. + */ +#edit-refresh { + display:none; +} \ No newline at end of file diff --git a/sites/all/modules/custom/ds/modules/ds_forms/ds_forms.info b/sites/all/modules/custom/ds/modules/ds_forms/ds_forms.info new file mode 100644 index 0000000000..eec9467f0d --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_forms/ds_forms.info @@ -0,0 +1,12 @@ +name = "Display Suite Forms" +description = "Manage the layout of forms in Display Suite." +core = "7.x" +package = "Display Suite" +dependencies[] = ds + +; Information added by Drupal.org packaging script on 2014-10-28 +version = "7.x-2.7" +core = "7.x" +project = "ds" +datestamp = "1414483431" + diff --git a/sites/all/modules/custom/ds/modules/ds_forms/ds_forms.install b/sites/all/modules/custom/ds/modules/ds_forms/ds_forms.install new file mode 100644 index 0000000000..51b1e36fe2 --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_forms/ds_forms.install @@ -0,0 +1,16 @@ +fields(array('weight' => 20)) + ->condition('name', 'ds_forms') + ->execute(); +} diff --git a/sites/all/modules/custom/ds/modules/ds_forms/ds_forms.module b/sites/all/modules/custom/ds/modules/ds_forms/ds_forms.module new file mode 100644 index 0000000000..ba8003b3fe --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_forms/ds_forms.module @@ -0,0 +1,239 @@ + 'form', + ); + + return $theme_functions; +} + +/** + * Implements hook_form_FORM_ID_alter(). + */ +function ds_forms_form_field_ui_field_overview_form_alter(&$form, &$form_state) { + + // Determine if this entity type is supported + if (_ds_forms_is_entity_type_supported($form['#entity_type'])) { + + // Add necessary variables for DS Field UI. + $form['#view_mode'] = 'form'; + $form_state['no_panels'] = TRUE; + $form_state['no_view_mode_suggestions'] = TRUE; + + // Make sure the refresh works. + if (!module_exists('field_group')) { + // This key is used to store the current updated field. + $form_state += array( + 'formatter_settings_edit' => NULL, + ); + // Add AJAX wrapper. + $form['fields']['#prefix'] = '
    '; + $form['fields']['#suffix'] = '
    '; + + // See field_ui.admin.inc for more details on refresh rows. + $form['refresh_rows'] = array('#type' => 'hidden'); + $form['refresh'] = array( + '#type' => 'submit', + '#value' => t('Refresh'), + '#op' => 'refresh_table', + '#submit' => array('field_ui_display_overview_multistep_submit'), + '#ajax' => array( + 'callback' => 'field_ui_display_overview_multistep_js', + 'wrapper' => 'field-display-overview-wrapper', + 'effect' => 'fade', + // The button stays hidden, so we hide the AJAX spinner too. Ad-hoc + // spinners will be added manually by the client-side script. + 'progress' => 'none', + ), + ); + $form['#attached']['css'][] = drupal_get_path('module', 'ds_forms') . '/css/ds_forms.admin.css'; + } + + // Attach js. + $form['#attached']['js'][] = drupal_get_path('module', 'ds_forms') . '/js/ds_forms.admin.js'; + + // Load Display Suite. + form_load_include($form_state, 'inc', 'ds', 'includes/ds.field_ui'); + ds_field_ui_fields_layouts($form, $form_state); + } +} + +/** + * Implements hook_form_alter(). + */ +function ds_forms_form_alter(&$form, &$form_state, $form_id) { + if ($ds_form = ds_build_load($form, $form_id)) { + if ($layout = ds_get_layout($ds_form->entity_type, $ds_form->bundle, 'form', FALSE)) { + // Add the theming function and add the layout as a class. + $form['#theme'] = array('ds_forms_custom_form'); + $class = strtr($layout['layout'], '_', '-'); + if ((isset($form['#attributes']['class']) && is_array($form['#attributes']['class'])) || !(isset($form['#attributes']['class']))) { + $form['#attributes']['class'][] = $class; + } + elseif (isset($form['#attributes']['class']) && is_string($form['#attributes']['class'])) { + $form['#attributes']['class'] .= ' ' . $class . ' '; + } + } + } +} + +/** + * Implements hook_field_widget_WIDGET_TYPE_form_alter(). + */ +function ds_forms_field_widget_field_collection_embed_form_alter(&$element, &$form_state, $context){ + if ($ds_form = ds_build_load($element, 'field_collection_embed')) { + if ($layout = ds_get_layout($ds_form->entity_type, $ds_form->bundle, 'form', FALSE)) { + // Add the theming function and add the layout as a class. + $element['#theme'] = array('ds_forms_custom_form'); + $element['#form_id'] = 'field_collection_embed'; + $class = strtr($layout['layout'], '_', '-'); + if ((isset($element['#attributes']['class']) && is_array($element['#attributes']['class'])) || !(isset($element['#attributes']['class']))) { + $element['#attributes']['class'][] = $class; + } + elseif (isset($element['#attributes']['class']) && is_string($element['#attributes']['class'])) { + $element['#attributes']['class'] .= ' ' . $class . ' '; + } + } + } +} +/** + * Helper function to determine if this form can be loaded. + */ +function ds_build_load($form, $form_id) { + $ds_form = FALSE; + + if (isset($form['#entity_type']) && isset($form['#bundle']) && $form_id != 'field_ui_field_overview_form' && $form_id != 'field_ui_display_overview_form' + && $form_id != 'field_ui_field_settings_form' && $form_id != 'field_ui_widget_type_form' && $form_id != 'field_ui_field_edit_form' && !preg_match('/^editablefields_form_/', $form_id)) { + $ds_form = new stdClass(); + $ds_form->entity_type = $form['#entity_type']; + $ds_form->bundle = $form['#bundle']; + } + + return $ds_form; +} + +/** + * Implements hook_preprocess_ds_forms_custom_form(). + */ +function ds_forms_preprocess_ds_forms_custom_form(&$vars) { + + $form = ds_build_load($vars['form'], $vars['form']['#form_id']); + if (!$form) { + return; + } + + $entity_type = $form->entity_type; + $bundle = $form->bundle; + + if ($layout = ds_get_layout($entity_type, $bundle, 'form', FALSE)) { + + // Theme hook suggestions. + $vars['theme_hook_suggestions'][] = $layout['layout']; + $vars['theme_hook_suggestions'][] = $layout['layout'] . '__' . $entity_type; + $vars['theme_hook_suggestions'][] = $layout['layout'] . '__' . $entity_type . '_' . $bundle; + + $form = &$vars['form']; + + // Add path to css file. + if (isset($layout['css'])) { + drupal_add_css($layout['path'] . '/' . $layout['layout'] . '.css'); + } + + // Add the hidden region. + $layout['regions']['hidden'] = 'Hidden'; + + // Create region variables based on the layout settings. + foreach ($layout['regions'] as $region_name => $region) { + + // Create the region content. + if ($region_name == 'hidden') { + ds_forms_render_region($form, $region_name, $layout); + } + else { + $vars[$region_name] = ds_forms_render_region($form, $region_name, $layout); + } + + // Add extras classes to the region. + $vars[$region_name . '_classes'] = !empty($layout['settings']['classes'][$region_name]) ? ' ' . implode(' ', $layout['settings']['classes'][$region_name]) : ''; + + // Add a wrapper to the region. + if (empty($layout['flexible'])) { + $vars[$region_name . '_wrapper'] = isset($layout['settings']['wrappers'][$region_name]) ? $layout['settings']['wrappers'][$region_name] : 'div'; + } + } + + // Add layout attributes if any + if (!empty($layout['settings']['layout_attributes'])) { + $vars['layout_attributes'] = ' ' . $layout['settings']['layout_attributes']; + } + else { + $vars['layout_attributes'] = ''; + } + + if (isset($layout['settings']['classes']['layout_class'])) { + foreach ($layout['settings']['classes']['layout_class'] as $layout_class) { + $vars['classes_array'][] = $layout_class; + } + } + + // Ensure there is a class + $vars['classes_array'][] = 'ds-form'; + + // Merge the classes into a string + $vars['classes'] = implode(' ', $vars['classes_array']); + + // Add a layout wrapper + $vars['layout_wrapper'] = isset($layout['settings']['layout_wrapper']) ? $layout['settings']['layout_wrapper'] : 'div'; + + // Add the rest of the form elements + $vars['drupal_render_children'] = drupal_render_children($vars['form']); + } +} + +/** + * Render a form region. + * + * @param $content + * An array of content fields. + * @param $region + * The name of region to render. + * @param $layout + * The layout definition. + */ +function ds_forms_render_region(&$content, $region, $layout) { + $output = ''; + + if (isset($layout['settings']['regions'][$region])) { + foreach ($layout['settings']['regions'][$region] as $key => $field) { + if ($region == 'hidden') { + $content[$field]['#access'] = FALSE; + } + else { + $output .= drupal_render($content[$field]); + } + } + } + return $output; +} + +/** + * Determines if this entity type is supported by ds_forms. + * + * Currently supports all fieldable entity types. + */ +function _ds_forms_is_entity_type_supported($entity_type) { + $info = entity_get_info($entity_type); + return !empty($info['fieldable']); +} + diff --git a/sites/all/modules/custom/ds/modules/ds_forms/js/ds_forms.admin.js b/sites/all/modules/custom/ds/modules/ds_forms/js/ds_forms.admin.js new file mode 100644 index 0000000000..e2ce468c44 --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_forms/js/ds_forms.admin.js @@ -0,0 +1,79 @@ + +(function($) { + +/** + * Attach behaviors. + */ +Drupal.behaviors.fieldUIFieldsFormsOverview = { + attach: function (context, settings) { + $('table#field-overview', context).once('field-field-overview', function() { + Drupal.fieldUIOverview.attach(this, settings.fieldUIRowsData, Drupal.fieldUIFieldOverview); + }); + } +}; + +/** + * Row handlers for the 'Manage fields' screen. + */ +Drupal.fieldUIFieldOverview = Drupal.fieldUIFieldOverview || {}; + +Drupal.fieldUIFieldOverview.ds = function (row, data) { + + this.row = row; + this.name = data.name; + this.region = data.region; + this.tableDrag = data.tableDrag; + + this.$regionSelect = $('select.ds-field-region', row); + this.$regionSelect.change(Drupal.fieldUIOverview.onChange); + + return this; +}; + +Drupal.fieldUIFieldOverview.ds.prototype = { + + /** + * Returns the region corresponding to the current form values of the row. + */ + getRegion: function () { + return this.$regionSelect.val(); + }, + + /** + * Reacts to a row being changed regions. + * + * This function is called when the row is moved to a different region, as a + * result of either : + * - a drag-and-drop action + * - user input in one of the form elements watched by the + * Drupal.fieldUIOverview.onChange change listener. + * + * @param region + * The name of the new region for the row. + * @return + * A hash object indicating which rows should be AJAX-updated as a result + * of the change, in the format expected by + * Drupal.fieldOverview.AJAXRefreshRows(). + */ + regionChange: function (region, recurse) { + + // Replace dashes with underscores. + region = region.replace('-', '_'); + + // Set the region of the select list. + this.$regionSelect.val(region); + + // Prepare rows to be refreshed in the form. + var refreshRows = {}; + refreshRows[this.name] = this.$regionSelect.get(0); + + // If a row is handled by field_group module, loop through the children. + if ($(this.row).hasClass('field-group') && $.isFunction(Drupal.fieldUIFieldOverview.group.prototype.regionChangeFields)) { + Drupal.fieldUIFieldOverview.group.prototype.regionChangeFields(region, this, refreshRows); + } + + return refreshRows; + } +}; + +})(jQuery); \ No newline at end of file diff --git a/sites/all/modules/custom/ds/modules/ds_search/css/ds_search.theme.css b/sites/all/modules/custom/ds/modules/ds_search/css/ds_search.theme.css new file mode 100644 index 0000000000..5f92595490 --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_search/css/ds_search.theme.css @@ -0,0 +1,4 @@ + +.ds-search-highlight { + background-color: yellow; +} \ No newline at end of file diff --git a/sites/all/modules/custom/ds/modules/ds_search/ds_search.info b/sites/all/modules/custom/ds/modules/ds_search/ds_search.info new file mode 100644 index 0000000000..3691de9990 --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_search/ds_search.info @@ -0,0 +1,13 @@ +name = "Display Suite Search" +description = "Extend the display options for search results for Drupal Core or Apache Solr." +core = "7.x" +package = "Display Suite" +dependencies[] = ds +configure = admin/structure/ds/list/search + +; Information added by Drupal.org packaging script on 2014-10-28 +version = "7.x-2.7" +core = "7.x" +project = "ds" +datestamp = "1414483431" + diff --git a/sites/all/modules/custom/ds/modules/ds_search/ds_search.install b/sites/all/modules/custom/ds/modules/ds_search/ds_search.install new file mode 100644 index 0000000000..2ed207768c --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_search/ds_search.install @@ -0,0 +1,32 @@ +'; + $output .= '
    ' . t('Display Suite defines its own search type for search. You need to enable it at !url when you are going to use Drupal core search. You do not have to enable and use it when using the Apachesolr module. Search results will be themed on the default Apachesolr pages.', array('!url' => l('search settings', 'admin/config/search/settings'))) . '
    '; + $output .= ''; + return $output; + } +} + +/** + * Implements hook_menu(). + */ +function ds_search_menu() { + $items = array(); + + $items['admin/structure/ds/list/search'] = array( + 'title' => 'Search', + 'description' => 'Configure search settings.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('ds_search_settings'), + 'access arguments' => array('admin_display_suite'), + 'file' => 'includes/ds_search.admin.inc', + 'type' => MENU_LOCAL_TASK, + ); + + return $items; +} + +/** + * Implements hook_theme(). + */ +function ds_search_theme() { + return array( + 'ds_search_page' => array(), + 'ds_search_group_by_type_settings' => array( + 'render element' => 'element', + 'file' => 'includes/ds_search.admin.inc', + ), + ); +} + +/** + * Search page theming. + */ +function theme_ds_search_page($build) { + + // Check on empty search results. + if (empty($build['search_results'])) { + + // Alter the title and extra variables. + if (!empty($build['search_title'])) { + $build['search_title']['#markup'] = '

    ' . t('Your search yielded no results') . '

    '; + unset($build['search_extra']); + } + + $build['search_empty'] = array('#markup' => search_help('search#noresults', drupal_help_arg())); + } + + $build['search_results']['#sorted'] = TRUE; + + return $build; +} + +/** + * Implements hook_ds_fields_info(). + */ +function ds_search_ds_fields_info($entity_type) { + $fields = array(); + + if ($entity_type == 'node') { + $fields['node']['search_snippet'] = array( + 'title' => t('Search snippet'), + 'field_type' => DS_FIELD_TYPE_FUNCTION, + 'function' => 'ds_search_snippet', + 'ui_limit' => array('*|' . variable_get('ds_search_view_mode', 'search_result')), + ); + $fields['node']['search_info'] = array( + 'title' => t('Search info'), + 'field_type' => DS_FIELD_TYPE_FUNCTION, + 'function' => 'ds_search_extra_info', + 'ui_limit' => array('*|' . variable_get('ds_search_view_mode', 'search_result')), + ); + } + + if (isset($fields[$entity_type])) { + return array($entity_type => $fields[$entity_type]); + } + + return; +} + +/** + * Returns the snippet field. + */ +function ds_search_snippet($field) { + // Apache Solr + if (isset($field['entity']->search_snippet)) { + return $field['entity']->search_snippet; + } + // Original node snippet + elseif (isset($field['entity']->snippet)) { + return $field['entity']->snippet; + } +} + +/** + * Returns the info field, just like default search. + */ +function ds_search_extra_info($field) { + $info = array(); + $info['user'] = theme('username', array('account' => $field['entity'])); + $info['date'] = format_date($field['entity']->changed, 'short'); + if (isset($field['entity']->search_extra) && is_array($field['entity']->search_extra)) { + $info = array_merge($info, $field['entity']->search_extra); + } + return implode(' - ', $info); +} + +/** + * Implements hook_search_info(). + */ +function ds_search_search_info() { + return array( + 'title' => 'Content', + 'path' => variable_get('ds_search_path', 'content'), + ); +} + +/** + * Implements hook_node_update_index(). + */ +function ds_search_update_index() { + ds_search_invoke_node_search('update_index'); +} + +/** + * Implements hook_search_status(). + */ +function ds_search_search_status() { + return ds_search_invoke_node_search('search_status'); +} + +/** + * Implements hook_search_execute(). + */ +function ds_search_search_execute($keys = NULL, $conditions = NULL) { + // Save the keys in case we need them later on. + ds_search_get_keys($keys); + + // We will call an extra function which handles the actual search. + // In some cases, we simply copied a lot from the original hook, + // because some modules already called drupal_render and were unsetting + // the #theme key. By using our own search info type, we can call + // hook_search_page ourselves and be as flexible as we need to be. + $ds_search_type = variable_get('ds_search_type', 'node') . '_ds_search_execute'; + + // Make sure the function exists. + if (function_exists($ds_search_type)) { + return $ds_search_type($keys, $conditions); + } +} + +/** + * Save or get the search keys. + */ +function ds_search_get_keys($keys = NULL) { + static $run, $saved_keys = FALSE; + + if (!$run) { + $run = TRUE; + $saved_keys = $keys; + } + else { + return $saved_keys; + } +} + +/** + * Invoke a given search hook on the node module. + * + * @param $hook + * Hook to invoke. + */ +function ds_search_invoke_node_search($hook) { + + $enabled_search_modules = variable_get('search_active_modules', array()); + + // If node search is enabled, core is invoking it. + if (isset($enabled_search_modules['node']) && $enabled_search_modules['node'] === 'node') { + return; + } + else { + $ds_search_type = variable_get('ds_search_type', 'node'); + if ($ds_search_type != 'node') { + return; + } + } + + return module_invoke('node', $hook); +} + +/** + * DS entity view callback. + * + * Straight copy from Entity API module with fallback to Drupal core + * view callbacks for nodes, files and maybe others later. + */ +function ds_entity_view_fallback($entity_type, $entities, $view_mode = 'full', $langcode = NULL, $page = NULL) { + + // Use the entity module in case it's enabled. + if (module_exists('entity')) { + return entity_view($entity_type, $entities, $view_mode, $langcode, $page); + } + else { + if ($entity_type == 'node') { + return node_view_multiple($entities, $view_mode); + } + elseif ($entity_type == 'file' && function_exists('file_view_multiple')) { + return file_view_multiple($entities, $view_mode); + } + } +} + +/** + * Implements hook_search_page(). + */ +function ds_search_search_page($results) { + + // Build shared variables. + $build = array('#type' => 'node'); + ds_build_shared_page_variables($build); + + $i = 0; + // Multi site Apache Solr support. + if (variable_get('ds_search_apachesolr_multisite') && variable_get('ds_search_type', 'node') == 'apachesolr_search') { + $build['search_results'] = $results; + } + else { + foreach ($results as $id => $result) { + // Use default search result theming for file in case it's configured. + if ($result->entity_type == 'file' && variable_get('ds_search_file_render', FALSE)) { + // Get the file type from the file entity module. We'll overwrite + // the bundle here then as that makes more sense as a suggestion. + if (function_exists('file_get_type')) { + $type = file_get_type($result); + $result->original_result['bundle'] = $type; + } + $build['search_results'][] = array( + '#weight' => $i++, + '#markup' => theme('search_result', array('result' => $result->original_result, 'module' => 'apachesolr_search')), + ); + continue; + } + $entity_type = isset($result->entity_type) ? $result->entity_type : 'node'; + $data = ds_entity_view_fallback($entity_type, array($result->entity_id => $result), variable_get('ds_search_view_mode', 'search_result')); + // Check that we got an actual result back. + if ($data) { + $data = reset($data); + $data[$result->entity_id]['#weight'] = $i++; + $build['search_results'][] = $data[$result->entity_id]; + } + } + } + + // Group by type. + if (variable_get('ds_search_group_by_type') && variable_get('ds_search_group_by_type_settings') && !empty($build['search_results'])) { + _ds_search_group_by_type($build); + } + else { + // Provide zebra striping for results that are not grouped. + $parity = 'odd'; + foreach ($build['search_results'] as $id => $result) { + // We need to check on the entity type, as the container + // where the object is stored in doesn't necessarily reflect + // the name of the entity type. + if (!empty($build['search_results'][$id]['#entity_type'])) { + switch ($build['search_results'][$id]['#entity_type']) { + case 'taxonomy_term': + $key = '#term'; + break; + + default: + $key = '#' . $build['search_results'][$id]['#entity_type']; + break; + } + + $build['search_results'][$id][$key]->ds_search_zebra = $parity; + } + + // Let parity change always. + $parity = $parity == 'odd' ? 'even' : 'odd'; + } + } + + // Apache Solr multisearch grouping. + if (variable_get('ds_search_apachesolr_multisite') && variable_get('ds_search_apachesolr_multisite_group') && variable_get('ds_search_type', 'node') == 'apachesolr_search') { + _ds_search_group_by_type_multisearch($build); + } + + return theme('ds_search_page', $build); +} + +/** + * Helper function to group by type. + */ +function _ds_search_group_by_type(&$build) { + $settings = variable_get('ds_search_group_by_type_settings'); + foreach ($build['search_results'] as $id => $result) { + if ($settings[$result['#bundle']]['status']) { + + // Type group. + if (!isset($build['search_results'][$result['#bundle']])) { + $type = $settings[$result['#bundle']]['wrapper']; + $title = check_plain(t($settings[$result['#bundle']]['label'])); + $class = 'group-result group-result-' . strtr($result['#bundle'], '_', '-'); + $parity[$result['#bundle']] = 'odd'; + $build['search_results'][$result['#bundle']] = array( + '#type' => $type, + '#title' => $title, + '#weight' => $settings[$result['#bundle']]['weight'], + '#attributes' => array( + 'class' => array($class), + ), + ); + + if ($type == 'markup') { + $build['search_results'][$result['#bundle']]['#prefix'] = '
    ' . ((!empty($title)) ? '

    ' . $title . '

    ' : ''); + $build['search_results'][$result['#bundle']]['#suffix'] = '
    '; + } + } + + // Move result into the wrapper of its type and unset previous. + $build['search_results'][$result['#bundle']][$id] = $result; + unset($build['search_results'][$id]); + + // Add the parity to the result to enable correct zebra striping. + $build['search_results'][$result['#bundle']][$id]['#node']->ds_search_zebra = $parity[$result['#bundle']]; + $parity[$result['#bundle']] = $parity[$result['#bundle']] == 'odd' ? 'even' : 'odd'; + } + else { + + // Other group. + if (!isset($build['search_results']['ds-other'])) { + $title = check_plain(t(variable_get('ds_search_group_by_type_other', 'Other'))); + $type = variable_get('ds_search_group_by_type_other_wrapper', 'fieldset'); + $class = 'group-result group-result-other'; + $parity['ds-other'] = 'odd'; + $build['search_results']['ds-other'] = array( + '#type' => $type, + '#title' => $title, + '#weight' => 100, + '#attributes' => array( + 'class' => array($class), + ), + ); + + if ($type == 'markup') { + $build['search_results']['ds-other']['#prefix'] = '
    ' . ((!empty($title)) ? '

    ' . $title . '

    ' : ''); + $build['search_results']['ds-other']['#suffix'] = '
    '; + } + } + + // Move result into other wrapper and unset previous. + $build['search_results']['ds-other'][$id] = $result; + unset($build['search_results'][$id]); + + // Add the parity to the result to enable correct zebra striping. + $build['search_results']['ds-other'][$id]['#node']->ds_search_parity = $parity['ds-other']; + $parity['ds-other'] = $parity['ds-other'] == 'odd' ? 'even' : 'odd'; + } + } +} + +/** + * Helper function to perform grouping on Apache Solr multisearch. + */ +function _ds_search_group_by_type_multisearch(&$build) { + $site_counter = array(); + $conf_array = array(); + $config = explode("\n", variable_get('ds_search_apachesolr_multisite_group_config')); + foreach ($config as $weight => $conf) { + $conf = trim($conf); + if (empty($conf)) { + continue; + } + $site_conf = explode('|', $conf); + $conf_array[$site_conf[0]] = array( + 'label' => $site_conf[1], + 'wrapper' => $site_conf[2], + 'weight' => $weight, + ); + } + + // Iterate over results. + foreach ($build['search_results'] as $id => $result) { + if (!isset($build['search_results'][$result['#site_hash']])) { + $class = 'group-result group-result-' . strtr($result['#site_hash'], '_', '-'); + $build['search_results'][$result['#site_hash']] = array( + '#type' => 'fieldset', + '#weight' => $conf_array[$result['#site_hash']]['weight'], + '#attributes' => array( + 'class' => array($class), + ), + ); + + // Create site counter. + $site_counter[$result['#site_hash']] = array( + 'counter' => 0, + 'title' => $conf_array[$result['#site_hash']]['label'], + 'type' => $conf_array[$result['#site_hash']]['wrapper'], + 'class' => $class, + ); + } + + // Move result into other wrapper and unset previous. Also count for + // every site so we can populate @total_per_site later on. + $site_counter[$result['#site_hash']]['counter']++; + $build['search_results'][$result['#site_hash']][$id] = $result; + unset($build['search_results'][$id]); + } + + // Site counter. + foreach ($site_counter as $hash => $values) { + $title = check_plain(t($values['title'], array('!total_per_site' => format_plural($values['counter'], '1 result', '@count results')))); + if ($values['type'] == 'div') { + $build['search_results'][$hash]['#prefix'] = '
    ' . ((!empty($title)) ? '

    ' . $title . '

    ' : ''); + $build['search_results'][$hash]['#suffix'] = '
    '; + } + else { + $build['search_results'][$hash]['#title'] = $title; + } + } +} + +/** + * Search on behalf of Drupal Core. + */ +function node_ds_search_execute($keys = NULL, $conditions = NULL) { + // Build matching conditions + $query = db_select('search_index', 'i', array('target' => 'slave'))->extend('SearchQuery')->extend('PagerDefault'); + $query->join('node', 'n', 'n.nid = i.sid'); + $query + ->condition('n.status', 1) + ->addTag('node_access') + ->searchExpression($keys, 'node'); + + // Language. + if (variable_get('ds_search_language', FALSE)) { + global $language; + $query->condition('n.language', $language->language); + } + + // Insert special keywords. + $query->setOption('type', 'n.type'); + $query->setOption('language', 'n.language'); + if ($query->setOption('term', 'ti.tid')) { + $query->join('taxonomy_index', 'ti', 'n.nid = ti.nid'); + } + // Only continue if the first pass query matches. + if (!$query->executeFirstPass()) { + return array(); + } + + // Add the ranking expressions. + _node_rankings($query); + + $limit = variable_get('ds_search_node_limit', 10); + $query->limit($limit); + + // Load results. + $find = $query->execute(); + $results = array(); + foreach ($find as $item) { + $node = node_load($item->sid); + $node->entity_type = 'node'; + $node->entity_id = $item->sid; + $node->search_extra = module_invoke_all('node_search_result', $node); + // Only build a node search snippet if this field is actually being used. + $fields = ds_get_field_settings($node->entity_type, $node->type, 'search_result'); + if (!empty($fields) && isset($fields['search_snippet'])) { + // Because the 'search_result' display is being built right now (and because it is being overridden by Display Suite), + // it is necessary to use the 'search_index' display for rendered field content. + $build = node_view($node, 'search_index'); + unset($build['#theme']); + // Render the node. + $rendered = drupal_render($build); + // Attach extra information to the rendered output. + $rendered .= ' ' . implode('', $node->search_extra); + // Generate the snippet based on rendered content. + $node->snippet = search_excerpt($keys, $rendered); + } + $results[$item->sid] = $node; + } + return $results; +} + +/** + * Override search results page for users. + */ +if (variable_get('ds_user_override_search_page', FALSE)) { + function user_search_page($results) { + $build = array('#type' => 'user'); + global $base_url; + + ds_build_shared_page_variables($build); + + $uids = array(); + foreach ($results as $key => $result) { + $uid = FALSE; + + // Try to get the uid from the $result['link']; + $path = explode('/', $result['link']); + $uid = end($path); + + // Lookup drupal path, we are most likely having an alias. + if (!is_numeric($uid)) { + $path = str_replace($base_url . '/', '', $result['link']); + $alias = drupal_get_normal_path($path); + $path = explode('/', $alias); + $uid = end($path); + } + + if (is_numeric($uid)) { + $uids[] = $uid; + } + + // Return all uids. + if (!empty($uids)) { + $accounts = user_load_multiple($uids); + foreach ($accounts as $account) { + $build['search_results'][$account->uid] = user_view($account, variable_get('ds_search_view_mode', 'search_result')); + } + } + } + + // Return output. + return theme('ds_search_page', $build); + } +} + +/** + * Build shared page variables. + * + * @param $build + * The build array. + */ +function ds_build_shared_page_variables(&$build) { + // Search results title. + if (variable_get('ds_search_show_title', FALSE)) { + $build['search_title'] = array('#markup' => '

    ' . t('Search results') . '

    '); + } + + // Extra variables. + if (variable_get('ds_search_variables', 'none') != 'none') { + $build['search_extra'] = array('#markup' => '
    ' . ds_search_extra_variables(arg(2)) . '
    '); + } + + // Search results. + $build['search_results'] = array(); + + // Pager. + $build['search_pager'] = array('#markup' => theme('pager', array('tags' => NULL))); + + // CSS and JS. + if (variable_get('ds_search_highlight', FALSE)) { + drupal_add_css(drupal_get_path('module', 'ds_search') . '/css/ds_search.theme.css'); + drupal_add_js(drupal_get_path('module', 'ds_search') . '/js/ds_search.js'); + drupal_add_js(array( + 'ds_search' => array( + 'selector' => check_plain(variable_get('ds_search_highlight_selector', '.view-mode-search_result')), + 'search' => check_plain(arg(2)), + ), + ), 'setting'); + } +} + +/** + * Return the extra variables. + */ +function ds_search_extra_variables($arg_keys = NULL) { + $type = variable_get('ds_search_variables', 'none'); + + // Define the number of results being shown on a page. + // We rely on the apache solr rows for now. + $items_per_page = variable_get('apachesolr_rows', 10); + + // Get the current page. + $current_page = isset($_REQUEST['page']) ? $_REQUEST['page']+1 : 1; + + // Get the total number of results from the $GLOBALS. + $total = isset($GLOBALS['pager_total_items'][0]) ? $GLOBALS['pager_total_items'][0] : 0; + + // Perform calculation + $start = $items_per_page * $current_page - ($items_per_page - 1); + $end = $items_per_page * $current_page; + if ($end > $total) $end = $total; + + // Get the search keys. + $keys = empty($arg_keys) ? trim(ds_search_get_keys()) : $arg_keys; + + // Send the right extra variable. + switch ($type) { + case 'search_totals': + return format_plural($total, 'One result', 'Total results: @total.', array('@total' => $total)); + break; + + case 'search_totals_plus_keywords': + return format_plural($total, 'Your search for "@search" gave back 1 result.', + 'Your search for "@search" gave back @count results.', + array('@search' => $keys)); + break; + + case 'search_totals_from_to_end': + return format_plural($total, 'Displaying @start - @end of 1 result.', + 'Displaying @start - @end of @count results.', + array('@start' => $start, '@end' => $end)); + break; + } +} + +/** + * Implements hook_form_FORM_ID_alter(). + */ +function ds_search_form_search_form_alter(&$form, $form_state) { + if (variable_get('ds_search_type', 'node') == 'node' && isset($form['module']) && $form['module']['#value'] == 'ds_search') { + if (variable_get('ds_search_node_form_alter', FALSE)) { + $form['module']['#value'] = 'node'; + node_form_search_form_alter($form, $form_state); + } + } +} + +/** + * Implements hook_form_FORM_ID_alter(). + */ +function ds_search_form_apachesolr_search_custom_page_search_form_alter(&$form, $form_state) { + if (variable_get('ds_search_apachesolr_hide_current_filters', FALSE)) { + $form['basic']['retain-filters']['#type'] = 'value'; + $form['basic']['retain-filters']['#value'] = variable_get('ds_search_apachesolr_current_filters_default', FALSE); + } +} + +/** + * Implements hook_apachesolr_index_document_build(). + */ +function ds_search_apachesolr_index_document_build(ApacheSolrDocument $document, $entity) { + // Apache Solr multisite support. Render the node already here. + if (variable_get('ds_search_apachesolr_multisite')) { + ob_start(); + $element = node_view($entity, variable_get('ds_search_view_mode', 'search_result')); + print drupal_render($element); + $output = ob_get_contents(); + ob_end_clean(); + $document->addField('tm_ds_search_result', $output); + } +} + +/** + * Implements hook_apachesolr_query_alter(). + */ +function ds_search_apachesolr_query_alter($query) { + + // Apache Solr multisite support. + if (variable_get('ds_search_apachesolr_multisite') && variable_get('ds_search_type', 'node') == 'apachesolr_search') { + // Site hash. + $query->addParam('fl', 'hash'); + // Rendered search result. + $query->addParam('fl', 'tm_ds_search_result'); + + // Make sure this site's search results are first. + if (variable_get('ds_search_apachesolr_multisite_boost')) { + $hash = apachesolr_site_hash(); + $query->addParam('bq', 'hash:' . $hash . '^' . variable_get('ds_search_apachesolr_multisite_boost_nr', 100)); + } + } + + // Search per language. + if (variable_get('ds_search_language', FALSE)) { + global $language; + $query->addFilter('ss_language', $language->language); + } +} + +/** + * Process results on behalf of Apache Solr. + */ +function ds_search_process_results($results) { + + $processed_results = array(); + + if (is_array($results) && !empty($results)) { + foreach ($results as $result) { + + $load = entity_load($result['fields']['entity_type'], array($result['fields']['entity_id'])); + $entity = reset($load); + if (!$entity) { + watchdog('ds_search', "Empty entity loaded from results, possibly corrupt solr index? (@entity_type, @id)", array('@entity_type' => $result['fields']['entity_type'], '@id' => $result['fields']['entity_id']), WATCHDOG_DEBUG); + continue; + } + + // Add the snippet, url and extra info on the object. + $entity->search_snippet = $result['snippet']; + $entity->search_extra = $result['extra']; + $entity->search_as_url = $result['fields']['url']; + $entity->entity_type = $result['fields']['entity_type']; + $entity->entity_id = $result['fields']['entity_id']; + + // Add the original result on the entity too in case this is a file + // entity. Attachments have brittle support as the file entity only + // exists in media 1.x or file entity 2.x. Because of that, we're + // most likely will render files through theme('search_result'). + if ($result['fields']['entity_type'] == 'file') { + $entity->original_result = $result; + } + + // Apache Solr multisite support. + if (variable_get('ds_search_apachesolr_multisite')) { + + // Pass along the uri path in case some people want to + // do cool stuff themselves. + $entity->uri['path'] = $entity->search_as_url; + $entity->uri['options'] = array(); + + // Prefix with site hash so we don't override same id's. + $markup = $result['fields']['tm_ds_search_result'][0]; + $processed_results[$result['fields']['id'] . '-' . $result['fields']['entity_id']] = array( + '#markup' => $markup, + '#site_hash' => $result['fields']['hash'], + ); + } + else { + $processed_results[$result['fields']['id'] . '-' . $result['fields']['entity_id']] = $entity; + } + } + } + + return $processed_results; +} + +/** + * Implements hook_apachesolr_search_page_alter(&$build, $search_page). + */ +function ds_search_apachesolr_search_page_alter(&$build, $search_page) { + if (!empty($build['search_results']['#results'])) { + $results = ds_search_process_results($build['search_results']['#results']); + $build['search_results'] = ds_search_search_page($results); + } +} diff --git a/sites/all/modules/custom/ds/modules/ds_search/includes/ds_search.admin.inc b/sites/all/modules/custom/ds/modules/ds_search/includes/ds_search.admin.inc new file mode 100644 index 0000000000..60390af6be --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_search/includes/ds_search.admin.inc @@ -0,0 +1,362 @@ + 'fieldset', + '#title' => t('General'), + ); + + $engine_options = array(); + foreach (module_implements('search_info') as $module) { + if ($module != 'ds_search' && $module != 'user') { + $engine_options[$module] = drupal_ucfirst(str_replace('_', ' ', $module)); + } + } + + $form['general']['ds_search_type'] = array( + '#type' => 'select', + '#title' => t('Search engine'), + '#description' => t('Select the search engine as the query backend.'), + '#options' => $engine_options, + '#default_value' => variable_get('ds_search_type', 'node'), + ); + + $form['general']['ds_search_path'] = array( + '#type' => 'textfield', + '#title' => t('Search path'), + '#field_prefix' => 'search/', + '#description' => t('Make sure you don\'t override an existing search path.'), + '#default_value' => variable_get('ds_search_path', 'content'), + '#required' => TRUE, + ); + + $entity_view_modes = ds_entity_view_modes('node'); + foreach ($entity_view_modes as $key => $view_mode) { + $view_mode_options[$key] = $view_mode['label']; + } + $form['general']['ds_search_view_mode'] = array( + '#type' => 'select', + '#title' => t('View mode'), + '#description' => 'Select another view mode in favor of the default search view mode.', + '#default_value' => variable_get('ds_search_view_mode', 'search_result'), + '#options' => $view_mode_options, + ); + + $form['general']['ds_search_file_render'] = array( + '#type' => 'checkbox', + '#title' => t('Use default search theming for files'), + '#description' => t('File/attachment results are best supported when the file entity module is enabled. Toggle the checkbox in case it is not available or you want to use default search theming.'), + '#default_value' => variable_get('ds_search_file_render', FALSE), + ); + + $form['general']['ds_search_variables'] = array( + '#type' => 'radios', + '#options' => array( + 'none' => t('None'), + 'search_totals' => t('Total results'), + 'search_totals_plus_keywords' => t('Total results + keywords'), + 'search_totals_from_to_end' => t('Totals + start to end') + ), + '#title' => t('Extra variables'), + '#description' => t('Choose an extra variable to display on the results screen.'), + '#default_value' => variable_get('ds_search_variables', 'none'), + ); + + $form['general']['ds_search_show_title'] = array( + '#type' => 'checkbox', + '#title' => t('Show title'), + '#description' => t('Display the "Search results" title.'), + '#default_value' => variable_get('ds_search_show_title'), + ); + + $form['general']['ds_search_language'] = array( + '#type' => 'checkbox', + '#title' => t('Language'), + '#description' => t('Search in the language the site is currently in. Enable this if you have at least 2 languages.'), + '#default_value' => variable_get('ds_search_language'), + ); + + $form['general']['ds_search_highlight'] = array( + '#type' => 'checkbox', + '#title' => t('Highlight search word'), + '#description' => t('Use jQuery to highlight the word in the results.'), + '#default_value' => variable_get('ds_search_highlight'), + ); + + $form['general']['ds_search_highlight_selector'] = array( + '#type' => 'textfield', + '#title' => t('HTML selector'), + '#description' => t('Enter the css selector, if not sure, leave this by default.'), + '#default_value' => variable_get('ds_search_highlight_selector', '.view-mode-search_result'), + '#states' => array( + 'visible' => array( + 'input[name="ds_search_highlight"]' => array('checked' => TRUE), + ), + ), + ); + + $form['general']['ds_search_group_by_type'] = array( + '#type' => 'checkbox', + '#title' => t('Group by type.'), + '#description' => t('Group the search results per page by type. Note that this only works if you only display nodes on the search result page.'), + '#default_value' => variable_get('ds_search_group_by_type'), + ); + + // Group by type order. + $form['ds_search_group_by_type_settings'] = array( + '#type' => 'fieldset', + '#title' => t('Group by type settings'), + '#description' => t('Set the order of the node types which can be grouped. Node types which are not enabled will be showed into a "Other group". Note that this does not work with Apache Solr multisite support.'), + '#theme' => 'ds_search_group_by_type_settings', + '#states' => array( + 'visible' => array( + 'input[name="ds_search_group_by_type"]' => array('checked' => TRUE), + ), + ), + ); + + $node_types = node_type_get_names(); + $ds_search_group_by_type_settings = variable_get('ds_search_group_by_type_settings'); + $wrapper_options = array( + 'fieldset' => t('Fieldset'), + 'markup' => t('Div with H3 headline'), + ); + foreach ($node_types as $name => $label) { + + $form['ds_search_group_by_type_settings'][$name]['name'] = array( + '#markup' => check_plain($label), + ); + + $form['ds_search_group_by_type_settings'][$name]['status'] = array( + '#type' => 'checkbox', + '#title' => t('Weight for @title', array('@title' => $label)), + '#title_display' => 'invisible', + '#default_value' => isset($ds_search_group_by_type_settings[$name]) ? $ds_search_group_by_type_settings[$name]['status'] : TRUE, + '#parents' => array('ds_search_group_by_type_settings', $name, 'status'), + ); + + $form['ds_search_group_by_type_settings'][$name]['label'] = array( + '#type' => 'textfield', + '#size' => 30, + '#title' => t('Group label for @title', array('@title' => $label)), + '#title_display' => 'invisible', + '#description' => t('Group label. The label will be translatable. Leave empty for no label.'), + '#default_value' => isset($ds_search_group_by_type_settings[$name]) ? $ds_search_group_by_type_settings[$name]['label'] : t('Results for @type', array('@type' => drupal_strtolower($node_types[$name]))), + '#parents' => array('ds_search_group_by_type_settings', $name, 'label'), + ); + + $form['ds_search_group_by_type_settings'][$name]['wrapper'] = array( + '#type' => 'select', + '#options' => $wrapper_options, + '#title' => t('Wrapper for @title', array('@title' => $label)), + '#title_display' => 'invisible', + '#default_value' => isset($ds_search_group_by_type_settings[$name]) ? $ds_search_group_by_type_settings[$name]['wrapper'] : 'fieldset', + '#parents' => array('ds_search_group_by_type_settings', $name, 'wrapper'), + ); + + $weight = isset($ds_search_group_by_type_settings[$name]) ? $ds_search_group_by_type_settings[$name]['weight'] : 0; + $form['ds_search_group_by_type_settings'][$name]['weight'] = array( + '#type' => 'weight', + '#title' => t('Weight for @title', array('@title' => $label)), + '#title_display' => 'invisible', + '#delta' => 30, + '#default_value' => $weight, + '#parents' => array('ds_search_group_by_type_settings', $name, 'weight'), + ); + $form['ds_search_group_by_type_settings'][$name]['#weight'] = $weight; + } + + $form['ds_search_group_by_type_settings']['ds_search_group_by_type_other'] = array( + '#type' => 'textfield', + '#title' => t('Other label'), + '#description' => t('The label of the other group. Leave empty for no label.'), + '#default_value' => variable_get('ds_search_group_by_type_other', 'Other'), + '#states' => array( + 'visible' => array( + 'input[name="ds_search_group_by_type"]' => array('checked' => TRUE), + ), + ), + ); + $form['ds_search_group_by_type_settings']['ds_search_group_by_type_other_wrapper'] = array( + '#type' => 'select', + '#options' => $wrapper_options, + '#title' => t('Other wrapper'), + '#description' => t('The wrapper of the other group.'), + '#default_value' => variable_get('ds_search_group_by_type_other_wrapper', 'fieldset'), + '#states' => array( + 'visible' => array( + 'input[name="ds_search_group_by_type"]' => array('checked' => TRUE), + ), + ), + ); + + $form['node'] = array( + '#type' => 'fieldset', + '#title' => t('Drupal core'), + '#states' => array( + 'visible' => array( + 'select[name="ds_search_type"]' => array('value' => 'node'), + ), + ), + ); + + $form['node']['ds_search_node_form_alter'] = array( + '#type' => 'checkbox', + '#title' => t('Advanced'), + '#description' => t('Enable the advanced search form.'), + '#default_value' => variable_get('ds_search_node_form_alter'), + ); + + $form['node']['ds_search_node_limit'] = array( + '#type' => 'textfield', + '#default_value' => variable_get('ds_search_node_limit', 10), + '#title' => t('Node search limit'), + '#description' => t('The number of items to display per page. Enter 0 for no limit.'), + ); + + if (module_exists('apachesolr')) { + + $form['apachesolr_search'] = array( + '#type' => 'fieldset', + '#title' => t('Apache Solr'), + '#states' => array( + 'visible' => array( + 'select[name="ds_search_type"]' => array('value' => 'apachesolr_search'), + ), + ), + ); + + $form['apachesolr_search']['ds_search_apachesolr_hide_current_filters'] = array( + '#type' => 'checkbox', + '#title' => t('Hide Retain filters'), + '#description' => t('Hide the "Retain current filters" checkbox on search results.'), + '#default_value' => variable_get('ds_search_apachesolr_hide_current_filters'), + ); + + $form['apachesolr_search']['ds_search_apachesolr_current_filters_default'] = array( + '#type' => 'checkbox', + '#title' => t('Remember filters'), + '#description' => t('Remember the filters when you hide the "Retain current filters" checkbox.'), + '#default_value' => variable_get('ds_search_apachesolr_current_filters_default'), + '#states' => array( + 'visible' => array( + 'input[name="ds_search_apachesolr_hide_current_filters"]' => array('checked' => TRUE), + ), + ), + ); + + $form['apachesolr_search']['ds_search_apachesolr_multisite'] = array( + '#type' => 'checkbox', + '#title' => t('Multisite support'), + '#description' => t('Enable this in case multiple sites share one index. Note that sometimes you need to make sure that your formatters are creating absolute paths for links or images. Implementing hook_url_outbound_alter() is a good option in which you can set $options[\'absolute\'] to TRUE.'), + '#default_value' => variable_get('ds_search_apachesolr_multisite'), + ); + + $form['apachesolr_search']['ds_search_apachesolr_multisite_boost'] = array( + '#type' => 'checkbox', + '#title' => t('Sort by site'), + '#description' => t('Enable this to rank the results of the current site first, than all the rest.'), + '#default_value' => variable_get('ds_search_apachesolr_multisite_boost'), + '#states' => array( + 'visible' => array( + 'input[name="ds_search_apachesolr_multisite"]' => array('checked' => TRUE), + ), + ), + ); + + $form['apachesolr_search']['ds_search_apachesolr_multisite_group'] = array( + '#type' => 'checkbox', + '#title' => t('Group results by site'), + '#default_value' => variable_get('ds_search_apachesolr_multisite_group'), + '#states' => array( + 'visible' => array( + 'input[name="ds_search_apachesolr_multisite"]' => array('checked' => TRUE), + ), + ), + ); + + $form['apachesolr_search']['ds_search_apachesolr_multisite_group_config'] = array( + '#type' => 'textarea', + '#title' => t('Group by site configuration'), + '#default_value' => variable_get('ds_search_apachesolr_multisite_group_config'), + '#description' => t('Enter sites line by line with following configuration: site-hash|label|wrapper. The site-hash is per site which you can get from Solr. The label is translatable per site. Use !total_per_site in this label for number of results per site. Depending on the number, you will either get "1 result" or "x results" which are translatable. The wrapper can either be "fieldset" or "div".'), + '#states' => array( + 'visible' => array( + 'input[name="ds_search_apachesolr_multisite_group"]' => array('checked' => TRUE), + 'input[name="ds_search_apachesolr_multisite"]' => array('checked' => TRUE), + ), + ), + ); + } + + $active = variable_get('search_active_modules', array('node', 'user')); + if (isset($active['user']) && $active['user'] !== 0) { + $form['user'] = array( + '#type' => 'fieldset', + '#title' => t('User search'), + ); + + $form['user']['ds_user_override_search_page'] = array( + '#type' => 'checkbox', + '#title' => t('Override user search page'), + '#description' => t('Toggle this checkbox if you want Display Suite to render user search results.'), + '#default_value' => variable_get('ds_user_override_search_page'), + ); + } + + $form = system_settings_form($form); + $form['#submit'][] = 'ds_search_settings_submit'; + return $form; +} + +/** + * Submit callback: Search settings submit. + */ +function ds_search_settings_submit($form, $form_state) { + // Rebuild the menu. + variable_set('menu_rebuild_needed', TRUE); +} + +/** + * Returns HTML for the Group by type settings. + */ +function theme_ds_search_group_by_type_settings($variables) { + $element = $variables['element']; + + // Type order (tabledrag). + $rows = array(); + foreach (element_children($element, TRUE) as $name) { + + if (!isset($element[$name]['name'])) { + continue; + } + + $element[$name]['weight']['#attributes']['class'][] = 'type-order-weight'; + $rows[] = array( + 'data' => array( + drupal_render($element[$name]['name']), + drupal_render($element[$name]['status']), + drupal_render($element[$name]['label']), + drupal_render($element[$name]['wrapper']), + drupal_render($element[$name]['weight']), + ), + 'class' => array('draggable'), + ); + } + + $header = array(t('Type'), t('Status'), t('Group label'), t('Wrapper'), t('Weight')); + $output = drupal_render_children($element); + $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'group-by-order'))); + drupal_add_tabledrag('group-by-order', 'order', 'sibling', 'type-order-weight', NULL, NULL, TRUE); + + return $output; +} diff --git a/sites/all/modules/custom/ds/modules/ds_search/js/ds_search.js b/sites/all/modules/custom/ds/modules/ds_search/js/ds_search.js new file mode 100644 index 0000000000..1b43706a64 --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_search/js/ds_search.js @@ -0,0 +1,69 @@ + +(function($) { + +/** + * Highlight words in search results with jQuery. + */ +Drupal.behaviors.DSSearchHighlight = { + attach: function (context) { + var selector = Drupal.settings.ds_search['selector']; + var search = Drupal.settings.ds_search['search']; + var $selector = $(selector); + // Split word. + + words = search.split(' '); + for (i = 0; i < words.length; i++) { + // Match only valid words. Do not match special search operators or words less than three characters. + if (words[i] != '' && words[i] != 'AND' && words[i] != 'OR' && words[i].length >= 3) { + $selector.highlight(words[i]); + } + } + } +}; + +/* + +highlight v3 + +Highlights arbitrary terms. + + + +MIT license. + +Johann Burkard + + + +*/ + +jQuery.fn.highlight = function(pat) { + function innerHighlight(node, pat) { + var skip = 0; + if (node.nodeType == 3) { + var pos = node.data.toUpperCase().indexOf(pat); + if (pos >= 0) { + var spannode = document.createElement('span'); + spannode.className = 'ds-search-highlight'; + var middlebit = node.splitText(pos); + var endbit = middlebit.splitText(pat.length); + var middleclone = middlebit.cloneNode(true); + spannode.appendChild(middleclone); + middlebit.parentNode.replaceChild(spannode, middlebit); + skip = 1; + } + } + else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) { + for (var i = 0; i < node.childNodes.length; ++i) { + i += innerHighlight(node.childNodes[i], pat); + } + } + return skip; + } + return this.each(function() { + innerHighlight(this, pat.toUpperCase()); + }); +}; + +})(jQuery); + diff --git a/sites/all/modules/custom/ds/modules/ds_ui/ds_ui.info b/sites/all/modules/custom/ds/modules/ds_ui/ds_ui.info new file mode 100644 index 0000000000..a6104a6998 --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_ui/ds_ui.info @@ -0,0 +1,12 @@ +name = "Display Suite UI" +description = "User interface for managing fields, view modes and classes." +core = "7.x" +package = "Display Suite" +dependencies[] = ds + +; Information added by Drupal.org packaging script on 2014-10-28 +version = "7.x-2.7" +core = "7.x" +project = "ds" +datestamp = "1414483431" + diff --git a/sites/all/modules/custom/ds/modules/ds_ui/ds_ui.module b/sites/all/modules/custom/ds/modules/ds_ui/ds_ui.module new file mode 100644 index 0000000000..087c6cf3b9 --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_ui/ds_ui.module @@ -0,0 +1,170 @@ + array( + 'title' => t('Administer view modes'), + 'description' => t('Manage custom view modes for every entity.') + ), + 'admin_fields' => array( + 'title' => t('Administer fields'), + 'description' => t('Manage fields for every entity.') + ), + 'admin_classes' => array( + 'title' => t('Administer classes'), + 'description' => t('Manage classes.') + ), + ); +} + +/** + * Implements hook_menu(). + */ +function ds_ui_menu() { + $items = array(); + + // Custom CSS classes. + $items['admin/structure/ds/classes'] = array( + 'title' => 'CSS classes', + 'description' => 'Define extra CSS class names for regions and fields.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('ds_classes_form'), + 'file' => 'includes/ds.classes.inc', + 'access arguments' => array('admin_classes'), + 'type' => MENU_LOCAL_TASK, + ); + + // View modes. + $items['admin/structure/ds/view_modes'] = array( + 'title' => 'View modes', + 'description' => 'Manage view modes for all content.', + 'page callback' => 'ds_view_modes_list', + 'file' => 'includes/ds.view_modes.inc', + 'access arguments' => array('admin_view_modes'), + 'weight' => -9, + 'type' => MENU_LOCAL_TASK, + ); + $items['admin/structure/ds/view_modes/manage'] = array( + 'title' => 'Add a view mode', + 'description' => 'Manage a view mode', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('ds_edit_view_mode_form'), + 'file' => 'includes/ds.view_modes.inc', + 'access arguments' => array('admin_view_modes'), + 'type' => MENU_LOCAL_ACTION, + ); + $items['admin/structure/ds/view_modes/delete'] = array( + 'title' => 'Delete a view mode', + 'description' => 'Delete a custom view mode.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('ds_delete_view_mode_confirm'), + 'file' => 'includes/ds.view_modes.inc', + 'access arguments' => array('admin_view_modes'), + 'type' => MENU_VISIBLE_IN_BREADCRUMB, + ); + $items['admin/structure/ds/view_modes/revert'] = array( + 'title' => 'Revert a view mode', + 'description' => 'Revert a view mode.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('ds_revert_view_mode_confirm'), + 'file' => 'includes/ds.view_modes.inc', + 'access arguments' => array('admin_view_modes'), + 'type' => MENU_VISIBLE_IN_BREADCRUMB, + ); + + // Fields. + $items['admin/structure/ds/fields'] = array( + 'title' => 'Fields', + 'description' => 'Manage fields for all content.', + 'page callback' => 'ds_custom_fields_list', + 'file' => 'includes/ds.fields.inc', + 'access arguments' => array('admin_fields'), + 'weight' => -8, + 'type' => MENU_LOCAL_TASK, + ); + $items['admin/structure/ds/fields/manage'] = array( + 'title' => 'Fields edit', + 'page callback' => 'ds_custom_manage', + 'file' => 'includes/ds.fields.inc', + 'access arguments' => array('admin_fields'), + 'type' => MENU_CALLBACK, + ); + $items['admin/structure/ds/fields/manage_custom'] = array( + 'title' => 'Add a code field', + 'description' => 'Manage a field', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('ds_edit_custom_field_form'), + 'file' => 'includes/ds.fields.inc', + 'access arguments' => array('admin_fields'), + 'type' => MENU_LOCAL_ACTION, + 'weight' => 0, + ); + $items['admin/structure/ds/fields/manage_ctools'] = array( + 'title' => 'Add a dynamic field', + 'description' => 'Manage a dynamic field', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('ds_edit_ctools_field_form'), + 'file' => 'includes/ds.fields.inc', + 'access arguments' => array('admin_fields'), + 'type' => MENU_LOCAL_ACTION, + 'weight' => 1, + ); + $items['admin/structure/ds/fields/manage_preprocess'] = array( + 'title' => 'Add a preprocess field', + 'description' => 'Manage a preprocess field', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('ds_edit_preprocess_field_form'), + 'file' => 'includes/ds.fields.inc', + 'access arguments' => array('admin_fields'), + 'type' => MENU_LOCAL_ACTION, + 'weight' => 3, + ); + $items['admin/structure/ds/fields/delete'] = array( + 'title' => 'Delete a field', + 'description' => 'Delete a field.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('ds_delete_field_confirm'), + 'file' => 'includes/ds.fields.inc', + 'access arguments' => array('admin_fields'), + 'type' => MENU_VISIBLE_IN_BREADCRUMB, + ); + $items['admin/structure/ds/fields/revert'] = array( + 'title' => 'Revert a custom field', + 'description' => 'Revert a custom field.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('ds_revert_field_confirm'), + 'file' => 'includes/ds.fields.inc', + 'access arguments' => array('admin_fields'), + 'type' => MENU_VISIBLE_IN_BREADCRUMB, + ); + $items['admin/structure/ds/fields/manage_block'] = array( + 'title' => 'Add a block field', + 'description' => 'Manage a block field', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('ds_edit_block_field_form'), + 'file' => 'includes/ds.fields.inc', + 'access arguments' => array('admin_fields'), + 'type' => MENU_LOCAL_ACTION, + 'weight' => 2, + ); + + // CTools Modal add field. + $items['admin/structure/ds/%ctools_js/add_field/%'] = array( + 'title' => 'Add field', + 'page callback' => 'ds_ajax_add_field', + 'page arguments' => array(3, 5), + 'access arguments' => array('admin_fields'), + 'file' => 'includes/ds.fields.inc', + 'type' => MENU_CALLBACK, + ); + + return $items; +} diff --git a/sites/all/modules/custom/ds/modules/ds_ui/includes/ds.classes.inc b/sites/all/modules/custom/ds/modules/ds_ui/includes/ds.classes.inc new file mode 100644 index 0000000000..0a87753aae --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_ui/includes/ds.classes.inc @@ -0,0 +1,43 @@ + 'textarea', + '#title' => t('CSS classes for regions'), + '#default_value' => variable_get('ds_classes_regions', ''), + '#description' => t('Configure CSS classes which you can add to regions on the "manage display" screens. Add multiple CSS classes line by line.
    If you want to have a friendly name, separate class and friendly name by |, but this is not required. eg:
    class_name_1
    class_name_2|Friendly name
    class_name_3
    ') + ); + + if (module_exists('token')) { + $tokens_mapping = token_get_entity_mapping(); + $tokens_list = array(); + foreach($tokens_mapping as $token_map => $entity_map) { + $tokens_list[] = $token_map; + } + $form['token'] = array( + '#type' => 'container', + '#theme' => 'token_tree', + '#token_types' => $tokens_list, + '#dialog' => TRUE, + ); + } + + $form['ds_classes_fields'] = array( + '#type' => 'textarea', + '#title' => t('CSS classes for fields'), + '#default_value' => variable_get('ds_classes_fields', ''), + '#description' => t('Configure CSS classes which you can add to fields on the "manage display" screens. Add multiple CSS classes line by line.
    If you want to have a friendly name, separate class and friendly name by |, but this is not required. eg:
    class_name_1
    class_name_2|Friendly name
    class_name_3
    ') + ); + + return system_settings_form($form); +} diff --git a/sites/all/modules/custom/ds/modules/ds_ui/includes/ds.fields.inc b/sites/all/modules/custom/ds/modules/ds_ui/includes/ds.fields.inc new file mode 100644 index 0000000000..babe468218 --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_ui/includes/ds.fields.inc @@ -0,0 +1,555 @@ + $field_value) { + $row = array(); + $row[] = check_plain($field_value->label); + $row[] = ds_field_human_name($field_value->field_type); + $row[] = $field_key; + $row[] = ucwords(str_replace('_', ' ', implode(', ', $field_value->entities))); + $operations = l(t('Edit'), 'admin/structure/ds/fields/manage/' . $field_key, array('alias' => TRUE)); + + if ($field_value->export_type == 3) { + $operations .= ' - ' . l(t('Revert'), 'admin/structure/ds/fields/revert/' . $field_key, array('alias' => TRUE)); + } + elseif ($field_value->export_type == 1) { + $operations .= ' - ' . l(t('Delete'), 'admin/structure/ds/fields/delete/' . $field_key, array('alias' => TRUE)); + } + $row[] = $operations; + $rows[] = $row; + } + + $table = array( + 'header' => array( + 'Label', + 'Type', + 'Machine name', + 'Entities', + 'Operations', + ), + 'rows' => $rows, + ); + + $output = theme('table', $table); + } + else { + $output = t('No custom fields have been defined.'); + } + + return $output; +} + +/** + * Return the human name of a field. + * + * @return $human_name + * The human name of a field. + */ +function ds_field_human_name($type) { + + switch ($type) { + case DS_FIELD_TYPE_CODE: + return t('Code field'); + case DS_FIELD_TYPE_BLOCK: + return t('Block field'); + case DS_FIELD_TYPE_CTOOLS: + return t('Dynamic field'); + case DS_FIELD_TYPE_PREPROCESS: + return t('Preprocess field'); + } + + // Fallback + return t('Unknown'); +} + +/** + * Manage a field. This will redirect to the exact form. + */ +function ds_custom_manage($field_key = '') { + $redirect = ''; + ctools_include('export'); + $custom_fields = ctools_export_crud_load_all('ds_fields'); + if (isset($custom_fields[$field_key])) { + $field = $custom_fields[$field_key]; + switch ($field->field_type) { + case DS_FIELD_TYPE_CODE: + $redirect = 'admin/structure/ds/fields/manage_custom/' . $field_key; + break; + + case DS_FIELD_TYPE_BLOCK: + $redirect = 'admin/structure/ds/fields/manage_block/' . $field_key; + break; + + case DS_FIELD_TYPE_CTOOLS: + $redirect = 'admin/structure/ds/fields/manage_ctools/' . $field_key; + break; + + case DS_FIELD_TYPE_PREPROCESS: + $redirect = 'admin/structure/ds/fields/manage_preprocess/' . $field_key; + break; + + default: + drupal_set_message(t('Field not found')); + $redirect = 'admin/structure/ds/fields'; + break; + } + } + + drupal_goto($redirect); +} + +/** + * Shared form for all all fields. + */ +function ds_shared_form(&$form, $field) { + ctools_include('export'); + $custom_fields = ctools_export_crud_load_all('ds_fields'); + if (isset($custom_fields[$field])) { + $field = $custom_fields[$field]; + if (!isset($field->ui_limit)) { + $field->ui_limit = ''; + } + } + else { + $field = new stdClass; + $field->label = ''; + $field->field = ''; + $field->ui_limit = ''; + $field->entities = array(); + $field->properties = array(); + } + + $form['name'] = array( + '#title' => t('Label'), + '#type' => 'textfield', + '#default_value' => $field->label, + '#description' => t('The human-readable label of the field.'), + '#maxlength' => 128, + '#required' => TRUE, + '#size' => 30, + ); + + $form['field'] = array( + '#type' => 'machine_name', + '#default_value' => $field->field, + '#maxlength' => 32, + '#description' => t('The machine-readable name of this field. This name must contain only lowercase letters and underscores. This name must be unique.'), + '#disabled' => !empty($field->field), + '#machine_name' => array( + 'exists' => 'ds_field_unique', + ), + ); + + $entity_options = array(); + $entities = entity_get_info(); + foreach ($entities as $entity_type => $entity_info) { + if ((isset($entity_info['fieldable']) && $entity_info['fieldable']) || $entity_type == 'ds_views') { + $entity_options[$entity_type] = drupal_ucfirst(str_replace('_', ' ', $entity_type)); + } + } + $form['entities'] = array( + '#title' => t('Entities'), + '#description' => t('Select the entities for which this field will be made available.'), + '#type' => 'checkboxes', + '#required' => TRUE, + '#options' => $entity_options, + '#default_value' => $field->entities, + ); + + $form['ui_limit'] = array( + '#title' => t('Limit field'), + '#description' => t('Limit this field on field UI per bundles and/or view modes. The values are in the form of $bundle|$view_mode, where $view_mode may be either a view mode set to use custom settings, or \'default\'. You may use * to select all, e.g article|*, *|full or *|*. Enter one value per line.'), + '#type' => 'textarea', + '#default_value' => $field->ui_limit, + ); + + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Save'), + '#weight' => 100, + ); + + // Validate & submit are also the same. + $form['#validate'][] = 'ds_shared_form_validate'; + $form['#submit'][] = 'ds_shared_form_submit'; + + return $field; +} + +/** + * Return whether a field machine name is unique. + */ +function ds_field_unique($name) { + ctools_include('export'); + $custom_fields = ctools_export_crud_load_all('ds_fields'); + $value = strtr($name, array('-' => '_')); + return isset($custom_fields[$value]) ? TRUE : FALSE; +} + +/** + * Shared field form validation. + */ +function ds_shared_form_validate($form, &$form_state) { + $field = new stdClass; + $field->properties = array(); + $field->field = $form_state['values']['field']; + $field->label = $form_state['values']['name']; + $field->ui_limit = str_replace("\r", '', $form_state['values']['ui_limit']); + + $entities = $form_state['values']['entities']; + foreach ($entities as $key => $value) { + if ($key !== $value) { + unset($entities[$key]); + } + } + $field->entities = $entities; + $form_state['field'] = $field; +} + +/** + * Save any field. + */ +function ds_shared_form_submit($form, &$form_state) { + $field = $form_state['field']; + + // Delete previous field configuration. + db_delete('ds_fields') + ->condition('field', $field->field) + ->execute(); + + // Save field and clear ds_fields. + drupal_write_record('ds_fields', $field); + cache_clear_all('ds_fields:', 'cache', TRUE); + + // Redirect. + $form_state['redirect'] = 'admin/structure/ds/fields'; + drupal_set_message(t('The field %field has been saved', array('%field' => $field->label))); +} + +/** + * Manage a custom field. + */ +function ds_edit_custom_field_form($form, &$form_state, $custom_field = '') { + drupal_set_title(empty($custom_field) ? t('Add a code field') : t('Edit code field')); + + $custom_field = ds_shared_form($form, $custom_field); + + $form['code'] = array( + '#type' => 'text_format', + '#title' => t('Field code'), + '#default_value' => isset($custom_field->properties['code']['value']) ? $custom_field->properties['code']['value'] : '', + '#format' => isset($custom_field->properties['code']['format']) ? $custom_field->properties['code']['format'] : 'ds_code', + '#base_type' => 'textarea', + '#required' => TRUE, + ); + + $form['use_token'] = array( + '#type' => 'checkbox', + '#title' => t('Token'), + '#description' => t('Toggle this checkbox if you are using tokens in this field.'), + '#default_value' => isset($custom_field->properties['use_token']) ? $custom_field->properties['use_token'] : '', + ); + + // Token support. + if (module_exists('token')) { + + $form['tokens'] = array( + '#title' => t('Tokens'), + '#type' => 'container', + '#states' => array( + 'invisible' => array( + 'input[name="use_token"]' => array('checked' => FALSE), + ), + ), + ); + $form['tokens']['help'] = array( + '#theme' => 'token_tree', + '#token_types' => 'all', + '#global_types' => FALSE, + '#dialog' => TRUE, + ); + } + else { + $form['use_token']['#description'] = t('Toggle this checkbox if you are using tokens in this field. If the token module is installed, you get a nice list of all tokens available in your site.'); + } + + $form['#validate'][] = 'ds_custom_field_form_validate'; + + return $form; +} + +/** + * Custom field form validation. + */ +function ds_custom_field_form_validate($form, &$form_state) { + $form_state['field']->field_type = DS_FIELD_TYPE_CODE; + $form_state['field']->properties['code'] = $form_state['values']['code']; + $form_state['field']->properties['use_token'] = $form_state['values']['use_token']; +} + +/** + * Manage a CTools field. + */ +function ds_edit_ctools_field_form($form, &$form_state, $ctools_field = '') { + drupal_set_title(empty($ctools_field) ? t('Add a dynamic field') : t('Edit dynamic field')); + + $custom_field = ds_shared_form($form, $ctools_field); + $form['info'] = array( + '#markup' => t('The content of this field is configurable on the "Manage display" screens.'), + '#weight' => -10, + ); + $form['#validate'][] = 'ds_ctools_field_form_validate'; + return $form; +} + +/** + * CTools field form validation. + */ +function ds_ctools_field_form_validate($form, &$form_state) { + $form_state['field']->field_type = DS_FIELD_TYPE_CTOOLS; + $form_state['field']->properties['default'] = array(); + $form_state['field']->properties['settings'] = array('show_title' => array('type' => 'checkbox'), 'title_wrapper' => array('type' => 'textfield', 'description' => t('Eg: h1, h2, p')), 'ctools' => array('type' => 'ctools')); +} + +/** + * Manage a Preprocess field. + */ +function ds_edit_preprocess_field_form($form, &$form_state, $preprocess_field = '') { + drupal_set_title(empty($preprocess_field) ? t('Add a preprocess field') : t('Edit preprocess field')); + + $custom_field = ds_shared_form($form, $preprocess_field); + $form['info'] = array( + '#markup' => t('The machine name of this field must reflect the key in the variables, e.g. "submitted". So in most cases, it is very likely you will have to manually edit the machine name as well, which can not be changed anymore after saving. Note that this field type works best on Nodes.'), + '#weight' => -10, + ); + $form['#validate'][] = 'ds_preprocess_field_form_validate'; + return $form; +} + +/** + * CTools field form validation. + */ +function ds_preprocess_field_form_validate($form, &$form_state) { + $form_state['field']->field_type = DS_FIELD_TYPE_PREPROCESS; +} + +/** + * Manage a custom block. + */ +function ds_edit_block_field_form($form, &$form_state, $custom_block = '') { + drupal_set_title(empty($custom_block) ? t('Add a block field') : t('Edit block field')); + + $custom_block = ds_shared_form($form, $custom_block); + + $blocks = array(); + foreach (module_implements('block_info') as $module) { + $module_blocks = module_invoke($module, 'block_info'); + if ($module_blocks) { + foreach ($module_blocks as $module_key => $info) { + $blocks[drupal_ucfirst($module)][$module . '|' . $module_key] = $info['info']; + } + } + } + ksort($blocks); + foreach($blocks as &$subarray) { + asort($subarray); + } + + $form['block_identity']['block'] = array( + '#type' => 'select', + '#options' => $blocks, + '#title' => t('Block'), + '#required' => TRUE, + '#default_value' => isset($custom_block->properties['block']) ? $custom_block->properties['block'] : '', + ); + $form['block_identity']['block_render'] = array( + '#type' => 'select', + '#options' => array( + DS_BLOCK_TEMPLATE => t('Default'), + DS_BLOCK_TITLE_CONTENT => t('Show block title + content'), + DS_BLOCK_CONTENT => t('Show only block content'), + ), + '#title' => t('Layout'), + '#required' => TRUE, + '#default_value' => isset($custom_block->properties['block_render']) ? $custom_block->properties['block_render'] : '', + ); + + $form['#validate'][] = 'ds_block_field_form_validate'; + + return $form; +} + +/** + * Custom field form validation. + */ +function ds_block_field_form_validate($form, &$form_state) { + $form_state['field']->field_type = DS_FIELD_TYPE_BLOCK; + $form_state['field']->properties = array(); + $form_state['field']->properties['block'] = $form_state['values']['block']; + $form_state['field']->properties['block_render'] = $form_state['values']['block_render']; +} + +/** + * Menu callback: Confirmation custom field delete form. + */ +function ds_delete_field_confirm($form, &$form_state, $field = '') { + return ds_remove_fields_form($form, $form_state, $field, 'delete'); +} + +/** + * Menu callback: Confirmation custom field delete form. + */ +function ds_revert_field_confirm($form, &$form_state, $field = '') { + return ds_remove_fields_form($form, $form_state, $field, 'revert'); +} + +/** + * Confirmation delete or revert form. + */ +function ds_remove_fields_form($form, &$form_state, $field = '', $action = 'delete') { + ctools_include('export'); + $custom_fields = ctools_export_crud_load_all('ds_fields'); + if (isset($custom_fields[$field])) { + $field = $custom_fields[$field]; + $form['#ds_field'] = $field; + return confirm_form($form, + t('Are you sure you want to ' . $action . ' %field?', array('%field' => $field->label)), + 'admin/structure/ds/fields', + t('This action cannot be undone.'), + t(drupal_ucfirst($action)), + t('Cancel') + ); + } + else { + drupal_set_message(t('Unknown field')); + drupal_goto('admin/structure/ds/fields'); + } +} + +/** + * Submit callback: confirmed delete submit. + */ +function ds_delete_field_confirm_submit($form, &$form_state) { + ds_remove_field_confirm_submit($form, $form_state, 'deleted'); +} + +/** + * Submit callback: confirmed revert submit. + */ +function ds_revert_field_confirm_submit($form, &$form_state) { + ds_remove_field_confirm_submit($form, $form_state, 'reverted'); +} + +/** + * Confirmed field delete or revert submit callback. + */ +function ds_remove_field_confirm_submit($form, &$form_state, $action = 'deleted') { + + $field = $form['#ds_field']; + + // Remove field. + db_delete('ds_fields') + ->condition('field', $field->field) + ->execute(); + + // Clear cache. + cache_clear_all('ds_fields:', 'cache', TRUE); + + // Redirect. + $form_state['redirect'] = 'admin/structure/ds/fields'; + drupal_set_message(t('The field %field has been ' . $action, array('%field' => $field->label))); +} + +/** + * Handles ctools modal Add field + * + * @param $js + * Whether js is used or not. + * @param $field_type + * The name of the field type. + */ +function ds_ajax_add_field($js, $field_type) { + + if (!$js) { + // We don't support degrading this from js because we're not + // using the server to remember the state of the table. + drupal_goto("admin/structure/ds/fields/" . $field_type); + return; + } + + ctools_include('ajax'); + ctools_include('modal'); + + switch ($field_type) { + + case "manage_ctools": + $title = t('Add a dynamic field'); + $form_name = "ds_edit_ctools_field_form"; + break; + + case "manage_preprocess": + $title = t('Add a preprocess field'); + $form_name = "ds_edit_preprocess_field_form"; + break; + + case "manage_block": + $title = t('Add a block field'); + $form_name = "ds_edit_block_field_form"; + break; + + default: + $title = t('Add a code field'); + $form_name = "ds_edit_custom_field_form"; + $field_type = 'manage_custom'; + break; + } + + $form_state = array(); + $form_state['build_info']['args'] = array(); + $form_state += array( + 'title' => $title, + 'ajax' => TRUE, + 're_render' => FALSE, + ); + + $output = NULL; + form_load_include($form_state, 'inc', 'ds_ui', 'includes/ds.fields'); + + $output = ctools_modal_form_wrapper($form_name, $form_state); + + // Field is saved. + if ($form_state['executed']) { + + $output = array(); + + // Do not print messages on screen. + if ($messages = theme('status_messages')) { + $output[] = ajax_command_append('#console', $messages); + } + + // Close the modal. + $output[] = ctools_modal_command_dismiss(); + + // Call our own javascript function which will trigger a refresh of the table. + $output[] = ajax_command_invoke('#field-display-overview', 'dsRefreshDisplayTable'); + } + + drupal_add_http_header('Content-Type', 'application/json'); + print ajax_render($output); + exit; +} diff --git a/sites/all/modules/custom/ds/modules/ds_ui/includes/ds.view_modes.inc b/sites/all/modules/custom/ds/modules/ds_ui/includes/ds.view_modes.inc new file mode 100644 index 0000000000..bc85746f81 --- /dev/null +++ b/sites/all/modules/custom/ds/modules/ds_ui/includes/ds.view_modes.inc @@ -0,0 +1,277 @@ + $view_mode_value) { + + $row = array(); + $row[] = check_plain($view_mode_value->label); + $row[] = $view_mode_key; + $row[] = ucwords(str_replace('_', ' ', implode(', ', $view_mode_value->entities))); + $operations = l(t('Edit'), 'admin/structure/ds/view_modes/manage/' . $view_mode_key, array('alias' => TRUE)); + + if ($view_mode_value->export_type == 3) { + $operations .= ' - ' . l(t('Revert'), 'admin/structure/ds/view_modes/revert/' . $view_mode_key, array('alias' => TRUE)); + } + elseif ($view_mode_value->export_type == 1) { + $operations .= ' - ' . l(t('Delete'), 'admin/structure/ds/view_modes/delete/' . $view_mode_key, array('alias' => TRUE)); + } + $row[] = $operations; + $rows[] = $row; + } + + $table = array( + 'header' => array( + 'Label', + 'Machine name', + 'Entities', + 'Operations', + ), + 'rows' => $rows, + ); + + $output = theme('table', $table); + } + else { + $output = t('No custom view modes have been defined.'); + } + + return $output; +} + +/** + * Manage a custom view mode. + */ +function ds_edit_view_mode_form($form, &$form_state, $view_mode = '') { + + ctools_include('export'); + $view_modes = ctools_export_crud_load_all('ds_view_modes'); + if (isset($view_modes[$view_mode])) { + $view_mode = $view_modes[$view_mode]; + } + else { + $view_mode = new stdClass; + $view_mode->label = ''; + $view_mode->view_mode = ''; + $view_mode->entities = array(); + } + + $form['name'] = array( + '#title' => t('Label'), + '#type' => 'textfield', + '#default_value' => $view_mode->label, + '#description' => t('The human-readable label of the view mode. This name must be unique.'), + '#required' => TRUE, + '#maxlength' => 32, + '#size' => 30, + ); + + $form['view_mode'] = array( + '#title' => t('Machine name'), + '#type' => 'machine_name', + '#default_value' => $view_mode->view_mode, + '#maxlength' => 32, + '#description' => t('The machine-readable name of this view mode. This name must contain only lowercase letters and underscores. This name must be unique.'), + '#disabled' => !empty($view_mode->view_mode), + '#machine_name' => array( + 'exists' => 'ds_view_mode_unique', + ), + ); + + $entity_options = array(); + $entities = entity_get_info(); + foreach ($entities as $entity_type => $entity_info) { + if (isset($entity_info['fieldable']) && $entity_info['fieldable']) { + $entity_options[$entity_type] = drupal_ucfirst(str_replace('_', ' ', $entity_type)); + } + } + $form['entities'] = array( + '#title' => t('Entities'), + '#description' => t('Select the entities for which this view mode will be made available.'), + '#type' => 'checkboxes', + '#required' => TRUE, + '#options' => $entity_options, + '#default_value' => $view_mode->entities, + ); + + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Save') + ); + + $form['existing'] = array('#type' => 'value', '#value' => !empty($view_mode->view_mode)); + + return $form; +} + +/** + * Return whether a view mode machine name is unique. + */ +function ds_view_mode_unique($name) { + ctools_include('export'); + $view_modes = ctools_export_crud_load_all('ds_view_modes'); + $value = strtr($name, array('-' => '_')); + return isset($view_modes[$value]) ? TRUE : FALSE; +} + +/** + * Validates the view mode submission form generated by ds_edit_view_mode_form(). + */ +function ds_edit_view_mode_form_validate($form, &$form_state) { + + $view_mode = new stdClass; + $view_mode->view_mode = $form_state['values']['view_mode']; + $view_mode->label = $form_state['values']['name']; + + $reserved = array(); + $entities = $form_state['values']['entities']; + foreach ($entities as $key => $value) { + if ($key !== $value) { + unset($entities[$key]); + } + else { + $reserved += ds_entity_view_modes($key); + } + } + + if (array_key_exists($view_mode->view_mode, $reserved) && !isset($form_state['values']['existing'])) { + form_set_error('type', t('The machine-readable name %view_mode is reserved.', array('%view_mode' => $view_mode->view_mode))); + } + else { + $view_mode->entities = $entities; + $form_state['view_mode'] = $view_mode; + } +} + +/** + * Saves the view mode. + */ +function ds_edit_view_mode_form_submit($form, &$form_state) { + $view_mode = $form_state['view_mode']; + + // Delete previous view_mode configuration (if any) + db_delete('ds_view_modes') + ->condition('view_mode', $view_mode->view_mode) + ->execute(); + + // Save the new view mode. + drupal_write_record('ds_view_modes', $view_mode); + + // Clear entity info cache and trigger menu build on next request. + cache_clear_all('entity_info', 'cache', TRUE); + variable_set('menu_rebuild_needed', TRUE); + + // Redirect. + $form_state['redirect'] = 'admin/structure/ds/view_modes'; + drupal_set_message(t('The view mode %view_mode has been saved', array('%view_mode' => $view_mode->label))); +} + +/** + * Menu callback: Confirmation view mode delete form. + */ +function ds_delete_view_mode_confirm($form, &$form_state, $view_mode = '') { + return ds_remove_view_mode_confirm($form, $form_state, $view_mode, 'delete'); +} + +/** + * Menu callback: Confirmation view mode revert form. + */ +function ds_revert_view_mode_confirm($form, &$form_state, $view_mode = '') { + return ds_remove_view_mode_confirm($form, $form_state, $view_mode, 'revert'); +} + +/** + * Confirmation revert or remove form. + */ +function ds_remove_view_mode_confirm($form, &$form_state, $view_mode = '', $action = 'delete') { + ctools_include('export'); + $view_modes = ctools_export_crud_load_all('ds_view_modes'); + if (isset($view_modes[$view_mode])) { + $view_mode = $view_modes[$view_mode]; + } + + $confirm = FALSE; + if (isset($view_mode->export_type)) { + if ($action == 'delete' && $view_mode->export_type != 2) { + $confirm = TRUE; + } + elseif ($action == 'revert' && $view_mode->export_type == 3) { + $confirm = TRUE; + } + } + + if ($confirm) { + $form['#view_mode'] = $view_mode; + return confirm_form($form, + t('Are you sure you want to ' . $action . ' %view_mode?', array('%view_mode' => $view_mode->label)), + 'admin/structure/ds/view_modes', + t('This action cannot be undone.'), + t(drupal_ucfirst($action)), + t('Cancel') + ); + } + else { + drupal_set_message(t('This operation is not possible.')); + drupal_goto('admin/structure/ds/view_modes'); + } +} + +/** + * Confirmed view mode delete submit callback. + */ +function ds_delete_view_mode_confirm_submit($form, &$form_state) { + ds_remove_view_mode($form, $form_state, 'deleted'); +} + +/** + * Confirmed view mode revert submit callback. + */ +function ds_revert_view_mode_confirm_submit($form, &$form_state) { + ds_remove_view_mode($form, $form_state, 'reverted'); +} + +/** + * Remove a view mode from the database. + * + * @param $action + * Whether we delete or remove the view mode. + */ +function ds_remove_view_mode($form, &$form_state, $action = 'deleted') { + + $view_mode = $form['#view_mode']; + + // Remove view mode from database. + db_delete('ds_view_modes') + ->condition('view_mode', $view_mode->view_mode) + ->execute(); + + // Remove layout and field settings for this view mode. + db_delete('ds_field_settings') + ->condition('view_mode', $view_mode->view_mode) + ->execute(); + db_delete('ds_layout_settings') + ->condition('view_mode', $view_mode->view_mode) + ->execute(); + + // Clear entity info cache and trigger menu build on next request. + cache_clear_all('entity_info', 'cache', TRUE); + variable_set('menu_rebuild_needed', TRUE); + + // Redirect. + $form_state['redirect'] = 'admin/structure/ds/view_modes'; + drupal_set_message(t('The view mode %view_mode has been ' . $action . '.', array('%view_mode' => $view_mode->label))); +} diff --git a/sites/all/modules/custom/ds/plugins/content_types/dsc/dsc.inc b/sites/all/modules/custom/ds/plugins/content_types/dsc/dsc.inc new file mode 100644 index 0000000000..ead5bf425e --- /dev/null +++ b/sites/all/modules/custom/ds/plugins/content_types/dsc/dsc.inc @@ -0,0 +1,91 @@ + t('Display Suite content'), + 'category' => t('Display Suite'), + 'single' => TRUE, + 'defaults' => array( + 'title' => '', + 'body' => '', + 'format' => 'ds_code', + 'context' => array(), + ), + 'description' => t('Add custom content with the possibility to use the entity object when using the Display Suite format.'), + 'js' => array('misc/textarea.js', 'misc/collapse.js'), + 'all contexts' => TRUE, +); + +/** + * Output function for the 'Display Suite' content type. + */ +function ds_dsc_content_type_render($subtype, $conf, $panel_args, $context, $incoming) { + $block = new stdClass(); + + $field = array(); + + $entity = array_shift($context); + $field['entity'] = isset($entity->data) ? $entity->data : NULL; + $field['properties']['code']['format'] = $conf['format']; + $field['properties']['code']['value'] = $conf['body']; + + $block->module = 'ds'; + $block->title = $conf['title']; + $block->content = ds_render_code_field($field); + + return $block; +} + +/** + * The form to add or edit Display Suite content. + */ +function ds_dsc_content_type_edit_form($form, &$form_state) { + $conf = $form_state['conf']; + + $form['title'] = array( + '#type' => 'textfield', + '#default_value' => isset($conf['title']) ? $conf['title'] : '', + '#title' => t('Title'), + ); + + $form['body'] = array( + '#type' => 'text_format', + '#title' => t('Body'), + '#default_value' => isset($conf['body']) ? $conf['body'] : '', + '#format' => isset($conf['format']) ? $conf['format'] : 'ds_code', + ); + + return $form; +} + +/** + * Save the Display Suite content. + */ +function ds_dsc_content_type_edit_form_submit($form, &$form_state) { + $form_state['conf']['title'] = $form_state['values']['title']; + $form_state['conf']['body'] = $form_state['values']['body']['value']; + $form_state['conf']['format'] = $form_state['values']['body']['format']; + $form_state['conf']['context'] = array(); +} + +/** + * Returns the administrative title for a Display Suite content. + */ +function ds_dsc_content_type_admin_title($subtype, $conf) { + return (!empty($conf['title'])) ? $conf['title'] : t('Display Suite content'); +} + +/** + * Display the administrative information for a Display Suite content pane. + */ +function ds_dsc_content_type_admin_info($subtype, $conf) { + return 'Display Suite content can only be rendered on the frontend.'; +} diff --git a/sites/all/modules/custom/ds/tests/ds.base.test b/sites/all/modules/custom/ds/tests/ds.base.test new file mode 100644 index 0000000000..4bfdfc309f --- /dev/null +++ b/sites/all/modules/custom/ds/tests/ds.base.test @@ -0,0 +1,874 @@ + '', 'user' => 'user', 'ds_search' => 'ds_search')); + menu_rebuild(); + + $this->admin_user = $this->drupalCreateUser(array('admin_classes', 'admin_view_modes', 'admin_fields', 'admin_display_suite', 'ds_switch article', 'use text format ds_code', 'access administration pages', 'administer content types', 'administer users', 'administer comments', 'administer nodes', 'bypass node access', 'administer blocks', 'search content', 'use advanced search', 'administer search', 'access user profiles', 'administer permissions')); + $this->drupalLogin($this->admin_user); + } + + /** + * Select a layout. + */ + function dsSelectLayout($edit = array(), $assert = array(), $url = 'admin/structure/types/manage/article/display', $options = array()) { + + $edit += array( + 'additional_settings[layout]' => 'ds_2col_stacked', + ); + + $this->drupalPost($url, $edit, t('Save'), $options); + + $assert += array( + 'regions' => array( + 'header' => '' . t('Header') . '', + 'left' => '' . t('Left') . '', + 'right' => '' . t('Right') . '', + 'footer' => '' . t('Footer') . '', + ), + ); + + foreach ($assert['regions'] as $region => $raw) { + $this->assertRaw($region, t('Region !region found', array('!region' => $region))); + } + } + + /** + * Configure classes + */ + function dsConfigureClasses($edit = array()) { + + $edit += array( + 'ds_classes_regions' => "class_name_1\nclass_name_2|Friendly name" + ); + + $this->drupalPost('admin/structure/ds/classes', $edit, t('Save configuration')); + $this->assertText(t('The configuration options have been saved.'), t('CSS classes configuration saved')); + $this->assertRaw('class_name_1', 'Class name 1 found'); + $this->assertRaw('class_name_2', 'Class name 1 found'); + } + + /** + * Configure classes on a layout. + */ + function dsSelectClasses($edit = array(), $url = 'admin/structure/types/manage/article/display') { + + $edit += array( + "additional_settings[header][]" => 'class_name_1', + "additional_settings[footer][]" => 'class_name_2', + ); + + $this->drupalPost($url, $edit, t('Save')); + } + + /** + * Configure Field UI. + */ + function dsConfigureUI($edit, $url = 'admin/structure/types/manage/article/display') { + $this->drupalPost($url, $edit, t('Save')); + } + + /** + * Edit field formatter settings + */ + function dsEditFormatterSettings($edit, $url = 'admin/structure/types/manage/article/display', $element_value = 'edit body') { + $this->drupalPost($url, array(), $element_value); + $this->drupalPost(NULL, $edit, t('Update')); + $this->drupalPost(NULL, array(), t('Save')); + } + + /** + * Create a view mode. + * + * @param $edit + * An optional array of view mode properties. + */ + function dsCreateViewMode($edit = array()) { + + $edit += array( + 'name' => 'Testing', + 'view_mode' => 'testing', + 'entities[node]' => '1' + ); + + $this->drupalPost('admin/structure/ds/view_modes/manage', $edit, t('Save')); + $this->assertText(t('The view mode ' . $edit['name'] . ' has been saved'), t('!name view mode has been saved', array('!name' => $edit['name']))); + } + + /** + * Create a code field. + * + * @param $edit + * An optional array of field properties. + */ + function dsCreateCodeField($edit = array(), $url = 'admin/structure/ds/fields/manage_custom') { + + $edit += array( + 'name' => 'Test field', + 'field' => 'test_field', + 'entities[node]' => '1', + 'code[value]' => 'Test field', + 'use_token' => '0', + ); + + $this->drupalPost($url, $edit, t('Save')); + $this->assertText(t('The field ' . $edit['name'] . ' has been saved'), t('!name field has been saved', array('!name' => $edit['name']))); + } + + /** + * Create a block field. + * + * @param $edit + * An optional array of field properties. + */ + function dsCreateBlockField($edit = array(), $url = 'admin/structure/ds/fields/manage_block', $first = TRUE) { + + $edit += array( + 'name' => 'Test block field', + 'entities[node]' => '1', + 'block' => 'node|recent', + 'block_render' => DS_BLOCK_TEMPLATE, + ); + + if ($first) { + $edit += array('field' => 'test_block_field'); + } + + $this->drupalPost($url, $edit, t('Save')); + $this->assertText(t('The field ' . $edit['name'] . ' has been saved'), t('!name field has been saved', array('!name' => $edit['name']))); + } + + /** + * Create a block field. + * + * @param $edit + * An optional array of field properties. + */ + function dsCreatePreprocessField($edit = array(), $url = 'admin/structure/ds/fields/manage_preprocess', $first = TRUE) { + + $edit += array( + 'name' => 'Submitted', + 'entities[node]' => '1', + ); + + if ($first) { + $edit += array('field' => 'submitted'); + } + + $this->drupalPost($url, $edit, t('Save')); + $this->assertText(t('The field ' . $edit['name'] . ' has been saved'), t('!name field has been saved', array('!name' => $edit['name']))); + } + + /** + * Create a dynamic field. + * + * @param $edit + * An optional array of field properties. + */ + function dsCreateDynamicField($edit = array(), $url = 'admin/structure/ds/fields/manage_ctools', $first = TRUE) { + + $edit += array( + 'name' => 'Dynamic', + 'entities[node]' => '1', + ); + + if ($first) { + $edit += array('field' => 'dynamic'); + } + + $this->drupalPost($url, $edit, t('Save')); + $this->assertText(t('The field ' . $edit['name'] . ' has been saved'), t('!name field has been saved', array('!name' => $edit['name']))); + } +} + +/** + * Test managing of custom fields. + */ +class dsFieldsTests extends dsBaseTest { + + /** + * Implements getInfo(). + */ + public static function getInfo() { + return array( + 'name' => t('Fields'), + 'description' => t('Tests for managing custom code, dynamic, preprocess and block fields.'), + 'group' => t('Display Suite'), + ); + } + + /** + * Test Display fields. + */ + function testDSFields() { + + $edit = array( + 'name' => 'Test field', + 'field' => 'test_field', + 'entities[node]' => '1', + 'code[value]' => 'Test field', + 'use_token' => '0', + ); + + $this->dsCreateCodeField($edit); + + // Create the same and assert it already exists. + $this->drupalPost('admin/structure/ds/fields/manage_custom', $edit, t('Save')); + $this->assertText(t('The machine-readable name is already in use. It must be unique.'), t('Field testing already exists.')); + + $this->dsSelectLayout(); + + // Assert it's found on the Field UI for article. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertRaw('fields[test_field][weight]', t('Test field found on node article.')); + + // Assert it's not found on the Field UI for users. + $this->drupalGet('admin/config/people/accounts/display'); + $this->assertNoRaw('fields[test_field][weight]', t('Test field not found on user.')); + + // Update testing label + $edit = array( + 'name' => 'Test field 2', + ); + $this->drupalPost('admin/structure/ds/fields/manage_custom/test_field', $edit, t('Save')); + $this->assertText(t('The field Test field 2 has been saved'), t('Test field label updated')); + + // Use the Field UI limit option. + $this->dsSelectLayout(array(), array(), 'admin/structure/types/manage/page/display'); + $this->dsSelectLayout(array(), array(), 'admin/structure/types/manage/article/display/teaser'); + $edit = array( + 'ui_limit' => 'article|default', + ); + $this->drupalPost('admin/structure/ds/fields/manage_custom/test_field', $edit, t('Save')); + + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertRaw('fields[test_field][weight]', t('Test field field found on node article, default.')); + $this->drupalGet('admin/structure/types/manage/article/display/teaser'); + $this->assertNoRaw('fields[test_field][weight]', t('Test field field not found on node article, teaser.')); + $this->drupalGet('admin/structure/types/manage/page/display'); + $this->assertNoRaw('fields[test_field][weight]', t('Test field field not found on node page, default.')); + $edit = array( + 'ui_limit' => 'article|*', + ); + $this->drupalPost('admin/structure/ds/fields/manage_custom/test_field', $edit, t('Save')); + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertRaw('fields[test_field][weight]', t('Test field field found on node article, default.')); + $this->drupalGet('admin/structure/types/manage/article/display/teaser'); + $this->assertRaw('fields[test_field][weight]', t('Test field field found on node article, teaser.')); + + + + // Remove the field. + $this->drupalPost('admin/structure/ds/fields/delete/test_field', array(), t('Delete')); + $this->assertText(t('The field Test field 2 has been deleted'), t('Test field removed')); + + // Assert the field is gone at the manage display screen. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertNoRaw('fields[test_field][weight]', t('Test field field not found on node article.')); + + // Block fields. + $edit = array( + 'name' => 'Test block field', + 'field' => 'test_block_field', + 'entities[node]' => '1', + 'block' => 'node|recent', + 'block_render' => DS_BLOCK_TEMPLATE, + ); + + $this->dsCreateBlockField($edit); + + // Create the same and assert it already exists. + $this->drupalPost('admin/structure/ds/fields/manage_block', $edit, t('Save')); + $this->assertText(t('The machine-readable name is already in use. It must be unique.'), t('Block test field already exists.')); + + $this->dsSelectLayout(); + + // Assert it's found on the Field UI for article. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertRaw('fields[test_block_field][weight]', t('Test block field found on node article.')); + + // Assert it's not found on the Field UI for users. + $this->drupalGet('admin/config/people/accounts/display'); + $this->assertNoRaw('fields[test_block_field][weight]', t('Test block field not found on user.')); + + // Update testing label + $edit = array( + 'name' => 'Test block field 2', + ); + $this->drupalPost('admin/structure/ds/fields/manage_block/test_block_field', $edit, t('Save')); + $this->assertText(t('The field Test block field 2 has been saved'), t('Test field label updated')); + + // Remove the block field. + $this->drupalPost('admin/structure/ds/fields/delete/test_block_field', array(), t('Delete')); + $this->assertText(t('The field Test block field 2 has been deleted'), t('Test field removed')); + + // Assert the block field is gone at the manage display screen. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertNoRaw('fields[test_block_field][weight]', t('Test block field not found on node article.')); + + // Preprocess fields. + $edit = array( + 'name' => 'Submitted', + 'field' => 'submitted', + 'entities[node]' => '1', + ); + + $this->dsCreatePreprocessField($edit); + + // Create the same and assert it already exists. + $this->drupalPost('admin/structure/ds/fields/manage_custom', $edit, t('Save')); + $this->assertText(t('The machine-readable name is already in use. It must be unique.'), t('Submitted already exists.')); + + $this->dsSelectLayout(); + + // Assert it's found on the Field UI for article. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertRaw('fields[submitted][weight]', t('Submitted found on node article.')); + + // Assert it's not found on the Field UI for users. + $this->drupalGet('admin/config/people/accounts/display'); + $this->assertNoRaw('fields[submitted][weight]', t('Submitted not found on user.')); + + // Update testing label + $edit = array( + 'name' => 'Submitted by', + ); + $this->drupalPost('admin/structure/ds/fields/manage_preprocess/submitted', $edit, t('Save')); + $this->assertText(t('The field Submitted by has been saved'), t('Submitted label updated')); + + // Remove a field. + $this->drupalPost('admin/structure/ds/fields/delete/submitted', array(), t('Delete')); + $this->assertText(t('The field Submitted by has been deleted'), t('Submitted removed')); + + // Assert the field is gone at the manage display screen. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertNoRaw('fields[submitted][weight]', t('Submitted field not found on node article.')); + + // Dynamic fields. + $edit = array( + 'name' => 'Dynamic', + 'field' => 'dynamic', + 'entities[node]' => '1', + ); + + $this->dsCreateDynamicField($edit); + + // Create the same and assert it already exists. + $this->drupalPost('admin/structure/ds/fields/manage_ctools', $edit, t('Save')); + $this->assertText(t('The machine-readable name is already in use. It must be unique.'), t('Dynamic already exists.')); + + $this->dsSelectLayout(); + + // Assert it's found on the Field UI for article. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertRaw('fields[dynamic][weight]', t('Dynamic found on node article.')); + + // Assert it's not found on the Field UI for users. + $this->drupalGet('admin/config/people/accounts/display'); + $this->assertNoRaw('fields[dynamic][weight]', t('Dynamic not found on user.')); + + // Update testing label + $edit = array( + 'name' => 'Uber dynamic', + ); + $this->drupalPost('admin/structure/ds/fields/manage_ctools/dynamic', $edit, t('Save')); + $this->assertText(t('The field Uber dynamic has been saved'), t('Dynamic label updated')); + + // Remove a field. + $this->drupalPost('admin/structure/ds/fields/delete/dynamic', array(), t('Delete')); + $this->assertText(t('The field Uber dynamic has been deleted'), t('Dynamic removed')); + + // Assert the field is gone at the manage display screen. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertNoRaw('fields[dynamic][weight]', t('Dynamic field not found on node article.')); + } +} + +/** + * Test managing of view modes. + */ +class dsViewModesTests extends dsBaseTest { + + /** + * Implements getInfo(). + */ + public static function getInfo() { + return array( + 'name' => t('View modes'), + 'description' => t('Tests for managing custom view modes.'), + 'group' => t('Display Suite'), + ); + } + + /** + * Test managing view modes. + */ + function testDSManageViewModes() { + + $edit = array( + 'name' => 'Testing', + 'view_mode' => 'testing', + 'entities[node]' => '1' + ); + + $this->dsCreateViewMode($edit); + + // Create the same and assert it already exists. + $this->drupalPost('admin/structure/ds/view_modes/manage', $edit, t('Save')); + $this->assertText(t('The machine-readable name is already in use. It must be unique.'), t('View mode testing already exists.')); + + // Assert it's found on the Field UI for article. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertRaw('additional_settings[modes][view_modes_custom][testing]', t('Testing view mode found on node article.')); + + // Assert it's not found on the Field UI for article. + $this->drupalGet('admin/config/people/accounts/display'); + $this->assertNoRaw('additional_settings[modes][view_modes_custom][testing]', t('Testing view mode not found on user.')); + + // Update testing label + $edit = array( + 'name' => 'Testing 2', + ); + $this->drupalPost('admin/structure/ds/view_modes/manage/testing', $edit, t('Save')); + $this->assertText(t('The view mode Testing 2 has been saved'), t('Testing label updated')); + + // Remove a view mode. + $this->drupalPost('admin/structure/ds/view_modes/delete/testing', array(), t('Delete')); + $this->assertText(t('The view mode Testing 2 has been deleted'), t('Testing view mode removed')); + + // Assert the view mode is gone at the manage display screen. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertNoRaw('additional_settings[modes][view_modes_custom][testing]', t('Testing view mode found on node article.')); + } +} + +/** + * Test managing of layouts and CSS classes + */ +class dsLayoutsClassesTests extends dsBaseTest { + + /** + * Implements getInfo(). + */ + public static function getInfo() { + return array( + 'name' => t('Layouts'), + 'description' => t('Tests for managing layouts and classes on Field UI screen.'), + 'group' => t('Display Suite'), + ); + } + + /** + * Test selecting layouts, classes, region to block and fields. + */ + function testDStestLayouts() { + + // Check that the ds_3col_equal_width layout is not available (through the alter). + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertNoRaw('ds_3col_stacked_equal_width', 'ds_3col_stacked_equal_width not available'); + + // Create code, dynamic, preprocess block field. + $this->dsCreateCodeField(); + $this->dsCreateBlockField(); + $this->dsCreateDynamicField(); + $this->dsCreatePreprocessField(); + + $layout = array( + 'additional_settings[layout]' => 'ds_2col_stacked', + ); + + $assert = array( + 'regions' => array( + 'header' => '' . t('Header') . '', + 'left' => '' . t('Left') . '', + 'right' => '' . t('Right') . '', + 'footer' => '' . t('Footer') . '', + ), + ); + + $fields = array( + 'fields[post_date][region]' => 'header', + 'fields[author][region]' => 'left', + 'fields[links][region]' => 'left', + 'fields[body][region]' => 'right', + 'fields[comments][region]' => 'footer', + 'fields[test_field][region]' => 'left', + 'fields[test_block_field][region]' => 'left', + 'fields[submitted][region]' => 'left', + 'fields[dynamic][region]' => 'left', + 'fields[ds_extras_extra_test_field][region]' => 'header', + ); + + // Setup first layout. + $this->dsSelectLayout($layout, $assert); + $this->dsConfigureClasses(); + $this->dsSelectClasses(); + $this->dsConfigureUI($fields); + + // Assert the two extra fields are found. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertRaw('ds_extras_extra_test_field'); + $this->assertRaw('ds_extras_second_field'); + + // Assert we have some configuration in our database. + $count = db_query("SELECT COUNT(settings) FROM {ds_layout_settings} WHERE entity_type = 'node' AND bundle = 'article' AND view_mode = 'default'")->fetchField(); + $this->assertEqual($count, 1, t('1 record found for layout serttings for node article')); + + // Lookup settings and verify. + $data = unserialize(db_query("SELECT settings FROM {ds_layout_settings} WHERE entity_type = 'node' AND bundle = 'article' AND view_mode = 'default'")->fetchField()); + $this->assertTrue(in_array('ds_extras_extra_test_field', $data['regions']['header']), t('Extra field is in header')); + $this->assertTrue(in_array('post_date', $data['regions']['header']), t('Post date is in header')); + $this->assertTrue(in_array('test_field', $data['regions']['left']), t('Test field is in left')); + $this->assertTrue(in_array('author', $data['regions']['left']), t('Author is in left')); + $this->assertTrue(in_array('links', $data['regions']['left']), t('Links is in left')); + $this->assertTrue(in_array('test_block_field', $data['regions']['left']), t('Test block field is in left')); + $this->assertTrue(in_array('submitted', $data['regions']['left']), t('Submitted field is in left')); + $this->assertTrue(in_array('dynamic', $data['regions']['left']), t('Dynamic field is in left')); + $this->assertTrue(in_array('body', $data['regions']['right']), t('Body is in right')); + $this->assertTrue(in_array('comments', $data['regions']['footer']), t('Comments is in footer')); + $this->assertTrue(in_array('class_name_1', $data['classes']['header']), t('Class name 1 is in header')); + $this->assertTrue(empty($data['classes']['left']), t('Left has no classes')); + $this->assertTrue(empty($data['classes']['right']), t('Right has classes')); + $this->assertTrue(in_array('class_name_2', $data['classes']['footer']), t('Class name 2 is in header')); + + // Extra save for the dynamic field. + $field_settings = ds_get_field_settings('node', 'article', 'default'); + $formatter_settings = array( + 'show_title' => 0, + 'title_wrapper' => '', + 'ctools' => 'a:3:{s:4:"conf";a:3:{s:7:"context";s:25:"argument_entity_id:node_1";s:14:"override_title";i:0;s:19:"override_title_text";s:0:"";}s:4:"type";s:14:"node_type_desc";s:7:"subtype";s:14:"node_type_desc";}', + ); + $field_settings['dynamic']['formatter_settings'] = $formatter_settings; + $record = new stdClass(); + $record->id = 'node|article|default'; + $record->entity_type = 'node'; + $record->bundle = 'article'; + $record->view_mode = 'default'; + $record->settings = $field_settings; + drupal_write_record('ds_field_settings', $record, array('id')); + cache_clear_all('ds_fields:', 'cache', TRUE); + cache_clear_all('ds_field_settings', 'cache'); + + // Create a article node and verify settings. + $settings = array( + 'type' => 'article', + ); + $node = $this->drupalCreateNode($settings); + $this->drupalGet('node/' . $node->nid); + + // Assert regions. + $this->assertRaw('group-header', 'Template found (region header)'); + $this->assertRaw('group-header class_name_1', 'Class found (class_name_1)'); + $this->assertRaw('group-left', 'Template found (region left)'); + $this->assertRaw('group-right', 'Template found (region right)'); + $this->assertRaw('group-footer', 'Template found (region footer)'); + $this->assertRaw('group-footer class_name_2', 'Class found (class_name_2)'); + + // Assert custom fields. + $this->assertRaw('field-name-test-field', t('Custom field found')); + $this->assertRaw('Test field', t('Custom field found')); + $this->assertRaw('field-name-test-block-field', t('Custom block field found')); + $this->assertRaw('

    Recent content

    ', t('Custom block field found')); + $this->assertRaw('Submitted by', t('Submitted field found')); + $this->assertText('Use articles for time-sensitive content like news, press releases or blog posts.', t('Dynamic field found')); + $this->assertText('This is an extra field made available through "Extra fields" functionality.'); + + // Test disable sidebar regions. + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('sidebar-first', 'Left sidebar found.'); + $hide = array( + 'additional_settings[hide_sidebars]' => '1', + ); + $this->dsConfigureUI($hide); + $this->drupalGet('node/' . $node->nid); + $this->assertNoRaw('sidebar-first', 'Left sidebar not found.'); + + // Test HTML5 wrappers + $this->assertNoRaw('assertNoRaw('assertNoRaw(' 'header', + 'additional_settings[region_wrapper][right]' => 'footer', + 'additional_settings[region_wrapper][layout_wrapper]' => 'article', + ); + $this->dsConfigureUI($wrappers); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('assertRaw('assertRaw(' '1'); + $this->drupalPost('admin/structure/types/manage/article/display', $edit, t('Save')); + + // Select layout. + $layout = array( + 'additional_settings[layout]' => 'ds_2col', + ); + + $assert = array( + 'regions' => array( + 'left' => '' . t('Left') . '', + 'right' => '' . t('Right') . '', + ), + ); + $this->dsSelectLayout($layout, $assert, 'admin/structure/types/manage/article/display/full'); + + // Create new block field. + $edit = array( + 'additional_settings[region_to_block][new_block_region]' => 'Block region', + 'additional_settings[region_to_block][new_block_region_key]' => 'block_region', + ); + $this->drupalPost('admin/structure/types/manage/article/display/full', $edit, t('Save')); + $this->assertRaw('' . t('Block region') . '', 'Block region found'); + + // Configure fields + $fields = array( + 'fields[author][region]' => 'left', + 'fields[links][region]' => 'left', + 'fields[body][region]' => 'right', + 'fields[ds_test_field][region]' => 'block_region', + ); + $this->dsConfigureUI($fields, 'admin/structure/types/manage/article/display/full'); + + // Set block in sidebar + $edit = array( + 'blocks[ds_extras_block_region][region]' => 'sidebar_first', + ); + $this->drupalPost('admin/structure/block', $edit, t('Save blocks')); + + // Assert the block is on the node page. + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('

    Block region

    ', 'Block region found'); + $this->assertText('Test code field on node ' . $node->nid, 'Post date in block'); + + // Change layout via admin/structure/ds/layout-change. + // First verify that header and footer are not here. + $this->drupalGet('admin/structure/types/manage/article/display/full'); + $this->assertNoRaw('' . t('Header') . '', 'Header region not found'); + $this->assertNoRaw('' . t('Footer') . '', 'Footer region not found'); + + // Remap the regions. + $edit = array( + 'ds_left' => 'header', + 'ds_right' => 'footer', + 'ds_block_region' => 'footer', + ); + $this->drupalPost('admin/structure/ds/change-layout/node/article/full/ds_2col_stacked', $edit, t('Save'), array('query' => array('destination' => 'admin/structure/types/manage/article/display/full'))); + + // Verify new regions. + $this->assertRaw('' . t('Header') . '', 'Header region found'); + $this->assertRaw('' . t('Footer') . '', 'Footer region found'); + $this->assertRaw('' . t('Block region') . '', 'Block region found'); + + // Verify settings. + $data = unserialize(db_query("SELECT settings FROM {ds_layout_settings} WHERE entity_type = 'node' AND bundle = 'article' AND view_mode = 'full'")->fetchField()); + $this->assertTrue(in_array('author', $data['regions']['header']), t('Author is in header')); + $this->assertTrue(in_array('links', $data['regions']['header']), t('Links field is in header')); + $this->assertTrue(in_array('body', $data['regions']['footer']), t('Body field is in footer')); + $this->assertTrue(in_array('ds_test_field', $data['regions']['footer']), t('Test field is in footer')); + + // Test that a default view mode with no layout is not affected by a disabled view mode. + $edit = array( + 'additional_settings[layout]' => '', + 'additional_settings[modes][view_modes_custom][full]' => FALSE, + ); + $this->drupalPost('admin/structure/types/manage/article/display', $edit, t('Save')); + $this->drupalGet('node/' . $node->nid); + $this->assertNoText('Test code field on node 1', 'No ds field from full view mode layout'); + } +} + +/** + * Tests for Display Suite field permissions. + */ +class dsFieldPermissionTests extends dsBaseTest { + + /** + * Implements getInfo(). + */ + public static function getInfo() { + return array( + 'name' => t('Field permissions'), + 'description' => t('Tests for testing field permissions.'), + 'group' => t('Display Suite'), + ); + } + + function testFieldPermissions() { + + $fields = array( + 'fields[body][region]' => 'right', + 'fields[ds_test_field][region]' => 'left', + ); + + variable_set('ds_extras_field_permissions', TRUE); + $this->refreshVariables(); + module_implements(FALSE, FALSE, TRUE); + + $this->dsSelectLayout(); + $this->dsConfigureUI($fields); + + // Create a node. + $settings = array('type' => 'article'); + $node = $this->drupalCreateNode($settings); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('group-right', 'Template found (region right)'); + $this->assertNoText('Test code field on node ' . $node->nid, 'Test code field not found'); + + // Give permissions. + $edit = array( + '2[view author on node]' => 1, + '2[view ds_test_field on node]' => 1, + ); + $this->drupalPost('admin/people/permissions', $edit, t('Save permissions')); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('group-left', 'Template found (region left)'); + $this->assertText('Test code field on node ' . $node->nid, 'Test code field found'); + } +} + +/** + * Tests for Display Suite hooks. + */ +class dsHooksTests extends dsBaseTest { + + /** + * Implements getInfo(). + */ + public static function getInfo() { + return array( + 'name' => t('Hooks'), + 'description' => t('Tests for hooks: ds_fields, ds_fields_alter, ds_layouts.'), + 'group' => t('Display Suite'), + ); + } + + /** + * Test fields hooks. + */ + function testDSFields() { + + $this->dsSelectLayout(); + + // Find the two extra fields from the test module on the node type. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertText('Test code field from hook', 'Test field found on node.'); + $this->assertText('Field altered', 'Test field altered found on node.'); + + $empty = array(); + $edit = array('additional_settings[layout]' => 'ds_2col_stacked'); + $this->dsSelectLayout($edit, $empty, 'admin/config/people/accounts/display'); + + // Fields can not be found on user. + $this->drupalGet('admin/config/people/accounts/display'); + $this->assertNoText('Test code field from hook', 'Test field not found on user.'); + $this->assertNoText('Field altered', 'Test field altered not found on user.'); + + // Select layout. + $this->dsSelectLayout(); + + $fields = array( + 'fields[author][region]' => 'left', + 'fields[links][region]' => 'left', + 'fields[body][region]' => 'right', + 'fields[ds_test_field][region]' => 'right', + 'fields[ds_test_field_empty_string][region]' => 'right', + 'fields[ds_test_field_empty_string][label]' => 'inline', + 'fields[ds_test_field_false][region]' => 'right', + 'fields[ds_test_field_false][label]' => 'inline', + 'fields[ds_test_field_null][region]' => 'right', + 'fields[ds_test_field_null][label]' => 'inline', + 'fields[ds_test_field_nothing][region]' => 'right', + 'fields[ds_test_field_nothing][label]' => 'inline', + 'fields[ds_test_field_zero_int][region]' => 'right', + 'fields[ds_test_field_zero_int][label]' => 'inline', + 'fields[ds_test_field_zero_string][region]' => 'right', + 'fields[ds_test_field_zero_string][label]' => 'inline', + 'fields[ds_test_field_zero_float][region]' => 'right', + 'fields[ds_test_field_zero_float][label]' => 'inline', + ); + + $this->dsSelectLayout(); + $this->dsConfigureUI($fields); + + // Create a node. + $settings = array('type' => 'article'); + $node = $this->drupalCreateNode($settings); + $this->drupalGet('node/' . $node->nid); + + $this->assertRaw('group-left', 'Template found (region left)'); + $this->assertRaw('group-right', 'Template found (region right)'); + $this->assertText('Test code field on node ' . $node->nid, 'Test code field found'); + $this->assertNoText('Test code field that returns an empty string', 'Test code field that returns an empty string is not visible.'); + $this->assertNoText('Test code field that returns FALSE', 'Test code field that returns FALSE is not visible.'); + $this->assertNoText('Test code field that returns NULL', 'Test code field that returns NULL is not visible.'); + $this->assertNoText('Test code field that returns nothing', 'Test code field that returns nothing is not visible.'); + $this->assertNoText('Test code field that returns an empty array', 'Test code field that returns an empty array is not visible.'); + $this->assertText('Test code field that returns zero as an integer', 'Test code field that returns zero as an integer is visible.'); + $this->assertText('Test code field that returns zero as a string', 'Test code field that returns zero as a string is visible.'); + $this->assertText('Test code field that returns zero as a floating point number', 'Test code field that returns zero as a floating point number is visible.'); + } + + /** + * Test layouts hook. + */ + function testDSLayouts() { + + // Assert our 2 tests layouts are found. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertRaw('Test One column', 'Test One column layout found'); + $this->assertRaw('Test Two column', 'Test Two column layout found'); + + $layout = array( + 'additional_settings[layout]' => 'dstest_2col', + ); + + $assert = array( + 'regions' => array( + 'left' => '' . t('Left') . '', + 'right' => '' . t('Right') . '', + ), + ); + + $fields = array( + 'fields[author][region]' => 'left', + 'fields[links][region]' => 'left', + 'fields[body][region]' => 'right', + ); + + $this->dsSelectLayout($layout, $assert); + $this->dsConfigureUI($fields); + + // Create a node. + $settings = array('type' => 'article'); + $node = $this->drupalCreateNode($settings); + + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('group-left', 'Template found (region left)'); + $this->assertRaw('group-right', 'Template found (region right)'); + $this->assertRaw('dstest_2col.css', 'Css file included'); + + // Alter a region + $settings = array( + 'type' => 'article', + 'title' => 'Alter me!', + ); + $node = $this->drupalCreateNode($settings); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('cool!', 'Region altered'); + } +} diff --git a/sites/all/modules/custom/ds/tests/ds.entities.test b/sites/all/modules/custom/ds/tests/ds.entities.test new file mode 100644 index 0000000000..4ef65b86ac --- /dev/null +++ b/sites/all/modules/custom/ds/tests/ds.entities.test @@ -0,0 +1,678 @@ + t('Node display'), + 'description' => t('Tests for display of nodes and fields.'), + 'group' => t('Display Suite'), + ); + } + + /** + * Utility function to setup for all kinds of tests. + * + * @param $label + * How the body label must be set. + */ + function entitiesTestSetup($label = 'above') { + + // Create a node. + $settings = array('type' => 'article', 'promote' => 1); + $node = $this->drupalCreateNode($settings); + + // Create field CSS classes. + $edit = array('ds_classes_fields' => "test_field_class\ntest_field_class_2|Field class 2"); + $this->drupalPost('admin/structure/ds/classes', $edit, t('Save configuration')); + + // Create a token and php field. + $token_field = array( + 'name' => 'Token field', + 'field' => 'token_field', + 'entities[node]' => '1', + 'code[value]' => '
    [node:title]', + 'use_token' => '1', + ); + $php_field = array( + 'name' => 'PHP field', + 'field' => 'php_field', + 'entities[node]' => '1', + 'code[value]' => "", + 'use_token' => '0', + ); + $this->dsCreateCodeField($token_field); + $this->dsCreateCodeField($php_field); + + // Select layout. + $this->dsSelectLayout(); + + // Configure fields. + $fields = array( + 'fields[token_field][region]' => 'header', + 'fields[php_field][region]' => 'left', + 'fields[body][region]' => 'right', + 'fields[node_link][region]' => 'footer', + 'fields[body][label]' => $label, + 'fields[submitted_by][region]' => 'header', + ); + $this->dsConfigureUI($fields); + + return $node; + } + + /** + * Utility function to clear field settings. + */ + function entitiesClearFieldSettings() { + db_query('TRUNCATE {ds_field_settings}'); + cache_clear_all('ds_fields:', 'cache', TRUE); + cache_clear_all('ds_field_settings', 'cache'); + } + + /** + * Set the label. + */ + function entitiesSetLabelClass($label, $text = '', $class = '', $hide_colon = FALSE) { + $edit = array( + 'fields[body][label]' => $label, + ); + if (!empty($text)) { + $edit['fields[body][settings_edit_form][settings][ft][lb]'] = $text; + } + if (!empty($class)) { + $edit['fields[body][settings_edit_form][settings][ft][classes][]'] = $class; + } + if ($hide_colon) { + $edit['fields[body][settings_edit_form][settings][ft][lb-col]'] = '1'; + } + $this->dsEditFormatterSettings($edit); + } + + /** + * Test basic node display fields. + */ + function testDSNodeEntity() { + + $node = $this->entitiesTestSetup(); + $node_author = user_load($node->uid); + + // Look at node and verify token and block field. + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('view-mode-full', 'Template file found (in full view mode)'); + $this->assertRaw('
    ' . $node->title . '', t('Token field found')); + $this->assertRaw('I am a PHP field', t('PHP field found')); + $this->assertRaw('group-header', 'Template found (region header)'); + $this->assertRaw('group-footer', 'Template found (region footer)'); + $this->assertRaw('group-left', 'Template found (region left)'); + $this->assertRaw('group-right', 'Template found (region right)'); + $this->assertPattern('/]*>Submitted[^<]*]+href="' . preg_quote(base_path(), '/') . 'user\/' . $node_author->uid . '"[^>]*>' . check_plain($node_author->name) . '<\/a>.<\/div>/', t('Submitted by line found')); + + // Configure teaser layout. + $teaser = array( + 'additional_settings[layout]' => 'ds_2col', + ); + $teaser_assert = array( + 'regions' => array( + 'left' => '' . t('Left') . '', + 'right' => '' . t('Right') . '', + ), + ); + $this->dsSelectLayout($teaser, $teaser_assert, 'admin/structure/types/manage/article/display/teaser'); + + $fields = array( + 'fields[token_field][region]' => 'left', + 'fields[php_field][region]' => 'left', + 'fields[body][region]' => 'right', + 'fields[links][region]' => 'right', + ); + $this->dsConfigureUI($fields, 'admin/structure/types/manage/article/display/teaser'); + + // Switch view mode on full node page. + $edit = array('ds_switch' => 'teaser'); + $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save')); + $this->assertRaw('view-mode-teaser', 'Switched to teaser mode'); + $this->assertRaw('group-left', 'Template found (region left)'); + $this->assertRaw('group-right', 'Template found (region right)'); + $this->assertNoRaw('group-header', 'Template found (no region header)'); + $this->assertNoRaw('group-footer', 'Template found (no region footer)'); + + $edit = array('ds_switch' => ''); + $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save')); + $this->assertRaw('view-mode-full', 'Switched to full mode again'); + + // Test all options of a block field. + $block = array( + 'name' => 'Test block field', + 'field' => 'test_block_field', + 'entities[node]' => '1', + 'block' => 'node|recent', + 'block_render' => DS_BLOCK_TEMPLATE, + ); + $this->dsCreateBlockField($block); + $fields = array( + 'fields[test_block_field][region]' => 'left', + 'fields[token_field][region]' => 'hidden', + 'fields[php_field][region]' => 'hidden', + 'fields[body][region]' => 'hidden', + 'fields[links][region]' => 'hidden', + ); + $this->dsConfigureUI($fields); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('

    Recent content

    '); + + $block = array( + 'block_render' => DS_BLOCK_TITLE_CONTENT, + ); + $this->dsCreateBlockField($block, 'admin/structure/ds/fields/manage_block/test_block_field', FALSE); + $this->drupalGet('node/' . $node->nid); + $this->assertNoRaw('

    Recent content

    '); + $this->assertRaw('Recent content'); + + $block = array( + 'block_render' => DS_BLOCK_CONTENT, + ); + $this->dsCreateBlockField($block, 'admin/structure/ds/fields/manage_block/test_block_field', FALSE); + $this->drupalGet('node/' . $node->nid); + $this->assertNoRaw('

    Recent content

    '); + $this->assertNoRaw('Recent content'); + + // Remove the page title (we'll use the switch view mode functionality too for this). + $edit = array('additional_settings[ds_page_title][ds_page_title_options][page_option_type]' => '1'); + $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display/teaser'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('

    + '. $node->title . '

    '); + $edit = array('ds_switch' => 'teaser'); + $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save')); + $this->drupalGet('node/' . $node->nid); + $this->assertNoRaw('

    + '. $node->title . '

    '); + + // Use page title substitutions. + $edit = array('additional_settings[ds_page_title][ds_page_title_options][page_option_type]' => '2', 'additional_settings[ds_page_title][ds_page_title_options][page_option_title]' => 'Change title: %node:type'); + $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display/teaser'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('

    + Change title: '. $node->type . '

    '); + $edit = array('additional_settings[ds_page_title][ds_page_title_options][page_option_type]' => '0'); + $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display/teaser'); + + // Go to home page, page title shouldn't bleed here + // see http://drupal.org/node/1446554. + $edit = array('ds_switch' => ''); + $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save')); + $edit = array('additional_settings[ds_page_title][ds_page_title_options][page_option_type]' => '2', 'additional_settings[ds_page_title][ds_page_title_options][page_option_title]' => 'Bleed title: %node:type'); + $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('

    + Bleed title: article

    '); + $this->drupalGet('node'); + $this->assertNoText('Bleed title'); + + // Test revisions. Enable the revision view mode + $edit = array('additional_settings[modes][view_modes_custom][revision]' => '1'); + $this->drupalPost('admin/structure/types/manage/article/display', $edit, t('Save')); + + // Select layout and configure fields. + $edit = array( + 'additional_settings[layout]' => 'ds_2col', + ); + $assert = array( + 'regions' => array( + 'left' => '' . t('Left') . '', + 'right' => '' . t('Right') . '', + ), + ); + $this->dsSelectLayout($edit, $assert, 'admin/structure/types/manage/article/display/revision'); + $edit = array( + 'fields[body][region]' => 'left', + 'fields[links][region]' => 'right', + 'fields[author][region]' => 'right', + ); + $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display/revision'); + + // Create revision of the node. + $edit = array( + 'revision' => TRUE, + 'log' => 'Test revision', + ); + $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save')); + $this->assertText('Revisions'); + + // Assert revision is using 2 col template. + $this->drupalGet('node/' . $node->nid . '/revisions/1/view'); + $this->assertText('Body:', 'Body label'); + + // Change title of revision. + $edit = array('additional_settings[ds_page_title][ds_page_title_options][page_option_type]' => '2', 'additional_settings[ds_page_title][ds_page_title_options][page_option_title]' => 'Custom revision title'); + + $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display/revision'); + $this->drupalGet('node/' . $node->nid . '/revisions/1/view'); + $this->assertText('Custom revision title', 'Custom title on revision view mode'); + + // Assert full view is using stacked template. + $this->drupalGet('node/' . $node->nid); + $this->assertNoText('Body:', 'Body label'); + + // Test formatter limit on article with tags. + $edit = array( + 'ds_switch' => '', + 'field_tags[und]' => 'Tag 1, Tag 2' + ); + $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save')); + $edit = array( + 'fields[field_tags][region]' => 'right', + ); + $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display'); + $this->drupalGet('node/' . $node->nid); + $this->assertText('Tag 1'); + $this->assertText('Tag 2'); + $edit = array( + 'fields[field_tags][format][limit]' => '1', + ); + $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display'); + $this->drupalGet('node/' . $node->nid); + $this->assertText('Tag 1'); + $this->assertNoText('Tag 2'); + + // Test check_plain() on ds_render_field() with the title field. + $edit = array( + 'fields[title][region]' => 'right', + ); + $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display'); + $edit = array( + 'title' => 'Hi, I am an article ', + ); + $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save')); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('

    Hi, I am an article <script>alert('with a javascript tag in the title');</script>

    '); + } + + /** + * Tests on field templates. + */ + function testDSFieldTemplate() { + + // Get a node. + $node = $this->entitiesTestSetup('hidden'); + $body_field = $node->body[$node->language][0]['value']; + + // ------------------------- + // Default theming function. + // ------------------------- + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("

    " . $body_field . "

    +
    "); + + $this->entitiesSetLabelClass('above'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    Body: 

    " . $body_field . "

    +
    "); + + $this->entitiesSetLabelClass('above', 'My body'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    My body: 

    " . $body_field . "

    +
    "); + + $this->entitiesSetLabelClass('hidden', '', 'test_field_class'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("

    " . $body_field . "

    +
    "); + + $this->entitiesClearFieldSettings(); + + // ----------------------- + // Reset theming function. + // ----------------------- + $edit = array( + 'additional_settings[fs1][ft-default]' => 'theme_ds_field_reset', + ); + $this->drupalPost('admin/structure/ds/list/extras', $edit, t('Save configuration')); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    "); + + $this->entitiesSetLabelClass('above'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +
    Body: 

    " . $body_field . "

    "); + + $this->entitiesSetLabelClass('inline'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +
    Body: 

    " . $body_field . "

    "); + + $this->entitiesSetLabelClass('above', 'My body'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +
    My body: 

    " . $body_field . "

    "); + + $this->entitiesSetLabelClass('inline', 'My body'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +
    My body: 

    " . $body_field . "

    "); + + variable_set('ft-kill-colon', TRUE); + $this->refreshVariables(); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +
    My body

    " . $body_field . "

    "); + + $this->entitiesSetLabelClass('hidden'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    "); + $this->entitiesClearFieldSettings(); + + // ---------------------- + // Custom field function. + // ---------------------- + + // With outer wrapper. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][func]' => 'theme_ds_field_expert', + 'fields[body][settings_edit_form][settings][ft][ow]' => '1', + 'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div', + ); + $this->dsEditFormatterSettings($edit); + + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // With outer div wrapper and class. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][ow]' => '1', + 'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class' + ); + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // With outer span wrapper and class. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][ow]' => '1', + 'fields[body][settings_edit_form][settings][ft][ow-el]' => 'span', + 'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class-2' + ); + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // Clear field settings. + $this->entitiesClearFieldSettings(); + + // With outer wrapper and field items wrapper. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][func]' => 'theme_ds_field_expert', + 'fields[body][settings_edit_form][settings][ft][ow]' => '1', + 'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][fis]' => '1', + 'fields[body][settings_edit_form][settings][ft][fis-el]' => 'div' + ); + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // With outer wrapper and field items div wrapper with class. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][ow]' => '1', + 'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][fis]' => '1', + 'fields[body][settings_edit_form][settings][ft][fis-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class' + ); + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // With outer wrapper and field items span wrapper and class. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][ow]' => '1', + 'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][fis]' => '1', + 'fields[body][settings_edit_form][settings][ft][fis-el]' => 'span', + 'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class' + ); + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // With outer wrapper class and field items span wrapper and class. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][ow]' => '1', + 'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class', + 'fields[body][settings_edit_form][settings][ft][fis]' => '1', + 'fields[body][settings_edit_form][settings][ft][fis-el]' => 'span', + 'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class' + ); + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // With outer wrapper span class and field items span wrapper and class. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][ow]' => '1', + 'fields[body][settings_edit_form][settings][ft][ow-el]' => 'span', + 'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class', + 'fields[body][settings_edit_form][settings][ft][fis]' => '1', + 'fields[body][settings_edit_form][settings][ft][fis-el]' => 'span', + 'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class-2' + ); + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // Clear field settings. + $this->entitiesClearFieldSettings(); + + // With field item div wrapper. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][func]' => 'theme_ds_field_expert', + 'fields[body][settings_edit_form][settings][ft][fi]' => '1', + ); + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // With field item span wrapper. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][fi]' => '1', + 'fields[body][settings_edit_form][settings][ft][fi-el]' => 'span', + ); + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // With field item span wrapper and class and odd even. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][fi]' => '1', + 'fields[body][settings_edit_form][settings][ft][fi-el]' => 'span', + 'fields[body][settings_edit_form][settings][ft][fi-cl]' => 'fi-class', + 'fields[body][settings_edit_form][settings][ft][fi-odd-even]' => '1', + ); + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // With fis and fi. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][fis]' => '1', + 'fields[body][settings_edit_form][settings][ft][fis-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class-2', + 'fields[body][settings_edit_form][settings][ft][fi]' => '1', + 'fields[body][settings_edit_form][settings][ft][fi-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][fi-cl]' => 'fi-class', + 'fields[body][settings_edit_form][settings][ft][fi-odd-even]' => '1', + ); + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + // With all wrappers. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][ow]' => '1', + 'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class', + 'fields[body][settings_edit_form][settings][ft][fis]' => '1', + 'fields[body][settings_edit_form][settings][ft][fis-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class-2', + 'fields[body][settings_edit_form][settings][ft][fi]' => '1', + 'fields[body][settings_edit_form][settings][ft][fi-el]' => 'span', + 'fields[body][settings_edit_form][settings][ft][fi-cl]' => 'fi-class', + 'fields[body][settings_edit_form][settings][ft][fi-odd-even]' => '1', + ); + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // With all wrappers and attributes. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][ow]' => '1', + 'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class', + 'fields[body][settings_edit_form][settings][ft][ow-at]' => 'name="ow-att"', + 'fields[body][settings_edit_form][settings][ft][fis]' => '1', + 'fields[body][settings_edit_form][settings][ft][fis-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class-2', + 'fields[body][settings_edit_form][settings][ft][fis-at]' => 'name="fis-att"', + 'fields[body][settings_edit_form][settings][ft][fi]' => '1', + 'fields[body][settings_edit_form][settings][ft][fi-el]' => 'span', + 'fields[body][settings_edit_form][settings][ft][fi-cl]' => 'fi-class', + 'fields[body][settings_edit_form][settings][ft][fi-at]' => 'name="fi-at"', + ); + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // Remove attributes. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][ow]' => '1', + 'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class', + 'fields[body][settings_edit_form][settings][ft][ow-at]' => '', + 'fields[body][settings_edit_form][settings][ft][fis]' => '1', + 'fields[body][settings_edit_form][settings][ft][fis-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class-2', + 'fields[body][settings_edit_form][settings][ft][fis-at]' => '', + 'fields[body][settings_edit_form][settings][ft][fi]' => '1', + 'fields[body][settings_edit_form][settings][ft][fi-el]' => 'span', + 'fields[body][settings_edit_form][settings][ft][fi-cl]' => 'fi-class', + 'fields[body][settings_edit_form][settings][ft][fi-at]' => '', + ); + $this->dsEditFormatterSettings($edit); + + // Label tests with custom function. + $this->entitiesSetLabelClass('above'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +
    Body: 

    " . $body_field . "

    +
    "); + + $this->entitiesSetLabelClass('inline'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +
    Body: 

    " . $body_field . "

    +
    "); + + $this->entitiesSetLabelClass('above', 'My body'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +
    My body: 

    " . $body_field . "

    +
    "); + + $this->entitiesSetLabelClass('inline', 'My body'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +
    My body: 

    " . $body_field . "

    +
    "); + + $this->entitiesSetLabelClass('inline', 'My body', '', TRUE); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +
    My body

    " . $body_field . "

    +
    "); + + $this->entitiesSetLabelClass('hidden'); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // Test default classes on outer wrapper. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][ow]' => '1', + 'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class', + 'fields[body][settings_edit_form][settings][ft][ow-def-cl]' => '1', + ); + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // Test default attributes on field item. + $edit = array( + 'fields[body][settings_edit_form][settings][ft][ow]' => '1', + 'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div', + 'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class', + 'fields[body][settings_edit_form][settings][ft][ow-def-cl]' => '1', + 'fields[body][settings_edit_form][settings][ft][fi-def-at]' => '1', + ); + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    +

    " . $body_field . "

    +
    "); + + // Use the test field theming function to test that this function is + // registered in the theme registry through ds_extras_theme(). + $edit = array( + 'fields[body][settings_edit_form][settings][ft][func]' => 'ds_test_theming_function', + ); + + $this->dsEditFormatterSettings($edit); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw("
    + Testing field output through custom function
    "); + } +} diff --git a/sites/all/modules/custom/ds/tests/ds.exportables.test b/sites/all/modules/custom/ds/tests/ds.exportables.test new file mode 100644 index 0000000000..95b95d6af0 --- /dev/null +++ b/sites/all/modules/custom/ds/tests/ds.exportables.test @@ -0,0 +1,160 @@ + t('Exportables'), + 'description' => t('Tests for exportables in Display Suite.'), + 'group' => t('Display Suite'), + ); + } + + /** + * Enables the exportables module. + */ + function dsExportablesSetup() { + module_enable(array('ds_exportables_test')); + drupal_flush_all_caches(); + } + + // Test view modes. + function testDSExportablesViewmodes() { + $this->dsExportablesSetup(); + + // Find a default view mode on admin screen. + $this->drupalGet('admin/structure/ds/view_modes'); + $this->assertText('Test exportables', t('Exportables view mode found on admin screen.')); + + // Find default view mode on layout screen. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertText('Test exportables', t('Exportables view mode found on display screen.')); + + // Override default view mode. + $edit = array( + 'name' => 'Testing 2', + ); + $this->drupalPost('admin/structure/ds/view_modes/manage/test_exportables', $edit, t('Save')); + $this->assertText(t('The view mode Testing 2 has been saved'), t('Exportables label updated')); + $this->assertText(t('Revert'), t('Revert button found.')); + + // Find default view mode on layout screen. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertText('Testing 2', t('Updated exportables view mode found on display screen.')); + + // Revert the view mode. + $this->drupalPost('admin/structure/ds/view_modes/revert/test_exportables', array(), t('Revert')); + $this->assertText(t('The view mode Testing 2 has been reverted'), t('Testing view mode reverted')); + $this->assertText('Test exportables', t('Exportables view mode found on admin screen.')); + + // Assert the view mode is gone at the manage display screen. + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertNoText('Testing 2', t('Overrided exportables view mode not found on display screen.')); + $this->assertText('Test exportables', t('Default exportables view mode found on display screen.')); + } + + // Test layout and field settings configuration. + function testDSExportablesLayoutFieldsettings() { + $this->dsExportablesSetup(); + + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertNoText(t('This layout is overridden. Click to revert to default settings.')); + + $settings = array( + 'type' => 'article', + 'title' => 'Exportable' + ); + $node = $this->drupalCreateNode($settings); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('group-left', 'Left region found'); + $this->assertRaw('group-right', 'Right region found'); + $this->assertNoRaw('group-header', 'No header region found'); + $this->assertNoRaw('group-footer', 'No footer region found'); + $this->assertRaw('

    Exportable

    ', t('Default title with h3 found')); + $this->assertRaw('Read more', t('Default read more found')); + + // Override default layout. + $layout = array( + 'additional_settings[layout]' => 'ds_2col_stacked', + ); + + $assert = array( + 'regions' => array( + 'header' => '' . t('Header') . '', + 'left' => '' . t('Left') . '', + 'right' => '' . t('Right') . '', + 'footer' => '' . t('Footer') . '', + ), + ); + + $fields = array( + 'fields[post_date][region]' => 'header', + 'fields[author][region]' => 'left', + 'fields[links][region]' => 'left', + 'fields[body][region]' => 'right', + 'fields[comments][region]' => 'footer', + ); + + $this->dsSelectLayout($layout, $assert); + $this->assertText(t('This layout is overridden. Click to revert to default settings.')); + $this->dsConfigureUI($fields); + + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('group-left', 'Left region found'); + $this->assertRaw('group-right', 'Left region found'); + $this->assertRaw('group-header', 'Left region found'); + $this->assertRaw('group-footer', 'Left region found'); + + // Revert. + $edit = array(); + $this->drupalPost('admin/structure/ds/revert-layout/node|article|default', $edit, t('Revert'), array('query' => array('destination' => 'admin/structure/types/manage/article/display'))); + $this->drupalGet('node/' . $node->nid); + $this->assertRaw('group-left', 'Left region found'); + $this->assertRaw('group-right', 'Left region found'); + $this->assertNoRaw('group-header', 'Left region found'); + $this->assertNoRaw('group-footer', 'Left region found'); + $this->assertRaw('

    Exportable

    ', t('Default title with h3 found')); + $this->assertRaw('Read more', t('Default read more found')); + } + + // Test custom field exportables. + function testDSExportablesCustomFields() { + $this->dsExportablesSetup(); + + // Look for default custom field. + $this->drupalGet('admin/structure/ds/fields'); + $this->assertText('Exportable field'); + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertText('Exportable field'); + + // Override custom field. + // Update testing label + $edit = array( + 'name' => 'Overridden field', + ); + $this->drupalPost('admin/structure/ds/fields/manage_custom/ds_exportable_field', $edit, t('Save')); + $this->assertText(t('The field Overridden field has been saved'), t('Default exportable field label updated')); + $this->assertText('Overridden field'); + $this->assertNoText('Exportable field'); + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertText('Overridden field'); + $this->assertNoText('Exportable field'); + + // Revert. + $edit = array(); + $this->drupalPost('admin/structure/ds/fields/revert/ds_exportable_field', $edit, t('Revert')); + $this->assertText('The field Overridden field has been reverted', t('Field reverted')); + $this->assertText('Exportable field'); + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertNoText('Overridden field'); + $this->assertText('Exportable field'); + } +} diff --git a/sites/all/modules/custom/ds/tests/ds.forms.test b/sites/all/modules/custom/ds/tests/ds.forms.test new file mode 100644 index 0000000000..85069ed46c --- /dev/null +++ b/sites/all/modules/custom/ds/tests/ds.forms.test @@ -0,0 +1,63 @@ + t('Forms'), + 'description' => t('Tests for managing layouts on forms.'), + 'group' => t('Display Suite'), + ); + } + + /** + * Forms tests. + */ + function testDSForms() { + + // Create a node. + $node = $this->drupalCreateNode(array('type' => 'article', 'promote' => FALSE)); + + // Configure teaser layout. + $form = array( + 'additional_settings[layout]' => 'ds_2col_stacked', + ); + $form_assert = array( + 'regions' => array( + 'header' => '' . t('Header') . '', + 'left' => '' . t('Left') . '', + 'right' => '' . t('Right') . '', + 'footer' => '' . t('Footer') . '', + ), + ); + $this->dsSelectLayout($form, $form_assert, 'admin/structure/types/manage/article/fields'); + + $fields = array( + 'fields[title][region]' => 'header', + 'fields[body][region]' => 'left', + 'fields[field_image][region]' => 'right', + 'fields[field_tags][region]' => 'right', + ); + $this->dsConfigureUI($fields, 'admin/structure/types/manage/article/fields'); + + // Inspect the node. + $this->drupalGet('node/' . $node->nid . '/edit'); + $this->assertRaw('ds_2col_stacked', 'ds-form class added'); + $this->assertRaw('group-header', 'Template found (region header)'); + $this->assertRaw('group-left', 'Template found (region left)'); + $this->assertRaw('group-right', 'Template found (region right)'); + $this->assertRaw('group-footer', 'Template found (region footer)'); + $this->assertRaw('edit-title', 'Title field found'); + $this->assertRaw('edit-submit', 'Submit field found'); + $this->assertRaw('edit-field-tags-und', 'Tags field found'); + $this->assertRaw('edit-log', 'Revision log found'); + } +} diff --git a/sites/all/modules/custom/ds/tests/ds.search.test b/sites/all/modules/custom/ds/tests/ds.search.test new file mode 100644 index 0000000000..22989b8efe --- /dev/null +++ b/sites/all/modules/custom/ds/tests/ds.search.test @@ -0,0 +1,158 @@ + t('Search'), + 'description' => t('Tests for display of search results for nodes and users.'), + 'group' => t('Display Suite'), + ); + } + + function testDSSearch() { + + // Create nodes. + $i = 15; + while ($i > 0) { + $settings = array( + 'title' => 'title' . $i, + 'type' => 'article', + 'promote' => 1, + ); + $this->drupalCreateNode($settings); + $i--; + } + + // Set default search. + $edit = array( + 'search_default_module' => 'ds_search', + ); + $this->drupalPost('admin/config/search/settings', $edit, t('Save configuration')); + + // Run cron. + $this->cronRun(); + $this->drupalGet('admin/config/search/settings'); + $this->assertText(t('100% of the site has been indexed. There are 0 items left to index.'), 'Site has been indexed'); + + // Configure search result view mode. + $svm = array('additional_settings[modes][view_modes_custom][search_result]' => 'search_result'); + $this->dsConfigureUI($svm); + $layout = array( + 'additional_settings[layout]' => 'ds_2col_stacked', + ); + $assert = array( + 'regions' => array( + 'header' => '' . t('Header') . '', + 'left' => '' . t('Left') . '', + 'right' => '' . t('Right') . '', + 'footer' => '' . t('Footer') . '', + ), + ); + $this->dsSelectLayout($layout, $assert, 'admin/structure/types/manage/article/display/search_result'); + $fields = array( + 'fields[title][region]' => 'header', + 'fields[post_date][region]' => 'header', + 'fields[author][region]' => 'left', + 'fields[body][region]' => 'right', + 'fields[node_link][region]' => 'footer', + ); + $this->dsConfigureUI($fields, 'admin/structure/types/manage/article/display/search_result'); + + // Configure ds search. + $edit = array('ds_user_override_search_page' => '1'); + $this->drupalPost('admin/structure/ds/list/search', $edit, t('Save configuration')); + + // Let's search. + $this->drupalGet('search/content/title1'); + $this->assertNoRaw('/search/node/title1'); + $this->assertRaw('view-mode-search_result', 'Search view mode found'); + $this->assertRaw('group-left', 'Search template found'); + $this->assertRaw('group-right', 'Search template found'); + $this->assertNoText(t('Advanced search'), 'No advanced search found'); + + + $edit = array('ds_search_node_form_alter' => '1'); + $this->drupalPost('admin/structure/ds/list/search', $edit, t('Save configuration')); + $this->drupalGet('search/content/title1'); + $this->assertText(t('Advanced search'), 'Advanced search found'); + + // Search on user. + // Configure user. We'll just do default. + $layout = array( + 'additional_settings[layout]' => 'ds_2col_stacked', + ); + $assert = array( + 'regions' => array( + 'header' => '' . t('Header') . '', + 'left' => '' . t('Left') . '', + 'right' => '' . t('Right') . '', + 'footer' => '' . t('Footer') . '', + ), + ); + $this->dsSelectLayout($layout, $assert, 'admin/config/people/accounts/display'); + $fields = array( + 'fields[name][region]' => 'left', + 'fields[summary][region]' => 'right', + ); + $this->dsConfigureUI($fields, 'admin/config/people/accounts/display'); + + $this->drupalGet('search/user/' . $this->admin_user->name); + $this->assertRaw('view-mode-search_result', 'Search view mode found'); + $this->assertRaw('group-left', 'Search template found'); + $this->assertRaw('group-right', 'Search template found'); + + // Test the group by settings. + $article = array( + 'title' => 'group article 1', + 'type' => 'article', + 'promote' => 1, + ); + $this->drupalCreateNode($article); + + $page = array( + 'title' => 'group page 1', + 'type' => 'page', + 'promote' => 1, + ); + $this->drupalCreateNode($page); + $this->cronRun(); + + $edit = array( + 'ds_search_group_by_type' => '1' + ); + $this->drupalPost('admin/structure/ds/list/search', $edit, t('Save configuration')); + + // Let's search. + $this->drupalGet('search/content/group'); + $this->assertRaw('Results for article'); + $this->assertRaw('Results for basic page'); + + $edit = array( + 'ds_search_group_by_type_settings[article][label]' => 'Article results', + ); + $this->drupalPost('admin/structure/ds/list/search', $edit, t('Save configuration')); + $this->drupalGet('search/content/group'); + $this->assertNoRaw('Results for article'); + $this->assertRaw('Article results'); + $this->assertRaw('Results for basic page'); + + $edit = array( + 'ds_search_group_by_type_settings[page][status]' => FALSE, + 'ds_search_group_by_type_settings[article][label]' => '', + ); + $this->drupalPost('admin/structure/ds/list/search', $edit, t('Save configuration')); + $this->drupalGet('search/content/group'); + $this->assertNoRaw('Article results'); + $this->assertNoRaw('Results for basic page'); + $this->assertRaw('Other'); + } +} diff --git a/sites/all/modules/custom/ds/tests/ds.views.test b/sites/all/modules/custom/ds/tests/ds.views.test new file mode 100644 index 0000000000..039a99f5b0 --- /dev/null +++ b/sites/all/modules/custom/ds/tests/ds.views.test @@ -0,0 +1,167 @@ + t('Views'), + 'description' => t('Tests for Display Suite Views integration.'), + 'group' => t('Display Suite'), + ); + } + + /** + * Test views integration. + */ + function testDSViews() { + + $edit_tag_1 = array( + 'field_tags[und]' => 'Tag 1', + ); + $edit_tag_2 = array( + 'field_tags[und]' => 'Tag 2', + ); + + // Create 3 nodes. + $settings_1 = array( + 'type' => 'article', + 'title' => 'Article 1', + 'created' => REQUEST_TIME, + ); + $node_1 = $this->drupalCreateNode($settings_1); + $this->drupalPost('node/' . $node_1->nid . '/edit', $edit_tag_1, t('Save')); + $settings_2 = array( + 'type' => 'article', + 'title' => 'Article 2', + 'created' => REQUEST_TIME + 3600, + ); + $node_2 = $this->drupalCreateNode($settings_2); + $this->drupalPost('node/' . $node_2->nid . '/edit', $edit_tag_1, t('Save')); + $settings_3 = array( + 'type' => 'article', + 'title' => 'Article 3', + 'created' => REQUEST_TIME + 7200, + ); + $node_3 = $this->drupalCreateNode($settings_3); + $this->drupalPost('node/' . $node_3->nid . '/edit', $edit_tag_2, t('Save')); + + // Configure teaser and full layout. + $layout = array( + 'additional_settings[layout]' => 'ds_2col', + ); + $fields = array( + 'fields[title][region]' => 'left', + 'fields[body][region]' => 'right', + ); + $assert = array( + 'regions' => array( + 'left' => '' . t('Left') . '', + 'right' => '' . t('Right') . '', + ), + ); + $this->dsSelectLayout($layout, $assert, 'admin/structure/types/manage/article/display/teaser'); + $this->dsConfigureUI($fields, 'admin/structure/types/manage/article/display/teaser'); + $layout = array( + 'additional_settings[layout]' => 'ds_4col', + ); + $fields = array( + 'fields[post_date][region]' => 'first', + 'fields[body][region]' => 'second', + 'fields[author][region]' => 'third', + 'fields[node_link][region]' => 'fourth', + ); + $assert = array( + 'regions' => array( + 'first' => '' . t('First') . '', + 'second' => '' . t('Second') . '', + 'third' => '' . t('Third') . '', + 'fourth' => '' . t('Fourth') . '', + ), + ); + $this->dsSelectLayout($layout, $assert); + $this->dsConfigureUI($fields); + + // Get default teaser view. + $this->drupalGet('ds-testing'); + foreach (array('group-left', 'group-right') as $region) { + $this->assertRaw($region, t('Region !region found', array('!region' => $region))); + } + $this->assertRaw('Article 1'); + $this->assertRaw('Article 2'); + $this->assertRaw('Article 3'); + + // Get alternating view. + $this->drupalGet('ds-testing-2'); + foreach (array('group-left', 'group-right', 'first', 'second', 'third', 'fourth') as $region) { + $this->assertRaw($region, t('Region !region found', array('!region' => $region))); + } + $this->assertNoRaw('Article 1'); + $this->assertRaw('Article 2'); + $this->assertRaw('Article 3'); + + // Get grouping view (without changing header function). + $this->drupalGet('ds-testing-3'); + foreach (array('group-left', 'group-right') as $region) { + $this->assertRaw($region, t('Region !region found', array('!region' => $region))); + } + $this->assertRaw('Article 1'); + $this->assertRaw('Article 2'); + $this->assertRaw('Article 3'); + $this->assertRaw('

    1

    '); + $this->assertRaw('

    2

    '); + + // Get grouping view (with changing header function). + $this->drupalGet('ds-testing-4'); + foreach (array('group-left', 'group-right') as $region) { + $this->assertRaw($region, t('Region !region found', array('!region' => $region))); + } + $this->assertRaw('Article 1'); + $this->assertRaw('Article 2'); + $this->assertRaw('Article 3'); + $this->assertRaw('

    Tag 1

    '); + $this->assertRaw('

    Tag 2

    '); + + // Get advanced function view. + $this->drupalGet('ds-testing-5'); + $this->assertRaw('Advanced display for id 1'); + $this->assertRaw('Advanced display for id 2'); + $this->assertRaw('Advanced display for id 3'); + + // Test views templates overrides. + $this->drupalGet('admin/structure/ds/vd/manage/ds_testing-page_5/display'); + $this->assertText('No view found to layout.'); + $edit = array( + 'vd' => 'ds_testing-page_5', + ); + $this->drupalPost('admin/structure/ds/vd', $edit, t('Add')); + $this->dsSelectLayout(array(), array(), 'admin/structure/ds/vd/manage/ds_testing-page_5/display'); + $edit = array( + 'fields[pager][region]' => 'header', + 'fields[footer][region]' => 'header', + 'fields[rows][region]' => 'left', + 'fields[exposed][region]' => 'right', + 'fields[header][region]' => 'footer', + ); + $this->dsConfigureUI($edit, 'admin/structure/ds/vd/manage/ds_testing-page_5/display'); + + // Test on the views page itself. + $this->drupalGet('ds-testing-6'); + $this->assertRaw('
    +

    Footer text

    +
    '); + $this->assertRaw('
    +
    '); + $this->assertRaw('
    + assertRaw(''; + } + + // Render the content. + $content_suffix = ''; + if (!$variables['label_hidden'] || $variables['content_attributes']) { + $output .= ''; + $content_suffix = '
    '; + } + $output .= $variables['content'] . $content_suffix; + + // Render the top-level DIV. + return '' . $output . '
    '; +} + +/** + * Theme preprocess function for theme_entity_property(). + * + * @see theme_entity_property() + */ +function template_preprocess_entity_property(&$variables, $hook) { + $element = $variables['elements']; + + $variables += array( + 'theme_hook_suggestions' => array(), + 'attributes_array' => array(), + ); + // Generate variables from element properties. + foreach (array('label_hidden', 'label', 'property_name') as $name) { + $variables[$name] = check_plain($element['#' . $name]); + } + $variables['title_attributes_array']['class'][] = 'entity-property-label'; + $variables['attributes_array'] = array_merge($variables['attributes_array'], isset($element['#attributes']) ? $element['#attributes'] : array()); + + $variables['property_name_css'] = strtr($element['#property_name'], '_', '-'); + $variables['attributes_array']['class'][] = 'entity-property'; + $variables['attributes_array']['class'][] = 'entity-property-' . $variables['property_name_css']; + + // Add specific suggestions that can override the default implementation. + $variables['theme_hook_suggestions'] += array( + 'entity_property__' . $element['#property_name'], + 'entity_property__' . $element['#entity_type'] . '__' . $element['#property_name'], + ); + + // Populate the content with sensible defaults. + if (!isset($variables['content'])) { + $variables['content'] = entity_property_default_render_value_by_type($element['#entity_wrapped']->{$element['#property_name']}); + } +} + +/** + * Renders a property using simple defaults based upon the property type. + * + * @return string + */ +function entity_property_default_render_value_by_type(EntityMetadataWrapper $property) { + // If there is an options list or entity label, render that by default. + if ($label = $property->label()) { + if ($property instanceof EntityDrupalWrapper && $uri = entity_uri($property->type(), $property->value())) { + return l($label, $uri['path'], $uri['options']); + } + else { + return check_plain($label); + } + } + switch ($property->type()) { + case 'boolean': + return $property->value() ? t('yes') : t('no'); + default: + return check_plain($property->value()); + } +} + +/** + * Theme process function for theme_entity_property(). + * + * Taken over from template_process_field() + * + * @see theme_entity_property() + */ +function template_process_entity_property(&$variables, $hook) { + $element = $variables['elements']; + // The default theme implementation is a function, so template_process() does + // not automatically run, so we need to flatten the classes and attributes + // here. For best performance, only call drupal_attributes() when needed, and + // note that template_preprocess_field() does not initialize the + // *_attributes_array variables. + $variables['attributes'] = empty($variables['attributes_array']) ? '' : drupal_attributes($variables['attributes_array']); + $variables['title_attributes'] = empty($variables['title_attributes_array']) ? '' : drupal_attributes($variables['title_attributes_array']); + $variables['content_attributes'] = empty($variables['content_attributes_array']) ? '' : drupal_attributes($variables['content_attributes_array']); +} + +/** + * Themes the exportable status of an entity. + */ +function theme_entity_status($variables) { + $status = $variables['status']; + $html = $variables['html']; + if (($status & ENTITY_FIXED) == ENTITY_FIXED) { + $label = t('Fixed'); + $help = t('The configuration is fixed and cannot be changed.'); + return $html ? "" . $label . "" : $label; + } + elseif (($status & ENTITY_OVERRIDDEN) == ENTITY_OVERRIDDEN) { + $label = t('Overridden'); + $help = t('This configuration is provided by a module, but has been changed.'); + return $html ? "" . $label . "" : $label; + } + elseif ($status & ENTITY_IN_CODE) { + $label = t('Default'); + $help = t('A module provides this configuration.'); + return $html ? "" . $label . "" : $label; + } + elseif ($status & ENTITY_CUSTOM) { + $label = t('Custom'); + $help = t('A custom configuration by a user.'); + return $html ? "" . $label . "" : $label; + } +} + +/** + * Process variables for entity.tpl.php. + */ +function template_preprocess_entity(&$variables) { + $variables['view_mode'] = $variables['elements']['#view_mode']; + $entity_type = $variables['elements']['#entity_type']; + $variables['entity_type'] = $entity_type; + $entity = $variables['elements']['#entity']; + $variables[$variables['elements']['#entity_type']] = $entity; + $info = entity_get_info($entity_type); + + $variables['title'] = check_plain(entity_label($entity_type, $entity)); + + $uri = entity_uri($entity_type, $entity); + $variables['url'] = $uri ? url($uri['path'], $uri['options']) : FALSE; + + if (isset($variables['elements']['#page'])) { + // If set by the caller, respect the page property. + $variables['page'] = $variables['elements']['#page']; + } + else { + // Else, try to automatically detect it. + $variables['page'] = $uri && $uri['path'] == $_GET['q']; + } + + // Helpful $content variable for templates. + $variables['content'] = array(); + foreach (element_children($variables['elements']) as $key) { + $variables['content'][$key] = $variables['elements'][$key]; + } + + if (!empty($info['fieldable'])) { + // Make the field variables available with the appropriate language. + field_attach_preprocess($entity_type, $entity, $variables['content'], $variables); + } + list(, , $bundle) = entity_extract_ids($entity_type, $entity); + + // Gather css classes. + $variables['classes_array'][] = drupal_html_class('entity-' . $entity_type); + $variables['classes_array'][] = drupal_html_class($entity_type . '-' . $bundle); + + // Add RDF type and about URI. + if (module_exists('rdf')) { + $variables['attributes_array']['about'] = empty($uri['path']) ? NULL: url($uri['path']); + $variables['attributes_array']['typeof'] = empty($entity->rdf_mapping['rdftype']) ? NULL : $entity->rdf_mapping['rdftype']; + } + + // Add suggestions. + $variables['theme_hook_suggestions'][] = $entity_type; + $variables['theme_hook_suggestions'][] = $entity_type . '__' . $bundle; + $variables['theme_hook_suggestions'][] = $entity_type . '__' . $bundle . '__' . $variables['view_mode']; + if ($id = entity_id($entity_type, $entity)) { + $variables['theme_hook_suggestions'][] = $entity_type . '__' . $id; + } +} diff --git a/sites/all/modules/custom/entity/theme/entity.tpl.php b/sites/all/modules/custom/entity/theme/entity.tpl.php new file mode 100644 index 0000000000..cfe94dd7e5 --- /dev/null +++ b/sites/all/modules/custom/entity/theme/entity.tpl.php @@ -0,0 +1,48 @@ + +
    > + + + > + + + + + + + + +
    > + +
    +
    diff --git a/sites/all/modules/custom/entity/views/entity.views.inc b/sites/all/modules/custom/entity/views/entity.views.inc new file mode 100644 index 0000000000..59ebaa4886 --- /dev/null +++ b/sites/all/modules/custom/entity/views/entity.views.inc @@ -0,0 +1,701 @@ + $info) { + // Provide default integration with the basic controller class if we know + // the module providing the entity and it does not provide views integration. + if (!isset($info['views controller class'])) { + $info['views controller class'] = isset($info['module']) && !module_hook($info['module'], 'views_data') ? 'EntityDefaultViewsController' : FALSE; + } + if ($info['views controller class']) { + $controller = new $info['views controller class']($type); + // Relationship data may return views data for already existing tables, + // so merge results on the second level. + foreach ($controller->views_data() as $table => $table_data) { + $data += array($table => array()); + $data[$table] = array_merge($data[$table], $table_data); + } + } + } + + // Add tables based upon data selection "queries" for all entity types. + foreach (entity_get_info() as $type => $info) { + $table = entity_views_table_definition($type); + if ($table) { + $data['entity_' . $type] = $table; + } + // Generally expose properties marked as 'entity views field'. + $data['views_entity_' . $type] = array(); + foreach (entity_get_all_property_info($type) as $key => $property) { + if (!empty($property['entity views field'])) { + entity_views_field_definition($key, $property, $data['views_entity_' . $type]); + } + } + } + + // Expose generally usable entity-related fields. + foreach (entity_get_info() as $entity_type => $info) { + if (entity_type_supports($entity_type, 'view')) { + // Expose a field allowing to display the rendered entity. + $data['views_entity_' . $entity_type]['rendered_entity'] = array( + 'title' => t('Rendered @entity-type', array('@entity-type' => $info['label'])), + 'help' => t('The @entity-type of the current relationship rendered using a view mode.', array('@entity-type' => $info['label'])), + 'field' => array( + 'handler' => 'entity_views_handler_field_entity', + 'type' => $entity_type, + // The EntityFieldHandlerHelper treats the 'entity object' data + // selector as special case for loading the base entity. + 'real field' => 'entity object', + ), + ); + } + } + + $data['entity__global']['table']['group'] = t('Entity'); + $data['entity__global']['table']['join'] = array( + // #global let's it appear all the time. + '#global' => array(), + ); + $data['entity__global']['entity'] = array( + 'title' => t('Rendered entity'), + 'help' => t('Displays a single chosen entity.'), + 'area' => array( + 'handler' => 'entity_views_handler_area_entity', + ), + ); + + return $data; +} + +/** + * Helper function for getting data selection based entity Views table definitions. + * + * This creates extra tables for each entity type that are not associated with a + * query plugin (and thus are not base tables) and just rely on the entities to + * retrieve the displayed data. To obtain the entities corresponding to a + * certain result set, the field handlers defined on the table use a generic + * interface defined for query plugins that are based on entity handling, and + * which is described in the entity_views_example_query class. + * + * These tables are called "data selection tables". + * + * Other modules providing Views integration with new query plugins that are + * based on entities can then use these tables as a base for their own tables + * (by directly using this method and modifying the returned table) and/or by + * specifying relationships to them. The tables returned here already specify + * relationships to each other wherever an entity contains a reference to + * another (e.g., the node author constructs a relationship from nodes to + * users). + * + * As filtering and other query manipulation is potentially more plugin-specific + * than the display, only field handlers and relationships are provided with + * these tables. By providing a add_selector_orderby() method, the query plugin + * can, however, support click-sorting for the field handlers in these tables. + * + * For a detailed discussion see http://drupal.org/node/1266036 + * + * For example use see the Search API views module in the Search API project: + * http://drupal.org/project/search_api + * + * @param $type + * The entity type whose table definition should be returned. + * @param $exclude + * Whether properties already exposed as 'entity views field' should be + * excluded. Defaults to TRUE, as they are available for all views tables for + * the entity type anyways. + * + * @return + * An array containing the data selection Views table definition for the + * entity type. + * + * @see entity_views_field_definition() + */ +function entity_views_table_definition($type, $exclude = TRUE) { + // As other modules might want to copy these tables as a base for their own + // Views integration, we statically cache the tables to save some time. + $tables = &drupal_static(__FUNCTION__, array()); + + if (!isset($tables[$type])) { + // Work-a-round to fix updating, see http://drupal.org/node/1330874. + // Views data might be rebuilt on update.php before the registry is rebuilt, + // thus the class cannot be auto-loaded. + if (!class_exists('EntityFieldHandlerHelper')) { + module_load_include('inc', 'entity', 'views/handlers/entity_views_field_handler_helper'); + } + + $info = entity_get_info($type); + $tables[$type]['table'] = array( + 'group' => $info['label'], + 'entity type' => $type, + ); + foreach (entity_get_all_property_info($type) as $key => $property) { + if (!$exclude || empty($property['entity views field'])) { + entity_views_field_definition($key, $property, $tables[$type]); + } + } + } + + return $tables[$type]; +} + +/** + * Helper function for adding a Views field definition to data selection based Views tables. + * + * @param $field + * The data selector of the field to add. E.g. "title" would derive the node + * title property, "body:summary" the node body's summary. + * @param array $property_info + * The property information for which to create a field definition. + * @param array $table + * The table into which the definition should be inserted. + * @param $title_prefix + * Internal use only. + * + * @see entity_views_table_definition() + */ +function entity_views_field_definition($field, array $property_info, array &$table, $title_prefix = '') { + $additional = array(); + $additional_field = array(); + + // Create a valid Views field identifier (no colons, etc.). Keep the original + // data selector as real field though. + $key = _entity_views_field_identifier($field, $table); + if ($key != $field) { + $additional['real field'] = $field; + } + $field_name = EntityFieldHandlerHelper::get_selector_field_name($field); + + $field_handlers = entity_views_get_field_handlers(); + + $property_info += entity_property_info_defaults(); + $type = entity_property_extract_innermost_type($property_info['type']); + $title = $title_prefix . $property_info['label']; + if ($info = entity_get_info($type)) { + $additional['relationship'] = array( + 'handler' => $field_handlers['relationship'], + 'base' => 'entity_' . $type, + 'base field' => $info['entity keys']['id'], + 'relationship field' => $field, + 'label' => $title, + ); + if ($property_info['type'] != $type) { + // This is a list of entities, so we should mark the relationship as such. + $additional['relationship']['multiple'] = TRUE; + } + // Implementers of the field handlers alter hook could add handlers for + // specific entity types. + if (!isset($field_handlers[$type])) { + $type = 'entity'; + } + } + elseif (!empty($property_info['field'])) { + $type = 'field'; + // Views' Field API field handler needs some extra definitions to work. + $additional_field['field_name'] = $field_name; + $additional_field['entity_tables'] = array(); + $additional_field['entity type'] = $table['table']['entity type']; + $additional_field['is revision'] = FALSE; + } + // Copied from EntityMetadataWrapper::optionsList() + elseif (isset($property_info['options list']) && is_callable($property_info['options list'])) { + // If this is a nested property, we need to get rid of all prefixes first. + $type = 'options'; + $additional_field['options callback'] = array( + 'function' => $property_info['options list'], + 'info' => $property_info, + ); + } + elseif ($type == 'decimal') { + $additional_field['float'] = TRUE; + } + + if (isset($field_handlers[$type])) { + $table += array($key => array()); + $table[$key] += array( + 'title' => $title, + 'help' => empty($property_info['description']) ? t('(No information available)') : $property_info['description'], + 'field' => array(), + ); + $table[$key]['field'] += array( + 'handler' => $field_handlers[$type], + 'type' => $property_info['type'], + ); + $table[$key] += $additional; + $table[$key]['field'] += $additional_field; + } + if (!empty($property_info['property info'])) { + foreach ($property_info['property info'] as $nested_key => $nested_property) { + entity_views_field_definition($field . ':' . $nested_key, $nested_property, $table, $title . ' » '); + } + } +} + +/** + * @return array + * The handlers to use for the data selection based Views tables. + * + * @see hook_entity_views_field_handlers_alter() + */ +function entity_views_get_field_handlers() { + $field_handlers = drupal_static(__FUNCTION__); + if (!isset($field_handlers)) { + // Field handlers for the entity tables, by type. + $field_handlers = array( + 'text' => 'entity_views_handler_field_text', + 'token' => 'entity_views_handler_field_text', + 'integer' => 'entity_views_handler_field_numeric', + 'decimal' => 'entity_views_handler_field_numeric', + 'date' => 'entity_views_handler_field_date', + 'duration' => 'entity_views_handler_field_duration', + 'boolean' => 'entity_views_handler_field_boolean', + 'uri' => 'entity_views_handler_field_uri', + 'options' => 'entity_views_handler_field_options', + 'field' => 'entity_views_handler_field_field', + 'entity' => 'entity_views_handler_field_entity', + 'relationship' => 'entity_views_handler_relationship', + ); + drupal_alter('entity_views_field_handlers', $field_handlers); + } + return $field_handlers; +} + +/** + * Helper function for creating valid Views field identifiers out of data selectors. + * + * Uses $table to test whether the identifier is already used, and also + * recognizes if a definition for the same field is already present and returns + * that definition's identifier. + * + * @return string + * A valid Views field identifier that is not yet used as a key in $table. + */ +function _entity_views_field_identifier($field, array $table) { + $key = $base = preg_replace('/[^a-zA-Z0-9]+/S', '_', $field); + $i = 0; + // The condition checks whether this sanitized field identifier is already + // used for another field in this table (and whether the identifier is + // "table", which can never be used). + // If $table[$key] is set, the identifier is already used, but this might be + // already for the same field. To test that, we need the original field name, + // which is either $table[$key]['real field'], if set, or $key. If this + // original field name is equal to $field, we can use that key. Otherwise, we + // append numeric suffixes until we reach an unused key. + while ($key == 'table' || (isset($table[$key]) && (isset($table[$key]['real field']) ? $table[$key]['real field'] : $key) != $field)) { + $key = $base . '_' . ++$i; + } + return $key; +} + +/** + * Implements hook_views_plugins(). + */ +function entity_views_plugins() { + // Have views cache the table list for us so it gets + // cleared at the appropriate times. + $data = views_cache_get('entity_base_tables', TRUE); + if (!empty($data->data)) { + $base_tables = $data->data; + } + else { + $base_tables = array(); + foreach (views_fetch_data() as $table => $data) { + if (!empty($data['table']['entity type']) && !empty($data['table']['base'])) { + $base_tables[] = $table; + } + } + views_cache_set('entity_base_tables', $base_tables, TRUE); + } + if (!empty($base_tables)) { + return array( + 'module' => 'entity', + 'row' => array( + 'entity' => array( + 'title' => t('Rendered entity'), + 'help' => t('Renders a single entity in a specific view mode (e.g. teaser).'), + 'handler' => 'entity_views_plugin_row_entity_view', + 'uses fields' => FALSE, + 'uses options' => TRUE, + 'type' => 'normal', + 'base' => $base_tables, + ), + ), + ); + } +} + +/** + * Default controller for generating basic views integration. + * + * The controller tries to generate suiting views integration for the entity + * based upon the schema information of its base table and the provided entity + * property information. + * For that it is possible to map a property name to its schema/views field + * name by adding a 'schema field' key with the name of the field as value to + * the property info. + */ +class EntityDefaultViewsController { + + protected $type, $info, $relationships; + + public function __construct($type) { + $this->type = $type; + $this->info = entity_get_info($type); + } + + /** + * Defines the result for hook_views_data(). + */ + public function views_data() { + $data = array(); + $this->relationships = array(); + + if (!empty($this->info['base table'])) { + $table = $this->info['base table']; + // Define the base group of this table. Fields that don't + // have a group defined will go into this field by default. + $data[$table]['table']['group'] = drupal_ucfirst($this->info['label']); + $data[$table]['table']['entity type'] = $this->type; + + // If the plural label isn't available, use the regular label. + $label = isset($this->info['plural label']) ? $this->info['plural label'] : $this->info['label']; + $data[$table]['table']['base'] = array( + 'field' => $this->info['entity keys']['id'], + 'access query tag' => $this->type . '_access', + 'title' => drupal_ucfirst($label), + 'help' => isset($this->info['description']) ? $this->info['description'] : '', + ); + $data[$table]['table']['entity type'] = $this->type; + $data[$table] += $this->schema_fields(); + + // Add in any reverse-relationships which have been determined. + $data += $this->relationships; + } + if (!empty($this->info['revision table']) && !empty($this->info['entity keys']['revision'])) { + $revision_table = $this->info['revision table']; + + $data[$table]['table']['default_relationship'] = array( + $revision_table => array( + 'table' => $revision_table, + 'field' => $this->info['entity keys']['revision'], + ), + ); + + // Define the base group of this table. Fields that don't + // have a group defined will go into this field by default. + $data[$revision_table]['table']['group'] = drupal_ucfirst($this->info['label']) . ' ' . t('Revisions'); + $data[$revision_table]['table']['entity type'] = $this->type; + + // If the plural label isn't available, use the regular label. + $label = isset($this->info['plural label']) ? $this->info['plural label'] : $this->info['label']; + $data[$revision_table]['table']['base'] = array( + 'field' => $this->info['entity keys']['revision'], + 'access query tag' => $this->type . '_access', + 'title' => drupal_ucfirst($label) . ' ' . t('Revisions'), + 'help' => (isset($this->info['description']) ? $this->info['description'] . ' ' : '') . t('Revisions'), + ); + $data[$revision_table]['table']['entity type'] = $this->type; + $data[$revision_table] += $this->schema_revision_fields(); + + // Add in any reverse-relationships which have been determined. + $data += $this->relationships; + + // For other base tables, explain how we join. + $data[$revision_table]['table']['join'] = array( + // Directly links to base table. + $table => array( + 'left_field' => $this->info['entity keys']['revision'], + 'field' => $this->info['entity keys']['revision'], + ), + ); + $data[$revision_table]['table']['default_relationship'] = array( + $table => array( + 'table' => $table, + 'field' => $this->info['entity keys']['id'], + ), + ); + } + return $data; + } + + /** + * Try to come up with some views fields with the help of the schema and + * the entity property information. + */ + protected function schema_fields() { + $schema = drupal_get_schema($this->info['base table']); + $properties = entity_get_property_info($this->type) + array('properties' => array()); + $data = array(); + + foreach ($properties['properties'] as $name => $property_info) { + if (isset($property_info['schema field']) && isset($schema['fields'][$property_info['schema field']])) { + if ($views_info = $this->map_from_schema_info($name, $schema['fields'][$property_info['schema field']], $property_info)) { + $data[$name] = $views_info; + } + } + } + return $data; + } + + /** + * Try to come up with some views fields with the help of the revision schema + * and the entity property information. + */ + protected function schema_revision_fields() { + $data = array(); + if (!empty($this->info['revision table'])) { + $schema = drupal_get_schema($this->info['revision table']); + $properties = entity_get_property_info($this->type) + array('properties' => array()); + + foreach ($properties['properties'] as $name => $property_info) { + if (isset($property_info['schema field']) && isset($schema['fields'][$property_info['schema field']])) { + if ($views_info = $this->map_from_schema_info($name, $schema['fields'][$property_info['schema field']], $property_info)) { + $data[$name] = $views_info; + } + } + } + } + return $data; + } + + /** + * Comes up with views information based on the given schema and property + * info. + */ + protected function map_from_schema_info($property_name, $schema_field_info, $property_info) { + $type = isset($property_info['type']) ? $property_info['type'] : 'text'; + $views_field_name = $property_info['schema field']; + + $return = array(); + + if (!empty($schema_field_info['serialize'])) { + return FALSE; + } + + $description = array( + 'title' => $property_info['label'], + 'help' => isset($property_info['description']) ? $property_info['description'] : NULL, + ); + + // Add in relationships to related entities. + if (($info = entity_get_info($type)) && !empty($info['base table'])) { + + // Prepare reversed relationship data. + $label_lowercase = drupal_strtolower($this->info['label'][0]) . drupal_substr($this->info['label'], 1); + $property_label_lowercase = drupal_strtolower($property_info['label'][0]) . drupal_substr($property_info['label'], 1); + + // We name the field of the first reverse-relationship just with the + // base table to be backward compatible, for subsequents relationships we + // append the views field name in order to get a unique name. + $name = !isset($this->relationships[$info['base table']][$this->info['base table']]) ? $this->info['base table'] : $this->info['base table'] . '_' . $views_field_name; + $this->relationships[$info['base table']][$name] = array( + 'title' => $this->info['label'], + 'help' => t("Associated @label via the @label's @property.", array('@label' => $label_lowercase, '@property' => $property_label_lowercase)), + 'relationship' => array( + 'label' => $this->info['label'], + 'handler' => $this->getRelationshipHandlerClass($this->type, $type), + 'base' => $this->info['base table'], + 'base field' => $views_field_name, + 'relationship field' => isset($info['entity keys']['name']) ? $info['entity keys']['name'] : $info['entity keys']['id'], + ), + ); + + $return['relationship'] = array( + 'label' => drupal_ucfirst($info['label']), + 'handler' => $this->getRelationshipHandlerClass($type, $this->type), + 'base' => $info['base table'], + 'base field' => isset($info['entity keys']['name']) ? $info['entity keys']['name'] : $info['entity keys']['id'], + 'relationship field' => $views_field_name, + ); + + // Add in direct field/filters/sorts for the id itself too. + $type = isset($info['entity keys']['name']) ? 'token' : 'integer'; + // Append the views-field-name to the title if it is different to the + // property name. + if ($property_name != $views_field_name) { + $description['title'] .= ' ' . $views_field_name; + } + } + + switch ($type) { + case 'token': + case 'text': + $return += $description + array( + 'field' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_field', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_sort', + ), + 'filter' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_filter_string', + ), + 'argument' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_argument_string', + ), + ); + break; + + case 'decimal': + case 'integer': + $return += $description + array( + 'field' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_field_numeric', + 'click sortable' => TRUE, + 'float' => ($type == 'decimal'), + ), + 'sort' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_sort', + ), + 'filter' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_filter_numeric', + ), + 'argument' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_argument_numeric', + ), + ); + break; + + case 'date': + $return += $description + array( + 'field' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_field_date', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_sort_date', + ), + 'filter' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_filter_date', + ), + 'argument' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_argument_date', + ), + ); + break; + + case 'uri': + $return += $description + array( + 'field' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_field_url', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_sort', + ), + 'filter' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_filter_string', + ), + 'argument' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_argument_string', + ), + ); + break; + + case 'boolean': + $return += $description + array( + 'field' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_field_boolean', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_sort', + ), + 'filter' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_filter_boolean_operator', + ), + 'argument' => array( + 'real field' => $views_field_name, + 'handler' => 'views_handler_argument_string', + ), + ); + break; + } + + // If there is an options list callback, add to the filter and field. + if (isset($return['filter']) && !empty($property_info['options list'])) { + $return['filter']['handler'] = 'views_handler_filter_in_operator'; + $return['filter']['options callback'] = array('EntityDefaultViewsController', 'optionsListCallback'); + $return['filter']['options arguments'] = array($this->type, $property_name, 'view'); + } + // @todo: This class_exists is needed until views 3.2. + if (isset($return['field']) && !empty($property_info['options list']) && class_exists('views_handler_field_machine_name')) { + $return['field']['handler'] = 'views_handler_field_machine_name'; + $return['field']['options callback'] = array('EntityDefaultViewsController', 'optionsListCallback'); + $return['field']['options arguments'] = array($this->type, $property_name, 'view'); + } + return $return; + } + + /** + * Determines the handler to use for a relationship to an entity type. + * + * @param $entity_type + * The entity type to join to. + * @param $left_type + * The data type from which to join. + */ + function getRelationshipHandlerClass($entity_type, $left_type) { + // Look for an entity type which is used as bundle for the given entity + // type. If there is one, allow filtering the relation by bundle by using + // our own handler. + foreach (entity_get_info() as $type => $info) { + // In case we already join from the bundle entity we do not need to filter + // by bundle entity any more, so we stay with the general handler. + if (!empty($info['bundle of']) && $info['bundle of'] == $entity_type && $type != $left_type) { + return 'entity_views_handler_relationship_by_bundle'; + } + } + return 'views_handler_relationship'; + } + + /** + * A callback returning property options, suitable to be used as views options callback. + */ + public static function optionsListCallback($type, $selector, $op = 'view') { + $wrapper = entity_metadata_wrapper($type, NULL); + $parts = explode(':', $selector); + foreach ($parts as $part) { + $wrapper = $wrapper->get($part); + } + return $wrapper->optionsList($op); + } +} diff --git a/sites/all/modules/custom/entity/views/entity_views_example_query.php b/sites/all/modules/custom/entity/views/entity_views_example_query.php new file mode 100644 index 0000000000..7e98e2c267 --- /dev/null +++ b/sites/all/modules/custom/entity/views/entity_views_example_query.php @@ -0,0 +1,88 @@ +definition['type'])) { + $options['list']['contains']['mode'] = array('default' => 'collapse'); + $options['list']['contains']['separator'] = array('default' => ', '); + $options['list']['contains']['type'] = array('default' => 'ul'); + } + $options['link_to_entity'] = array('default' => FALSE); + + return $options; + } + + /** + * Provide an appropriate default option form for a handler. + */ + public static function options_form($handler, &$form, &$form_state) { + if (entity_property_list_extract_type($handler->definition['type'])) { + $form['list']['mode'] = array( + '#type' => 'select', + '#title' => t('List handling'), + '#options' => array( + 'collapse' => t('Concatenate values using a seperator'), + 'list' => t('Output values as list'), + 'first' => t('Show first (if present)'), + 'count' => t('Show item count'), + ), + '#default_value' => $handler->options['list']['mode'], + ); + $form['list']['separator'] = array( + '#type' => 'textfield', + '#title' => t('List seperator'), + '#default_value' => $handler->options['list']['separator'], + '#dependency' => array('edit-options-list-mode' => array('collapse')), + ); + $form['list']['type'] = array( + '#type' => 'select', + '#title' => t('List type'), + '#options' => array( + 'ul' => t('Unordered'), + 'ol' => t('Ordered'), + ), + '#default_value' => $handler->options['list']['type'], + '#dependency' => array('edit-options-list-mode' => array('list')), + ); + } + $form['link_to_entity'] = array( + '#type' => 'checkbox', + '#title' => t('Link this field to its entity'), + '#description' => t("When using this, you should not set any other link on the field."), + '#default_value' => $handler->options['link_to_entity'], + ); + } + + /** + * Add the field for the entity ID (if necessary). + */ + public static function query($handler) { + // Copied over from views_handler_field_entity::query(). + // Sets table_alias (entity table), base_field (entity id field) and + // field_alias (the field's alias). + $handler->table_alias = $base_table = $handler->view->base_table; + $handler->base_field = $handler->view->base_field; + + if (!empty($handler->relationship)) { + foreach ($handler->view->relationship as $relationship) { + if ($relationship->alias == $handler->relationship) { + $base_table = $relationship->definition['base']; + $handler->table_alias = $relationship->alias; + + $table_data = views_fetch_data($base_table); + $handler->base_field = empty($relationship->definition['base field']) ? $table_data['table']['base']['field'] : $relationship->definition['base field']; + } + } + } + + // Add the field if the query back-end implements an add_field() method, + // just like the default back-end. + if (method_exists($handler->query, 'add_field')) { + $handler->field_alias = $handler->query->add_field($handler->table_alias, $handler->base_field, ''); + } + else { + // To ensure there is an alias just set the field alias to the real field. + $handler->field_alias = $handler->real_field; + } + } + + /** + * Extracts the innermost field name from a data selector. + * + * @param $selector + * The data selector. + * + * @return + * The last component of the data selector. + */ + public static function get_selector_field_name($selector) { + return ltrim(substr($selector, strrpos($selector, ':')), ':'); + } + + /** + * Adds a click-sort to the query. + * + * @param $order + * Either 'ASC' or 'DESC'. + */ + public static function click_sort($handler, $order) { + // The normal orderby() method for this usually won't work here. So we need + // query plugins to provide their own method for this. + if (method_exists($handler->query, 'add_selector_orderby')) { + $selector = self::construct_property_selector($handler, TRUE); + $handler->query->add_selector_orderby($selector, $order); + } + } + + /** + * Load the entities for all rows that are about to be displayed. + * + * Automatically takes care of relationships, including data selection + * relationships. Results are written into @code $handler->wrappers @endcode + * and @code $handler->entity_type @endcode is set. + */ + public static function pre_render($handler, &$values, $load_always = FALSE) { + if (empty($values)) { + return; + } + if (!$load_always && empty($handler->options['link_to_entity'])) { + // Check whether we even need to load the entities. + $selector = self::construct_property_selector($handler, TRUE); + $load = FALSE; + foreach ($values as $row) { + if (empty($row->_entity_properties) || !array_key_exists($selector, $row->_entity_properties)) { + $load = TRUE; + break; + } + } + if (!$load) { + return; + } + } + + if (method_exists($handler->query, 'get_result_wrappers')) { + list($handler->entity_type, $handler->wrappers) = $handler->query->get_result_wrappers($values, $handler->relationship, $handler->real_field); + } + else { + list($handler->entity_type, $entities) = $handler->query->get_result_entities($values, $handler->relationship, $handler->real_field); + $handler->wrappers = array(); + foreach ($entities as $id => $entity) { + $handler->wrappers[$id] = entity_metadata_wrapper($handler->entity_type, $entity); + } + } + } + + /** + * Return an Entity API data selector for the given handler's relationship. + * + * A data selector is a concatenation of properties which should be followed + * to arrive at a desired property that may be nested in related entities or + * structures. The separate properties are herein concatenated with colons. + * + * For instance, a data selector of "author:roles" would mean to first + * access the "author" property of the given wrapper, and then for this new + * wrapper to access and return the "roles" property. + * + * Lists of entities are handled automatically by always returning only the + * first entity. + * + * @param $handler + * The handler for which to construct the selector. + * @param $complete + * If TRUE, the complete selector for the field is returned, not just the + * one for its parent. Defaults to FALSE. + * + * @return + * An Entity API data selector for the given handler's relationship. + */ + public static function construct_property_selector($handler, $complete = FALSE) { + $return = ''; + if ($handler->relationship) { + $current_handler = $handler; + $view = $current_handler->view; + $relationships = array(); + // Collect all relationships, keyed by alias. + foreach ($view->relationship as $key => $relationship) { + $key = $relationship->alias ? $relationship->alias : $key; + $relationships[$key] = $relationship; + } + while (!empty($current_handler->relationship) && !empty($relationships[$current_handler->relationship])) { + $current_handler = $relationships[$current_handler->relationship]; + $return = $current_handler->real_field . ($return ? ":$return" : ''); + } + } + + if ($complete) { + $return .= ($return ? ':' : '') . $handler->real_field; + } + elseif ($pos = strrpos($handler->real_field, ':')) { + // If we have a selector as the real_field, append this to the returned + // relationship selector. + $return .= ($return ? ':' : '') . substr($handler->real_field, 0, $pos); + } + + return $return; + } + + /** + * Extracts data from several metadata wrappers based on a data selector. + * + * All metadata wrappers passed to this function have to be based on the exact + * same property information. The data will be returned wrapped by one or more + * metadata wrappers. + * + * Can be used in query plugins for the get_result_entities() and + * get_result_wrappers() methods. + * + * @param array $wrappers + * The EntityMetadataWrapper objects from which to extract data. + * @param $selector + * The selector specifying the data to extract. + * + * @return array + * An array with numeric indices, containing the type of the extracted + * wrappers in the first element. The second element of the array contains + * the extracted property value(s) for each wrapper, keyed to the same key + * that was used for the respecive wrapper in $wrappers. All extracted + * properties are returned as metadata wrappers. + */ + public static function extract_property_multiple(array $wrappers, $selector) { + $parts = explode(':', $selector, 2); + $name = $parts[0]; + + $results = array(); + $entities = array(); + $type = ''; + foreach ($wrappers as $i => $wrapper) { + try { + $property = $wrapper->$name; + $type = $property->type(); + if ($property instanceof EntityDrupalWrapper) { + // Remember the entity IDs to later load all at once (so as to + // properly utilize multiple load functionality). + $id = $property->getIdentifier(); + // Only accept valid ids. $id can be FALSE for entity values that are + // NULL. + if ($id) { + $entities[$type][$i] = $id; + } + } + elseif ($property instanceof EntityStructureWrapper) { + $results[$i] = $property; + } + elseif ($property instanceof EntityListWrapper) { + foreach ($property as $item) { + $results[$i] = $item; + $type = $item->type(); + break; + } + } + // Do nothing in case it cannot be applied. + } + catch (EntityMetadataWrapperException $e) { + // Skip single empty properties. + } + } + + if ($entities) { + // Map back the loaded entities back to the results array. + foreach ($entities as $type => $id_map) { + $loaded = entity_load($type, $id_map); + foreach ($id_map as $i => $id) { + if (isset($loaded[$id])) { + $results[$i] = entity_metadata_wrapper($type, $loaded[$id]); + } + } + } + } + + // If there are no further parts in the selector, we are done now. + if (empty($parts[1])) { + return array($type, $results); + } + return self::extract_property_multiple($results, $parts[1]); + } + + /** + * Get the value of a certain data selector. + * + * Uses $values->_entity_properties to look for already extracted properties. + * + * @param $handler + * The field handler for which to return a value. + * @param $values + * The values for the current row retrieved from the Views query, as an + * object. + * @param $field + * The field to extract. If no value is given, the field of the given + * handler is used instead. The special "entity object" value can be used to + * get the base entity instead of a special field. + * @param $default + * The value to return if the entity or field are not present. + */ + public static function get_value($handler, $values, $field = NULL, $default = NULL) { + // There is a value cache on each handler so parent handlers rendering a + // single field value from a list will get the single value, not the whole + // list. + if (!isset($field) && isset($handler->current_value)) { + return $handler->current_value; + } + $field = isset($field) ? $field : self::get_selector_field_name($handler->real_field); + $selector = self::construct_property_selector($handler); + $selector = $selector ? "$selector:$field" : $field; + if (!isset($values->_entity_properties)) { + $values->_entity_properties = array(); + } + if (!array_key_exists($selector, $values->_entity_properties)) { + if (!isset($handler->wrappers[$handler->view->row_index])) { + $values->_entity_properties[$selector] = $default; + } + elseif (is_array($handler->wrappers[$handler->view->row_index])) { + $values->_entity_properties[$selector] = self::extract_list_wrapper_values($handler->wrappers[$handler->view->row_index], $field); + } + else { + $wrapper = $handler->wrappers[$handler->view->row_index]; + try { + if ($field === 'entity object') { + $values->_entity_properties[$selector] = $wrapper->value(); + } + else { + $values->_entity_properties[$selector] = isset($wrapper->$field) ? $wrapper->$field->value(array('identifier' => TRUE, 'sanitize' => TRUE)) : $default; + } + } + catch (EntityMetadataWrapperException $e) { + $values->_entity_properties[$selector] = $default; + } + } + } + return $values->_entity_properties[$selector]; + } + + /** + * Helper method for extracting the values from an array of wrappers. + * + * Nested arrays of wrappers are also handled, the values are returned in a + * flat (not nested) array. + */ + public static function extract_list_wrapper_values(array $wrappers, $field) { + $return = array(); + foreach ($wrappers as $wrapper) { + if (is_array($wrapper)) { + $values = self::extract_list_wrapper_values($wrapper, $field); + if ($values) { + $return = array_merge($return, $values); + } + } + else { + try { + if ($field == 'entity object') { + $return[] = $wrapper->value(); + } + elseif (isset($wrapper->$field)) { + $return[] = $wrapper->$field->value(array('identifier' => TRUE)); + } + } + catch (EntityMetadataWrapperException $e) { + // An exception probably signifies a non-present property, so we just + // ignore it. + } + } + } + return $return; + } + + /** + * Render the field. + * + * Implements the entity link functionality and list handling. Basic handling + * of the single values is delegated back to the field handler. + * + * @param $handler + * The field handler whose field should be rendered. + * @param $values + * The values for the current row retrieved from the Views query, as an + * object. + * + * @return + * The rendered value for the field. + */ + public static function render($handler, $values) { + $value = $handler->get_value($values); + if (is_array($value)) { + return self::render_list($handler, $value, $values); + } + return self::render_entity_link($handler, $value, $values); + } + + /** + * Render a list of values. + * + * @param $handler + * The field handler whose field is rendered. + * @param $list + * The list of values to render. + * @param $values + * The values for the current row retrieved from the Views query, as an + * object. + * + * @return + * The rendered value for the given list. + */ + public static function render_list($handler, $list, $values) { + // Allow easy overriding of this behaviour in the specific field handler. + if (method_exists($handler, 'render_list')) { + return $handler->render_list($list, $values); + } + $mode = isset($handler->options['list']['mode']) ? $handler->options['list']['mode'] : NULL; + switch ($mode) { + case 'first': + $list = count($list) ? array_shift($list) : NULL; + if (is_array($list)) { + return self::render_list($handler, $list, $values); + } + elseif (isset($list)) { + return self::render_entity_link($handler, $list, $values); + } + return NULL; + + case 'count': + return count($list); + + // Handles both collapse and list output. Fallback is to collapse. + default: + $inner_values = array(); + foreach ($list as $value) { + $value = is_array($value) ? self::render_list($handler, $value, $values) : self::render_entity_link($handler, $value, $values); + if ($value) { + $inner_values[] = $value; + } + } + + // Format output as list. + if ($mode == 'list') { + $type = isset($handler->options['list']['type']) ? $handler->options['list']['type'] : 'ul'; + return theme('item_list', array( + 'items' => $inner_values, + 'type' => $type, + )); + } + + $separator = isset($handler->options['list']['separator']) ? $handler->options['list']['separator'] : ', '; + return implode($separator, $inner_values); + } + } + + /** + * Render a single value as a link to the entity if applicable. + * + * @param $handler + * The field handler whose field is rendered. + * @param $value + * The single value to render. + * @param $values + * The values for the current row retrieved from the Views query, as an + * object. + * + * @return + * The rendered value. + */ + public static function render_entity_link($handler, $value, $values) { + // Allow easy overriding of this behaviour in the specific field handler. + if (method_exists($handler, 'render_entity_link')) { + return $handler->render_entity_link($value, $values); + } + $render = self::render_single_value($handler, $value, $values); + if (!$handler->options['link_to_entity']) { + return $render; + } + $entity = $handler->get_value($values, 'entity object'); + if (is_object($entity) && ($url = entity_uri($handler->entity_type, $entity))) { + return l($render, $url['path'], array('html' => TRUE) + $url['options']); + } + return $render; + } + + /** + * Render a single value. + * + * @param $handler + * The field handler whose field is rendered. + * @param $value + * The single value to render. + * @param $values + * The values for the current row retrieved from the Views query, as an + * object. + * + * @return + * The rendered value. + */ + public static function render_single_value($handler, $value, $values) { + // Try to use the method in the specific field handler. + if (method_exists($handler, 'render_single_value')) { + $handler->current_value = $value; + $return = $handler->render_single_value($value, $values); + unset($handler->current_value); + return $return; + } + // Default fallback in case the field handler doesn't provide the method. + return is_scalar($value) ? check_plain($value) : nl2br(check_plain(print_r($value, TRUE))); + } + +} diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_area_entity.inc b/sites/all/modules/custom/entity/views/handlers/entity_views_handler_area_entity.inc new file mode 100644 index 0000000000..f37469424a --- /dev/null +++ b/sites/all/modules/custom/entity/views/handlers/entity_views_handler_area_entity.inc @@ -0,0 +1,120 @@ + 'node'); + $options['entity_id'] = array('default' => ''); + $options['view_mode'] = array('default' => 'full'); + $options['bypass_access'] = array('default' => FALSE); + return $options; + } + + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + + $entity_type_options = array(); + foreach (entity_get_info() as $entity_type => $entity_info) { + $entity_type_options[$entity_type] = $entity_info['label']; + } + + $entity_type = $this->options['entity_type']; + + $form['entity_type'] = array( + '#type' => 'select', + '#title' => t('Entity type'), + '#options' => $entity_type_options, + '#description' => t('Choose the entity type you want to display in the area.'), + '#default_value' => $entity_type, + '#ajax' => array( + 'path' => views_ui_build_form_url($form_state), + ), + '#submit' => array('views_ui_config_item_form_submit_temporary'), + '#executes_submit_callback' => TRUE, + ); + + $form['entity_id'] = array( + '#type' => 'textfield', + '#title' => t('Entity id'), + '#description' => t('Choose the entity you want to display in the area.'), + '#default_value' => $this->options['entity_id'], + ); + + if ($entity_type) { + $entity_info = entity_get_info($entity_type); + $options = array(); + if (!empty($entity_info['view modes'])) { + foreach ($entity_info['view modes'] as $mode => $settings) { + $options[$mode] = $settings['label']; + } + } + + if (count($options) > 1) { + $form['view_mode'] = array( + '#type' => 'select', + '#options' => $options, + '#title' => t('View mode'), + '#default_value' => $this->options['view_mode'], + ); + } + else { + $form['view_mode_info'] = array( + '#type' => 'item', + '#title' => t('View mode'), + '#description' => t('Only one view mode is available for this entity type.'), + '#markup' => $options ? current($options) : t('Default'), + ); + $form['view_mode'] = array( + '#type' => 'value', + '#value' => $options ? key($options) : 'default', + ); + } + } + $form['bypass_access'] = array( + '#type' => 'checkbox', + '#title' => t('Bypass access checks'), + '#description' => t('If enabled, access permissions for rendering the entity are not checked.'), + '#default_value' => !empty($this->options['bypass_access']), + ); + return $form; + } + + public function admin_summary() { + $label = parent::admin_summary(); + if (!empty($this->options['entity_id'])) { + return t('@label @entity_type:@entity_id', array( + '@label' => $label, + '@entity_type' => $this->options['entity_type'], + '@entity_id' => $this->options['entity_id'], + )); + } + } + + public function render($empty = FALSE) { + if (!$empty || !empty($this->options['empty'])) { + return $this->render_entity($this->options['entity_type'], $this->options['entity_id'], $this->options['view_mode']); + } + return ''; + } + + /** + * Render an entity using the view mode. + */ + public function render_entity($entity_type, $entity_id, $view_mode) { + if (!empty($entity_type) && !empty($entity_id) && !empty($view_mode)) { + $entity = entity_load_single($entity_type, $entity_id); + if (!empty($this->options['bypass_access']) || entity_access('view', $entity_type, $entity)) { + $render = entity_view($entity_type, array($entity), $view_mode); + $render_entity = reset($render); + return drupal_render($render_entity); + } + } + else { + return ''; + } + } +} diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_boolean.inc b/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_boolean.inc new file mode 100644 index 0000000000..42943d9ad3 --- /dev/null +++ b/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_boolean.inc @@ -0,0 +1,99 @@ + TRUE); + $options['granularity'] = array('default' => 2); + $options['prefix'] = array('default' => '', 'translatable' => TRUE); + $options['suffix'] = array('default' => '', 'translatable' => TRUE); + + return $options; + } + + public function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + EntityFieldHandlerHelper::options_form($this, $form, $form_state); + + $form['format_interval'] = array( + '#type' => 'checkbox', + '#title' => t('Format interval'), + '#description' => t('If checked, the value will be formatted as a time interval. Otherwise, just the number of seconds will be displayed.'), + '#default_value' => $this->options['format_interval'], + ); + $form['granularity'] = array( + '#type' => 'textfield', + '#title' => t('Granularity'), + '#default_value' => $this->options['granularity'], + '#description' => t('Specify how many different units to display.'), + '#dependency' => array('edit-options-format-interval' => array(TRUE)), + '#size' => 2, + ); + $form['prefix'] = array( + '#type' => 'textfield', + '#title' => t('Prefix'), + '#default_value' => $this->options['prefix'], + '#description' => t('Text to put before the duration text.'), + ); + $form['suffix'] = array( + '#type' => 'textfield', + '#title' => t('Suffix'), + '#default_value' => $this->options['suffix'], + '#description' => t('Text to put after the duration text.'), + ); + } + + /** + * Render the field. + * + * @param $values + * The values retrieved from the database. + */ + public function render($values) { + return EntityFieldHandlerHelper::render($this, $values); + } + + /** + * Render a single field value. + */ + public function render_single_value($value, $values) { + if ($this->options['format_interval']) { + $value = format_interval($value, (int) $this->options['granularity']); + } + // Value sanitization is handled by the wrapper, see + // EntityFieldHandlerHelper::get_value(). + return $this->sanitize_value($this->options['prefix'], 'xss') . + $value . + $this->sanitize_value($this->options['suffix'], 'xss'); + } + +} diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_entity.inc b/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_entity.inc new file mode 100644 index 0000000000..d9fe73b244 --- /dev/null +++ b/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_entity.inc @@ -0,0 +1,207 @@ +field_entity_type = entity_property_extract_innermost_type($this->definition['type']); + } + + /** + * Overridden to add the field for the entity ID (if necessary). + */ + public function query() { + EntityFieldHandlerHelper::query($this); + } + + /** + * Adds a click-sort to the query. + */ + public function click_sort($order) { + EntityFieldHandlerHelper::click_sort($this, $order); + } + + /** + * Load the entities for all rows that are about to be displayed. + */ + public function pre_render(&$values) { + EntityFieldHandlerHelper::pre_render($this, $values); + } + + /** + * Overridden to use a metadata wrapper. + */ + public function get_value($values, $field = NULL) { + return EntityFieldHandlerHelper::get_value($this, $values, $field); + } + + public function option_definition() { + $options = parent::option_definition(); + $options += EntityFieldHandlerHelper::option_definition($this); + + $options['display'] = array('default' => 'label'); + $options['link_to_entity']['default'] = TRUE; + $options['view_mode'] = array('default' => 'default'); + $options['bypass_access'] = array('default' => FALSE); + + return $options; + } + + public function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + EntityFieldHandlerHelper::options_form($this, $form, $form_state); + // We want a different form field at a different place. + unset($form['link_to_entity']); + + $options = array( + 'label' => t('Show entity label'), + 'id' => t('Show entity ID'), + 'view' => t('Show complete entity'), + ); + $form['display'] = array( + '#type' => 'select', + '#title' => t('Display'), + '#description' => t('Decide how this field will be displayed.'), + '#options' => $options, + '#default_value' => $this->options['display'], + ); + $form['link_to_entity'] = array( + '#type' => 'checkbox', + '#title' => t('Link to entity'), + '#description' => t('Link this field to the entity.'), + '#default_value' => $this->options['link_to_entity'], + '#dependency' => array('edit-options-display' => array('label', 'id')), + ); + + // Stolen from entity_views_plugin_row_entity_view. + $entity_info = entity_get_info($this->field_entity_type); + $options = array(); + if (!empty($entity_info['view modes'])) { + foreach ($entity_info['view modes'] as $mode => $settings) { + $options[$mode] = $settings['label']; + } + } + + if (count($options) > 1) { + $form['view_mode'] = array( + '#type' => 'select', + '#options' => $options, + '#title' => t('View mode'), + '#default_value' => $this->options['view_mode'], + '#dependency' => array('edit-options-display' => array('view')), + ); + } + else { + $form['view_mode'] = array( + '#type' => 'value', + '#value' => $options ? key($options) : 'default', + ); + } + $form['bypass_access'] = array( + '#type' => 'checkbox', + '#title' => t('Bypass access checks'), + '#description' => t('If enabled, access permissions for rendering the entity are not checked.'), + '#default_value' => !empty($this->options['bypass_access']), + ); + } + + public function render($values) { + return EntityFieldHandlerHelper::render($this, $values); + } + + /** + * Render a value as a link to the entity if applicable. + * + * @param $value + * The value to render. + * @param $values + * The values for the current row retrieved from the Views query, as an + * object. + */ + public function render_entity_link($entity, $values) { + $type = $this->field_entity_type; + if (!is_object($entity) && isset($entity) && $entity !== FALSE) { + $entity = entity_load_single($type, $entity); + } + if (!$entity) { + return ''; + } + $render = $this->render_single_value($entity, $values); + if (!$this->options['link_to_entity'] || $this->options['display'] == 'view') { + return $render; + } + if (is_object($entity) && ($url = entity_uri($type, $entity))) { + return l($render, $url['path'], array('html' => TRUE) + $url['options']); + } + return $render; + } + + /** + * Render a single field value. + */ + public function render_single_value($entity, $values) { + $type = $this->field_entity_type; + if (!is_object($entity) && isset($entity) && $entity !== FALSE) { + $entity = entity_load_single($type, $entity); + } + // Make sure the entity exists and access is either given or bypassed. + if (!$entity || !(!empty($this->options['bypass_access']) || entity_access('view', $type, $entity))) { + return ''; + } + + if ($this->options['display'] === 'view') { + $entity_view = entity_view($type, array($entity), $this->options['view_mode']); + return render($entity_view); + } + + if ($this->options['display'] == 'label') { + $value = entity_label($type, $entity); + } + // Either $options[display] == 'id', or we have no label. + if (empty($value)) { + $value = entity_id($type, $entity); + } + $value = $this->sanitize_value($value); + + return $value; + } + +} diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_field.inc b/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_field.inc new file mode 100644 index 0000000000..f3cd7da268 --- /dev/null +++ b/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_field.inc @@ -0,0 +1,105 @@ +field_info, $this->definition['entity type']); + } + + /** + * Overridden to add the field for the entity ID (if necessary). + */ + public function query($use_groupby = FALSE) { + EntityFieldHandlerHelper::query($this); + } + + /** + * Adds a click-sort to the query. + */ + public function click_sort($order) { + EntityFieldHandlerHelper::click_sort($this, $order); + } + + /** + * Override so it doesn't do any harm (or, anything at all). + */ + public function post_execute(&$values) { } + + /** + * Load the entities for all rows that are about to be displayed. + */ + public function pre_render(&$values) { + parent::pre_render($values); + EntityFieldHandlerHelper::pre_render($this, $values, TRUE); + } + + /** + * Overridden to get the items our way. + */ + public function get_items($values) { + $items = array(); + // Set the entity type for the parent handler. + $values->_field_data[$this->field_alias]['entity_type'] = $this->entity_type; + // We need special handling for lists of entities as the base. + $entities = EntityFieldHandlerHelper::get_value($this, $values, 'entity object'); + if (!is_array($entities)) { + $entities = $entities ? array($entities) : array(); + } + foreach ($entities as $entity) { + // Only try to render the field if it is even present on this bundle. + // Otherwise, field_view_field() will trigger a fatal. + list (, , $bundle) = entity_extract_ids($this->entity_type, $entity); + if (field_info_instance($this->entity_type, $this->definition['field_name'], $bundle)) { + // Set the currently rendered entity. + $values->_field_data[$this->field_alias]['entity'] = $entity; + $items = array_merge($items, $this->set_items($values, $this->view->row_index)); + } + } + return $items; + } + + /** + * Overridden to force displaying multiple values in a single row. + */ + function multiple_options_form(&$form, &$form_state) { + parent::multiple_options_form($form, $form_state); + $form['group_rows']['#default_value'] = TRUE; + $form['group_rows']['#disabled'] = TRUE; + } +} diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_numeric.inc b/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_numeric.inc new file mode 100644 index 0000000000..bf98149103 --- /dev/null +++ b/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_numeric.inc @@ -0,0 +1,99 @@ + TRUE); + return $options; + } + + /** + * Returns an option form for setting this handler's options. + */ + public function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + EntityFieldHandlerHelper::options_form($this, $form, $form_state); + + $form['format_name'] = array( + '#title' => t('Use human-readable name'), + '#type' => 'checkbox', + '#description' => t("If this is checked, the values' names will be displayed instead of their internal identifiers."), + '#default_value' => $this->options['format_name'], + '#weight' => -5, + ); + } + + public function render($values) { + return EntityFieldHandlerHelper::render($this, $values); + } + + /** + * Render a single field value. + */ + public function render_single_value($value, $values) { + if (!isset($this->option_list)) { + $this->option_list = array(); + $callback = $this->definition['options callback']; + if (is_callable($callback['function'])) { + // If a selector is used, get the name of the selected field. + $field_name = EntityFieldHandlerHelper::get_selector_field_name($this->real_field); + $this->option_list = call_user_func($callback['function'], $field_name, $callback['info'], 'view'); + } + } + if ($this->options['format_name'] && isset($this->option_list[$value])) { + $value = $this->option_list[$value]; + } + // Sanitization is handled by the wrapper, see + // EntityFieldHandlerHelper::get_value(). + return $value; + } + +} diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_text.inc b/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_text.inc new file mode 100644 index 0000000000..425abf27e7 --- /dev/null +++ b/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_text.inc @@ -0,0 +1,101 @@ +definition['multiple'])) { + $form['multiple_note'] = array( + '#markup' => t('Note: This is a multi-valued relationship, which is currently not supported. ' . + 'Only the first related entity will be shown.'), + '#weight' => -5, + ); + } + } + + /** + * Called to implement a relationship in a query. + * + * As we don't add any data to the query itself, we don't have to do anything + * here. Views just don't thinks we have been called unless we set our + * $alias property. Otherwise, this override is just here to keep PHP from + * blowing up by calling inexistent methods on the query plugin. + */ + public function query() { + $this->alias = $this->options['id']; + } + +} diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_relationship_by_bundle.inc b/sites/all/modules/custom/entity/views/handlers/entity_views_handler_relationship_by_bundle.inc new file mode 100644 index 0000000000..55b0fc2fad --- /dev/null +++ b/sites/all/modules/custom/entity/views/handlers/entity_views_handler_relationship_by_bundle.inc @@ -0,0 +1,117 @@ + array()); + + return $options; + } + + /** + * Add an entity type option. + */ + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + + // Get the entity type and info from the table data for the base on the + // right hand side of the relationship join. + $table_data = views_fetch_data($this->definition['base']); + $entity_type = $table_data['table']['entity type']; + $entity_info = entity_get_info($entity_type); + + // Get the info of the bundle entity. + foreach (entity_get_info() as $type => $info) { + if (isset($info['bundle of']) && $info['bundle of'] == $entity_type) { + $entity_bundle_info = $info; + break; + } + } + + $plural_label = isset($entity_bundle_info['plural label']) ? $entity_bundle_info['plural label'] : $entity_bundle_info['label'] . 's'; + $bundle_options = array(); + foreach ($entity_info['bundles'] as $name => $info) { + $bundle_options[$name] = $info['label']; + } + + $form['bundle_types'] = array( + '#title' => $plural_label, + '#type' => 'checkboxes', + '#description' => t('Restrict this relationship to one or more @bundles.', array('@bundles' => strtolower($entity_bundle_info['plural label']))), + '#options' => $bundle_options, + '#default_value' => $this->options['bundle_types'], + ); + } + + /** + * Make sure only checked bundle types are left. + */ + function options_submit(&$form, &$form_state) { + $form_state['values']['options']['bundle_types'] = array_filter($form_state['values']['options']['bundle_types']); + parent::options_submit($form, $form_state); + } + + /** + * Called to implement a relationship in a query. + * + * Mostly the same as the parent method, except we add an extra clause to + * the join. + */ + function query() { + $table_data = views_fetch_data($this->definition['base']); + $base_field = empty($this->definition['base field']) ? $table_data['table']['base']['field'] : $this->definition['base field']; + $this->ensure_my_table(); + + $def = $this->definition; + $def['table'] = $this->definition['base']; + $def['field'] = $base_field; + $def['left_table'] = $this->table_alias; + $def['left_field'] = $this->field; + if (!empty($this->options['required'])) { + $def['type'] = 'INNER'; + } + + // Add an extra clause to the join if there are bundle types selected. + if ($this->options['bundle_types']) { + $entity_info = entity_get_info($table_data['table']['entity type']); + $def['extra'] = array( + array( + // The table and the IN operator are implicit. + 'field' => $entity_info['bundle keys']['bundle'], + 'value' => $this->options['bundle_types'], + ), + ); + } + + if (!empty($def['join_handler']) && class_exists($def['join_handler'])) { + $join = new $def['join_handler']; + } + else { + $join = new views_join(); + } + + $join->definition = $def; + $join->construct(); + $join->adjusted = TRUE; + + // Use a short alias for this. + $alias = $def['table'] . '_' . $this->table; + $this->alias = $this->query->add_relationship($alias, $join, $this->definition['base'], $this->relationship); + } +} diff --git a/sites/all/modules/custom/entity/views/plugins/entity_views_plugin_row_entity_view.inc b/sites/all/modules/custom/entity/views/plugins/entity_views_plugin_row_entity_view.inc new file mode 100644 index 0000000000..db72b5f50d --- /dev/null +++ b/sites/all/modules/custom/entity/views/plugins/entity_views_plugin_row_entity_view.inc @@ -0,0 +1,95 @@ +view->base_table); + $this->entity_type = $table_data['table']['entity type']; + // Set base table and field information as used by views_plugin_row to + // select the entity id if used with default query class. + $info = entity_get_info($this->entity_type); + if (!empty($info['base table']) && $info['base table'] == $this->view->base_table) { + $this->base_table = $info['base table']; + $this->base_field = $info['entity keys']['id']; + } + } + + public function option_definition() { + $options = parent::option_definition(); + $options['view_mode'] = array('default' => 'full'); + return $options; + } + + public function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + + $entity_info = entity_get_info($this->entity_type); + $options = array(); + if (!empty($entity_info['view modes'])) { + foreach ($entity_info['view modes'] as $mode => $settings) { + $options[$mode] = $settings['label']; + } + } + + if (count($options) > 1) { + $form['view_mode'] = array( + '#type' => 'select', + '#options' => $options, + '#title' => t('View mode'), + '#default_value' => $this->options['view_mode'], + ); + } + else { + $form['view_mode_info'] = array( + '#type' => 'item', + '#title' => t('View mode'), + '#description' => t('Only one view mode is available for this entity type.'), + '#markup' => $options ? current($options) : t('Default'), + ); + $form['view_mode'] = array( + '#type' => 'value', + '#value' => $options ? key($options) : 'default', + ); + } + return $form; + } + + public function pre_render($values) { + if (!empty($values)) { + list($this->entity_type, $this->entities) = $this->view->query->get_result_entities($values, !empty($this->relationship) ? $this->relationship : NULL, isset($this->field_alias) ? $this->field_alias : NULL); + } + // Render the entities. + if ($this->entities) { + $render = entity_view($this->entity_type, $this->entities, $this->options['view_mode']); + // Remove the first level of the render array. + $this->rendered_content = reset($render); + } + } + + /** + * Overridden to return the entity object. + */ + function get_value($values, $field = NULL) { + return isset($this->entities[$this->view->row_index]) ? $this->entities[$this->view->row_index] : FALSE; + } + + public function render($values) { + if ($entity = $this->get_value($values)) { + $render = $this->rendered_content[entity_id($this->entity_type, $entity)]; + return drupal_render($render); + } + } +} diff --git a/sites/all/modules/custom/entity_dependency/EntityDependencyIterator.inc b/sites/all/modules/custom/entity_dependency/EntityDependencyIterator.inc new file mode 100644 index 0000000000..5bb591b7d9 --- /dev/null +++ b/sites/all/modules/custom/entity_dependency/EntityDependencyIterator.inc @@ -0,0 +1,284 @@ +entities = array(); + foreach ($entities as $entity_arr) { + $entity_obj = entity_load($entity_arr['type'], array($entity_arr['id'])); + if (empty($entity_obj)) { + if (isset($parent)) { + $error_msg = 'Failed to load %type ID %id, which is a dependency of %parent_type ID %parent_id.'; + $error_vars = array( + '%type' => $entity_arr['type'], + '%id' => $entity_arr['id'], + '%parent_type' => $parent->current['type'], + '%parent_id' => $parent->current['id'], + ); + } + else { + $error_msg = t('Failed to load requested %type ID %id.'); + $error_vars = array( + '%type' => $entity_arr['type'], + '%id' => $entity_arr['id'], + ); + } + watchdog('Entity Dependency', $error_msg, $error_vars, WATCHDOG_WARNING); + } + else { + $this->entities[] = $entity_arr; + } + } + + if (empty($parent)) { + foreach ($this->entities as $key => $entity) { + $this->causes[$entity['type']][$entity['id']] = FALSE; + } + } + else { + $this->causes =& $parent->causes; + $this->checked =& $parent->checked; + $this->traversed =& $parent->traversed; + } + } + + /** + * Returns TRUE if an iterator can be created for the current item in the + * entities array. + * + * @return boolean + */ + public function hasChildren() { + $current = $this->current; + // Don't check for dependencies twice. + if (!empty($this->current['id']) && !isset($this->checked[$current['type']][$current['id']])) { + // Load the current entity. + if (!empty($current['revision_id'])) { + $entity_info = entity_get_info($current['type']); + if (!empty($entity_info['entity keys']['revision'])) { + $conditions = array($entity_info['entity keys']['revision'] => $current['revision_id']); + } + } + else { + $conditions = array(); + } + $entities = entity_load($current['type'], array($current['id']), $conditions); + $entity = reset($entities); + + // When $entity does not exist (may be the case with references + // to deleted taxonomy terms), skip and remove it from $this->entites. + if (!$entity) { + watchdog('entity_dependency', "Missing entity %id of type %type", array('%id' => $current['id'], '%type' => $current['type']), WATCHDOG_WARNING); + // We can't do anything useful with the no-existent entity, + // therfore we just remove it. + array_shift($this->entities); + return FALSE; + } + + $this->dependencies = module_invoke_all('entity_dependencies', $entity, $current['type']); + //$this->belongings = module_invoke_all('entity_belongings', $entity, $this->entityType); + + // Don't add dependencies that already were checked. + foreach ($this->dependencies as $key => $dependency) { + if (($dependency['type'] == $current['type'] && $dependency['id'] == $current['id']) + || isset($this->checked[$dependency['type']][$dependency['id']])) { + + unset($this->dependencies[$key]); + } + else { + $this->causes[$dependency['type']][$dependency['id']] = $current; + } + } + + // Let other modules have their say. + drupal_alter('entity_dependencies', $this->dependencies, $entity, $current['type']); + + // Now mark this as checked. + $this->checked[$current['type']][$current['id']] = TRUE; + + if (!empty($this->dependencies)) { + return TRUE; + } + } + return FALSE; + } + + /** + * Helper method to get entity dependencies. + */ + public function getChildrenEntities() { + $entities = array(); + $current = current($this->entities); + + if (!empty($this->dependencies)) { + $entities = $this->dependencies; + // In an iterator, having children means that the current key itself + // isn't a part of the entities. However, we need that entity.. So we add + // the parent as a part of the entities. And since children always should + // go first, we add the parent last. + $entities[] = $current; + } + return $entities; + } + + /** + * Returns an iterator for the current entry. + * + * @return EntityDependencyIterator + */ + public function getChildren() { + return new EntityDependencyIterator($this->getChildrenEntities(), $this); + } + + /** + * Get the current entity formatted with some extra metadata according to + * the OData protocol. + * + * @see http://www.odata.org/developers/protocols + */ + public function current() { + $current = current($this->entities); + // Load the current entity. + $entities = entity_load($current['type'], array($current['id'])); + $entity = reset($entities); + // Add necessary metadata to the entity. + $cause = FALSE; + if (!empty($this->causes[$current['type']][$current['id']])) { + $cause = $this->causes[$current['type']][$current['id']]['type'] . '/' . $this->causes[$current['type']][$current['id']]['id']; + } + $entity->__metadata = array( + 'type' => $current['type'], + 'uri' => $current['type'] . '/' . $current['id'], + 'cause' => $cause, + ); + // Now mark this as traversed. + $this->traversed[$current['type']][$current['id']] = TRUE; + return $entity; + } + + /** + * Returns the key of the current element. + */ + public function key() { + return key($this->entities); + } + + /** + * Moves the current position to the next element. + */ + public function next() { + do { + $current = next($this->entities); + } while (!empty($current) && isset($this->traversed[$current['type']][$current['id']])); + } + + /** + * Rewinds the Iterator to the first element. + */ + public function rewind() { + reset($this->entities); + } + + /** + * Checks if current position is valid. + * + * @return boolean + */ + public function valid() { + $current = current($this->entities); + if (!empty($current) && is_array($current) && isset($current['type']) && isset($current['id']) && !isset($this->traversed[$current['type']][$current['id']])) { + $this->current = $current; + return TRUE; + } + return FALSE; + } +} diff --git a/sites/all/modules/custom/entity_dependency/EntityDependencyIteratorInterface.inc b/sites/all/modules/custom/entity_dependency/EntityDependencyIteratorInterface.inc new file mode 100644 index 0000000000..978974f801 --- /dev/null +++ b/sites/all/modules/custom/entity_dependency/EntityDependencyIteratorInterface.inc @@ -0,0 +1,9 @@ + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/sites/all/modules/custom/entity_dependency/README.txt b/sites/all/modules/custom/entity_dependency/README.txt new file mode 100644 index 0000000000..91a553a4b8 --- /dev/null +++ b/sites/all/modules/custom/entity_dependency/README.txt @@ -0,0 +1,32 @@ + +INTRODUCTION +------------ + +This module provides an API to define dependencies between entities and a useful +iterator. + +BACKGROUND +---------- + +This project originated from the Deploy module, where it's used heavily, but +were later separated out for better code separation and reusability between +modules. + +THE ITERATOR +------------ + +You construct the iterator with an array of entity type keys and entity id +values. Then, when iterating over the iterator you will get all entities AND +their dependencies out in a sane order (i.e. dependencies first). + +Since the iterator only return "plain" entity objects and developers often need +more meta data around the entity (primarily the entity type) we are embedding +metadata within the entity object according to the OData protocol's JSON format +(http://www.odata.org/developers/protocols/json-format) which is a very simple +and lightweight way of solving the problem. + +7.x-2.x +------- + +The next major version should provide a more declarative API. Right now run-time +hooks are provided, which is a bit ineffective. diff --git a/sites/all/modules/custom/entity_dependency/entity_dependency.api.php b/sites/all/modules/custom/entity_dependency/entity_dependency.api.php new file mode 100644 index 0000000000..b04584b6ce --- /dev/null +++ b/sites/all/modules/custom/entity_dependency/entity_dependency.api.php @@ -0,0 +1,70 @@ + array( + * + */ +function hook_entity_dependencies($entity, $entity_type) { + if ($entity_type == 'node') { + $dependencies = array(); + // The node has a 'user' dependency through the 'uid' and + // 'revision_uid' properties. + entity_dependency_add($dependencies, $entity, 'user', array('uid', 'revision_uid')); + // The node has a 'node' dependency through the 'tnid' property. + entity_dependency_add($dependencies, $entity, 'node', 'tnid'); + return $dependencies; + } +} + +/** + * This is not a real hook (as the other Field API hooks). This hook is called + * for each module owner of a field. But it has the same intention as + * hook_entity_dependencies() but is more suited for defining dependencies for + * certain fields. + * + * Below is an example. Taxonomy module owns one field (the taxonomy term + * reference field), hence it's called for all instances of that field. + * + * @see hook_entity_dependencies() + */ +function hook_field_entity_dependencies($entity_type, $entity, $field, $instance, $langcode, $items) { + // No need to check for the field type here, since this hook is only called + // for the owner of this field. Taxonomy module only owns one field. + $dependencies = array(); + entity_dependency_add($dependencies, $items, 'taxonomy_term', 'tid'); + return $dependencies; +} diff --git a/sites/all/modules/custom/entity_dependency/entity_dependency.core.inc b/sites/all/modules/custom/entity_dependency/entity_dependency.core.inc new file mode 100644 index 0000000000..5b84361afe --- /dev/null +++ b/sites/all/modules/custom/entity_dependency/entity_dependency.core.inc @@ -0,0 +1,174 @@ +picture)) { + $dependencies = array(); + $dependencies[] = array('type' => 'file', 'id' => $entity->picture->fid); + return $dependencies; + } +} + +/** + * Implements hook_entity_dependenies(). + */ +function comment_entity_dependencies($entity, $entity_type) { + if ($entity_type == 'comment') { + $dependencies = array(); + entity_dependency_add($dependencies, $entity, 'user', 'uid'); + entity_dependency_add($dependencies, $entity, 'node', 'nid'); + return $dependencies; + } +} + +/** + * Implements hook_entity_dependencies(). + */ +function taxonomy_entity_dependencies($entity, $entity_type) { + if ($entity_type == 'taxonomy_term') { + $dependencies = array(); + $terms = taxonomy_get_parents($entity->tid); + foreach ($terms as $tid => $term) { + $dependencies[] = array('type' => 'taxonomy_term', 'id' => $tid); + } + return $dependencies; + } +} + +/** + * Implements hook_entity_dependenies(). + */ +function file_entity_dependencies($entity, $entity_type) { + if ($entity_type == 'file') { + $dependencies = array(); + entity_dependency_add($dependencies, $entity, 'user', 'uid'); + return $dependencies; + } +} + +/** + * Implements hook_entity_dependencies(). + */ +function field_entity_dependencies($entity, $entity_type) { + $dependencies = array(); + list(, , $bundle_name) = entity_extract_ids($entity_type, $entity); + $instances = field_info_instances($entity_type, $bundle_name); + + foreach ($instances as $field_name => $instance) { + $field = field_info_field($field_name); + foreach ($entity->{$field_name} as $langcode => $items) { + $field_dependencies = module_invoke($field['module'], 'field_entity_dependencies', $entity_type, $entity, $field, $instance, $langcode, $items); + // Let other modules alter dependencies for this field. + drupal_alter('field_entity_dependencies', $field_dependencies, $entity_type, $entity, $field, $instance, $langcode, $items); + + if (!empty($field_dependencies)) { + $dependencies = array_merge_recursive($dependencies, $field_dependencies); + } + } + } + return $dependencies; +} + +/** + * @} End of "Property dependency implementations" + */ + +/** + * @defgroup entity_dependency_field Field dependency implementations + * @{ + */ + +/** + * Implements hook_field_entity_dependencies(). + */ +function taxonomy_field_entity_dependencies($entity_type, $entity, $field, $instance, $langcode, $items) { + // No need to check for the field type here, since this hook is only called + // for the owner of this field. Taxonomy module only owns one field. + $dependencies = array(); + entity_dependency_add($dependencies, $items, 'taxonomy_term', 'tid'); + return $dependencies; +} + +/** + * Implements hook_field_entity_dependencies(). + */ +function file_field_entity_dependencies($entity_type, $entity, $field, $instance, $langcode, $items) { + $dependencies = array(); + entity_dependency_add($dependencies, $items, 'file', 'fid'); + entity_dependency_add($dependencies, $items, 'user', 'uid'); + return $dependencies; +} + +/** + * Implements hook_field_entity_dependencies(). + */ +function image_field_entity_dependencies($entity_type, $entity, $field, $instance, $langcode, $items) { + return file_field_entity_dependencies($entity_type, $entity, $field, $instance, $langcode, $items); +} + +/** + * Implements hook_field_entity_dependencies(). + */ +function node_reference_field_entity_dependencies($entity_type, $entity, $field, $instance, $langcode, $items) { + $dependencies = array(); + entity_dependency_add($dependencies, $items, 'node', 'nid'); + return $dependencies; +} + +/** + * Implements hook_field_entity_dependencies(). + */ +function user_reference_field_entity_dependencies($entity_type, $entity, $field, $instance, $langcode, $items) { + $dependencies = array(); + entity_dependency_add($dependencies, $items, 'user', 'uid'); + return $dependencies; +} + +/** + * Implements hook_field_entity_dependencies(). + */ +function entityreference_field_entity_dependencies($entity_type, $entity, $field, $instance, $langcode, $items) { + $dependencies = array(); + entity_dependency_add($dependencies, $items, $field['settings']['target_type'], 'target_id'); + return $dependencies; +} + +/** + * Implements hook_field_entity_dependencies(). + */ +function field_collection_field_entity_dependencies($entity_type, $entity, $field, $instance, $langcode, $items) { + $dependencies = array(); + entity_dependency_add($dependencies, $items, 'field_collection_item', 'value'); + return $dependencies; +} + +/** + * @} End of "Field dependency implementations" + */ diff --git a/sites/all/modules/custom/entity_dependency/entity_dependency.info b/sites/all/modules/custom/entity_dependency/entity_dependency.info new file mode 100644 index 0000000000..b12767d39a --- /dev/null +++ b/sites/all/modules/custom/entity_dependency/entity_dependency.info @@ -0,0 +1,14 @@ +name = "Entity Dependency API" +description = "Provides an API to define dependencies between entities, and also a useful iterator class." +core = "7.x" + +files[] = EntityDependencyIterator.inc +files[] = EntityDependencyIteratorInterface.inc +files[] = entity_dependency.test + +; Information added by Drupal.org packaging script on 2014-09-23 +version = "7.x-1.0-alpha2" +core = "7.x" +project = "entity_dependency" +datestamp = "1411455382" + diff --git a/sites/all/modules/custom/entity_dependency/entity_dependency.module b/sites/all/modules/custom/entity_dependency/entity_dependency.module new file mode 100644 index 0000000000..7838ceedde --- /dev/null +++ b/sites/all/modules/custom/entity_dependency/entity_dependency.module @@ -0,0 +1,128 @@ + array(10, 12), + * 'taxonomy_term' => array(16), + * ); + * @endcode + */ +function entity_dependency_iterator($entities, $plugin = 'default_iterator') { + if (module_exists('ctools')) { + $class_name = ctools_plugin_load_class('entity_dependency', 'iterator', $plugin, 'handler'); + $iterator = new $class_name($entities); + } + else { + $iterator = new EntityDependencyIterator($entities); + } + return new EntityDependencyIteratorIterator($iterator); +} + +/** + * Helper function to add entity dependencies to a dependency array. + * + * We never treat user UID 0 or 1 as dependencies. Those are low level user + * accounts ("anonymous" and "root") that already exists in most systems. + * + * @param $dependencies + * The dependency array. + * @param $objects + * Array of objects that should be checked for dependencies in $properties. + * @param $entity_type + * The type of entity that $properties will add dependency on. + * @param $properties + * An array of properties that adds dependencies to $objects. All properties + * must only point to one entity type at the time. + * + * @see entity_dependency.core.inc + */ +function entity_dependency_add(&$dependencies, $objects, $entity_type, $properties) { + if (!is_array($objects)) { + $objects = array($objects); + } + if (!is_array($properties)) { + $properties = array($properties); + } + + foreach ($objects as $object) { + foreach ($properties as $property) { + $value = NULL; + if (is_object($object) && isset($object->{$property})) { + $value = $object->{$property}; + } + elseif (is_array($object) && isset($object[$property])) { + $value = $object[$property]; + } + if (!empty($value) && !($entity_type == 'user' && ((int)$value == 0 || (int)$value == 1))) { + $dependencies[] = array('type' => $entity_type, 'id' => $value); + } + } + } +} + +/** + * Implements hook_ctools_plugin_api(). + */ +function entity_dependency_ctools_plugin_api($module, $api) { + if ($module == 'entity_dependency' && $api == 'iterator') { + return array('version' => 1); + } +} + +/** + * Implements hook_ctools_plugin_type(). + */ +function entity_dependency_ctools_plugin_type() { + $plugins['iterator'] = array( + 'cache' => TRUE, + 'use hooks' => TRUE, + ); + + return $plugins; +} + +/** + * Implements hook_entity_dependency_iterator(). + */ +function entity_dependency_entity_dependency_iterator() { + $plugins = array(); + + $plugins['default_iterator'] = array( + 'title' => t('Default Entity Dependency Iterator'), + 'description' => t('Iterate through entities dependencies.'), + 'handler' => 'EntityDependencyIterator', + 'file' => 'EntityDependencyIterator.inc', + ); + + return $plugins; +} + +/** + * Fetches all ctools plugins defined by entity_dependency. + */ +function entity_dependency_get_all_ctools_plugins() { + ctools_include('plugins'); + $iterators = ctools_get_plugins('entity_dependency', 'iterator'); + + $plugins = array(); + foreach ($iterators as $machine_name => $plugin) { + $plugins[$machine_name] = $plugin['title']; + } + + return $plugins; +} diff --git a/sites/all/modules/custom/entity_dependency/entity_dependency.test b/sites/all/modules/custom/entity_dependency/entity_dependency.test new file mode 100644 index 0000000000..4a7e53cc50 --- /dev/null +++ b/sites/all/modules/custom/entity_dependency/entity_dependency.test @@ -0,0 +1,280 @@ + 'Entity dependency iterator', + 'description' => 'Test the EntityDependencyIterator class.', + 'group' => 'Entity Dependency' + ); + } + + /** + * {@inheritdoc} + */ + function setUp() { + parent::setUp('entity_dependency'); + } + + /** + * Helper method to return the iterator. + */ + function getIterator() { + return entity_dependency_iterator($this->entities); + } + + /** + * Code taken from TaxonomyWebTestCase::createTerm() since we can't extend + * that test case. Some simplifications are made though. + * + * @todo + * This will probably not work when the Testing profile is used. Then we + * need to create the vocabulary manually. + * + * @see TaxonomyWebTestCase::createTerm() + */ + function createTerm() { + $term = new stdClass(); + $term->name = $this->randomName(); + $term->description = $this->randomName(); + // Use the first available text format. + $term->format = db_query_range('SELECT format FROM {filter_format}', 0, 1)->fetchField(); + // For our test cases it's enough to rely on the standard 'tags' vocabulary. + $term->vid = 1; + taxonomy_term_save($term); + return $term; + } + + /** + * Checks that entities are in the correct order. + * + * @todo Document me properly. + */ + function assertCorrectEntityOrder($entity, $correct_type, $entity_id_name, $correct_id) { + $test = $entity->__metadata['type'] == $correct_type && $entity->{$entity_id_name} == $correct_id; + $placeholders = array('%entity_type' => $entity->__metadata['type'], '%entity_id' => $entity->{$entity_id_name}); + $this->assertTrue($test, t('%entity_type %entity_id was iterated over, in correct order.', $placeholders)); + } + + /** + * Test if single node passes iterator. + */ + function testNode() { + $node = $this->drupalCreateNode(array( + 'type' => 'article', + 'uid' => 1 + )); + + $this->entities = array( + array('id' => $node->nid, 'type' => 'node'), + ); + + $i = 0; + foreach ($this->getIterator() as $entity) { + switch ($i) { + case 0: + $this->assertCorrectEntityOrder($entity, 'node', 'nid', $node->nid); + break; + } + $i++; + } + $this->assertEqual($i, 1, 'Correct number of entities was iterated over.'); + } + + /** + * Test basic scenario with node & author. + */ + function testNodeUser() { + $author = $this->drupalCreateUser(); + $node = $this->drupalCreateNode(array( + 'type' => 'article', + 'uid' => $author->uid + )); + + $this->entities = array( + array('id' => $node->nid, 'type' => 'node'), + ); + + $i = 0; + foreach ($this->getIterator() as $entity) { + switch ($i) { + case 0: + $this->assertCorrectEntityOrder($entity, 'user', 'uid', $author->uid); + break; + case 1: + $this->assertCorrectEntityOrder($entity, 'node', 'nid', $node->nid); + break; + } + $i++; + } + $this->assertEqual($i, 2, 'Correct number of entities was iterated over.'); + } + + /** + * Test basic scenario with node & author & comment & commentor. + */ + function testNodeUserComment() { + $author = $this->drupalCreateUser(); + $node = $this->drupalCreateNode(array( + 'type' => 'article', + 'uid' => $author->uid + )); + + $commentor = $this->drupalCreateUser(); + $comment = new stdClass(); + $comment->cid = 0; + $comment->pid = 0; + $comment->nid = $node->nid; + $comment->uid = $commentor->uid; + comment_save($comment); + + $this->entities = array( + array('id' => $comment->cid, 'type' => 'comment'), + ); + + $i = 0; + foreach ($this->getIterator() as $entity) { + switch ($i) { + case 0: + $this->assertCorrectEntityOrder($entity, 'user', 'uid', $commentor->uid); + break; + case 1: + $this->assertCorrectEntityOrder($entity, 'user', 'uid', $author->uid); + break; + case 2: + $this->assertCorrectEntityOrder($entity, 'node', 'nid', $node->nid); + break; + case 3: + $this->assertCorrectEntityOrder($entity, 'comment', 'cid', $comment->cid); + break; + } + $i++; + } + $this->assertEqual($i, 4, 'Correct number of entities was iterated over.'); + } + + /** + * Test cumbersome scenario with nodes, taxonomy and users. + */ + function testCumbersomeIterator() { + // Add the 'field_tags' field. + $user = $this->drupalCreateUser(); + $term1 = $this->createTerm(); + $term2 = $this->createTerm(); + $term3 = $this->createTerm(); + $term4 = $this->createTerm(); + $term1->parent = array($term3->tid); + taxonomy_term_save($term1); + + $node1 = $this->drupalCreateNode(array( + 'type' => 'article', + 'uid' => $user->uid, + 'field_tags' => array(LANGUAGE_NONE => array(array('tid' => $term1->tid), array('tid' => $term2->tid))), + )); + $node2 = $this->drupalCreateNode(array( + 'type' => 'article', + 'uid' => $user->uid, + // We fake that nid 1 is the translation of this node, just to test if + // the dependency works. We don't want to depend on a node reference. + 'tnid' => $node1->nid, + 'field_tags' => array(LANGUAGE_NONE => array(array('tid' => $term1->tid), array('tid' => $term2->tid), array('tid' => $term3->tid), array('tid' => $term4->tid))), + )); + // This node only has dependencies that should be detected by $node2 + // already. + $node3 = $this->drupalCreateNode(array( + 'type' => 'article', + 'uid' => $user->uid, + 'field_tags' => array(LANGUAGE_NONE => array(array('tid' => $term1->tid), array('tid' => $term2->tid), array('tid' => $term3->tid))), + )); + + // Add only the last node to the collection. What should come out of the + // iterator should be all it's dependencies, and last the node it self. + $this->entities = array( + array('id' => $node2->nid, 'type' => 'node'), + array('id' => $node3->nid, 'type' => 'node'), + ); + + $i = 0; + foreach ($this->getIterator() as $entity) { + switch ($i) { + case 0: + $this->assertCorrectEntityOrder($entity, 'taxonomy_term', 'tid', $term3->tid); + break; + case 1: + $this->assertCorrectEntityOrder($entity, 'taxonomy_term', 'tid', $term1->tid); + break; + case 2: + $this->assertCorrectEntityOrder($entity, 'taxonomy_term', 'tid', $term2->tid); + break; + case 3: + $this->assertCorrectEntityOrder($entity, 'taxonomy_term', 'tid', $term4->tid); + break; + case 4: + $this->assertCorrectEntityOrder($entity, 'user', 'uid', $user->uid); + break; + case 5: + $this->assertCorrectEntityOrder($entity, 'node', 'nid', $node1->nid); + break; + case 6: + $this->assertCorrectEntityOrder($entity, 'node', 'nid', $node2->nid); + break; + case 7: + $this->assertCorrectEntityOrder($entity, 'node', 'nid', $node3->nid); + break; + } + $i++; + } + $this->assertEqual($i, 8, 'Correct number of entities was iterated over.'); + } + + /** + * Test worse scenario with nodes, taxonomy and dangling reference to taxonomy term. + */ + function testDanglingTermReferenceIterator() { + // Add the 'field_tags' field. + $user = $this->drupalCreateUser(); + $term1 = $this->createTerm(); + taxonomy_term_save($term1); + + $node1 = $this->drupalCreateNode(array( + 'type' => 'article', + 'uid' => $user->uid, + 'field_tags' => array(LANGUAGE_NONE => array(array('tid' => $term1->tid))), + )); + + // Now delete the term (does not cascade to the reference in field tags). + taxonomy_term_delete($term1->tid); + + // Add only the last node to the collection. What should come out of the + // iterator should be all it's dependencies, and last the node it self. + $this->entities = array( + array('id' => $node1->nid, 'type' => 'node'), + ); + + $i = 0; + foreach ($this->getIterator() as $entity) { + switch ($i) { + case 0: + $this->assertCorrectEntityOrder($entity, 'user', 'uid', $user->uid); + break; + case 1: + $this->assertCorrectEntityOrder($entity, 'node', 'nid', $node1->nid); + break; + } + $i++; + } + $this->assertEqual($i, 2, 'Correct number of entities was iterated over.'); + } +} diff --git a/sites/all/modules/custom/entityreference/LICENSE.txt b/sites/all/modules/custom/entityreference/LICENSE.txt new file mode 100755 index 0000000000..d159169d10 --- /dev/null +++ b/sites/all/modules/custom/entityreference/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/sites/all/modules/custom/entityreference/README.txt b/sites/all/modules/custom/entityreference/README.txt new file mode 100644 index 0000000000..78706c0194 --- /dev/null +++ b/sites/all/modules/custom/entityreference/README.txt @@ -0,0 +1,16 @@ +DESCRIPTION +=========== +Provides a field type that can reference arbitrary entities. + +SITE BUILDERS +============= +Note that when using a select widget, Entity reference loads all the +entities in that list in order to get the entity's label. If there are +too many loaded entities that site might reach its memory limit and crash +(also known as WSOD). In such a case you are advised to change the widget +to "autocomplete". If you get a WSOD when trying to edit the field +settings, you can reach the widget settings directly by navigation to + + admin/structure/types/manage/[ENTITY-TYPE]/fields/[FIELD-NAME]/widget-type + +Replace ENTITY-TYPE and FIELD_NAME with the correct values. diff --git a/sites/all/modules/custom/entityreference/entityreference.admin.css b/sites/all/modules/custom/entityreference/entityreference.admin.css new file mode 100644 index 0000000000..01d5850a6d --- /dev/null +++ b/sites/all/modules/custom/entityreference/entityreference.admin.css @@ -0,0 +1,4 @@ + +.entityreference-settings { + margin-left: 1.5em; +} diff --git a/sites/all/modules/custom/entityreference/entityreference.devel_generate.inc b/sites/all/modules/custom/entityreference/entityreference.devel_generate.inc new file mode 100644 index 0000000000..f6ab0144a1 --- /dev/null +++ b/sites/all/modules/custom/entityreference/entityreference.devel_generate.inc @@ -0,0 +1,28 @@ +getReferencableEntities(); + if (is_array($referencable_entity) && !empty($referencable_entity)) { + // Get a random key. + foreach ($referencable_entity as $type => $eids) { + $object_field['target_id'] = array_rand($eids); + } + } + return $object_field; +} diff --git a/sites/all/modules/custom/entityreference/entityreference.diff.inc b/sites/all/modules/custom/entityreference/entityreference.diff.inc new file mode 100644 index 0000000000..5005670dd0 --- /dev/null +++ b/sites/all/modules/custom/entityreference/entityreference.diff.inc @@ -0,0 +1,90 @@ + $info) { + $old_items[$delta]['entity'] = isset($entities[$info['target_id']]) ? $entities[$info['target_id']] : NULL; + } + foreach ($new_items as $delta => $info) { + $new_items[$delta]['entity'] = isset($entities[$info['target_id']]) ? $entities[$info['target_id']] : NULL; + } +} + +/** + * Diff field callback for parsing entity field comparative values. + */ +function entityreference_field_diff_view($items, $context) { + $field = $context['field']; + $instance = $context['instance']; + $settings = $context['settings']; + $entity_type = $field['settings']['target_type']; + + $diff_items = array(); + + // We populate as much as possible to allow the best flexability in any + // string overrides. + $t_args = array(); + $t_args['!entity_type'] = $entity_type; + + $entity_info = entity_get_info($entity_type); + $t_args['!entity_type_label'] = $entity_info['label']; + + foreach ($items as $delta => $item) { + if (isset($item['entity'])) { + $output = array(); + + list($id,, $bundle) = entity_extract_ids($entity_type, $item['entity']); + $t_args['!id'] = $id; + $t_args['!bundle'] = $bundle; + $t_args['!diff_entity_label'] = entity_label($entity_type, $item['entity']); + + $output['entity'] = t('!diff_entity_label', $t_args); + if ($settings['show_id']) { + $output['id'] = t('ID: !id', $t_args); + } + $diff_items[$delta] = implode('; ', $output); + } + } + + return $diff_items; +} + +/** + * Provide default field comparison options. + */ +function entityreference_field_diff_default_options($field_type) { + return array( + 'show_id' => 0, + ); +} + +/** + * Provide a form for setting the field comparison options. + */ +function entityreference_field_diff_options_form($field_type, $settings) { + $options_form = array(); + $options_form['show_id'] = array( + '#type' => 'checkbox', + '#title' => t('Show ID'), + '#default_value' => $settings['show_id'], + ); + return $options_form; +} diff --git a/sites/all/modules/custom/entityreference/entityreference.feeds.inc b/sites/all/modules/custom/entityreference/entityreference.feeds.inc new file mode 100644 index 0000000000..3f6414158e --- /dev/null +++ b/sites/all/modules/custom/entityreference/entityreference.feeds.inc @@ -0,0 +1,171 @@ + $instance) { + $info = field_info_field($name); + if ($info['type'] == 'entityreference') { + // We don't use ":guid" in key, not to break existing configurations. + $targets[$name] = array( + 'name' => check_plain($instance['label'] . t(' (Entity reference by Feeds GUID)')), + 'callback' => 'entityreference_feeds_set_target', + 'description' => t('The field instance @label of @id matched by Feeds GUID.', array( + '@label' => $instance['label'], + '@id' => $name, + )), + ); + $targets[$name . ':url'] = array( + 'name' => check_plain($instance['label'] . t(' (Entity reference by Feeds URL)')), + 'callback' => 'entityreference_feeds_set_target', + 'description' => t('The field instance @label of @id matched by Feeds URL.', array( + '@label' => $instance['label'], + '@id' => $name, + )), + 'real_target' => $name, + ); + $targets[$name . ':etid'] = array( + 'name' => check_plain($instance['label'] . t(' (Entity reference by Entity ID)')), + 'callback' => 'entityreference_feeds_set_target', + 'description' => t('The field instance @label of @id matched by Entity ID.', array( + '@label' => $instance['label'], + '@id' => $name, + )), + 'real_target' => $name, + ); + $targets[$name . ':label'] = array( + 'name' => check_plain($instance['label'] . t(' (Entity reference by Entity label)')), + 'callback' => 'entityreference_feeds_set_target', + 'description' => t('The field instance @label of @id matched by Entity label.', array( + '@label' => $instance['label'], + '@id' => $name, + )), + 'real_target' => $name, + ); + } + } +} + +/** + * Entity reference callback for mapping. + * + * When the callback is invoked, $target contains the name of the field the + * user has decided to map to and $value contains the value of the feed item + * element the user has picked as a source. + * + * @param $source + * A FeedsSource object. + * @param $entity + * The entity to map to. + * @param $target + * The target key on $entity to map to. + * @param $value + * The value to map. MUST be an array. + */ +function entityreference_feeds_set_target($source, $entity, $target, $value) { + + // Don't do anything if we weren't given any data. + if (empty($value)) { + return; + } + + // Assume that the passed in value could really be any number of values. + if (is_array($value)) { + $values = $value; + } + else { + $values = array($value); + } + + // Determine the field we are matching against. + if (strpos($target, ':') === FALSE) { + $match_key = 'guid'; + } + else { + list($target, $match_key) = explode(':', $target, 2); + } + + // Get some useful field information. + $info = field_info_field($target); + if ($match_key == 'label') { + $handler = entityreference_get_selection_handler($info); + } + + // Set the language of the field depending on the mapping. + $language = isset($mapping['language']) ? $mapping['language'] : LANGUAGE_NONE; + + // Iterate over all values. + $iterator = 0; + $field = isset($entity->$target) ? $entity->$target : array(); + foreach ($values as $value) { + + // Only process if this value was set for this instance. + if ($value) { + switch ($match_key) { + case 'guid': + case 'url': + // Fetch the entity ID resulting from the mapping table look-up. + $entity_id = db_select('feeds_item', 'fi') + ->fields('fi', array('entity_id')) + ->condition($match_key, $value,'=') + ->execute() + ->fetchField(); + break; + case 'etid': + $entity_id = $value; + break; + case 'label': + $options = $handler->getReferencableEntities($value, '='); + $options = reset($options); + $etids = array_keys($options); + // Use the first matching entity. + $entity_id = reset($etids); + break; + } + /* + * Only add a reference to an existing entity ID if there exists a + * mapping between it and the provided GUID. In cases where no such + * mapping exists (yet), don't do anything here. There may be a mapping + * defined later in the CSV file. If so, and the user re-runs the import + * (as a second pass), we can add this reference then. (The "Update + * existing nodes" option must be selected during the second pass.) + */ + if ($entity_id) { + + // Assign the target ID. + $field[$language][$iterator]['target_id'] = $entity_id; + } + else /* there is no $entity_id, no mapping */ { + + /* + * Feeds stores a hash of every line imported from CSVs in order to + * make the import process more efficient by ignoring lines it's + * already seen. We need to short-circuit this process in this case + * because users may want to re-import the same line as an update later + * when (and if) a map to a reference exists. So in order to provide + * this opportunity later, we need to destroy the hash. + */ + unset($entity->feeds_item->hash); + $source->log('entityreference', t('No existing entity found for entity @source_id entityreference to source entity @value', array('@source_id' => $entity->feeds_item->entity_id, '@value' => $value))); + } + } + + // Break out of the loop if this field is single-valued. + if ($info['cardinality'] == 1) { + break; + } + $iterator++; + } + + // Add the field to the entity definition. + $entity->{$target} = $field; +} diff --git a/sites/all/modules/custom/entityreference/entityreference.info b/sites/all/modules/custom/entityreference/entityreference.info new file mode 100644 index 0000000000..d6348ef5a6 --- /dev/null +++ b/sites/all/modules/custom/entityreference/entityreference.info @@ -0,0 +1,31 @@ +name = Entity Reference +description = Provides a field that can reference other entities. +core = 7.x +package = Fields +dependencies[] = entity +dependencies[] = ctools + +; Migrate handler. +files[] = entityreference.migrate.inc + +; Our plugins interfaces and abstract implementations. +files[] = plugins/selection/abstract.inc +files[] = plugins/selection/views.inc +files[] = plugins/behavior/abstract.inc + +files[] = views/entityreference_plugin_display.inc +files[] = views/entityreference_plugin_style.inc +files[] = views/entityreference_plugin_row_fields.inc + +; Tests. +files[] = tests/entityreference.handlers.test +files[] = tests/entityreference.taxonomy.test +files[] = tests/entityreference.admin.test +files[] = tests/entityreference.feeds.test + +; Information added by packaging script on 2013-11-20 +version = "7.x-1.1" +core = "7.x" +project = "entityreference" +datestamp = "1384973110" + diff --git a/sites/all/modules/custom/entityreference/entityreference.install b/sites/all/modules/custom/entityreference/entityreference.install new file mode 100644 index 0000000000..4e248efd37 --- /dev/null +++ b/sites/all/modules/custom/entityreference/entityreference.install @@ -0,0 +1,164 @@ + array( + 'target_id' => array( + 'description' => 'The id of the target entity.', + 'type' => 'int', + 'unsigned' => TRUE, + 'not null' => TRUE, + ), + ), + 'indexes' => array( + 'target_id' => array('target_id'), + ), + 'foreign keys' => array(), + ); + + // Create a foreign key to the target entity type base type, if available. + $entity_type = $field['settings']['target_type']; + if (isset($base_tables[$entity_type])) { + list($base_table, $id_column) = $base_tables[$entity_type]; + $schema['foreign keys'][$base_table] = array( + 'table' => $base_table, + 'columns' => array('target_id' => $id_column), + ); + } + + // Invoke the behaviors to allow them to change the schema. + foreach (entityreference_get_behavior_handlers($field) as $handler) { + $handler->schema_alter($schema, $field); + } + + return $schema; + } +} + +/** + * Update the field configuration to the new plugin structure. + */ +function entityreference_update_7000() { + // Enable ctools. + if (!module_enable(array('ctools'))) { + throw new DrupalUpdateException('This version of Entity Reference requires ctools, but it could not be enabled.'); + } + + // Get the list of fields of type 'entityreference'. + $fields = array(); + foreach (field_info_fields() as $field_name => $field) { + // Update the field configuration. + if ($field['type'] == 'entityreference') { + $settings = &$field['settings']; + if (!isset($settings['handler'])) { + $settings['handler'] = 'base'; + $settings['handler_settings']['target_bundles'] = $settings['target_bundles']; + unset($settings['target_bundles']); + field_update_field($field); + } + } + + // Update the instance configurations. + foreach ($field['bundles'] as $entity_type => $bundles) { + foreach ($bundles as $bundle) { + $instance = field_info_instance($entity_type, $field_name, $bundle); + $save = FALSE; + if ($instance['widget']['type'] == 'entityreference_autocomplete') { + $instance['widget']['type'] = 'entityreference_autocomplete_tags'; + $save = TRUE; + } + // When the autocomplete path is the default value, remove it from + // the configuration. + if (isset($instance['widget']['settings']['path']) && $instance['widget']['settings']['path'] == 'entityreference/autocomplete') { + unset($instance['widget']['settings']['path']); + $save = TRUE; + } + if ($save) { + field_update_instance($instance); + } + } + } + } +} + +/** + * Drop "target_type" from the field schema. + */ +function entityreference_update_7001() { + if (!module_exists('field_sql_storage')) { + return; + } + foreach (field_info_fields() as $field_name => $field) { + if ($field['type'] != 'entityreference') { + // Not an entity reference field. + continue; + } + + // Update the field settings. + $field = field_info_field($field_name); + unset($field['indexes']['target_entity']); + $field['indexes']['target_id'] = array('target_id'); + field_update_field($field); + + if ($field['storage']['type'] !== 'field_sql_storage') { + // Field doesn't use SQL storage, we cannot modify the schema. + continue; + } + $table_name = _field_sql_storage_tablename($field); + $revision_name = _field_sql_storage_revision_tablename($field); + + db_drop_index($table_name, $field_name . '_target_entity'); + db_drop_index($table_name, $field_name . '_target_id'); + db_drop_field($table_name, $field_name . '_target_type'); + db_add_index($table_name, $field_name . '_target_id', array($field_name . '_target_id')); + + db_drop_index($revision_name, $field_name . '_target_entity'); + db_drop_index($revision_name, $field_name . '_target_id'); + db_drop_field($revision_name, $field_name . '_target_type'); + db_add_index($revision_name, $field_name . '_target_id', array($field_name . '_target_id')); + } +} + +/** + * Make the target_id column NOT NULL. + */ +function entityreference_update_7002() { + if (!module_exists('field_sql_storage')) { + return; + } + foreach (field_info_fields() as $field_name => $field) { + if ($field['type'] != 'entityreference') { + // Not an entity reference field. + continue; + } + + if ($field['storage']['type'] !== 'field_sql_storage') { + // Field doesn't use SQL storage, we cannot modify the schema. + continue; + } + + $table_name = _field_sql_storage_tablename($field); + $revision_name = _field_sql_storage_revision_tablename($field); + + db_change_field($table_name, $field_name . '_target_id', $field_name . '_target_id', array( + 'description' => 'The id of the target entity.', + 'type' => 'int', + 'unsigned' => TRUE, + 'not null' => TRUE, + )); + } +} \ No newline at end of file diff --git a/sites/all/modules/custom/entityreference/entityreference.migrate.inc b/sites/all/modules/custom/entityreference/entityreference.migrate.inc new file mode 100644 index 0000000000..0e95bf0abe --- /dev/null +++ b/sites/all/modules/custom/entityreference/entityreference.migrate.inc @@ -0,0 +1,27 @@ + 2, + 'field handlers' => array('MigrateEntityReferenceFieldHandler'), + ); +} + +class MigrateEntityReferenceFieldHandler extends MigrateSimpleFieldHandler { + public function __construct() { + parent::__construct(array( + 'value_key' => 'target_id', + 'skip_empty' => TRUE, + )); + + $this->registerTypes(array('entityreference')); + } +} diff --git a/sites/all/modules/custom/entityreference/entityreference.module b/sites/all/modules/custom/entityreference/entityreference.module new file mode 100644 index 0000000000..bdcb562937 --- /dev/null +++ b/sites/all/modules/custom/entityreference/entityreference.module @@ -0,0 +1,1294 @@ + array('class'), + ); + $plugins['behavior'] = array( + 'classes' => array('class'), + 'process' => 'entityreference_behavior_plugin_process', + ); + return $plugins; +} + +/** + * CTools callback; Process the behavoir plugins. + */ +function entityreference_behavior_plugin_process(&$plugin, $info) { + $plugin += array( + 'description' => '', + 'behavior type' => 'field', + 'access callback' => FALSE, + 'force enabled' => FALSE, + ); +} + +/** + * Implements hook_field_info(). + */ +function entityreference_field_info() { + $field_info['entityreference'] = array( + 'label' => t('Entity Reference'), + 'description' => t('This field reference another entity.'), + 'settings' => array( + // Default to the core target entity type node. + 'target_type' => 'node', + // The handler for this field. + 'handler' => 'base', + // The handler settings. + 'handler_settings' => array(), + ), + 'instance_settings' => array(), + 'default_widget' => 'entityreference_autocomplete', + 'default_formatter' => 'entityreference_label', + 'property_callbacks' => array('entityreference_field_property_callback'), + ); + return $field_info; +} + +/** + * Implements hook_flush_caches(). + */ +function entityreference_flush_caches() { + // Because of the intricacies of the info hooks, we are forced to keep a + // separate list of the base tables of each entities, so that we can use + // it in entityreference_field_schema() without calling entity_get_info(). + // See http://drupal.org/node/1416558 for details. + $base_tables = array(); + foreach (entity_get_info() as $entity_type => $entity_info) { + if (!empty($entity_info['base table']) && !empty($entity_info['entity keys']['id'])) { + $base_tables[$entity_type] = array($entity_info['base table'], $entity_info['entity keys']['id']); + } + } + // We are using a variable because cache is going to be cleared right after + // hook_flush_caches() is finished. + variable_set('entityreference:base-tables', $base_tables); +} + +/** + * Implements hook_menu(). + */ +function entityreference_menu() { + $items = array(); + + $items['entityreference/autocomplete/single/%/%/%'] = array( + 'title' => 'Entity Reference Autocomplete', + 'page callback' => 'entityreference_autocomplete_callback', + 'page arguments' => array(2, 3, 4, 5), + 'access callback' => 'entityreference_autocomplete_access_callback', + 'access arguments' => array(2, 3, 4, 5), + 'type' => MENU_CALLBACK, + ); + $items['entityreference/autocomplete/tags/%/%/%'] = array( + 'title' => 'Entity Reference Autocomplete', + 'page callback' => 'entityreference_autocomplete_callback', + 'page arguments' => array(2, 3, 4, 5), + 'access callback' => 'entityreference_autocomplete_access_callback', + 'access arguments' => array(2, 3, 4, 5), + 'type' => MENU_CALLBACK, + ); + + return $items; +} + +/** + * Implements hook_field_is_empty(). + */ +function entityreference_field_is_empty($item, $field) { + $empty = !isset($item['target_id']) || !is_numeric($item['target_id']); + + // Invoke the behaviors to allow them to override the empty status. + foreach (entityreference_get_behavior_handlers($field) as $handler) { + $handler->is_empty_alter($empty, $item, $field); + } + return $empty; +} + +/** + * Get the behavior handlers for a given entityreference field. + */ +function entityreference_get_behavior_handlers($field, $instance = NULL) { + $object_cache = drupal_static(__FUNCTION__); + $identifier = $field['field_name']; + if (!empty($instance)) { + $identifier .= ':' . $instance['entity_type'] . ':' . $instance['bundle']; + } + + if (!isset($object_cache[$identifier])) { + $object_cache[$identifier] = array(); + + // Merge in defaults. + $field['settings'] += array('behaviors' => array()); + + $object_cache[$field['field_name']] = array(); + $behaviors = !empty($field['settings']['handler_settings']['behaviors']) ? $field['settings']['handler_settings']['behaviors'] : array(); + if (!empty($instance['settings']['behaviors'])) { + $behaviors = array_merge($behaviors, $instance['settings']['behaviors']); + } + foreach ($behaviors as $behavior => $settings) { + if (empty($settings['status'])) { + // Behavior is not enabled. + continue; + } + + $object_cache[$identifier][] = _entityreference_get_behavior_handler($behavior); + } + } + + return $object_cache[$identifier]; +} + +/** + * Get the behavior handler for a given entityreference field and instance. + * + * @param $handler + * The behavior handler name. + */ +function _entityreference_get_behavior_handler($behavior) { + $object_cache = drupal_static(__FUNCTION__); + + if (!isset($object_cache[$behavior])) { + ctools_include('plugins'); + $class = ctools_plugin_load_class('entityreference', 'behavior', $behavior, 'class'); + + $class = class_exists($class) ? $class : 'EntityReference_BehaviorHandler_Broken'; + $object_cache[$behavior] = new $class($behavior); + } + + return $object_cache[$behavior]; +} + +/** + * Get the selection handler for a given entityreference field. + */ +function entityreference_get_selection_handler($field, $instance = NULL, $entity_type = NULL, $entity = NULL) { + ctools_include('plugins'); + $handler = $field['settings']['handler']; + $class = ctools_plugin_load_class('entityreference', 'selection', $handler, 'class'); + + if (class_exists($class)) { + return call_user_func(array($class, 'getInstance'), $field, $instance, $entity_type, $entity); + } + else { + return EntityReference_SelectionHandler_Broken::getInstance($field, $instance, $entity_type, $entity); + } +} + +/** + * Implements hook_field_load(). + */ +function entityreference_field_load($entity_type, $entities, $field, $instances, $langcode, &$items) { + // Invoke the behaviors. + foreach (entityreference_get_behavior_handlers($field) as $handler) { + $handler->load($entity_type, $entities, $field, $instances, $langcode, $items); + } +} + +/** + * Implements hook_field_validate(). + */ +function entityreference_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) { + $ids = array(); + foreach ($items as $delta => $item) { + if (!entityreference_field_is_empty($item, $field) && $item['target_id'] !== NULL) { + $ids[$item['target_id']] = $delta; + } + } + + if ($ids) { + $valid_ids = entityreference_get_selection_handler($field, $instance, $entity_type, $entity)->validateReferencableEntities(array_keys($ids)); + + $invalid_entities = array_diff_key($ids, array_flip($valid_ids)); + if ($invalid_entities) { + foreach ($invalid_entities as $id => $delta) { + $errors[$field['field_name']][$langcode][$delta][] = array( + 'error' => 'entityreference_invalid_entity', + 'message' => t('The referenced entity (@type: @id) is invalid.', array('@type' => $field['settings']['target_type'], '@id' => $id)), + ); + } + } + } + + // Invoke the behaviors. + foreach (entityreference_get_behavior_handlers($field, $instance) as $handler) { + $handler->validate($entity_type, $entity, $field, $instance, $langcode, $items, $errors); + } +} + +/** + * Implements hook_field_presave(). + * + * Adds the target type to the field data structure when saving. + */ +function entityreference_field_presave($entity_type, $entity, $field, $instance, $langcode, &$items) { + // Invoke the behaviors. + foreach (entityreference_get_behavior_handlers($field, $instance) as $handler) { + $handler->presave($entity_type, $entity, $field, $instance, $langcode, $items); + } +} + +/** + * Implements hook_field_insert(). + */ +function entityreference_field_insert($entity_type, $entity, $field, $instance, $langcode, &$items) { + // Invoke the behaviors. + foreach (entityreference_get_behavior_handlers($field, $instance) as $handler) { + $handler->insert($entity_type, $entity, $field, $instance, $langcode, $items); + } +} + +/** + * Implements hook_field_attach_insert(). + * + * Emulates a post-insert hook. + */ +function entityreference_field_attach_insert($entity_type, $entity) { + list(, , $bundle) = entity_extract_ids($entity_type, $entity); + foreach (field_info_instances($entity_type, $bundle) as $field_name => $instance) { + $field = field_info_field($field_name); + if ($field['type'] == 'entityreference') { + foreach (entityreference_get_behavior_handlers($field, $instance) as $handler) { + $handler->postInsert($entity_type, $entity, $field, $instance); + } + } + } +} + +/** + * Implements hook_field_update(). + */ +function entityreference_field_update($entity_type, $entity, $field, $instance, $langcode, &$items) { + // Invoke the behaviors. + foreach (entityreference_get_behavior_handlers($field, $instance) as $handler) { + $handler->update($entity_type, $entity, $field, $instance, $langcode, $items); + } +} + +/** + * Implements hook_field_attach_update(). + * + * Emulates a post-update hook. + */ +function entityreference_field_attach_update($entity_type, $entity) { + list(, , $bundle) = entity_extract_ids($entity_type, $entity); + foreach (field_info_instances($entity_type, $bundle) as $field_name => $instance) { + $field = field_info_field($field_name); + if ($field['type'] == 'entityreference') { + foreach (entityreference_get_behavior_handlers($field, $instance) as $handler) { + $handler->postUpdate($entity_type, $entity, $field, $instance); + } + } + } +} + +/** + * Implements hook_field_delete(). + */ +function entityreference_field_delete($entity_type, $entity, $field, $instance, $langcode, &$items) { + // Invoke the behaviors. + foreach (entityreference_get_behavior_handlers($field, $instance) as $handler) { + $handler->delete($entity_type, $entity, $field, $instance, $langcode, $items); + } +} + +/** + * Implements hook_field_attach_delete(). + * + * Emulates a post-delete hook. + */ +function entityreference_field_attach_delete($entity_type, $entity) { + list(, , $bundle) = entity_extract_ids($entity_type, $entity); + foreach (field_info_instances($entity_type, $bundle) as $field_name => $instance) { + $field = field_info_field($field_name); + if ($field['type'] == 'entityreference') { + foreach (entityreference_get_behavior_handlers($field, $instance) as $handler) { + $handler->postDelete($entity_type, $entity, $field, $instance); + } + } + } +} + +/** + * Implements hook_entity_insert(). + */ +function entityreference_entity_insert($entity, $entity_type) { + entityreference_entity_crud($entity, $entity_type, 'entityPostInsert'); +} + +/** + * Implements hook_entity_update(). + */ +function entityreference_entity_update($entity, $entity_type) { + entityreference_entity_crud($entity, $entity_type, 'entityPostUpdate'); +} + +/** + * Implements hook_entity_delete(). + */ +function entityreference_entity_delete($entity, $entity_type) { + entityreference_entity_crud($entity, $entity_type, 'entityPostDelete'); +} + +/** + * Invoke a behavior based on entity CRUD. + * + * @param $entity + * The entity object. + * @param $entity_type + * The entity type. + * @param $method_name + * The method to invoke. + */ +function entityreference_entity_crud($entity, $entity_type, $method_name) { + list(, , $bundle) = entity_extract_ids($entity_type, $entity); + foreach (field_info_instances($entity_type, $bundle) as $field_name => $instance) { + $field = field_info_field($field_name); + if ($field['type'] == 'entityreference') { + foreach (entityreference_get_behavior_handlers($field, $instance) as $handler) { + $handler->{$method_name}($entity_type, $entity, $field, $instance); + } + } + } +} + +/** + * Implements hook_field_settings_form(). + */ +function entityreference_field_settings_form($field, $instance, $has_data) { + // The field settings infrastructure is not AJAX enabled by default, + // because it doesn't pass over the $form_state. + // Build the whole form into a #process in which we actually have access + // to the form state. + $form = array( + '#type' => 'container', + '#attached' => array( + 'css' => array(drupal_get_path('module', 'entityreference') . '/entityreference.admin.css'), + ), + '#process' => array( + '_entityreference_field_settings_process', + '_entityreference_field_settings_ajax_process', + ), + '#element_validate' => array('_entityreference_field_settings_validate'), + '#field' => $field, + '#instance' => $instance, + '#has_data' => $has_data, + ); + return $form; +} + +function _entityreference_field_settings_process($form, $form_state) { + $field = isset($form_state['entityreference']['field']) ? $form_state['entityreference']['field'] : $form['#field']; + $instance = isset($form_state['entityreference']['instance']) ? $form_state['entityreference']['instance'] : $form['#instance']; + $has_data = $form['#has_data']; + + $settings = $field['settings']; + $settings += array('handler' => 'base'); + + // Select the target entity type. + $entity_type_options = array(); + foreach (entity_get_info() as $entity_type => $entity_info) { + $entity_type_options[$entity_type] = $entity_info['label']; + } + + $form['target_type'] = array( + '#type' => 'select', + '#title' => t('Target type'), + '#options' => $entity_type_options, + '#default_value' => $field['settings']['target_type'], + '#required' => TRUE, + '#description' => t('The entity type that can be referenced through this field.'), + '#disabled' => $has_data, + '#size' => 1, + '#ajax' => TRUE, + '#limit_validation_errors' => array(), + ); + + ctools_include('plugins'); + $handlers = ctools_get_plugins('entityreference', 'selection'); + uasort($handlers, 'ctools_plugin_sort'); + $handlers_options = array(); + foreach ($handlers as $handler => $handler_info) { + $handlers_options[$handler] = check_plain($handler_info['title']); + } + + $form['handler'] = array( + '#type' => 'fieldset', + '#title' => t('Entity selection'), + '#tree' => TRUE, + '#process' => array('_entityreference_form_process_merge_parent'), + ); + + $form['handler']['handler'] = array( + '#type' => 'select', + '#title' => t('Mode'), + '#options' => $handlers_options, + '#default_value' => $settings['handler'], + '#required' => TRUE, + '#ajax' => TRUE, + '#limit_validation_errors' => array(), + ); + $form['handler_submit'] = array( + '#type' => 'submit', + '#value' => t('Change handler'), + '#limit_validation_errors' => array(), + '#attributes' => array( + 'class' => array('js-hide'), + ), + '#submit' => array('entityreference_settings_ajax_submit'), + ); + + $form['handler']['handler_settings'] = array( + '#type' => 'container', + '#attributes' => array('class' => array('entityreference-settings')), + ); + + $handler = entityreference_get_selection_handler($field, $instance); + $form['handler']['handler_settings'] += $handler->settingsForm($field, $instance); + + _entityreference_get_behavior_elements($form, $field, $instance, 'field'); + if (!empty($form['behaviors'])) { + $form['behaviors'] += array( + '#type' => 'fieldset', + '#title' => t('Additional behaviors'), + '#parents' => array_merge($form['#parents'], array('handler_settings', 'behaviors')), + ); + } + + return $form; +} + +function _entityreference_field_settings_ajax_process($form, $form_state) { + _entityreference_field_settings_ajax_process_element($form, $form); + return $form; +} + +function _entityreference_field_settings_ajax_process_element(&$element, $main_form) { + if (isset($element['#ajax']) && $element['#ajax'] === TRUE) { + $element['#ajax'] = array( + 'callback' => 'entityreference_settings_ajax', + 'wrapper' => $main_form['#id'], + 'element' => $main_form['#array_parents'], + ); + } + + foreach (element_children($element) as $key) { + _entityreference_field_settings_ajax_process_element($element[$key], $main_form); + } +} + +function _entityreference_form_process_merge_parent($element) { + $parents = $element['#parents']; + array_pop($parents); + $element['#parents'] = $parents; + return $element; +} + +function _entityreference_element_validate_filter(&$element, &$form_state) { + $element['#value'] = array_filter($element['#value']); + form_set_value($element, $element['#value'], $form_state); +} + +function _entityreference_field_settings_validate($form, &$form_state) { + // Store the new values in the form state. + $field = $form['#field']; + if (isset($form_state['values']['field'])) { + $field['settings'] = $form_state['values']['field']['settings']; + } + $form_state['entityreference']['field'] = $field; + + unset($form_state['values']['field']['settings']['handler_submit']); +} + +/** + * Implements hook_field_instance_settings_form(). + */ +function entityreference_field_instance_settings_form($field, $instance) { + $form['settings'] = array( + '#type' => 'container', + '#attached' => array( + 'css' => array(drupal_get_path('module', 'entityreference') . '/entityreference.admin.css'), + ), + '#weight' => 10, + '#tree' => TRUE, + '#process' => array( + '_entityreference_form_process_merge_parent', + '_entityreference_field_instance_settings_form', + '_entityreference_field_settings_ajax_process', + ), + '#element_validate' => array('_entityreference_field_instance_settings_validate'), + '#field' => $field, + '#instance' => $instance, + ); + + return $form; +} + +function _entityreference_field_instance_settings_form($form, $form_state) { + $field = isset($form_state['entityreference']['field']) ? $form_state['entityreference']['field'] : $form['#field']; + $instance = isset($form_state['entityreference']['instance']) ? $form_state['entityreference']['instance'] : $form['#instance']; + + _entityreference_get_behavior_elements($form, $field, $instance, 'instance'); + if (!empty($form['behaviors'])) { + $form['behaviors'] += array( + '#type' => 'fieldset', + '#title' => t('Additional behaviors'), + '#process' => array( + '_entityreference_field_settings_ajax_process', + ), + ); + } + return $form; +} + +function _entityreference_field_instance_settings_validate($form, &$form_state) { + // Store the new values in the form state. + $instance = $form['#instance']; + if (isset($form_state['values']['instance'])) { + $instance = drupal_array_merge_deep($instance, $form_state['values']['instance']); + } + $form_state['entityreference']['instance'] = $instance; +} + +/** + * Get the field or instance elements for the field configuration. + */ +function _entityreference_get_behavior_elements(&$element, $field, $instance, $level) { + // Add the accessible behavior handlers. + $behavior_plugins = entityreference_get_accessible_behavior_plugins($field, $instance); + + if ($behavior_plugins[$level]) { + $element['behaviors'] = array(); + + foreach ($behavior_plugins[$level] as $name => $plugin) { + if ($level == 'field') { + $settings = !empty($field['settings']['handler_settings']['behaviors'][$name]) ? $field['settings']['handler_settings']['behaviors'][$name] : array(); + } + else { + $settings = !empty($instance['settings']['behaviors'][$name]) ? $instance['settings']['behaviors'][$name] : array(); + } + $settings += array('status' => $plugin['force enabled']); + + // Render the checkbox. + $element['behaviors'][$name] = array( + '#tree' => TRUE, + ); + $element['behaviors'][$name]['status'] = array( + '#type' => 'checkbox', + '#title' => check_plain($plugin['title']), + '#description' => $plugin['description'], + '#default_value' => $settings['status'], + '#disabled' => $plugin['force enabled'], + '#ajax' => TRUE, + ); + + if ($settings['status']) { + $handler = _entityreference_get_behavior_handler($name); + if ($behavior_elements = $handler->settingsForm($field, $instance)) { + foreach ($behavior_elements as $key => &$behavior_element) { + $behavior_element += array( + '#default_value' => !empty($settings[$key]) ? $settings[$key] : NULL, + ); + } + + // Get the behavior settings. + $behavior_elements += array( + '#type' => 'container', + '#process' => array('_entityreference_form_process_merge_parent'), + '#attributes' => array( + 'class' => array('entityreference-settings'), + ), + ); + $element['behaviors'][$name]['settings'] = $behavior_elements; + } + } + } + } +} + +/** + * Get all accessible behavior plugins. + */ +function entityreference_get_accessible_behavior_plugins($field, $instance) { + ctools_include('plugins'); + $plugins = array('field' => array(), 'instance' => array()); + foreach (ctools_get_plugins('entityreference', 'behavior') as $name => $plugin) { + $handler = _entityreference_get_behavior_handler($name); + $level = $plugin['behavior type']; + if ($handler->access($field, $instance)) { + $plugins[$level][$name] = $plugin; + } + } + return $plugins; +} + +/** + * Ajax callback for the handler settings form. + * + * @see entityreference_field_settings_form() + */ +function entityreference_settings_ajax($form, $form_state) { + $trigger = $form_state['triggering_element']; + return drupal_array_get_nested_value($form, $trigger['#ajax']['element']); +} + +/** + * Submit handler for the non-JS case. + * + * @see entityreference_field_settings_form() + */ +function entityreference_settings_ajax_submit($form, &$form_state) { + $form_state['rebuild'] = TRUE; +} + +/** + * Property callback for the Entity Metadata framework. + */ +function entityreference_field_property_callback(&$info, $entity_type, $field, $instance, $field_type) { + // Set the property type based on the targe type. + $field_type['property_type'] = $field['settings']['target_type']; + + // Then apply the default. + entity_metadata_field_default_property_callback($info, $entity_type, $field, $instance, $field_type); + + // Invoke the behaviors to allow them to change the properties. + foreach (entityreference_get_behavior_handlers($field, $instance) as $handler) { + $handler->property_info_alter($info, $entity_type, $field, $instance, $field_type); + } +} + +/** + * Implements hook_field_widget_info(). + */ +function entityreference_field_widget_info() { + $widgets['entityreference_autocomplete'] = array( + 'label' => t('Autocomplete'), + 'description' => t('An autocomplete text field.'), + 'field types' => array('entityreference'), + 'settings' => array( + 'match_operator' => 'CONTAINS', + 'size' => 60, + // We don't have a default here, because it's not the same between + // the two widgets, and the Field API doesn't update default + // settings when the widget changes. + 'path' => '', + ), + ); + + $widgets['entityreference_autocomplete_tags'] = array( + 'label' => t('Autocomplete (Tags style)'), + 'description' => t('An autocomplete text field.'), + 'field types' => array('entityreference'), + 'settings' => array( + 'match_operator' => 'CONTAINS', + 'size' => 60, + // We don't have a default here, because it's not the same between + // the two widgets, and the Field API doesn't update default + // settings when the widget changes. + 'path' => '', + ), + 'behaviors' => array( + 'multiple values' => FIELD_BEHAVIOR_CUSTOM, + ), + ); + + return $widgets; +} + +/** + * Implements hook_field_widget_info_alter(). + */ +function entityreference_field_widget_info_alter(&$info) { + if (module_exists('options')) { + $info['options_select']['field types'][] = 'entityreference'; + $info['options_buttons']['field types'][] = 'entityreference'; + } +} + +/** + * Implements hook_field_widget_settings_form(). + */ +function entityreference_field_widget_settings_form($field, $instance) { + $widget = $instance['widget']; + $settings = $widget['settings'] + field_info_widget_settings($widget['type']); + + $form = array(); + + if ($widget['type'] == 'entityreference_autocomplete' || $widget['type'] == 'entityreference_autocomplete_tags') { + $form['match_operator'] = array( + '#type' => 'select', + '#title' => t('Autocomplete matching'), + '#default_value' => $settings['match_operator'], + '#options' => array( + 'STARTS_WITH' => t('Starts with'), + 'CONTAINS' => t('Contains'), + ), + '#description' => t('Select the method used to collect autocomplete suggestions. Note that Contains can cause performance issues on sites with thousands of nodes.'), + ); + $form['size'] = array( + '#type' => 'textfield', + '#title' => t('Size of textfield'), + '#default_value' => $settings['size'], + '#element_validate' => array('_element_validate_integer_positive'), + '#required' => TRUE, + ); + } + + return $form; +} + +/** + * Implements hook_options_list(). + */ +function entityreference_options_list($field, $instance = NULL, $entity_type = NULL, $entity = NULL) { + if (!$options = entityreference_get_selection_handler($field, $instance, $entity_type, $entity)->getReferencableEntities()) { + return array(); + } + + // Rebuild the array, by changing the bundle key into the bundle label. + $target_type = $field['settings']['target_type']; + $entity_info = entity_get_info($target_type); + + $return = array(); + foreach ($options as $bundle => $entity_ids) { + $bundle_label = check_plain($entity_info['bundles'][$bundle]['label']); + $return[$bundle_label] = $entity_ids; + } + + return count($return) == 1 ? reset($return) : $return; +} + +/** + * Implements hook_query_TAG_alter(). + */ +function entityreference_query_entityreference_alter(QueryAlterableInterface $query) { + $handler = $query->getMetadata('entityreference_selection_handler'); + $handler->entityFieldQueryAlter($query); +} + +/** + * Implements hook_field_widget_form(). + */ +function entityreference_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + // Ensure that the entity target type exists before displaying the widget. + $entity_info = entity_get_info($field['settings']['target_type']); + if (empty($entity_info)){ + return; + } + $entity_type = $instance['entity_type']; + $entity = isset($element['#entity']) ? $element['#entity'] : NULL; + $handler = entityreference_get_selection_handler($field, $instance, $entity_type, $entity); + + if ($instance['widget']['type'] == 'entityreference_autocomplete' || $instance['widget']['type'] == 'entityreference_autocomplete_tags') { + + if ($instance['widget']['type'] == 'entityreference_autocomplete') { + // We let the Field API handles multiple values for us, only take + // care of the one matching our delta. + if (isset($items[$delta])) { + $items = array($items[$delta]); + } + else { + $items = array(); + } + } + + $entity_ids = array(); + $entity_labels = array(); + + // Build an array of entities ID. + foreach ($items as $item) { + $entity_ids[] = $item['target_id']; + } + + // Load those entities and loop through them to extract their labels. + $entities = entity_load($field['settings']['target_type'], $entity_ids); + + foreach ($entities as $entity_id => $entity_item) { + $label = $handler->getLabel($entity_item); + $key = "$label ($entity_id)"; + // Labels containing commas or quotes must be wrapped in quotes. + if (strpos($key, ',') !== FALSE || strpos($key, '"') !== FALSE) { + $key = '"' . str_replace('"', '""', $key) . '"'; + } + $entity_labels[] = $key; + } + + // Prepare the autocomplete path. + if (!empty($instance['widget']['settings']['path'])) { + $autocomplete_path = $instance['widget']['settings']['path']; + } + else { + $autocomplete_path = $instance['widget']['type'] == 'entityreference_autocomplete' ? 'entityreference/autocomplete/single' : 'entityreference/autocomplete/tags'; + } + + $autocomplete_path .= '/' . $field['field_name'] . '/' . $instance['entity_type'] . '/' . $instance['bundle'] . '/'; + // Use as a placeholder in the URL when we don't have an entity. + // Most webservers collapse two consecutive slashes. + $id = 'NULL'; + if ($entity) { + list($eid) = entity_extract_ids($entity_type, $entity); + if ($eid) { + $id = $eid; + } + } + $autocomplete_path .= $id; + + if ($instance['widget']['type'] == 'entityreference_autocomplete') { + $element += array( + '#type' => 'textfield', + '#maxlength' => 1024, + '#default_value' => implode(', ', $entity_labels), + '#autocomplete_path' => $autocomplete_path, + '#size' => $instance['widget']['settings']['size'], + '#element_validate' => array('_entityreference_autocomplete_validate'), + ); + return array('target_id' => $element); + } + else { + $element += array( + '#type' => 'textfield', + '#maxlength' => 1024, + '#default_value' => implode(', ', $entity_labels), + '#autocomplete_path' => $autocomplete_path, + '#size' => $instance['widget']['settings']['size'], + '#element_validate' => array('_entityreference_autocomplete_tags_validate'), + ); + return $element; + } + } +} + +function _entityreference_autocomplete_validate($element, &$form_state, $form) { + // If a value was entered into the autocomplete... + $value = ''; + if (!empty($element['#value'])) { + // Take "label (entity id)', match the id from parenthesis. + if (preg_match("/.+\((\d+)\)/", $element['#value'], $matches)) { + $value = $matches[1]; + } + else { + // Try to get a match from the input string when the user didn't use the + // autocomplete but filled in a value manually. + $field = field_info_field($element['#field_name']); + $handler = entityreference_get_selection_handler($field); + $field_name = $element['#field_name']; + $field = field_info_field($field_name); + $instance = field_info_instance($element['#entity_type'], $field_name, $element['#bundle']); + $handler = entityreference_get_selection_handler($field, $instance); + $value = $handler->validateAutocompleteInput($element['#value'], $element, $form_state, $form); + } + } + // Update the value of this element so the field can validate the product IDs. + form_set_value($element, $value, $form_state); +} + +function _entityreference_autocomplete_tags_validate($element, &$form_state, $form) { + $value = array(); + // If a value was entered into the autocomplete... + if (!empty($element['#value'])) { + $entities = drupal_explode_tags($element['#value']); + $value = array(); + foreach ($entities as $entity) { + // Take "label (entity id)', match the id from parenthesis. + if (preg_match("/.+\((\d+)\)/", $entity, $matches)) { + $value[] = array( + 'target_id' => $matches[1], + ); + } + else { + // Try to get a match from the input string when the user didn't use the + // autocomplete but filled in a value manually. + $field = field_info_field($element['#field_name']); + $handler = entityreference_get_selection_handler($field); + $value[] = array( + 'target_id' => $handler->validateAutocompleteInput($entity, $element, $form_state, $form), + ); + } + } + } + // Update the value of this element so the field can validate the product IDs. + form_set_value($element, $value, $form_state); +} + +/** + * Implements hook_field_widget_error(). + */ +function entityreference_field_widget_error($element, $error) { + form_error($element, $error['message']); +} + +/** + * Menu Access callback for the autocomplete widget. + * + * @param $type + * The widget type (i.e. 'single' or 'tags'). + * @param $field_name + * The name of the entity-reference field. + * @param $entity_type + * The entity type. + * @param $bundle_name + * The bundle name. + * @return + * True if user can access this menu item. + */ +function entityreference_autocomplete_access_callback($type, $field_name, $entity_type, $bundle_name) { + $field = field_info_field($field_name); + $instance = field_info_instance($entity_type, $field_name, $bundle_name); + + if (!$field || !$instance || $field['type'] != 'entityreference' || !field_access('edit', $field, $entity_type)) { + return FALSE; + } + return TRUE; +} + +/** + * Menu callback: autocomplete the label of an entity. + * + * @param $type + * The widget type (i.e. 'single' or 'tags'). + * @param $field_name + * The name of the entity-reference field. + * @param $entity_type + * The entity type. + * @param $bundle_name + * The bundle name. + * @param $entity_id + * Optional; The entity ID the entity-reference field is attached to. + * Defaults to ''. + * @param $string + * The label of the entity to query by. + */ +function entityreference_autocomplete_callback($type, $field_name, $entity_type, $bundle_name, $entity_id = '', $string = '') { + // If the request has a '/' in the search text, then the menu system will have + // split it into multiple arguments and $string will only be a partial. We want + // to make sure we recover the intended $string. + $args = func_get_args(); + // Shift off the $type, $field_name, $entity_type, $bundle_name, and $entity_id args. + array_shift($args); + array_shift($args); + array_shift($args); + array_shift($args); + array_shift($args); + $string = implode('/', $args); + + $field = field_info_field($field_name); + $instance = field_info_instance($entity_type, $field_name, $bundle_name); + + return entityreference_autocomplete_callback_get_matches($type, $field, $instance, $entity_type, $entity_id, $string); +} + +/** + * Return JSON based on given field, instance and string. + * + * This function can be used by other modules that wish to pass a mocked + * definition of the field on instance. + * + * @param $type + * The widget type (i.e. 'single' or 'tags'). + * @param $field + * The field array defintion. + * @param $instance + * The instance array defintion. + * @param $entity_type + * The entity type. + * @param $entity_id + * Optional; The entity ID the entity-reference field is attached to. + * Defaults to ''. + * @param $string + * The label of the entity to query by. + */ +function entityreference_autocomplete_callback_get_matches($type, $field, $instance, $entity_type, $entity_id = '', $string = '') { + $matches = array(); + + $entity = NULL; + if ($entity_id !== 'NULL') { + $entity = entity_load_single($entity_type, $entity_id); + $has_view_access = (entity_access('view', $entity_type, $entity) !== FALSE); + $has_update_access = (entity_access('update', $entity_type, $entity) !== FALSE); + if (!$entity || !($has_view_access || $has_update_access)) { + return MENU_ACCESS_DENIED; + } + } + + $handler = entityreference_get_selection_handler($field, $instance, $entity_type, $entity); + + if ($type == 'tags') { + // The user enters a comma-separated list of tags. We only autocomplete the last tag. + $tags_typed = drupal_explode_tags($string); + $tag_last = drupal_strtolower(array_pop($tags_typed)); + if (!empty($tag_last)) { + $prefix = count($tags_typed) ? implode(', ', $tags_typed) . ', ' : ''; + } + } + else { + // The user enters a single tag. + $prefix = ''; + $tag_last = $string; + } + + if (isset($tag_last)) { + // Get an array of matching entities. + $entity_labels = $handler->getReferencableEntities($tag_last, $instance['widget']['settings']['match_operator'], 10); + + // Loop through the products and convert them into autocomplete output. + foreach ($entity_labels as $values) { + foreach ($values as $entity_id => $label) { + $key = "$label ($entity_id)"; + // Strip things like starting/trailing white spaces, line breaks and tags. + $key = preg_replace('/\s\s+/', ' ', str_replace("\n", '', trim(decode_entities(strip_tags($key))))); + // Names containing commas or quotes must be wrapped in quotes. + if (strpos($key, ',') !== FALSE || strpos($key, '"') !== FALSE) { + $key = '"' . str_replace('"', '""', $key) . '"'; + } + $matches[$prefix . $key] = '
    ' . $label . '
    '; + } + } + } + + drupal_json_output($matches); +} + +/** + * Implements hook_field_formatter_info(). + */ +function entityreference_field_formatter_info() { + return array( + 'entityreference_label' => array( + 'label' => t('Label'), + 'description' => t('Display the label of the referenced entities.'), + 'field types' => array('entityreference'), + 'settings' => array( + 'link' => FALSE, + ), + ), + 'entityreference_entity_id' => array( + 'label' => t('Entity id'), + 'description' => t('Display the id of the referenced entities.'), + 'field types' => array('entityreference'), + ), + 'entityreference_entity_view' => array( + 'label' => t('Rendered entity'), + 'description' => t('Display the referenced entities rendered by entity_view().'), + 'field types' => array('entityreference'), + 'settings' => array( + 'view_mode' => 'default', + 'links' => TRUE, + ), + ), + ); +} + +/** + * Implements hook_field_formatter_settings_form(). + */ +function entityreference_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) { + $display = $instance['display'][$view_mode]; + $settings = $display['settings']; + + if ($display['type'] == 'entityreference_label') { + $element['link'] = array( + '#title' => t('Link label to the referenced entity'), + '#type' => 'checkbox', + '#default_value' => $settings['link'], + ); + } + + if ($display['type'] == 'entityreference_entity_view') { + $entity_info = entity_get_info($field['settings']['target_type']); + $options = array('default' => t('Default')); + if (!empty($entity_info['view modes'])) { + foreach ($entity_info['view modes'] as $view_mode => $view_mode_settings) { + $options[$view_mode] = $view_mode_settings['label']; + } + } + + $element['view_mode'] = array( + '#type' => 'select', + '#options' => $options, + '#title' => t('View mode'), + '#default_value' => $settings['view_mode'], + '#access' => count($options) > 1, + ); + + $element['links'] = array( + '#type' => 'checkbox', + '#title' => t('Show links'), + '#default_value' => $settings['links'], + ); + } + + return $element; +} + +/** + * Implements hook_field_formatter_settings_summary(). + */ +function entityreference_field_formatter_settings_summary($field, $instance, $view_mode) { + $display = $instance['display'][$view_mode]; + $settings = $display['settings']; + + $summary = array(); + + if ($display['type'] == 'entityreference_label') { + $summary[] = $settings['link'] ? t('Link to the referenced entity') : t('No link'); + } + + if ($display['type'] == 'entityreference_entity_view') { + $entity_info = entity_get_info($field['settings']['target_type']); + $view_mode_label = $settings['view_mode'] == 'default' ? t('Default') : $settings['view_mode']; + if (isset($entity_info['view modes'][$settings['view_mode']]['label'])) { + $view_mode_label = $entity_info['view modes'][$settings['view_mode']]['label']; + } + $summary[] = t('Rendered as @mode', array('@mode' => $view_mode_label)); + $summary[] = !empty($settings['links']) ? t('Display links') : t('Do not display links'); + } + + return implode('
    ', $summary); +} + +/** + * Implements hook_field_formatter_prepare_view(). + */ +function entityreference_field_formatter_prepare_view($entity_type, $entities, $field, $instances, $langcode, &$items, $displays) { + $target_ids = array(); + + // Collect every possible entity attached to any of the entities. + foreach ($entities as $id => $entity) { + foreach ($items[$id] as $delta => $item) { + if (isset($item['target_id'])) { + $target_ids[] = $item['target_id']; + } + } + } + + if ($target_ids) { + $target_entities = entity_load($field['settings']['target_type'], $target_ids); + } + else { + $target_entities = array(); + } + + // Iterate through the fieldable entities again to attach the loaded data. + foreach ($entities as $id => $entity) { + $rekey = FALSE; + + foreach ($items[$id] as $delta => $item) { + // Check whether the referenced entity could be loaded. + if (isset($target_entities[$item['target_id']])) { + // Replace the instance value with the term data. + $items[$id][$delta]['entity'] = $target_entities[$item['target_id']]; + // Check whether the user has access to the referenced entity. + $has_view_access = (entity_access('view', $field['settings']['target_type'], $target_entities[$item['target_id']]) !== FALSE); + $has_update_access = (entity_access('update', $field['settings']['target_type'], $target_entities[$item['target_id']]) !== FALSE); + $items[$id][$delta]['access'] = ($has_view_access || $has_update_access); + } + // Otherwise, unset the instance value, since the entity does not exist. + else { + unset($items[$id][$delta]); + $rekey = TRUE; + } + } + + if ($rekey) { + // Rekey the items array. + $items[$id] = array_values($items[$id]); + } + } +} + +/** + * Implements hook_field_formatter_view(). + */ +function entityreference_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) { + $result = array(); + $settings = $display['settings']; + + // Rebuild the items list to contain only those with access. + foreach ($items as $key => $item) { + if (empty($item['access'])) { + unset($items[$key]); + } + } + + switch ($display['type']) { + case 'entityreference_label': + $handler = entityreference_get_selection_handler($field, $instance, $entity_type, $entity); + + foreach ($items as $delta => $item) { + $label = $handler->getLabel($item['entity']); + // If the link is to be displayed and the entity has a uri, display a link. + // Note the assignment ($url = ) here is intended to be an assignment. + if ($display['settings']['link'] && ($uri = entity_uri($field['settings']['target_type'], $item['entity']))) { + $result[$delta] = array('#markup' => l($label, $uri['path'], $uri['options'])); + } + else { + $result[$delta] = array('#markup' => check_plain($label)); + } + } + break; + + case 'entityreference_entity_id': + foreach ($items as $delta => $item) { + $result[$delta] = array('#markup' => check_plain($item['target_id'])); + } + break; + + case 'entityreference_entity_view': + foreach ($items as $delta => $item) { + // Protect ourselves from recursive rendering. + static $depth = 0; + $depth++; + if ($depth > 20) { + throw new EntityReferenceRecursiveRenderingException(t('Recursive rendering detected when rendering entity @entity_type(@entity_id). Aborting rendering.', array('@entity_type' => $entity_type, '@entity_id' => $item['target_id']))); + } + + $entity = clone $item['entity']; + unset($entity->content); + $result[$delta] = entity_view($field['settings']['target_type'], array($item['target_id'] => $entity), $settings['view_mode'], $langcode, FALSE); + + if (empty($settings['links']) && isset($result[$delta][$field['settings']['target_type']][$item['target_id']]['links'])) { + $result[$delta][$field['settings']['target_type']][$item['target_id']]['links']['#access'] = FALSE; + } + $depth = 0; + } + break; + } + + return $result; +} + +/** + * Exception thrown when the entity view renderer goes into a potentially infinite loop. + */ +class EntityReferenceRecursiveRenderingException extends Exception {} + +/** + * Implements hook_views_api(). + */ +function entityreference_views_api() { + return array( + 'api' => 3, + 'path' => drupal_get_path('module', 'entityreference') . '/views', + ); +} diff --git a/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.info b/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.info new file mode 100644 index 0000000000..88ad7b5de4 --- /dev/null +++ b/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.info @@ -0,0 +1,12 @@ +name = Entity Reference Behavior Example +description = Provides some example code for implementing Entity Reference behaviors. +core = 7.x +package = Fields +dependencies[] = entityreference + +; Information added by packaging script on 2013-11-20 +version = "7.x-1.1" +core = "7.x" +project = "entityreference" +datestamp = "1384973110" + diff --git a/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.module b/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.module new file mode 100644 index 0000000000..9d6c6f8fb9 --- /dev/null +++ b/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.module @@ -0,0 +1,15 @@ + 'checkbox', + '#title' => t('Field behavior setting'), + ); + return $form; + } +} diff --git a/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceInstanceBehaviorExample.class.php b/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceInstanceBehaviorExample.class.php new file mode 100644 index 0000000000..c09ab43496 --- /dev/null +++ b/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceInstanceBehaviorExample.class.php @@ -0,0 +1,31 @@ + 'checkbox', + '#title' => t('Instance behavior setting'), + ); + return $form; + } +} \ No newline at end of file diff --git a/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_field_behavior.inc b/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_field_behavior.inc new file mode 100644 index 0000000000..590087bcbe --- /dev/null +++ b/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_field_behavior.inc @@ -0,0 +1,8 @@ + t('Test behavior'), + 'class' => 'EntityReferenceFieldBehaviorExample', + 'weight' => 10, + 'behavior type' => 'field', +); diff --git a/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_instance_behavior.inc b/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_instance_behavior.inc new file mode 100644 index 0000000000..41173fea30 --- /dev/null +++ b/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_instance_behavior.inc @@ -0,0 +1,8 @@ + t('Test instance behavior'), + 'class' => 'EntityReferenceInstanceBehaviorExample', + 'weight' => 10, + 'behavior type' => 'instance', +); diff --git a/sites/all/modules/custom/entityreference/plugins/behavior/EntityReferenceBehavior_TaxonomyIndex.class.php b/sites/all/modules/custom/entityreference/plugins/behavior/EntityReferenceBehavior_TaxonomyIndex.class.php new file mode 100644 index 0000000000..43ac693f21 --- /dev/null +++ b/sites/all/modules/custom/entityreference/plugins/behavior/EntityReferenceBehavior_TaxonomyIndex.class.php @@ -0,0 +1,189 @@ +buildNodeIndex($entity); + } + + /** + * Overrides EntityReference_BehaviorHandler_Abstract::entityPostUpdate(). + * + * Runs after hook_node_update() used by taxonomy module. + */ + public function entityPostUpdate($entity_type, $entity, $field, $instance) { + if ($entity_type != 'node') { + return; + } + + $this->buildNodeIndex($entity); + } + + /** + * Builds and inserts taxonomy index entries for a given node. + * + * The index lists all terms that are related to a given node entity, and is + * therefore maintained at the entity level. + * + * @param $node + * The node object. + * + * @see taxonomy_build_node_index() + */ + protected function buildNodeIndex($node) { + // We maintain a denormalized table of term/node relationships, containing + // only data for current, published nodes. + $status = NULL; + if (variable_get('taxonomy_maintain_index_table', TRUE)) { + // If a node property is not set in the node object when node_save() is + // called, the old value from $node->original is used. + if (!empty($node->original)) { + $status = (int)(!empty($node->status) || (!isset($node->status) && !empty($node->original->status))); + $sticky = (int)(!empty($node->sticky) || (!isset($node->sticky) && !empty($node->original->sticky))); + } + else { + $status = (int)(!empty($node->status)); + $sticky = (int)(!empty($node->sticky)); + } + } + // We only maintain the taxonomy index for published nodes. + if ($status) { + // Collect a unique list of all the term IDs from all node fields. + $tid_all = array(); + foreach (field_info_instances('node', $node->type) as $instance) { + $field_name = $instance['field_name']; + $field = field_info_field($field_name); + if (!empty($field['settings']['target_type']) && $field['settings']['target_type'] == 'taxonomy_term' && $field['storage']['type'] == 'field_sql_storage') { + // If a field value is not set in the node object when node_save() is + // called, the old value from $node->original is used. + if (isset($node->{$field_name})) { + $items = $node->{$field_name}; + } + elseif (isset($node->original->{$field_name})) { + $items = $node->original->{$field_name}; + } + else { + continue; + } + foreach (field_available_languages('node', $field) as $langcode) { + if (!empty($items[$langcode])) { + foreach ($items[$langcode] as $item) { + $tid_all[$item['target_id']] = $item['target_id']; + } + } + } + } + + // Re-calculate the terms added in taxonomy_build_node_index() so + // we can optimize database queries. + $original_tid_all = array(); + if ($field['module'] == 'taxonomy' && $field['storage']['type'] == 'field_sql_storage') { + // If a field value is not set in the node object when node_save() is + // called, the old value from $node->original is used. + if (isset($node->{$field_name})) { + $items = $node->{$field_name}; + } + elseif (isset($node->original->{$field_name})) { + $items = $node->original->{$field_name}; + } + else { + continue; + } + foreach (field_available_languages('node', $field) as $langcode) { + if (!empty($items[$langcode])) { + foreach ($items[$langcode] as $item) { + $original_tid_all[$item['tid']] = $item['tid']; + } + } + } + } + } + + // Insert index entries for all the node's terms, that were not + // already inserted in taxonomy_build_node_index(). + $tid_all = array_diff($tid_all, $original_tid_all); + + // Insert index entries for all the node's terms. + if (!empty($tid_all)) { + $query = db_insert('taxonomy_index')->fields(array('nid', 'tid', 'sticky', 'created')); + foreach ($tid_all as $tid) { + $query->values(array( + 'nid' => $node->nid, + 'tid' => $tid, + 'sticky' => $sticky, + 'created' => $node->created, + )); + } + $query->execute(); + } + } + } + + /** + * Overrides EntityReference_BehaviorHandler_Abstract::settingsForm(). + */ + public function settingsForm($field, $instance) { + $form = array(); + $target = $field['settings']['target_type']; + if ($target != 'taxonomy_term') { + $form['ti-on-terms'] = array( + '#markup' => t('This behavior can only be set when the target type is taxonomy_term, but the target of this field is %target.', array('%target' => $target)), + ); + } + + $entity_type = $instance['entity_type']; + if ($entity_type != 'node') { + $form['ti-on-nodes'] = array( + '#markup' => t('This behavior can only be set when the entity type is node, but the entity type of this instance is %type.', array('%type' => $entity_type)), + ); + } + + if (!variable_get('taxonomy_maintain_index_table', TRUE)) { + $form['ti-disabled'] = array( + '#markup' => t('This core variable "taxonomy_maintain_index_table" is disabled.'), + ); + } + return $form; + } +} diff --git a/sites/all/modules/custom/entityreference/plugins/behavior/EntityReferenceBehavior_ViewsFilterSelect.class.php b/sites/all/modules/custom/entityreference/plugins/behavior/EntityReferenceBehavior_ViewsFilterSelect.class.php new file mode 100644 index 0000000000..de3187cb0f --- /dev/null +++ b/sites/all/modules/custom/entityreference/plugins/behavior/EntityReferenceBehavior_ViewsFilterSelect.class.php @@ -0,0 +1,18 @@ + &$table_data) { + if (isset($table_data[$field_name])) { + // Set the entity id filter to use the in_operator handler with our + // own callback to return the values. + $table_data[$field_name]['filter']['handler'] = 'views_handler_filter_in_operator'; + $table_data[$field_name]['filter']['options callback'] = 'entityreference_views_handler_options_list'; + $table_data[$field_name]['filter']['options arguments'] = array($field['field_name']); + } + } + } +} diff --git a/sites/all/modules/custom/entityreference/plugins/behavior/abstract.inc b/sites/all/modules/custom/entityreference/plugins/behavior/abstract.inc new file mode 100644 index 0000000000..de827bc0e6 --- /dev/null +++ b/sites/all/modules/custom/entityreference/plugins/behavior/abstract.inc @@ -0,0 +1,214 @@ +behavior = $behavior; + + ctools_include('plugins'); + $plugin = ctools_get_plugins('entityreference', 'behavior', $behavior); + $this->plugin = $plugin; + } + + public function schema_alter(&$schema, $field) {} + + public function property_info_alter(&$info, $entity_type, $field, $instance, $field_type) {} + + public function views_data_alter(&$data, $field) {} + + public function load($entity_type, $entities, $field, $instances, $langcode, &$items) {} + + public function is_empty_alter(&$empty, $item, $field) {} + + public function validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) {} + + public function presave($entity_type, $entity, $field, $instance, $langcode, &$items) {} + + public function insert($entity_type, $entity, $field, $instance, $langcode, &$items) {} + + public function postInsert($entity_type, $entity, $field, $instance) {} + + public function update($entity_type, $entity, $field, $instance, $langcode, &$items) {} + + public function postUpdate($entity_type, $entity, $field, $instance) {} + + public function delete($entity_type, $entity, $field, $instance, $langcode, &$items) {} + + public function postDelete($entity_type, $entity, $field, $instance) {} + + public function entityPostInsert($entity_type, $entity, $field, $instance) {} + + public function entityPostUpdate($entity_type, $entity, $field, $instance) {} + + public function entityPostDelete($entity_type, $entity, $field, $instance) {} + + public function settingsForm($field, $instance) {} + + public function access($field, $instance) { + return TRUE; + } +} + +/** + * A broken implementation of EntityReference_BehaviorHandler. + */ +class EntityReference_BehaviorHandler_Broken extends EntityReference_BehaviorHandler_Abstract { + public function settingsForm($field, $instance) { + $form['behavior_handler'] = array( + '#markup' => t('The selected behavior handler is broken.'), + ); + return $form; + } +} diff --git a/sites/all/modules/custom/entityreference/plugins/behavior/taxonomy-index.inc b/sites/all/modules/custom/entityreference/plugins/behavior/taxonomy-index.inc new file mode 100644 index 0000000000..1a29d6e55a --- /dev/null +++ b/sites/all/modules/custom/entityreference/plugins/behavior/taxonomy-index.inc @@ -0,0 +1,16 @@ + t('Taxonomy index'), + 'description' => t('Include the term references created by instances of this field carried by node entities in the core {taxonomy_index} table. This will allow various modules to handle them like core term_reference fields.'), + 'class' => 'EntityReferenceBehavior_TaxonomyIndex', + 'behavior type' => 'instance', + 'force enabled' => TRUE, + ); +} diff --git a/sites/all/modules/custom/entityreference/plugins/behavior/views-select-list.inc b/sites/all/modules/custom/entityreference/plugins/behavior/views-select-list.inc new file mode 100644 index 0000000000..f1ffd35983 --- /dev/null +++ b/sites/all/modules/custom/entityreference/plugins/behavior/views-select-list.inc @@ -0,0 +1,10 @@ + t('Render Views filters as select list'), + 'description' => t('Provides a select list for Views filters on this field. This should not be used when there are over 100 entities, as it might cause an out of memory error.'), + 'class' => 'EntityReferenceBehavior_ViewsFilterSelect', + 'behavior type' => 'field', + ); +} diff --git a/sites/all/modules/custom/entityreference/plugins/selection/EntityReference_SelectionHandler_Generic.class.php b/sites/all/modules/custom/entityreference/plugins/selection/EntityReference_SelectionHandler_Generic.class.php new file mode 100644 index 0000000000..444a74ccf7 --- /dev/null +++ b/sites/all/modules/custom/entityreference/plugins/selection/EntityReference_SelectionHandler_Generic.class.php @@ -0,0 +1,554 @@ +field = $field; + $this->instance = $instance; + $this->entity_type = $entity_type; + $this->entity = $entity; + } + + /** + * Implements EntityReferenceHandler::settingsForm(). + */ + public static function settingsForm($field, $instance) { + $entity_info = entity_get_info($field['settings']['target_type']); + + // Merge-in default values. + $field['settings']['handler_settings'] += array( + 'target_bundles' => array(), + 'sort' => array( + 'type' => 'none', + ) + ); + + if (!empty($entity_info['entity keys']['bundle'])) { + $bundles = array(); + foreach ($entity_info['bundles'] as $bundle_name => $bundle_info) { + $bundles[$bundle_name] = $bundle_info['label']; + } + + $form['target_bundles'] = array( + '#type' => 'checkboxes', + '#title' => t('Target bundles'), + '#options' => $bundles, + '#default_value' => $field['settings']['handler_settings']['target_bundles'], + '#size' => 6, + '#multiple' => TRUE, + '#description' => t('The bundles of the entity type that can be referenced. Optional, leave empty for all bundles.'), + '#element_validate' => array('_entityreference_element_validate_filter'), + ); + } + else { + $form['target_bundles'] = array( + '#type' => 'value', + '#value' => array(), + ); + } + + $form['sort']['type'] = array( + '#type' => 'select', + '#title' => t('Sort by'), + '#options' => array( + 'none' => t("Don't sort"), + 'property' => t('A property of the base table of the entity'), + 'field' => t('A field attached to this entity'), + ), + '#ajax' => TRUE, + '#limit_validation_errors' => array(), + '#default_value' => $field['settings']['handler_settings']['sort']['type'], + ); + + $form['sort']['settings'] = array( + '#type' => 'container', + '#attributes' => array('class' => array('entityreference-settings')), + '#process' => array('_entityreference_form_process_merge_parent'), + ); + + if ($field['settings']['handler_settings']['sort']['type'] == 'property') { + // Merge-in default values. + $field['settings']['handler_settings']['sort'] += array( + 'property' => NULL, + ); + + $form['sort']['settings']['property'] = array( + '#type' => 'select', + '#title' => t('Sort property'), + '#required' => TRUE, + '#options' => drupal_map_assoc($entity_info['schema_fields_sql']['base table']), + '#default_value' => $field['settings']['handler_settings']['sort']['property'], + ); + } + elseif ($field['settings']['handler_settings']['sort']['type'] == 'field') { + // Merge-in default values. + $field['settings']['handler_settings']['sort'] += array( + 'field' => NULL, + ); + + $fields = array(); + foreach (field_info_instances($field['settings']['target_type']) as $bundle_name => $bundle_instances) { + foreach ($bundle_instances as $instance_name => $instance_info) { + $field_info = field_info_field($instance_name); + foreach ($field_info['columns'] as $column_name => $column_info) { + $fields[$instance_name . ':' . $column_name] = t('@label (column @column)', array('@label' => $instance_info['label'], '@column' => $column_name)); + } + } + } + + $form['sort']['settings']['field'] = array( + '#type' => 'select', + '#title' => t('Sort field'), + '#required' => TRUE, + '#options' => $fields, + '#default_value' => $field['settings']['handler_settings']['sort']['field'], + ); + } + + if ($field['settings']['handler_settings']['sort']['type'] != 'none') { + // Merge-in default values. + $field['settings']['handler_settings']['sort'] += array( + 'direction' => 'ASC', + ); + + $form['sort']['settings']['direction'] = array( + '#type' => 'select', + '#title' => t('Sort direction'), + '#required' => TRUE, + '#options' => array( + 'ASC' => t('Ascending'), + 'DESC' => t('Descending'), + ), + '#default_value' => $field['settings']['handler_settings']['sort']['direction'], + ); + } + + return $form; + } + + /** + * Implements EntityReferenceHandler::getReferencableEntities(). + */ + public function getReferencableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) { + $options = array(); + $entity_type = $this->field['settings']['target_type']; + + $query = $this->buildEntityFieldQuery($match, $match_operator); + if ($limit > 0) { + $query->range(0, $limit); + } + + $results = $query->execute(); + + if (!empty($results[$entity_type])) { + $entities = entity_load($entity_type, array_keys($results[$entity_type])); + foreach ($entities as $entity_id => $entity) { + list(,, $bundle) = entity_extract_ids($entity_type, $entity); + $options[$bundle][$entity_id] = check_plain($this->getLabel($entity)); + } + } + + return $options; + } + + /** + * Implements EntityReferenceHandler::countReferencableEntities(). + */ + public function countReferencableEntities($match = NULL, $match_operator = 'CONTAINS') { + $query = $this->buildEntityFieldQuery($match, $match_operator); + return $query + ->count() + ->execute(); + } + + /** + * Implements EntityReferenceHandler::validateReferencableEntities(). + */ + public function validateReferencableEntities(array $ids) { + if ($ids) { + $entity_type = $this->field['settings']['target_type']; + $query = $this->buildEntityFieldQuery(); + $query->entityCondition('entity_id', $ids, 'IN'); + $result = $query->execute(); + if (!empty($result[$entity_type])) { + return array_keys($result[$entity_type]); + } + } + + return array(); + } + + /** + * Implements EntityReferenceHandler::validateAutocompleteInput(). + */ + public function validateAutocompleteInput($input, &$element, &$form_state, $form) { + $entities = $this->getReferencableEntities($input, '=', 6); + if (empty($entities)) { + // Error if there are no entities available for a required field. + form_error($element, t('There are no entities matching "%value"', array('%value' => $input))); + } + elseif (count($entities) > 5) { + // Error if there are more than 5 matching entities. + form_error($element, t('Many entities are called %value. Specify the one you want by appending the id in parentheses, like "@value (@id)"', array( + '%value' => $input, + '@value' => $input, + '@id' => key($entities), + ))); + } + elseif (count($entities) > 1) { + // More helpful error if there are only a few matching entities. + $multiples = array(); + foreach ($entities as $id => $name) { + $multiples[] = $name . ' (' . $id . ')'; + } + form_error($element, t('Multiple entities match this reference; "%multiple"', array('%multiple' => implode('", "', $multiples)))); + } + else { + // Take the one and only matching entity. + return key($entities); + } + } + + /** + * Build an EntityFieldQuery to get referencable entities. + */ + protected function buildEntityFieldQuery($match = NULL, $match_operator = 'CONTAINS') { + $query = new EntityFieldQuery(); + $query->entityCondition('entity_type', $this->field['settings']['target_type']); + if (!empty($this->field['settings']['handler_settings']['target_bundles'])) { + $query->entityCondition('bundle', $this->field['settings']['handler_settings']['target_bundles'], 'IN'); + } + if (isset($match)) { + $entity_info = entity_get_info($this->field['settings']['target_type']); + if (isset($entity_info['entity keys']['label'])) { + $query->propertyCondition($entity_info['entity keys']['label'], $match, $match_operator); + } + } + + // Add a generic entity access tag to the query. + $query->addTag($this->field['settings']['target_type'] . '_access'); + $query->addTag('entityreference'); + $query->addMetaData('field', $this->field); + $query->addMetaData('entityreference_selection_handler', $this); + + // Add the sort option. + if (!empty($this->field['settings']['handler_settings']['sort'])) { + $sort_settings = $this->field['settings']['handler_settings']['sort']; + if ($sort_settings['type'] == 'property') { + $query->propertyOrderBy($sort_settings['property'], $sort_settings['direction']); + } + elseif ($sort_settings['type'] == 'field') { + list($field, $column) = explode(':', $sort_settings['field'], 2); + $query->fieldOrderBy($field, $column, $sort_settings['direction']); + } + } + + return $query; + } + + /** + * Implements EntityReferenceHandler::entityFieldQueryAlter(). + */ + public function entityFieldQueryAlter(SelectQueryInterface $query) { + + } + + /** + * Helper method: pass a query to the alteration system again. + * + * This allow Entity Reference to add a tag to an existing query, to ask + * access control mechanisms to alter it again. + */ + protected function reAlterQuery(SelectQueryInterface $query, $tag, $base_table) { + // Save the old tags and metadata. + // For some reason, those are public. + $old_tags = $query->alterTags; + $old_metadata = $query->alterMetaData; + + $query->alterTags = array($tag => TRUE); + $query->alterMetaData['base_table'] = $base_table; + drupal_alter(array('query', 'query_' . $tag), $query); + + // Restore the tags and metadata. + $query->alterTags = $old_tags; + $query->alterMetaData = $old_metadata; + } + + /** + * Implements EntityReferenceHandler::getLabel(). + */ + public function getLabel($entity) { + $target_type = $this->field['settings']['target_type']; + return entity_access('view', $target_type, $entity) ? entity_label($target_type, $entity) : t('- Restricted access -'); + } + + /** + * Ensure a base table exists for the query. + * + * If we have a field-only query, we want to assure we have a base-table + * so we can later alter the query in entityFieldQueryAlter(). + * + * @param $query + * The Select query. + * + * @return + * The alias of the base-table. + */ + public function ensureBaseTable(SelectQueryInterface $query) { + $tables = $query->getTables(); + + // Check the current base table. + foreach ($tables as $table) { + if (empty($table['join'])) { + $alias = $table['alias']; + break; + } + } + + if (strpos($alias, 'field_data_') !== 0) { + // The existing base-table is the correct one. + return $alias; + } + + // Join the known base-table. + $target_type = $this->field['settings']['target_type']; + $entity_info = entity_get_info($target_type); + $id = $entity_info['entity keys']['id']; + // Return the alias of the table. + return $query->innerJoin($target_type, NULL, "%alias.$id = $alias.entity_id"); + } +} + +/** + * Override for the Node type. + * + * This only exists to workaround core bugs. + */ +class EntityReference_SelectionHandler_Generic_node extends EntityReference_SelectionHandler_Generic { + public function entityFieldQueryAlter(SelectQueryInterface $query) { + // Adding the 'node_access' tag is sadly insufficient for nodes: core + // requires us to also know about the concept of 'published' and + // 'unpublished'. We need to do that as long as there are no access control + // modules in use on the site. As long as one access control module is there, + // it is supposed to handle this check. + if (!user_access('bypass node access') && !count(module_implements('node_grants'))) { + $base_table = $this->ensureBaseTable($query); + $query->condition("$base_table.status", NODE_PUBLISHED); + } + } +} + +/** + * Override for the User type. + * + * This only exists to workaround core bugs. + */ +class EntityReference_SelectionHandler_Generic_user extends EntityReference_SelectionHandler_Generic { + public function buildEntityFieldQuery($match = NULL, $match_operator = 'CONTAINS') { + $query = parent::buildEntityFieldQuery($match, $match_operator); + + // The user entity doesn't have a label column. + if (isset($match)) { + $query->propertyCondition('name', $match, $match_operator); + } + + // Adding the 'user_access' tag is sadly insufficient for users: core + // requires us to also know about the concept of 'blocked' and + // 'active'. + if (!user_access('administer users')) { + $query->propertyCondition('status', 1); + } + return $query; + } + + public function entityFieldQueryAlter(SelectQueryInterface $query) { + if (user_access('administer users')) { + // In addition, if the user is administrator, we need to make sure to + // match the anonymous user, that doesn't actually have a name in the + // database. + $conditions = &$query->conditions(); + foreach ($conditions as $key => $condition) { + if ($key !== '#conjunction' && is_string($condition['field']) && $condition['field'] === 'users.name') { + // Remove the condition. + unset($conditions[$key]); + + // Re-add the condition and a condition on uid = 0 so that we end up + // with a query in the form: + // WHERE (name LIKE :name) OR (:anonymous_name LIKE :name AND uid = 0) + $or = db_or(); + $or->condition($condition['field'], $condition['value'], $condition['operator']); + // Sadly, the Database layer doesn't allow us to build a condition + // in the form ':placeholder = :placeholder2', because the 'field' + // part of a condition is always escaped. + // As a (cheap) workaround, we separately build a condition with no + // field, and concatenate the field and the condition separately. + $value_part = db_and(); + $value_part->condition('anonymous_name', $condition['value'], $condition['operator']); + $value_part->compile(Database::getConnection(), $query); + $or->condition(db_and() + ->where(str_replace('anonymous_name', ':anonymous_name', (string) $value_part), $value_part->arguments() + array(':anonymous_name' => format_username(user_load(0)))) + ->condition('users.uid', 0) + ); + $query->condition($or); + } + } + } + } +} + +/** + * Override for the Comment type. + * + * This only exists to workaround core bugs. + */ +class EntityReference_SelectionHandler_Generic_comment extends EntityReference_SelectionHandler_Generic { + public function entityFieldQueryAlter(SelectQueryInterface $query) { + // Adding the 'comment_access' tag is sadly insufficient for comments: core + // requires us to also know about the concept of 'published' and + // 'unpublished'. + if (!user_access('administer comments')) { + $base_table = $this->ensureBaseTable($query); + $query->condition("$base_table.status", COMMENT_PUBLISHED); + } + + // The Comment module doesn't implement any proper comment access, + // and as a consequence doesn't make sure that comments cannot be viewed + // when the user doesn't have access to the node. + $tables = $query->getTables(); + $base_table = key($tables); + $node_alias = $query->innerJoin('node', 'n', '%alias.nid = ' . $base_table . '.nid'); + // Pass the query to the node access control. + $this->reAlterQuery($query, 'node_access', $node_alias); + + // Alas, the comment entity exposes a bundle, but doesn't have a bundle column + // in the database. We have to alter the query ourself to go fetch the + // bundle. + $conditions = &$query->conditions(); + foreach ($conditions as $key => &$condition) { + if ($key !== '#conjunction' && is_string($condition['field']) && $condition['field'] === 'node_type') { + $condition['field'] = $node_alias . '.type'; + foreach ($condition['value'] as &$value) { + if (substr($value, 0, 13) == 'comment_node_') { + $value = substr($value, 13); + } + } + break; + } + } + + // Passing the query to node_query_node_access_alter() is sadly + // insufficient for nodes. + // @see EntityReferenceHandler_node::entityFieldQueryAlter() + if (!user_access('bypass node access') && !count(module_implements('node_grants'))) { + $query->condition($node_alias . '.status', 1); + } + } +} + +/** + * Override for the File type. + * + * This only exists to workaround core bugs. + */ +class EntityReference_SelectionHandler_Generic_file extends EntityReference_SelectionHandler_Generic { + public function entityFieldQueryAlter(SelectQueryInterface $query) { + // Core forces us to know about 'permanent' vs. 'temporary' files. + $tables = $query->getTables(); + $base_table = key($tables); + $query->condition('status', FILE_STATUS_PERMANENT); + + // Access control to files is a very difficult business. For now, we are not + // going to give it a shot. + // @todo: fix this when core access control is less insane. + return $query; + } + + public function getLabel($entity) { + // The file entity doesn't have a label. More over, the filename is + // sometimes empty, so use the basename in that case. + return $entity->filename !== '' ? $entity->filename : basename($entity->uri); + } +} + +/** + * Override for the Taxonomy term type. + * + * This only exists to workaround core bugs. + */ +class EntityReference_SelectionHandler_Generic_taxonomy_term extends EntityReference_SelectionHandler_Generic { + public function entityFieldQueryAlter(SelectQueryInterface $query) { + // The Taxonomy module doesn't implement any proper taxonomy term access, + // and as a consequence doesn't make sure that taxonomy terms cannot be viewed + // when the user doesn't have access to the vocabulary. + $base_table = $this->ensureBaseTable($query); + $vocabulary_alias = $query->innerJoin('taxonomy_vocabulary', 'n', '%alias.vid = ' . $base_table . '.vid'); + $query->addMetadata('base_table', $vocabulary_alias); + // Pass the query to the taxonomy access control. + $this->reAlterQuery($query, 'taxonomy_vocabulary_access', $vocabulary_alias); + + // Also, the taxonomy term entity exposes a bundle, but doesn't have a bundle + // column in the database. We have to alter the query ourself to go fetch + // the bundle. + $conditions = &$query->conditions(); + foreach ($conditions as $key => &$condition) { + if ($key !== '#conjunction' && is_string($condition['field']) && $condition['field'] === 'vocabulary_machine_name') { + $condition['field'] = $vocabulary_alias . '.machine_name'; + break; + } + } + } + + /** + * Implements EntityReferenceHandler::getReferencableEntities(). + */ + public function getReferencableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) { + if ($match || $limit) { + return parent::getReferencableEntities($match , $match_operator, $limit); + } + + $options = array(); + $entity_type = $this->field['settings']['target_type']; + + // We imitate core by calling taxonomy_get_tree(). + $entity_info = entity_get_info('taxonomy_term'); + $bundles = !empty($this->field['settings']['handler_settings']['target_bundles']) ? $this->field['settings']['handler_settings']['target_bundles'] : array_keys($entity_info['bundles']); + + foreach ($bundles as $bundle) { + if ($vocabulary = taxonomy_vocabulary_machine_name_load($bundle)) { + if ($terms = taxonomy_get_tree($vocabulary->vid, 0, NULL, TRUE)) { + foreach ($terms as $term) { + $options[$vocabulary->machine_name][$term->tid] = str_repeat('-', $term->depth) . check_plain($term->name); + } + } + } + } + + return $options; + } +} diff --git a/sites/all/modules/custom/entityreference/plugins/selection/EntityReference_SelectionHandler_Views.class.php b/sites/all/modules/custom/entityreference/plugins/selection/EntityReference_SelectionHandler_Views.class.php new file mode 100644 index 0000000000..1b036a7d2a --- /dev/null +++ b/sites/all/modules/custom/entityreference/plugins/selection/EntityReference_SelectionHandler_Views.class.php @@ -0,0 +1,193 @@ +field = $field; + $this->instance = $instance; + } + + /** + * Implements EntityReferenceHandler::settingsForm(). + */ + public static function settingsForm($field, $instance) { + $view_settings = empty($field['settings']['handler_settings']['view']) ? '' : $field['settings']['handler_settings']['view']; + $displays = views_get_applicable_views('entityreference display'); + // Filter views that list the entity type we want, and group the separate + // displays by view. + $entity_info = entity_get_info($field['settings']['target_type']); + $options = array(); + foreach ($displays as $data) { + list($view, $display_id) = $data; + if ($view->base_table == $entity_info['base table']) { + $options[$view->name . ':' . $display_id] = $view->name . ' - ' . $view->display[$display_id]->display_title; + } + } + + // The value of the 'view_and_display' select below will need to be split + // into 'view_name' and 'view_display' in the final submitted values, so + // we massage the data at validate time on the wrapping element (not + // ideal). + $form['view']['#element_validate'] = array('entityreference_view_settings_validate'); + + if ($options) { + $default = !empty($view_settings['view_name']) ? $view_settings['view_name'] . ':' . $view_settings['display_name'] : NULL; + $form['view']['view_and_display'] = array( + '#type' => 'select', + '#title' => t('View used to select the entities'), + '#required' => TRUE, + '#options' => $options, + '#default_value' => $default, + '#description' => '

    ' . t('Choose the view and display that select the entities that can be referenced.
    Only views with a display of type "Entity Reference" are eligible.') . '

    ', + ); + + $default = !empty($view_settings['args']) ? implode(', ', $view_settings['args']) : ''; + $form['view']['args'] = array( + '#type' => 'textfield', + '#title' => t('View arguments'), + '#default_value' => $default, + '#required' => FALSE, + '#description' => t('Provide a comma separated list of arguments to pass to the view.'), + ); + } + else { + $form['view']['no_view_help'] = array( + '#markup' => '

    ' . t('No eligible views were found. Create a view with an Entity Reference display, or add such a display to an existing view.', array( + '@create' => url('admin/structure/views/add'), + '@existing' => url('admin/structure/views'), + )) . '

    ', + ); + } + return $form; + } + + protected function initializeView($match = NULL, $match_operator = 'CONTAINS', $limit = 0, $ids = NULL) { + $view_name = $this->field['settings']['handler_settings']['view']['view_name']; + $display_name = $this->field['settings']['handler_settings']['view']['display_name']; + $args = $this->field['settings']['handler_settings']['view']['args']; + $entity_type = $this->field['settings']['target_type']; + + // Check that the view is valid and the display still exists. + $this->view = views_get_view($view_name); + if (!$this->view || !isset($this->view->display[$display_name]) || !$this->view->access($display_name)) { + watchdog('entityreference', 'The view %view_name is no longer eligible for the %field_name field.', array('%view_name' => $view_name, '%field_name' => $this->instance['label']), WATCHDOG_WARNING); + return FALSE; + } + $this->view->set_display($display_name); + + // Make sure the query is not cached. + $this->view->is_cacheable = FALSE; + + // Pass options to the display handler to make them available later. + $entityreference_options = array( + 'match' => $match, + 'match_operator' => $match_operator, + 'limit' => $limit, + 'ids' => $ids, + ); + $this->view->display_handler->set_option('entityreference_options', $entityreference_options); + return TRUE; + } + + /** + * Implements EntityReferenceHandler::getReferencableEntities(). + */ + public function getReferencableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) { + $display_name = $this->field['settings']['handler_settings']['view']['display_name']; + $args = $this->field['settings']['handler_settings']['view']['args']; + $result = array(); + if ($this->initializeView($match, $match_operator, $limit)) { + // Get the results. + $result = $this->view->execute_display($display_name, $args); + } + + $return = array(); + if ($result) { + $target_type = $this->field['settings']['target_type']; + $entities = entity_load($target_type, array_keys($result)); + foreach($entities as $entity) { + list($id,, $bundle) = entity_extract_ids($target_type, $entity); + $return[$bundle][$id] = $result[$id]; + } + } + return $return; + } + + /** + * Implements EntityReferenceHandler::countReferencableEntities(). + */ + function countReferencableEntities($match = NULL, $match_operator = 'CONTAINS') { + $this->getReferencableEntities($match, $match_operator); + return $this->view->total_items; + } + + function validateReferencableEntities(array $ids) { + $display_name = $this->field['settings']['handler_settings']['view']['display_name']; + $args = $this->field['settings']['handler_settings']['view']['args']; + $result = array(); + if ($this->initializeView(NULL, 'CONTAINS', 0, $ids)) { + // Get the results. + $entities = $this->view->execute_display($display_name, $args); + $result = array_keys($entities); + } + return $result; + } + + /** + * Implements EntityReferenceHandler::validateAutocompleteInput(). + */ + public function validateAutocompleteInput($input, &$element, &$form_state, $form) { + return NULL; + } + + /** + * Implements EntityReferenceHandler::getLabel(). + */ + public function getLabel($entity) { + return entity_label($this->field['settings']['target_type'], $entity); + } + + /** + * Implements EntityReferenceHandler::entityFieldQueryAlter(). + */ + public function entityFieldQueryAlter(SelectQueryInterface $query) { + + } + +} + +function entityreference_view_settings_validate($element, &$form_state, $form) { + // Split view name and display name from the 'view_and_display' value. + if (!empty($element['view_and_display']['#value'])) { + list($view, $display) = explode(':', $element['view_and_display']['#value']); + } + else { + form_error($element, t('The views entity selection mode requires a view.')); + return; + } + + // Explode the 'args' string into an actual array. Beware, explode() turns an + // empty string into an array with one empty string. We'll need an empty array + // instead. + $args_string = trim($element['args']['#value']); + if ($args_string === '') { + $args = array(); + } + else { + // array_map is called to trim whitespaces from the arguments. + $args = array_map('trim', explode(',', $args_string)); + } + + $value = array('view_name' => $view, 'display_name' => $display, 'args' => $args); + form_set_value($element, $value, $form_state); +} diff --git a/sites/all/modules/custom/entityreference/plugins/selection/abstract.inc b/sites/all/modules/custom/entityreference/plugins/selection/abstract.inc new file mode 100644 index 0000000000..1d2ea0d302 --- /dev/null +++ b/sites/all/modules/custom/entityreference/plugins/selection/abstract.inc @@ -0,0 +1,113 @@ +field = $field; + $this->instance = $instance; + } + + public static function settingsForm($field, $instance) { + $form['selection_handler'] = array( + '#markup' => t('The selected selection handler is broken.'), + ); + return $form; + } + + public function getReferencableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) { + return array(); + } + + public function countReferencableEntities($match = NULL, $match_operator = 'CONTAINS') { + return 0; + } + + public function validateReferencableEntities(array $ids) { + return array(); + } + + public function validateAutocompleteInput($input, &$element, &$form_state, $form) { + return NULL; + } + + public function entityFieldQueryAlter(SelectQueryInterface $query) {} + + public function getLabel($entity) { + return ''; + } +} diff --git a/sites/all/modules/custom/entityreference/plugins/selection/base.inc b/sites/all/modules/custom/entityreference/plugins/selection/base.inc new file mode 100644 index 0000000000..32471c9236 --- /dev/null +++ b/sites/all/modules/custom/entityreference/plugins/selection/base.inc @@ -0,0 +1,7 @@ + t('Simple (with optional filter by bundle)'), + 'class' => 'EntityReference_SelectionHandler_Generic', + 'weight' => -100, +); diff --git a/sites/all/modules/custom/entityreference/plugins/selection/views.inc b/sites/all/modules/custom/entityreference/plugins/selection/views.inc new file mode 100644 index 0000000000..5694bf36ce --- /dev/null +++ b/sites/all/modules/custom/entityreference/plugins/selection/views.inc @@ -0,0 +1,9 @@ + t('Views: Filter by an entity reference view'), + 'class' => 'EntityReference_SelectionHandler_Views', + 'weight' => 0, + ); +} diff --git a/sites/all/modules/custom/entityreference/tests/entityreference.admin.test b/sites/all/modules/custom/entityreference/tests/entityreference.admin.test new file mode 100644 index 0000000000..9a1211981d --- /dev/null +++ b/sites/all/modules/custom/entityreference/tests/entityreference.admin.test @@ -0,0 +1,114 @@ + 'Entity Reference UI', + 'description' => 'Tests for the administrative UI.', + 'group' => 'Entity Reference', + ); + } + + public function setUp() { + parent::setUp(array('field_ui', 'entity', 'ctools', 'entityreference')); + + // Create test user. + $this->admin_user = $this->drupalCreateUser(array('access content', 'administer content types')); + $this->drupalLogin($this->admin_user); + + // Create content type, with underscores. + $type_name = strtolower($this->randomName(8)) . '_test'; + $type = $this->drupalCreateContentType(array('name' => $type_name, 'type' => $type_name)); + $this->type = $type->type; + // Store a valid URL name, with hyphens instead of underscores. + $this->hyphen_type = str_replace('_', '-', $this->type); + } + + protected function assertFieldSelectOptions($name, $expected_options) { + $xpath = $this->buildXPathQuery('//select[@name=:name]', array(':name' => $name)); + $fields = $this->xpath($xpath); + if ($fields) { + $field = $fields[0]; + $options = $this->getAllOptionsList($field); + return $this->assertIdentical($options, $expected_options); + } + else { + return $this->fail(t('Unable to find field @name', array('@name' => $name))); + } + } + + /** + * Extract all the options of a select element. + */ + protected function getAllOptionsList($element) { + $options = array(); + // Add all options items. + foreach ($element->option as $option) { + $options[] = (string) $option['value']; + } + // TODO: support optgroup. + return $options; + } + + public function testFieldAdminHandler() { + $bundle_path = 'admin/structure/types/manage/' . $this->hyphen_type; + + // First step: 'Add new field' on the 'Manage fields' page. + $this->drupalPost($bundle_path . '/fields', array( + 'fields[_add_new_field][label]' => 'Test label', + 'fields[_add_new_field][field_name]' => 'test', + 'fields[_add_new_field][type]' => 'entityreference', + 'fields[_add_new_field][widget_type]' => 'entityreference_autocomplete', + ), t('Save')); + + // Node should be selected by default. + $this->assertFieldByName('field[settings][target_type]', 'node'); + // The base handler should be selected by default. + $this->assertFieldByName('field[settings][handler]', 'base'); + + // The base handler settings should be diplayed. + $entity_type = 'node'; + $entity_info = entity_get_info($entity_type); + foreach ($entity_info['bundles'] as $bundle_name => $bundle_info) { + $this->assertFieldByName('field[settings][handler_settings][target_bundles][' . $bundle_name . ']'); + } + + // Test the sort settings. + $options = array('none', 'property', 'field'); + $this->assertFieldSelectOptions('field[settings][handler_settings][sort][type]', $options); + // Option 0: no sort. + $this->assertFieldByName('field[settings][handler_settings][sort][type]', 'none'); + $this->assertNoFieldByName('field[settings][handler_settings][sort][property]'); + $this->assertNoFieldByName('field[settings][handler_settings][sort][field]'); + $this->assertNoFieldByName('field[settings][handler_settings][sort][direction]'); + // Option 1: sort by property. + $this->drupalPostAJAX(NULL, array('field[settings][handler_settings][sort][type]' => 'property'), 'field[settings][handler_settings][sort][type]'); + $this->assertFieldByName('field[settings][handler_settings][sort][property]', ''); + $this->assertNoFieldByName('field[settings][handler_settings][sort][field]'); + $this->assertFieldByName('field[settings][handler_settings][sort][direction]', 'ASC'); + // Option 2: sort by field. + $this->drupalPostAJAX(NULL, array('field[settings][handler_settings][sort][type]' => 'field'), 'field[settings][handler_settings][sort][type]'); + $this->assertNoFieldByName('field[settings][handler_settings][sort][property]'); + $this->assertFieldByName('field[settings][handler_settings][sort][field]', ''); + $this->assertFieldByName('field[settings][handler_settings][sort][direction]', 'ASC'); + // Set back to no sort. + $this->drupalPostAJAX(NULL, array('field[settings][handler_settings][sort][type]' => 'none'), 'field[settings][handler_settings][sort][type]'); + + // Second step: 'Instance settings' form. + $this->drupalPost(NULL, array(), t('Save field settings')); + + // Third step: confirm. + $this->drupalPost(NULL, array(), t('Save settings')); + + // Check that the field appears in the overview form. + $this->assertFieldByXPath('//table[@id="field-overview"]//td[1]', 'Test label', t('Field was created and appears in the overview page.')); + } +} diff --git a/sites/all/modules/custom/entityreference/tests/entityreference.feeds.test b/sites/all/modules/custom/entityreference/tests/entityreference.feeds.test new file mode 100644 index 0000000000..4dc1901f4f --- /dev/null +++ b/sites/all/modules/custom/entityreference/tests/entityreference.feeds.test @@ -0,0 +1,248 @@ + 'Feeds integration (field mapper)', + 'description' => 'Test Feeds Mapper support for fields.', + 'group' => 'Entity Reference', + ); + } + + /** + * Set-up function. + */ + public function setUp() { + parent::setUp(); + module_enable(array('entityreference_feeds_test'), TRUE); + $this->resetAll(); + + if (!module_exists('feeds')) { + return; + } + + $permissions[] = 'access content'; + $permissions[] = 'administer site configuration'; + $permissions[] = 'administer content types'; + $permissions[] = 'administer nodes'; + $permissions[] = 'bypass node access'; + $permissions[] = 'administer taxonomy'; + $permissions[] = 'administer users'; + $permissions[] = 'administer feeds'; + + // Create an admin user and log in. + $this->admin_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($this->admin_user); + } + + /** + * Check if mapping exists. + * + * @param string $id + * ID of the importer. + * @param integer $i + * The key of the mapping. + * @param string $source + * The source field. + * @param string $target + * The target field. + * + * @return integer + * -1 if the mapping doesn't exist, the key of the mapping otherwise. + */ + public function mappingExists($id, $i, $source, $target) { + + $current_mappings = $this->getCurrentMappings($id); + + if ($current_mappings) { + foreach ($current_mappings as $key => $mapping) { + if ($mapping['source'] == $source && $mapping['target'] == $target && $key == $i) { + return $key; + } + } + } + + return -1; + } + + /** + * Adds mappings to a given configuration. + * + * @param string $id + * ID of the importer. + * @param array $mappings + * An array of mapping arrays. Each mapping array must have a source and + * an target key and can have a unique key. + * @param bool $test_mappings + * (optional) TRUE to automatically test mapping configs. Defaults to TRUE. + */ + public function addMappings($id, $mappings, $test_mappings = TRUE) { + + $path = "admin/structure/feeds/$id/mapping"; + + // Iterate through all mappings and add the mapping via the form. + foreach ($mappings as $i => $mapping) { + + if ($test_mappings) { + $current_mapping_key = $this->mappingExists($id, $i, $mapping['source'], $mapping['target']); + $this->assertEqual($current_mapping_key, -1, 'Mapping does not exist before addition.'); + } + + // Get unique flag and unset it. Otherwise, drupalPost will complain that + // Split up config and mapping. + $config = $mapping; + unset($config['source'], $config['target']); + $mapping = array('source' => $mapping['source'], 'target' => $mapping['target']); + + // Add mapping. + $this->drupalPost($path, $mapping, t('Add')); + + // If there are other configuration options, set them. + if ($config) { + $this->drupalPostAJAX(NULL, array(), 'mapping_settings_edit_' . $i); + + // Set some settings. + $edit = array(); + foreach ($config as $key => $value) { + $edit["config[$i][settings][$key]"] = $value; + } + $this->drupalPostAJAX(NULL, $edit, 'mapping_settings_update_' . $i); + $this->drupalPost(NULL, array(), t('Save')); + } + + if ($test_mappings) { + $current_mapping_key = $this->mappingExists($id, $i, $mapping['source'], $mapping['target']); + $this->assertTrue($current_mapping_key >= 0, 'Mapping exists after addition.'); + } + } + } + + /** + * Gets an array of current mappings from the feeds_importer config. + * + * @param string $id + * ID of the importer. + * + * @return bool|array + * FALSE if the importer has no mappings, or an an array of mappings. + */ + public function getCurrentMappings($id) { + $config = db_query("SELECT config FROM {feeds_importer} WHERE id = :id", array(':id' => $id))->fetchField(); + + $config = unserialize($config); + + // We are very specific here. 'mappings' can either be an array or not + // exist. + if (array_key_exists('mappings', $config['processor']['config'])) { + $this->assertTrue(is_array($config['processor']['config']['mappings']), 'Mappings is an array.'); + + return $config['processor']['config']['mappings']; + } + + return FALSE; + } + + /** + * Basic test loading a double entry CSV file. + */ + public function test() { + if (!module_exists('feeds')) { + return; + } + + $this->drupalLogin($this->admin_user); + $this->drupalGet('admin/structure/types/manage/article/fields'); + $this->assertText('Ref - entity ID', t('Found Entity reference field %field.', array('%field' => 'field_er_id'))); + $this->assertText('Ref - entity label', t('Found Entity reference field %field.', array('%field' => 'field_er_label'))); + $this->assertText('Ref - feeds GUID', t('Found Entity reference field %field.', array('%field' => 'field_er_guid'))); + $this->assertText('Ref - feeds URL', t('Found Entity reference field %field.', array('%field' => 'field_er_url'))); + + // Add feeds importer + $this->drupalGet('admin/structure/feeds'); + $this->clickLink('Add importer'); + $this->drupalPost('admin/structure/feeds/create', array('name' => 'Nodes', 'id' => 'nodes'), 'Create'); + $this->assertText('Your configuration has been created with default settings.'); + + $this->drupalPost('admin/structure/feeds/nodes/settings/', array('content_type' => '', 'import_period' => -1), 'Save'); + $this->assertText('Your changes have been saved.'); + + $this->drupalPost("admin/structure/feeds/nodes/fetcher", array('plugin_key' => 'FeedsFileFetcher'), 'Save'); + $config = unserialize(db_query("SELECT config FROM {feeds_importer} WHERE id = :id", array(':id' => 'nodes'))->fetchField()); + $this->assertEqual($config['fetcher']['plugin_key'], 'FeedsFileFetcher', 'Verified correct fetcher (FeedsFileFetcher).'); + + $this->drupalPost("admin/structure/feeds/nodes/parser", array('plugin_key' => 'FeedsCSVParser'), 'Save'); + $config = unserialize(db_query("SELECT config FROM {feeds_importer} WHERE id = :id", array(':id' => 'nodes'))->fetchField()); + $this->assertEqual($config['parser']['plugin_key'], 'FeedsCSVParser', 'Verified correct parser (FeedsCSVParser).'); + + $this->drupalPost('admin/structure/feeds/nodes/settings/FeedsNodeProcessor', array('content_type' => 'article'), 'Save'); + $this->assertText('Your changes have been saved.'); + + $this->addMappings('nodes', array( + 0 => array( + 'source' => 'title', + 'target' => 'title', + ), + 1 => array( + 'source' => 'nid', + 'target' => 'nid', + 'unique' => TRUE, + ), + 2 => array( + 'source' => 'permalink', + 'target' => 'url', + 'unique' => TRUE, + ), + 3 => array( + 'source' => 'nid', + 'target' => 'guid', + 'unique' => TRUE, + ), + 4 => array( + 'source' => 'parent_nid', + 'target' => 'field_er_id:etid', + ), + 5 => array( + 'source' => 'parent_title', + 'target' => 'field_er_label:label', + ), + 6 => array( + 'source' => 'parent_url', + 'target' => 'field_er_url:url', + ), + 7 => array( + 'source' => 'parent_guid', + 'target' => 'field_er_guid', + ), + ) + ); + + $file = realpath(getcwd()) . '/' . drupal_get_path('module', 'entityreference') . '/tests/feeds_test.csv'; + $this->assertTrue(file_exists($file), 'Source file exists'); + + $this->drupalPost('import/nodes', array('files[feeds]' => $file), 'Import'); + $this->assertText('Created 2 nodes'); + + $parent = node_load(1); + $this->assertTrue(empty($parent->field_er_id['und'][0]['target_id']), t('Parent node: Import by entity ID OK.')); + $this->assertTrue(empty($parent->field_er_label['und'][0]['target_id']), t('Parent node: Import by entity label OK.')); + $this->assertTrue(empty($parent->field_er_guid['und'][0]['target_id']), t('Parent node: Import by feeds GUID OK.')); + $this->assertTrue(empty($parent->field_er_url['und'][0]['target_id']), t('Parent node: Import by feeds URL OK.')); + + $child = node_load(2); + $this->assertTrue($child->field_er_id['und'][0]['target_id'] == 1, t('Child node: Import by entity ID OK.')); + $this->assertTrue($child->field_er_label['und'][0]['target_id'] == 1, t('Child node: Import by entity label OK.')); + $this->assertTrue($child->field_er_guid['und'][0]['target_id'] == 1, t('Child node: Import by feeds GUID OK.')); + $this->assertTrue($child->field_er_url['und'][0]['target_id'] == 1, t('Child node: Import by feeds URL OK.')); + } +} diff --git a/sites/all/modules/custom/entityreference/tests/entityreference.handlers.test b/sites/all/modules/custom/entityreference/tests/entityreference.handlers.test new file mode 100644 index 0000000000..b88e106934 --- /dev/null +++ b/sites/all/modules/custom/entityreference/tests/entityreference.handlers.test @@ -0,0 +1,597 @@ + 'Entity Reference Handlers', + 'description' => 'Tests for the base handlers provided by Entity Reference.', + 'group' => 'Entity Reference', + ); + } + + public function setUp() { + parent::setUp('entityreference'); + } + + protected function assertReferencable($field, $tests, $handler_name) { + $handler = entityreference_get_selection_handler($field); + + foreach ($tests as $test) { + foreach ($test['arguments'] as $arguments) { + $result = call_user_func_array(array($handler, 'getReferencableEntities'), $arguments); + $this->assertEqual($result, $test['result'], format_string('Valid result set returned by @handler.', array('@handler' => $handler_name))); + + $result = call_user_func_array(array($handler, 'countReferencableEntities'), $arguments); + if (!empty($test['result'])) { + $bundle = key($test['result']); + $count = count($test['result'][$bundle]); + } + else { + $count = 0; + } + + $this->assertEqual($result, $count, format_string('Valid count returned by @handler.', array('@handler' => $handler_name))); + } + } + } + + /** + * Test the node-specific overrides of the entity handler. + */ + public function testNodeHandler() { + // Build a fake field instance. + $field = array( + 'translatable' => FALSE, + 'entity_types' => array(), + 'settings' => array( + 'handler' => 'base', + 'target_type' => 'node', + 'handler_settings' => array( + 'target_bundles' => array(), + ), + ), + 'field_name' => 'test_field', + 'type' => 'entityreference', + 'cardinality' => '1', + ); + + // Build a set of test data. + // Titles contain HTML-special characters to test escaping. + $nodes = array( + 'published1' => (object) array( + 'type' => 'article', + 'status' => 1, + 'title' => 'Node published1 (<&>)', + 'uid' => 1, + ), + 'published2' => (object) array( + 'type' => 'article', + 'status' => 1, + 'title' => 'Node published2 (<&>)', + 'uid' => 1, + ), + 'unpublished' => (object) array( + 'type' => 'article', + 'status' => 0, + 'title' => 'Node unpublished (<&>)', + 'uid' => 1, + ), + // Title purposefully starts with same characters as published1 and + // published2 above but contains a slash. + 'published_withslash' => (object) array( + 'type' => 'article', + 'status' => 1, + 'title' => 'Node pub/lished1', + 'uid' => 1, + ), + ); + + $node_labels = array(); + foreach ($nodes as $key => $node) { + node_save($node); + $node_labels[$key] = check_plain($node->title); + } + + // Test as a non-admin. + $normal_user = $this->drupalCreateUser(array('access content')); + $GLOBALS['user'] = $normal_user; + $referencable_tests = array( + array( + 'arguments' => array( + array(NULL, 'CONTAINS'), + ), + 'result' => array( + 'article' => array( + $nodes['published1']->nid => $node_labels['published1'], + $nodes['published2']->nid => $node_labels['published2'], + $nodes['published_withslash']->nid => $node_labels['published_withslash'], + ), + ), + ), + array( + 'arguments' => array( + array('published1', 'CONTAINS'), + array('Published1', 'CONTAINS'), + ), + 'result' => array( + 'article' => array( + $nodes['published1']->nid => $node_labels['published1'], + ), + ), + ), + array( + 'arguments' => array( + array('published2', 'CONTAINS'), + array('Published2', 'CONTAINS'), + ), + 'result' => array( + 'article' => array( + $nodes['published2']->nid => $node_labels['published2'], + ), + ), + ), + array( + 'arguments' => array( + array('invalid node', 'CONTAINS'), + ), + 'result' => array(), + ), + array( + 'arguments' => array( + array('Node unpublished', 'CONTAINS'), + ), + 'result' => array(), + ), + // Searching for "Node pub/" should return only the published_withslash node + // and not published1 and published2 from above. + array( + 'arguments' => array( + array('Node pub/', 'CONTAINS'), + ), + 'result' => array( + 'article' => array( + $nodes['published_withslash']->nid => $node_labels['published_withslash'], + ), + ), + ), + ); + $this->assertReferencable($field, $referencable_tests, 'Node handler'); + + // Test as an admin. + $admin_user = $this->drupalCreateUser(array('access content', 'bypass node access')); + $GLOBALS['user'] = $admin_user; + $referencable_tests = array( + array( + 'arguments' => array( + array(NULL, 'CONTAINS'), + ), + 'result' => array( + 'article' => array( + $nodes['published1']->nid => $node_labels['published1'], + $nodes['published2']->nid => $node_labels['published2'], + $nodes['published_withslash']->nid => $node_labels['published_withslash'], + $nodes['unpublished']->nid => $node_labels['unpublished'], + ), + ), + ), + array( + 'arguments' => array( + array('Node unpublished', 'CONTAINS'), + ), + 'result' => array( + 'article' => array( + $nodes['unpublished']->nid => $node_labels['unpublished'], + ), + ), + ), + ); + $this->assertReferencable($field, $referencable_tests, 'Node handler (admin)'); + } + + /** + * Test the user-specific overrides of the entity handler. + */ + public function testUserHandler() { + // Build a fake field instance. + $field = array( + 'translatable' => FALSE, + 'entity_types' => array(), + 'settings' => array( + 'handler' => 'base', + 'target_type' => 'user', + 'handler_settings' => array( + 'target_bundles' => array(), + ), + ), + 'field_name' => 'test_field', + 'type' => 'entityreference', + 'cardinality' => '1', + ); + + // Build a set of test data. + $users = array( + 'anonymous' => user_load(0), + 'admin' => user_load(1), + 'non_admin' => (object) array( + 'name' => 'non_admin <&>', + 'mail' => 'non_admin@example.com', + 'roles' => array(), + 'pass' => user_password(), + 'status' => 1, + ), + 'blocked' => (object) array( + 'name' => 'blocked <&>', + 'mail' => 'blocked@example.com', + 'roles' => array(), + 'pass' => user_password(), + 'status' => 0, + ), + ); + + // The label of the anonymous user is variable_get('anonymous'). + $users['anonymous']->name = variable_get('anonymous', t('Anonymous')); + + $user_labels = array(); + foreach ($users as $key => $user) { + if (!isset($user->uid)) { + $users[$key] = $user = user_save(drupal_anonymous_user(), (array) $user); + } + $user_labels[$key] = check_plain($user->name); + } + + // Test as a non-admin. + $GLOBALS['user'] = $users['non_admin']; + $referencable_tests = array( + array( + 'arguments' => array( + array(NULL, 'CONTAINS'), + ), + 'result' => array( + 'user' => array( + $users['admin']->uid => '- Restricted access -', + $users['non_admin']->uid => $user_labels['non_admin'], + ), + ), + ), + array( + 'arguments' => array( + array('non_admin', 'CONTAINS'), + array('NON_ADMIN', 'CONTAINS'), + ), + 'result' => array( + 'user' => array( + $users['non_admin']->uid => $user_labels['non_admin'], + ), + ), + ), + array( + 'arguments' => array( + array('invalid user', 'CONTAINS'), + ), + 'result' => array(), + ), + array( + 'arguments' => array( + array('blocked', 'CONTAINS'), + ), + 'result' => array(), + ), + ); + $this->assertReferencable($field, $referencable_tests, 'User handler'); + + $GLOBALS['user'] = $users['admin']; + $referencable_tests = array( + array( + 'arguments' => array( + array(NULL, 'CONTAINS'), + ), + 'result' => array( + 'user' => array( + $users['anonymous']->uid => $user_labels['anonymous'], + $users['admin']->uid => $user_labels['admin'], + $users['non_admin']->uid => $user_labels['non_admin'], + $users['blocked']->uid => $user_labels['blocked'], + ), + ), + ), + array( + 'arguments' => array( + array('blocked', 'CONTAINS'), + ), + 'result' => array( + 'user' => array( + $users['blocked']->uid => $user_labels['blocked'], + ), + ), + ), + array( + 'arguments' => array( + array('Anonymous', 'CONTAINS'), + array('anonymous', 'CONTAINS'), + ), + 'result' => array( + 'user' => array( + $users['anonymous']->uid => $user_labels['anonymous'], + ), + ), + ), + ); + $this->assertReferencable($field, $referencable_tests, 'User handler (admin)'); + } + + /** + * Test the comment-specific overrides of the entity handler. + */ + public function testCommentHandler() { + // Build a fake field instance. + $field = array( + 'translatable' => FALSE, + 'entity_types' => array(), + 'settings' => array( + 'handler' => 'base', + 'target_type' => 'comment', + 'handler_settings' => array( + 'target_bundles' => array(), + ), + ), + 'field_name' => 'test_field', + 'type' => 'entityreference', + 'cardinality' => '1', + ); + + // Build a set of test data. + $nodes = array( + 'published' => (object) array( + 'type' => 'article', + 'status' => 1, + 'title' => 'Node published', + 'uid' => 1, + ), + 'unpublished' => (object) array( + 'type' => 'article', + 'status' => 0, + 'title' => 'Node unpublished', + 'uid' => 1, + ), + ); + foreach ($nodes as $node) { + node_save($node); + } + + $comments = array( + 'published_published' => (object) array( + 'nid' => $nodes['published']->nid, + 'uid' => 1, + 'cid' => NULL, + 'pid' => 0, + 'status' => COMMENT_PUBLISHED, + 'subject' => 'Comment Published <&>', + 'hostname' => ip_address(), + 'language' => LANGUAGE_NONE, + ), + 'published_unpublished' => (object) array( + 'nid' => $nodes['published']->nid, + 'uid' => 1, + 'cid' => NULL, + 'pid' => 0, + 'status' => COMMENT_NOT_PUBLISHED, + 'subject' => 'Comment Unpublished <&>', + 'hostname' => ip_address(), + 'language' => LANGUAGE_NONE, + ), + 'unpublished_published' => (object) array( + 'nid' => $nodes['unpublished']->nid, + 'uid' => 1, + 'cid' => NULL, + 'pid' => 0, + 'status' => COMMENT_NOT_PUBLISHED, + 'subject' => 'Comment Published on Unpublished node <&>', + 'hostname' => ip_address(), + 'language' => LANGUAGE_NONE, + ), + ); + + $comment_labels = array(); + foreach ($comments as $key => $comment) { + comment_save($comment); + $comment_labels[$key] = check_plain($comment->subject); + } + + // Test as a non-admin. + $normal_user = $this->drupalCreateUser(array('access content', 'access comments')); + $GLOBALS['user'] = $normal_user; + $referencable_tests = array( + array( + 'arguments' => array( + array(NULL, 'CONTAINS'), + ), + 'result' => array( + 'comment_node_article' => array( + $comments['published_published']->cid => $comment_labels['published_published'], + ), + ), + ), + array( + 'arguments' => array( + array('Published', 'CONTAINS'), + ), + 'result' => array( + 'comment_node_article' => array( + $comments['published_published']->cid => $comment_labels['published_published'], + ), + ), + ), + array( + 'arguments' => array( + array('invalid comment', 'CONTAINS'), + ), + 'result' => array(), + ), + array( + 'arguments' => array( + array('Comment Unpublished', 'CONTAINS'), + ), + 'result' => array(), + ), + ); + $this->assertReferencable($field, $referencable_tests, 'Comment handler'); + + // Test as a comment admin. + $admin_user = $this->drupalCreateUser(array('access content', 'access comments', 'administer comments')); + $GLOBALS['user'] = $admin_user; + $referencable_tests = array( + array( + 'arguments' => array( + array(NULL, 'CONTAINS'), + ), + 'result' => array( + 'comment_node_article' => array( + $comments['published_published']->cid => $comment_labels['published_published'], + $comments['published_unpublished']->cid => $comment_labels['published_unpublished'], + ), + ), + ), + ); + $this->assertReferencable($field, $referencable_tests, 'Comment handler (comment admin)'); + + // Test as a node and comment admin. + $admin_user = $this->drupalCreateUser(array('access content', 'access comments', 'administer comments', 'bypass node access')); + $GLOBALS['user'] = $admin_user; + $referencable_tests = array( + array( + 'arguments' => array( + array(NULL, 'CONTAINS'), + ), + 'result' => array( + 'comment_node_article' => array( + $comments['published_published']->cid => $comment_labels['published_published'], + $comments['published_unpublished']->cid => $comment_labels['published_unpublished'], + $comments['unpublished_published']->cid => $comment_labels['unpublished_published'], + ), + ), + ), + ); + $this->assertReferencable($field, $referencable_tests, 'Comment handler (comment + node admin)'); + } + + /** + * Assert sorting by field works for non-admins. + * + * Since we are sorting on a field, we need to make sure the base-table + * is added, and access-control is behaving as expected. + */ + public function testSortByField() { + // Add text field to entity, to sort by. + $field_info = array( + 'field_name' => 'field_text', + 'type' => 'text', + 'entity_types' => array('node'), + ); + field_create_field($field_info); + + $instance = array( + 'label' => 'Text Field', + 'field_name' => 'field_text', + 'entity_type' => 'node', + 'bundle' => 'article', + 'settings' => array(), + 'required' => FALSE, + ); + field_create_instance($instance); + + + // Build a fake field instance. + $field = array( + 'translatable' => FALSE, + 'entity_types' => array(), + 'settings' => array( + 'handler' => 'base', + 'target_type' => 'node', + 'handler_settings' => array( + 'target_bundles' => array(), + // Add sorting. + 'sort' => array( + 'type' => 'field', + 'field' => 'field_text:value', + 'direction' => 'DESC', + ), + ), + ), + 'field_name' => 'test_field', + 'type' => 'entityreference', + 'cardinality' => '1', + ); + + // Build a set of test data. + $nodes = array( + 'published1' => (object) array( + 'type' => 'article', + 'status' => 1, + 'title' => 'Node published1 (<&>)', + 'uid' => 1, + 'field_text' => array( + LANGUAGE_NONE => array( + array( + 'value' => 1, + ), + ), + ), + ), + 'published2' => (object) array( + 'type' => 'article', + 'status' => 1, + 'title' => 'Node published2 (<&>)', + 'uid' => 1, + 'field_text' => array( + LANGUAGE_NONE => array( + array( + 'value' => 2, + ), + ), + ), + ), + 'unpublished' => (object) array( + 'type' => 'article', + 'status' => 0, + 'title' => 'Node unpublished (<&>)', + 'uid' => 1, + 'field_text' => array( + LANGUAGE_NONE => array( + array( + 'value' => 3, + ), + ), + ), + ), + ); + + $node_labels = array(); + foreach ($nodes as $key => $node) { + node_save($node); + $node_labels[$key] = check_plain($node->title); + } + + // Test as a non-admin. + $normal_user = $this->drupalCreateUser(array('access content')); + $GLOBALS['user'] = $normal_user; + + $handler = entityreference_get_selection_handler($field); + + // Not only assert the result, but make sure the keys are sorted as + // expected. + $result = $handler->getReferencableEntities(); + $expected_result = array( + $nodes['published2']->nid => $node_labels['published2'], + $nodes['published1']->nid => $node_labels['published1'], + ); + $this->assertIdentical($result['article'], $expected_result, 'Query sorted by field returned expected values for non-admin.'); + } +} diff --git a/sites/all/modules/custom/entityreference/tests/entityreference.taxonomy.test b/sites/all/modules/custom/entityreference/tests/entityreference.taxonomy.test new file mode 100644 index 0000000000..6e4afb7806 --- /dev/null +++ b/sites/all/modules/custom/entityreference/tests/entityreference.taxonomy.test @@ -0,0 +1,115 @@ + 'Entity Reference Taxonomy', + 'description' => 'Tests nodes with reference to terms as indexed.', + 'group' => 'Entity Reference', + ); + } + + public function setUp() { + parent::setUp('entityreference', 'taxonomy'); + + // Create an entity reference field. + $field = array( + 'entity_types' => array('node'), + 'settings' => array( + 'handler' => 'base', + 'target_type' => 'taxonomy_term', + 'handler_settings' => array( + 'target_bundles' => array(), + ), + ), + 'field_name' => 'field_entityreference_term', + 'type' => 'entityreference', + ); + $field = field_create_field($field); + $instance = array( + 'field_name' => 'field_entityreference_term', + 'bundle' => 'article', + 'entity_type' => 'node', + ); + + // Enable the taxonomy-index behavior. + $instance['settings']['behaviors']['taxonomy-index']['status'] = TRUE; + field_create_instance($instance); + + // Create a term reference field. + $field = array( + 'translatable' => FALSE, + 'entity_types' => array('node'), + 'settings' => array( + 'allowed_values' => array( + array( + 'vocabulary' => 'terms', + 'parent' => 0, + ), + ), + ), + 'field_name' => 'field_taxonomy_term', + 'type' => 'taxonomy_term_reference', + ); + $field = field_create_field($field); + $instance = array( + 'field_name' => 'field_taxonomy_term', + 'bundle' => 'article', + 'entity_type' => 'node', + ); + field_create_instance($instance); + + // Create a terms vocobulary. + $vocabulary = new stdClass(); + $vocabulary->name = 'Terms'; + $vocabulary->machine_name = 'terms'; + taxonomy_vocabulary_save($vocabulary); + + // Create term. + for ($i = 1; $i <= 2; $i++) { + $term = new stdClass(); + $term->name = "term $i"; + $term->vid = 1; + taxonomy_term_save($term); + } + } + + /** + * Test referencing a term using entity reference field. + */ + public function testNodeIndex() { + // Asert node insert with reference to term. + $settings = array(); + $settings['type'] = 'article'; + $settings['field_entityreference_term'][LANGUAGE_NONE][0]['target_id'] = 1; + $node = $this->drupalCreateNode($settings); + + $this->assertEqual(taxonomy_select_nodes(1), array($node->nid)); + + // Asert node update with reference to term. + node_save($node); + $this->assertEqual(taxonomy_select_nodes(1), array($node->nid)); + + // Assert node update with reference to term and taxonomy reference to + // another term. + $wrapper = entity_metadata_wrapper('node', $node); + $wrapper->field_taxonomy_term->set(2); + $wrapper->save(); + + $this->assertEqual(taxonomy_select_nodes(1), array($node->nid)); + $this->assertEqual(taxonomy_select_nodes(2), array($node->nid)); + + // Assert node update with reference to term and taxonomy reference to + // same term. + $wrapper->field_taxonomy_term->set(1); + $wrapper->save(); + $this->assertEqual(taxonomy_select_nodes(1), array($node->nid)); + + $wrapper->delete(); + $this->assertFalse(taxonomy_select_nodes(1)); + } + +} diff --git a/sites/all/modules/custom/entityreference/tests/feeds_test.csv b/sites/all/modules/custom/entityreference/tests/feeds_test.csv new file mode 100644 index 0000000000..c145ce34da --- /dev/null +++ b/sites/all/modules/custom/entityreference/tests/feeds_test.csv @@ -0,0 +1,3 @@ +"nid","title","permalink","parent_nid","parent_title","parent_url","parent_guid" +"1","Views","http://drupal.org/project/views","","","","" +"2","Views bulk operations","http://drupal.org/project/views_bulk_operations","1","Views","http://drupal.org/project/views","1" diff --git a/sites/all/modules/custom/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.info b/sites/all/modules/custom/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.info new file mode 100644 index 0000000000..311ae3f478 --- /dev/null +++ b/sites/all/modules/custom/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.info @@ -0,0 +1,16 @@ +name = "Entityreference - Feeds integration tests" +description = "Support module for the Entityreference - Feeds integration tests." +package = Testing +core = 7.x +hidden = TRUE + +dependencies[] = feeds +dependencies[] = feeds_ui +dependencies[] = entityreference + +; Information added by packaging script on 2013-11-20 +version = "7.x-1.1" +core = "7.x" +project = "entityreference" +datestamp = "1384973110" + diff --git a/sites/all/modules/custom/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.module b/sites/all/modules/custom/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.module new file mode 100644 index 0000000000..f16b360715 --- /dev/null +++ b/sites/all/modules/custom/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.module @@ -0,0 +1,104 @@ + 'field_er_id', + 'type' => 'entityreference', + 'cardinality' => 1, + 'settings' => array( + 'target_type' => 'node', + 'handler' => 'base', + 'handler_settings' => array( + 'target_bundles' => array('article' => 'article'), + ), + ), + ); + field_create_field($field); + + $instance = array( + 'field_name' => 'field_er_id', + 'entity_type' => 'node', + 'label' => 'Ref - entity ID', + 'bundle' => 'article', + ); + field_create_instance($instance); + + // Entity reference field - mapped by Feeds GUID. + $field = array( + 'field_name' => 'field_er_guid', + 'type' => 'entityreference', + 'cardinality' => 1, + 'settings' => array( + 'target_type' => 'node', + 'handler' => 'base', + 'handler_settings' => array( + 'target_bundles' => array('article' => 'article'), + ), + ), + ); + field_create_field($field); + + $instance = array( + 'field_name' => 'field_er_guid', + 'entity_type' => 'node', + 'label' => 'Ref - feeds GUID', + 'bundle' => 'article', + ); + field_create_instance($instance); + + // Entity reference field - mapped by Feeds URL. + $field = array( + 'field_name' => 'field_er_url', + 'type' => 'entityreference', + 'cardinality' => 1, + 'settings' => array( + 'target_type' => 'node', + 'handler' => 'base', + 'handler_settings' => array( + 'target_bundles' => array('article' => 'article'), + ), + ), + ); + field_create_field($field); + + $instance = array( + 'field_name' => 'field_er_url', + 'entity_type' => 'node', + 'label' => 'Ref - feeds URL', + 'bundle' => 'article', + ); + field_create_instance($instance); + + // Entity reference field - mapped by Label. + $field = array( + 'field_name' => 'field_er_label', + 'type' => 'entityreference', + 'cardinality' => 1, + 'settings' => array( + 'target_type' => 'node', + 'handler' => 'base', + 'handler_settings' => array( + 'target_bundles' => array('article' => 'article'), + ), + ), + ); + field_create_field($field); + + $instance = array( + 'field_name' => 'field_er_label', + 'entity_type' => 'node', + 'label' => 'Ref - entity label', + 'bundle' => 'article', + ); + field_create_instance($instance); +} diff --git a/sites/all/modules/custom/entityreference/views/entityreference.views.inc b/sites/all/modules/custom/entityreference/views/entityreference.views.inc new file mode 100644 index 0000000000..baa703434c --- /dev/null +++ b/sites/all/modules/custom/entityreference/views/entityreference.views.inc @@ -0,0 +1,147 @@ + $table_data) { + if (isset($entity_info['base table'])) { + $entity = $entity_info['label']; + if ($entity == t('Node')) { + $entity = t('Content'); + } + + $field_name = $field['field_name'] . '_target_id'; + $parameters = array('@entity' => $entity, '!field_name' => $field['field_name']); + $data[$table_name][$field_name]['relationship'] = array( + 'handler' => 'views_handler_relationship', + 'base' => $entity_info['base table'], + 'base field' => $entity_info['entity keys']['id'], + 'label' => t('@entity entity referenced from !field_name', $parameters), + 'group' => t('Entity Reference'), + 'title' => t('Referenced Entity'), + 'help' => t('A bridge to the @entity entity that is referenced via !field_name', $parameters), + ); + } + } + + // Invoke the behaviors to allow them to change the properties. + foreach (entityreference_get_behavior_handlers($field) as $handler) { + $handler->views_data_alter($data, $field); + } + + return $data; +} + +/** + * Options callback for Views handler views_handler_filter_in_operator. + */ +function entityreference_views_handler_options_list($field_name) { + $field = field_info_field($field_name); + return entityreference_options_list($field); +} + +/** + * Implements hook_field_views_data_views_data_alter(). + * + * Views integration to provide reverse relationships on entityreference fields. + */ +function entityreference_field_views_data_views_data_alter(&$data, $field) { + foreach ($field['bundles'] as $entity_type => $bundles) { + $target_entity_info = entity_get_info($field['settings']['target_type']); + if (isset($target_entity_info['base table'])) { + $entity_info = entity_get_info($entity_type); + $entity = $entity_info['label']; + if ($entity == t('Node')) { + $entity = t('Content'); + } + $target_entity = $target_entity_info['label']; + if ($target_entity == t('Node')) { + $target_entity = t('Content'); + } + + $pseudo_field_name = 'reverse_' . $field['field_name'] . '_' . $entity_type; + $replacements = array('@entity' => $entity, '@target_entity' => $target_entity, '!field_name' => $field['field_name']); + $data[$target_entity_info['base table']][$pseudo_field_name]['relationship'] = array( + 'handler' => 'views_handler_relationship_entity_reverse', + 'field_name' => $field['field_name'], + 'field table' => _field_sql_storage_tablename($field), + 'field field' => $field['field_name'] . '_target_id', + 'base' => $entity_info['base table'], + 'base field' => $entity_info['entity keys']['id'], + 'label' => t('@entity referencing @target_entity from !field_name', $replacements), + 'group' => t('Entity Reference'), + 'title' => t('Referencing entity'), + 'help' => t('A bridge to the @entity entity that is referencing @target_entity via !field_name', $replacements), + 'join_extra' => array( + 0 => array( + 'field' => 'entity_type', + 'value' => $entity_type, + ), + 1 => array( + 'field' => 'deleted', + 'value' => 0, + 'numeric' => TRUE, + ), + ), + ); + } + } +} + +/** + * Implements hook_views_plugins(). + */ +function entityreference_views_plugins() { + $plugins = array( + 'display' => array( + 'entityreference' => array( + 'title' => t('Entity Reference'), + 'admin' => t('Entity Reference Source'), + 'help' => 'Selects referenceable entities for an entity reference field', + 'handler' => 'entityreference_plugin_display', + 'uses hook menu' => FALSE, + 'use ajax' => FALSE, + 'use pager' => FALSE, + 'accept attachments' => FALSE, + // Custom property, used with views_get_applicable_views() to retrieve + // all views with a 'Entity Reference' display. + 'entityreference display' => TRUE, + ), + ), + 'style' => array( + 'entityreference_style' => array( + 'title' => t('Entity Reference list'), + 'help' => 'Returns results as a PHP array of labels and rendered rows.', + 'handler' => 'entityreference_plugin_style', + 'theme' => 'views_view_unformatted', + 'uses row plugin' => TRUE, + 'uses fields' => TRUE, + 'uses options' => TRUE, + 'type' => 'entityreference', + 'even empty' => TRUE, + ), + ), + 'row' => array( + 'entityreference_fields' => array( + 'title' => t('Inline fields'), + 'help' => t('Displays the fields with an optional template.'), + 'handler' => 'entityreference_plugin_row_fields', + 'theme' => 'views_view_fields', + 'theme path' => drupal_get_path('module', 'views') . '/theme', + 'theme file' => 'theme.inc', + 'uses fields' => TRUE, + 'uses options' => TRUE, + 'type' => 'entityreference', + ), + ), + ); + return $plugins; +} diff --git a/sites/all/modules/custom/entityreference/views/entityreference_plugin_display.inc b/sites/all/modules/custom/entityreference/views/entityreference_plugin_display.inc new file mode 100644 index 0000000000..f13e88a866 --- /dev/null +++ b/sites/all/modules/custom/entityreference/views/entityreference_plugin_display.inc @@ -0,0 +1,125 @@ +view->render($this->display->id); + } + + function render() { + if (!empty($this->view->result) || !empty($this->view->style_plugin->definition['even empty'])) { + return $this->view->style_plugin->render($this->view->result); + } + return ''; + } + + function uses_exposed() { + return FALSE; + } + + function query() { + $options = $this->get_option('entityreference_options'); + + // Play nice with Views UI 'preview' : if the view is not executed through + // EntityReference_SelectionHandler_Views::getReferencableEntities(), + // don't alter the query. + if (empty($options)) { + return; + } + + // Make sure the id field is included in the results, and save its alias + // so that references_plugin_style can retrieve it. + $this->id_field_alias = $id_field = $this->view->query->add_field($this->view->base_table, $this->view->base_field); + if (strpos($id_field, '.') === FALSE) { + $id_field = $this->view->base_table . '.' . $this->id_field_alias; + } + + // Restrict the autocomplete options based on what's been typed already. + if (isset($options['match'])) { + $style_options = $this->get_option('style_options'); + $value = db_like($options['match']) . '%'; + if ($options['match_operator'] != 'STARTS_WITH') { + $value = '%' . $value; + } + + // Multiple search fields are OR'd together + $conditions = db_or(); + + // Build the condition using the selected search fields + foreach ($style_options['search_fields'] as $field_alias) { + if (!empty($field_alias)) { + + // Get the table and field names for the checked field. + if (empty($this->view->field[$field_alias]->field_info)) { + $field = $this->view->query->fields[$this->view->field[$field_alias]->field_alias]; + } + else { + $this->view->query->add_field($this->view->field[$field_alias]->options['table'], $this->view->field[$field_alias]->real_field, $this->view->field[$field_alias]->options['field'], array()); + $field = $this->view->query->fields[$this->view->field[$field_alias]->options['field']]; + } + // Add an OR condition for the field + $conditions->condition($field['table'] . '.' . $field['field'], $value, 'LIKE'); + } + } + + $this->view->query->add_where(NULL, $conditions); + } + + // Add an IN condition for validation. + if (!empty($options['ids'])) { + $this->view->query->add_where(NULL, $id_field, $options['ids']); + } + + $this->view->set_items_per_page($options['limit']); + } + + /** + * Extend the default validation. + */ + function validate() { + $errors = parent::validate(); + // Verify that search fields are set up. + $style_options = $this->get_option('style_options'); + if (!isset($style_options['search_fields'])) { + $errors[] = t('Display "@display" needs a selected search fields to work properly. See the settings for the Entity Reference list format.', array('@display' => $this->display->display_title)); + } + else { + // Verify that the search fields used actually exist. + //$fields = array_keys($this->view->get_items('field')); + $fields = array_keys($this->handlers['field']); + foreach ($style_options['search_fields'] as $field_alias => $enabled) { + if ($enabled && !in_array($field_alias, $fields)) { + $errors[] = t('Display "@display" uses field %field as search field, but the field is no longer present. See the settings for the Entity Reference list format.', array('@display' => $this->display->display_title, '%field' => $field_alias)); + } + } + } + return $errors; + } +} diff --git a/sites/all/modules/custom/entityreference/views/entityreference_plugin_row_fields.inc b/sites/all/modules/custom/entityreference/views/entityreference_plugin_row_fields.inc new file mode 100644 index 0000000000..dc3c4b68a8 --- /dev/null +++ b/sites/all/modules/custom/entityreference/views/entityreference_plugin_row_fields.inc @@ -0,0 +1,36 @@ + '-'); + + return $options; + } + + /** + * Provide a form for setting options. + */ + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + + // Expand the description of the 'Inline field' checkboxes. + $form['inline']['#description'] .= '
    ' . t("Note: In 'Entity Reference' displays, all fields will be displayed inline unless an explicit selection of inline fields is made here." ); + } + + function pre_render($row) { + // Force all fields to be inline by default. + if (empty($this->options['inline'])) { + $fields = $this->view->get_items('field', $this->display->id); + $this->options['inline'] = drupal_map_assoc(array_keys($fields)); + } + + return parent::pre_render($row); + } +} diff --git a/sites/all/modules/custom/entityreference/views/entityreference_plugin_style.inc b/sites/all/modules/custom/entityreference/views/entityreference_plugin_style.inc new file mode 100644 index 0000000000..fadaa9ee23 --- /dev/null +++ b/sites/all/modules/custom/entityreference/views/entityreference_plugin_style.inc @@ -0,0 +1,64 @@ + NULL); + + return $options; + } + + // Create the options form. + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + $options = array(); + + if (isset($form['grouping'])) { + $options = $form['grouping'][0]['field']['#options']; + unset($options['']); + $form['search_fields'] = array( + '#type' => 'checkboxes', + '#title' => t('Search fields'), + '#options' => $options, + '#required' => TRUE, + '#default_value' => $this->options['search_fields'], + '#description' => t('Select the field(s) that will be searched when using the autocomplete widget.'), + '#weight' => -3, + ); + } + } + + function render() { + $options = $this->display->handler->get_option('entityreference_options'); + + // Play nice with Views UI 'preview' : if the view is not executed through + // EntityReference_SelectionHandler_Views::getReferencableEntities(), just + // display the HTML. + if (empty($options)) { + return parent::render(); + } + + // Group the rows according to the grouping field, if specified. + $sets = $this->render_grouping($this->view->result, $this->options['grouping']); + // Grab the alias of the 'id' field added by entityreference_plugin_display. + $id_field_alias = $this->display->handler->id_field_alias; + + // @todo We don't display grouping info for now. Could be useful for select + // widget, though. + $results = array(); + foreach ($sets as $records) { + foreach ($records as $index => $values) { + $this->view->row_index = $index; + // Sanitize html, remove line breaks and extra whitespace. + $results[$values->{$id_field_alias}] = filter_xss_admin(preg_replace('/\s\s+/', ' ', str_replace("\n", '', $this->row_plugin->render($values)))); + } + } + unset($this->view->row_index); + return $results; + } +} diff --git a/sites/all/modules/custom/eva/LICENSE.txt b/sites/all/modules/custom/eva/LICENSE.txt new file mode 100644 index 0000000000..d159169d10 --- /dev/null +++ b/sites/all/modules/custom/eva/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/sites/all/modules/custom/eva/README.txt b/sites/all/modules/custom/eva/README.txt new file mode 100755 index 0000000000..d2bdcbadf9 --- /dev/null +++ b/sites/all/modules/custom/eva/README.txt @@ -0,0 +1,52 @@ +ABOUT + +"Eva" is short for "Entity Views Attachment;" it provides a Views display +plugin that allows the output of a View to be attached to the content of any +Drupal entity. The body of a node or comment, the profile of a user account, +or the listing page for a Taxonomy term are all examples of entity content. + +The placement of the view in the entity's content can be reordered on the +"Field Display" administration page for that entity, like other fields added +using the Field UI module. + +In addition, the unique ID of the entity the view is attached to -- as well as +any tokens generated from that entity -- can be passed in as arguments to the +view. For example, you might make a View that displays posts with an 'Author +ID' argument, then use Eva to attach the view to the User entity type. When a +user profile is displayed, the User's ID will be passed in as the argument to +the view magically. + +That's right: magically. + +Eva is powered by witchcraft. + +HISTORY + +Eva was originally developed by Jeff Eaton but never released. Larry Garfield +later cleaned it up and added the CCK integration, then released it under the +name 'Views Attach.' Endless confusion followed, as everyone thought it would +allow them to attach things to Views. Then Jeff Eaton refactored it for Drupal +7. Then they renamed it again, because they didn't want to write an upgrade +path. + +Why *isn't* there an upgrade path? This version is built on top of Drupal 7's +Entity API as a single unified Views Display, while the D6 version juggled +NodeAPI and hook_user. While there's definitely feature parity, enough has +changed that cleanly upgrading a view from Views Attach 6.x-2.0 is essentially +impossible. They feel bad about it, and would accept patches that implemented +a well-tested upgrade path, but don't have the bandwidth to implement it +ourselves. + +REQUIREMENTS + +- Drupal 7 +- Views 3 + +AUTHOR AND CREDIT + +Original development: Jeff Eaton "eaton" (http://drupal.org/user/16496) + +Actual D6 release, and version 2.0: Larry Garfield "Crell" +(http://drupal.org/user/26398) + +D7 port and tomfoolery: Jeff Eaton "eaton" (http://drupal.org/user/16496) \ No newline at end of file diff --git a/sites/all/modules/custom/eva/eva-display-entity-view.tpl.php b/sites/all/modules/custom/eva/eva-display-entity-view.tpl.php new file mode 100755 index 0000000000..a0317bf9a4 --- /dev/null +++ b/sites/all/modules/custom/eva/eva-display-entity-view.tpl.php @@ -0,0 +1,84 @@ + +
    + + +

    + + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + +
    + +
    + + + + + + + +
    + +
    + + + + + + + + + + + +
    + +
    + + +
    diff --git a/sites/all/modules/custom/eva/eva.info b/sites/all/modules/custom/eva/eva.info new file mode 100644 index 0000000000..aafbd193cc --- /dev/null +++ b/sites/all/modules/custom/eva/eva.info @@ -0,0 +1,14 @@ +name = Eva +description = Provides a Views display type that can be attached to entities. +core = 7.x +dependencies[] = views +package = Views + +files[] = eva_plugin_display_entity.inc + +; Information added by drupal.org packaging script on 2012-07-31 +version = "7.x-1.2" +core = "7.x" +project = "eva" +datestamp = "1343701935" + diff --git a/sites/all/modules/custom/eva/eva.module b/sites/all/modules/custom/eva/eva.module new file mode 100755 index 0000000000..25cf5b4e21 --- /dev/null +++ b/sites/all/modules/custom/eva/eva.module @@ -0,0 +1,244 @@ + 3, + ); +} + + +/** + * Implements hook_content_extra_fields(). + */ +function eva_field_extra_fields() { + $extras = array(); + $views = eva_get_views(); + + foreach ($views as $entity => $data) { + foreach ($data as $view) { + foreach ($view['bundles'] as $bundle) { + $extras[$entity][$bundle]['display'][$view['name'] . '_' . $view['display']] = array( + 'label' => (empty($view['title'])) ? $view['name'] : $view['title'], + 'description' => $view['title'], + 'weight' => 10, + ); + // Provide a separate extra field for the exposed form if there is any. + if ($view['exposed form']) { + $extras[$entity][$bundle]['display'][$view['name'] . '_' . $view['display'] . '_' . 'form'] = array( + 'label' => ((empty($view['title'])) ? $view['name'] : $view['title']) . ' (' . t('Exposed form') . ')', + 'description' => t('The exposed filter form of the view.'), + 'weight' => 9, + ); + } + } + } + } + + return $extras; +} + +/** + * Implements hook_entity_view_alter(). + * + * This is a terrible, terrible hack that should not be necessary; taxonomy and + * some other entity types use fields, but don't implement hook_entity_view(). + * We have to ALTER those entity types after they're built. For the time being, + * we'll use a list of special cases to trigger this special handling. + */ +function eva_entity_view_alter(&$build, $type) { + $view_mode = $build['#view_mode']; + $language = $build['#language']; + + $entity_data = entity_get_info($type); + $entity = _eva_extract_entity_from_build($build); + + $entity_ids = entity_extract_ids($type, $entity); + $settings = field_view_mode_settings($type, $entity_ids[2]); + $fields = field_extra_fields_get_display($type, $entity_ids[2], $view_mode); + $views = eva_get_views($type); + + foreach ($views as $info) { + $longname = $info['name'] .'_'. $info['display']; + if (isset($fields[$longname]) && $fields[$longname]['visible']) { + if ($view = views_get_view($info['name'])) { + $view->set_display($info['display']); + if ($view->access($info['display'])) { + $view->current_entity = $entity; + + if (isset($fields[$longname . '_form']) && $fields[$longname . '_form']['visible']) { + $view->init_handlers(); + $exposed_form = $view->display_handler->get_plugin('exposed_form'); + + $build[$longname . '_form'] = array( + '#markup' => $exposed_form->render_exposed_form(TRUE), + ); + } + $result = $view->execute_display($info['display']); + if (!empty($result)) { + $build[$longname] = array( + '#markup' => $result, + '#weight' => $fields[$longname]['weight'], + ); + } + } + } + } + } +} + +/** + * Get a list of views and displays attached to speficic entities. + * + * This function will cache its results into the views cache, so it gets + * cleared by Views appropriately. + * + * @param $type + * The entity type we want to retrieve views for. If NULL is + * specified, views for all entity types will be returned. + * @param $reset + * Force a rebuild of the data. + * @return + * An array of view name/display name values, or an empty array(). + */ +function eva_get_views($type = NULL, $reset = FALSE) { + $used_views = &drupal_static(__FUNCTION__); + + if (!isset($used_views) || $reset) { + views_include('cache'); + + // If we're not resetting, check the Views cache. + if (!$reset) { + $cache = views_cache_get("eva"); + if (isset($cache->data)) { + $used_views = $cache->data; + } + } + + // If it's still empty rebuild it. + if (!isset($used_views)) { + // Trigger a rebuild of the views object cache, which may not be fully loaded. + ctools_include('export'); + ctools_export_load_object_reset('views_view'); + + // Build and cache the data, both in the DB and statically. + $views = views_get_applicable_views('uses hook entity view'); + foreach ($views as $data) { + list($view, $display_id) = $data; + $view_entity = $view->display_handler->get_option('entity_type'); + // Initialize handlers, to determine if the view uses exposed filters. + $view->init_handlers(); + $used_views[$view_entity][] = array( + 'name' => $view->name, + 'title' => 'EVA: ' . $view->get_human_name() . ' - ' . $view->display[$display_id]->display_title, + 'display' => $display_id, + 'bundles' => $view->display_handler->get_option('bundles'), + 'exposed form' => $view->display_handler->uses_exposed(), + ); + $view->destroy(); + } + views_cache_set("eva", $used_views); + } + } + + // Now spit back the data. + if (isset($type) & isset($used_views)) { + return isset($used_views[$type]) ? $used_views[$type] : array(); + } + else { + return isset($used_views) ? $used_views : array(); + } +} + +/** + * Extract an actual entity object from its $build array. + * + * This is a bit more complicated than it should be, since core entities, contrib + * entities, and contrib entities based on EntityAPI all store their junk in + * different slots of the build array. See http://drupal.org/node/1170198. + * + * @param $build + * The token string defined by the view. + * @param $entity_data + * The token type. + * + * I hate you, Milkman Dan. + */ +function _eva_extract_entity_from_build($build) { + // EntityAPI often sticks stuff in here. + if (!empty($build['#entity'])) { + return $build['#entity']; + } + + // Other entities stick them here! + elseif (!empty($build['#' . $build['#entity_type']])) { + return $build['#' . $build['#entity_type']]; + } + + // Some entities are naughty. + elseif ($build['#entity_type'] == 'user') { + return $build['#account']; + } + elseif ($build['#entity_type'] == 'taxonomy_term') { + return $build['#term']; + } + + return FALSE; +} + +/** + * Get view arguments array from string that contains tokens + * + * @param $string + * The token string defined by the view. + * @param $type + * The token type. + * @param $object + * The object being used for replacement data (typically a node). + * @return + * An array of argument values. + * + * @todo: security? + */ +function eva_get_arguments_from_token_string($string, $type, $object) { + $args = trim($string); + if (empty($args)) { + return array(); + } + $args = token_replace($args, array($type => $object), array('sanitize' => FALSE)); + return explode('/', $args); +} + +/** + * Implements hook_modules_enabled(). + */ +function eva_modules_enabled($modules) { + // Reset the static cache in case any of the enabled modules + // implement an eva view + drupal_static_reset('eva_get_views'); + cache_clear_all('*', 'cache_views', TRUE); +} + +/** + * Implements hook_modules_disabled(). + */ +function eva_modules_disabled($modules) { + // Reset the static cache in case any of the disabled modules + // implemented an eva view + drupal_static_reset('eva_get_views'); + cache_clear_all('*', 'cache_views', TRUE); +} + +/** + * Implements hook_form_FORM_ID_alter(). + */ +function eva_form_views_ui_edit_form_alter(&$form, &$form_state, $form_id) { + // Clear the field cache when views are saved. This will make sure newly + // created EVA views and/or exposed filters will appear. + $form['actions']['save']["#submit"][] = 'field_cache_clear'; +} \ No newline at end of file diff --git a/sites/all/modules/custom/eva/eva.theme.inc b/sites/all/modules/custom/eva/eva.theme.inc new file mode 100755 index 0000000000..d60caf2c85 --- /dev/null +++ b/sites/all/modules/custom/eva/eva.theme.inc @@ -0,0 +1,18 @@ +display_handler; + $vars['title'] = $display->get_option('show_title') ? filter_xss_admin($view->get_title()) : ''; +} + +function template_process_eva_display_entity_view(&$vars) { + template_process_views_view($vars); +} + diff --git a/sites/all/modules/custom/eva/eva.views.inc b/sites/all/modules/custom/eva/eva.views.inc new file mode 100755 index 0000000000..51994e9126 --- /dev/null +++ b/sites/all/modules/custom/eva/eva.views.inc @@ -0,0 +1,24 @@ + array( + 'entity_view' => array( + 'title' => t('EVA Field'), + 'help' => t("Display the view as a part of an entity's content."), + 'handler' => 'eva_plugin_display_entity', + 'theme' => 'eva_display_entity_view', + 'uses hook entity view' => TRUE, + 'use ajax' => TRUE, + 'use pager' => TRUE, + 'use more' => TRUE, + 'accept attachments' => TRUE, + 'admin' => t('Entity content'), + 'help topic' => 'display-entity', + ), + ), + ); +} diff --git a/sites/all/modules/custom/eva/eva_plugin_display_entity.inc b/sites/all/modules/custom/eva/eva_plugin_display_entity.inc new file mode 100755 index 0000000000..ae7366e4c4 --- /dev/null +++ b/sites/all/modules/custom/eva/eva_plugin_display_entity.inc @@ -0,0 +1,292 @@ + ''); + $options['bundles'] = array('default' => array()); + $options['argument_mode'] = array('default' => 'id'); + $options['default_argument'] = array('default' => ''); + $options['show_title'] = 0; + + return $options; + } + + /** + * Provide the summary for page options in the views UI. + * + * This output is returned as an array. + */ + function options_summary(&$categories, &$options) { + // It is very important to call the parent function here: + parent::options_summary($categories, $options); + + $categories['entity_view'] = array( + 'title' => t('Entity content settings'), + 'column' => 'second', + 'build' => array( + '#weight' => -10, + ), + ); + + if ($entity_type = $this->get_option('entity_type')) { + $entity_info = entity_get_info($entity_type); + $type_name = $entity_info['label']; + $bundle_names = array(); + foreach ($this->get_option('bundles') as $bundle) { + $bundle_names[] = $entity_info['bundles'][$bundle]['label']; + } + } + + $options['entity_type'] = array( + 'category' => 'entity_view', + 'title' => t('Entity type'), + 'value' => empty($type_name) ? t('None') : $type_name, + ); + + $options['bundles'] = array( + 'category' => 'entity_view', + 'title' => t('Bundles'), + 'value' => empty($bundle_names) ? t('None') : implode(', ', $bundle_names), + ); + + $argument_mode = $this->get_option('argument_mode'); + $options['arguments'] = array( + 'category' => 'entity_view', + 'title' => t('Arguments'), + 'value' => empty($argument_mode) ? t('None') : check_plain($argument_mode), + ); + + $options['show_title'] = array( + 'category' => 'entity_view', + 'title' => t('Show title'), + 'value' => $this->get_option('show_title') ? t('Yes') : t('No'), + ); + + if (module_exists('token')) { + // We must load token values here to show them on the options form. + drupal_add_js(drupal_get_path('module', 'token') . '/token.js'); + drupal_add_css(drupal_get_path('module', 'token') . '/token.css'); + drupal_add_library('token', 'treeTable'); + } + } + + /** + * Provide the default form for setting options. + */ + function options_form(&$form, &$form_state) { + // It is very important to call the parent function here: + parent::options_form($form, $form_state); + + $entity_info = entity_get_info(); + $entity_type = $this->get_option('entity_type'); + + switch ($form_state['section']) { + case 'entity_type': + foreach ($entity_info as $type => $info) { + if (!empty($info['view modes'])) { + $entity_names[$type] = $info['label']; + } + } + + $form['#title'] .= t('Entity type'); + $form['entity_type'] = array( + '#type' => 'radios', + '#required' => TRUE, + '#title' => t("Attach this display to the following entity type"), + '#options' => $entity_names, + '#default_value' => $this->get_option('entity_type'), + ); + break; + + case 'bundles': + foreach ($entity_info[$entity_type]['bundles'] as $bundle => $info) { + $options[$bundle] = $info['label']; + } + $form['#title'] .= t('Bundles'); + $form['bundles'] = array( + '#type' => 'checkboxes', + '#title' => t("Attach this display to the following bundles"), + '#options' => $options, + '#default_value' => $this->get_option('bundles'), + ); + break; + + case 'arguments': + $form['#title'] .= t('Arguments'); + $default = $this->get_option('argument_mode'); + $options = array( + 'none' => t("No special handling"), + 'id' => t("Use the ID of the entity the view is attached to"), + 'token' => t("Use tokens from the entity the view is attached to"), + ); + + $form['argument_mode'] = array( + '#type' => 'radios', + '#title' => t("How should this display populate the view's arguments?"), + '#options' => $options, + '#default_value' => $default, + ); + + $form['token'] = array( + '#type' => 'fieldset', + '#title' => t('Token replacement'), + '#collapsible' => TRUE, + '#states' => array( + 'visible' => array( + 'input:[name=argument_mode]' => array('value' => 'token'), + ), + ), + ); + + $form['token']['default_argument'] = array( + '#title' => t('Arguments'), + '#type' => 'textfield', + '#default_value' => $this->get_option('default_argument'), + '#description' => t('You may use token replacement to provide arguments based on the current entity. Separate arguments with "/".'), + ); + + if (module_exists('token')) { + $form['token']['tokens'] = array( + '#theme' => 'token_tree', + '#token_types' => array(token_get_entity_mapping('entity', $entity_type)), + ); + } + break; + + case 'show_title': + $form['#title'] .= t('Show title'); + $form['show_title'] = array( + '#type' => 'checkbox', + '#title' => t('Show the title of the view above the attached view.'), + '#default_value' => $this->get_option('show_title'), + ); + break; + } + + } + + function options_submit(&$form, &$form_state) { + // It is very important to call the parent function here: + parent::options_submit($form, $form_state); + + switch ($form_state['section']) { + case 'entity_type': + $new_entity = $form_state['values']['entity_type']; + $old_entity = $this->get_option('entity_type'); + + $this->set_option('entity_type', $new_entity); + if ($new_entity != $old_entity) { + // Each entity has its own list of bundles and view modes. If there's + // only one on the new type, we can select it automatically. Otherwise + // we need to wipe the options and start over. + $new_entity_info = entity_get_info($new_entity); + + $new_bundle_keys = array_keys($new_entity_info['bundles']); + $new_bundles = array(); + if (count($new_bundle_keys) == 1) { + $new_bundles[] = $new_bundle_keys[0]; + } + $this->set_option('bundles', $new_bundles); + } + break; + case 'bundles': + $this->set_option('bundles', array_values(array_filter($form_state['values']['bundles']))); + break; + case 'arguments': + $this->set_option('argument_mode', $form_state['values']['argument_mode']); + if ($form_state['values']['argument_mode'] == 'token') { + $this->set_option('default_argument', $form_state['values']['default_argument']); + } + else { + $this->set_option('default_argument', NULL); + } + break; + case 'show_title': + $this->set_option('show_title', $form_state['values']['show_title']); + break; + } + } + + function validate() { + $errors = parent::validate(); + + $entity_type = $this->get_option('entity_type'); + if (empty($entity_type)) { + $errors[] = t('Display @display must have an entity type selected.', array('@display' => $this->display->display_title)); + } + + $bundles = $this->get_option('bundles'); + if (empty($bundles)) { + $errors[] = t('Display @display must have at least one bundle selected.', array('@display' => $this->display->display_title)); + } + + return $errors; + } + + /** + * We have to run token replacement before the arguments are used. + */ + function pre_execute() { + // Call the parent setup function so we do not lose data. + parent::pre_execute(); + + if (isset($this->view->current_entity)) { + $entity = $this->view->current_entity; + $entity_type = $this->view->display_handler->get_option('entity_type'); + $entity_info = entity_get_info($entity_type); + + $arg_mode = $this->view->display_handler->get_option('argument_mode'); + if ($arg_mode == 'token') { + if ($token_string = $this->view->display_handler->get_option('default_argument')) { + // Now do the token replacement. + $token_values = eva_get_arguments_from_token_string($token_string, $entity_type, $entity); + $new_args = array(); + // We have to be careful to only replace arguments that have tokens. + foreach ($token_values as $key => $value) { + $new_args[$key] = $value; + } + + $this->view->args = $new_args; + } + } + elseif ($arg_mode == 'id') { + $this->view->args = array($entity->{$entity_info['entity keys']['id']}); + } + } + } + + /** + * Specify the path of the entity. + */ + function get_path() { + if (isset($this->view->current_entity)) { + $uri = entity_uri($this->view->display_handler->get_option('entity_type'), $this->view->current_entity); + if ($uri) { + $uri['options']['absolute'] = TRUE; + return url($uri['path'], $uri['options']); + } + } + return parent::get_path(); + } + + /** + * The display block handler returns the structure necessary for a block. + */ + function execute() { + // Prior to this being called, the $view should already be set to this + // display, and arguments should be set on the view. + if (!isset($this->view->override_path)) { + $this->view->override_path = $_GET['q']; + } + + $data = $this->view->render(); + if (!empty($this->view->result) || $this->get_option('empty') || !empty($this->view->style_plugin->definition['even empty'])) { + return $data; + } + } +} diff --git a/sites/all/modules/custom/features/API.txt b/sites/all/modules/custom/features/API.txt new file mode 100644 index 0000000000..ab0d0676d9 --- /dev/null +++ b/sites/all/modules/custom/features/API.txt @@ -0,0 +1,189 @@ + +Features 1.x API for Drupal 7.x +------------------------------- +This file contains documentation for two audiences: site builders interested in +creating and managing features and module developers interested in integrating +with the features module. + + +Terminology +----------- +- A **feature module** is a Drupal module that contains the `feature` key in its +`.info` file. This array describes the components that should be managed by +Features within the module. + +- A **component** is a configuration object that can be exported. Examples: a +view, content type or CCK field instance. + +- A **machine name** is a string identifier for a specific type of component and +should be unique within a single Drupal site. It should not be a numerically +generated serial id. + +- An **exportable** component is one that can be used solely from a default hook +in code and without an instance in the database. For example, a view that lives +in code does not need an entry in the database in order to be used. + +- A **faux-exportable** component is one that must exist in the database in +order to be used. Any exports of this component are used to create or +synchronize entries in the database that share the same machine name. + + +### Component states + +Features provides some infrastructure to determine the state of components on +the site. To determine the state of a component Features keeps track of three +things using an md5 hash of + +- current code for the component. This is the configuration as actually +represented in code by a given feature. + +- the most recent prior code state that differs from the current code state. For +example, if an `svn update` changes the configuration of a view, this stores the +code state *prior* to the update. + +- The "normal" component state. This is the configuration represented by the +component as stored in the database or the default component (with any changes +introduced by `drupal_alter()`) if no database override exists. + +Using these three values, Features determines a component to be in one of the +following five states: + +- **Default** (`FEATURES_DEFAULT`) The object has no database entry or the +database entry matches the state of the component in code. This should be the +default state of components after installing a feature. Updating the component +can be done by altering the code definition directly. + +- **Overridden** (`FEATURES_OVERRIDDEN`) The code remains constant but the +database object does not match the state of the component in code. Changes must +be reverted before the component can be updated from code. + +- **Needs review** (`FEATURES_NEEDS_REVIEW`) The previous code state, database +state, and current code state all differ. This occurs most commonly when a user +changes one of her components and then pulls updates to her codebase. Since +there is no way to tell whether the code state or the database state is more +recent/valid, user input is necessary to resolve this state. + +- **Rebuildable** (`FEATURES_REBUILDABLE`) This state only applies to +**faux-exportables** and indicates that the database component must and can be +safely updated from the code definition. The database entry does not match the +current code state but does match the previous code state. Features assumes that +in this scenario the user has made no substantive changes and the component can +be updated automatically. + +- **Rebuilding** (`FEATURES_REBUILDING`) This state is rarely seen and only +applies to **faux-exportables.** This state is shown when a +`FEATURES_REBUILDABLE` component is *currently* being synced to the database. +Usually this operation is very fast and short lived. However, if the operation +is interrupted (e.g. the server goes down) this state will be seen until the +rebuild locking semaphore is cleared. + + +How a feature is generated +-------------------------- +At a high level Features writes the code in a feature module using the following +steps: + +1. An `.info` file describing the components that should be included in a +Feature is generated. It is either read from an existing feature or generated +through the Features UI. + +2. Features converts the info file into an `$export` array which contains a list +of elements to be exported. Each component type is given a chance to add to the +export list as well as request that *other* components be given a second chance +to add to the `$export` array. + +3. If any additional components have been queued up in the `$pipe` we repeat +step 2 for each of the queued component types. + +4. Once a full `$export` array is populated each component renders items from +the `$export` array to PHP code as a exportable defaults hook. + +5. Finally, Features writes the code into files and delivers it as a +downloadable package (UI) or writes it directly to a module directory (drush). + +This workflow makes a variety of things possible: + +### Add components to a feature + +Add the components to the `features` array in the feature's `.info` file and run +`drush features-update`. The same operation can be performed using the +*Recreate* page in the Features UI. + +### Remove components from a feature + +Remove the corresponding component lines from the feature's `.info` file and run +`drush features-update`. The same operation can be performed using the +*Recreate* page in the Features UI. + +### Rename a component + +Rename a component by changing its name in the feature's `.info` file and the +key and name property of the exported object in the appropriate `.inc` file in +the feature. Note that any references in other configuration objects to the +previous name should also be updated. + + +Integrating your module with the Features API +--------------------------------------------- +This section is for developers interested in adding Features-based management +for the configuration objects in their modules. From the perspective of +Features, there are a few different ways that modules store their configuration: + +- In the `variable` table using `variable_set()`. If a module is using variables +for storing configuration, these variable settings can be exported with Features +by using the [Strongarm][1] module. + + **Features integration:** Install the Strongarm module. + +- Using a custom table with a serial ID for identifying configuration objects. +If this is the case, you will need to change your schema to use a string +identifier / machine name for each object. + + **Features integration:** Fix your schema first, then see below. + +- Using a custom table with a machine name identifier and custom exportables +handling (e.g. you have your own defaults hook handling and export generation). +If this is the case, you will need to implement many of the features hooks +yourself. + + **Features integration:** `hook_features_api()`, `hook_features_export()`, +`hook_features_export_render()`, `hook_features_export_options()`, +`hook_features_revert()`. + +- Using a custom table with CTools Export API integration. If this is the case, +Features will automatically have integration with your module. You can implement +any of the Features hooks in order to override the default CTools exportables +integration behavior. + + **Features integration:** Automatically provided. You may implement any of the +Features hooks where you need further customization for your configuration +object. + +If it isn't clear by now, we highly recommend using the [CTools][2] Export API +for adding exportables to your module. Stella has written a [fantastic HOWTO][3] +on using the CTools Export API that can get you started. + + +An overview of Features hooks +----------------------------- +Extensive documentation of the hooks provided by Features is available in +`features.api.php`. This section provides a short overview of each hook and its +role. + +- `hook_features_api()` defines one or more component types that are available +to Features for export and a variety of settings for each type. +- `hook_features_export()` processes a list of components, detecting any +dependencies or further components +- `hook_features_export_options()` provides an array of components that can be +exported for a given type. +- `hook_features_export_render()` renders a set of components to code as a +defaults hook. +- `hook_features_revert()` reverts components of a feature back to their default +state. +- `hook_features_rebuild()` updates faux-exportable components back to their +default state. Only applies to faux-exportables. + + +[1]: http://drupal.org/project/strongarm +[2]: http://drupal.org/project/ctools +[3]: http://civicactions.com/blog/2009/jul/24/using_chaos_tools_module_create_exportables diff --git a/sites/all/modules/custom/features/CHANGELOG.txt b/sites/all/modules/custom/features/CHANGELOG.txt new file mode 100644 index 0000000000..fcbfb4ebfa --- /dev/null +++ b/sites/all/modules/custom/features/CHANGELOG.txt @@ -0,0 +1,221 @@ +features DRUPAL-7--1-0 +---------------------- + +#1647894 by tim.plunkett: Fixed Features with page manager components are perpetually overridden. +#1635662 by donquixote: Fixed Undefined index: feature in features_get_info(). +Add missing taxonomy test file + +features DRUPAL-7--1-0-RC3 +-------------------------- + +#1429262 by joelcollinsdc, neochief: Added Allow component level reverting (without needing to go to interactive mode) in drush fr. +#1272586 by alexweber | stevector: Added Increment or directly set version number directly with drush features-update. +#1532422 by nadavoid: Fixed If the custom sort order of 'format_handlers()' is not maintained, some things can break. +#1564864 by jeffschuler: Fixed Mixup in hook_features_export_render() example. +#1567506 by Dave Reid: Fixed Unable to properly export or provide a locked field in a feature. +#1597792 by jessehs: Make sure all comments in created features end period. +#1599188 by jessehs: Move inline comment for empty feature .module file to @file doc block. +#1587200 by ericduran: Fixed Test module should be hidden. +#1574716 by bojanz: Fixed Avoid unnecessary cache rebuilds when creating and updating fields. +#1530386 by exratione, bojanz, kotnik: Avoid unnecessary cache rebuilds and improve installation performance. +#1489480 by Xen | dema502: Fixed drush:features-export Ambiguous component. +#1159390 by hefox | brad.bulger: Fixed incorrect revert hook name in features.api.php?. +#1493274 by hefox, neochief: Fixed Feature installed before Strongarm blocks all other variable imports. +#1537838 by hefox, JvE | Gisle: Fixed Upgrading to 7.x-1.0-rc2 (from rc1) breaks taxonomy creation. +#1447656 by bcmiller0, smk-ka: Added drush features-revert-all performance improvement. + +features DRUPAL-7--1-0-RC2 +-------------------------- + +#1529202 by mpotter, mstrelan: Fixed Unable to revert overrides because clear-block is now clearfix. +#1505044 by neochief: Fixed features_var_export() adds additional prefix to multiline strings contained in objects. +#1510710 by neochief: Fixed Incorrect key in features_include_defaults() with reset parameters. +#1402262 by hefox: Fixed features.api.php mentions 'features_source()' key, but the actual key in use is 'feature_source()'. +#939254 by hefox, fago: Added Return the () to hook_features_pipe_component_alter(). +#894572 by pearcec, eporama, Grayside, andrewlevine: Added Features with only module dependencies not recognized as features. +#1231118 by tim.plunkett, jhedstrom, nielsonm, arnested: Fixed Generate code according to coding standards. +#1493274 by neochief, hefox: Fixed Feature installed before Strongarm blocks all other variable imports. +#1287594 by tim.plunkett: Don't wrap .info file values in double quotes. +#1437388 by hefox: Fixed check if file exists before including it in features_include(). +#1496322 by hefox, dajjen: Added Make package autocomplete search string case insensitive . +#1279938 by derhasi, helmo: Added Features support for languages. +#1305048 by mongolito404: Fixed Undefined index error in user_permission_features_export_render(). +#1063204 by careernerd, davidwhthomas, hefox | mrfree: Fixed Adding a new permission causes integrity constraint violation. +#1432264 by ezra-g, tim.plunkett | samhassell: Fixed Changes to hook_views_api() cause Views plugins to be undefined. +Revert "Issue #1432264 by ezra-g, tim.plunkett | samhassell: Fixed Changes to hook_views_api() cause Views plugins to be undefined." + +features DRUPAL-7--1-0-RC1 +-------------------------- + +#1331278 by Xen, tim.plunkett, joelcollinsdc, mpotter: Drush features-add and features-export are confusingly simi +#1475780 by rggoode: Added Prevent starting features machine name starting with numeric. +#1402826 by mpotter: Added Make 'Checking...' a link. +#1478808 by mpotter: Added Why is Description field required?. +#1279938 by derhasi, helmo: Added Features support for languages. +#1009900 by DamienMcKenna: Check if a variable is empty before comparing it to a known value. +#1426452 by mpotter, rypit: Added Conflicts with disabled modules should be colored differently. +#984472 by hefox, goron, Sarenc, mpotter: Added hook_node_info_alter(), and alter_type(), alter_hook() to features +#1478808 by mpotter: Added Why is Description field required?. +#1479068 by mpotter: Added Allow exportable code written to different files. +#1058778 by dajjen | nymo: Added ability to edit package of feature when creating/editing features via the UI. +#1429408 by joelcollinsdc: Fixed Diff page does not show component titles. +#1264826 by Volx, hefox | mortendk: Fixed revert views calls views delete() & throws a fatal error . +#1432264 by ezra-g, tim.plunkett | samhassell: Fixed Changes to hook_views_api() cause Views plugins to be undefin +#1479068 by mpotter: Added Allow exportable code written to different files. +#1437370 by hefox: Fixed . is being mapped to ord(',') instead of ord('.') in features_dom_encode_options()/featur +Added a README section about security concerns +Updated some docs, specifically the maintainers +#1231118 by jhedstrom: Generate code according to coding standards when using include_once. +#1305194 by hefox,Xen,mpotter: Provide support for exporting of altering of components +#1305194 by smk-ka,jief: Taxonomy reference field export recursion +#1390848: Fixing a slight bug from the previous patch that lead to wrong components being shown as being able to b +#1390848 by hefox: Centralize the call to hook_features_api() +Updated the features_test Feature +#1399440 by hefox: Fixed Feature tests failure on image against drupal 7.10. + +features DRUPAL-7--1-0-BETA6 +---------------------------- + +#1382156 by tim.plunkett | davidn: Fixed PHP Fatal error: Call to undefined function ctools_features_declare_funct + +features DRUPAL-7--1-0-BETA5 +---------------------------- + +#1363284 by tim.plunkett, mpotter: Fixed Drush --force option is declared wrong. +#1079440 by mpotter, mrf, tobby, acrollet, donquixote: Fixed Module name check prevents panels custom content pane +#1152908 by greg.1.anderson, msonnabaum, smk-ka, rbayliss: Fixed Remove calls to drush_backend_invoke() +#813760 by galooph, tim.plunkett, Volx, raphaelhuefner | greg.harvey: Fixed CTools Page manager pages do not rever +#904558 by hefox, voxpelli, Raines37 | loze: Fixed Multiple features and strongarm conflicts. +#1170846 by Ravi.J: Fixed Disabling a feature does not disable dependent modules. +#1313744 by TravisCarden: Fixed Sort 'Edit components' SELECT alphabetically. +Made the Features Test not hidden, b/c if it is hidden it wont enable/install the content type +#1300780 by Dave Reid: Added Provide an actual hook_features_pipe_alter() for general altering. +#1178884 by YaderV | altfuns: Fixed Wrong word (with) in a description text. +#893360 by Xen, Raines37, Grayside, franz: Added Drush update/recreate (add components). +#913890 by Grayside, joshuajabbour, tim.plunkett | webchick: Added Generate .info file properties in order consist +#1288028 by DamienMcKenna: Fixed D7 branch refers to D6 CCK hook. +#1187232 by Ravi.J, rickvug: Fixed Hidden and disabled features should not be displayed in UI and should not be co + +features DRUPAL-7--1-0-BETA4 +---------------------------- + +Fixing naming conflict b/w hook_enable and hook_disable +#1187858 by smk-ka, febbraro: Fixed Node permissions fail to import. +#1191558 by clemens.tolboom, Raines37: Allow for drush --destination while exporting a feature. +#1188066 by smk-ka, febbraro: Fixed Excessive rebuilding if installing more than one feature at a time. +#1260040 by tim.plunkett | hefox: Fixed features.css does not follow coding standards. +#1195432: Fixing admin screen regression +#1195432 by smk-ka: Use dependency information when importing +#1186874 by dixon_: Better support for switching field storage types +#1175684 by sagannotcarl, rocket.nova: Add legend/help to features-diff +#1210604 by catch: drush features-revert-all does not respect --force argument +#954062 by irakli, hefox: Incorrect Component Labels in the Components Dropdown +#1186694 by tunic, fearlsgroove: Features orders exportes recursivally; fields allowed_values array alphabetized, +#935152 by adamdicarlo, hadsie, hefox: Menu Items missing from Menu Links due to access callback user_is_anonymous +#1258072 by hefox: Add suggestion for vocabulary when exporting a taxonomy field +#1279212: add Features Breadcrumb +Fixed the display of conflicting features. It was borked big time. +#1219932 bu acrollet, t-dub, Nico Heulsen: Problems when dependencies have version numbers in them +#1055460 by nedjo, hefox, fabsor, others...: Disabling a feature does not allow user to delete content type +#994602 by franz: Misleading example on hook_features_export_alter() documentation +#1264462 by Dave Reid, skwashd: template_preprocess_features_admin_components() calls D6-style theme() arguments +#1131062: scripts/stylesheets manually added to info file have the path broken +#946068 by rvilar, hefox: The machine name isn't updating correctly +#1079440 by mrf, DamienMcKenna, dereine: Allow export of Custom Content Panes +#1231118 by arnested, tim.plunkett: Coder fixes + +features DRUPAL-7--1-0-BETA3 +---------------------------- + +#1177582 by paulsheldrake: Missing ctools plugin include +#1191670: Undefined FEATURES_COMPONENT_NOT_FOUND in features.drush.inc +#1157048 by dixon_: Features appear overridden +#1124422 by anantagati: Wrong links in README +#932104 by aaronbauman, hefox, etc.: Improve help for feature export drush command +#1094940 by webflo: Features unit test are broken +#1134202: Overridden views not reverting +#1097560 by nedjo: Features incompatible with latest version of views + +features DRUPAL-7--1-0-BETA2 +---------------------------- + +#1111714 by paranojik: _features_restore() does not properly revert components. +#1070912 by bdragon: features_get_info() hands back original objects, can get corrupted. +#1073988 by mikewink: File formats should be labeled text formats for consistency. +removing unnecessary and typo-including check on plugin_api_hook_name +removed duplicate ctools_plugin_api_get_hook function since new ctools is now released and it's unnecessary +#1097560 by floretan, quartsize, merlinofchaos: Features incompatible with the latest version of views. +Fixing unit test for permissions that broke as a result of #1063204 +Fixed the sanitize as it was incorrectly misidentifying a one item associative array as non-associative. +Merge branch '7.x-1.x' of git.drupal.org:project/features into 7.x-1.x +#1063204 by mrfree, careernerd, hadsie, irakli: Adding a new user role causes integrity constraing violation. +Fixed E_STRICT warnings +Merge branch '7.x-1.x' of git.drupal.org:project/features into 7.x-1.x +#973836 by fmitchell, Grayside: Add @file to the generated files +#1078972 by bdragon: Quoting problems on key side. +Removing translation directories +Stripping CVS keywords + +features DRUPAL-7--1-0-BETA1 +---------------------------- + +#993314 by das-peter: Notice 'undefined index' in features_export_build_form_populate. +adding warning @TODO to note an edge case that is not covered by existing code when checking if .module includes feature +#1053336 by tema: Translatables are not exported for fields. +#970788 by mori, das_peter, steinmb: Notice: Undefined index: api in _ctools_features_get_info() // error from featu +#1062526 by fago, dasjo: components appear always overriden if the default hook makes use of hook-group. +#954536 by klausi: Unsetting ids on vocabulary object breaks Entity Cache. +#1014066 by brenk28: Improper use of t(). +#994122 by hadsie: Feature conflicts report displays conflicting features as Array instead of proper feature name. +#953236 by isolesen, grobot : Make the Manage Features page more descriptive when there are no features. +cleaning up previous somewhat extraneous commit and making first attempt towards fixing: #986118. Full fix of that one s +#944584 by Rok Žlender, pcambra: Features diff in drush is broken. +#1056422 by EclipseGc: Attribute Classes are Arrays in D7. +Follow up to previous commit, actually ordering array correctly. +Fix tab rendering on admin/build/features. +Updated the filter test +Utilize filter format machine names which core now provides. + +features DRUPAL-7--1-0-ALPHA3 +----------------------------- + +Update filter component to make use of machine names if available. +PHP declaration. +Update features_test field export to match changes in core. +Several test fixes. +Use features_get_default() rather than module_invoke(). +Remove old schema check. +#925628 by thill_: Fix example version strings. +#925332 by joshuajabbour: Cleaner export render for ctools components. + +features DRUPAL-7--1-0-ALPHA2 +----------------------------- + +Update features.api.php. +#919500 by fago: Enable generic feature implementations. Introduces 'base' key in hook_features_api(). +#912132 by das-peter, fago: Implement hook_hook_info() entry for 'features_api'. +Properly support 'hidden' key in D7. +Fix function signature of features_export_prepare(). +Fix for menu links export options. +Exclude bundles info from field config. +Exclude 'module' key from image style export. +Prevent features from going haywire when attempting to detect conflict with components it doesn't know about. +Sorting field definitions before exporting. +Removing non-class files from files[] in fino. +Revert addition of files array to features. +#912018 by das-peter: Fix for duplicate files[] entries. +Remove unneeded context features hooks. +Fix features_get_orphans(). +#908390: Generate files[] array for features. + +features DRUPAL-7--1-0-ALPHA1 +----------------------------- + +D7: Update image styles component. +D7: Update hook_permission(). +D7: Remove _features_get_roles(). +D7: user_role and user_permission component upgrades. +D7: Update list of component includes. +D7: Filter format API updates. +D7: Fix for diff integration. +D7 fixes for menu_custom and menu_links components. diff --git a/sites/all/modules/custom/features/LICENSE.txt b/sites/all/modules/custom/features/LICENSE.txt new file mode 100644 index 0000000000..d159169d10 --- /dev/null +++ b/sites/all/modules/custom/features/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/sites/all/modules/custom/features/README.txt b/sites/all/modules/custom/features/README.txt new file mode 100644 index 0000000000..71bf938d4e --- /dev/null +++ b/sites/all/modules/custom/features/README.txt @@ -0,0 +1,236 @@ + +Current state of Features for Drupal 7 +-------------------------------------- +Work on Features for D7 is currently aimed at getting to a point where Features +can be used on a new install of Drupal 7 with features that were created on D7. +Once this has been achieved, we will begin working on supporting D6 features as +well as possibly supporting upgrades & migrations between legacy components and +new equivalents (e.g. CCK to fields, imagecache to core image styles). + +### Working components + +- ctools +- dependencies +- field +- filter +- image +- menu_custom +- menu_links +- node +- taxonomy +- user_permission +- user_role +- views + +### Has changes to export format between D6 and D7 + +(@TODO legacy export compatibility) + +- filter +- taxonomy + +### Requires upgrade/migration path + +- imagecache > image +- content > field + +Note on the "Generate Feature" capability +----------------------------------------- +Features 7.x-2.x includes the ability to "Generate a feature" which saves it +to the server disk. This can be a time-saving task in development. It requires +the webserver to be able to write to the very code running the site and is +not recommended for any environment other than a firewalled-off, local +development environment (e.g. a person working alone on their laptop). + +Features 1.x for Drupal 7.x +--------------------------- +The features module enables the capture and management of features in Drupal. A +feature is a collection of Drupal entities which taken together satisfy a +certain use-case. + +Features provides a UI and API for taking different site building components +from modules with exportables and bundling them together in a single feature +module. A feature module is like any other Drupal module except that it declares +its components (e.g. views, contexts, CCK fields, etc.) in its `.info` file so +that it can be checked, updated, or reverted programmatically. + +Examples of features might be: + +- A blog +- A pressroom +- An image gallery +- An e-commerce t-shirt store + + +Installation +------------ +Features can be installed like any other Drupal module -- place it in the +modules directory for your site and enable it on the `admin/build/modules` page. +To take full advantage of some of the workflow benefits provided by Features, +you should install [Drush][1]. + +If you plan on creating or working with very large features (greater than 1000 +items), you may need to increase PHP's max_input_vars configuration directive. +For example, adding the following line to your .htaccess file will increase the +max_input_vars directive to 3000: + +php_value max_input_vars 3000 + +If you are using Suhosin, increasing suhosin.get.max_vars, +suhosin.post.max_vars, and suhosin.request.max_vars may also be necessary. + + +Basic usage +----------- +Features is geared toward usage by developers and site builders. It +is not intended to be used by the general audience of your Drupal site. +Features provides tools for accomplishing two important tasks: + +### Task 1: Export features + +You can build features in Drupal by using site building tools that are supported +(see a short list under the *Compatibility* section). + +Once you've built and configured functionality on a site, you can export it into +a feature module by using the feature create page at +`admin/structure/features/create`. + + +### Task 2: Manage features + +The features module also provides a way to manage features through a more +targeted interface than `admin/modules`. The interface at +`admin/structure/features` shows you only feature modules, and will also inform you +if any of their components have been overridden. If this is the case, you can +also re-create features to bring the module code up to date with any changes +that have occurred in the database. + + +Including custom code and adding to your feature +------------------------------------------------ +Once you've exported your feature you will see that you have several files: + + myfeature.info + myfeature.module + myfeature.[*].inc + +You can add custom code (e.g. custom hook implementations, other functionality, +etc.) to your feature in `myfeature.module` as you would with any other module. +Do not change or add to any of the features `.inc` files unless you know what +you are doing. These files are written to by features on updates so any custom +changes may be overwritten. + + +Using Features to manage development +------------------------------------ +Because Features provides a centralized way to manage exportable components and +write them to code it can be used during development in conjunction with a +version control like SVN or git as a way to manage changes between development, +staging and production sites. An example workflow for a developer using Features +is to: + +1. Make configuration changes to a feature on her local development site. +2. Update her local feature codebase using `drush features-update`. +3. Commit those changes using `svn commit`. +4. Roll out her changes to the development site codebase by running `svn update` + on the server. Other collaborating developers can also get her changes with + `svn update`. +5. Reverting any configuration on the staging site to match the updated codebase +by running `drush features-revert`. +6. Rinse, repeat. + +Features also provides integration with the [Diff][3] module if enabled to show +differences between configuration in the database and that in code. For site +builders interested in using Features for development, enabling the diff module +and reading `API.txt` for more details on the inner workings of Features is +highly recommended. + + +Drush usage +----------- +(requires Drush v4.5 or higher) + +Features provides several useful drush commands: + +- `drush features` + + List all the available features on your site and their status. + +- `drush features-export [feature name] [component list]` + + Write a new feature in code containing the components listed. + If called with no arguments, display a list of available components. + If called with one argument, take the argument as a component name and + attempt to create a feature with the same name. + + The option '--destination=foo' may be used to specify the path (from Drupal + root) where the feature should be created. The default destination is + 'sites/all/modules', though this can be overridden via the Features + settings page. + +- `drush features-update [feature name]` + + Update the code of an existing feature to include any overrides/changes in + your database (e.g. a new view). + +- `drush features-revert [feature name]` + + Revert the components of a feature in your site's database to the state + described in your feature module's defaults. + +- `drush features-diff [feature name]` + + Show a diff between a feature's database components and those in code. + Requires the Diff module. + +Additional commands and options can be found using `drush help`. + + +Compatibility +------------- +Features provides integration for the following exportables: + +- CTools export API implementers (Context, Spaces, Boxes, Strongarm, Page + Manager) +- ImageCache +- Views +- [Other contributed modules][2] + +Features also provides faux-exportable functionality for the following Drupal +core and contrib components: + +- Fields +- Content types +- Input filters +- User roles/permissions +- Custom menus and menu links * +- Taxonomy vocabularies + +* Currently in development. + + +Security Concerns +----------------- +If you are using Features to export Roles and also use those Roles in other +exportable code (like Views filters) you can wind up with an unintended +security hole. When you import your Feature, if the Roles do not get created +with the exact same Role IDs then your Views filters (or other component) will +be referencing a different Role than you intended. + + +For developers +-------------- +Please read `API.txt` for more information about the concepts and integration +points in the Features module. + + +Maintainers +----------- +- febbraro (Frank Febbraro) +- hefox (Fox) +- mpotter (Mike Potter) +- timplunkett (Tim Plunkett) + + +[1]: http://drupal.org/project/drush +[2]: (http://drupal.org/taxonomy/term/11478) diff --git a/sites/all/modules/custom/features/features.admin.inc b/sites/all/modules/custom/features/features.admin.inc new file mode 100644 index 0000000000..c2cc508932 --- /dev/null +++ b/sites/all/modules/custom/features/features.admin.inc @@ -0,0 +1,1589 @@ + 'fieldset', + '#title' => t('Show components on create/edit feature form.'), + '#description' => t('Components with no options will not be shown no matter the setting below. Disabled components cannot be used with admin form.') + ); + + $form['lock_components'] = array( + '#type' => 'fieldset', + '#title' => t('Lock components'), + '#description' => t('Locked components will be prevented from ever being reverted. For example, if site builder updates a feature with new settings for a field instance, but field instance is locked, it will not update that field. If the item is purely in code, like a view, the view changed when the code is updated no matter these settings.') + ); + $form['features_lock_mode'] = array( + '#type' => 'radios', + '#title' => t('Features lock mode'), + '#options' => array( + 'rebuild' => t('Allow rebuild (prevent revert)'), + 'all' => t('Prevent rebuild and revert'), + ), + '#description' => t('Rebuild will allow the feature to be updated till the point features has detected that the item has changed deliberately on the site, e.g. is overriden.'), + '#default_value' => variable_get('features_lock_mode', 'all'), + ); + foreach ($components as $component => $info) { + if (empty($info['feature_source']) && empty($info['features_source'])) { + continue; + } + $form['show_components']['features_admin_show_component_' . $component] = array( + '#title' => t('@name (@machine)', array('@name' => $info['name'], '@machine' => $component)), + '#type' => 'checkbox', + '#default_value' => variable_get('features_admin_show_component_' . $component, TRUE), + ); + if (features_hook($component, 'features_revert') || features_hook($component, 'features_rebuild')) { + $form['lock_components']['features_component_locked_' . $component] = array( + '#title' => t('@name (@machine)', array('@name' => $info['name'], '@machine' => $component)), + '#type' => 'checkbox', + '#default_value' => variable_get('features_component_locked_' . $component, FALSE), + ); + } + if ($component == 'menu_links' && ($menus = menu_get_menus())) { + $form['show_components']['features_admin_menu_links'] = array( + '#title' => t('Advanced Menu Link Settings'), + '#type' => 'fieldset', + '#collapsed' => TRUE, + '#collapsible' => TRUE, + '#states' => array( + 'invisible' => array( + 'input[name="features_admin_show_component_menu_links"]' => array('checked' => FALSE), + ), + ), + ); + $form['show_components']['features_admin_menu_links']['features_admin_menu_links_menus'] = array( + '#title' => t('Allowed menus for menu links'), + '#type' => 'checkboxes', + '#options' => array_map('check_plain', $menus), + '#default_value' => variable_get('features_admin_menu_links_menus', array_keys(menu_get_menus())), + ); + } + } + + $form['general'] = array( + '#title' => t('General settings'), + '#type' => 'fieldset', + ); + $form['general']['features_default_export_path'] = array( + '#title' => t('Default export path'), + '#type' => 'textfield', + '#default_value' => variable_get('features_default_export_path', FEATURES_DEFAULT_EXPORT_PATH), + '#description' => t('All feature exports will be automatically saved to this path, unless overridden on the individual feature.'), + ); + $form['general']['features_rebuild_on_flush'] = array( + '#type' => 'checkbox', + '#title' => t('Rebuild features on cache clear'), + '#default_value' => variable_get('features_rebuild_on_flush', TRUE), + '#description' => t('If you have a large site with many features, you may experience lag on full cache clear. If disabled, features will rebuild only when viewing the features list or saving the modules list.'), + ); + + return system_settings_form($form); +} + +/** + * Form constructor for features export form. + * + * Acts as a router based on the form_state. + * + * @param object|null $feature + * The feature object, if available. NULL by default. + * + * @see features_export_build_form_submit() + * @ingroup forms + */ +function features_export_form($form, $form_state, $feature = NULL) { + module_load_include('inc', 'features', 'features.export'); + features_include(); + + $feature_name = !empty($feature->name) ? $feature->name : ''; + $form = array( + '#attributes' => array('class' => array('features-export-form')), + '#feature' => isset($feature) ? $feature : NULL, + ); + $form['info'] = array( + '#type' => 'fieldset', + '#title' => t('General Information'), + '#tree' => FALSE, + '#weight' => 2, + '#collapsible' => FALSE, + '#collapsed' => FALSE, + '#prefix' => "
    ", + '#suffix' => '
    ', + ); + $form['info']['name'] = array( + '#title' => t('Name'), + '#description' => t('Example: Image gallery') . ' (' . t('Do not begin name with numbers.') . ')', + '#type' => 'textfield', + '#default_value' => !empty($feature->info['name']) ? $feature->info['name'] : '', + ); + $form['info']['module_name'] = array( + '#type' => 'machine_name', + '#title' => t('Machine-readable name'), + '#description' => t('Example: image_gallery') . '
    ' . t('May only contain lowercase letters, numbers and underscores. Try to avoid conflicts with the names of existing Drupal projects.'), + '#required' => TRUE, + '#default_value' => $feature_name, + '#machine_name' => array( + 'exists' => 'features_export_form_module_name_exists', + 'source' => array('info', 'name'), + ), + ); + // If recreating this feature, disable machine name field to ensure the + // machine name cannot be changed, unless user role has granted permission to + // edit machine name of disabled features. + if (isset($feature) && ($feature->status || !user_access('rename features'))) { + $form['info']['module_name']['#value'] = $feature_name; + $form['info']['module_name']['#disabled'] = TRUE; + } + $form['info']['description'] = array( + '#title' => t('Description'), + '#description' => t('Provide a short description of what users should expect when they enable your feature.'), + '#type' => 'textfield', + '#default_value' => !empty($feature->info['description']) ? $feature->info['description'] : '', + ); + $form['info']['package'] = array( + '#title' => t('Package'), + '#description' => t('Organize your features in groups.'), + '#type' => 'textfield', + '#autocomplete_path' => 'features/autocomplete/packages', + '#default_value' => !empty($feature->info['package']) ? $feature->info['package'] : 'Features', + ); + $form['info']['version'] = array( + '#title' => t('Version'), + '#description' => t('Examples: 7.x-1.0, 7.x-1.0-beta1'), + '#type' => 'textfield', + '#required' => FALSE, + '#default_value' => !empty($feature->info['version']) ? $feature->info['version'] : '', + '#size' => 30, + '#element_validate' => array('features_export_form_validate_field'), + ); + $form['advanced'] = array( + '#type' => 'fieldset', + '#title' => t('Advanced Options'), + '#tree' => FALSE, + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#weight' => 10, + '#prefix' => "
    ", + '#suffix' => '
    ', + ); + $form['advanced']['project_status_url'] = array( + '#title' => t('URL of update XML'), + '#description' => t('URL of Feature Server. For Example: http://mywebsite.com/fserver'), + '#type' => 'textfield', + '#required' => FALSE, + '#default_value' => !empty($feature->info['project status url']) ? $feature->info['project status url'] : '', + '#element_validate' => array('features_export_form_validate_field'), + ); + $directory = (!empty($feature->filename)) ? dirname($feature->filename) : variable_get('features_default_export_path', FEATURES_DEFAULT_EXPORT_PATH); + if (!empty($feature_name) && substr_compare($directory, $feature_name, strlen($directory)-strlen($feature_name), strlen($feature_name)) === 0) { + // if path ends with module_name, strip it + $directory = dirname($directory); + } + if (user_access('generate features')) { + $form['advanced']['generate_path'] = array( + '#title' => t('Path to Generate feature module'), + '#description' => t('File path for feature module. For Example: sites/all/modules/features or /tmp. ' . + t('Leave blank for @path', array('@path' => $directory))), + '#type' => 'textfield', + '#required' => FALSE, + '#default_value' => !empty($feature->info['project path']) ? $feature->info['project path'] : '', + ); + $form['advanced']['generate'] = array( + '#type' => 'submit', + '#value' => t('Generate feature'), + '#submit' => array('features_export_build_form_submit'), + ); + } + // build the Component Listing panel on the right + _features_export_form_components($form, $form_state); + + $form['advanced']['info-preview'] = array( + '#type' => 'button', + '#value' => t('Preview .info file'), + '#ajax' => array( + 'callback' => 'features_info_file_preview', + 'wrapper' => 'features-export-wrapper', + ), + ); + //Info dialog + $form['advanced']['info-file'] = array( + '#prefix' => '
    ', + 'text' => array( + '#type' => 'textarea', + '#default_value' => '', + '#resizable' => FALSE, + ), + '#suffix' => '
    ', + ); + + $form['buttons'] = array( + '#theme' => 'features_form_buttons', + '#tree' => FALSE, + '#weight' => 99, + '#prefix' => "
    ", + '#suffix' => '
    ', + ); + $form['buttons']['submit'] = array( + '#type' => 'submit', + '#value' => t('Download feature'), + '#weight' => 10, + '#submit' => array('features_export_build_form_submit'), + ); + + $form['#attached']['library'][] = array('system', 'ui.dialog'); + + return $form; +} + +/** + * Machine name existence callback for the module name. + */ +function features_export_form_module_name_exists($value) { + return (bool) features_get_info('module', $value); +} + +/** + * Return the render array elements for the Components selection on the Export form + * @param array $feature - feature associative array + * @param array $components - array of components in feature + */ +function _features_export_form_components(&$form, &$form_state) { + global $features_ignore_conflicts; + drupal_add_css(drupal_get_path('module', 'features') . '/features.css'); + drupal_add_js(drupal_get_path('module', 'features') . '/features.js'); + + $feature = $form['#feature']; + + // keep the allow_conflict variable around in the session + if (isset($form_state['values']['features_allow_conflicts'])) { + $_SESSION['features_allow_conflicts'] = $form_state['values']['features_allow_conflicts']; + $features_ignore_conflicts = $_SESSION['features_allow_conflicts']; + } + + $form['export'] = array( + '#type' => 'fieldset', + '#title' => t('Components'), + '#description' => t('Expand each component section and select which items should be included in this feature export.'), + '#tree' => FALSE, + '#prefix' => "
    ", + '#suffix' => '
    ', + '#collapsible' => FALSE, + '#collapsed' => FALSE, + '#weight' => 1, + ); + + // filter field used in javascript, so javascript will unhide it + $form['export']['features_filter_wrapper'] = array( + '#type' => 'fieldset', + '#title' => t('Filters'), + '#tree' => FALSE, + '#prefix' => "
    ", + '#suffix' => '
    ', + '#collapsible' => FALSE, + '#collapsed' => FALSE, + '#weight' => -10, + ); + $form['export']['features_filter_wrapper']['features_filter'] = array( + '#type' => 'textfield', + '#title' => t('Search'), + '#hidden' => TRUE, + '#default_value' => '', + '#suffix' => "". t('Clear') ."", + ); + $form['export']['features_filter_wrapper']['checkall'] = array( + '#type' => 'checkbox', + '#default_value' => FALSE, + '#hidden' => TRUE, + '#title' => t('Select all'), + '#attributes' => array( + 'class' => array('features-checkall'), + ) + ); + + $form['advanced']['features_autodetect_wrapper'] = array( + '#type' => 'fieldset', + '#tree' => FALSE, + '#prefix' => "
    ", + '#suffix' => '
    ', + '#collapsible' => FALSE, + '#collapsed' => FALSE, + ); + $form['advanced']['features_autodetect_wrapper']['autodetect'] = array( + '#title' => t('Add auto-detected dependencies'), + '#type' => 'checkbox', + '#default_value' => !empty($feature->info['no autodetect']) ? FALSE : TRUE, + ); + + // this refresh button will rebuild the form. + // this button is hidden by javascript since it is only needed when + // javascript is not available + $form['advanced']['features_autodetect_wrapper']['features_refresh'] = array( + '#type' => 'submit', + '#value' => t('Refresh'), + '#name' => 'features-refresh', + '#attributes' => array( + 'title' => t("Refresh the list of auto-detected items."), + 'class' => array('features-refresh-button'), + ), + '#submit' => array('features_export_form_rebuild'), + '#prefix' => "
    ", + '#suffix' => "
    ", + '#ajax' => array( + 'callback' => 'features_export_form_ajax', + 'wrapper' => 'features-export-wrapper', + ), + ); + + // generate the export array for the current feature and user selections + $export = _features_export_build($feature, $form_state); + + $form['advanced']['features_allow_conflicts'] = array( + '#title' => t('Allow conflicts to be added'), + '#type' => 'checkbox', + '#default_value' => $features_ignore_conflicts, + '#ajax' => array( + 'callback' => 'features_export_form_ajax', + 'wrapper' => 'features-export-wrapper', + ), + ); + + if (isset($form_state['values']['op']) && ($form_state['values']['op'] == $form_state['values']['info-preview'])) { + // handle clicking Preview button + module_load_include('inc', 'features', 'features.export'); + + $feature_export = _features_export_generate($export, $form_state, $feature); + $feature_export = features_export_prepare($feature_export, $feature->name, TRUE); + $info = features_export_info($feature_export); + + drupal_add_js(array('features' => array('info' => $info)), 'setting'); + } + + // determine any components that are deprecated + $deprecated = features_get_deprecated($export['components']); + + $sections = array('included', 'detected', 'added'); + foreach ($export['components'] as $component => $component_info) { + if (!variable_get('features_admin_show_component_' . $component, TRUE)) { + continue; + } + + $component_items_count = count($component_info['options']['sources']); + $count_label = ' (' . $component_items_count . ')'; + $label = (isset($component_info['name']) ? + $component_info['name'] . $count_label . " (" . check_plain($component) . ")" + : check_plain($component) . $count_label); + + $count = 0; + foreach ($sections as $section) { + $count += count($component_info['options'][$section]); + } + $extra_class = ($count == 0) ? 'features-export-empty' : ''; + $component_name = str_replace('_', '-', check_plain($component)); + + if ($count + $component_items_count > 0) { + + if (!empty($deprecated[$component])) { + // only show deprecated component if it has some exports + if (!empty($component_info['options']['included'])) { + $form['export'][$component] = array( + '#markup' => '', + '#tree' => TRUE, + ); + + $form['export'][$component]['deprecated'] = array( + '#type' => 'fieldset', + '#title' => $label . " (" . t('DEPRECATED') . ")", + '#tree' => TRUE, + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#attributes' => array('class' => array('features-export-component')), + ); + $list = ' '; + foreach ($component_info['options']['included'] as $key) { + $list .= "$key"; + } + $form['export'][$component]['deprecated']['selected'] = array( + '#prefix' => "
    ", + '#markup' => $list, + '#suffix' => "
    ", + ); + } + } + else { + $form['export'][$component] = array( + '#markup' => '', + '#tree' => TRUE, + ); + + $form['export'][$component]['sources'] = array( + '#type' => 'fieldset', + '#title' => $label, + '#tree' => TRUE, + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#attributes' => array('class' => array('features-export-component')), + '#prefix' => "
    ", + ); + $form['export'][$component]['sources']['selected'] = array( + '#type' => 'checkboxes', + '#id' => "edit-sources-$component_name", + '#options' => features_dom_encode_options($component_info['options']['sources']), + '#default_value' => features_dom_encode_options($component_info['selected']['sources'], FALSE), + '#attributes' => array( + 'class' => array('component-select'), + ), + ); + + foreach ($sections as $section) { + $form['export'][$component][$section] = array( + '#type' => 'checkboxes', + '#options' => !empty($component_info['options'][$section]) ? + features_dom_encode_options($component_info['options'][$section]) : array(), + '#default_value' => !empty($component_info['selected'][$section]) ? + features_dom_encode_options($component_info['selected'][$section], FALSE) : array(), + '#attributes' => array('class' => array('component-' . $section)), + ); + } + $form['export'][$component][$sections[0]]['#prefix'] = + "
    "; + $form['export'][$component][$sections[count($sections)-1]]['#suffix'] = '
    '; + } + } + } + $form['export']['features_legend'] = array( + '#type' => 'fieldset', + '#title' => t('Legend'), + '#tree' => FALSE, + '#prefix' => "
    ", + '#suffix' => '
    ', + '#collapsible' => FALSE, + '#collapsed' => FALSE, + ); + $form['export']['features_legend']['legend'] = array( + '#markup' => + "Normal " . + "Changed " . + "Auto detected " . + "Conflict ", + ); +} + +/** + * Return the full feature export array based upon user selections in form_state + * @param array $feature Feature array to be exported + * @param array $form_state Optional form_state information for user selections + * can be updated to reflect new selection status + * @return array New export array to be exported + * array['components'][$component_name] = $component_info + * $component_info['options'][$section] is list of available options + * $component_info['selected'][$section] is option state TRUE/FALSE + * $section = array('sources', included', 'detected', 'added') + * sources - options that are available to be added to the feature + * included - options that have been previously exported to the feature + * detected - options that have been auto-detected + * added - newly added options to the feature + * + * NOTE: This routine gets a bit complex to handle all of the different possible + * user checkbox selections and de-selections. + * Cases to test: + * 1a) uncheck Included item -> mark as Added but unchecked + * 1b) re-check unchecked Added item -> return it to Included check item + * 2a) check Sources item -> mark as Added and checked + * 2b) uncheck Added item -> return it to Sources as unchecked + * 3a) uncheck Included item that still exists as auto-detect -> mark as Detected but unchecked + * 3b) re-check Detected item -> return it to Included and checked + * 4a) check Sources item should also add any auto-detect items as Detected and checked + * 4b) uncheck Sources item with auto-detect and auto-detect items should return to Sources and unchecked + * 5a) uncheck a Detected item -> refreshing page should keep it as unchecked Detected + * 6) when nothing changes, refresh should not change any state + * 7) should never see an unchecked Included item + */ +function _features_export_build($feature, &$form_state) { + global $features_ignore_conflicts; + // set a global to effect features_get_component_map when building feature + // hate to use a global, but it's just for an admin screen so probably ok + if (isset($_SESSION['features_allow_conflicts'])) { + $features_ignore_conflicts = $_SESSION['features_allow_conflicts']; + } + + $feature_name = isset($feature->name) ? $feature->name : NULL; + $conflicts = _features_get_used($feature_name); + $reset = FALSE; + if (isset($form_state['triggering_element']['#name']) && ($form_state['triggering_element']['#name'] == 'features_allow_conflicts')) { + // when clicking the Allow Conflicts button, reset the feature back to it's original state + $reset = TRUE; + } + + module_load_include('inc', 'features', 'features.export'); + features_include(); + + $components = features_get_components(); + uasort($components, 'features_compare_component_name'); + + // Assemble the combined component list + $stub = array(); + $sections = array('sources', 'included', 'detected', 'added'); + + // create a new feature "stub" to populate + + $stub_count = array(); + foreach ($components as $component => $component_info) { + if ($reset) { + unset($form_state['values'][$component]); + } + if (!variable_get('features_admin_show_component_' . $component, TRUE)) { + unset($components[$component]); + continue; + } + // User-selected components take precedence. + $stub[$component] = array(); + $stub_count[$component] = 0; + // add selected items from Sources checkboxes + if (!empty($form_state['values'][$component]['sources']['selected'])) { + $stub[$component] = array_merge($stub[$component], features_dom_decode_options(array_filter($form_state['values'][$component]['sources']['selected']))); + $stub_count[$component]++; + } + // add selected items from already Included and newly Added checkboxes + foreach (array('included', 'added') as $section) { + if (!empty($form_state['values'][$component][$section])) { + $stub[$component] = array_merge($stub[$component], features_dom_decode_options(array_filter($form_state['values'][$component][$section]))); + $stub_count[$component]++; + } + } + // count any detected items + if (!empty($form_state['values'][$component]['detected'])) { + $stub_count[$component]++; + } + // Only fallback to an existing feature's values if there are no export options for the component. + if ($component == 'dependencies') { + if (($stub_count[$component] == 0) && !empty($feature->info['dependencies'])) { + $stub[$component] = drupal_map_assoc($feature->info['dependencies']); + } + } + elseif (($stub_count[$component] == 0) && !empty($feature->info['features'][$component])) { + $stub[$component] = drupal_map_assoc($feature->info['features'][$component]); + } + } + // Generate new populated feature + $export = features_populate(array('features' => $stub, 'dependencies' => $stub['dependencies']), $feature_name); + + // Components that are already exported to feature + $exported_features_info = !empty($feature->info['features']) ? $feature->info['features'] : array(); + $exported_features_info['dependencies'] = !empty($feature->info['dependencies']) ? $feature->info['dependencies'] : array(); + // Components that should be exported + $new_features_info = !empty($export['features']) ? $export['features'] : array(); + $new_features_info['dependencies'] = !empty($export['dependencies']) ? $export['dependencies'] : array(); + $excluded = !empty($feature->info['features_exclude']) ? $feature->info['features_exclude'] : array(); + + // now fill the $export with categorized sections of component options + // based upon user selections and de-selections + + foreach ($components as $component => $component_info) { + $component_export = $component_info; + foreach ($sections as $section) { + $component_export['options'][$section] = array(); + $component_export['selected'][$section] = array(); + } + $options = features_invoke($component, 'features_export_options'); + if (!empty($options)) { + $exported_components = !empty($exported_features_info[$component]) ? $exported_features_info[$component] : array(); + $new_components = !empty($new_features_info[$component]) ? $new_features_info[$component] : array(); + + // Find all default components that are not provided by this feature and + // strip them out of the possible options. + if ($map = features_get_default_map($component)) { + foreach ($map as $k => $v) { + if (isset($options[$k]) && (!isset($feature->name) || $v !== $feature->name)) { + unset($options[$k]); + } + } + } + foreach ($options as $key => $value) { + // use the $clean_key when accessing $form_state + $clean_key = features_dom_encode($key); + // if checkbox in Sources is checked, move it to Added section + if (!empty($form_state['values'][$component]['sources']['selected'][$clean_key])) { + unset($form_state['input'][$component]['sources']['selected'][$clean_key]); + $form_state['values'][$component]['sources']['selected'][$clean_key] = FALSE; + $form_state['values'][$component]['added'][$clean_key] = 1; + $form_state['input'][$component]['added'][$clean_key] = $clean_key; + $component_export['options']['added'][$key] = check_plain($value); + $component_export['selected']['added'][$key] = $key; + } + elseif (in_array($key, $new_components)) { + // option is in the New exported array + if (in_array($key, $exported_components)) { + // option was already previously exported + // so it's part of the Included checkboxes + $section = 'included'; + $default_value = $key; + if ($reset) { + // leave it included + } + // if Included item was un-selected (removed from export $stub) + // but was re-detected in the $new_components + // means it was an auto-detect that was previously part of the export + // and is now de-selected in UI + elseif (!empty($form_state['values']) && + (isset($form_state['values'][$component]['included'][$clean_key]) || + empty($form_state['values'][$component]['detected'][$clean_key])) && + empty($stub[$component][$key])) { + $section = 'detected'; + $default_value = FALSE; + } + // unless it's unchecked in the form, then move it to Newly disabled item + elseif (!empty($form_state['values']) && + empty($form_state['values'][$component]['added'][$clean_key]) && + empty($form_state['values'][$component]['detected'][$clean_key]) && + empty($form_state['values'][$component]['included'][$clean_key])) { + $section = 'added'; + $default_value = FALSE; + } + } + else { + // option was in New exported array, but NOT in already exported + // so it's a user-selected or an auto-detect item + $section = 'detected'; + // check for item explicity excluded + if (isset($excluded[$component][$key]) && !isset($form_state['values'][$component]['detected'][$clean_key])) { + $default_value = FALSE; + } + else { + $default_value = $key; + } + // if it's already checked in Added or Sources, leave it in Added as checked + if (!empty($form_state['values']) && + (!empty($form_state['values'][$component]['added'][$clean_key]) || + !empty($form_state['values'][$component]['sources']['selected'][$clean_key]))) { + $section = 'added'; + $default_value = $key; + } + // if it's already been unchecked, leave it unchecked + elseif (!empty($form_state['values']) && + empty($form_state['values'][$component]['sources']['selected'][$clean_key]) && + empty($form_state['values'][$component]['detected'][$clean_key]) && + !isset($form_state['values'][$component]['added'][$clean_key])) { + $section = 'detected'; + $default_value = FALSE; + } + } + $component_export['options'][$section][$key] = check_plain($value); + $component_export['selected'][$section][$key] = $default_value; + // save which dependencies are specifically excluded from auto-detection + if (($section == 'detected') && ($default_value === FALSE)) { + $excluded[$component][$key] = $key; + // remove excluded item from export + if ($component == 'dependencies') { + unset($export['dependencies'][$key]); + } + else { + unset($export['features'][$component][$key]); + } + } + else { + unset($excluded[$component][$key]); + } + // remove the 'input' and set the 'values' so Drupal stops looking at 'input' + if (isset($form_state['values'])) { + if (!$default_value) { + unset($form_state['input'][$component][$section][$clean_key]); + $form_state['values'][$component][$section][$clean_key] = FALSE; + } + else { + $form_state['input'][$component][$section][$clean_key] = $clean_key; + $form_state['values'][$component][$section][$clean_key] = 1; + } + } + } + else { + // option was not part of the new export + $added = FALSE; + foreach (array('included', 'added') as $section) { + // restore any user-selected checkboxes + if (!empty($form_state['values'][$component][$section][$clean_key])) { + $component_export['options'][$section][$key] = check_plain($value); + $component_export['selected'][$section][$key] = $key; + $added = TRUE; + } + } + if (!$added) { + // if not Included or Added, then put it back in the unchecked Sources checkboxes + $component_export['options']['sources'][$key] = check_plain($value); + $component_export['selected']['sources'][$key] = FALSE; + } + } + } + } + $export['components'][$component] = $component_export; + } + $export['features_exclude'] = $excluded; + + // make excluded list and conflicts available for javascript to pass to our ajax callback + drupal_add_js(array('features' => array( + 'excluded' => $excluded, + 'conflicts' => $conflicts, + )), 'setting'); + + return $export; +} + +/** + * AJAX callback for features_export_form. + */ +function features_export_form_ajax($form, &$form_state) { + return $form['export']; +} + +/** + * Tells the ajax form submission to rebuild form state. + */ +function features_export_form_rebuild($form, &$form_state) { + $form_state['rebuild'] = TRUE; +} + +function features_export_components_json($feature_name) { + module_load_include('inc', 'features', 'features.export'); + $export = array(); + if (!empty($_POST['items'])) { + $excluded = (!empty($_POST['excluded'])) ? $_POST['excluded'] : array(); + $stub = array(); + foreach ($_POST['items'] as $key) { + preg_match('/^([^\[]+)(\[.+\])?\[(.+)\]\[(.+)\]$/', $key, $matches); + if (!empty($matches[1]) && !empty($matches[4])) { + $component = $matches[1]; + $item = features_dom_decode($matches[4]); + if (empty($stub[$component])) { + $stub[$component] = array($item); + } + else { + $stub[$component] = array_merge($stub[$component], array($item)); + } + } + } + + $stub['dependencies'] = isset($stub['dependencies']) ? $stub['dependencies'] : array(); + $export = features_populate(array('features' => $stub, 'dependencies' => $stub['dependencies']), $feature_name); + $export['features']['dependencies'] = $export['dependencies']; + + // uncheck any detected item that is in the excluded list + foreach ($export['features'] as $component => $value) { + foreach ($value as $key => $item) { + $clean_key = features_dom_encode($key); + if ($key != $clean_key) { + // need to move key to a cleankey for javascript + $export['features'][$component][$clean_key] = $export['features'][$component][$key]; + unset($export['features'][$component][$key]); + } + if (isset($excluded[$component][$key])) { + $export['features'][$component][$clean_key] = FALSE; + } + } + } + } + print drupal_json_encode($export['features']); +} + +/** + * AJAX callback to get .info file preview. + */ +function features_info_file_preview($form, &$form_state){ + return $form['export']; +} + +/** + * Render API callback: Validates a project field. + * + * This function is assigned as an #element_validate callback in + * features_export_form(). + */ +function features_export_form_validate_field($element, &$form_state) { + switch ($element['#name']) { + case 'project_status_url': + if (!empty($element['#value']) && !valid_url($element['#value'])) { + form_error($element, t('The URL %url is invalid. Please enter a fully-qualified URL, such as http://www.example.com/feed.xml.', array('%url' => $element['#value']))); + } + break; + case 'version': + preg_match('/^(?P\d+\.x)-(?P\d+)\.(?P\d+)-?(?P\w+)?$/', $element['#value'], $matches); + if (!empty($element['#value']) && !isset($matches['core'], $matches['major'])) { + form_error($element, t('Please enter a valid version with core and major version number. Example: @example', array('@example' => '7.x-1.0'))); + }; + break; + } +} + +/** + * Return the $export array to be rendered for the feature export + */ +function _features_export_generate($export, $form_state, $feature = NULL) { + unset($export['components']); // remove the UI data that we are not saving to disk + + $module_name = $form_state['values']['module_name']; + // Directly copy the following attributes from form_state + $attr = array('name', 'description', 'package', 'project path'); + foreach ($attr as $key) { + $export[$key] = isset($form_state['values'][$key]) ? $form_state['values'][$key] : NULL; + } + // Directly copy the following attributes from the original feature + $attr = array('scripts' , 'stylesheets'); + foreach ($attr as $key) { + $export[$key] = isset($feature->info[$key]) ? $feature->info[$key] : NULL; + } + // If either update status-related keys are provided, add a project key + // corresponding to the module name. + if (!empty($form_state['values']['version']) || !empty($form_state['values']['project_status_url'])) { + $export['project'] = $form_state['values']['module_name']; + } + if (!empty($form_state['values']['version'])) { + $export['version'] = $form_state['values']['version']; + } + if (!empty($form_state['values']['project_status_url'])) { + $export['project status url'] = $form_state['values']['project_status_url']; + } + $export['no autodetect'] = empty($form_state['values']['autodetect']) ? 1 : NULL; + $export['project path'] = !empty($form_state['values']['generate_path']) ? $form_state['values']['generate_path'] : NULL; + return $export; +} + +/** + * Form submission handler for features_export_form(). + */ +function features_export_build_form_submit($form, &$form_state) { + $feature = $form['#feature']; + $export = _features_export_build($feature, $form_state); + $export = _features_export_generate($export, $form_state, $feature); + $generate = ($form_state['values']['op'] == $form_state['values']['generate']); + $module_name = $form_state['values']['module_name']; + + if ($generate && !user_access('generate features')) { + drupal_set_message(t("No permission for generating features.")); + return; + } + + // Generate download + if ($files = features_export_render($export, $module_name, TRUE)) { + $filename = (!empty($export['version']) ? "{$module_name}-{$export['version']}" : $module_name) . '.tar'; + + if ($generate) { + $success = TRUE; + $destination = variable_get('features_default_export_path', FEATURES_DEFAULT_EXPORT_PATH); + $directory = (!empty($export['project path'])) ? $export['project path'] . '/' . $module_name : + (isset($feature->filename) ? dirname($feature->filename) : $destination . '/' . $module_name); + if (!is_dir($directory)) { + if (mkdir($directory, 0777, true) === FALSE) { + $success = FALSE; + } + } + } + else { + // Clear out output buffer to remove any garbage from tar output. + if (ob_get_level()) { + ob_end_clean(); + } + + drupal_add_http_header('Content-type', 'application/x-tar'); + drupal_add_http_header('Content-Disposition', 'attachment; filename="'. $filename .'"'); + drupal_send_headers(); + } + + $tar = array(); + $filenames = array(); + foreach ($files as $extension => $file_contents) { + if (!in_array($extension, array('module', 'info'))) { + $extension .= '.inc'; + } + $filenames[] = "{$module_name}.$extension"; + if ($generate) { + if (file_put_contents("{$directory}/{$module_name}.$extension", $file_contents) === FALSE) { + $success = FALSE; + } + } + else { + print features_tar_create("{$module_name}/{$module_name}.$extension", $file_contents); + } + } + if (features_get_modules($module_name, TRUE)) { + // prevent deprecated component files from being included in download + $deprecated = features_get_deprecated(); + foreach ($deprecated as $component) { + $info = features_get_components($component); + $filename = isset($info['default_file']) && $info['default_file'] == FEATURES_DEFAULTS_CUSTOM ? $info['default_filename'] : "features.{$component}"; + $filename .= '.inc'; + $filenames[] = "{$module_name}.$filename"; + } + $module_path = drupal_get_path('module', $module_name); + // file_scan_directory() can throw warnings when using PHP 5.3, messing + // up the output of our file stream. Suppress errors in this one case in + // order to produce valid output. + foreach (@file_scan_directory($module_path, '/.*/') as $file) { + $filename = substr($file->uri, strlen($module_path) + 1); + if (!in_array($filename, $filenames)) { + // Add this file. + $contents = file_get_contents($file->uri); + if ($generate) { + if (file_put_contents("{$directory}/{$filename}", $contents) === FALSE) { + $success = FALSE; + } + } + else { + print features_tar_create("{$module_name}/{$filename}", $contents); + } + unset($contents); + } + } + } + if ($generate) { + if ($success) { + drupal_set_message(t("Module @name written to @directory", + array('@name' => $export['name'], '@directory' => $directory))); + } + else { + drupal_set_message( + t("Could not write module to @path. ", array('@path' => $directory)) . + t("Ensure your file permissions allow the web server to write to that directory."), "error"); + } + } + else { + print pack("a1024",""); + exit; + } + } +} + +/** + * array_filter() callback for excluding hidden modules. + */ +function features_filter_hidden($module) { + return empty($module->info['hidden']); +} + +/** + * Form constructor for the features configuration form. + */ +function features_admin_form($form, $form_state) { + // Load export functions to use in comparison. + module_load_include('inc', 'features', 'features.export'); + + // Clear & rebuild key caches + features_get_info(NULL, NULL, TRUE); + features_rebuild(); + + $modules = array_filter(features_get_modules(), 'features_filter_hidden'); + $features = array_filter(features_get_features(), 'features_filter_hidden'); + $conflicts = features_get_conflicts(); + + foreach ($modules as $key => $module) { + if ($module->status && !empty($module->info['dependencies'])) { + foreach ($module->info['dependencies'] as $dependent) { + if (isset($features[$dependent])) { + $features[$dependent]->dependents[$key] = $module->info['name']; + } + } + } + } + + if ( empty($features) ) { + $form['no_features'] = array( + '#markup' => t('No Features were found. Please use the !create_link link to create + a new Feature module, or upload an existing Feature to your modules directory.', + array('!create_link' => l(t('Create Feature'), 'admin/structure/features/create'))), + ); + return $form ; + } + + $form = array('#features' => $features); + + // Generate features form. Features are sorted by dependencies, resort alpha + ksort($features); + foreach ($features as $name => $module) { + $package_title = !empty($module->info['package']) ? $module->info['package'] : t('Other'); + $package = 'package_' . strtolower(preg_replace('/[^a-zA-Z0-9-]+/', '-', $package_title)); + + // Set up package elements + if (!isset($form[$package])) { + $form[$package] = array( + '#tree' => FALSE, + '#title' => check_plain($package_title), + '#theme' => 'features_form_package', + '#type' => 'fieldset', + '#group' => 'packages', + ); + $form[$package]['links'] = + $form[$package]['version'] = + $form[$package]['weight'] = + $form[$package]['status'] = + $form[$package]['action'] = array('#tree' => TRUE); + } + + $disabled = FALSE; + $description = isset($module->info['description']) ? check_plain($module->info['description']) : ''; + + // Detect unmet dependencies + if (!empty($module->info['dependencies'])) { + $unmet_dependencies = array(); + $dependencies = _features_export_maximize_dependencies($module->info['dependencies']); + foreach ($dependencies as $dependency) { + if (empty($modules[$dependency])) { + $unmet_dependencies[] = theme('features_module_status', array('status' => FEATURES_MODULE_MISSING, 'module' => $dependency)); + } + } + if (!empty($unmet_dependencies)) { + $description .= "
    " . t('Unmet dependencies: !dependencies', array('!dependencies' => implode(', ', $unmet_dependencies))) . "
    "; + $disabled = TRUE; + } + } + + if (!empty($module->dependents)) { + $disabled = TRUE; + $description .= "
    ". t('Required by: !dependents', array('!dependents' => implode(', ', $module->dependents))) ."
    "; + } + + // Detect potential conflicts + if (!empty($conflicts[$name])) { + $module_conflicts = array(); + foreach ($conflicts[$name] as $conflict => $components) { + $component_strings = array(); + foreach ($components as $component => $component_conflicts) { + $component_strings[] = t('@component [@items]', array('@component' => $component, '@items' => implode(', ', $component_conflicts))); + } + $component_strings = implode(', ', $component_strings); + // If conflicting module is disabled, indicate so in feature listing + $status = !module_exists($conflict) ? FEATURES_MODULE_DISABLED : FEATURES_MODULE_CONFLICT; + $module_conflicts[] = theme('features_module_status', array('status' => $status, 'module' => $conflict)) . t(' in ') . $component_strings; + // Only disable modules with conflicts if they are not already enabled. + // If they are already enabled, somehow the user got themselves into a + // bad situation and they need to be able to disable a conflicted module. + if (module_exists($conflict) && !module_exists($name)) { + $disabled = TRUE; + } + } + $description .= "
    ". t('Conflicts with: !conflicts', array('!conflicts' => implode(', ', $module_conflicts))) ."
    "; + } + + $href = "admin/structure/features/{$name}"; + $module_name = (user_access('administer features')) ? l($module->info['name'], $href) : $module->info['name']; + $form[$package]['status'][$name] = array( + '#type' => 'checkbox', + '#title' => $module_name, + '#description' => $description, + '#default_value' => $module->status, + '#disabled' => $disabled, + ); + + if (!empty($module->info['project status url'])) { + $uri = l(truncate_utf8($module->info['project status url'], 35, TRUE, TRUE), $module->info['project status url']); + } + else if (isset($module->info['project'], $module->info['version'], $module->info['datestamp'])) { + $uri = l('http://drupal.org', 'http://drupal.org/project/' . $module->info['project']); + } + else { + $uri = t('Unavailable'); + } + $version = !empty($module->info['version']) ? $module->info['version'] : ''; + $version = !empty($version) ? "
    $version
    " : ''; + $form[$package]['sign'][$name] = array('#markup' => "{$uri} {$version}"); + + if (user_access('administer features')) { + // Add status link + if ($module->status) { + $state = theme('features_storage_link', array('storage' => FEATURES_CHECKING, 'path' => $href)); + $state .= l(t('Check'), "admin/structure/features/{$name}/status", array('attributes' => array('class' => array('admin-check')))); + $state .= theme('features_storage_link', array('storage' => FEATURES_REBUILDING, 'path' => $href)); + $state .= theme('features_storage_link', array('storage' => FEATURES_NEEDS_REVIEW, 'path' => $href)); + $state .= theme('features_storage_link', array('storage' => FEATURES_OVERRIDDEN, 'path' => $href)); + $state .= theme('features_storage_link', array('storage' => FEATURES_DEFAULT, 'path' => $href)); + } + elseif (!empty($conflicts[$name])) { + $state = theme('features_storage_link', array('storage' => FEATURES_CONFLICT, 'path' => $href)); + } + else { + $state = theme('features_storage_link', array('storage' => FEATURES_DISABLED, 'path' => $href)); + } + $form[$package]['state'][$name] = array( + '#markup' => !empty($state) ? $state : '', + ); + + // Add in recreate link + $form[$package]['actions'][$name] = array( + '#markup' => l(t('Recreate'), "admin/structure/features/{$name}/recreate", array('attributes' => array('class' => array('admin-update')))), + ); + } + } + ksort($form); + + // As of 7.0 beta 2 it matters where the "vertical_tabs" element lives on the + // the array. We add it late, but at the beginning of the array because that + // keeps us away from trouble. + $form = array('packages' => array('#type' => 'vertical_tabs')) + $form; + + $form['buttons'] = array( + '#theme' => 'features_form_buttons', + ); + $form['buttons']['submit'] = array( + '#type' => 'submit', + '#value' => t('Save settings'), + '#submit' => array('features_form_submit'), + '#validate' => array('features_form_validate'), + ); + return $form; +} + +/** + * Display the components of a feature. + */ +function features_admin_components($form, $form_state, $feature) { + // Breadcrumb navigation + $breadcrumb[] = l(t('Home'), NULL); + $breadcrumb[] = l(t('Administration'), 'admin'); + $breadcrumb[] = l(t('Structure'), 'admin/structure'); + $breadcrumb[] = l(t('Features'), 'admin/structure/features'); + drupal_set_breadcrumb($breadcrumb); + + module_load_include('inc', 'features', 'features.export'); + $form['#feature'] = $feature; + + // Store feature info for theme layer. + $form['module'] = array('#type' => 'value', '#value' => $feature->name); + $form['#info'] = $feature->info; + $form['#dependencies'] = array(); + if (!empty($feature->info['dependencies'])) { + foreach ($feature->info['dependencies'] as $dependency) { + $parsed_dependency = drupal_parse_dependency($dependency); + $dependency = $parsed_dependency['name']; + $status = features_get_module_status($dependency); + $form['#dependencies'][$dependency] = $status; + } + } + + $conflicts = features_get_conflicts(); + if (!module_exists($form['module']['#value']) && isset($form['module']['#value']) && !empty($conflicts[$form['module']['#value']])) { + $module_conflicts = $conflicts[$form['module']['#value']]; + $conflicts = array(); + foreach ($module_conflicts as $conflict) { + $conflicts = array_merge_recursive($conflict, $conflicts); + } + } + else { + $conflicts = array(); + } + $form['#conflicts'] = $conflicts; + + $review = $revert = FALSE; + + // Iterate over components and retrieve status for display + $states = features_get_component_states(array($feature->name), FALSE); + $form['revert']['#tree'] = TRUE; + foreach ($feature->info['features'] as $component => $items) { + if (user_access('administer features') && array_key_exists($component, $states[$feature->name]) && in_array($states[$feature->name][$component], array(FEATURES_OVERRIDDEN, FEATURES_NEEDS_REVIEW))) { + switch ($states[$feature->name][$component]) { + case FEATURES_OVERRIDDEN: + $revert = TRUE; + break; + case FEATURES_NEEDS_REVIEW: + $review = TRUE; + break; + } + $form['revert'][$component] = array( + '#type' => 'checkbox', + '#default_value' => FALSE, + ); + } + if (module_exists('diff')) { + $diffpath = "admin/structure/features/{$feature->name}/diff/{$component}"; + $item = menu_get_item($diffpath); + $path = ($item && $item['access']) ? $diffpath : NULL; + } + else { + $path = NULL; + } + + $storage = FEATURES_DEFAULT; + if (array_key_exists($component, $states[$feature->name])) { + $storage = $states[$feature->name][$component]; + } + else if (array_key_exists($component, $conflicts)) { + $storage = FEATURES_CONFLICT; + } + // This can be removed if the css is fixed so link doesn't move when + // ajaxing and linke moved. + $lock_link = ''; + if (user_access('administer features') && (features_hook($component, 'features_revert') || features_hook($component, 'features_rebuild'))) { + $lock_link = ' ' . theme('features_lock_link', array('feature' => $feature->name, 'component' => $component)); + } + $form['components'][$component] = array( + '#markup' => $lock_link . theme('features_storage_link', array('storage' => $storage, 'path' => $path)), + ); + } + + if ($review || $revert) { + $form['buttons'] = array('#theme' => 'features_form_buttons', '#tree' => TRUE); + if ($revert || $review) { + $form['buttons']['revert'] = array( + '#type' => 'submit', + '#value' => t('Revert components'), + '#submit' => array('features_admin_components_revert'), + ); + } + if ($review) { + $form['buttons']['review'] = array( + '#type' => 'submit', + '#value' => t('Mark as reviewed'), + '#submit' => array('features_admin_components_review'), + ); + } + } + return $form; +} + +/** + * Submit handler for revert form. + */ +function features_admin_components_revert(&$form, &$form_state) { + module_load_include('inc', 'features', 'features.export'); + features_include(); + $module = $form_state['values']['module']; + $revert = array($module => array()); + foreach (array_filter($form_state['values']['revert']) as $component => $status) { + $revert[$module][] = $component; + drupal_set_message(t('Reverted all @component components for @module.', array('@component' => $component, '@module' => $module))); + } + if (empty($revert[$module])) { + drupal_set_message(t('Please select which components to revert.'), 'warning'); + } + features_revert($revert); + $form_state['redirect'] = 'admin/structure/features/' . $module; +} + +/** + * Submit handler for revert form. + */ +function features_admin_components_review(&$form, &$form_state) { + module_load_include('inc', 'features', 'features.export'); + features_include(); + $module = $form_state['values']['module']; + $revert = array(); + foreach (array_filter($form_state['values']['revert']) as $component => $status) { + features_set_signature($module, $component); + drupal_set_message(t('All @component components for @module reviewed.', array('@component' => $component, '@module' => $module))); + } + $form_state['redirect'] = 'admin/structure/features/' . $module; +} + +/** + * Validate handler for the 'manage features' form. + */ +function features_form_validate(&$form, &$form_state) { + include_once './includes/install.inc'; + $conflicts = features_get_conflicts(); + foreach ($form_state['values']['status'] as $module => $status) { + if ($status) { + if (!empty($conflicts[$module])) { + foreach (array_keys($conflicts[$module]) as $conflict) { + if (!empty($form_state['values']['status'][$conflict])) { + form_set_error('status', t('The feature @module cannot be enabled because it conflicts with @conflict.', array('@module' => $module, '@conflict' => $conflict))); + } + } + } + if (!drupal_check_module($module)) { + form_set_error('status', t('The feature @module cannot be enabled because it has unmet requirements.', array('@module' => $module))); + } + } + } +} + +/** + * Submit handler for the 'manage features' form + */ +function features_form_submit(&$form, &$form_state) { + // Clear drupal caches after enabling a feature. We do this in a separate + // page callback rather than as part of the submit handler as some modules + // have includes/other directives of importance in hooks that have already + // been called in this page load. + $form_state['redirect'] = 'admin/structure/features/cleanup/clear'; + + $features = $form['#features']; + if (!empty($features)) { + $status = $form_state['values']['status']; + $install = array_keys(array_filter($status)); + $disable = array_diff(array_keys($status), $install); + + // Disable first. If there are any features that are disabled that are + // dependencies of features that have been queued for install, they will + // be re-enabled. + module_disable($disable); + features_install_modules($install); + } +} + +/** + * Form for clearing cache after enabling a feature. + */ +function features_cleanup_form($form, $form_state, $cache_clear = FALSE) { + // Clear caches if we're getting a post-submit redirect that requests it. + if ($cache_clear) { + drupal_flush_all_caches(); + + // The following functions need to be run because drupal_flush_all_caches() + // runs rebuilds in the wrong order. The node type cache is rebuilt *after* + // the menu is rebuilt, meaning that the menu tree is stale in certain + // circumstances after drupal_flush_all_caches(). We rebuild again. + menu_rebuild(); + } + + drupal_goto('admin/structure/features'); +} + +/** + * Page callback to display the differences between what's in code and + * what is in the db. + * + * @param $feature + * A loaded feature object to display differences for. + * @param $component + * (optional) Specific component to display differences for. If excluded, all + * components are used. + * + * @return + * Themed display of what is different. + */ +function features_feature_diff($feature, $component = NULL) { + drupal_add_css(drupal_get_path('module', 'features') . '/features.css'); + module_load_include('inc', 'features', 'features.export'); + drupal_set_title($feature->info['name']); + + $overrides = features_detect_overrides($feature); + + $output = ''; + if (!empty($overrides)) { + // Filter overrides down to specified component. + if (isset($component) && isset($overrides[$component])) { + $overrides = array($component => $overrides[$component]); + } + + module_load_include('inc', 'diff', 'diff.engine'); + $formatter = new DrupalDiffFormatter(); + + $rows = array(); + foreach ($overrides as $component => $items) { + $rows[] = array(array('data' => $component, 'colspan' => 4, 'header' => TRUE)); + $diff = new Diff(explode("\n", $items['default']), explode("\n", $items['normal'])); + $rows = array_merge($rows, $formatter->format($diff)); + } + $header = array( + array('data' => t('Default'), 'colspan' => 2), + array('data' => t('Overrides'), 'colspan' => 2), + ); + $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('class' => array('diff', 'features-diff')))); + } + else { + $output = "
    " . t('No changes have been made to this feature.') . "
    "; + } + $output = array('page' => array('#markup' => "
    {$output}
    ")); + return $output; +} + + + +/** + * Page callback to lock a component. + * + * @param $feature + * Loaded feature object to be processed for component locking. + * @param $component + * (optional) A specific component to lock. + * + * @return + * Themed display of what is different. + */ +function features_admin_lock($feature, $type = 'ajax', $component = NULL) { + if ($type == 'ajax' && !empty($_GET['token']) && drupal_valid_token($_GET['token'], 'features/' . $feature->name . '/' . ($component ? $component : '')) == $_GET['token']) { + if (features_feature_is_locked($feature->name, $component, FALSE)) { + features_feature_unlock($feature->name, $component); + } + else { + features_feature_lock($feature->name, $component); + } + $commands = array(); + $new_link = theme('features_lock_link', array('feature' => $feature->name, 'component' => $component)); + $commands[] = ajax_command_replace('#features-lock-link-' . $feature->name . ($component ? '-' . $component : ''), $new_link); + $page = array('#type' => 'ajax', '#commands' => $commands); + ajax_deliver($page); + } + else { + return drupal_get_form('features_feature_lock_confirm_form', $feature, $component); + } +} + +/** + * Confirm form for locking a feature. + */ +function features_feature_lock_confirm_form($form, $form_state, $feature, $component) { + $form['#feature'] = $feature; + $form['#component'] = $component; + $is_locked = features_feature_is_locked($feature->name, $component, FALSE); + $args = array( + '@name' => $feature->name, + '@component' => $component ? $component : t('all'), + '!action' => $is_locked ? t('unlock') : t('lock'), + ); + $question = t('Are you sure you want to !action this Feature @name (component @component)?', $args); + return confirm_form($form, $question, 'admin/structure/features/' . $feature->name); +} + +/** + * Submit callback to lock components of a feature. + */ +function features_feature_lock_confirm_form_submit($form, &$form_state) { + $feature = $form['#feature']->name; + $component = $form['#component']; + if (features_feature_is_locked($feature, $component, FALSE)) { + features_feature_unlock($feature, $component); + drupal_set_message(t('Feature @name (component @component) has been unlocked.', array('@name' => $feature, '@component' => $component ? $component : t('all')))); + } + else { + features_feature_lock($feature, $component); + drupal_set_message(t('Feature @name (component @component) has been locked.', array('@name' => $feature, '@component' => $component ? $component : t('all')))); + } + $form_state['redirect'] = 'admin/structure/features/' . $feature; +} + +/** + * Compare the component names. Used to sort alphabetically. + */ +function features_compare_component_name($a, $b) { + return strcasecmp($a['name'], $b['name']); +} + +/** + * Javascript callback that returns the status of a feature. + */ +function features_feature_status($feature) { + module_load_include('inc', 'features', 'features.export'); + return drupal_json_output(array('storage' => features_get_storage($feature->name))); +} + +/** + * Make a Drupal options array safe for usage with jQuery DOM selectors. + * Encodes known bad characters into __[ordinal]__ so that they may be + * safely referenced by JS behaviors. + */ +function features_dom_encode_options($options = array(), $keys_only = TRUE) { + $replacements = features_dom_encode_map(); + $encoded = array(); + foreach ($options as $key => $value) { + $encoded[strtr($key, $replacements)] = $keys_only ? $value : strtr($value, $replacements); + } + return $encoded; +} + +function features_dom_encode($key) { + $replacements = features_dom_encode_map(); + return strtr($key, $replacements); +} + +function features_dom_decode($key) { + $replacements = array_flip(features_dom_encode_map()); + return strtr($key, $replacements); +} + +/** + * Decode an array of option values that have been encoded by + * features_dom_encode_options(). + */ +function features_dom_decode_options($options, $keys_only = FALSE) { + $replacements = array_flip(features_dom_encode_map()); + $encoded = array(); + foreach ($options as $key => $value) { + $encoded[strtr($key, $replacements)] = $keys_only ? $value : strtr($value, $replacements); + } + return $encoded; +} + +/** + * Returns encoding map for decode and encode options. + */ +function features_dom_encode_map() { + return array( + ':' => '__' . ord(':') . '__', + '/' => '__' . ord('/') . '__', + ',' => '__' . ord(',') . '__', + '.' => '__' . ord('.') . '__', + '<' => '__' . ord('<') . '__', + '>' => '__' . ord('>') . '__', + '%' => '__' . ord('%') . '__', + ')' => '__' . ord(')') . '__', + '(' => '__' . ord('(') . '__', + ); +} + +/** + * Page callback: Autocomplete field for features package. + * + * @param $search_string + * The char or string that user have written in autocomplete field, + * this is the string this function uses for filter. + * + * @see features_menu() + */ +function features_autocomplete_packages($search_string) { + $matched_packages = array(); + //fetch all modules that are features and copy the package name into a new array. + foreach (features_get_features(NULL, TRUE) as $value) { + if (preg_match('/' . $search_string . '/i', $value->info['package'])) { + $matched_packages[$value->info['package']] = $value->info['package']; + } + } + //removes duplicated package, we wont a list of all unique packages. + $matched_packages = array_unique($matched_packages); + drupal_json_output($matched_packages); +} + +/** + * Return a list of all used components/items not matching a given feature module + * similar to features_get_conflicts but returns all component items "in use" + */ +function _features_get_used($module_name = NULL) { + + global $features_ignore_conflicts; + // make sure we turn off the ignore_conflicts global to get full list of used components + // hate to use global, but since this is just for an admin screen it's not a real problem + $old_value = $features_ignore_conflicts; + $features_ignore_conflicts = FALSE; + + $conflicts = array(); + $component_info = features_get_components(); + $map = features_get_component_map(); + + foreach ($map as $type => $components) { + // Only check conflicts for components we know about. + if (isset($component_info[$type])) { + foreach ($components as $component => $modules) { + foreach ($modules as $module) { + // only for enabled modules + if (module_exists($module) && (empty($module_name) || ($module_name != $module))) { + if (!isset($conflicts[$module])) { + $conflicts[$module] = array(); + } + $conflicts[$module][$type][] = $component; + } + } + } + } + } + + // restore previous value of global + $features_ignore_conflicts = $old_value; + return $conflicts; +} diff --git a/sites/all/modules/custom/features/features.api.php b/sites/all/modules/custom/features/features.api.php new file mode 100644 index 0000000000..f5984e0cbc --- /dev/null +++ b/sites/all/modules/custom/features/features.api.php @@ -0,0 +1,532 @@ + array( + 'default_hook' => 'mycomponent_defaults', + 'default_file' => FEATURES_DEFAULTS_INCLUDED, + 'feature_source' => TRUE, + 'file' => drupal_get_path('module', 'mycomponent') . '/mycomponent.features.inc', + ), + ); +} + +/** + * Component hook. The hook should be implemented using the name of the + * component, not the module, eg. [component]_features_export() rather than + * [module]_features_export(). + * + * Process the export array for a given component. Implementations of this hook + * have three key tasks: + * + * 1. Determine module dependencies for any of the components passed to it + * e.g. the views implementation iterates over each views' handlers and + * plugins to determine which modules need to be added as dependencies. + * + * 2. Correctly add components to the export array. In general this is usually + * adding all of the items in $data to $export['features']['my_key'], but + * can become more complicated if components are shared between features + * or modules. + * + * 3. Delegating further detection and export tasks to related or derivative + * components. + * + * Each export processor can kickoff further export processors by returning a + * keyed array (aka the "pipe") where the key is the next export processor hook + * to call and the value is an array to be passed to that processor's $data + * argument. This allows an export process to start simply at a few objects: + * + * [context] + * + * And then branch out, delegating each component to its appropriate hook: + * + * [context]--------+------------+ + * | | | + * [node] [block] [views] + * | + * [CCK] + * | + * [imagecache] + * + * @param array $data + * An array of machine names for the component in question to be exported. + * @param array &$export + * By reference. An array of all components to be exported with a given + * feature. Component objects that should be exported should be added to + * this array. + * @param string $module_name + * The name of the feature module to be generated. + * @return array + * The pipe array of further processors that should be called. + */ +function hook_features_export($data, &$export, $module_name) { + // The following is the simplest implementation of a straight object export + // with no further export processors called. + foreach ($data as $component) { + $export['features']['mycomponent'][$component] = $component; + } + return array(); +} + +/** + * Component hook. The hook should be implemented using the name of the + * component, not the module, eg. [component]_features_export() rather than + * [module]_features_export(). + * + * List all objects for a component that may be exported. + * + * @return array + * A keyed array of items, suitable for use with a FormAPI select or + * checkboxes element. + */ +function hook_features_export_options() { + $options = array(); + foreach (mycomponent_load() as $mycomponent) { + $options[$mycomponent->name] = $mycomponent->title; + } + return $options; +} + +/** + * Component hook. The hook should be implemented using the name of the + * component, not the module, eg. [component]_features_export() rather than + * [module]_features_export(). + * + * Render one or more component objects to code. + * + * @param string $module_name + * The name of the feature module to be exported. + * @param array $data + * An array of machine name identifiers for the objects to be rendered. + * @param array $export + * The full export array of the current feature being exported. This is only + * passed when hook_features_export_render() is invoked for an actual feature + * update or recreate, not during state checks or other operations. + * @return array + * An associative array of rendered PHP code where the key is the name of the + * hook that should wrap the PHP code. The hook should not include the name + * of the module, e.g. the key for `hook_example` should simply be `example` + * The values in the array can also be in the form of an associative array + * with the required key of 'code' and optional key of 'args', if 'args' need + * to be added to the hook. + */ +function hook_features_export_render($module_name, $data, $export = NULL) { + $code = array(); + $code[] = '$mycomponents = array();'; + foreach ($data as $name) { + $code[] = " \$mycomponents['{$name}'] = " . features_var_export(mycomponent_load($name)) .";"; + } + $code[] = "return \$mycomponents;"; + $code = implode("\n", $code); + return array('mycomponent_defaults' => $code); +} + +/** + * Component hook. The hook should be implemented using the name of the + * component, not the module, eg. [component]_features_export() rather than + * [module]_features_export(). + * + * Revert all component objects for a given feature module. + * + * @param string $module_name + * The name of the feature module whose components should be reverted. + * @return boolean + * TRUE or FALSE for whether the components were successfully reverted. + * NOTE: This return value is no longer used in the latest Features so + * modules should no longer count on this value + */ +function hook_features_revert($module_name) { + $mycomponents = module_invoke($module_name, 'mycomponent_defaults'); + if (!empty($mycomponents)) { + foreach ($mycomponents as $mycomponent) { + mycomponent_delete($mycomponent); + } + } +} + +/** + * Component hook. The hook should be implemented using the name of the + * component, not the module, eg. [component]_features_export() rather than + * [module]_features_export(). + * + * Rebuild all component objects for a given feature module. Should only be + * implemented for 'faux-exportable' components. + * + * This hook is called at points where Features determines that it is safe + * (ie. the feature is in state `FEATURES_REBUILDABLE`) for your module to + * replace objects in the database with defaults that you collect from your + * own defaults hook. See API.txt for how Features determines whether a + * rebuild of components is possible. + * + * @param string $module_name + * The name of the feature module whose components should be rebuilt. + */ +function hook_features_rebuild($module_name) { + $mycomponents = module_invoke($module_name, 'mycomponent_defaults'); + if (!empty($mycomponents)) { + foreach ($mycomponents as $mycomponent) { + mycomponent_save($mycomponent); + } + } +} + +/** + * Invoked before a restore operation is run. + * + * This hook is called before any of the restore operations on the components is + * run. + * + * @param string $op + * The operation that is triggered: revert, rebuild, disable, enable + * @param array $items + * The items handled by the operation. + */ +function hook_features_pre_restore($op, $items) { + if ($op == 'rebuild') { + // Use features rebuild to rebuild the features independent exports too. + entity_defaults_rebuild(); + } +} + +/** + * Invoked after a restore operation is run. + * + * This hook is called after any of the restore operations on the components is + * run. + * + * @param string $op + * The operation that is triggered: revert, rebuild, disable, enable + * @param array $items + * The items handled by the operation. + */ +function hook_features_post_restore($op, $items) { + if ($op == 'rebuild') { + // Use features rebuild to rebuild the features independent exports too. + entity_defaults_rebuild(); + } +} + +/** + * Alter the final array of Component names to be exported, just prior to + * the rendering of defaults. Allows modules a final say in whether or not + * certain Components are exported (the Components' actual data, however, + * cannot be altered by this hook). + * + * @param array &$export + * By reference. An array of all component names to be exported with a given + * feature. + * @param array $module_name + * The name of the feature module to be generated. + */ +function hook_features_export_alter(&$export, $module_name) { + // Example: do not allow the page content type to be exported, ever. + if (!empty($export['features']['node']['page'])) { + unset($export['features']['node']['page']); + } +} + +/** + * Alter the pipe array for a given component. This hook should be implemented + * with the name of the component type in place of `component` in the function + * name, e.g. `features_pipe_views_alter()` will alter the pipe for the Views + * component. + * + * @param array &$pipe + * By reference. The pipe array of further processors that should be called. + * @param array $data + * An array of machine names for the component in question to be exported. + * @param array &$export + * By reference. An array of all components to be exported with a given + * feature. + */ +function hook_features_pipe_COMPONENT_alter(&$pipe, $data, $export) { + if (in_array($data, 'my-node-type')) { + $pipe['dependencies'][] = 'mymodule'; + } +} + +/** + * Alter the pipe array for a given component. + * + * @param array &$pipe + * By reference. The pipe array of further processors that should be called. + * @param array $data + * An array of machine names for the component in question to be exported. + * @param array &$export + * By reference. An array of all components to be exported with a given + * feature. + * + * The component being exported is contained in $export['component']. + * The module being exported contained in $export['module_name']. + */ +function hook_features_pipe_alter(&$pipe, $data, $export) { + if ($export['component'] == 'node' && in_array($data, 'my-node-type')) { + $pipe['dependencies'][] = 'mymodule'; + } +} + +/** + * @defgroup features_component_alter_hooks Feature's component alter hooks + * @{ + * Hooks to modify components defined by other features. These come in the form + * hook_COMPONENT_alter where COMPONENT is the default_hook declared by any of + * components within features. + * + * CTools also has a variety of hook_FOO_alters. + * + * Note: While views is a component of features, it declares it's own alter + * function which takes a similar form: + * hook_views_default_views_alter(&$views) + */ + +/** + * Deprecated as of 7.x-2.0. + * + * Alter the default fields right before they are cached into the database. + * + * @param &$fields + * By reference. The fields that have been declared by another feature. + */ +function hook_field_default_fields_alter(&$fields) { +} + +/** + * Alter the base fields right before they are cached into the database. + * + * @param &$fields + * By reference. The fields that have been declared by another feature. + */ +function hook_field_default_field_bases_alter(&$fields) { +} + +/** + * Alter the field instances right before they are cached into the database. + * + * @param &$fields + * By reference. The fields that have been declared by another feature. + */ +function hook_field_default_field_instances_alter(&$fields) { +} + +/** + * Alter the default fieldgroup groups right before they are cached into the + * database. + * + * @param &$groups + * By reference. The fieldgroup groups that have been declared by another + * feature. + */ +function hook_fieldgroup_default_groups_alter(&$groups) { +} + +/** + * Alter the default filter formats right before they are cached into the + * database. + * + * @param &$formats + * By reference. The formats that have been declared by another feature. + */ +function hook_filter_default_formats_alter(&$formats) { +} + +/** + * Alter the default menus right before they are cached into the database. + * + * @param &$menus + * By reference. The menus that have been declared by another feature. + */ +function hook_menu_default_menu_custom_alter(&$menus) { +} + +/** + * Alter the default menu links right before they are cached into the database. + * + * @param &$links + * By reference. The menu links that have been declared by another feature. + */ +function hook_menu_default_menu_links_alter(&$links) { +} + +/** + * Alter the default menu items right before they are cached into the database. + * + * @param &$items + * By reference. The menu items that have been declared by another feature. + */ +function hook_menu_default_items_alter(&$items) { +} + +/** + * Alter the default vocabularies right before they are cached into the + * database. + * + * @param &$vocabularies + * By reference. The vocabularies that have been declared by another feature. + */ +function hook_taxonomy_default_vocabularies_alter(&$vocabularies) { +} + +/** + * Alter the default permissions right before they are cached into the + * database. + * + * @param &$permissions + * By reference. The permissions that have been declared by another feature. + */ +function hook_user_default_permissions_alter(&$permissions) { +} + +/** + * Alter the default roles right before they are cached into the database. + * + * @param &$roles + * By reference. The roles that have been declared by another feature. + */ +function hook_user_default_roles_alter(&$roles) { +} + +/** + * @} + */ + + +/** + * @defgroup features_module_hooks Feature module hooks + * @{ + * Hooks invoked on Feature modules when that module is enabled, disabled, + * rebuilt, or reverted. These are ONLY invoked on the Features module on + * which these actions are taken. + */ + +/** + * Feature module hook. Invoked on a Feature module before that module is + * reverted. + * + * @param $component + * String name of the component that is about to be reverted. + */ +function hook_pre_features_revert($component) { +} + +/** + * Feature module hook. Invoked on a Feature module after that module is + * reverted. + * + * @param $component + * String name of the component that has just been reverted. + */ +function hook_post_features_revert($component) { +} + +/** + * Feature module hook. Invoked on a Feature module before that module is + * rebuilt. + * + * @param $component + * String name of the component that is about to be rebuilt. + */ +function hook_pre_features_rebuild($component) { +} + +/** + * Feature module hook. Invoked on a Feature module after that module is + * rebuilt. + * + * @param $component + * String name of the component that has just been rebuilt. + */ +function hook_post_features_rebuild($component) { +} + +/** + * Feature module hook. Invoked on a Feature module before that module is + * disabled. + * + * @param $component + * String name of the component that is about to be disabled. + */ +function hook_pre_features_disable_feature($component) { +} + +/** + * Feature module hook. Invoked on a Feature module after that module is + * disabled. + * + * @param $component + * String name of the component that has just been disabled. + */ +function hook_post_features_disable_feature($component) { +} + +/** + * Feature module hook. Invoked on a Feature module before that module is + * enabled. + * + * @param $component + * String name of the component that is about to be enabled. + */ +function hook_pre_features_enable_feature($component) { +} + +/** + * Feature module hook. Invoked on a Feature module after that module is + * enabled. + * + * @param $component + * String name of the component that has just been enabled. + */ +function hook_post_features_enable_feature($component) { +} + +/** + * @} + */ diff --git a/sites/all/modules/custom/features/features.css b/sites/all/modules/custom/features/features.css new file mode 100644 index 0000000000..e3f0251d96 --- /dev/null +++ b/sites/all/modules/custom/features/features.css @@ -0,0 +1,579 @@ +/** + * Features packages. + */ +div.features-form-links { + width:20%; + float:left; +} + +div.features-form-content { + width:80%; + float:right; +} + +/** + * Package links. + */ +div.features-form-links ul#features-form-links, +div.features-form-links ul#features-form-links li, +div.features-form-links ul#features-form-links li a { + display:block; + float:none; + padding:0px; + margin:0px; +} + +div.features-form-links ul#features-form-links { + margin:0px 0px 10px; +} + +div.features-form-links ul#features-form-links li a { + background:#f8f8f8; + padding:5px 5px 4px 4px; + border-left:1px solid #eee; + border-bottom:1px solid #eee; + color: #000; + cursor:pointer; +} + +div.features-form-links ul#features-form-links li a.features-package-active { + padding:4px 5px 4px 4px; + background:#fff; + border:1px solid #ccc; + border-right:0px; + color: #000; + margin-right:-1px; +} + +/* Packages */ +div.features-form-package { + border:1px solid #ccc; + background:#fff; + color: #000; + padding:10px; + margin:0px 0px 20px; + display:none; +} + +div.features-package-active { + display:block; +} + +/** + * Features management form (admin/build/features). + */ +div.features-empty { + margin:15px 0px; + font-size:1.5em; + text-align:center; + color:#999; +} + +form div.buttons { + text-align:center; +} + +table.features .admin-loading, +table.features tr.disabled { + color:#999; +} + +table.features a.configure { + float:right; + font-style:italic; +} +table.features div.feature { + float:left; width:85%; +} +table.features div.feature strong { + font-size:13px; +} +table.features div.feature div.description { + font-size:11px; margin:0px; +} + +table.features-manage td.name { + width:80%; +} +table.features-manage td.sign { + width:20%; +} + +table.features-admin td.name { + width:60%; +} +table.features-admin td.sign { + width:20%; +} +table.features-admin td.state { + width:10%; +} +table.features-admin td.actions { + width:10%; +} + +table.features td.sign { + font-size:9px; + line-height:15px; + white-space:nowrap; +} + +table.features td.sign * { + margin:0px; +} + +table.features .admin-check, +table.features .admin-default, +table.features .admin-overridden, +table.features .admin-rebuilding, +table.features .admin-needs-review { + display:none; +} + +/** + * Feature export form (admin/build/features/export). + */ +form.features-export-form table td { + width:50%; +} +form.features-export-form table td { + vertical-align:top; +} +form.features-export-form table div.description { + white-space:normal; +} + +table.features-export div.form-item { + white-space:normal; +} +table.features-export select { + width:90%; +} +table.features-export td { + vertical-align:top; +} + +form.features-export-form div.features-select { + display:none; +} + +/* +form.features-export-form div.form-checkboxes { + overflow-x:hidden; + overflow-y:auto; + height:20em; + } + */ + +form.features-export-form div#edit-components-wrapper, +form.features-export-form div.features-select { + padding-right:20px; +} + +/** + * Feature component display (admin/build/features/%feature). + */ +div.features-components div.column { + float:left; + width:50%; +} + +div.features-components div.column div.info { + padding-right:20px; +} +div.features-components div.column div.components { + padding-left:20px; +} + +h3.features-download, +div.features-comparison h3, +div.features-components h3 { + font-size:2em; + font-weight:bold; + letter-spacing:-1px; + margin:15px 0px; +} + +h3.features-download { + text-align:center; +} + +div.features-components div.description { + font-size:11px; + margin:15px 0px; +} + +div.features-components table td { + font-size:11px; +} +div.features-components table td.component { + padding-left:20px; +} + +/** + * Features component lists. + */ +span.features-component-key { + font-size:11px; +} + +a.admin-update, +a.features-storage, +span.features-storage, +span.features-component-list span { + white-space:nowrap; + margin-right:5px; + padding:2px 5px; + background:#eee; + -moz-border-radius:5px; + -webkit-border-radius:5px; +} + +div.features-key span.admin-conflict, +span.features-component-list span.features-conflict { + background-color: #c30 !important; + color: #fff; +} + +#features-export-wrapper .features-conflict, +#features-export-wrapper .features-conflict label.option{ + color: #c30 !important; + font-weight: bold !important; +} + +div.conflicts span.admin-disabled { + color: #955; +} + +a.admin-update { + background:transparent; +} + +/* These pseudo selectors are necessary for themes like Garland. */ +a.admin-overridden:link, +a.admin-overridden:visited, +span.admin-overridden { + color:#fff; + background:#666; +} + +a.admin-needs-review:link, +a.admin-needs-review:visited, +span.admin-needs-review { + color:#963; + background:#fe6; +} + +a.admin-rebuilding:link, +a.admin-rebuilding:visited, +span.admin-rebuilding { + color:#fff; + background:#699; +} + +a.admin-conflict:link, +a.admin-conflict:visited, +span.admin-conflict { + color:#c30; +} + +table.features-diff td.diff-addedline, +span.features-component-list .features-detected { + color:#68a; + background:#def; +} + +table.features-diff td.diff-deletedline, +span.features-component-list .features-dependency { + color:#999; + background:#f8f8f8; +} + +/** + * Features diff. + */ +table.features-diff { + font-size:11px; +} + +table.features-diff td { + padding:0px 5px; +} + +table.features-diff td.diff-deletedline, +table.features-diff td.diff-addedline, +table.features-diff td.diff-context { + width:50%; + font-family:'Andale Mono',monospace; +} + +/** + * New UI component export list + */ +#features-export-wrapper div.features-export-parent { + clear: both; +} +#features-export-form .fieldset-content.fieldset-wrapper { + padding-top: 5px; +} +html.js #features-export-form fieldset.collapsed { + min-height: 2em; + margin-bottom: 0; + top: 0; + padding: 0 0 0 0; +} +fieldset.features-export-component { + background: #F3F8FB; + margin: 0.5em 0; + font-weight: normal; + font-size: 12px; + top: 0; +} +fieldset.features-export-component.collapsed { + background: #F3F8FB; +} +fieldset.features-export-component legend { + top: 0; +} +fieldset.features-export-component.collapsed .fieldset-wrapper { + margin: 0; + padding: 0 13px 6px 15px; +} +fieldset.features-export-component .fieldset-legend { + white-space: nowrap; +} +fieldset.features-export-component .fieldset-title span { + font-size: 11px; + text-transform: none; + font-weight: normal; +} +#features-export-wrapper .fieldset-wrapper { + font-size: 12px; +} +div.features-export-list { + font-weight: normal; + font-size: 12px; + border: 1px solid #CCC; + border-top-width: 0; + overflow: hidden; +} +#features-export-form .fieldset-description { + margin: 5px 0; + line-height: 1.231em; + font-size: 0.923em; + color: #666; +} +div.features-export-empty { + display: none; +} +fieldset.features-export-component .fieldset-wrapper .form-checkboxes { + max-height: 20em; + overflow: auto; + min-width: 100px; +} + +#features-export-wrapper .component-select .form-type-checkbox { + overflow: hidden; + padding: 0 0 0 2px; +} + +#features-export-wrapper .component-added .form-type-checkbox, +#features-export-wrapper .component-detected .form-type-checkbox, +#features-export-wrapper .component-included .form-type-checkbox { + float: left; + white-space: normal; + margin: 2px 5px; + padding: 0 5px; + background: transparent; +} + +#features-export-wrapper .component-added .form-type-checkbox { + font-weight: bold; + background: #EEE; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} +#features-export-wrapper div.component-added label.option { + font-weight: bold; +} +#features-export-wrapper .component-detected .form-type-checkbox { + font-style: italic; + color:#68a; + background:#def; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +#features-export-info { + width: 49%; + float: left; + position: relative; +} +#features-export-wrapper { + width: 49%; + float: right; + clear: both; + position: relative; +} +#features-export-advanced { + width: 49%; + float: left; + clear: left; + margin-top: 0.5em; + position: relative; +} +#features-export-buttons { + width: 49%; + float: left; + margin-top: 0.5em; + position: relative; + text-align: center; +} +#features-export-buttons input { + margin: 0 3px; +} + +#features-export-wrapper .component-added label a, +#features-export-wrapper .component-detected label a, +#features-export-wrapper .component-included label a { + display: inline; + float: none; +} +#features-export-wrapper label.component-added { + font-weight: bold; +} +#features-export-form input[size="60"].form-text { + width: 100%; +} +input.form-submit.features-refresh-button { + font-size: 0.7em; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + background-color: transparent; + margin-left: 1em; +} +.features-refresh-wrapper .ajax-progress { + font-size: 10px; + width: 10em; +} +#features-export-advanced .ajax-progress { + font-size: 10px; + width: 10em; +} +#features-export-wrapper div.fieldset-description, +#features-export-wrapper div.description { + clear: both; +} +#features-filter input[size="60"].form-text { + width: 200px; +} +#features-filter .fieldset-content, +#features-filter .fieldset-wrapper, +#features-filter fieldset { + border: 0; + padding: 0; + margin: 0; +} +#features-filter fieldset legend { + display: none; +} +#features-filter label, +#features-filter input { + display: inline; + width: auto; +} +#features-filter .form-item { + float: left; + margin: 5px 0; + padding: 0; +} +#features-filter .form-item.form-type-checkbox { + margin: 5px 0; +} +#features-filter span { + float: left; + white-space: normal; + margin: 5px 5px; + padding: 0 5px; + background: transparent; + background: #EEE; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + cursor: pointer; +} +#features-filter span:hover { + background:#def; +} +#features-autodetect .form-item { + float: left; + margin: 0 0; + padding: 0; +} +#features-autodetect .fieldset-content, +#features-autodetect .fieldset-wrapper, +#features-autodetect fieldset { + border: 0; + padding: 0; + margin: 1em 0 0 0; + top: 0; +} +#features-autodetect fieldset legend { + display: none; +} +#features-export-advanced .form-item.form-item-generate-path { + margin-bottom: 0; +} +#features-info-file .form-textarea-wrapper, +#features-info-file textarea { + height: 100%; +} + +#features-info-file .form-type-textarea { + height: 100%; + margin: 0; +} +#edit-info-preview { + margin: 1em 0; +} +#features-legend .fieldset-wrapper span { + font-style: normal; + color: black; + display: inline-block; + background: transparent; + border: 1px solid #DDD; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + white-space: nowrap; + padding: 0 8px; + margin: 0 10px 0 0; +} +#features-legend .fieldset-wrapper .component-detected { + font-style: italic; + color:#68a; + background:#def; + border-width: 0; +} +#features-legend .fieldset-wrapper .component-added { + font-weight: bold; + background: #EEE; + border-width: 0; +} + +fieldset.features-export-component .fieldset-title .component-count { +font-size: 12px; +font-weight: bold; +} + +.features-lock-icon { + display: inline-block; +} + +.features-components h3 { + display: inline-block; +} + +.features-lock-empty { + display: inline-block; + width: 16px; +} \ No newline at end of file diff --git a/sites/all/modules/custom/features/features.drush.inc b/sites/all/modules/custom/features/features.drush.inc new file mode 100644 index 0000000000..c1a15ac89f --- /dev/null +++ b/sites/all/modules/custom/features/features.drush.inc @@ -0,0 +1,915 @@ + "List all the available features for your site.", + 'options' => array( + 'status' => "Feature status, can be 'enabled', 'disabled' or 'all'", + ), + 'drupal dependencies' => array('features'), + 'aliases' => array('fl', 'features'), + ); + $items['features-export'] = array( + 'description' => "Export a feature from your site into a module.", + 'arguments' => array( + 'feature' => 'Feature name to export.', + 'components' => 'Patterns of components to include, see features-components for the format of patterns.' + ), + 'options' => array( + 'destination' => "Destination path (from Drupal root) of the exported feature. Defaults to '" . $path . "'.", + 'version-set' => "Specify a version number for the feature.", + 'version-increment' => "Increment the feature's version number.", + ), + 'drupal dependencies' => array('features'), + 'aliases' => array('fe'), + ); + $items['features-add'] = array( + 'description' => "Add a component to a feature module. (DEPRECATED: use features-export)", + 'arguments' => array( + 'feature' => 'Feature name to add to.', + 'components' => 'List of components to add.', + ), + 'options' => array( + 'version-set' => "Specify a version number for the feature.", + 'version-increment' => "Increment the feature's version number.", + ), + 'drupal dependencies' => array('features'), + 'aliases' => array('fa'), + ); + $items['features-components'] = array( + 'description' => 'List features components.', + 'arguments' => array( + 'patterns' => 'The features components type to list. Omit this argument to list all components.', + ), + 'options' => array( + 'exported' => array( + 'description' => 'Show only components that have been exported.', + ), + 'not-exported' => array( + 'description' => 'Show only components that have not been exported.', + ), + ), + 'aliases' => array('fc'), + ); + $items['features-update'] = array( + 'description' => "Update a feature module on your site.", + 'arguments' => array( + 'feature' => 'A space delimited list of features.', + ), + 'options' => array( + 'version-set' => "Specify a version number for the feature.", + 'version-increment' => "Increment the feature's version number.", + ), + 'drupal dependencies' => array('features'), + 'aliases' => array('fu'), + ); + $items['features-update-all'] = array( + 'description' => "Update all feature modules on your site.", + 'arguments' => array( + 'feature_exclude' => 'A space-delimited list of features to exclude from being updated.', + ), + 'drupal dependencies' => array('features'), + 'aliases' => array('fu-all', 'fua'), + ); + $items['features-revert'] = array( + 'description' => "Revert a feature module on your site.", + 'arguments' => array( + 'feature' => 'A space delimited list of features or feature.component pairs.', + ), + 'options' => array( + 'force' => "Force revert even if Features assumes components' state are default.", + ), + 'examples' => array( + 'drush fr foo.node foo.taxonomy bar' => 'Revert node and taxonomy components of feature "foo", but only if they are overriden. Revert all overriden components of feature "bar".', + 'drush fr foo.node foo.taxonomy bar --force' => 'Revert node and taxonomy components of feature "foo". Revert all components of feature "bar".', + ), + 'drupal dependencies' => array('features'), + 'aliases' => array('fr'), + ); + $items['features-revert-all'] = array( + 'description' => "Revert all enabled feature module on your site.", + 'arguments' => array( + 'feature_exclude' => 'A space-delimited list of features to exclude from being reverted.', + ), + 'options' => array( + 'force' => "Force revert even if Features assumes components' state are default.", + ), + 'drupal dependencies' => array('features'), + 'aliases' => array('fr-all', 'fra'), + ); + $items['features-diff'] = array( + 'description' => "Show the difference between the default and overridden state of a feature.", + 'arguments' => array( + 'feature' => 'The feature in question.', + ), + 'options' => array( + 'ctypes' => 'Comma separated list of component types to limit the output to. Defaults to all types.', + 'lines' => 'Generate diffs with lines of context instead of the usual two.', + ), + 'drupal dependencies' => array('features', 'diff'), + 'aliases' => array('fd'), + ); + + return $items; +} + +/** + * Implements hook_drush_help(). + */ +function features_drush_help($section) { + // If Features is enabled display the configured default export path, + // otherwise just show the default. + if (defined('FEATURES_DEFAULT_EXPORT_PATH')) { + $path = variable_get('features_default_export_path', FEATURES_DEFAULT_EXPORT_PATH); + } + else { + $path = 'sites/all/modules'; + } + + switch ($section) { + case 'drush:features': + return dt("List all the available features for your site."); + case 'drush:features-export': + return dt("Export a feature from your site into a module. If called with no arguments, display a list of available components. If called with a single argument, attempt to create a feature including the given component with the same name. The option '--destination=foo' may be used to specify the path (from Drupal root) where the feature should be created. The default destination is '@path'. The option '--version-set=foo' may be used to specify a version number for the feature or the option '--version-increment' may also to increment the feature's version number.", array('@path' => $path)); + case 'drush:features-components': + return dt("List feature components matching patterns. The listing may be limited to exported/not-exported components. + +A component pattern consists of a source, a colon and a component. Both source and component may be a full name (as in \"dependencies\"), a shorthand (for instance \"dep\") or a pattern (like \"%denci%\"). + +Shorthands are unique shortenings of a name. They will only match if exactly one option contains the shorthand. So in a standard installation, \"dep\" will work for dependencies, but \"user\" wont, as it matches both user_permission and user_role. + +Patterns uses * or % for matching multiple sources/components. Unlike shorthands, patterns must match the whole name, so \"field:%article%\" should be used to select all fields containing \"article\" (which could both be those on the node type article, as well as those fields named article). * and % are equivalent, but the latter doesn't have to be escaped in UNIX shells. + +Lastly, a pattern without a colon is interpreted as having \":%\" appended, for easy listing of all components of a source. +"); + case 'drush:features-update': + return dt("Update a feature module on your site. The option '--version-set=foo' may be used to specify a version number for the feature or the option '--version-increment' may also to increment the feature's version number."); + case 'drush:features-update-all': + return dt("Update all feature modules on your site."); + case 'drush:features-revert': + return dt("Revert a feature module on your site."); + case 'drush:features-revert-all': + return dt("Revert all enabled feature module on your site."); + case 'drush:features-diff': + return dt("Show a diff of a feature module."); + case 'drush:features-add': + return dt("Add a component to a feature module. The option '--version-set=foo' may be used to specify a version number for the feature or the option '--version-increment' may also to increment the feature's version number."); + } +} + +/** + * Get a list of all feature modules. + */ +function drush_features_list() { + $status = drush_get_option('status') ? drush_get_option('status') : 'all'; + if (!in_array($status, array('enabled', 'disabled', 'all'))) { + return drush_set_error('', dt('!status is not valid', array('!status' => $status))); + } + + module_load_include('inc', 'features', 'features.export'); + $rows = array(array(dt('Name'), dt('Feature'), dt('Status'), dt('Version'), dt('State'))); + + // Sort the Features list before compiling the output. + $features = features_get_features(NULL, TRUE); + ksort($features); + + foreach ($features as $k => $m) { + switch (features_get_storage($m->name)) { + case FEATURES_DEFAULT: + case FEATURES_REBUILDABLE: + $storage = ''; + break; + case FEATURES_OVERRIDDEN: + $storage = dt('Overridden'); + break; + case FEATURES_NEEDS_REVIEW: + $storage = dt('Needs review'); + break; + } + if ( + ($m->status == 0 && ($status == 'all' || $status == 'disabled')) || + ($m->status == 1 && ($status == 'all' || $status == 'enabled')) + ) { + $rows[] = array( + $m->info['name'], + $m->name, + $m->status ? dt('Enabled') : dt('Disabled'), + $m->info['version'], + $storage + ); + } + } + drush_print_table($rows, TRUE); +} + +/** + * List components, with pattern matching. + */ +function drush_features_components() { + $args = func_get_args(); + $components = _drush_features_component_list(); + ksort($components); + // If no args supplied, prompt with a list. + if (empty($args)) { + $types = array_keys($components); + array_unshift($types, 'all'); + $choice = drush_choice($types, 'Enter a number to choose which component type to list.'); + if ($choice === FALSE) { + return; + } + + $args = ($choice == 0) ? array('*') : array($types[$choice]); + } + $options = array( + 'provided by' => TRUE, + ); + if (drush_get_option(array('exported', 'e'), NULL)) { + $options['not exported'] = FALSE; + } + elseif (drush_get_option(array('not-exported', 'o'), NULL)) { + $options['exported'] = FALSE; + } + + $filtered_components = _drush_features_component_filter($components, $args, $options); + if ($filtered_components){ + _drush_features_component_print($filtered_components); + } +} + +/** + * Returns a listing of all known components, indexed by source. + */ +function _drush_features_component_list() { + $components = array(); + foreach (features_get_feature_components() as $source => $info) { + if ($options = features_invoke($source, 'features_export_options')) { + foreach ($options as $name => $title) { + $components[$source][$name] = $title; + } + } + } + return $components; +} + +/** + * Filters components by patterns. + */ +function _drush_features_component_filter($all_components, $patterns = array(), $options = array()) { + $options += array( + 'exported' => TRUE, + 'not exported' => TRUE, + 'provided by' => FALSE, + ); + $pool = array(); + // Maps exported components to feature modules. + $components_map = features_get_component_map(); + // First filter on exported state. + foreach ($all_components as $source => $components) { + foreach ($components as $name => $title) { + $exported = sizeof($components_map[$source][$name]) > 0; + if ($exported) { + if ($options['exported']) { + $pool[$source][$name] = $title; + } + } + else { + if ($options['not exported']) { + $pool[$source][$name] = $title; + } + } + } + } + + $state_string = ''; + + if (!$options['exported']) { + $state_string = 'unexported'; + } + elseif (!$options['not exported']) { + $state_string = 'exported'; + } + + $selected = array(); + foreach ($patterns as $pattern) { + // Rewrite * to %. Let users use both as wildcard. + $pattern = strtr($pattern, array('*' => '%')); + $sources = array(); + list($source_pattern, $component_pattern) = explode(':', $pattern, 2); + // If source is empty, use a pattern. + if ($source_pattern == '') { + $source_pattern = '%'; + } + if ($component_pattern == '') { + $component_pattern = '%'; + } + + $preg_source_pattern = strtr(preg_quote($source_pattern, '/'), array('%' => '.*')); + $preg_component_pattern = strtr(preg_quote($component_pattern, '/'), array('%' => '.*')); + /* + * If it isn't a pattern, but a simple string, we don't anchor the + * pattern, this allows for abbreviating. Else, we do, as this seems more + * natural for patterns. + */ + if (strpos($source_pattern, '%') !== FALSE) { + $preg_source_pattern = '^' . $preg_source_pattern . '$'; + } + if (strpos($component_pattern, '%') !== FALSE) { + $preg_component_pattern = '^' . $preg_component_pattern . '$'; + } + $matches = array(); + + // Find the sources. + $all_sources = array_keys($pool); + $matches = preg_grep('/' . $preg_source_pattern . '/', $all_sources); + if (sizeof($matches) > 0) { + // If we have multiple matches and the source string wasn't a + // pattern, check if one of the matches is equal to the pattern, and + // use that, or error out. + if (sizeof($matches) > 1 and $preg_source_pattern[0] != '^') { + if (in_array($source_pattern, $matches)) { + $matches = array($source_pattern); + } + else { + return drush_set_error('', dt('Ambiguous source "!source", matches !matches', array('!source' => $source_pattern, '!matches' => join(', ', $matches)))); + } + } + // Loose the indexes preg_grep preserved. + $sources = array_values($matches); + } + else { + return drush_set_error('', dt('No !state sources match "!source"', array('!state' => $state_string, '!source' => $source_pattern))); + } + + + // Now find the components. + foreach ($sources as $source) { + // Find the components. + $all_components = array_keys($pool[$source]); + // See if there's any matches. + $matches = preg_grep('/' . $preg_component_pattern . '/', $all_components); + if (sizeof($matches) > 0) { + // If we have multiple matches and the components string wasn't a + // pattern, check if one of the matches is equal to the pattern, and + // use that, or error out. + if (sizeof($matches) > 1 and $preg_component_pattern[0] != '^') { + if (in_array($component_pattern, $matches)) { + $matches = array($component_pattern); + } + else { + return drush_set_error('', dt('Ambiguous component "!component", matches !matches', array('!component' => $component_pattern, '!matches' => join(', ', $matches)))); + } + } + if (!is_array($selected[$source])) { + $selected[$source] = array(); + } + $selected[$source] += array_intersect_key($pool[$source], array_flip($matches)); + } + else { + // No matches. If the source was a pattern, just carry on, else + // error out. Allows for patterns like :*field* + if ($preg_source_pattern[0] != '^') { + return drush_set_error('', dt('No !state !source components match "!component"', array('!state' => $state_string, '!component' => $component_pattern, '!source' => $source))); + } + } + } + } + + // Lastly, provide feature module information on the selected components, if + // requested. + $provided_by = array(); + if ($options['provided by'] && $options['exported'] ) { + foreach ($selected as $source => $components) { + foreach ($components as $name => $title) { + $exported = sizeof($components_map[$source][$name]) > 0; + if ($exported) { + $provided_by[$source . ':' . $name] = join(', ', $components_map[$source][$name]); + } + } + } + } + + return array( + 'components' => $selected, + 'sources' => $provided_by, + ); +} + +/** + * Prints a list of filtered components. + */ +function _drush_features_component_print($filtered_components) { + $rows = array(array(dt('Available sources'))); + foreach ($filtered_components['components'] as $source => $components) { + foreach ($components as $name => $value) { + $row = array($source .':'. $name); + if (isset($filtered_components['sources'][$source .':'. $name])) { + $row[] = dt('Provided by') . ': ' . $filtered_components['sources'][$source .':'. $name]; + } + $rows[] = $row; + } + } + + drush_print_table($rows, TRUE); +} + +/** + * Add a component to a features module, or create a new module with + * the selected components. + */ +function drush_features_export() { + if ($args = func_get_args()) { + $module = array_shift($args); + if (empty($args)) { + return drush_set_error('', 'No components supplied.'); + } + $components = _drush_features_component_list(); + $options = array( + 'exported' => FALSE, + ); + + $filtered_components = _drush_features_component_filter($components, $args, $options); + $items = $filtered_components['components']; + + if (empty($items)) { + return drush_set_error('', 'No components to add.'); + } + + $items = array_map('array_keys', $items); + + if (($feature = features_load_feature($module, TRUE)) && module_exists($module)) { + module_load_include('inc', 'features', 'features.export'); + _features_populate($items, $feature->info, $feature->name); + _drush_features_export($feature->info, $feature->name, dirname($feature->filename)); + } + elseif ($feature) { + _features_drush_set_error($module, 'FEATURES_FEATURE_NOT_ENABLED'); + } + else { + // Same logic as in _drush_features_export. Should be refactored. + $destination = drush_get_option(array('destination'), variable_get('features_default_export_path', FEATURES_DEFAULT_EXPORT_PATH)); + $directory = isset($directory) ? $directory : $destination . '/' . $module; + drush_print(dt('Will create a new module in !dir', array('!dir' => $directory))); + if (!drush_confirm(dt('Do you really want to continue?'))) { + drush_die('Aborting.'); + } + $export = _drush_features_generate_export($items, $module); + _features_populate($items, $export[info], $export[name]); + _drush_features_export($export['info'], $module, $directory); + } + } + else { + return drush_set_error('', 'No feature name given.'); + } +} + +/** + * Add a component to a features module + * the selected components. + * + * This is DEPRECATED, but keeping it around for a bit longer for user migration + */ +function drush_features_add() { + drush_print(dt('features-add is DEPRECATED.')); + drush_print(dt('Calling features-export instead.')); + drush_features_export(); +} + + +/** + * Update an existing feature module. + */ +function drush_features_update() { + if ($args = func_get_args()) { + foreach ($args as $module) { + if (($feature = features_load_feature($module, TRUE)) && module_exists($module)) { + _drush_features_export($feature->info, $feature->name, dirname($feature->filename)); + } + elseif ($feature) { + _features_drush_set_error($module, 'FEATURES_FEATURE_NOT_ENABLED'); + } + else { + _features_drush_set_error($module); + } + } + } + else { + // By default just show contexts that are available. + $rows = array(array(dt('Available features'))); + foreach (features_get_features(NULL, TRUE) as $name => $info) { + $rows[] = array($name); + } + drush_print_table($rows, TRUE); + } +} + +/** + * Update all enabled features. Optionally pass in a list of features to + * exclude from being updated. + */ +function drush_features_update_all() { + $features_to_update = array(); + $features_to_exclude = func_get_args(); + foreach (features_get_features() as $module) { + if ($module->status && !in_array($module->name, $features_to_exclude)) { + $features_to_update[] = $module->name; + } + } + $dt_args = array('!modules' => implode(', ', $features_to_update)); + drush_print(dt('The following modules will be updated: !modules', $dt_args)); + if (!drush_confirm(dt('Do you really want to continue?'))) { + return drush_user_abort('Aborting.'); + } + // If we got here, set affirmative to TRUE, so that the user doesn't have to + // confirm each and every feature. Start off by storing the current value, + // so we can set it back afteward. + $skip_confirmation = drush_get_context('DRUSH_AFFIRMATIVE'); + drush_set_context('DRUSH_AFFIRMATIVE', TRUE); + // Now update all the features. + drush_invoke('features-update', $features_to_update); + // Now set it back as it was, in case other commands are called after this. + drush_set_context('DRUSH_AFFIRMATIVE', $skip_confirmation); +} + +/** + * Write a module to the site dir. + * + * @param $info + * The feature info associative array. + * @param $module_name + * Optional. The name for the exported module. + */ +function _drush_features_export($info, $module_name = NULL, $directory = NULL) { + $root = drush_get_option(array('r', 'root'), drush_locate_root()); + $skip_confirmation = drush_get_context('DRUSH_AFFIRMATIVE'); + if ($root) { + $destination = drush_get_option(array('destination'), variable_get('features_default_export_path', FEATURES_DEFAULT_EXPORT_PATH)); + $directory = isset($directory) ? $directory : $destination . '/' . $module_name; + if (is_dir($directory)) { + // If we aren't skipping confirmation and the directory already exists, + // prompt the user. This message most make sense for but fe and fu. + if (!$skip_confirmation && !drush_confirm(dt('Module located at !dir will be updated. Do you want to continue?', array('!dir' => $directory)))) { + drush_die('Aborting.'); + } + } + else { + drush_op('mkdir', $directory); + } + if (is_dir($directory)) { + drupal_flush_all_caches(); + $export = _drush_features_generate_export($info, $module_name); + $files = features_export_render($export, $module_name, TRUE); + foreach ($files as $extension => $file_contents) { + if (!in_array($extension, array('module', 'info'))) { + $extension .= '.inc'; + } + drush_op('file_put_contents', "{$directory}/{$module_name}.$extension", $file_contents); + } + drush_log(dt("Created module: !module in !directory", array('!module' => $module_name, '!directory' => $directory)), 'ok'); + } + else { + drush_die(dt('Couldn\'t create directory !directory', array('!directory' => $directory))); + } + } + else { + drush_die(dt('Couldn\'t locate site root')); + } +} + +/** + * Helper function for _drush_feature_export. + * + * @param $info + * The feature info associative array. + * @param $module_name + * Optional. The name for the exported module. + */ +function _drush_features_generate_export(&$info, &$module_name) { + module_load_include('inc', 'features', 'features.export'); + $export = features_populate($info, $module_name); + if (!features_load_feature($module_name)) { + $export['name'] = $module_name; + } + // Set the feature version if the --version-set or --version-increment option is passed. + if ($version = drush_get_option(array('version-set'))) { + preg_match('/^(?P\d+\.x)-(?P\d+)\.(?P\d+)-?(?P\w+)?$/', $version, $matches); + if (!isset($matches['core'], $matches['major'])) { + drush_die(dt('Please enter a valid version with core and major version number. Example: !example', array('!example' => '7.x-1.0'))); + } + $export['version'] = $version; + } + elseif ($version = drush_get_option(array('version-increment'))) { + // Determine current version and increment it. + $export_load = features_export_prepare($export, $module_name); + $version = $export_load['version']; + $version_explode = explode('.', $version); + $version_minor = array_pop($version_explode); + // Increment minor version number if numeric or not a dev release. + if (is_numeric($version_minor) || strpos($version_minor, 'dev') !== (strlen($version_minor) - 3)) { + // Check for prefixed versions (alpha, beta, rc). + if (ctype_digit($version_minor)) { + ++$version_minor; + } + else { + // Split version number parts. + $pattern = '/([0-9]-[a-z]+([0-9])+)/'; + $matches = array(); + preg_match($pattern, $version_minor, $matches); + $number = array_pop($matches); + ++$number; + $pattern = '/[0-9]+$/'; + $version_minor = preg_replace($pattern, $number, $version_minor); + } + } + array_push($version_explode, $version_minor); + // Rebuild version string. + $version = implode('.', $version_explode); + $export['version'] = $version; + } + return $export; +} + +/** + * Revert a feature to it's code definition. + * Optionally accept a list of components to revert. + */ +function drush_features_revert() { + if ($args = func_get_args()) { + module_load_include('inc', 'features', 'features.export'); + features_include(); + + // Determine if revert should be forced. + $force = drush_get_option('force'); + // Determine if -y was supplied. If so, we can filter out needless output + // from this command. + $skip_confirmation = drush_get_context('DRUSH_AFFIRMATIVE'); + + // Parse list of arguments. + $modules = array(); + foreach ($args as $arg) { + $arg = explode('.', $arg); + $module = array_shift($arg); + $component = array_shift($arg); + + if (isset($module)) { + if (empty($component)) { + // If we received just a feature name, this means that we need all of it's components. + $modules[$module] = TRUE; + } + elseif ($modules[$module] !== TRUE) { + if (!isset($modules[$module])) { + $modules[$module] = array(); + } + $modules[$module][] = $component; + } + } + } + + // Process modules. + foreach ($modules as $module => $components_needed) { + $dt_args['@module'] = $module; + if (($feature = features_load_feature($module, TRUE)) && module_exists($module)) { + + $components = array(); + // Forcefully revert all components of a feature. + if ($force) { + foreach (array_keys($feature->info['features']) as $component) { + if (features_hook($component, 'features_revert')) { + $components[] = $component; + } + } + } + // Only revert components that are detected to be Overridden/Needs review/rebuildable. + else { + $states = features_get_component_states(array($feature->name), FALSE); + foreach ($states[$feature->name] as $component => $state) { + $revertable_states = array(FEATURES_OVERRIDDEN, FEATURES_NEEDS_REVIEW, FEATURES_REBUILDABLE); + if (in_array($state, $revertable_states) && features_hook($component, 'features_revert')) { + $components[] = $component; + } + } + } + + if (!empty($components_needed) && is_array($components_needed)) { + $components = array_intersect($components, $components_needed); + } + if (empty($components)) { + drush_log(dt('Current state already matches defaults, aborting.'), 'ok'); + } + else { + foreach ($components as $component) { + $dt_args['@component'] = $component; + $confirmation_message = 'Do you really want to revert @module.@component?'; + if ($skip_confirmation || drush_confirm(dt($confirmation_message, $dt_args))) { + if (features_feature_is_locked($module, $component)) { + drush_log(dt('Skipping locked @module.@component.', $dt_args), 'ok'); + } + else { + features_revert(array($module => array($component))); + drush_log(dt('Reverted @module.@component.', $dt_args), 'ok'); + } + } + else { + drush_log(dt('Skipping @module.@component.', $dt_args), 'ok'); + } + } + } + } + elseif ($feature) { + _features_drush_set_error($module, 'FEATURES_FEATURE_NOT_ENABLED'); + } + else { + _features_drush_set_error($module); + } + } + } + else { + drush_features_list(); + return; + } +} + +/** + * Revert all enabled features to their definitions in code. + * + * @param ... + * (Optional) A list of features to exclude from being reverted. + */ +function drush_features_revert_all() { + module_load_include('inc', 'features', 'features.export'); + $force = drush_get_option('force'); + $features_to_exclude = func_get_args(); + + $features_to_revert = array(); + foreach (features_get_features(NULL, TRUE) as $module) { + if ($module->status && !in_array($module->name, $features_to_exclude)) { + // If forced, add module regardless of status. + if ($force) { + $features_to_revert[] = $module->name; + } + else { + switch (features_get_storage($module->name)) { + case FEATURES_OVERRIDDEN: + case FEATURES_NEEDS_REVIEW: + case FEATURES_REBUILDABLE: + $features_to_revert[] = $module->name; + break; + } + } + } + } + + if ($features_to_revert) { + $dt_args = array('!modules' => implode(', ', $features_to_revert)); + drush_print(dt('The following modules will be reverted: !modules', $dt_args)); + // Confirm that the user would like to continue. If not, simply abort. + if (!drush_confirm(dt('Do you really want to continue?'))) { + return drush_user_abort('Aborting.'); + } + drush_invoke('features-revert', $features_to_revert); + } + else { + drush_log(dt('Current state already matches defaults, aborting.'), 'ok'); + } +} + +/** + * Show the diff of a feature module. + */ +function drush_features_diff() { + if (!$args = func_get_args()) { + drush_features_list(); + return; + } + $module = $args[0]; + $filter_ctypes = drush_get_option("ctypes"); + if ($filter_ctypes) { + $filter_ctypes = explode(',', $filter_ctypes); + } + + $feature = features_load_feature($module); + if (!module_exists($module)) { + drush_log(dt('No such feature is enabled: ' . $module), 'error'); + return; + } + module_load_include('inc', 'features', 'features.export'); + $overrides = features_detect_overrides($feature); + if (empty($overrides)) { + drush_log(dt('Feature is in its default state. No diff needed.'), 'ok'); + return; + } + module_load_include('inc', 'diff', 'diff.engine'); + + if (!class_exists('DiffFormatter')) { + if (drush_confirm(dt('It seems that the Diff module is not available. Would you like to download and enable it?'))) { + // Download it if it's not already here. + $project_info = drush_get_projects(); + if (empty($project_info['diff']) && !drush_invoke('dl', array('diff'))) { + return drush_set_error(dt('Diff module could not be downloaded.')); + } + + if (!drush_invoke('en', array('diff'))) { + return drush_set_error(dt('Diff module could not be enabled.')); + } + } + else { + return drush_set_error(dt('Diff module is not enabled.')); + } + // If we're still here, now we can include the diff.engine again. + module_load_include('inc', 'diff', 'diff.engine'); + } + + $lines = (int) drush_get_option('lines'); + $lines = $lines > 0 ? $lines : 2; + + $formatter = new DiffFormatter(); + $formatter->leading_context_lines = $lines; + $formatter->trailing_context_lines = $lines; + $formatter->show_header = FALSE; + + if (drush_get_context('DRUSH_NOCOLOR')) { + $red = $green = "%s"; + } + else { + $red = "\033[31;40m\033[1m%s\033[0m"; + $green = "\033[0;32;40m\033[1m%s\033[0m"; + } + + // Print key for colors + drush_print(dt('Legend: ')); + drush_print(sprintf($red, dt('Code: drush features-revert will remove the overrides.'))); + drush_print(sprintf($green, dt('Overrides: drush features-update will update the exported feature with the displayed overrides'))); + drush_print(); + + if ($filter_ctypes) { + $overrides = array_intersect_key($overrides, array_flip($filter_ctypes)); + } + foreach ($overrides as $component => $items) { + $diff = new Diff(explode("\n", $items['default']), explode("\n", $items['normal'])); + drush_print(); + drush_print(dt("Component type: !component", array('!component' => $component))); + $rows = explode("\n", $formatter->format($diff)); + foreach ($rows as $row) { + if (strpos($row, '>') === 0) { + drush_print(sprintf($green, $row)); + } + elseif (strpos($row, '<') === 0) { + drush_print(sprintf($red, $row)); + } + else { + drush_print($row); + } + } + } +} + +/** + * Helper function to call drush_set_error(). + * + * @param $feature + * The string name of the feature. + * @param $error + * A text string identifying the type of error. + * @return + * FALSE. See drush_set_error(). + */ +function _features_drush_set_error($feature, $error = '') { + $args = array('!feature' => $feature); + + switch ($error) { + case 'FEATURES_FEATURE_NOT_ENABLED': + $message = 'The feature !feature is not enabled.'; + break; + case 'FEATURES_COMPONENT_NOT_FOUND': + $message = 'The given component !feature could not be found.'; + break; + default: + $error = 'FEATURES_FEATURE_NOT_FOUND'; + $message = 'The feature !feature could not be found.'; + } + + return drush_set_error($error, dt($message, $args)); +} diff --git a/sites/all/modules/custom/features/features.export.inc b/sites/all/modules/custom/features/features.export.inc new file mode 100644 index 0000000000..154b26bc3c --- /dev/null +++ b/sites/all/modules/custom/features/features.export.inc @@ -0,0 +1,1012 @@ + array(), 'dependencies' => array(), 'conflicts' => array()) + $info + array('features_exclude' => array()); + $export = _features_populate($items, $stub, $module_name, TRUE); + + // Add Features API version. Any module with this entry in the .info file + // will be treated as a Feature and included in the admin/build/features UI. + $export['features']['features_api']['api:' . FEATURES_API] = TRUE; + // Allow other modules to alter the export. + drupal_alter('features_export', $export, $module_name); + + // Clean up and standardize order + foreach (array_keys($export['features']) as $k) { + ksort($export['features'][$k]); + } + ksort($export['features']); + ksort($export['dependencies']); + ksort($export['features_exclude']); + + return $export; +} + +/** + * Iterate and descend into a feature definition to extract module + * dependencies and feature definition. Calls hook_features_export for modules + * that implement it. + * + * @param $pipe + * Associative of array of module => info-for-module + * @param $export + * Associative array of items, and module dependencies which define a feature. + * Passed by reference. + * + * @return fully populated $export array. + */ +function _features_populate($pipe, &$export, $module_name = '', $reset = FALSE) { + if ($reset) { + drupal_static_reset(__FUNCTION__); + } + $processed = &drupal_static(__FUNCTION__, array()); + features_include(); + foreach ($pipe as $component => $data) { + // Convert already defined items to dependencies. +// _features_resolve_dependencies($data, $export, $module_name, $component); + // Remove any excluded items. + if (!empty($export['features_exclude'][$component])) { + $data = array_diff($data, $export['features_exclude'][$component]); + if ($component == 'dependencies' && !empty($export['dependencies'])) { + $export['dependencies'] = array_diff($export['dependencies'], $export['features_exclude'][$component]); + } + } + if (!empty($data) && $function = features_hook($component, 'features_export')) { + // Pass module-specific data and export array. + // We don't use features_invoke() here since we need to pass $export by reference. + $more = $function($data, $export, $module_name, $component); + // Add the context information. + $export['component'] = $component; + $export['module_name'] = $module_name; + // Allow other modules to manipulate the pipe to add in additional modules. + drupal_alter(array('features_pipe', 'features_pipe_' . $component), $more, $data, $export); + // Remove the component information. + unset($export['component']); + unset($export['module_name']); + // Allow for export functions to request additional exports, but avoid + // circular references on already processed components. + $processed[$component] = isset($processed[$component]) ? array_merge($processed[$component], $data) : $data; + + if (!empty($more)) { + // Remove already processed components. + foreach ($more as $component_name => $component_data) { + if (isset($processed[$component_name])) { + $more[$component_name] = array_diff($component_data, $processed[$component_name]); + } + } + if ($more = array_filter($more)) { + _features_populate($more, $export, $module_name); + } + } + } + } + return $export; +} + +/** + * Iterates over data and convert to dependencies if already defined elsewhere. + */ +function _features_resolve_dependencies(&$data, &$export, $module_name, $component) { + if ($map = features_get_default_map($component)) { + foreach ($data as $key => $item) { + // If this node type is provided by a different module, add it as a dependency + if (isset($map[$item]) && $map[$item] != $module_name) { + $export['dependencies'][$map[$item]] = $map[$item]; + unset($data[$key]); + } + } + } +} + +/** + * Iterates over a list of dependencies and kills modules that are + * captured by other modules 'higher up'. + */ +function _features_export_minimize_dependencies($dependencies, $module_name = '') { + // Ensure that the module doesn't depend upon itself + if (!empty($module_name) && !empty($dependencies[$module_name])) { + unset($dependencies[$module_name]); + } + + // Do some cleanup: + // - Remove modules required by Drupal core. + // - Protect against direct circular dependencies. + // - Remove "intermediate" dependencies. + $required = drupal_required_modules(); + foreach ($dependencies as $k => $v) { + if (empty($v) || in_array($v, $required)) { + unset($dependencies[$k]); + } + else { + $module = features_get_modules($v); + if ($module && !empty($module->info['dependencies'])) { + // If this dependency depends on the module itself, we have a circular dependency. + // Don't let it happen. Only you can prevent forest fires. + if (in_array($module_name, $module->info['dependencies'])) { + unset($dependencies[$k]); + } + // Iterate through the dependency's dependencies and remove any dependencies + // that are captured by it. + else { + foreach ($module->info['dependencies'] as $j => $dependency) { + if (array_search($dependency, $dependencies) !== FALSE) { + $position = array_search($dependency, $dependencies); + unset($dependencies[$position]); + } + } + } + } + } + } + return drupal_map_assoc(array_unique($dependencies)); +} + +/** + * Iterates over a list of dependencies and maximize the list of modules. + */ +function _features_export_maximize_dependencies($dependencies, $module_name = '', $maximized = array(), $first = TRUE) { + foreach ($dependencies as $k => $v) { + $parsed_dependency = drupal_parse_dependency($v); + $name = $parsed_dependency['name']; + if (!in_array($name, $maximized)) { + $maximized[] = $name; + $module = features_get_modules($name); + if ($module && !empty($module->info['dependencies'])) { + $maximized = array_merge($maximized, _features_export_maximize_dependencies($module->info['dependencies'], $module_name, $maximized, FALSE)); + } + } + } + return array_unique($maximized); +} + +/** + * Prepare a feature export array into a finalized info array. + * @param $export + * An exported feature definition. + * @param $module_name + * The name of the module to be exported. + * @param $reset + * Boolean flag for resetting the module cache. Only set to true when + * doing a final export for delivery. + */ +function features_export_prepare($export, $module_name, $reset = FALSE, $add_deprecated = TRUE) { + $existing = features_get_modules($module_name, $reset); + + // copy certain exports directly into info + $copy_list = array('scripts', 'stylesheets'); + foreach ($copy_list as $item) { + if(isset($export[$item])) { + $existing->info[$item] = $export[$item]; + } + } + + // Prepare info string -- if module exists, merge into its existing info file + $defaults = !empty($existing->info) ? $existing->info : array('core' => '7.x', 'package' => 'Features'); + $export = array_merge($defaults, $export); + + $deprecated = features_get_deprecated(); + // Cleanup info array + foreach ($export['features'] as $component => $data) { + // if performing the final export, do not export deprecated components + if (($reset || !$add_deprecated) && !empty($deprecated[$component])) { + unset($export['features'][$component]); + } + else { + $export['features'][$component] = array_keys($data); + } + } + if (isset($export['dependencies'])) { + $export['dependencies'] = array_values($export['dependencies']); + } + if (isset($export['conflicts'])) { + unset($export['conflicts']); + } + + // Order info array. + $standard_info = array(); + foreach (array_merge(array('name', 'description', 'core', 'package', 'version', 'project', 'dependencies'), $copy_list) as $item) { + if (isset($export[$item])) { + $standard_info[$item] = $export[$item]; + } + } + if (isset($export['php']) && ($export['php'] != DRUPAL_MINIMUM_PHP)) { + $standard_info['php'] = $export['php']; + } + unset($export['php']); + + $export = features_array_diff_assoc_recursive($export, $standard_info); + ksort($export); + return array_merge($standard_info, $export); +} + +/** + * Generate an array of hooks and their raw code. + */ +function features_export_render_hooks($export, $module_name, $reset = FALSE) { + features_include(); + $code = array(); + + // Sort components to keep exported code consistent + ksort($export['features']); + + foreach ($export['features'] as $component => $data) { + if (!empty($data)) { + // Sort the items so that we don't generate different exports based on order + asort($data); + if (features_hook($component, 'features_export_render')) { + $hooks = features_invoke($component, 'features_export_render', $module_name, $data, $export); + $code[$component] = $hooks; + } + } + } + return $code; +} + +/** + * Render feature export into an array representing its files. + * + * @param $export + * An exported feature definition. + * @param $module_name + * The name of the module to be exported. + * @param $reset + * Boolean flag for resetting the module cache. Only set to true when + * doing a final export for delivery. + * + * @return array of info file and module file contents. + */ +function features_export_render($export, $module_name, $reset = FALSE) { + $code = array(); + + // Generate hook code + $component_hooks = features_export_render_hooks($export, $module_name, $reset); + $components = features_get_components(); + $deprecated = features_get_deprecated($components); + + // Group component code into their respective files + foreach ($component_hooks as $component => $hooks) { + if ($reset && !empty($deprecated[$component])) { + // skip deprecated components on final export + continue; + } + $file = array('name' => 'features'); + if (isset($components[$component]['default_file'])) { + switch ($components[$component]['default_file']) { + case FEATURES_DEFAULTS_INCLUDED: + $file['name'] = "features.$component"; + break; + case FEATURES_DEFAULTS_CUSTOM: + $file['name'] = $components[$component]['default_filename']; + break; + } + } + + if (!isset($code[$file['name']])) { + $code[$file['name']] = array(); + } + + foreach ($hooks as $hook_name => $hook_info) { + $hook_code = is_array($hook_info) ? $hook_info['code'] : $hook_info; + $hook_args = is_array($hook_info) && !empty($hook_info['args']) ? $hook_info['args'] : ''; + $hook_file = is_array($hook_info) && !empty($hook_info['file']) ? $hook_info['file'] : $file['name']; + $code[$hook_file][$hook_name] = features_export_render_defaults($module_name, $hook_name, $hook_code, $hook_args); + } + } + + // Finalize strings to be written to files + $code = array_filter($code); + foreach ($code as $filename => $contents) { + $code[$filename] = "filename); + + // If the current module file does not reference the features.inc include, + // @TODO this way of checking does not account for the possibility of inclusion instruction being commented out. + if (isset($code['features']) && strpos($code['module'], "{$module_name}.features.inc") === FALSE) { + // If .module does not begin with "{$module_name}.module", '@include' => "{$module_name}.features.inc")), 'warning'); + } + else { + // Remove the old message if it exists, else just remove the name, $deprecated_files, TRUE)) { + features_log(t('The file @filename has been deprecated and can be removed.', array('@filename' => $file->filename)), 'status'); + } + elseif ($file->name === "{$module_name}.features" && empty($code['features'])) { + // Try and remove features.inc include. + if (strpos($code['module'], "{$module_name}.features.inc")) { + $code['module'] = str_replace($modulefile_features_inc, $modulefile_blank, $code['module']); + } + // If unable to remove the include, add a message to remove. + if (strpos($code['module'], "{$module_name}.features.inc")) { + $code['features'] = "name])) { + // Rebuild feature from .info file description and prepare an export from current DB state. + $export = features_populate($module->info, $module->name); + $export = features_export_prepare($export, $module->name, FALSE, FALSE); + + $overridden = array(); + + // Compare feature info + _features_sanitize($module->info); + _features_sanitize($export); + + $compare = array('normal' => features_export_info($export), 'default' => features_export_info($module->info)); + if ($compare['normal'] !== $compare['default']) { + $overridden['info'] = $compare; + } + + // Collect differences at a per-component level + $states = features_get_component_states(array($module->name), FALSE); + foreach ($states[$module->name] as $component => $state) { + if ($state != FEATURES_DEFAULT) { + $normal = features_get_normal($component, $module->name); + $default = features_get_default($component, $module->name); + _features_sanitize($normal); + _features_sanitize($default); + + $compare = array('normal' => features_var_export($normal), 'default' => features_var_export($default)); + if (_features_linetrim($compare['normal']) !== _features_linetrim($compare['default'])) { + $overridden[$component] = $compare; + } + } + } + $cache[$module->name] = $overridden; + } + return $cache[$module->name]; +} + +/** + * Gets the available default hooks keyed by components. + */ +function features_get_default_hooks($component = NULL, $reset = FALSE) { + return features_get_components($component, 'default_hook', $reset); +} + +/** + * Gets the available default hooks keyed by components. + */ +function features_get_default_alter_hook($component) { + $default_hook = features_get_components($component, 'default_hook'); + $alter_hook = features_get_components($component, 'alter_hook'); + $alter_type = features_get_components($component, 'alter_type'); + return empty($alter_type) || $alter_type != 'none' ? ($alter_hook ? $alter_hook : $default_hook) : FALSE; +} + +/** + * Return a code string representing an implementation of a defaults module hook. + */ +function features_export_render_defaults($module, $hook, $code, $args = '') { + $output = array(); + $output[] = "/**"; + $output[] = " * Implements hook_{$hook}()."; + $output[] = " */"; + $output[] = "function {$module}_{$hook}(" . $args . ") {"; + $output[] = $code; + $output[] = "}"; + return implode("\n", $output); +} + +/** + * Generate code friendly to the Drupal .info format from a structured array. + * + * @param $info + * An array or single value to put in a module's .info file. + * @param $parents + * Array of parent keys (internal use only). + * + * @return + * A code string ready to be written to a module's .info file. + */ +function features_export_info($info, $parents = array()) { + $output = ''; + if (is_array($info)) { + foreach ($info as $k => $v) { + $child = $parents; + $child[] = $k; + $output .= features_export_info($v, $child); + } + } + else if (!empty($info) && count($parents)) { + $line = array_shift($parents); + foreach ($parents as $key) { + $line .= is_numeric($key) ? "[]" : "[{$key}]"; + } + $line .= " = {$info}\n"; + return $line; + } + return $output; +} + +/** + * Tar creation function. Written by dmitrig01. + * + * @param $name + * Filename of the file to be tarred. + * @param $contents + * String contents of the file. + * + * @return + * A string of the tar file contents. + */ +function features_tar_create($name, $contents) { + /* http://www.mkssoftware.com/docs/man4/tar.4.asp */ + /* http://www.phpclasses.org/browse/file/21200.html */ + $tar = ''; + $bigheader = $header = ''; + if (strlen($name) > 100) { + $bigheader = pack("a100a8a8a8a12a12a8a1a100a6a2a32a32a8a8a155a12", + '././@LongLink', '0000000', '0000000', '0000000', + sprintf("%011o", strlen($name)), '00000000000', + ' ', 'L', '', 'ustar ', '0', + '', '', '', '', '', ''); + + $bigheader .= str_pad($name, floor((strlen($name) + 512 - 1) / 512) * 512, "\0"); + + $checksum = 0; + for ($i = 0; $i < 512; $i++) { + $checksum += ord(substr($bigheader, $i, 1)); + } + $bigheader = substr_replace($bigheader, sprintf("%06o", $checksum)."\0 ", 148, 8); + } + $header = pack("a100a8a8a8a12a12a8a1a100a6a2a32a32a8a8a155a12", // book the memorie area + substr($name,0,100), // 0 100 File name + '100644 ', // File permissions + ' 765 ', // UID, + ' 765 ', // GID, + sprintf("%11s ", decoct(strlen($contents))), // Filesize, + sprintf("%11s", decoct(REQUEST_TIME)), // Creation time + ' ', // 148 8 Check sum for header block + '', // 156 1 Link indicator / ustar Type flag + '', // 157 100 Name of linked file + 'ustar ', // 257 6 USTAR indicator "ustar" + ' ', // 263 2 USTAR version "00" + '', // 265 32 Owner user name + '', // 297 32 Owner group name + '', // 329 8 Device major number + '', // 337 8 Device minor number + '', // 345 155 Filename prefix + ''); // 500 12 ?? + + $checksum = 0; + for ($i = 0; $i < 512; $i++) { + $checksum += ord(substr($header, $i, 1)); + } + $header = substr_replace($header, sprintf("%06o", $checksum)."\0 ", 148, 8); + $tar = $bigheader.$header; + + $buffer = str_split($contents, 512); + foreach ($buffer as $item) { + $tar .= pack("a512", $item); + } + return $tar; +} + +/** + * Export var function -- from Views. + */ +function features_var_export($var, $prefix = '', $init = TRUE, $count = 0) { + if ($count > 50) { + watchdog('features', 'Recursion depth reached in features_var_export', array()); + return ''; + } + + if (is_object($var)) { + $output = method_exists($var, 'export') ? $var->export() : features_var_export((array) $var, '', FALSE, $count+1); + } + else if (is_array($var)) { + if (empty($var)) { + $output = 'array()'; + } + else { + $output = "array(\n"; + foreach ($var as $key => $value) { + // Using normal var_export on the key to ensure correct quoting. + $output .= " " . var_export($key, TRUE) . " => " . features_var_export($value, ' ', FALSE, $count+1) . ",\n"; + } + $output .= ')'; + } + } + else if (is_bool($var)) { + $output = $var ? 'TRUE' : 'FALSE'; + } + else if (is_int($var)) { + $output = intval($var); + } + else if (is_numeric($var)) { + $floatval = floatval($var); + if (is_string($var) && ((string) $floatval !== $var)) { + // Do not convert a string to a number if the string + // representation of that number is not identical to the + // original value. + $output = var_export($var, TRUE); + } + else { + $output = $floatval; + } + } + else if (is_string($var) && strpos($var, "\n") !== FALSE) { + // Replace line breaks in strings with a token for replacement + // at the very end. This protects whitespace in strings from + // unintentional indentation. + $var = str_replace("\n", "***BREAK***", $var); + $output = var_export($var, TRUE); + } + else { + $output = var_export($var, TRUE); + } + + if ($prefix) { + $output = str_replace("\n", "\n$prefix", $output); + } + + if ($init) { + $output = str_replace("***BREAK***", "\n", $output); + } + + return $output; +} + +/** + * Helper function to return an array of t()'d translatables strings. + * Useful for providing a separate array of translatables with your + * export so that string extractors like potx can detect them. + */ +function features_translatables_export($translatables, $indent = '') { + $output = ''; + $translatables = array_filter(array_unique($translatables)); + if (!empty($translatables)) { + $output .= "{$indent}// Translatables\n"; + $output .= "{$indent}// Included for use with string extractors like potx.\n"; + sort($translatables); + foreach ($translatables as $string) { + $output .= "{$indent}t(" . features_var_export($string) . ");\n"; + } + } + return $output; +} + +/** + * Get a summary storage state for a feature. + */ +function features_get_storage($module_name) { + // Get component states, and array_diff against array(FEATURES_DEFAULT). + // If the returned array has any states that don't match FEATURES_DEFAULT, + // return the highest state. + $states = features_get_component_states(array($module_name), FALSE); + $states = array_diff($states[$module_name], array(FEATURES_DEFAULT)); + $storage = !empty($states) ? max($states) : FEATURES_DEFAULT; + return $storage; +} + +/** + * Wrapper around features_get_[storage] to return an md5hash of a normalized + * defaults/normal object array. Can be used to compare normal/default states + * of a module's component. + */ +function features_get_signature($state = 'default', $module_name, $component, $reset = FALSE) { + switch ($state) { + case 'cache': + $codecache = variable_get('features_codecache', array()); + return isset($codecache[$module_name][$component]) ? $codecache[$module_name][$component] : FALSE; + case 'default': + $objects = features_get_default($component, $module_name, TRUE, $reset); + break; + case 'normal': + $objects = features_get_normal($component, $module_name, $reset); + break; + } + if (!empty($objects)) { + $objects = (array) $objects; + _features_sanitize($objects); + return md5(_features_linetrim(features_var_export($objects))); + } + return FALSE; +} + +/** + * Set the signature of a module/component pair in the codecache. + */ +function features_set_signature($module, $component, $signature = NULL) { + $var_codecache = variable_get('features_codecache', array()); + $signature = isset($signature) ? $signature : features_get_signature('default', $module, $component, TRUE); + $var_codecache[$module][$component] = $signature; + variable_set('features_codecache', $var_codecache); +} + +/** + * Processing semaphore operations. + */ +function features_semaphore($op, $component) { + // Note: we don't use variable_get() here as the inited variable + // static cache may be stale. Retrieving directly from the DB narrows + // the possibility of collision. + $semaphore = db_query("SELECT value FROM {variable} WHERE name = :name", array(':name' => 'features_semaphore'))->fetchField(); + $semaphore = !empty($semaphore) ? unserialize($semaphore) : array(); + + switch ($op) { + case 'get': + return isset($semaphore[$component]) ? $semaphore[$component] : FALSE; + case 'set': + $semaphore[$component] = REQUEST_TIME; + variable_set('features_semaphore', $semaphore); + break; + case 'del': + if (isset($semaphore[$component])) { + unset($semaphore[$component]); + variable_set('features_semaphore', $semaphore); + } + break; + } +} + +/** + * Get normal objects for a given module/component pair. + */ +function features_get_normal($component, $module_name, $reset = FALSE) { + if ($reset) { + drupal_static_reset(__FUNCTION__); + } + $cache = &drupal_static(__FUNCTION__, array()); + if (!isset($cache[$module_name][$component])) { + features_include(); + $code = NULL; + $module = features_get_features($module_name); + + // Special handling for dependencies component. + if ($component === 'dependencies') { + $cache[$module_name][$component] = isset($module->info['dependencies']) ? array_filter($module->info['dependencies'], 'module_exists') : array(); + } + // All other components. + else { + $default_hook = features_get_default_hooks($component); + if ($module && $default_hook && isset($module->info['features'][$component]) && features_hook($component, 'features_export_render')) { + $code = features_invoke($component, 'features_export_render', $module_name, $module->info['features'][$component], NULL); + $cache[$module_name][$component] = isset($code[$default_hook]) ? eval($code[$default_hook]) : FALSE; + } + } + + // Clear out vars for memory's sake. + unset($code); + unset($module); + } + return isset($cache[$module_name][$component]) ? $cache[$module_name][$component] : FALSE; +} + +/** + * Get defaults for a given module/component pair. + */ +function features_get_default($component, $module_name = NULL, $alter = TRUE, $reset = FALSE) { + $cache = &drupal_static(__FUNCTION__, array()); + $alter = !empty($alter); // ensure $alter is a true/false boolean + features_include(); + features_include_defaults($component); + $default_hook = features_get_default_hooks($component); + $components = features_get_components(); + + // Collect defaults for all modules if no module name was specified. + if (isset($module_name)) { + $modules = array($module_name); + } + else { + if ($component === 'dependencies') { + $modules = array_keys(features_get_features()); + } + else { + $modules = array(); + foreach (features_get_component_map($component) as $component_modules) { + $modules = array_merge($modules, $component_modules); + } + $modules = array_unique($modules); + } + } + + // Collect and cache information for each specified module. + foreach ($modules as $m) { + if (!isset($cache[$component][$alter][$m]) || $reset) { + // Special handling for dependencies component. + if ($component === 'dependencies') { + $module = features_get_features($m); + $cache[$component][$alter][$m] = isset($module->info['dependencies']) ? $module->info['dependencies'] : array(); + unset($module); + } + // All other components + else { + if ($default_hook && module_hook($m, $default_hook)) { + $cache[$component][$alter][$m] = call_user_func("{$m}_{$default_hook}"); + if (is_array($cache[$component][$alter][$m])) { + $alter_type = features_get_components('alter_type', $component); + if ($alter && (!isset($alter_type) || $alter_type == FEATURES_ALTER_TYPE_NORMAL)) { + if ($alter_hook = features_get_default_alter_hook($component)) { + drupal_alter($alter_hook, $cache[$component][$alter][$m]); + } + } + } + else { + $cache[$component][$alter][$m] = FALSE; + } + } + else { + $cache[$component][$alter][$m] = FALSE; + } + } + } + } + + // A specific module was specified. Retrieve only its components. + if (isset($module_name)) { + return isset($cache[$component][$alter][$module_name]) ? $cache[$component][$alter][$module_name] : FALSE; + } + // No module was specified. Retrieve all components. + $all_defaults = array(); + if (isset($cache[$component][$alter])) { + foreach (array_filter($cache[$component][$alter]) as $module_components) { + $all_defaults = array_merge($all_defaults, $module_components); + } + } + return $all_defaults; +} + +/** + * Get a map of components to their providing modules. + */ +function features_get_default_map($component, $attribute = NULL, $callback = NULL, $reset = FALSE) { + $map = &drupal_static(__FUNCTION__, array()); + + global $features_ignore_conflicts; + if ($features_ignore_conflicts) { + return FALSE; + } + + features_include(); + features_include_defaults($component); + if ((!isset($map[$component]) || $reset) && $default_hook = features_get_default_hooks($component)) { + $map[$component] = array(); + foreach (module_implements($default_hook) as $module) { + if ($defaults = features_get_default($component, $module)) { + foreach ($defaults as $key => $object) { + if (isset($callback)) { + if ($object_key = $callback($object)) { + $map[$component][$object_key] = $module; + } + } + elseif (isset($attribute)) { + if (is_object($object) && isset($object->{$attribute})) { + $map[$component][$object->{$attribute}] = $module; + } + elseif (is_array($object) && isset($object[$attribute])) { + $map[$component][$object[$attribute]] = $module; + } + } + elseif (!isset($attribute) && !isset($callback)) { + if (!is_numeric($key)) { + $map[$component][$key] = $module; + } + } + else { + return FALSE; + } + } + } + } + } + return isset($map[$component]) ? $map[$component] : FALSE; +} + +/** + * Retrieve an array of features/components and their current states. + */ +function features_get_component_states($features = array(), $rebuild_only = TRUE, $reset = FALSE) { + if ($reset) { + drupal_static_reset(__FUNCTION__); + } + $cache = &drupal_static(__FUNCTION__, array()); + + $all_features = features_get_features(); + $features = !empty($features) ? $features : array_keys($all_features); + + // Retrieve only rebuildable components if requested. + features_include(); + $components = array_keys(features_get_components()); + if ($rebuild_only) { + foreach ($components as $k => $component) { + if (!features_hook($component, 'features_rebuild')) { + unset($components[$k]); + } + } + } + + foreach ($features as $feature) { + $cache[$feature] = isset($cache[$feature]) ? $cache[$feature] : array(); + if (module_exists($feature) && !empty($all_features[$feature]->components)) { + foreach (array_intersect($all_features[$feature]->components, $components) as $component) { + if (!isset($cache[$feature][$component])) { + $normal = features_get_signature('normal', $feature, $component, $reset); + $default = features_get_signature('default', $feature, $component, $reset); + $codecache = features_get_signature('cache', $feature, $component, $reset); + $semaphore = features_semaphore('get', $component); + + // DB and code states match, there is nothing more to check. + if ($normal == $default) { + $cache[$feature][$component] = FEATURES_DEFAULT; + + // Stale semaphores can be deleted. + features_semaphore('del', $component); + + // Update code cache if it is stale, clear out semaphore if it stale. + if ($default != $codecache) { + features_set_signature($feature, $component, $default); + } + } + // Component properly implements exportables. + else if (!features_hook($component, 'features_rebuild')) { + $cache[$feature][$component] = FEATURES_OVERRIDDEN; + } + // Component does not implement exportables. + else { + if (empty($semaphore)) { + // Exception for dependencies. Dependencies are always rebuildable. + if ($component === 'dependencies') { + $cache[$feature][$component] = FEATURES_REBUILDABLE; + } + // All other rebuildable components require comparison. + else { + // Code has not changed, but DB does not match. User has DB overrides. + if ($codecache == $default) { + $cache[$feature][$component] = FEATURES_OVERRIDDEN; + } + // DB has no modifications to prior code state (or this is initial install). + else if (empty($codecache) || $codecache == $normal) { + $cache[$feature][$component] = FEATURES_REBUILDABLE; + } + // None of the states match. Requires user intervention. + else if ($codecache != $default) { + $cache[$feature][$component] = FEATURES_NEEDS_REVIEW; + } + } + } + else { + // Semaphore is still within processing horizon. Do nothing. + if ((REQUEST_TIME - $semaphore) < FEATURES_SEMAPHORE_TIMEOUT) { + $cache[$feature][$component] = FEATURES_REBUILDING; + } + // A stale semaphore means a previous rebuild attempt did not complete. + // Attempt to complete the rebuild. + else { + $cache[$feature][$component] = FEATURES_REBUILDABLE; + } + } + } + } + } + } + } + + // Filter cached components on the way out to ensure that even if we have + // cached more data than has been requested, the return value only reflects + // the requested features/components. + $return = $cache; + $return = array_intersect_key($return, array_flip($features)); + foreach ($return as $k => $v) { + $return[$k] = array_intersect_key($return[$k], array_flip($components)); + } + return $return; +} + +/** + * Helper function to eliminate whitespace differences in code. + */ +function _features_linetrim($code) { + $code = explode("\n", $code); + foreach ($code as $k => $line) { + $code[$k] = trim($line); + } + return implode("\n", $code); +} + +/** + * "Sanitizes" an array recursively, performing two key operations: + * - Sort an array by its keys (assoc) or values (non-assoc) + * - Remove any null or empty values for associative arrays (array_filter()). + */ +function _features_sanitize(&$array) { + if (is_array($array)) { + $is_assoc = _features_is_assoc($array); + if ($is_assoc) { + ksort($array, SORT_STRING); + $array = array_filter($array); + } + else { + sort($array); + } + foreach ($array as $k => $v) { + if (is_array($v)) { + _features_sanitize($array[$k]); + if ($is_assoc && empty($array[$k])) { + unset($array[$k]); + } + } + } + } +} + +/** + * Is the given array an associative array. This basically extracts the keys twice to get the + * numerically ordered keys. It then does a diff with the original array and if there is no + * key diff then the original array is not associative. + * + * NOTE: If you have non-sequential numerical keys, this will identify the array as assoc. + * + * Borrowed from: http://www.php.net/manual/en/function.is-array.php#96724 + * + * @return True is the array is an associative array, false otherwise + */ +function _features_is_assoc($array) { + return (is_array($array) && (0 !== count(array_diff_key($array, array_keys(array_keys($array)))) || count($array)==0)); +} diff --git a/sites/all/modules/custom/features/features.info b/sites/all/modules/custom/features/features.info new file mode 100644 index 0000000000..dfadcf07e9 --- /dev/null +++ b/sites/all/modules/custom/features/features.info @@ -0,0 +1,14 @@ +name = "Features" +description = "Provides feature management for Drupal." +core = 7.x +package = "Features" +files[] = tests/features.test + +configure = admin/structure/features/settings + +; Information added by Drupal.org packaging script on 2015-01-05 +version = "7.x-2.3" +core = "7.x" +project = "features" +datestamp = "1420492083" + diff --git a/sites/all/modules/custom/features/features.install b/sites/all/modules/custom/features/features.install new file mode 100644 index 0000000000..aafdcc6d56 --- /dev/null +++ b/sites/all/modules/custom/features/features.install @@ -0,0 +1,128 @@ +fields(array('weight' => 20)) + ->condition('name', 'features') + ->condition('type', 'module') + ->execute(); +} + +/** + * Implements hook_uninstall(). + */ +function features_uninstall() { + variable_del('features_codecache'); + variable_del('features_default_export_path'); + variable_del('features_semaphore'); + variable_del('features_ignored_orphans'); + variable_del('features_feature_locked'); + variable_del('features_lock_mode'); + foreach (array_keys(features_get_components()) as $component) { + variable_del('features_admin_show_component_' . $component); + variable_del('features_component_locked_' . $component); + } + if (db_table_exists('menu_custom')) { + db_delete('menu_custom') + ->condition('menu_name', 'features') + ->execute(); + } + db_delete('menu_links') + ->condition('module', 'features') + ->execute(); +} + +/** + * Create menu. See menu.install for an example. + */ +function _features_install_menu() { + if (db_table_exists('menu_custom') && !db_query("SELECT menu_name FROM {menu_custom} WHERE menu_name = :menu_name", array(':menu_name' => 'features'))->fetchField()) { + $t = get_t(); + $id = db_insert('menu_custom') + ->fields(array( + 'menu_name' => 'features', + 'title' => $t('Features'), + 'description' => $t('Menu items for any enabled features.'), + )) + ->execute(); + } +} + +/** + * Update 6100: Set module on all feature node types to 'features'. + * + * This update can be re-run as needed to repair any node types that are not + * removed after disabling the associated feature. + * + * Any feature implementing a node component that was exported prior to this + * version of the features.module will need to have its 'module' declaration + * in hook_node_info() changed from 'node' to 'features'. + */ +function features_update_6100() { + $ret = array(); + + foreach (features_get_features(NULL, TRUE) as $feature) { + if (module_exists($feature->name) && $types = module_invoke($feature->name, 'node_info')) { + foreach ($types as $type => $type_data) { + $sql = "SELECT COUNT(*) FROM {node_type} WHERE module = 'node' AND type = '%s'"; + // Only update if the hook_node_info type's module is 'features' and the db type's + // module is 'node'. + if (($type_data['module'] == 'features') && db_query($sql, $type)->fetchField()) { + $ret[] = update_sql("UPDATE {node_type} SET module = 'features' WHERE type = '$type'"); + } + } + } + } + return $ret; +} + +/** + * Update 6101: Set codestate signature for all features. + * + * This update generates a codestate for all feature/component pairs which + * have been installed prior to this version of Features. This prevents + * automatic rebuilds from occurring against any rebuildable components + * that have been overridden. + */ +function features_update_6101() { + // Ensure all of our own API functions still exist in in this version + // of Features. It's possible that the "future me" will not have these + // functions, so I should check. + module_load_include('inc', 'features', "features.export"); + $functions = array( + 'features_include', + 'features_hook', + 'features_get_components', + 'features_get_features', + 'features_get_signature', + 'features_set_signature', + ); + $doit = TRUE; + foreach ($functions as $function) { + $doit = $doit && function_exists($function); + } + if ($doit) { + features_include(); + $features = array_keys(features_get_features(NULL, TRUE)); + $components = array_keys(features_get_components()); + foreach ($features as $feature) { + if (module_exists($feature)) { + foreach ($components as $component) { + if (features_hook($component, 'features_rebuild') && features_get_signature('cache', $feature, $component) === FALSE) { + features_set_signature($feature, $component, -1); + } + } + } + } + } + return array(); +} diff --git a/sites/all/modules/custom/features/features.js b/sites/all/modules/custom/features/features.js new file mode 100644 index 0000000000..023247a400 --- /dev/null +++ b/sites/all/modules/custom/features/features.js @@ -0,0 +1,429 @@ +/** + * jQuery.fn.sortElements + * -------------- + * @param Function comparator: + * Exactly the same behaviour as [1,2,3].sort(comparator) + * + * @param Function getSortable + * A function that should return the element that is + * to be sorted. The comparator will run on the + * current collection, but you may want the actual + * resulting sort to occur on a parent or another + * associated element. + * + * E.g. $('td').sortElements(comparator, function(){ + * return this.parentNode; + * }) + * + * The 's parent () will be sorted instead + * of the itself. + * + * Credit: http://james.padolsey.com/javascript/sorting-elements-with-jquery/ + * + */ +jQuery.fn.sortElements = (function(){ + + var sort = [].sort; + + return function(comparator, getSortable) { + + getSortable = getSortable || function(){return this;}; + + var placements = this.map(function(){ + + var sortElement = getSortable.call(this), + parentNode = sortElement.parentNode, + + // Since the element itself will change position, we have + // to have some way of storing its original position in + // the DOM. The easiest way is to have a 'flag' node: + nextSibling = parentNode.insertBefore( + document.createTextNode(''), + sortElement.nextSibling + ); + + return function() { + + if (parentNode === this) { + throw new Error( + "You can't sort elements if any one is a descendant of another." + ); + } + + // Insert before flag: + parentNode.insertBefore(this, nextSibling); + // Remove flag: + parentNode.removeChild(nextSibling); + + }; + + }); + + return sort.call(this, comparator).each(function(i){ + placements[i].call(getSortable.call(this)); + }); + + }; + +})(); + +(function ($) { + Drupal.behaviors.features = { + attach: function(context, settings) { + // Features management form + $('table.features:not(.processed)', context).each(function() { + $(this).addClass('processed'); + + // Check the overridden status of each feature + Drupal.features.checkStatus(); + + // Add some nicer row hilighting when checkboxes change values + $('input', this).bind('change', function() { + if (!$(this).attr('checked')) { + $(this).parents('tr').removeClass('enabled').addClass('disabled'); + } + else { + $(this).parents('tr').addClass('enabled').removeClass('disabled'); + } + }); + }); + + // Export form component selector + $('form.features-export-form select.features-select-components:not(.processed)', context).each(function() { + $(this) + .addClass('processed') + .change(function() { + var target = $(this).val(); + $('div.features-select').hide(); + $('div.features-select-' + target).show(); + return false; + }).trigger('change'); + }); + + //View info dialog + var infoDialog = $('#features-info-file'); + if (infoDialog.length != 0) { + infoDialog.dialog({ + autoOpen: false, + modal: true, + draggable: false, + resizable: false, + width: 600, + height: 480 + }); + } + + if ((Drupal.settings.features != undefined) && (Drupal.settings.features.info != undefined)) { + $('#features-info-file textarea').val(Drupal.settings.features.info); + $('#features-info-file').dialog('open'); + //To be reset by the button click ajax + Drupal.settings.features.info = undefined; + } + + // mark any conflicts with a class + if ((Drupal.settings.features != undefined) && (Drupal.settings.features.conflicts != undefined)) { + for (var moduleName in Drupal.settings.features.conflicts) { + moduleConflicts = Drupal.settings.features.conflicts[moduleName]; + $('#features-export-wrapper input[type=checkbox]', context).each(function() { + if (!$(this).hasClass('features-checkall')) { + var key = $(this).attr('name'); + var matches = key.match(/^([^\[]+)(\[.+\])?\[(.+)\]\[(.+)\]$/); + var component = matches[1]; + var item = matches[4]; + if ((component in moduleConflicts) && (moduleConflicts[component].indexOf(item) != -1)) { + $(this).parent().addClass('features-conflict'); + } + } + }); + } + } + + function _checkAll(value) { + if (value) { + $('#features-export-wrapper .component-select input[type=checkbox]:visible', context).each(function() { + var move_id = $(this).attr('id'); + $(this).click(); + $('#'+ move_id).attr('checked', 'checked'); + }); + } + else { + $('#features-export-wrapper .component-added input[type=checkbox]:visible', context).each(function() { + var move_id = $(this).attr('id'); + $('#'+ move_id).removeAttr('checked'); + $(this).click(); + $('#'+ move_id).removeAttr('checked'); + }); + } + } + + function updateComponentCountInfo(item, section) { + switch (section) { + case 'select': + var parent = $(item).closest('.features-export-list').siblings('.features-export-component'); + $('.component-count', parent).text(function (index, text) { + return +text + 1; + } + ); + break; + case 'added': + case 'detected': + var parent = $(item).closest('.features-export-component'); + $('.component-count', parent).text(function (index, text) { + return text - 1; + }); + } + } + + function moveCheckbox(item, section, value) { + updateComponentCountInfo(item, section); + var curParent = item; + if ($(item).hasClass('form-type-checkbox')) { + item = $(item).children('input[type=checkbox]'); + } + else { + curParent = $(item).parents('.form-type-checkbox'); + } + var newParent = $(curParent).parents('.features-export-parent').find('.form-checkboxes.component-'+section); + $(curParent).detach(); + $(curParent).appendTo(newParent); + var list = ['select', 'added', 'detected', 'included']; + for (i in list) { + $(curParent).removeClass('component-' + list[i]); + $(item).removeClass('component-' + list[i]); + } + $(curParent).addClass('component-'+section); + $(item).addClass('component-'+section); + if (value) { + $(item).attr('checked', 'checked'); + } + else { + $(item).removeAttr('checked') + } + $(newParent).parent().removeClass('features-export-empty'); + + // re-sort new list of checkboxes based on labels + $(newParent).find('label').sortElements( + function(a, b){ + return $(a).text() > $(b).text() ? 1 : -1; + }, + function(){ + return this.parentNode; + } + ); + } + + // provide timer for auto-refresh trigger + var timeoutID = 0; + var inTimeout = 0; + function _triggerTimeout() { + timeoutID = 0; + _updateDetected(); + } + function _resetTimeout() { + inTimeout++; + // if timeout is already active, reset it + if (timeoutID != 0) { + window.clearTimeout(timeoutID); + if (inTimeout > 0) inTimeout--; + } + timeoutID = window.setTimeout(_triggerTimeout, 500); + } + + function _updateDetected() { + var autodetect = $('#features-autodetect input[type=checkbox]'); + if ((autodetect.length > 0) && (!autodetect.is(':checked'))) return; + // query the server for a list of components/items in the feature and update + // the auto-detected items + var items = []; // will contain a list of selected items exported to feature + var components = {}; // contains object of component names that have checked items + $('#features-export-wrapper input[type=checkbox]:checked', context).each(function() { + if (!$(this).hasClass('features-checkall')) { + var key = $(this).attr('name'); + var matches = key.match(/^([^\[]+)(\[.+\])?\[(.+)\]\[(.+)\]$/); + components[matches[1]] = matches[1]; + if (!$(this).hasClass('component-detected')) { + items.push(key); + } + } + }); + var featureName = $('#edit-module-name').val(); + if (featureName == '') { + featureName = '*'; + } + var url = Drupal.settings.basePath + 'features/ajaxcallback/' + featureName; + var excluded = Drupal.settings.features.excluded; + var postData = {'items': items, 'excluded': excluded}; + jQuery.post(url, postData, function(data) { + if (inTimeout > 0) inTimeout--; + // if we have triggered another timeout then don't update with old results + if (inTimeout == 0) { + // data is an object keyed by component listing the exports of the feature + for (var component in data) { + var itemList = data[component]; + $('#features-export-wrapper .component-' + component + ' input[type=checkbox]', context).each(function() { + var key = $(this).attr('value'); + // first remove any auto-detected items that are no longer in component + if ($(this).hasClass('component-detected')) { + if (!(key in itemList)) { + moveCheckbox(this, 'select', false) + } + } + // next, add any new auto-detected items + else if ($(this).hasClass('component-select')) { + if (key in itemList) { + moveCheckbox(this, 'detected', itemList[key]); + $(this).parent().show(); // make sure it's not hidden from filter + } + } + }); + } + // loop over all selected components and check for any that have been completely removed + for (var component in components) { + if ((data == null) || !(component in data)) { + $('#features-export-wrapper .component-' + component + ' input[type=checkbox].component-detected', context).each(function() { + moveCheckbox(this, 'select', false); + }); + } + } + } + }, "json"); + } + + // Handle component selection UI + $('#features-export-wrapper input[type=checkbox]', context).click(function() { + _resetTimeout(); + if ($(this).hasClass('component-select')) { + moveCheckbox(this, 'added', true); + } + else if ($(this).hasClass('component-included')) { + moveCheckbox(this, 'added', false); + } + else if ($(this).hasClass('component-added')) { + if ($(this).is(':checked')) { + moveCheckbox(this, 'included', true); + } + else { + moveCheckbox(this, 'select', false); + } + } + }); + + // Handle select/unselect all + $('#features-filter .features-checkall', context).click(function() { + if ($(this).attr('checked')) { + _checkAll(true); + $(this).next().html(Drupal.t('Deselect all')); + } + else { + _checkAll(false); + $(this).next().html(Drupal.t('Select all')); + } + _resetTimeout(); + }); + + // Handle filtering + + // provide timer for auto-refresh trigger + var filterTimeoutID = 0; + var inFilterTimeout = 0; + function _triggerFilterTimeout() { + filterTimeoutID = 0; + _updateFilter(); + } + function _resetFilterTimeout() { + inFilterTimeout++; + // if timeout is already active, reset it + if (filterTimeoutID != 0) { + window.clearTimeout(filterTimeoutID); + if (inFilterTimeout > 0) inFilterTimeout--; + } + filterTimeoutID = window.setTimeout(_triggerFilterTimeout, 200); + } + function _updateFilter() { + var filter = $('#features-filter input').val(); + var regex = new RegExp(filter, 'i'); + // collapse fieldsets + var newState = {}; + var currentState = {}; + $('#features-export-wrapper fieldset.features-export-component', context).each(function() { + // expand parent fieldset + var section = $(this).attr('id'); + currentState[section] = !($(this).hasClass('collapsed')); + if (!(section in newState)) { + newState[section] = false; + } + + $(this).find('div.component-select label').each(function() { + if (filter == '') { + if (currentState[section]) { + Drupal.toggleFieldset($('#'+section)); + currentState[section] = false; + } + $(this).parent().show(); + } + else if ($(this).text().match(regex)) { + $(this).parent().show(); + newState[section] = true; + } + else { + $(this).parent().hide(); + } + }); + }); + for (section in newState) { + if (currentState[section] != newState[section]) { + Drupal.toggleFieldset($('#'+section)); + } + } + } + $('#features-filter input', context).bind("input", function() { + _resetFilterTimeout(); + }); + $('#features-filter .features-filter-clear', context).click(function() { + $('#features-filter input').val(''); + _updateFilter(); + }); + + // show the filter bar + $('#features-filter', context).removeClass('element-invisible'); + } + } + + + Drupal.features = { + 'checkStatus': function() { + $('table.features tbody tr').not('.processed').filter(':first').each(function() { + var elem = $(this); + $(elem).addClass('processed'); + var uri = $(this).find('a.admin-check').attr('href'); + if (uri) { + $.get(uri, [], function(data) { + $(elem).find('.admin-loading').hide(); + switch (data.storage) { + case 3: + $(elem).find('.admin-rebuilding').show(); + break; + case 2: + $(elem).find('.admin-needs-review').show(); + break; + case 1: + $(elem).find('.admin-overridden').show(); + break; + default: + $(elem).find('.admin-default').show(); + break; + } + Drupal.features.checkStatus(); + }, 'json'); + } + else { + Drupal.features.checkStatus(); + } + }); + } + }; + + +})(jQuery); + + diff --git a/sites/all/modules/custom/features/features.module b/sites/all/modules/custom/features/features.module new file mode 100644 index 0000000000..5a42eb5f0f --- /dev/null +++ b/sites/all/modules/custom/features/features.module @@ -0,0 +1,1202 @@ + 'Features', + 'description' => 'Manage features.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('features_admin_form'), + 'type' => MENU_NORMAL_ITEM, + 'file' => 'features.admin.inc', + ); + $items['admin/structure/features/cleanup'] = array( + 'title' => 'Cleanup', + 'description' => 'Clear cache after enabling/disabling a feature.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('features_cleanup_form', 4), + 'type' => MENU_CALLBACK, + 'file' => 'features.admin.inc', + 'weight' => 1, + ); + $items['admin/structure/features/manage'] = array( + 'title' => 'Manage', + 'description' => 'Enable and disable features.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('features_admin_form'), + 'type' => MENU_DEFAULT_LOCAL_TASK, + 'file' => 'features.admin.inc', + ); + $items['admin/structure/features/create'] = array( + 'title' => 'Create feature', + 'description' => 'Create a new feature.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('features_export_form'), + 'access callback' => 'user_access', + 'access arguments' => array('administer features'), + 'type' => MENU_LOCAL_TASK, + 'file' => "features.admin.inc", + 'weight' => 10, + ); + $items['admin/structure/features/settings'] = array( + 'title' => 'Settings', + 'description' => 'Adjust settings for using features module.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('features_settings_form'), + 'access callback' => 'user_access', + 'access arguments' => array('administer features'), + 'type' => MENU_LOCAL_TASK, + 'file' => "features.admin.inc", + 'weight' => 11, + ); + + + $items['admin/structure/features/%feature'] = array( + 'title callback' => 'features_get_feature_title', + 'title arguments' => array(3), + 'description' => 'Display components of a feature.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('features_admin_components', 3), + 'load arguments' => array(3, TRUE), + 'access callback' => 'user_access', + 'access arguments' => array('administer features'), + 'type' => MENU_CALLBACK, + 'file' => 'features.admin.inc', + ); + $items['admin/structure/features/%feature/view'] = array( + 'title' => 'View', + 'description' => 'Display components of a feature.', + 'access callback' => 'user_access', + 'access arguments' => array('administer features'), + 'type' => MENU_DEFAULT_LOCAL_TASK, + 'weight' => -10, + ); + $items['admin/structure/features/%feature/recreate'] = array( + 'title' => 'Recreate', + 'description' => 'Recreate an existing feature.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('features_export_form', 3), + 'load arguments' => array(3, TRUE), + 'access callback' => 'user_access', + 'access arguments' => array('administer features'), + 'type' => MENU_LOCAL_TASK, + 'file' => "features.admin.inc", + 'weight' => 11, + ); + if (module_exists('diff')) { + $items['admin/structure/features/%feature/diff'] = array( + 'title' => 'Review overrides', + 'description' => 'Compare default and current feature.', + 'page callback' => 'features_feature_diff', + 'page arguments' => array(3, 5), + 'load arguments' => array(3, TRUE), + 'access callback' => 'features_access_override_actions', + 'access arguments' => array(3), + 'type' => MENU_LOCAL_TASK, + 'file' => 'features.admin.inc', + ); + } + + $items['admin/structure/features/%feature/lock'] = array( + 'title' => 'Lock', + 'description' => 'Lock a feature or components.', + 'page callback' => 'features_admin_lock', + 'page arguments' => array(3, 5, 6), + 'load arguments' => array(3, TRUE, TRUE), + 'access arguments' => array('administer features'), + 'type' => MENU_CALLBACK, + 'file' => 'features.admin.inc', + ); + $items['admin/structure/features/%feature/status'] = array( + 'title' => 'Status', + 'description' => 'Javascript status call back.', + 'page callback' => 'features_feature_status', + 'page arguments' => array(3), + 'load arguments' => array(3, TRUE), + 'access callback' => 'user_access', + 'access arguments' => array('administer features'), + 'type' => MENU_CALLBACK, + 'file' => 'features.admin.inc', + ); + $items['features/autocomplete/packages'] = array( + 'page callback' => 'features_autocomplete_packages', + 'access arguments' => array('administer features'), + 'type' => MENU_CALLBACK, + 'file' => 'features.admin.inc', + ); + $items['features/ajaxcallback/%'] = array( + 'title callback' => 'features_get_feature_components', + 'description' => 'Return components of a feature.', + 'page callback' => 'features_export_components_json', + 'page arguments' => array(2), + 'access callback' => 'user_access', + 'access arguments' => array('administer features'), + 'type' => MENU_CALLBACK, + 'file' => 'features.admin.inc', + ); + foreach ($items as $path => $item) { + if (!isset($item['access callback'])) { + $items[$path]['access callback'] = 'user_access'; + $items[$path]['access arguments'] = array('manage features'); + } + } + return $items; +} + +/** + * Implements hook_theme(). + */ +function features_theme() { + $base = array( + 'path' => drupal_get_path('module', 'features') . '/theme', + 'file' => 'theme.inc', + ); + + $items = array(); + $items['features_module_status'] = array( + 'variables' => array('module' => NULL, 'status' => NULL) + ) + $base; + + $items['features_components'] = array( + 'variables' => array('info' => NULL, 'sources' => NULL), + ) + $base; + + $items['features_component_key'] = $base; + $items['features_component_list'] = array( + 'variables' => array('components' => array(), 'source' => array(), 'conflicts' => array()), + ) + $base; + + $items['features_storage_link'] = array( + 'variables' => array('storage' => NULL, 'text' => NULL, 'path' => NULL, 'options' => array()), + ) + $base; + + $items['features_lock_link'] = array( + 'variables' => array('feature' => NULL, 'component' => NULL, 'locked' => FALSE), + ) + $base; + + $items['features_form_components'] = + $items['features_form_export'] = + $items['features_form_package'] = array( + 'render element' => 'form', + ) + $base; + + $items['features_form_buttons'] = array( + 'render element' => 'element', + ) + $base; + + + $items['features_admin_components'] = array( + 'render element' => 'form', + 'template' => 'features-admin-components', + ) + $base; + + return $items; +} + +/** + * Implements hook_flush_caches(). + */ +function features_flush_caches() { + if (variable_get('features_rebuild_on_flush', TRUE)) { + features_rebuild(); + // Don't flush the modules cache during installation, for performance reasons. + if (variable_get('install_task') == 'done') { + features_get_modules(NULL, TRUE); + } + } + return array(); +} + +/** + * Implements hook_form(). + */ +function features_form($node, $form_state) { + return node_content_form($node, $form_state); +} + +/** + * Implements hook_permission(). + */ +function features_permission() { + return array( + 'administer features' => array( + 'title' => t('Administer features'), + 'description' => t('Perform administration tasks on features.'), + 'restrict access' => TRUE, + ), + 'manage features' => array( + 'title' => t('Manage features'), + 'description' => t('View, enable and disable features.'), + 'restrict access' => TRUE, + ), + 'generate features' => array( + 'title' => t('Generate features'), + 'description' => t('Allow feature exports to be generated and written directly to site.'), + 'restrict access' => TRUE, + ), + 'rename features' => array( + 'title' => t('Edit feature machine name'), + 'description' => t('Allows editing machine name of a disabled feature'), + 'restrict access' => TRUE, + ), + ); +} + +/** + * Implements hook_help(). + */ +function features_help($path, $arg) { + switch ($path) { + case 'admin/help#features': + $output = file_get_contents(drupal_get_path('module', 'features') . '/README.txt'); + return module_exists('markdown') ? filter_xss_admin(module_invoke('markdown', 'filter', 'process', 0, -1, $output)) : '
    ' . check_plain($output) . '
    '; + case 'admin/build/features': + return '

    ' . t('A "Feature" is a certain type of Drupal module which contains a package of configuration that, when enabled, provides a new set of functionality for your Drupal site. Enable features by selecting the checkboxes below and clicking the Save configuration button. If the configuration of the feature has been changed its "State" will be either "overridden" or "needs review", otherwise it will be "default", indicating that the configuration has not been changed. Click on the state to see more details about the feature and its components.') . '

    '; + } +} + +/** + * Implements hook_modules_disabled(). + */ +function features_modules_disabled($modules) { + // Go through all modules and gather features that can be disabled. + $items = array(); + foreach ($modules as $module) { + if ($feature = features_load_feature($module)) { + $items[$module] = array_keys($feature->info['features']); + } + } + + if (!empty($items)) { + _features_restore('disable', $items); + // Rebuild the list of features includes. + features_include(TRUE); + } +} + +/** + * Implements hook_modules_enabled(). + */ +function features_modules_enabled($modules) { + // Go through all modules and gather features that can be enabled. + $items = array(); + foreach ($modules as $module) { + if ($feature = features_load_feature($module)) { + $items[$module] = array_keys($feature->info['features']); + } + } + + if (!empty($items)) { + // Need to include any new files. + // @todo Redo function so can take in list of modules to include. + features_include_defaults(NULL, TRUE); + _features_restore('enable', $items); + // Rebuild the list of features includes. + features_include(TRUE); + // Reorders components to match hook order and removes non-existant. + $all_components = array_keys(features_get_components()); + foreach ($items as $module => $components) { + $items[$module] = array_intersect($all_components, $components); + } + _features_restore('rebuild', $items); + } +} + +/** + * Load includes for any modules that implement the features API and + * load includes for those provided by features. + */ +function features_include($reset = FALSE) { + static $once; + if (!isset($once) || $reset) { + $once = TRUE; + + // Features provides integration on behalf of these modules. + // The features include provides handling for the feature dependencies. + // Note that ctools is placed last because it implements hooks "dynamically" for other modules. + $modules = array('features', 'block', 'context', 'field', 'filter', 'image', 'locale', 'menu', 'node', 'taxonomy', 'user', 'views', 'ctools'); + + foreach (array_filter($modules, 'module_exists') as $module) { + module_load_include('inc', 'features', "includes/features.$module"); + } + + if (module_exists('ctools')) { + // Finally, add ctools eval'd implementations. + ctools_features_declare_functions($reset); + } + + // Clear static cache, since we've now included new implementers. + foreach (features_get_components(NULL, 'file', $reset) as $file) { + if (is_file(DRUPAL_ROOT . '/' . $file)) { + require_once DRUPAL_ROOT . '/' . $file; + } + } + } +} + +/** + * Load features includes for all components that require includes before + * collecting defaults. + */ +function features_include_defaults($components = NULL, $reset = FALSE) { + static $include_components; + + // Build an array of components that require inclusion: + // Views, CTools components and those using FEATURES_DEFAULTS_INCLUDED. + if (!isset($include_components) || $reset) { + $include_components = features_get_components(); + foreach ($include_components as $component => $info) { + if (!isset($info['api']) && (!isset($info['default_file']) || $info['default_file'] !== FEATURES_DEFAULTS_INCLUDED)) { + unset($include_components[$component]); + } + } + } + + // If components are specified, only include for the specified components. + if (isset($components)) { + $components = is_array($components) ? $components : array($components); + } + // Use all include components if none are explicitly specified. + else { + $components = array_keys($include_components); + } + foreach ($components as $component) { + if (isset($include_components[$component])) { + $info = $include_components[$component]; + // Inclusion of ctools components. + if (isset($info['api'], $info['module'], $info['current_version'])) { + ctools_include('plugins'); + ctools_plugin_api_include($info['module'], $info['api'], $info['current_version'], $info['current_version']); + } + // Inclusion of defaults for components using FEATURES_DEFAULTS_INCLUDED. + else { + $features = isset($features) ? $features : features_get_features(NULL, $reset); + foreach ($features as $feature) { + $filename = isset($info['default_file']) && $info['default_file'] == FEATURES_DEFAULTS_CUSTOM ? $info['default_filename'] : "features.{$component}"; + if (module_exists($feature->name) && isset($feature->info['features'][$component])) { + module_load_include('inc', $feature->name, "{$feature->name}.$filename"); + } + } + } + } + } +} + +/** + * Feature object loader. DEPRECATED but included for backwards compatibility + */ +function feature_load($name, $reset = FALSE) { + return features_load_feature($name, $reset); +} + +/** + * Feature object loader. + */ +function features_load_feature($name, $reset = FALSE) { + // Use an alternative code path during installation, for better performance. + if (variable_get('install_task') != 'done') { + static $features; + + if (!isset($features[$name])) { + // Set defaults for module info. + $defaults = array( + 'dependencies' => array(), + 'description' => '', + 'package' => 'Other', + 'version' => NULL, + 'php' => DRUPAL_MINIMUM_PHP, + 'files' => array(), + 'bootstrap' => 0, + ); + $info = drupal_parse_info_file(drupal_get_path('module', $name) . '/' . $name . '.info'); + + $features[$name] = FALSE; + if (!empty($info['features']) && empty($info['hidden'])) { + // Build a fake file object with the data needed during installation. + $features[$name] = new stdClass; + $features[$name]->name = $name; + $features[$name]->filename = drupal_get_path('module', $name) . '/' . $name . '.module'; + $features[$name]->type = 'module'; + $features[$name]->info = $info + $defaults; + } + } + + return $features[$name]; + } + else { + return features_get_features($name, $reset); + } +} + +/** + * Return a module 'object' including .info information. + * + * @param $name + * The name of the module to retrieve information for. If ommitted, + * an array of all available modules will be returned. + * @param $reset + * Whether to reset the cache. + * + * @return + * If a module is request (and exists) a module object is returned. If no + * module is requested info for all modules is returned. + */ +function features_get_modules($name = NULL, $reset = FALSE) { + return features_get_info('module', $name, $reset); +} + +/** + * Returns the array of supported components. + * + * @see hook_features_api + * + * @param $component + * A specific type of component that supports features. + * @param $key + * A key that hook_features_api supports. + * + * @return An array of component labels keyed by the component names. + */ +function features_get_components($component = NULL, $key = NULL, $reset = FALSE) { + features_include(); + $components = &drupal_static(__FUNCTION__); + $component_by_key = &drupal_static(__FUNCTION__ . '_by_key'); + + if ($reset || !isset($components) || !isset($component_by_key)) { + $components = $component_by_key = array(); + if (!$reset && ($cache = cache_get('features_api'))) { + $components = $cache->data; + } + else { + $components = module_invoke_all('features_api'); + drupal_alter('features_api', $components); + cache_set('features_api', $components); + } + + foreach ($components as $component_type => $component_information) { + foreach ($component_information as $component_key => $component_value) { + $component_by_key[$component_key][$component_type] = $component_value; + } + } + } + + if ($key && $component) { + return !empty($components[$component][$key]) ? $components[$component][$key] : NULL; + } + elseif ($key) { + return !empty($component_by_key[$key]) ? $component_by_key[$key] : array(); + } + elseif ($component) { + return $components[$component]; + } + return $components; +} + +/** + * Returns components that are offered as an option on feature creation. + */ +function features_get_feature_components() { + return array_intersect_key(features_get_components(), array_filter(features_get_components(NULL, 'feature_source'))); +} + +/** + * Invoke a component callback. + */ +function features_invoke($component, $callback) { + $args = func_get_args(); + unset($args[0], $args[1]); + // Append the component name to the arguments. + $args[] = $component; + if ($function = features_hook($component, $callback)) { + return call_user_func_array($function, $args); + } +} + +/** + * Checks whether a component implements the given hook. + * + * @return + * The function implementing the hook, or FALSE. + */ +function features_hook($component, $hook, $reset = FALSE) { + // Determine the function callback base. + $base = features_get_components($component, 'base'); + $base = isset($base) ? $base : $component; + return function_exists($base . '_' . $hook) ? $base . '_' . $hook : FALSE; +} + +/** + * Enables and installs an array of modules, ignoring those + * already enabled & installed. Consider this a helper or + * extension to drupal_install_modules(). + * + * @param $modules + * An array of modules to install. + * @param $reset + * Clear the module info cache. + */ +function features_install_modules($modules) { + module_load_include('inc', 'features', 'features.export'); + $files = system_rebuild_module_data(); + + // Build maximal list of dependencies. + $install = array(); + foreach ($modules as $name) { + // Parse the dependency string into the module name and version information. + $parsed_name = drupal_parse_dependency($name); + $name = $parsed_name['name']; + if ($file = $files[$name]) { + $install[] = $name; + if (!empty($file->info['dependencies'])) { + $install = array_merge($install, _features_export_maximize_dependencies($file->info['dependencies'])); + } + } + } + + // Filter out enabled modules. + $enabled = array_filter($install, 'module_exists'); + $install = array_diff($install, $enabled); + + if (!empty($install)) { + // Make sure the install API is available. + $install = array_unique($install); + include_once DRUPAL_ROOT . '/' . './includes/install.inc'; + module_enable($install); + } +} + +/** + * Wrapper around features_get_info() that returns an array + * of module info objects that are features. + */ +function features_get_features($name = NULL, $reset = FALSE) { + return features_get_info('feature', $name, $reset); +} + +/** + * Helper for retrieving info from system table. + */ +function features_get_info($type = 'module', $name = NULL, $reset = FALSE) { + static $cache; + if (!isset($cache)) { + $cache = cache_get('features_module_info'); + } + if (empty($cache) || $reset) { + $data = array( + 'feature' => array(), + 'module' => array(), + ); + $ignored = variable_get('features_ignored_orphans', array()); + $files = system_rebuild_module_data(); + + foreach ($files as $row) { + // Remove modification timestamp, added in Drupal 7.33. + if (isset($row->info['mtime'])) { + unset($row->info['mtime']); + } + // Avoid false-reported feature overrides for php = 5.2.4 line in .info file. + if (isset($row->info['php'])) { + unset($row->info['php']); + } + // If module is no longer enabled, remove it from the ignored orphans list. + if (in_array($row->name, $ignored, TRUE) && !$row->status) { + $key = array_search($row->name, $ignored, TRUE); + unset($ignored[$key]); + } + + if (!empty($row->info['features'])) { + // Fix css/js paths + if (!empty($row->info['stylesheets'])) { + foreach ($row->info['stylesheets'] as $media => $css) { + $row->info['stylesheets'][$media] = array_keys($css); + } + } + if (!empty($row->info['scripts'])) { + $row->info['scripts'] = array_keys($row->info['scripts']); + } + // Rework the features array, to change the vocabulary permission + // features. + foreach ($row->info['features'] as $component => $features) { + if ($component == 'user_permission') { + foreach ($features as $key => $feature) { + // Export vocabulary permissions using the machine name, instead + // of vocabulary id. + _user_features_change_term_permission($feature); + $row->info['features'][$component][$key] = $feature; + } + } + } + $data['feature'][$row->name] = $row; + $data['feature'][$row->name]->components = array_keys($row->info['features']); + if (!empty($row->info['dependencies'])) { + $data['feature'][$row->name]->components[] = 'dependencies'; + } + } + $data['module'][$row->name] = $row; + } + + // Sort features according to dependencies. + // @see install_profile_modules() + $required = array(); + $non_required = array(); + + $modules = array_keys($data['feature']); + foreach ($modules as $module) { + if ($files[$module]->requires) { + $modules = array_merge($modules, array_keys($files[$module]->requires)); + } + } + $modules = array_unique($modules); + foreach ($modules as $module) { + if (!empty($files[$module]->info['features'])) { + if (!empty($files[$module]->info['required'])) { + $required[$module] = $files[$module]->sort; + } + else { + $non_required[$module] = $files[$module]->sort; + } + } + } + arsort($required); + arsort($non_required); + + $sorted = array(); + foreach ($required + $non_required as $module => $weight) { + $sorted[$module] = $data['feature'][$module]; + } + $data['feature'] = $sorted; + + variable_set('features_ignored_orphans', $ignored); + cache_set("features_module_info", $data); + $cache = new stdClass(); + $cache->data = $data; + } + if (!empty($name)) { + return !empty($cache->data[$type][$name]) ? clone $cache->data[$type][$name] : array(); + } + return !empty($cache->data[$type]) ? $cache->data[$type] : array(); +} + +/** + * Generate an array of feature dependencies that have been orphaned. + */ +function features_get_orphans($reset = FALSE) { + static $orphans; + if (!isset($orphans) || $reset) { + module_load_include('inc', 'features', 'features.export'); + $orphans = array(); + + // Build a list of all dependencies for enabled and disabled features. + $dependencies = array('enabled' => array(), 'disabled' => array()); + $features = features_get_features(); + foreach ($features as $feature) { + $key = module_exists($feature->name) ? 'enabled' : 'disabled'; + if (!empty($feature->info['dependencies'])) { + $dependencies[$key] = array_merge($dependencies[$key], _features_export_maximize_dependencies($feature->info['dependencies'])); + } + } + $dependencies['enabled'] = array_unique($dependencies['enabled']); + $dependencies['disabled'] = array_unique($dependencies['disabled']); + + // Find the list of orphaned modules. + $orphaned = array_diff($dependencies['disabled'], $dependencies['enabled']); + $orphaned = array_intersect($orphaned, module_list(FALSE, FALSE)); + $orphaned = array_diff($orphaned, drupal_required_modules()); + $orphaned = array_diff($orphaned, array('features')); + + // Build final list of modules that can be disabled. + $modules = features_get_modules(NULL, TRUE); + $enabled = module_list(); + _module_build_dependencies($modules); + + foreach ($orphaned as $module) { + if (!empty($modules[$module]->required_by)) { + foreach ($modules[$module]->required_by as $module_name => $dependency) { + $modules[$module]->required_by[$module_name] = $dependency['name']; + } + // Determine whether any dependents are actually enabled. + $dependents = array_intersect($modules[$module]->required_by, $enabled); + if (empty($dependents)) { + $info = features_get_modules($module); + $orphans[$module] = $info; + } + } + } + } + return $orphans; +} + +/** + * Detect potential conflicts between any features that provide + * identical components. + */ +function features_get_conflicts($reset = FALSE) { + $conflicts = array(); + $component_info = features_get_components(); + $map = features_get_component_map(NULL, $reset); + + foreach ($map as $type => $components) { + // Only check conflicts for components we know about. + if (isset($component_info[$type])) { + foreach ($components as $component => $modules) { + if (isset($component_info[$type]['duplicates']) && $component_info[$type]['duplicates'] == FEATURES_DUPLICATES_ALLOWED) { + continue; + } + elseif (count($modules) > 1) { + foreach ($modules as $module) { + if (!isset($conflicts[$module])) { + $conflicts[$module] = array(); + } + foreach ($modules as $m) { + if ($m != $module) { + $conflicts[$module][$m][$type][] = $component; + } + } + } + } + } + } + } + + return $conflicts; +} + +/** + * Provide a component to feature map. + */ +function features_get_component_map($key = NULL, $reset = FALSE) { + static $map; + if (!isset($map) || $reset) { + $map = array(); + $features = features_get_features(NULL, $reset); + foreach ($features as $feature) { + foreach ($feature->info['features'] as $type => $components) { + if (!isset($map[$type])) { + $map[$type] = array(); + } + foreach ($components as $component) { + $map[$type][$component][] = $feature->name; + } + } + } + } + if (isset($key)) { + return isset($map[$key]) ? $map[$key] : array(); + } + return $map; +} + +/** + * Simple wrapper returns the status of a module. + */ +function features_get_module_status($module) { + if (module_exists($module)) { + return FEATURES_MODULE_ENABLED; + } + elseif (features_get_modules($module)) { + return FEATURES_MODULE_DISABLED; + } + else { + return FEATURES_MODULE_MISSING; + } +} + +/** + * Menu title callback. + */ +function features_get_feature_title($feature) { + return $feature->info['name']; +} + +/** + * Menu access callback for whether a user should be able to access + * override actions for a given feature. + */ +function features_access_override_actions($feature) { + if (user_access('administer features')) { + static $access = array(); + if (!isset($access[$feature->name])) { + // Set a value first. We may get called again from within features_detect_overrides(). + $access[$feature->name] = FALSE; + + features_include(); + module_load_include('inc', 'features', 'features.export'); + $access[$feature->name] = in_array(features_get_storage($feature->name), array(FEATURES_OVERRIDDEN, FEATURES_NEEDS_REVIEW)) && user_access('administer features'); + } + return $access[$feature->name]; + } + return FALSE; +} + +/** + * Implements hook_form_alter() for system_modules form(). + */ +function features_form_system_modules_alter(&$form) { + features_rebuild(); +} + +/** + * Restore the specified modules to the default state. + */ +function _features_restore($op, $items = array()) { + $lockable = FALSE; + // Set this variable in $conf if having timeout issues during install/rebuild. + if (variable_get('features_restore_time_limit_' . $op, FALSE) !== FALSE) { + drupal_set_time_limit(variable_get('features_restore_time_limit_' . $op, FALSE)); + } + + module_load_include('inc', 'features', 'features.export'); + features_include(); + + switch ($op) { + case 'revert': + $restore_states = array(FEATURES_OVERRIDDEN, FEATURES_REBUILDABLE, FEATURES_NEEDS_REVIEW); + $restore_hook = 'features_revert'; + $log_action = 'Revert'; + $lockable = TRUE; + break; + case 'rebuild': + $restore_states = array(FEATURES_REBUILDABLE); + $restore_hook = 'features_rebuild'; + $log_action = 'Rebuild'; + $lockable = variable_get('features_lock_mode', 'all') == 'all'; + break; + case 'disable': + $restore_hook = 'features_disable_feature'; + $log_action = 'Disable'; + break; + case 'enable': + $restore_hook = 'features_enable_feature'; + $log_action = 'Enable'; + break; + } + + if (empty($items)) { + // Drush may execute a whole chain of commands that may trigger feature + // rebuilding multiple times during a single request. Make sure we do not + // rebuild the same cached list of modules over and over again by setting + // $reset to TRUE. + // Note: this may happen whenever more than one feature will be enabled + // in chain, for example also using features_install_modules(). + $states = features_get_component_states(array(), ($op == 'rebuild'), defined('DRUSH_BASE_PATH')); + foreach ($states as $module_name => $components) { + foreach ($components as $component => $state) { + if (in_array($state, $restore_states)) { + $items[$module_name][] = $component; + } + } + } + } + + // Invoke global pre restore hook. + module_invoke_all('features_pre_restore', $op, $items); + foreach ($items as $module_name => $components) { + // If feature is totally locked, do not execute past this stage. + if ($lockable && features_feature_is_locked($module_name)) { + watchdog('features', 'Tried @actioning a locked @module_name, aborted.', array('@action' => $log_action, '@module_name' => $module_name)); + continue; + } + foreach ($components as $component) { + // If feature is totally locked, do not execute past this stage. + if ($lockable && features_feature_is_locked($module_name, $component)) { + watchdog('features', 'Tried @actioning a locked @module_name / @component, aborted.', array('@action' => $log_action, '@component' => $component, '@module_name' => $module_name)); + continue; + } + // Invoke pre hook + $pre_hook = 'pre_' . $restore_hook; + module_invoke($module_name, $pre_hook, $component); + + if (features_hook($component, $restore_hook)) { + // Set a semaphore to prevent other instances of the same script from running concurrently. + watchdog('features', '@actioning @module_name / @component.', array('@action' => $log_action, '@component' => $component, '@module_name' => $module_name)); + features_semaphore('set', $component); + features_invoke($component, $restore_hook, $module_name); + + // If the script completes, remove the semaphore and set the code signature. + features_semaphore('del', $component); + features_set_signature($module_name, $component); + watchdog('features', '@action completed for @module_name / @component.', array('@action' => $log_action, '@component' => $component, '@module_name' => $module_name)); + } + + // Invoke post hook + $post_hook = 'post_' . $restore_hook; + module_invoke($module_name, $post_hook, $component); + } + } + // Invoke global post restore hook. + module_invoke_all('features_post_restore', $op, $items); +} + +/** + * Wrapper around _features_restore(). + */ +function features_revert($revert = array()) { + return _features_restore('revert', $revert); +} + +/** + * Wrapper around _features_restore(). + */ +function features_rebuild($rebuild = array()) { + return _features_restore('rebuild', $rebuild); +} + +/** + * Revert a single features module. + * + * @param string $module + * A features module machine name. This module must be a + * features module and enabled. + */ +function features_revert_module($module) { + if (($feature = feature_load($module, TRUE)) && module_exists($module)) { + $components = array(); + foreach (array_keys($feature->info['features']) as $component) { + if (features_hook($component, 'features_revert')) { + $components[] = $component; + } + } + features_revert(array($module => $components)); + } +} + +/** + * Utility functions ================================================== + */ + +/** + * Log a message, environment agnostic. + * + * @param $message + * The message to log. + * @param $severity + * The severity of the message: status, warning or error. + */ +function features_log($message, $severity = 'status') { + if (function_exists('drush_verify_cli')) { + $message = strip_tags($message); + if ($severity == 'status') { + $severity = 'ok'; + } + elseif ($severity == 'error') { + drush_set_error($message); + return; + } + drush_log($message, $severity); + return; + } + drupal_set_message($message, $severity, FALSE); +} + +/** + * Implements hook_hook_info(). + */ +function features_hook_info() { + $hooks = array( + 'features_api', + 'features_pipe_alter', + 'features_export_alter', + ); + return array_fill_keys($hooks, array('group' => 'features')); +} + +/** + * Change vocabularies permission, from vocab id to machine name and vice versa. + */ +function _user_features_change_term_permission(&$perm, $type = 'vid') { + // Export vocabulary permissions using the machine name, instead of vocabulary + // id. + if (strpos($perm, 'edit terms in ') !== FALSE || strpos($perm, 'delete terms in ') !== FALSE) { + preg_match("/(?<=\040)([^\s]+?)$/", trim($perm), $voc_id); + $vid = $voc_id[0]; + if (is_numeric($vid) && $type == 'vid') { + if (function_exists('taxonomy_vocabulary_load')) { + if ($voc = taxonomy_vocabulary_load($vid)) { + $perm = str_replace($vid, $voc->machine_name, $perm); + } + } + } + elseif ($type == 'machine_name') { + if ($voc = taxonomy_vocabulary_machine_name_load($vid)) { + $perm = str_replace($vid, $voc->vid, $perm); + } + } + } +} + +/** + * Recursively computes the difference of arrays with additional index check. + * + * This is a version of array_diff_assoc() that supports multidimensional + * arrays. + * + * @param array $array1 + * The array to compare from. + * @param array $array2 + * The array to compare to. + * + * @return array + * Returns an array containing all the values from array1 that are not present + * in array2. + */ +function features_array_diff_assoc_recursive(array $array1, array $array2) { + $difference = array(); + foreach ($array1 as $key => $value) { + if (is_array($value)) { + if (!isset($array2[$key]) || !is_array($array2[$key])) { + $difference[$key] = $value; + } + else { + $new_diff = features_array_diff_assoc_recursive($value, $array2[$key]); + if (!empty($new_diff)) { + $difference[$key] = $new_diff; + } + } + } + elseif (!isset($array2[$key]) || $array2[$key] != $value) { + $difference[$key] = $value; + } + } + return $difference; +} + +/** + * Returns an array of deprecated components + * Rather than deprecating the component directly, we look for other components + * that supersedes the component + * @param $components + * The array of components (component_info) from features_get_components typically. + */ +function features_get_deprecated($components = array()) { + if (empty($components)) { + $components = features_get_components(); + } + $deprecated = array(); + foreach ($components as $component => $component_info) { + if (!empty($component_info['supersedes'])) { + $deprecated[$component_info['supersedes']] = $component_info['supersedes']; + } + } + return $deprecated; +} + +/** + * Returns whether a feature or it's component is locked. + */ +function features_feature_is_locked($feature, $component = NULL, $check_global_component_setting = TRUE) { + $locked = variable_get('features_feature_locked', array()); + if ($component) { + return ($check_global_component_setting && features_component_is_locked($component)) || !empty($locked[$feature][$component]); + } + else { + return !empty($locked[$feature]['_all']); + } +} + +/** + * Returns whether a component is locked. + */ +function features_component_is_locked($component) { + return variable_get('features_component_locked_' . $component, FALSE); +} + +/** + * Locks a feature or it's component. + */ +function features_feature_lock($feature, $component = NULL) { + $locked = variable_get('features_feature_locked', array()); + $locked[$feature] = !empty($locked[$feature]) ? $locked[$feature] : array(); + if ($component) { + $locked[$feature][$component] = TRUE; + } + else { + $locked[$feature]['_all'] = TRUE; + } + variable_set('features_feature_locked', $locked); +} + + +/** + * Unlocks a feature or it's component. + */ +function features_feature_unlock($feature, $component = NULL) { + $locked = variable_get('features_feature_locked', array()); + if ($component) { + unset($locked[$feature][$component]); + } + else { + unset($locked[$feature]['_all']); + } + variable_set('features_feature_locked', $locked); +} diff --git a/sites/all/modules/custom/features/includes/features.block.inc b/sites/all/modules/custom/features/includes/features.block.inc new file mode 100644 index 0000000000..3d0db3be5c --- /dev/null +++ b/sites/all/modules/custom/features/includes/features.block.inc @@ -0,0 +1,40 @@ +conditions{$key}['values'])) { + foreach ($context->conditions{$key}['values'] as $item) { + // Special pipe for views + if ($key === 'views') { + $split = explode(':', $item); + $view_name = array_shift($split); + $pipe[$key][$view_name] = $view_name; + } + else { + $pipe[$key][$item] = $item; + } + } + } + } + // Reactions. + if (!empty($context->reactions['block']['blocks'])) { + foreach ($context->reactions['block']['blocks'] as $block) { + $block = (array) $block; + $bid = "{$block['module']}-{$block['delta']}"; + $pipe['block'][$bid] = $bid; + } + } + } + } + return $pipe; +} + +/** + * Implements hook_features_revert(). + * + * @param $module + * name of module to revert content for + */ +function context_features_revert($module = NULL) { + $return = ctools_component_features_revert('context', $module); + context_invalidate_cache(); + return $return; +} diff --git a/sites/all/modules/custom/features/includes/features.ctools.inc b/sites/all/modules/custom/features/includes/features.ctools.inc new file mode 100644 index 0000000000..387cece362 --- /dev/null +++ b/sites/all/modules/custom/features/includes/features.ctools.inc @@ -0,0 +1,378 @@ + $info) { + $code = ''; + if (!function_exists("{$info['module']}_features_api")) { + $code .= 'function '. $info['module'] .'_features_api() { return ctools_component_features_api("'. $info['module'] .'"); }'; + } + + // ctools component with owner defined as "ctools" + if (!function_exists("{$component}_features_api") && $info['module'] === 'ctools') { + $code .= 'function '. $component .'_features_api() { return ctools_component_features_api("'. $component .'"); }'; + } + + if (!function_exists("{$component}_features_export")) { + $code .= 'function '. $component .'_features_export($data, &$export, $module_name = "") { return ctools_component_features_export("'. $component .'", $data, $export, $module_name); }'; + } + if (!function_exists("{$component}_features_export_options")) { + $code .= 'function '. $component .'_features_export_options() { return ctools_component_features_export_options("'. $component .'"); }'; + } + if (!function_exists("{$component}_features_export_render")) { + $code .= 'function '. $component .'_features_export_render($module, $data, $export = NULL) { return ctools_component_features_export_render("'. $component .'", $module, $data, $export); }'; + } + if (!function_exists("{$component}_features_revert")) { + $code .= 'function '. $component .'_features_revert($module) { return ctools_component_features_revert("'. $component .'", $module); }'; + } + eval($code); + } + } +} + +/** + * Implements hook_features_api(). + */ +function ctools_features_api() { + return array( + 'ctools' => array( + 'name' => 'CTools export API', + 'feature_source' => TRUE, + 'duplicates' => FEATURES_DUPLICATES_ALLOWED, + // CTools API integration does not include a default hook declaration as + // it is not a proper default hook. + // 'default_hook' => 'ctools_plugin_api', + ), + ); +} + +/** + * Implements hook_features_export(). + * Adds references to the ctools mothership hook, ctools_plugin_api(). + */ +function ctools_features_export($data, &$export, $module_name = '') { + // Add ctools dependency + $export['dependencies']['ctools'] = 'ctools'; + + // Add the actual ctools components which will need to be accounted for in + // hook_ctools_plugin_api(). The components are actually identified by a + // delimited list of values: `module_name:api:current_version` + foreach ($data as $component) { + if ($info = _ctools_features_get_info($component)) { + $identifier = "{$info['module']}:{$info['api']}:{$info['current_version']}"; + $export['features']['ctools'][$identifier] = $identifier; + } + } + + return array(); +} + +/** + * Implements hook_features_export_render(). + * Adds the ctools mothership hook, ctools_plugin_api(). + */ +function ctools_features_export_render($module, $data) { + $component_exports = array(); + foreach ($data as $component) { + $code = array(); + if ($info = _ctools_features_get_info($component)) { + // For background on why we change the output for hook_views_api() + // see http://drupal.org/node/1459120. + if ($info['module'] == 'views') { + $code[] = ' return array("api" => "3.0");'; + } + else { + $code[] = ' if ($module == "'. $info['module'] .'" && $api == "'. $info['api'] .'") {'; + $code[] = ' return array("version" => "'. $info['current_version'] .'");'; + $code[] = ' }'; + } + } + ctools_include('plugins'); + $plugin_api_hook_name = ctools_plugin_api_get_hook($info['module'], $info['api']); + + if (key_exists($plugin_api_hook_name, $component_exports)) { + $component_exports[$plugin_api_hook_name]['code'] .= "\n" . implode("\n", $code); + } + else { + $component_exports[$plugin_api_hook_name] = array( + 'code' => implode("\n", $code), + 'args' => '$module = NULL, $api = NULL', + ); + } + } + + return $component_exports; + +} + +/** + * Master implementation of hook_features_api() for all ctools components. + * + * Note that this master hook does not use $component like the others, but uses the + * component module's namespace instead. + */ +function ctools_component_features_api($module_name) { + $api = array(); + foreach (_ctools_features_get_info() as $component => $info) { + // if module owner is set to "ctools" we need to compare the component + if ($info['module'] == $module_name || ($info['module'] === 'ctools' && $component == $module_name) ) { + $api[$component] = $info; + } + } + return $api; +} + +/** + * Master implementation of hook_features_export_options() for all ctools components. + */ +function ctools_component_features_export_options($component) { + $options = array(); + + ctools_include('export'); + $schema = ctools_export_get_schema($component); + if ($schema && $schema['export']['bulk export']) { + if (!empty($schema['export']['list callback']) && function_exists($schema['export']['list callback'])) { + $options = $schema['export']['list callback'](); + } + else { + $options = _ctools_features_export_default_list($component, $schema); + } + } + asort($options); + return $options; +} + +/** + * Master implementation of hook_features_export() for all ctools components. + */ +function ctools_component_features_export($component, $data, &$export, $module_name = '') { + // Add the actual implementing module as a dependency + $info = _ctools_features_get_info(); + if ($module_name !== $info[$component]['module']) { + $export['dependencies'][$info[$component]['module']] = $info[$component]['module']; + } + + // Add the components + foreach ($data as $object_name) { + if ($object = _ctools_features_export_crud_load($component, $object_name)) { + // If this object is provided as a default by a different module, don't + // export and add that module as a dependency instead. + if (!empty($object->export_module) && $object->export_module !== $module_name) { + $export['dependencies'][$object->export_module] = $object->export_module; + if (isset($export['features'][$component][$object_name])) { + unset($export['features'][$component][$object_name]); + } + } + // Otherwise, add the component. + else { + $export['features'][$component][$object_name] = $object_name; + } + } + } + + // Let CTools handle API integration for this component. + return array('ctools' => array($component)); +} + +/** + * Master implementation of hook_features_export_render() for all ctools components. + */ +function ctools_component_features_export_render($component, $module, $data) { + // Reset the export display static to prevent clashes. + drupal_static_reset('panels_export_display'); + + ctools_include('export'); + $schema = ctools_export_get_schema($component); + + if (function_exists($schema['export']['to hook code callback'])) { + $export = $schema['export']['to hook code callback']($data, $module); + $code = explode("{\n", $export); + array_shift($code); + $code = explode('}', implode($code, "{\n")); + array_pop($code); + $code = implode('}', $code); + } + else { + $code = ' $export = array();'."\n\n"; + foreach ($data as $object_name) { + if ($object = _ctools_features_export_crud_load($component, $object_name)) { + $identifier = $schema['export']['identifier']; + $code .= _ctools_features_export_crud_export($component, $object, ' '); + $code .= " \$export[" . ctools_var_export($object_name) . "] = \${$identifier};\n\n"; + } + } + $code .= ' return $export;'; + } + + return array($schema['export']['default hook'] => $code); +} + +/** + * Master implementation of hook_features_revert() for all ctools components. + */ +function ctools_component_features_revert($component, $module) { + if ($objects = features_get_default($component, $module)) { + foreach ($objects as $name => $object) { + // Some things (like views) do not use the machine name as key + // and need to be loaded explicitly in order to be deleted. + $object = ctools_export_crud_load($component, $name); + if ($object && ($object->export_type & EXPORT_IN_DATABASE)) { + _ctools_features_export_crud_delete($component, $object); + } + } + } +} + +/** + * Helper function to return various ctools information for components. + */ +function _ctools_features_get_info($identifier = NULL, $reset = FALSE) { + static $components; + if (!isset($components) || $reset) { + $components = array(); + $modules = features_get_info(); + ctools_include('export'); + drupal_static('ctools_export_get_schemas', NULL, $reset); + foreach (ctools_export_get_schemas_by_module() as $module => $schemas) { + foreach ($schemas as $table => $schema) { + if ($schema['export']['bulk export']) { + // Let the API owner take precedence as the owning module. + $api_module = isset($schema['export']['api']['owner']) ? $schema['export']['api']['owner'] : $module; + $components[$table] = array( + 'name' => isset($modules[$api_module]->info['name']) ? $modules[$api_module]->info['name'] : $api_module, + 'default_hook' => $schema['export']['default hook'], + 'default_file' => FEATURES_DEFAULTS_CUSTOM, + 'module' => $api_module, + 'feature_source' => TRUE, + ); + if (isset($schema['export']['api'])) { + $components[$table] += array( + 'api' => $schema['export']['api']['api'], + 'default_filename' => $schema['export']['api']['api'], + 'current_version' => $schema['export']['api']['current_version'], + ); + } + } + } + } + } + + // Return information specific to a particular component. + if (isset($identifier)) { + // Identified by the table name. + if (isset($components[$identifier])) { + return $components[$identifier]; + } + // New API identifier. Allows non-exportables related CTools APIs to be + // supported by an explicit `module:api:current_version` key. + else if (substr_count($identifier, ':') === 2) { + list($module, $api, $current_version) = explode(':', $identifier); + // If a schema component matches the provided identifier, provide that + // information. This also ensures that the version number is up to date. + foreach ($components as $table => $info) { + if ($info['module'] == $module && $info['api'] == $api && $info['current_version'] >= $current_version) { + return $info; + } + } + // Fallback to just giving back what was provided to us. + return array('module' => $module, 'api' => $api, 'current_version' => $current_version); + } + return FALSE; + } + + return $components; +} + +/** + * Wrapper around ctools_export_crud_export() for < 1.7 compatibility. + */ +function _ctools_features_export_crud_export($table, $object, $indent = '') { + return ctools_api_version('1.7') ? ctools_export_crud_export($table, $object, $indent) : ctools_export_object($table, $object, $indent); +} + +/** + * Wrapper around ctools_export_crud_load() for < 1.7 compatibility. + */ +function _ctools_features_export_crud_load($table, $name) { + if (ctools_api_version('1.7')) { + return ctools_export_crud_load($table, $name); + } + elseif ($objects = ctools_export_load_object($table, 'names', array($name))) { + return array_shift($objects); + } + return FALSE; +} + +/** + * Wrapper around ctools_export_default_list() for < 1.7 compatibility. + */ +function _ctools_features_export_default_list($table, $schema) { + if (ctools_api_version('1.7')) { + return ctools_export_default_list($table, $schema); + } + elseif ($objects = ctools_export_load_object($table, 'all')) { + return drupal_map_assoc(array_keys($objects)); + } + return array(); +} + +/** + * Wrapper around ctools_export_crud_delete() for < 1.7 compatibility. + */ +function _ctools_features_export_crud_delete($table, $object) { + if (ctools_api_version('1.7')) { + ctools_export_crud_delete($table, $object); + } + else { + $schema = ctools_export_get_schema($table); + $export = $schema['export']; + db_query("DELETE FROM {{$table}} WHERE {$export['key']} = '%s'", $object->{$export['key']}); + } +} + +/** + * Implements hook_features_export_render() for page_manager. + */ +function page_manager_pages_features_export_render($module, $data) { + // Reset the export display static to prevent clashes. + drupal_static_reset('panels_export_display'); + + // Ensure that handlers have their code included before exporting. + page_manager_get_tasks(); + return ctools_component_features_export_render('page_manager_pages', $module, $data); +} + +/** + * Implements hook_features_revert() for page_manager. + */ +function page_manager_pages_features_revert($module) { + if ($pages = features_get_default('page_manager_pages', $module)) { + require_once drupal_get_path('module', 'ctools') . '/page_manager/plugins/tasks/page.inc'; + foreach ($pages as $page) { + page_manager_page_delete($page); + } + } +} + +/** + * Implements hook_features_pipe_COMPONENT_alter() for views_view. + */ +function views_features_pipe_views_view_alter(&$pipe, $data, $export) { + // @todo Remove this check before next stable release. + if (!function_exists('views_plugin_list')) { + return; + } + + $map = array_flip($data); + foreach (views_plugin_list() as $plugin) { + foreach ($plugin['views'] as $view_name) { + if (isset($map[$view_name])) { + $pipe['dependencies'][$plugin['module']] = $plugin['module']; + } + } + } +} diff --git a/sites/all/modules/custom/features/includes/features.features.inc b/sites/all/modules/custom/features/includes/features.features.inc new file mode 100644 index 0000000000..c657bc849f --- /dev/null +++ b/sites/all/modules/custom/features/includes/features.features.inc @@ -0,0 +1,73 @@ + array( + 'name' => 'Dependencies', + 'feature_source' => TRUE, + 'duplicates' => FEATURES_DUPLICATES_ALLOWED, + ), + ); +} + +/** + * Implements hook_features_export_options(). + */ +function dependencies_features_export_options() { + // Excluded modules. + $excluded = drupal_required_modules(); + $options = array(); + foreach (features_get_modules() as $module_name => $info) { + if (!in_array($module_name, $excluded) && $info->status && !empty($info->info)) { + $options[$module_name] = $info->info['name']; + } + } + return $options; +} + +/** + * Implements hook_features_export(). + */ +function dependencies_features_export($data, &$export, $module_name = '') { + // Don't allow a module to depend upon itself. + if (!empty($data[$module_name])) { + unset($data[$module_name]); + } + + // Clean up existing dependencies and merge. + $export['dependencies'] = _features_export_minimize_dependencies($export['dependencies'], $module_name); + $export['dependencies'] = array_merge($data, $export['dependencies']); + $export['dependencies'] = array_unique($export['dependencies']); +} + +/** + * Implements hook_features_revert(). + */ +function dependencies_features_revert($module) { + dependencies_features_rebuild($module); +} + +/** + * Implements hook_features_rebuild(). + * Ensure that all of a feature's dependencies are enabled. + */ +function dependencies_features_rebuild($module) { + $feature = features_get_features($module); + if (!empty($feature->info['dependencies'])) { + $install = array(); + foreach ($feature->info['dependencies'] as $dependency) { + // Parse the dependency string into the module name and version information. + $parsed_dependency = drupal_parse_dependency($dependency); + $dependency = $parsed_dependency['name']; + if (!module_exists($dependency)) { + $install[] = $dependency; + } + } + if (!empty($install)) { + features_install_modules($install); + } + } +} diff --git a/sites/all/modules/custom/features/includes/features.field.inc b/sites/all/modules/custom/features/includes/features.field.inc new file mode 100644 index 0000000000..09104a32e4 --- /dev/null +++ b/sites/all/modules/custom/features/includes/features.field.inc @@ -0,0 +1,530 @@ + array( + // this is deprecated by field_base and field_instance + // but retained for compatibility with older exports + 'name' => t('Fields'), + 'default_hook' => 'field_default_fields', + 'default_file' => FEATURES_DEFAULTS_INCLUDED, + 'feature_source' => FALSE, + ), + 'field_base' => array( + 'name' => t('Field Bases'), + 'default_hook' => 'field_default_field_bases', + 'default_file' => FEATURES_DEFAULTS_INCLUDED, + 'feature_source' => TRUE, + 'supersedes' => 'field', + ), + 'field_instance' => array( + 'name' => t('Field Instances'), + 'default_hook' => 'field_default_field_instances', + 'default_file' => FEATURES_DEFAULTS_INCLUDED, + 'feature_source' => TRUE, + 'supersedes' => 'field', + ) + ); +} + +/** + * Implements hook_features_export_options(). + */ +function field_base_features_export_options() { + $options = array(); + $fields = field_info_fields(); + foreach ($fields as $field_name => $field) { + $options[$field_name] = $field_name; + } + return $options; +} + +/** + * Implements hook_features_export_options(). + */ +function field_instance_features_export_options() { + $options = array(); + foreach (field_info_fields() as $field_name => $field) { + foreach ($field['bundles'] as $entity_type => $bundles) { + foreach ($bundles as $bundle) { + $identifier = "{$entity_type}-{$bundle}-{$field_name}"; + $options[$identifier] = $identifier; + } + } + } + ksort($options); + return $options; +} + +/** + * Implements hook_features_export(). + */ +function field_base_features_export($data, &$export, $module_name = '') { + $pipe = array(); + $map = features_get_default_map('field_base'); + + // The field_default_field_bases() hook integration is provided by the + // features module so we need to add it as a dependency. + $export['dependencies']['features'] = 'features'; + + foreach ($data as $identifier) { + if ($base = features_field_base_load($identifier)) { + // If this field is already provided by another module, remove the field + // and add the other module as a dependency. + if (isset($map[$identifier]) && $map[$identifier] != $module_name) { + if (isset($export['features']['field_base'][$identifier])) { + unset($export['features']['field_base'][$identifier]); + } + $module = $map[$identifier]; + $export['dependencies'][$module] = $module; + } + // If the field has not yet been exported, add it + else { + $export['features']['field_base'][$identifier] = $identifier; + $export['dependencies'][$base['module']] = $base['module']; + if ($base['storage']['type'] != variable_get('field_storage_default', 'field_sql_storage')) { + $export['dependencies'][$base['storage']['module']] = $base['storage']['module']; + } + // If taxonomy field, add in the vocabulary + if ($base['type'] == 'taxonomy_term_reference' && !empty($base['settings']['allowed_values'])) { + foreach ($base['settings']['allowed_values'] as $allowed_values) { + if (!empty($allowed_values['vocabulary'])) { + $pipe['taxonomy'][] = $allowed_values['vocabulary']; + } + } + } + } + } + } + return $pipe; +} + +/** + * Implements hook_features_export(). + */ +function field_instance_features_export($data, &$export, $module_name = '') { + $pipe = array('field_base' => array()); + $map = features_get_default_map('field_instance'); + + // The field_default_field_instances() hook integration is provided by the + // features module so we need to add it as a dependency. + $export['dependencies']['features'] = 'features'; + + foreach ($data as $identifier) { + if ($instance = features_field_instance_load($identifier)) { + // If this field is already provided by another module, remove the field + // and add the other module as a dependency. + if (isset($map[$identifier]) && $map[$identifier] != $module_name) { + if (isset($export['features']['field_instance'][$identifier])) { + unset($export['features']['field_instance'][$identifier]); + } + $module = $map[$identifier]; + $export['dependencies'][$module] = $module; + } + // If the field has not yet been exported, add it + else { + $export['features']['field_instance'][$identifier] = $identifier; + $export['dependencies'][$instance['widget']['module']] = $instance['widget']['module']; + foreach ($instance['display'] as $key => $display) { + if (isset($display['module'])) { + $export['dependencies'][$display['module']] = $display['module']; + // @TODO: handle the pipe to image styles + } + } + $pipe['field_base'][] = $instance['field_name']; + } + } + } + return $pipe; +} + +/** + * Implements hook_features_export_render(). + */ +function field_base_features_export_render($module, $data, $export = NULL) { + $translatables = $code = array(); + $code[] = ' $field_bases = array();'; + $code[] = ''; + foreach ($data as $identifier) { + if ($field = features_field_base_load($identifier)) { + unset($field['columns']); + // unset($field['locked']); + // Only remove the 'storage' declaration if the field is using the default + // storage type. + if ($field['storage']['type'] == variable_get('field_storage_default', 'field_sql_storage')) { + unset($field['storage']); + } + // If we still have a storage declaration here it means that a non-default + // storage type was altered into to the field definition. And noone would + // never need to change the 'details' key, so don't render it. + if (isset($field['storage']['details'])) { + unset($field['storage']['details']); + } + + _field_instance_features_export_sort($field); + $field_export = features_var_export($field, ' '); + $field_identifier = features_var_export($identifier); + $code[] = " // Exported field_base: {$field_identifier}"; + $code[] = " \$field_bases[{$field_identifier}] = {$field_export};"; + $code[] = ""; + } + } + $code[] = ' return $field_bases;'; + $code = implode("\n", $code); + return array('field_default_field_bases' => $code); +} + +/** + * Implements hook_features_export_render(). + */ +function field_instance_features_export_render($module, $data, $export = NULL) { + $translatables = $code = array(); + + $code[] = ' $field_instances = array();'; + $code[] = ''; + + foreach ($data as $identifier) { + if ($instance = features_field_instance_load($identifier)) { + _field_instance_features_export_sort($instance); + $field_export = features_var_export($instance, ' '); + $instance_identifier = features_var_export($identifier); + $code[] = " // Exported field_instance: {$instance_identifier}"; + $code[] = " \$field_instances[{$instance_identifier}] = {$field_export};"; + $code[] = ""; + + if (!empty($instance['label'])) { + $translatables[] = $instance['label']; + } + if (!empty($instance['description'])) { + $translatables[] = $instance['description']; + } + } + } + if (!empty($translatables)) { + $code[] = features_translatables_export($translatables, ' '); + } + $code[] = ' return $field_instances;'; + $code = implode("\n", $code); + return array('field_default_field_instances' => $code); +} + +// Helper to enforce consistency in field export arrays. +function _field_instance_features_export_sort(&$field, $sort = TRUE) { + + // Some arrays are not sorted to preserve order (for example allowed_values). + static $sort_blacklist = array( + 'allowed_values', + 'format_handlers', + ); + + if ($sort) { + uksort($field, 'strnatcmp'); + } + foreach ($field as $k => $v) { + if (is_array($v)) { + _field_instance_features_export_sort($field[$k], !in_array($k, $sort_blacklist)); + } + } +} + +/** + * Implements hook_features_revert(). + */ +function field_base_features_revert($module) { + field_base_features_rebuild($module); +} + +/** + * Implements hook_features_revert(). + */ +function field_instance_features_revert($module) { + field_instance_features_rebuild($module); +} + +/** + * Implements of hook_features_rebuild(). + * Rebuilds fields from code defaults. + */ +function field_base_features_rebuild($module) { + if ($fields = features_get_default('field_base', $module)) { + field_info_cache_clear(); + + // Load all the existing field bases up-front so that we don't + // have to rebuild the cache all the time. + $existing_fields = field_info_fields(); + + foreach ($fields as $field) { + // Create or update field. + if (isset($existing_fields[$field['field_name']])) { + $existing_field = $existing_fields[$field['field_name']]; + if ($field + $existing_field !== $existing_field) { + field_update_field($field); + } + } + else { + field_create_field($field); + $existing_fields[$field['field_name']] = $field; + } + variable_set('menu_rebuild_needed', TRUE); + } + } +} + +/** + * Implements of hook_features_rebuild(). + * Rebuilds field instances from code defaults. + */ +function field_instance_features_rebuild($module) { + if ($instances = features_get_default('field_instance', $module)) { + field_info_cache_clear(); + + // Load all the existing instances up-front so that we don't + // have to rebuild the cache all the time. + $existing_instances = field_info_instances(); + + foreach ($instances as $field_instance) { + // If the field base information does not exist yet, cancel out. + if (!field_info_field($field_instance['field_name'])) { + continue; + } + + // Create or update field instance. + if (isset($existing_instances[$field_instance['entity_type']][$field_instance['bundle']][$field_instance['field_name']])) { + $existing_instance = $existing_instances[$field_instance['entity_type']][$field_instance['bundle']][$field_instance['field_name']]; + if ($field_instance + $existing_instance !== $existing_instance) { + try { + field_update_instance($field_instance); + } + catch (FieldException $e) { + watchdog('features', 'Attempt to update field instance %label (in %entity entity type %bundle bundle) failed: %message', array('%label' => $field_instance['field_name'], '%entity' => $field_instance['entity_type'], '%bundle' => $field_instance['bundle'], '%message' => $e->getMessage()), WATCHDOG_ERROR); + } + } + } + else { + try { + field_create_instance($field_instance); + } + catch (FieldException $e) { + watchdog('features', 'Attempt to create field instance %label (in %entity entity type %bundle bundle) failed: %message', array('%label' => $field_instance['field_name'], '%entity' => $field_instance['entity_type'], '%bundle' => $field_instance['bundle'], '%message' => $e->getMessage()), WATCHDOG_ERROR); + } + $existing_instances[$field_instance['entity_type']][$field_instance['bundle']][$field_instance['field_name']] = $field_instance; + } + } + + if ($instances) { + variable_set('menu_rebuild_needed', TRUE); + } + } +} + +/** + * Load a field base configuration by a field_name identifier. + */ +function features_field_base_load($field_name) { + if ($field_info = field_info_field($field_name)) { + unset($field_info['id']); + unset($field_info['bundles']); + return $field_info; + } + return FALSE; +} + +/** + * Load a field's instance configuration by an entity_type-bundle-field_name + * identifier. + */ +function features_field_instance_load($identifier) { + list($entity_type, $bundle, $field_name) = explode('-', $identifier); + if ($instance_info = field_info_instance($entity_type, $field_name, $bundle)) { + unset($instance_info['id']); + unset($instance_info['field_id']); + return $instance_info; + } + return FALSE; +} + +/* ----- DEPRECATED FIELD EXPORT ----- + * keep this code for backward compatibility with older exports + * until v3.x + */ + +/** + * Implements hook_features_export_options(). + */ +function field_features_export_options() { + $options = array(); + $instances = field_info_instances(); + foreach ($instances as $entity_type => $bundles) { + foreach ($bundles as $bundle => $fields) { + foreach ($fields as $field) { + $identifier = "{$entity_type}-{$bundle}-{$field['field_name']}"; + $options[$identifier] = $identifier; + } + } + } + return $options; +} + +/** + * Implements hook_features_export(). + */ +function field_features_export($data, &$export, $module_name = '') { + $pipe = array(); + // Convert 'field' to 'field_instance' on features-update. + $pipe['field_instance'] = $data; + return $pipe; +} + +/** + * Implements hook_features_export_render(). + */ +function field_features_export_render($module, $data, $export = NULL) { + $translatables = $code = array(); + + $code[] = ' $fields = array();'; + $code[] = ''; + foreach ($data as $identifier) { + if ($field = features_field_load($identifier)) { + unset($field['field_config']['columns']); + // Only remove the 'storage' declaration if the field is using the default + // storage type. + if ($field['field_config']['storage']['type'] == variable_get('field_storage_default', 'field_sql_storage')) { + unset($field['field_config']['storage']); + } + // If we still have a storage declaration here it means that a non-default + // storage type was altered into to the field definition. And noone would + // never need to change the 'details' key, so don't render it. + if (isset($field['field_config']['storage']['details'])) { + unset($field['field_config']['storage']['details']); + } + + _field_features_export_sort($field); + $field_export = features_var_export($field, ' '); + $field_identifier = features_var_export($identifier); + $code[] = " // Exported field: {$field_identifier}."; + $code[] = " \$fields[{$field_identifier}] = {$field_export};"; + $code[] = ""; + + // Add label and description to translatables array. + if (!empty($field['field_instance']['label'])) { + $translatables[] = $field['field_instance']['label']; + } + if (!empty($field['field_instance']['description'])) { + $translatables[] = $field['field_instance']['description']; + } + } + } + if (!empty($translatables)) { + $code[] = features_translatables_export($translatables, ' '); + } + $code[] = ' return $fields;'; + $code = implode("\n", $code); + return array('field_default_fields' => $code); +} + +// Helper to enforce consistency in field export arrays. +function _field_features_export_sort(&$field, $sort = TRUE) { + + // Some arrays are not sorted to preserve order (for example allowed_values). + static $sort_blacklist = array( + 'allowed_values', + 'format_handlers', + ); + + if ($sort) { + ksort($field); + } + foreach ($field as $k => $v) { + if (is_array($v)) { + _field_features_export_sort($field[$k], !in_array($k, $sort_blacklist)); + } + } +} + +/** + * Implements hook_features_revert(). + */ +function field_features_revert($module) { + field_features_rebuild($module); +} + +/** + * Implements of hook_features_rebuild(). + * Rebuilds fields from code defaults. + */ +function field_features_rebuild($module) { + if ($fields = features_get_default('field', $module)) { + field_info_cache_clear(); + + // Load all the existing fields and instance up-front so that we don't + // have to rebuild the cache all the time. + $existing_fields = field_info_fields(); + $existing_instances = field_info_instances(); + + foreach ($fields as $field) { + // Create or update field. + $field_config = $field['field_config']; + if (isset($existing_fields[$field_config['field_name']])) { + $existing_field = $existing_fields[$field_config['field_name']]; + if ($field_config + $existing_field !== $existing_field) { + try { + field_update_field($field_config); + } + catch (FieldException $e) { + watchdog('features', 'Attempt to update field %label failed: %message', array('%label' => $field_config['field_name'], '%message' => $e->getMessage()), WATCHDOG_ERROR); + } + } + } + else { + try { + field_create_field($field_config); + } + catch (FieldException $e) { + watchdog('features', 'Attempt to create field %label failed: %message', array('%label' => $field_config['field_name'], '%message' => $e->getMessage()), WATCHDOG_ERROR); + } + $existing_fields[$field_config['field_name']] = $field_config; + } + + // Create or update field instance. + $field_instance = $field['field_instance']; + if (isset($existing_instances[$field_instance['entity_type']][$field_instance['bundle']][$field_instance['field_name']])) { + $existing_instance = $existing_instances[$field_instance['entity_type']][$field_instance['bundle']][$field_instance['field_name']]; + if ($field_instance + $existing_instance !== $existing_instance) { + field_update_instance($field_instance); + } + } + else { + field_create_instance($field_instance); + $existing_instances[$field_instance['entity_type']][$field_instance['bundle']][$field_instance['field_name']] = $field_instance; + } + } + + if ($fields) { + variable_set('menu_rebuild_needed', TRUE); + } + } +} + +/** + * Load a field's configuration and instance configuration by an + * entity_type-bundle-field_name identifier. + */ +function features_field_load($identifier) { + list($entity_type, $bundle, $field_name) = explode('-', $identifier); + $field_info = field_info_field($field_name); + $instance_info = field_info_instance($entity_type, $field_name, $bundle); + if ($field_info && $instance_info) { + unset($field_info['id']); + unset($field_info['bundles']); + unset($instance_info['id']); + unset($instance_info['field_id']); + return array( + 'field_config' => $field_info, + 'field_instance' => $instance_info, + ); + } + return FALSE; +} diff --git a/sites/all/modules/custom/features/includes/features.filter.inc b/sites/all/modules/custom/features/includes/features.filter.inc new file mode 100644 index 0000000000..a52927d81d --- /dev/null +++ b/sites/all/modules/custom/features/includes/features.filter.inc @@ -0,0 +1,120 @@ + array( + 'name' => t('Text formats'), + 'default_hook' => 'filter_default_formats', + 'default_file' => FEATURES_DEFAULTS_INCLUDED, + 'feature_source' => TRUE + ), + ); +} + +/** + * Implements hook_features_export_options(). + */ +function filter_features_export_options() { + $options = array(); + foreach (filter_formats() as $format => $info) { + $options[$format] = $info->name; + } + return $options; +} + +/** + * Implements hook_features_export(). + */ +function filter_features_export($data, &$export, $module_name = '') { + // The filter_default_formats() hook integration is provided by the + // features module so we need to add it as a dependency. + $export['dependencies']['features'] = 'features'; + + $filter_info = filter_get_filters(); + foreach ($data as $name) { + if ($format = features_filter_format_load($name)) { + // Add format to exports + $export['features']['filter'][$format->format] = $format->format; + + // Iterate through filters and ensure each filter's module is included as a dependency + foreach (array_keys($format->filters) as $name) { + if (isset($filter_info[$name], $filter_info[$name]['module'])) { + $module = $filter_info[$name]['module']; + $export['dependencies'][$module] = $module; + } + } + } + } + + $pipe = array(); + return $pipe; +} + +/** + * Implements hook_features_export_render(). + */ +function filter_features_export_render($module, $data, $export = NULL) { + $code = array(); + $code[] = ' $formats = array();'; + $code[] = ''; + + foreach ($data as $name) { + if ($format = features_filter_format_load($name)) { + $format_export = features_var_export($format, ' '); + $format_identifier = features_var_export($format->format); + $code[] = " // Exported format: {$format->name}."; + $code[] = " \$formats[{$format_identifier}] = {$format_export};"; + $code[] = ""; + } + } + + $code[] = ' return $formats;'; + $code = implode("\n", $code); + return array('filter_default_formats' => $code); +} + +/** + * Implements hook_features_revert(). + */ +function filter_features_revert($module) { + return filter_features_rebuild($module); +} + +/** + * Implements hook_features_rebuild(). + */ +function filter_features_rebuild($module) { + if ($defaults = features_get_default('filter', $module)) { + foreach ($defaults as $format) { + $format = (object) $format; + filter_format_save($format); + } + } +} + +/** + * Load a filter format by its name. + */ +function features_filter_format_load($name) { + // Use machine name for retrieving the format if available. + $query = db_select('filter_format'); + $query->fields('filter_format'); + $query->condition('format', $name); + + // Retrieve filters for the format and attach. + if ($format = $query->execute()->fetchObject()) { + $format->filters = array(); + foreach (filter_list_format($format->format) as $filter) { + if (!empty($filter->status)) { + $format->filters[$filter->name]['weight'] = $filter->weight; + $format->filters[$filter->name]['status'] = $filter->status; + $format->filters[$filter->name]['settings'] = $filter->settings; + } + } + return $format; + } + return FALSE; +} diff --git a/sites/all/modules/custom/features/includes/features.image.inc b/sites/all/modules/custom/features/includes/features.image.inc new file mode 100644 index 0000000000..2b5eb27367 --- /dev/null +++ b/sites/all/modules/custom/features/includes/features.image.inc @@ -0,0 +1,101 @@ + array( + 'name' => t('Image styles'), + 'feature_source' => TRUE, + 'default_hook' => 'image_default_styles', + 'alter_hook' => 'image_styles', + ) + ); +} + +/** + * Implements hook_features_export_options(). + */ +function image_features_export_options() { + $options = array(); + foreach (image_styles() as $name => $style) { + $options[$name] = $style['name']; + } + return $options; +} + +/** + * Implements hook_features_export(). + */ +function image_features_export($data, &$export, $module_name = '') { + $pipe = array(); + $map = features_get_default_map('image'); + foreach ($data as $style) { + $export['dependencies']['image'] = 'image'; + // If another module provides this style, add it as a dependency + if (isset($map[$style]) && $map[$style] != $module_name) { + $module = $map[$style]; + $export['dependencies'][$module] = $module; + } + // Otherwise, export the style + elseif (image_style_load($style)) { + $export['features']['image'][$style] = $style; + } + } + return $pipe; +} + +/** + * Implements hook_features_export_render(). + */ +function image_features_export_render($module_name, $data, $export = NULL) { + $code = array(); + $code[] = ' $styles = array();'; + $code[] = ''; + foreach ($data as $name) { + if ($style = image_style_load($name)) { + _image_features_style_sanitize($style); + $style_export = features_var_export($style, ' '); + $style_identifier = features_var_export($name); + $code[] = " // Exported image style: {$name}."; + $code[] = " \$styles[{$style_identifier}] = {$style_export};"; + $code[] = ""; + } + } + $code[] = ' return $styles;'; + $code = implode("\n", $code); + return array('image_default_styles' => $code); +} + +/** + * Implements hook_features_revert(). + */ +function image_features_revert($module) { + if ($default_styles = features_get_default('image', $module)) { + foreach (array_keys($default_styles) as $default_style) { + if ($style = image_style_load($default_style)) { + if ($style['storage'] != IMAGE_STORAGE_DEFAULT) { + image_default_style_revert($style); + } + } + } + } +} + +/** + * Remove unnecessary keys for export. + */ +function _image_features_style_sanitize(&$style, $child = FALSE) { + $omit = $child ? array('isid', 'ieid', 'storage') : array('isid', 'ieid', 'storage', 'module'); + if (is_array($style)) { + foreach ($style as $k => $v) { + if (in_array($k, $omit, TRUE)) { + unset($style[$k]); + } + else if (is_array($v)) { + _image_features_style_sanitize($style[$k], TRUE); + } + } + } +} diff --git a/sites/all/modules/custom/features/includes/features.locale.inc b/sites/all/modules/custom/features/includes/features.locale.inc new file mode 100644 index 0000000000..fc27174b2d --- /dev/null +++ b/sites/all/modules/custom/features/includes/features.locale.inc @@ -0,0 +1,162 @@ + array( + 'name' => t('Languages'), + 'default_hook' => 'locale_default_languages', + 'feature_source' => TRUE, + 'default_file' => FEATURES_DEFAULTS_INCLUDED, + ), + ); +} + +/** + * Implements hook_features_export_options(). + */ +function language_features_export_options() { + return locale_language_list('native', TRUE); +} + +/** + * Implements hook_features_export(). + */ +function language_features_export($data, &$export, $module_name = '') { + $export['dependencies']['features'] = 'features'; + $export['dependencies']['locale'] = 'locale'; + + $language_list = locale_language_list('native', TRUE); + + foreach ($data as $name) { + // Only export existing languages. + if (!empty($language_list[$name])) { + // Add language to exports. + $export['features']['language'][$name] = $name; + } + } + + // No pipe to return. + return array(); +} + +/** + * Implements hook_features_export_render(). + */ +function language_features_export_render($module, $data, $export = NULL) { + $code = array(); + $code[] = ' $languages = array();'; + $code[] = ''; + + $language_list = language_list(); + + foreach ($data as $name) { + // Only render existing languages. + if (!empty($language_list[$name])) { + + $var = (array) $language_list[$name]; + // Unset javascript hash + unset($var['javascript']); + + $lang_export = features_var_export($var, ' '); + $lang_identifier = features_var_export($name); + $code[] = " // Exported language: $name."; + $code[] = " \$languages[{$lang_identifier}] = {$lang_export};"; + } + } + + $code[] = ' return $languages;'; + $code = implode("\n", $code); + return array('locale_default_languages' => $code); +} + +/** + * Implements hook_features_revert(). + */ +function language_features_revert($module) { + return language_features_rebuild($module); +} + +/** + * Implements hook_features_rebuild(). + */ +function language_features_rebuild($module) { + if ($defaults = features_get_default('language', $module)) { + foreach ($defaults as $key => $language) { + _features_language_save((object) $language); + } + + // Set correct language count. + $enabled_languages = db_select('languages') + ->condition('enabled', 1) + ->fields('languages') + ->execute() + ->rowCount(); + variable_set('language_count', $enabled_languages); + } +} + +/** + * Helper function to save the language to database. + * + * @see locale_languages_edit_form_submit() + */ +function _features_language_save($language) { + + $current_language = db_select('languages') + ->condition('language', $language->language) + ->fields('languages') + ->execute() + ->fetchAssoc(); + + // Set the default language when needed. + $default = language_default(); + + // Insert new language via api function. + if (empty($current_language)) { + locale_add_language($language->language, + $language->name, + $language->native, + $language->direction, + $language->domain, + $language->prefix, + $language->enabled, + ($language->language == $default->language)); + // Additional params, locale_add_language does not implement. + db_update('languages') + ->fields(array( + 'plurals' => empty($language->plurals) ? 0 : $language->plurals, + 'formula' => empty($language->formula) ? '' : $language->formula, + )) + ->condition('language', $language->language) + ->execute(); + } + // Update Existing language. + else { + // @TODO: get properties from schema. + $properties = array('language', 'name', 'native', 'direction', 'enabled', 'plurals', 'formula', 'domain', 'prefix', 'weight', 'javascript'); + // The javascript hash is not in the imported data but should be empty + if (!isset($language->javascript)) { + $language->javascript = ''; + } + + $fields = array_intersect_key((array) $language, array_flip($properties)); + db_update('languages') + ->fields($fields) + ->condition('language', $language->language) + ->execute(); + + // Set the default language when needed. + $default = language_default(); + if ($default->language == $language->language) { + variable_set('language_default', (object) $fields); + } + } +} diff --git a/sites/all/modules/custom/features/includes/features.menu.inc b/sites/all/modules/custom/features/includes/features.menu.inc new file mode 100644 index 0000000000..c883e6ac68 --- /dev/null +++ b/sites/all/modules/custom/features/includes/features.menu.inc @@ -0,0 +1,427 @@ + array( + 'name' => t('Menus'), + 'default_hook' => 'menu_default_menu_custom', + 'feature_source' => TRUE, + 'default_file' => FEATURES_DEFAULTS_INCLUDED, + ), + 'menu_links' => array( + 'name' => t('Menu links'), + 'default_hook' => 'menu_default_menu_links', + 'feature_source' => TRUE, + 'default_file' => FEATURES_DEFAULTS_INCLUDED, + ), + // DEPRECATED + 'menu' => array( + 'name' => t('Menu items'), + 'default_hook' => 'menu_default_items', + 'default_file' => FEATURES_DEFAULTS_INCLUDED, + 'feature_source' => FALSE, + ), + ); +} + +/** + * Implements hook_features_export(). + * DEPRECATED: This implementation simply migrates deprecated `menu` items + * to the `menu_links` type. + */ +function menu_features_export($data, &$export, $module_name = '') { + $pipe = array(); + foreach ($data as $path) { + $pipe['menu_links'][] = "features:{$path}"; + } + return $pipe; +} + +/** + * Implements hook_features_export_options(). + */ +function menu_custom_features_export_options() { + $options = array(); + $result = db_query("SELECT * FROM {menu_custom} ORDER BY title", array(), array('fetch' => PDO::FETCH_ASSOC)); + foreach ($result as $menu) { + $options[$menu['menu_name']] = $menu['title']; + } + return $options; +} + +/** + * Implements hook_features_export(). + */ +function menu_custom_features_export($data, &$export, $module_name = '') { + // Default hooks are provided by the feature module so we need to add + // it as a dependency. + $export['dependencies']['features'] = 'features'; + $export['dependencies']['menu'] = 'menu'; + + // Collect a menu to module map + $pipe = array(); + $map = features_get_default_map('menu_custom', 'menu_name'); + foreach ($data as $menu_name) { + // If this menu is provided by a different module, add it as a dependency. + if (isset($map[$menu_name]) && $map[$menu_name] != $module_name) { + $export['dependencies'][$map[$menu_name]] = $map[$menu_name]; + } + else { + $export['features']['menu_custom'][$menu_name] = $menu_name; + } + } + return $pipe; +} + +/** + * Implements hook_features_export_render() + */ +function menu_custom_features_export_render($module, $data) { + $code = array(); + $code[] = ' $menus = array();'; + $code[] = ''; + + $translatables = array(); + foreach ($data as $menu_name) { + $row = db_select('menu_custom') + ->fields('menu_custom') + ->condition('menu_name', $menu_name) + ->execute() + ->fetchAssoc(); + if ($row) { + $export = features_var_export($row, ' '); + $code[] = " // Exported menu: {$menu_name}."; + $code[] = " \$menus['{$menu_name}'] = {$export};"; + $translatables[] = $row['title']; + $translatables[] = $row['description']; + } + } + if (!empty($translatables)) { + $code[] = features_translatables_export($translatables, ' '); + } + + $code[] = ''; + $code[] = ' return $menus;'; + $code = implode("\n", $code); + return array('menu_default_menu_custom' => $code); +} + +/** + * Implements hook_features_revert(). + */ +function menu_custom_features_revert($module) { + menu_custom_features_rebuild($module); +} + +/** + * Implements hook_features_rebuild(). + */ +function menu_custom_features_rebuild($module) { + if ($defaults = features_get_default('menu_custom', $module)) { + foreach ($defaults as $menu) { + menu_save($menu); + } + } +} + +/** + * Implements hook_features_export_options(). + */ +function menu_links_features_export_options() { + global $menu_admin; + // Need to set this to TRUE in order to get menu links that the + // current user may not have access to (i.e. user/login) + $menu_admin = TRUE; + $use_menus = array_intersect_key(menu_get_menus(), array_flip(array_filter(variable_get('features_admin_menu_links_menus', array_keys(menu_get_menus()))))); + $menu_links = menu_parent_options($use_menus, array('mlid' => 0)); + $options = array(); + foreach ($menu_links as $key => $name) { + list($menu_name, $mlid) = explode(':', $key, 2); + if ($mlid != 0) { + $link = menu_link_load($mlid); + $identifier = menu_links_features_identifier($link, TRUE); + $options[$identifier] = "{$menu_name}: {$name}"; + } + } + $menu_admin = FALSE; + return $options; +} + +/** + * Callback for generating the menu link exportable identifier. + */ +function menu_links_features_identifier($link, $old = FALSE) { + // Add some uniqueness to these identifiers, allowing multiple links with the same path, but different titles. + $clean_title = features_clean_title(isset($link['title']) ? $link['title'] : $link['link_title']); + + // The old identifier is requested. + if ($old) { + // if identifier already exists + if (isset($link['options']['identifier'])) { + return $link['options']['identifier']; + } + // providing backward compatibility and allowing/enabling multiple links with same paths + else { + $identifier = isset($link['menu_name'], $link['link_path']) ? "{$link['menu_name']}:{$link['link_path']}" : FALSE; + // Checking if there are multiples of this identifier + if (features_menu_link_load($identifier) !== FALSE) { + // this is where we return the upgrade posibility for links. + return $identifier; + } + } + } + + return isset($link['menu_name'], $link['link_path']) ? "{$link['menu_name']}_{$clean_title}:{$link['link_path']}" : FALSE; +} + +/** + * Implements hook_features_export(). + */ +function menu_links_features_export($data, &$export, $module_name = '') { + // Default hooks are provided by the feature module so we need to add + // it as a dependency. + $export['dependencies']['features'] = 'features'; + $export['dependencies']['menu'] = 'menu'; + + // Collect a link to module map + $pipe = array(); + $map = features_get_default_map('menu_links', 'menu_links_features_identifier'); + foreach ($data as $key => $identifier) { + if ($link = features_menu_link_load($identifier)) { + // If this link is provided by a different module, add it as a dependency. + $new_identifier = menu_links_features_identifier($link, empty($export)); + if (isset($map[$identifier]) && $map[$identifier] != $module_name) { + $export['dependencies'][$map[$identifier]] = $map[$identifier]; + } + else { + $export['features']['menu_links'][$new_identifier] = $new_identifier; + } + // For now, exclude a variety of common menus from automatic export. + // They may still be explicitly included in a Feature if the builder + // chooses to do so. + if (!in_array($link['menu_name'], array('features', 'primary-links', 'secondary-links', 'navigation', 'admin', 'devel'))) { + $pipe['menu_custom'][] = $link['menu_name']; + } + } + } + return $pipe; +} + +/** + * Implements hook_features_export_render() + */ +function menu_links_features_export_render($module, $data, $export = NULL) { + $code = array(); + $code[] = ' $menu_links = array();'; + $code[] = ''; + + $translatables = array(); + foreach ($data as $identifier) { + + if ($link = features_menu_link_load($identifier)) { + $new_identifier = menu_links_features_identifier($link, empty($export)); + + // Replace plid with a parent path. + if (!empty($link['plid']) && $parent = menu_link_load($link['plid'])) { + // If the new identifier is different than the old, maintain + // 'parent_path' for backwards compatibility. + if ($new_identifier != menu_links_features_identifier($link)) { + $link['parent_path'] = $parent['link_path']; + } + else { + $clean_title = features_clean_title($parent['title']); + $link['parent_identifier'] = "{$parent['menu_name']}_{$clean_title}:{$parent['link_path']}"; + } + } + + if (isset($export)) { + // Don't show new identifier unless we are actually exporting. + $link['options']['identifier'] = $new_identifier; + // identifiers are renewed, => that means we need to update them in the db + $temp = $link; + menu_link_save($temp); + } + + unset($link['plid']); + unset($link['mlid']); + + $code[] = " // Exported menu link: {$new_identifier}"; + $code[] = " \$menu_links['{$new_identifier}'] = ". features_var_export($link, ' ') .";"; + $translatables[] = $link['link_title']; + } + } + if (!empty($translatables)) { + $code[] = features_translatables_export($translatables, ' '); + } + + $code[] = ''; + $code[] = ' return $menu_links;'; + $code = implode("\n", $code); + return array('menu_default_menu_links' => $code); +} + +/** + * Implements hook_features_revert(). + */ +function menu_links_features_revert($module) { + menu_links_features_rebuild($module); +} + +/** + * Implements hook_features_rebuild(). + */ +function menu_links_features_rebuild($module) { + if ($menu_links = features_get_default('menu_links', $module)) { + menu_links_features_rebuild_ordered($menu_links); + } +} + +/** + * Generate a depth tree of all menu links. + */ +function menu_links_features_rebuild_ordered($menu_links, $reset = FALSE) { + static $ordered; + static $all_links; + if (!isset($ordered) || $reset) { + $ordered = array(); + $unordered = features_get_default('menu_links'); + + // Order all links by depth. + if ($unordered) { + do { + $current = count($unordered); + foreach ($unordered as $key => $link) { + $identifier = menu_links_features_identifier($link); + $parent = isset($link['parent_identifier']) ? $link['parent_identifier'] : ''; + $weight = 0; + // Parent has been seen, so weigh this above parent. + if (isset($ordered[$parent])) { + $weight = $ordered[$parent] + 1; + } + // Next loop will try to find parent weight instead. + elseif ($parent) { + continue; + } + $ordered[$identifier] = $weight; + $all_links[$identifier] = $link; + unset($unordered[$key]); + } + // Exit out when the above does no changes this loop. + } while (count($unordered) < $current); + } + // Add all remaining unordered items to the ordered list. + foreach ($unordered as $link) { + $identifier = menu_links_features_identifier($link); + $ordered[$identifier] = 0; + } + asort($ordered); + } + + // Ensure any default menu items that do not exist are created. + foreach (array_keys($ordered) as $identifier) { + $link = $all_links[$identifier]; + + $existing = features_menu_link_load($identifier); + if (!$existing || in_array($link, $menu_links)) { + // Retrieve the mlid if this is an existing item. + if ($existing) { + $link['mlid'] = $existing['mlid']; + } + // Retrieve the plid for a parent link. + if (!empty($link['parent_identifier']) && $parent = features_menu_link_load($link['parent_identifier'])) { + $link['plid'] = $parent['mlid']; + } + // This if for backwards compatibility. + elseif (!empty($link['parent_path']) && $parent = features_menu_link_load("{$link['menu_name']}:{$link['parent_path']}")) { + $link['plid'] = $parent['mlid']; + } + else { + $link['plid'] = 0; + } + menu_link_save($link); + } + } +} + +/** + * Load a menu link by its menu_name_cleantitle:link_path identifier. + * Also matches links with unique menu_name:link_path + */ +function features_menu_link_load($identifier) { + $menu_name = ''; + $link_path = ''; + // This gets variables for menu_name_cleantitle:link_path format. + if (strstr($identifier, "_")) { + $link_path = substr($identifier, strpos($identifier, ":") + 1); + list($menu_name) = explode('_', $identifier, 2); + $clean_title = substr($identifier, strpos($identifier, "_") + 1, strpos($identifier, ":") - strpos($identifier, "_") - 1); + } + // This gets variables for traditional identifier format. + else { + $clean_title = ''; + list($menu_name, $link_path) = explode(':', $identifier, 2); + } + $links = db_select('menu_links') + ->fields('menu_links', array('menu_name', 'mlid', 'plid', 'link_path', 'router_path', 'link_title', 'options', 'module', 'hidden', 'external', 'has_children', 'expanded', 'weight', 'customized')) + ->condition('menu_name', $menu_name) + ->condition('link_path', $link_path) + ->addTag('features_menu_link') + ->execute() + ->fetchAllAssoc('mlid'); + + foreach($links as $link) { + $link->options = unserialize($link->options); + + // Title or previous identifier matches. + if ((isset($link->options['identifier']) && strcmp($link->options['identifier'], $identifier) == 0) + || (isset($clean_title) && strcmp(features_clean_title($link->link_title), $clean_title) == 0)) { + + return (array)$link; + } + } + + // Only one link with the requested menu_name and link_path does exists, + // -- providing an upgrade possibility for links saved in a feature before the + // new identifier-pattern was added. + if (count($links) == 1 && empty($clean_title)) { + $link = reset($links); // get the first item + return (array)$link; + } + // If link_path was changed on an existing link, we need to find it by + // searching for link_title. + else if (isset($clean_title)) { + $links = db_select('menu_links') + ->fields('menu_links', array('menu_name', 'mlid', 'plid', 'link_path', 'router_path', 'link_title', 'options', 'module', 'hidden', 'external', 'has_children', 'expanded', 'weight')) + ->condition('menu_name', $menu_name) + ->execute() + ->fetchAllAssoc('mlid'); + + foreach($links as $link) { + $link->options = unserialize($link->options); + // Links with a stored identifier must only be matched on that identifier, + // to prevent cross over assumptions. + if (isset($link->options['identifier'])) { + if (strcmp($link->options['identifier'], $identifier) == 0) { + return (array)$link; + } + } + elseif ((strcmp(features_clean_title($link->link_title), $clean_title) == 0)) { + return (array)$link; + } + } + } + return FALSE; +} + +/** + * Returns a lowercase clean string with only letters, numbers and dashes + */ +function features_clean_title($str) { + return strtolower(preg_replace_callback('/(\s)|([^a-zA-Z\-0-9])/i', create_function( + '$matches', + 'return $matches[1]?"-":"";' + ), $str)); +} diff --git a/sites/all/modules/custom/features/includes/features.node.inc b/sites/all/modules/custom/features/includes/features.node.inc new file mode 100644 index 0000000000..9461778f66 --- /dev/null +++ b/sites/all/modules/custom/features/includes/features.node.inc @@ -0,0 +1,163 @@ + array( + 'name' => t('Content types'), + 'feature_source' => TRUE, + 'default_hook' => 'node_info', + 'alter_type' => FEATURES_ALTER_TYPE_INLINE, + ), + ); +} + +/** + * Implements hook_features_export_options(). + */ +function node_features_export_options() { + return node_type_get_names(); +} + +/** + * Implements hook_features_export. + */ +function node_features_export($data, &$export, $module_name = '') { + $pipe = array(); + $map = features_get_default_map('node'); + + foreach ($data as $type) { + // Poll node module to determine who provides the node type. + if ($info = node_type_get_type($type)) { + // If this node type is provided by a different module, add it as a dependency + if (isset($map[$type]) && $map[$type] != $module_name) { + $export['dependencies'][$map[$type]] = $map[$type]; + } + // Otherwise export the node type. + elseif (in_array($info->base, array('node_content', 'features'))) { + $export['features']['node'][$type] = $type; + $export['dependencies']['node'] = 'node'; + $export['dependencies']['features'] = 'features'; + } + + $fields = field_info_instances('node', $type); + foreach ($fields as $name => $field) { + $pipe['field_instance'][] = "node-{$field['bundle']}-{$field['field_name']}"; + } + } + } + + return $pipe; +} + +/** + * Implements hook_features_export_render(). + */ +function node_features_export_render($module, $data, $export = NULL) { + $elements = array( + 'name' => TRUE, + 'base' => FALSE, + 'description' => TRUE, + 'has_title' => FALSE, + 'title_label' => TRUE, + 'help' => TRUE, + ); + $output = array(); + $output[] = ' $items = array('; + foreach ($data as $type) { + if ($info = node_type_get_type($type)) { + // Force module name to be 'features' if set to 'node. If we leave as + // 'node' the content type will be assumed to be database-stored by + // the node module. + $info->base = ($info->base === 'node') ? 'features' : $info->base; + $output[] = " '{$type}' => array("; + foreach ($elements as $key => $t) { + if ($t) { + $text = str_replace("'", "\'", $info->$key); + $text = !empty($text) ? "t('{$text}')" : "''"; + $output[] = " '{$key}' => {$text},"; + } + else { + $output[] = " '{$key}' => '{$info->$key}',"; + } + } + $output[] = " ),"; + } + } + $output[] = ' );'; + $output[] = ' drupal_alter(\'node_info\', $items);'; + $output[] = ' return $items;'; + $output = implode("\n", $output); + return array('node_info' => $output); +} + +/** + * Implements hook_features_revert(). + * + * @param $module + * name of module to revert content for + */ +function node_features_revert($module = NULL) { + if ($default_types = features_get_default('node', $module)) { + foreach ($default_types as $type_name => $type_info) { + // Delete node types + // We don't use node_type_delete() because we do not actually + // want to delete the node type (and invoke hook_node_type()). + // This can lead to bad consequences like CCK deleting field + // storage in the DB. + db_delete('node_type') + ->condition('type', $type_name) + ->execute(); + } + node_types_rebuild(); + menu_rebuild(); + } +} + +/** + * Implements hook_features_disable(). + * + * When a features module is disabled, modify any node types it provides so + * they can be deleted manually through the content types UI. + * + * @param $module + * Name of module that has been disabled. + */ +function node_features_disable($module) { + if ($default_types = features_get_default('node', $module)) { + foreach ($default_types as $type_name => $type_info) { + $type_info = node_type_load($type_name); + $type_info->module = 'node'; + $type_info->custom = 1; + $type_info->modified = 1; + $type_info->locked = 0; + node_type_save($type_info); + } + } +} + +/** + * Implements hook_features_enable(). + * + * When a features module is enabled, modify any node types it provides so + * they can no longer be deleted manually through the content types UI. + * + * @param $module + * Name of module that has been enabled. + */ +function node_features_enable($module) { + if ($default_types = features_get_default('node', $module)) { + foreach ($default_types as $type_name => $type_info) { + // Ensure the type exists. + if ($type_info = node_type_load($type_name)) { + $type_info->module = $module; + $type_info->custom = 0; + $type_info->modified = 0; + $type_info->locked = 1; + node_type_save($type_info); + } + } + } +} diff --git a/sites/all/modules/custom/features/includes/features.taxonomy.inc b/sites/all/modules/custom/features/includes/features.taxonomy.inc new file mode 100644 index 0000000000..a7c85cd8f4 --- /dev/null +++ b/sites/all/modules/custom/features/includes/features.taxonomy.inc @@ -0,0 +1,105 @@ + array( + 'name' => t('Taxonomy'), + 'feature_source' => TRUE, + 'default_hook' => 'taxonomy_default_vocabularies', + 'default_file' => FEATURES_DEFAULTS_INCLUDED, + ), + ); +} + +/** + * Implements hook_features_export_options(). + */ +function taxonomy_features_export_options() { + $vocabularies = array(); + foreach (taxonomy_get_vocabularies() as $vocabulary) { + $vocabularies[$vocabulary->machine_name] = $vocabulary->name; + } + return $vocabularies; +} + +/** + * Implements hook_features_export(). + * + * @todo Test adding existing dependencies. + */ +function taxonomy_features_export($data, &$export, $module_name = '') { + $pipe = array(); + + // taxonomy_default_vocabularies integration is provided by Features. + $export['dependencies']['features'] = 'features'; + $export['dependencies']['taxonomy'] = 'taxonomy'; + + // Add dependencies for each vocabulary. + $map = features_get_default_map('taxonomy'); + foreach ($data as $machine_name) { + if (isset($map[$machine_name]) && $map[$machine_name] != $module_name) { + $export['dependencies'][$map[$machine_name]] = $map[$machine_name]; + } + else { + $export['features']['taxonomy'][$machine_name] = $machine_name; + + $fields = field_info_instances('taxonomy_term', $machine_name); + foreach ($fields as $name => $field) { + $pipe['field'][] = "taxonomy_term-{$field['bundle']}-{$field['field_name']}"; + $pipe['field_instance'][] = "taxonomy_term-{$field['bundle']}-{$field['field_name']}"; + } + } + } + return $pipe; +} + +/** + * Implements hook_features_export_render(). + */ +function taxonomy_features_export_render($module, $data) { + $vocabularies = taxonomy_get_vocabularies(); + $code = array(); + foreach ($data as $machine_name) { + foreach ($vocabularies as $vocabulary) { + if ($vocabulary->machine_name == $machine_name) { + // We don't want to break the entity cache, so we need to clone the + // vocabulary before unsetting the id. + $vocabulary = clone $vocabulary; + unset($vocabulary->vid); + $code[$machine_name] = $vocabulary; + } + } + } + $code = " return ". features_var_export($code, ' ') .";"; + return array('taxonomy_default_vocabularies' => $code); +} + +/** + * Implements hook_features_revert(). + */ +function taxonomy_features_revert($module) { + taxonomy_features_rebuild($module); +} + +/** + * Implements hook_features_rebuild(). + * + * Rebuilds Taxonomy vocabularies from code defaults. + */ +function taxonomy_features_rebuild($module) { + if ($vocabularies = features_get_default('taxonomy', $module)) { + $existing = taxonomy_get_vocabularies(); + foreach ($vocabularies as $vocabulary) { + $vocabulary = (object) $vocabulary; + foreach ($existing as $existing_vocab) { + if ($existing_vocab->machine_name === $vocabulary->machine_name) { + $vocabulary->vid = $existing_vocab->vid; + } + } + taxonomy_vocabulary_save($vocabulary); + } + } +} diff --git a/sites/all/modules/custom/features/includes/features.user.inc b/sites/all/modules/custom/features/includes/features.user.inc new file mode 100644 index 0000000000..152c5a822e --- /dev/null +++ b/sites/all/modules/custom/features/includes/features.user.inc @@ -0,0 +1,290 @@ + array( + 'name' => t('Roles'), + 'feature_source' => TRUE, + 'default_hook' => 'user_default_roles', + 'default_file' => FEATURES_DEFAULTS_INCLUDED, + ), + 'user_permission' => array( + 'name' => t('Permissions'), + 'feature_source' => TRUE, + 'default_hook' => 'user_default_permissions', + 'default_file' => FEATURES_DEFAULTS_INCLUDED, + ), + ); +} + +/** + * Implements hook_features_export(). + */ +function user_permission_features_export($data, &$export, $module_name = '') { + $export['dependencies']['features'] = 'features'; + + // Ensure the modules that provide the given permissions are included as dependencies. + $map = user_permission_get_modules(); + foreach ($data as $perm) { + $perm_name = $perm; + // Export vocabulary permissions using the machine name, instead of + // vocabulary id. + _user_features_change_term_permission($perm_name, 'machine_name'); + if (isset($map[$perm_name])) { + $perm_module = $map[$perm_name]; + $export['dependencies'][$perm_module] = $perm_module; + $export['features']['user_permission'][$perm] = $perm; + } + } + + return array(); +} + +/** + * Implements hook_features_export_options(). + */ +function user_permission_features_export_options() { + $modules = array(); + $module_info = system_get_info('module'); + foreach (module_implements('permission') as $module) { + $modules[$module] = $module_info[$module]['name']; + } + ksort($modules); + + $options = array(); + foreach ($modules as $module => $display_name) { + if ($permissions = module_invoke($module, 'permission')) { + foreach ($permissions as $perm => $perm_item) { + // Export vocabulary permissions using the machine name, instead of + // vocabulary id. + _user_features_change_term_permission($perm); + $options[$perm] = strip_tags("{$display_name}: {$perm_item['title']}"); + } + } + } + return $options; +} + +/** + * Implements hook_features_export_render(). + */ +function user_permission_features_export_render($module, $data) { + $perm_modules = &drupal_static(__FUNCTION__ . '_perm_modules'); + if (!isset($perm_modules)) { + $perm_modules = user_permission_get_modules(); + } + + $code = array(); + $code[] = ' $permissions = array();'; + $code[] = ''; + + $permissions = _user_features_get_permissions(); + + foreach ($data as $perm_name) { + $permission = array(); + // Export vocabulary permissions using the machine name, instead of + // vocabulary id. + $perm = $perm_name; + _user_features_change_term_permission($perm_name, 'machine_name'); + $permission['name'] = $perm; + if (!empty($permissions[$perm_name])) { + sort($permissions[$perm_name]); + $permission['roles'] = drupal_map_assoc($permissions[$perm_name]); + } + else { + $permission['roles'] = array(); + } + if (isset($perm_modules[$perm_name])) { + $permission['module'] = $perm_modules[$perm_name]; + } + $perm_identifier = features_var_export($perm); + $perm_export = features_var_export($permission, ' '); + $code[] = " // Exported permission: {$perm_identifier}."; + $code[] = " \$permissions[{$perm_identifier}] = {$perm_export};"; + $code[] = ""; + } + + $code[] = ' return $permissions;'; + $code = implode("\n", $code); + return array('user_default_permissions' => $code); +} + +/** + * Implements hook_features_revert(). + */ +function user_permission_features_revert($module) { + user_permission_features_rebuild($module); +} + +/** + * Implements hook_features_rebuild(). + * Iterate through default permissions and update the permissions map. + * + * @param $module + * The module whose default user permissions should be rebuilt. + */ +function user_permission_features_rebuild($module) { + if ($defaults = features_get_default('user_permission', $module)) { + // Make sure the list of available node types is up to date, especially when + // installing multiple features at once, for example from an install profile + // or via drush. + node_types_rebuild(); + + $modules = user_permission_get_modules(); + $roles = _user_features_get_roles(); + $permissions_by_role = _user_features_get_permissions(FALSE); + foreach ($defaults as $permission) { + $perm = $permission['name']; + _user_features_change_term_permission($perm, 'machine_name'); + if (empty($modules[$perm])) { + $args = array('!name' => $perm, '!module' => $module,); + $msg = t('Warning in features rebuild of !module. No module defines permission "!name".', $args); + drupal_set_message($msg, 'warning'); + continue; + } + // Export vocabulary permissions using the machine name, instead of + // vocabulary id. + foreach ($roles as $role) { + if (in_array($role, $permission['roles'])) { + $permissions_by_role[$role][$perm] = TRUE; + } + else { + $permissions_by_role[$role][$perm] = FALSE; + } + } + } + // Write the updated permissions. + foreach ($roles as $rid => $role) { + if (isset($permissions_by_role[$role])) { + user_role_change_permissions($rid, $permissions_by_role[$role]); + } + } + } +} + +/** + * Implements hook_features_export(). + */ +function user_role_features_export($data, &$export, $module_name = '') { + $export['dependencies']['features'] = 'features'; + $map = features_get_default_map('user_role', 'name'); + foreach ($data as $role) { + // Role is provided by another module. Add dependency. + if (isset($map[$role]) && $map[$role] != $module_name) { + $export['dependencies'][$map[$role]] = $map[$role]; + } + // Export. + elseif(user_role_load_by_name($role)) { + $export['features']['user_role'][$role] = $role; + } + } + return array(); +} + +/** + * Implements hook_features_export_options(). + */ +function user_role_features_export_options() { + return drupal_map_assoc(_user_features_get_roles(FALSE)); +} + +/** + * Implements hook_features_export_render(). + */ +function user_role_features_export_render($module, $data) { + $code = array(); + $code[] = ' $roles = array();'; + $code[] = ''; + + foreach ($data as $name) { + if ($role = user_role_load_by_name($name)) { + unset($role->rid); + $role_identifier = features_var_export($name); + $role_export = features_var_export($role , ' '); + $code[] = " // Exported role: {$name}."; + $code[] = " \$roles[{$role_identifier}] = {$role_export};"; + $code[] = ""; + } + } + + $code[] = ' return $roles;'; + $code = implode("\n", $code); + return array('user_default_roles' => $code); +} + +/** + * Implements hook_features_revert(). + */ +function user_role_features_revert($module) { + user_role_features_rebuild($module); +} + +/** + * Implements hook_features_rebuild(). + */ +function user_role_features_rebuild($module) { + if ($defaults = features_get_default('user_role', $module)) { + foreach ($defaults as $role) { + $role = (object) $role; + if ($existing = user_role_load_by_name($role->name)) { + $role->rid = $existing->rid; + } + user_role_save($role); + } + } +} + +/** + * Generate $rid => $role with role names untranslated. + */ +function _user_features_get_roles($builtin = TRUE) { + $roles = array(); + foreach (user_roles() as $rid => $name) { + switch ($rid) { + case DRUPAL_ANONYMOUS_RID: + if ($builtin) { + $roles[$rid] = 'anonymous user'; + } + break; + case DRUPAL_AUTHENTICATED_RID: + if ($builtin) { + $roles[$rid] = 'authenticated user'; + } + break; + default: + $roles[$rid] = $name; + break; + } + } + return $roles; +} + +/** + * Represent the current state of permissions as a perm to role name array map. + */ +function _user_features_get_permissions($by_role = TRUE) { + $map = user_permission_get_modules(); + $roles = _user_features_get_roles(); + $permissions = array(); + foreach (user_role_permissions($roles) as $rid => $role_permissions) { + if ($by_role) { + foreach (array_keys(array_filter($role_permissions)) as $permission) { + if (isset($map[$permission])) { + $permissions[$permission][] = $roles[$rid]; + } + } + } + else { + $permissions[$roles[$rid]] = array(); + foreach ($role_permissions as $permission => $status) { + if (isset($map[$permission])) { + $permissions[$roles[$rid]][$permission] = $status; + } + } + } + } + return $permissions; +} diff --git a/sites/all/modules/custom/features/tests/features.test b/sites/all/modules/custom/features/tests/features.test new file mode 100644 index 0000000000..1fa51ac21d --- /dev/null +++ b/sites/all/modules/custom/features/tests/features.test @@ -0,0 +1,289 @@ + t('Component tests'), + 'description' => t('Run tests for components of Features.') , + 'group' => t('Features'), + ); + } + + /** + * Set up test. + */ + public function setUp() { + parent::setUp(array( + 'field', + 'filter', + 'image', + 'taxonomy', + 'views', + 'features', + 'features_test' + )); + + // Run a features rebuild to ensure our feature is fully installed. + features_rebuild(); + + $admin_user = $this->drupalCreateUser(array('administer features')); + $this->drupalLogin($admin_user); + } + + /** + * Run test. + */ + public function test() { + module_load_include('inc', 'features', 'features.export'); + + $components = array_filter(array( + 'field_instance' => 'field', + 'filter' => 'filter', + 'image' => 'image', + 'node' => 'node', + 'user_permission' => 'user', + 'views_view' => 'views', + ), 'module_exists'); + + foreach (array_keys($components) as $component) { + $callback = "_test_{$component}"; + + // Ensure that the component/default is properly available. + $object = $this->$callback('load'); + $this->assertTrue(!empty($object), t('@component present.', array('@component' => $component))); + + // Ensure that the component is defaulted. + $states = features_get_component_states(array('features_test'), FALSE, TRUE); + $this->assertTrue($states['features_test'][$component] === FEATURES_DEFAULT, t('@component state: Default.', array('@component' => $component))); + + // Override component and test that Features detects the override. + $this->$callback('override', $this); + $states = features_get_component_states(array('features_test'), FALSE, TRUE); + $this->assertTrue($states['features_test'][$component] === FEATURES_OVERRIDDEN, t('@component state: Overridden.', array('@component' => $component))); + } + + // Revert component and ensure that component has reverted. + // Do this in separate loops so we only have to run + // drupal_flush_all_caches() once. + foreach (array_keys($components) as $component) { + features_revert(array('features_test' => array($component))); + } + drupal_flush_all_caches(); + foreach (array_keys($components) as $component) { + // Reload so things like Views can clear it's cache + $this->$callback('load'); + $states = features_get_component_states(array('features_test'), FALSE, TRUE); + $this->assertTrue($states['features_test'][$component] === FEATURES_DEFAULT, t('@component reverted.', array('@component' => $component))); + } + } + + protected function _test_field_instance($op = 'load') { + switch ($op) { + case 'load': + return field_info_instance('node', 'field_features_test', 'features_test'); + case 'override': + $field_instance = field_info_instance('node', 'field_features_test', 'features_test'); + $field_instance['label'] = 'Foo bar'; + field_update_instance($field_instance); + break; + } + } + + protected function _test_filter($op = 'load') { + // So... relying on our own API functions to test is pretty lame. + // But these modules don't have APIs either. So might as well use + // the ones we've written for them... + features_include(); + switch ($op) { + case 'load': + return features_filter_format_load('features_test'); + case 'override': + $format = features_filter_format_load('features_test'); + unset($format->filters['filter_url']); + filter_format_save($format); + break; + } + } + + protected function _test_image($op = 'load') { + switch ($op) { + case 'load': + return image_style_load('features_test'); + case 'override': + $style = image_style_load('features_test'); + $style = image_style_save($style); + foreach ($style['effects'] as $effect) { + $effect['data']['width'] = '120'; + image_effect_save($effect); + } + break; + } + } + + protected function _test_node($op = 'load') { + switch ($op) { + case 'load': + return node_type_get_type('features_test'); + case 'override': + $type = node_type_get_type('features_test'); + $type->description = 'Foo bar baz.'; + $type->modified = TRUE; + node_type_save($type); + break; + } + } + + protected function _test_views_view($op = 'load') { + switch ($op) { + case 'load': + return views_get_view('features_test', TRUE); + case 'override': + $view = views_get_view('features_test', TRUE); + $view->set_display('default'); + $view->display_handler->override_option('title', 'Foo bar'); + $view->save(); + // Clear the load cache from above + views_get_view('features_test', TRUE); + break; + } + } + + protected function _test_user_permission($op = 'load') { + switch ($op) { + case 'load': + $permissions = user_role_permissions(array(DRUPAL_AUTHENTICATED_RID => 'authenticated user')); + return !empty($permissions[DRUPAL_AUTHENTICATED_RID]['create features_test content']); + case 'override': + user_role_change_permissions(DRUPAL_AUTHENTICATED_RID, array('create features_test content' => 0)); + break; + } + } +} + +/** + * Tests enabling of feature modules. + */ +class FeaturesEnableTestCase extends DrupalWebTestCase { + protected $profile = 'testing'; + + /** + * Test info. + */ + public static function getInfo() { + return array( + 'name' => t('Features enable tests'), + 'description' => t('Run tests for enabling of features.') , + 'group' => t('Features'), + ); + } + + + /** + * Run test for features_get_components on enable. + */ + public function testFeaturesGetComponents() { + + // Testing that features_get_components returns correct after enable. + $modules = array( + 'features', + 'taxonomy', + 'features_test', + ); + + // Make sure features_get_components is cached if features already enabled. + if (!module_exists('features')) { + drupal_load('module', 'features'); + } + features_get_components(); + + module_enable($modules); + + // Make sure correct information for enabled modules is now cached. + $components = features_get_components(); + $taxonomy_component_info = taxonomy_features_api(); + $this->assertTrue(!empty($components['taxonomy']) && $components['taxonomy'] == $taxonomy_component_info['taxonomy'], 'features_get_components returns correct taxonomy information on enable'); + + features_rebuild(); + $this->assertNotNull(taxonomy_vocabulary_machine_name_load('taxonomy_features_test'), 'Taxonomy vocabulary correctly enabled on enable.'); + } +} + + +/** + * Tests intergration of ctools for features. + */ +class FeaturesCtoolsIntegrationTest extends DrupalWebTestCase { + protected $profile = 'testing'; + + /** + * Test info. + */ + public static function getInfo() { + return array( + 'name' => t('Features Chaos Tools integration'), + 'description' => t('Run tests for ctool integration of features.') , + 'group' => t('Features'), + ); + } + + /** + * Set up test. + */ + public function setUp() { + parent::setUp(array( + 'features', + 'ctools', + )); + } + + /** + * Run test. + */ + public function testModuleEnable() { + $try = array( + 'strongarm', + 'views', + ); + + // Trigger the first includes and the static to be set. + features_include(); + $function_ends = array( + 'features_export', + 'features_export_options', + 'features_export_render', + 'features_revert', + ); + foreach ($try as $module) { + $function = $module . '_features_api'; + $this->assertFalse(function_exists($function), 'Chaos tools functions for ' . $module . ' do not exist while it is disabled.'); + // Module enable will trigger declaring the new functions. + module_enable(array($module)); + } + + // CTools hooks only created when there is an actual feature exportable + // enabled. + module_enable(array('features_test')); + + foreach ($try as $module) { + if (module_exists($module)) { + $function_exists = function_exists($function); + if ($function_exists) { + foreach ($function() as $component_type => $component_info) { + foreach ($function_ends as $function_end) { + $function_exists = $function_exists && function_exists($component_type . '_' . $function_end); + } + } + } + $this->assertTrue($function_exists, 'Chaos tools functions for ' . $module . ' exist when it is enabled.'); + } + } + } +} diff --git a/sites/all/modules/custom/features/tests/features_test/features_test.features.field_base.inc b/sites/all/modules/custom/features/tests/features_test/features_test.features.field_base.inc new file mode 100644 index 0000000000..b07f00cdbf --- /dev/null +++ b/sites/all/modules/custom/features/tests/features_test/features_test.features.field_base.inc @@ -0,0 +1,43 @@ + 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_features_test', + 'foreign keys' => array( + 'format' => array( + 'columns' => array( + 'format' => 'format', + ), + 'table' => 'filter_format', + ), + ), + 'indexes' => array( + 'format' => array( + 0 => 'format', + ), + ), + 'locked' => 0, + 'module' => 'text', + 'settings' => array( + 'max_length' => 255, + ), + 'translatable' => 1, + 'type' => 'text', + ); + + return $field_bases; +} diff --git a/sites/all/modules/custom/features/tests/features_test/features_test.features.field_instance.inc b/sites/all/modules/custom/features/tests/features_test/features_test.features.field_instance.inc new file mode 100644 index 0000000000..8796ff4f7a --- /dev/null +++ b/sites/all/modules/custom/features/tests/features_test/features_test.features.field_instance.inc @@ -0,0 +1,76 @@ + 'features_test', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 0, + ), + 'full' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + 'print' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + 'rss' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'node', + 'field_name' => 'field_features_test', + 'label' => 'Test', + 'required' => 0, + 'settings' => array( + 'text_processing' => 0, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'size' => 60, + ), + 'type' => 'text_textfield', + 'weight' => -4, + ), + ); + + // Translatables + // Included for use with string extractors like potx. + t('Test'); + + return $field_instances; +} diff --git a/sites/all/modules/custom/features/tests/features_test/features_test.features.filter.inc b/sites/all/modules/custom/features/tests/features_test/features_test.features.filter.inc new file mode 100644 index 0000000000..34cd5e982c --- /dev/null +++ b/sites/all/modules/custom/features/tests/features_test/features_test.features.filter.inc @@ -0,0 +1,56 @@ + 'features_test', + 'name' => 'features_test', + 'cache' => 1, + 'status' => 1, + 'weight' => 0, + 'filters' => array( + 'filter_autop' => array( + 'weight' => 10, + 'status' => 1, + 'settings' => array(), + ), + 'filter_html' => array( + 'weight' => 10, + 'status' => 1, + 'settings' => array( + 'allowed_html' => '
    '; + } + else { + $class_attribute = !empty($group->classes) ? ' class="' . $group->classes . '"' : ''; + + $element['#prefix'] = ''; + if ($show_label) { + $element['#prefix'] .= '<' . $label_element . '>' . check_plain(t($group->label)) . ''; + } + $element['#suffix'] = '
    '; + } + if (!empty($group->description)) { + $element['#prefix'] .= '
    ' . $group->description . '
    '; + } + + if ($effect == 'blind') { + $element['#attached']['library'][] = array('system', 'effects.blind'); + } + +} + +/** + * Implements field_group_pre_render_. + * Format type: HTML5. + * + * @param $element The field group form element. + * @param $group The Field group object prepared for pre_render. + * @param $form The root element or form. + */ +function field_group_pre_render_html5(&$element, $group, &$form) { + $id = !empty($element['#id']) ? ' id="' . $element['#id'] . '"' : ''; + $class = !empty($group->classes) ? ' class="' . $group->classes . '"' : ''; + $element += array( + '#type' => 'markup', + '#prefix' => '<' . $group->format_settings['instance_settings']['wrapper'] . $id . $class . '>', + '#suffix' => 'format_settings['instance_settings']['wrapper'] . '>', + ); +} + +/** + * Implements field_group_pre_render_. + * Format type: Accordion. + * + * @param $element The field group form element. + * @param $group The Field group object prepared for pre_render. + * @param $form The root element or form. + */ +function field_group_pre_render_accordion(&$element, $group, &$form) { + + // Add the jQuery UI accordion. + $element['#attached']['library'][] = array('system', 'ui.accordion'); + + $element += array( + '#type' => 'markup', + '#prefix' => '
    ', + '#suffix' => '
    ', + ); +} + +/** + * Implements field_group_pre_render_. + * Format type: Accordion item. + * + * @param $element The field group form element. + * @param $group The Field group object prepared for pre_render. + * @param $form The root element or form. + */ +function field_group_pre_render_accordion_item(&$element, $group, &$form) { + + $element += array( + '#type' => 'markup', + '#prefix' => '

    ' . check_plain(t($group->label)) . '

    +
    ', + '#suffix' => '
    ', + //'#attributes' => array('class' => array($group->format_type)), + ); + if (!empty($group->description)) { + $element['#prefix'] .= '
    ' . $group->description . '
    '; + } + +} + +/** + * Implements field_group_pre_render_. + * Format type: Horizontal tabs group. + * + * @param $element The field group form element. + * @param $group The Field group object prepared for pre_render. + * @param $form The root element or form. + */ +function field_group_pre_render_htabs(&$element, $group, &$form) { + + $element += array( + '#type' => 'horizontal_tabs', + '#title' => check_plain(t($group->label)), + '#theme_wrappers' => array('horizontal_tabs'), + '#prefix' => '
    ', + '#suffix' => '
    ', + ); + + // By default vertical_tabs don't have titles but you can override it in the theme. + if (!empty($group->label)) { + $element['#title'] = check_plain($group->label); + } + + // Only add form.js on forms. + if (!empty($form['#type']) && $form['#type'] == 'form') { + $element['#attached']['js'][] = 'misc/form.js'; + } + + $element['#attached']['library'][] = array('field_group', 'horizontal-tabs'); +} + +/** + * Implements field_group_pre_render_. + * Format type: Horizontal tab. + * + * @param $element The field group form element. + * @param $group The Field group object prepared for pre_render. + * @param $form The root element or form. + */ +function field_group_pre_render_htab(&$element, $group, &$form) { + + $element += array( + '#type' => 'fieldset', + '#title' => check_plain(t($group->label)), + '#collapsible' => $group->collapsible, + '#collapsed' => $group->collapsed, + '#attributes' => array('class' => explode(" ", $group->classes)), + '#group' => $group->parent_name, + // very important. Cannot be added on the form! + '#parents' => array($group->parent_name), + '#description' => $group->description, + ); + +} + +/** + * Implements field_group_pre_render_. + * Format type: Multipage group. + * + * @param $element The field group form element. + * @param $group The Field group object prepared for pre_render. + * @param $form The root element or form. + */ +function field_group_pre_render_multipage_group(&$element, &$group, &$form) { + + $multipage_element = array( + '#type' => 'multipage', + '#theme_wrappers' => array('multipage'), + '#prefix' => '
    ', + '#suffix' => '
    ', + ); + + $element += $multipage_element; + + $move_additional = isset($group->format_settings['instance_settings']['move_additional']) ? ($group->format_settings['instance_settings']['move_additional'] && isset($form['additional_settings'])) : isset($form['additional_settings']); + $move_button = isset($group->format_settings['instance_settings']['move_button']) ? $group->format_settings['instance_settings']['move_button'] : 0; + + drupal_add_js(array( + 'field_group' => array( + 'multipage_move_submit' => (bool) $move_button, + 'multipage_move_additional' => (bool) $move_additional + ) + ), 'setting'); + +} + +/** + * Implements field_group_pre_render_. + * Format type: Multipage. + * + * @param $element The field group form element. + * @param $group The Field group object prepared for pre_render. + * @param $form The root element or form. + */ +function field_group_pre_render_multipage(&$element, $group, &$form) { + + $group->classes .= $group->format_settings['formatter'] == 'start' ? ' multipage-open' : ' multipage-closed'; + $element += array( + '#type' => 'multipage_pane', + '#title' => check_plain(t($group->label)), + '#collapsible' => $group->collapsible, + '#collapsed' => $group->collapsed, + '#attributes' => array('class' => explode(" ", $group->classes)), + '#group' => $group->parent_name, + '#group_object' => $group, + '#parent_group_object' => $form['#groups'][$group->parent_name], + // very important. Cannot be added on the form! + '#parents' => array($group->parent_name), + '#description' => $group->description, + ); + + $element['#attached']['library'][] = array('field_group', 'multipage'); +} + +/** + * Implements field_group_pre_render_. + * Format type: Vertical tabs wrapper. + * + * @param $element The field group form element. + * @param $group The Field group object prepared for pre_render. + * @param $form The root element or form. + */ +function field_group_pre_render_tabs(&$element, $group, &$form) { + + $element += array( + '#type' => 'vertical_tabs', + '#theme_wrappers' => array('vertical_tabs'), + '#prefix' => '
    ', + '#suffix' => '
    ', + ); + + // By default vertical_tabs don't have titles but you can override it in the theme. + if (!empty($group->label)) { + $element['#title'] = check_plain($group->label); + } + + $element[$group->group_name . '__active_tab'] = array( + '#type' => 'hidden', + '#default_value' => '', + '#attributes' => array('class' => array('vertical-tabs-active-tab')), + ); + + $element['#attached']['library'][] = array('system', 'drupal.collapse'); +} + +/** + * Implements field_group_pre_render_. + * Format type: Vertical tab. + * + * @param $element The field group form element. + * @param $group The Field group object prepared for pre_render. + * @param $form The root element or form. + */ +function field_group_pre_render_tab(&$element, $group, &$form) { + + $view_mode = isset($form['#view_mode']) ? $form['#view_mode'] : 'form'; + + // Could be it never runs through htab. + $form['#attached']['js'][] = array( + 'data' => array('field_group' => array('tabs' => $view_mode)), + 'type' => 'setting', + ); + + $add = array( + '#type' => 'fieldset', + '#id' => 'edit-' . $group->group_name, + '#title' => check_plain(t($group->label)), + '#collapsible' => $group->collapsible, + '#collapsed' => $group->collapsed, + '#attributes' => array('class' => explode(" ", $group->classes)), + '#description' => $group->description, + ); + + // Front-end and back-end on configuration will lead + // to vertical tabs nested in a separate vertical group. + if ($view_mode != 'form') { + $add['#group'] = empty($group->parent_name) ? 'additional_settings' : $group->parent_name; + $add['#parents'] = array($add['#group']); + $element += $add; + } + // Form fieldgroups which are nested into a vertical tab group + // are handled a little different. + elseif (!empty($group->parent_name)) { + $add['#group'] = $group->parent_name; + $element += $add; + } + // Forms "can" have additional settins. We'll try to locate it first, if not + // exists, field_group will create a parallel additional settings entry. + else { + // Create the fieldgroup element. + $add['#parents'] = array('additional_settings'); + $add['#group'] = 'additional_settings'; + $add['#weight'] = -30 + $group->weight; // hardcoded to bring our extra additional vtabs on top. + + // Check if the additional_settings exist for this type of form. + if (isset($form['additional_settings']['group']['#groups']['additional_settings'])) { + + // Merge fieldgroups with the core additional settings. + $form['additional_settings']['group']['#groups']['additional_settings'][$group->group_name] = $add; + $form['additional_settings']['group']['#groups'][$group->group_name] = array('#group_exists' => TRUE); + // Nest the fields inside the appropriate structure. + foreach (element_children($element) as $fieldname) { + $form['additional_settings']['group']['#groups']['additional_settings'][$group->group_name][$fieldname] = &$element[$fieldname]; + unset($element[$fieldname]); + } + } + // Assumption the wrapper is in the root. This could be done by field_group itself + // in previous loop of tabs in same wrapper or even some other contrib / custom module. + else { + if (!isset($form['additional_settings']['#type'])) { + $form['additional_settings'] = array( + '#type' => 'vertical_tabs', + '#weight' => $group->weight, + '#theme_wrappers' => array('vertical_tabs'), + '#prefix' => '
    ', + '#suffix' => '
    ', + ); + $form['#attached']['library'][] = array('system', 'drupal.collapse'); + } + $form['additional_settings'][$group->group_name] = $add; + // Nest the fields inside the appropriate structure. + foreach (element_children($element) as $fieldname) { + $form['additional_settings'][$group->group_name][$fieldname] = &$element[$fieldname]; + unset($element[$fieldname]); + } + } + } + +} + +/** + * Implements hook_field_group_build_pre_render_alter(). + * @param Array $elements by address. + */ +function field_group_field_group_build_pre_render_alter(& $element) { + + // Someone is doing a node view, in a node view. Reset content. + // TODO Check if this breaks something else. + if (isset($element['#node']->content) && count($element['#node']->content) > 0) { + $element['#node']->content = array(); + } + + $display = isset($element['#view_mode']); + $groups = array_keys($element['#groups']); + + // Dish the fieldgroups with no fields for non-forms. + if ($display) { + field_group_remove_empty_display_groups($element, $groups); + } + else { + // Fix the problem on forms with additional settings. + field_group_remove_empty_form_groups('form', $element, $groups, $element['#groups'], $element['#entity_type']); + } + + // Add the default field_group javascript and stylesheet. + $element['#attached']['js'][] = drupal_get_path('module', 'field_group') . '/field_group.js'; + $element['#attached']['css'][] = drupal_get_path('module', 'field_group') . '/field_group.css'; + + // Move additional settings to the last multipage pane if configured that way. + // Note that multipages MUST be in the root of the form. + foreach (element_children($element) as $name) { + if (isset($element[$name]['#type']) && $element[$name]['#type'] == 'multipage' && isset($element['additional_settings'])) { + $parent_group = $element['#groups'][$name]; + $move_additional = isset($parent_group->format_settings['instance_settings']['move_additional']) ? $parent_group->format_settings['instance_settings']['move_additional'] : 1; + $last_pane = NULL; + foreach (element_children($element[$name], TRUE) as $pane) { + $last_pane = $pane; + } + $element[$name][$last_pane]['additional_settings'] = $element['additional_settings']; + unset($element['additional_settings']); + } + } + +} + +/** + * Remove empty groups on forms. + * + * @param String $parent_name + * The name of the element. + * @param array $element + * The element to check the empty state. + * @param array $groups + * Array of group objects. + */ +function field_group_remove_empty_form_groups($name, & $element, $groups, &$form_groups, $entity) { + + $exceptions = array('user__account', 'comment__author'); + + $children = element_children($element); + + $hasChildren = FALSE; + if (count($children)) { + foreach ($children as $childname) { + + if (in_array($childname, $groups)) { + field_group_remove_empty_form_groups($childname, $element[$childname], $groups, $form_groups, $entity); + } + $exception = $entity . '__' . $childname; + $hasChildren = $hasChildren ? TRUE : (isset($element[$childname]['#type']) || isset($element[$childname]['#markup']) || in_array($exception, $exceptions)); + + } + } + + if (!$hasChildren) { + + // Remove empty elements from the #groups. + if (empty($element) && isset($form_groups[$name]) && !is_array($form_groups[$name])) { + foreach ($form_groups as $group_name => $group) { + if (isset($group->children)) { + $group_children = array_flip($group->children); + if (isset($group_children[$name])) { + unset($form_groups[$group_name]->children[$group_children[$name]]); + } + } + } + } + + $element['#access'] = FALSE; + + } + +} + +/** + * Remove empty groups on entity display. + * @param array $element + * The element to check the empty state. + * @param array $groups + * Array of group objects. + */ +function field_group_remove_empty_display_groups(& $element, $groups) { + + $empty_child = TRUE; + $empty_group = TRUE; + + // Loop through the children for current element. + foreach (element_children($element) as $name) { + + // Descend if the child is a group. + if (in_array($name, $groups)) { + $empty_child = field_group_remove_empty_display_groups($element[$name], $groups); + if (!$empty_child) { + $empty_group = FALSE; + } + } + // Child is a field, the element is not empty and access is set to true (or empty). + elseif (!empty($element[$name]) && (!isset($element[$name]['#access']) || $element[$name]['#access'])) { + $empty_group = FALSE; + } + + } + + // Reset an empty group. + if ($empty_group) { + $element = NULL; + } + + return $empty_group; + +} + +/** + * Implements hook_field_group_format_summary(). + */ +function field_group_field_group_format_summary($group) { + + $group_form = module_invoke_all('field_group_format_settings', $group); + + $output = ''; + if (isset($group->format_settings['formatter'])) { + $output .= '' . $group->format_type . ' ' . $group->format_settings['formatter'] . ''; + } + if (isset($group->format_settings['instance_settings'])) { + $last = end($group->format_settings['instance_settings']); + $output .= '
    '; + foreach ($group->format_settings['instance_settings'] as $key => $value) { + if (empty($value)) { + continue; + } + + $output .= '' . $key . ' '; + + if (isset($group_form['instance_settings'], $group_form['instance_settings'][$key]['#options'])) { + if (is_array($value)) { + $value = implode(array_filter($value), ', '); + } + else { + $value = $group_form['instance_settings'][$key]['#options'][$value]; + } + } + + // Shorten the string. + if (drupal_strlen($value) > 38) { + $value = truncate_utf8($value, 50, TRUE, TRUE); + } + // If still numeric, handle it as yes or no. + elseif (is_numeric($value)) { + $value = $value == '1' ? t('yes') : t('no'); + } + $output .= check_plain($value); + $output .= $last == $value ? ' ' : '
    '; + } + } + return $output; +} + +/** + * Implements hook_element_info(). + */ +function field_group_element_info() { + $types['horizontal_tabs'] = array( + '#theme_wrappers' => array('horizontal_tabs'), + '#default_tab' => '', + '#process' => array('form_process_horizontal_tabs'), + ); + $types['multipage'] = array( + '#theme_wrappers' => array('multipage'), + '#default_tab' => '', + '#process' => array('form_process_multipage'), + ); + $types['multipage_pane'] = array( + '#value' => NULL, + '#process' => array('form_process_fieldset', 'ajax_process_form'), + '#pre_render' => array('form_pre_render_fieldset'), + '#theme_wrappers' => array('multipage_pane'), + ); + return $types; +} + +/** + * Implements hook_library(). + */ +function field_group_library() { + + $path = drupal_get_path('module', 'field_group'); + // Horizontal Tabs. + $libraries['horizontal-tabs'] = array( + 'title' => 'Horizontal Tabs', + 'website' => 'http://drupal.org/node/323112', + 'version' => '1.0', + 'js' => array( + $path . '/horizontal-tabs/horizontal-tabs.js' => array(), + ), + 'css' => array( + $path . '/horizontal-tabs/horizontal-tabs.css' => array(), + ), + ); + // Multipage Tabs. + $libraries['multipage'] = array( + 'title' => 'Multipage', + 'website' => 'http://drupal.org/node/323112', + 'version' => '1.0', + 'js' => array( + $path . '/multipage/multipage.js' => array(), + ), + 'css' => array( + $path . '/multipage/multipage.css' => array(), + ), + ); + + return $libraries; +} + +/** + * Implements hook_field_extra_fields(). + */ +function field_group_field_extra_fields() { + $extra = array(); + + $extra['user']['user'] = array('form' => array()); + + // User picture field to integrate with user module. + if (variable_get('user_pictures', 0)) { + $extra['user']['user']['form']['picture'] = array( + 'label' => t('Picture'), + 'description' => t('User picture'), + 'weight' => 5, + ); + } + + // Field to itegrate with overlay module. + if (module_exists('overlay')) { + $extra['user']['user']['form']['overlay_control'] = array( + 'label' => t('Administrative overlay'), + 'description' => t('Administrative overlay'), + 'weight' => 5, + ); + } + + // Field to itegrate with contact module. + if (module_exists('contact')) { + $extra['user']['user']['form']['contact'] = array( + 'label' => t('Contact'), + 'description' => t('Contact user element'), + 'weight' => 5, + ); + } + + // Field to integrate with the locale module. + if (module_exists('locale')) { + $extra['user']['user']['form']['locale'] = array( + 'label' => t('Language settings'), + 'description' => t('Language settings for the user account.'), + 'weight' => 5, + ); + } + + // Field to integrate with the wysiwyg module on user settings. + if (module_exists('wysiwyg')) { + $extra['user']['user']['form']['wysiwyg'] = array( + 'label' => t('Wysiwyg status'), + 'description' => t('Text formats enabled for rich-text editing'), + 'weight' => 5, + ); + } + + return $extra; +} + +/** + * Implements hook_field_attach_rename_bundle(). + */ +function field_group_field_attach_rename_bundle($entity_type, $bundle_old, $bundle_new) { + db_query('UPDATE {field_group} SET bundle = :bundle WHERE bundle = :old_bundle AND entity_type = :entity_type', array( + ':bundle' => $bundle_new, + ':old_bundle' => $bundle_old, + ':entity_type' => $entity_type, + )); +} + +/** + * Creates a group formatted as horizontal tabs. + * This function will never be callable from within field_group rendering. Other + * modules using #type horizontal_tabs will have the benefit of this processor. + * + * @param $element + * An associative array containing the properties and children of the + * fieldset. + * @param $form_state + * The $form_state array for the form this horizontal tab widget belongs to. + * @return + * The processed element. + */ +function form_process_horizontal_tabs($element, &$form_state) { + // Inject a new fieldset as child, so that form_process_fieldset() processes + // this fieldset like any other fieldset. + $element['group'] = array( + '#type' => 'fieldset', + '#theme_wrappers' => array(), + '#parents' => $element['#parents'], + ); + + // The JavaScript stores the currently selected tab in this hidden + // field so that the active tab can be restored the next time the + // form is rendered, e.g. on preview pages or when form validation + // fails. + $name = implode('__', $element['#parents']); + if (isset($form_state['values'][$name . '__active_tab'])) { + $element['#default_tab'] = $form_state['values'][$name . '__active_tab']; + } + $element[$name . '__active_tab'] = array( + '#type' => 'hidden', + '#default_value' => $element['#default_tab'], + '#attributes' => array('class' => array('horizontal-tabs-active-tab')), + ); + + return $element; +} + +/** + * Returns HTML for an element's children fieldsets as horizontal tabs. + * + * @param $variables + * An associative array containing: + * - element: An associative array containing the properties and children of the + * fieldset. Properties used: #children. + * + * @ingroup themeable + */ +function theme_horizontal_tabs($variables) { + $element = $variables['element']; + // Add required JavaScript and Stylesheet. + $element['#attached']['library'][] = array('field_group', 'horizontal-tabs'); + + $output = '

    ' . (!empty($element['#title']) ? $element['#title'] : t('Horizontal Tabs')) . '

    '; + $output .= '
    ' . $element['#children'] . '
    '; + + return $output; +} + +/** + * Creates a group formatted as multipage. + * This function will never be callable from within field_group rendering. Other + * modules using #type multipage will have the benefit of this processor. + * + * @param $element + * An associative array containing the properties and children of the + * fieldset. + * @param $form_state + * The $form_state array for the form this multipage tab widget belongs to. + * @return + * The processed element. + */ +function form_process_multipage($element, &$form_state) { + // Inject a new fieldset as child, so that form_process_fieldset() processes + // this fieldset like any other fieldset. + $element['group'] = array( + '#type' => 'fieldset', + '#theme_wrappers' => array(), + '#parents' => $element['#parents'], + ); + + // The JavaScript stores the currently selected tab in this hidden + // field so that the active control can be restored the next time the + // form is rendered, e.g. on preview pages or when form validation + // fails. + $name = implode('__', $element['#parents']); + if (isset($form_state['values'][$name . '__active_control'])) { + $element['#default_tab'] = $form_state['values'][$name . '__active_control']; + } + $element[$name . '__active_control'] = array( + '#type' => 'hidden', + '#default_value' => $element['#default_control'], + '#attributes' => array('class' => array('multipage-active-control')), + ); + + return $element; +} + +/** + * Returns HTML for an element's children fieldsets as multipage. + * + * @param $variables + * An associative array containing: + * - element: An associative array containing the properties and children of the + * fieldset. Properties used: #children. + * + * @ingroup themeable + */ +function theme_multipage($variables) { + $element = $variables['element']; + // Add required JavaScript and Stylesheet. + $element['#attached']['library'][] = array('field_group', 'multipage'); + + $output = '

    ' . (!empty($element['#title']) ? $element['#title'] : t('Multipage')) . '

    '; + + $output .= '
    '; + $output .= $element['#children']; + $output .= '
    '; + + return $output; +} + +/** + * Returns HTML for multipage pane. + * + * @param $variables + * An associative array containing: + * - element: An associative array containing the properties and children of the + * fieldset. Properties used: #children. + * + * @ingroup themeable + */ +function theme_multipage_pane($variables) { + + $element = $variables['element']; + $group = $variables['element']['#group_object']; + $parent_group = $variables['element']['#parent_group_object']; + + static $multipages; + if (!isset($multipages[$group->parent_name])) { + $multipages = array($group->parent_name => 0); + } + $multipages[$parent_group->group_name]++; + + // Create a page title from the label. + $page_header = isset($parent_group->format_settings['instance_settings']['page_header']) ? $parent_group->format_settings['instance_settings']['page_header'] : 3; + switch ($page_header) { + case 1: + $title = $element['#title']; + break; + case 2: + $title = t('Step %count of %total', array('%count' => $multipages[$parent_group->group_name], '%total' => count($parent_group->children))); + break; + case 3: + $title = t('Step %count of %total !label', array('%count' => $multipages[$parent_group->group_name], '%total' => count($parent_group->children), '!label' => $element['#title'])); + break; + case 0: + default: + $title = ''; + break; + } + + element_set_attributes($element, array('id')); + _form_set_class($element, array('form-wrapper')); + + $output = ''; + if (!empty($element['#title'])) { + // Always wrap fieldset legends in a SPAN for CSS positioning. + $output .= '

    ' . $title . '

    '; + } + $output .= '
    '; + if (!empty($element['#description'])) { + $output .= '
    ' . $element['#description'] . '
    '; + } + $output .= $element['#children']; + if (isset($element['#value'])) { + $output .= $element['#value']; + } + + // Add a page counter if needed. + // counter array(0 => t('No'), 1 => t('Format 1 / 10'), 2 => t('The count number only')); + $page_counter_format = isset($parent_group->format_settings['instance_settings']['page_counter']) ? $parent_group->format_settings['instance_settings']['page_counter'] : 1; + $multipage_element['#page_counter_rendered'] = ''; + if ($page_counter_format == 1) { + $output .= t('%count / %total', array('%count' => $multipages[$parent_group->group_name], '%total' => count($parent_group->children))); + } + elseif ($page_counter_format == 2) { + $output .= t('%count', array('%count' => $multipages[$parent_group->group_name])); + } + + $output .= '
    '; + $output .= "
    \n"; + + return $output; + +} + +/** + * Get all groups. + * + * @param $entity_type + * The name of the entity. + * @param $bundle + * The name of the bundle. + * @param $view_mode + * The view mode. + * @param $reset. + * Whether to reset the cache or not. + */ +function field_group_info_groups($entity_type = NULL, $bundle = NULL, $view_mode = NULL, $reset = FALSE) { + static $groups = FALSE; + + if (!$groups || $reset) { + if (!$reset && $cached = cache_get('field_groups', 'cache_field')) { + $groups = $cached->data; + } + else { + $ctools_export_load_object = &drupal_static('ctools_export_load_object'); + $ctools_export_load_object_all = &drupal_static('ctools_export_load_object_all'); + unset($ctools_export_load_object['field_group']); + unset($ctools_export_load_object_all['field_group']); + $groups = field_group_read_groups(); + cache_set('field_groups', $groups, 'cache_field'); + } + } + + if (!isset($entity_type)) { + return $groups; + } + elseif (!isset($bundle) && isset($groups[$entity_type])) { + return $groups[$entity_type]; + } + elseif (!isset($view_mode) && isset($groups[$entity_type][$bundle])) { + return $groups[$entity_type][$bundle]; + } + elseif (isset($groups[$entity_type][$bundle][$view_mode])) { + return $groups[$entity_type][$bundle][$view_mode]; + } + return array(); +} + +/** + * Read all groups. + * + * @param array $conditions + * Parameters for the query, as elements of the $conditions array. + * 'entity_type' The name of the entity type. + * 'bundle' The name of the bundle. + * 'mode' The view mode. + * + * @param boolean $enabled + * Return enabled or disabled groups. + * + * @return array + * Array of groups. + */ +function field_group_read_groups($conditions = array(), $enabled = TRUE) { + + $groups = array(); + ctools_include('export'); + + if (empty($conditions)) { + $records = ctools_export_load_object('field_group'); + } + else { + $records = ctools_export_load_object('field_group', 'conditions', $conditions); + } + + foreach ($records as $group) { + + // Return only enabled groups. + if ($enabled && isset($group->disabled) && $group->disabled) { + continue; + } + // Return only disabled groups. + elseif (!$enabled && (!isset($group->disabled) || !$group->disabled)) { + continue; + } + + $groups[$group->entity_type][$group->bundle][$group->mode][$group->group_name] = field_group_unpack($group); + + } + drupal_alter('field_group_info', $groups); + return $groups; + +} + +/** + * Utility function to recreate identifiers. + */ +function _field_group_recreate_identifiers() { + + // Migrate the field groups so they have a unique identifier. + $result = db_select('field_group', 'fg') + ->fields('fg') + ->execute(); + $rows = array(); + foreach($result as $row) { + $row->identifier = $row->group_name . '|' . $row->entity_type . '|' . $row->bundle . '|' . $row->mode; + $row->data = unserialize($row->data); + $rows[] = $row; + } + foreach ($rows as $row) { + drupal_write_record('field_group', $row, array('id')); + } + +} + +/** + * Checks if a field_group exists in required context. + * + * @param String $group_name + * The name of the group. + * @param String $entity_type + * The name of the entity. + * @param String $bundle + * The bundle for the entity. + * @param String $mode + * The view mode context the group will be rendered. + */ +function field_group_exists($group_name, $entity_type, $bundle, $mode) { + $groups = field_group_read_groups(); + return !empty($groups[$entity_type][$bundle][$mode][$group_name]); +} + +/** + * Unpacks a database row in a FieldGroup object. + * @param $packed_group + * Database result object with stored group data. + * @return $group + * Field group object. + */ +function field_group_unpack($packed_group) { + if (empty($packed_group->data)) { + return $packed_group; + } + + // Extract unserialized data. + $group = clone $packed_group; + $data = $group->data; + unset($group->data); + $group->label = isset($data['label']) ? $data['label'] : ''; + $group->weight = isset($data['weight']) ? $data['weight'] : ''; + $group->children = isset($data['children']) ? $data['children'] : ''; + $group->format_type = !empty($data['format_type']) ? $data['format_type'] : 'fieldset'; + if (isset($data['format_settings'])) { + $group->format_settings = $data['format_settings']; + } + + return $group; +} + +/** + * Packs a FieldGroup object into a database row. + * @param $group + * FieldGroup object. + * @return $record + * Database row object, ready to be inserted/update + */ +function field_group_pack($group) { + + $record = clone $group; + $record->data = array( + 'label' => $record->label, + 'weight' => $record->weight, + 'children' => $record->children, + 'format_type' => !empty($record->format_type) ? $record->format_type : 'fieldset', + ); + if (isset($record->format_settings)) { + $record->data['format_settings'] = $record->format_settings; + } + return $record; +} + +/** + * Delete a field group. + * This function is also called by ctools export when calls are + * made through ctools_export_crud_delete(). + * + * @param $group + * A group definition. + * @param $ctools_crud + * Is this function called by the ctools crud delete. + */ +function field_group_group_export_delete($group, $ctools_crud = TRUE) { + + $query = db_delete('field_group'); + + if (isset($group->identifier)) { + $query->condition('identifier', $group->identifier); + if (!$ctools_crud) { + ctools_export_crud_disable('field_group', $group->identifier); + } + } + elseif (isset($group->id)) { + $query->condition('id', $group->id); + } + + if (!empty($group->mode)) { + $query->condition('mode', $group->mode); + } + + $query->execute(); + + cache_clear_all('field_groups', 'cache_field'); + module_invoke_all('field_group_delete_field_group', $group); + +} + +/** + * field_group_group_save(). + * + * Saves a group definition. + * This function is called by ctools export when calls are made + * through ctools_export_crud_save(). + * + * @param $group + * A group definition. + */ +function field_group_group_save(& $group) { + + // Prepare the record. + $object = field_group_pack($group); + + if (isset($object->export_type) && $object->export_type & EXPORT_IN_DATABASE) { + // Existing record. + $update = array('id'); + module_invoke_all('field_group_update_field_group', $object); + } + else { + // New record. + $update = array(); + $object->export_type = EXPORT_IN_DATABASE; + module_invoke_all('field_group_create_field_group', $object); + } + + return drupal_write_record('field_group', $object, $update); + +} + +/** + * Function to retrieve all format possibilities for the fieldgroups. + */ +function field_group_formatter_info($display_overview = FALSE) { + $cache = &drupal_static(__FUNCTION__, array()); + if (empty($cache)) { + if ($cached = cache_get('field_group_formatter_info', 'cache_field')) { + $formatters = $cached->data; + } + else { + $formatters = array(); + $formatters += module_invoke_all('field_group_formatter_info'); + $hidden_region = array( + 'label' => '<' . t('Hidden') . '>', + 'description' => '', + 'format_types' => array(), + 'instance_settings' => array(), + 'default_formatter' => '', + ); + //$formatters['form']['hidden'] = $hidden_region; + $formatters['display']['hidden'] = $hidden_region; + cache_set('field_group_formatter_info', $formatters, 'cache_field'); + } + $cache = $formatters; + } + return $cache; +} + +/** + * Attach groups to the (form) build. + * + * @param Array $element + * The part of the form. + * @param String $view_mode + * The mode for the build. + * @param Array $form_state + * The optional form state when in view_mode = form context. + */ +function field_group_attach_groups(&$element, $view_mode, $form_state = array()) { + + $entity_type = $element['#entity_type']; + $bundle = $element['#bundle']; + + $element['#groups'] = field_group_info_groups($entity_type, $bundle, $view_mode); + $element['#fieldgroups'] = $element['#groups']; + + // Create a lookup array. + $group_children = array(); + foreach ($element['#groups'] as $group_name => $group) { + foreach ($group->children as $child) { + $group_children[$child] = $group_name; + } + } + $element['#group_children'] = $group_children; + +} + +/** + * Pre render callback for rendering groups. + * @see field_group_field_attach_form + * @param $element Form that is being rendered. + */ +function field_group_form_pre_render(&$element) { + return field_group_build_entity_groups($element, 'form'); +} + +/** + * Preprocess/ Pre-render callback. + * + * @see field_group_form_pre_render() + * @see field_group_theme_registry_alter + * @see field_group_fields_nest() + * @param $vars preprocess vars or form element + * @param $type The type of object being rendered + * @return $element Array with re-arranged fields in forms. + */ +function field_group_build_entity_groups(&$vars, $type) { + + if ($type == 'form') { + $element = &$vars; + $nest_vars = NULL; + } + else { + $element = &$vars['elements']; + $nest_vars = &$vars; + } + + // No groups on the entity. + if (empty($element['#fieldgroups'])) { + return $element; + } + + // Nest the fields in the corresponding field groups. + field_group_fields_nest($element, $nest_vars); + + // Allow others to alter the pre_rendered build. + drupal_alter('field_group_build_pre_render', $element); + + // Return the element on forms. + if ($type == 'form') { + return $element; + } + + // No groups on the entity. Prerender removed empty field groups. + if (empty($element['#fieldgroups'])) { + return $element; + } + + // Put groups inside content if we are rendering an entity_view. + foreach ($element['#fieldgroups'] as $group) { + if (!empty($element[$group->group_name]) && $type != 'user_profile') { + $vars['content'][$group->group_name] = $element[$group->group_name]; + } + elseif (!empty($element[$group->group_name])) { + $vars['user_profile'][$group->group_name] = $element[$group->group_name]; + } + } + + // New css / js can be attached. + drupal_process_attached($element); +} + +/** + * Recursive function to nest fields in the field groups. + * + * This function will take out all the elements in the form and + * place them in the correct container element, a fieldgroup. + * The current group element in the loop is passed recursively so we can + * stash fields and groups in it while we go deeper in the array. + * @param Array $element + * The current element to analyse for grouping. + * @param Array $vars + * Rendering vars from the entity being viewed. + */ +function field_group_fields_nest(&$element, &$vars = NULL) { + + // Create all groups and keep a flat list of references to these groups. + $group_references = array(); + foreach ($element['#fieldgroups'] as $group_name => $group) { + // Construct own weight, as some fields (for example preprocess fields) don't have weight set. + $element[$group_name] = array(); + $group_references[$group_name] = &$element[$group_name]; + } + + // Loop through all form children looking for those that are supposed to be + // in groups, and insert placeholder element for the new group field in the + // correct location within the form structure. + $element_clone = array(); + foreach (element_children($element) as $child_name) { + $element_clone[$child_name] = $element[$child_name]; + // If this element is in a group, create the placeholder element. + if (isset($element['#group_children'][$child_name])) { + $element_clone[$element['#group_children'][$child_name]] = array(); + } + } + $element = array_merge($element_clone, $element); + + // Move all children to their parents. Use the flat list of references for + // direct access as we don't know where in the root_element hierarchy the + // parent currently is situated. + foreach ($element['#group_children'] as $child_name => $parent_name) { + + // Entity being viewed + if ($vars) { + // If not a group, check vars['content'] for empty field. + if (!isset($element['#fieldgroups'][$child_name]) && isset($vars['content'][$child_name])) { + $group_references[$parent_name][$child_name] = $vars['content'][$child_name]; + unset($vars['content'][$child_name]); + } + elseif (!isset($element['#fieldgroups'][$child_name]) && isset($vars['user_profile'][$child_name])) { + $group_references[$parent_name][$child_name] = $vars['user_profile'][$child_name]; + unset($vars['user_profile'][$child_name]); + } + // If this is a group, we have to use a reference to keep the reference + // list intact (but if it is a field we don't mind). + else { + $group_references[$parent_name][$child_name] = &$element[$child_name]; + unset($element[$child_name]); + } + } + // Form being viewed + else { + + // Block denied fields (#access) before they are put in groups. + // Fields (not groups) that don't have children (like field_permissions) are removed + // in field_group_field_group_build_pre_render_alter. + if (isset($element[$child_name]) && (!isset($element[$child_name]['#access']) || $element[$child_name]['#access'])) { + // If this is a group, we have to use a reference to keep the reference + // list intact (but if it is a field we don't mind). + $group_references[$parent_name][$child_name] = &$element[$child_name]; + $group_references[$parent_name]['#weight'] = $element['#fieldgroups'][$parent_name]->weight; + } + + // The child has been copied to its parent: remove it from the root element. + unset($element[$child_name]); + } + + } + + // Bring extra element wrappers to achieve a grouping of fields. + // This will mainly be prefix and suffix altering. + foreach ($element['#fieldgroups'] as $group_name => $group) { + field_group_pre_render($group_references[$group_name], $group, $element); + } + +} + +/** + * Function to pre render the field group element. + * + * @see field_group_fields_nest() + * + * @param $element Array of group element that needs to be created! + * @param $group Object with the group information. + * @param $form The form object itself. + */ +function field_group_pre_render(& $element, $group, & $form) { + + // Only run the pre_render function if the group has elements. + // $group->group_name + if ($element == array()) { + return; + } + + // Let modules define their wrapping element. + // Note that the group element has no properties, only elements. + foreach (module_implements('field_group_pre_render') as $module) { + $function = $module . '_field_group_pre_render'; + if (function_exists($function)) { + // The intention here is to have the opportunity to alter the + // elements, as defined in hook_field_group_formatter_info. + // Note, implement $element by reference! + $function($element, $group, $form); + } + } + + // Allow others to alter the pre_render. + drupal_alter('field_group_pre_render', $element, $group, $form); + +} + +/** + * Hides field groups including children in a render array. + * + * @param array $element + * A render array. Can be a form, node, user, ... + * @param array $group_names + * An array of field group names that should be hidden. + */ +function field_group_hide_field_groups(&$element, $group_names) { + foreach ($group_names as $group_name) { + if (isset($element['#fieldgroups'][$group_name]) && isset($element['#group_children'])) { + // Hide the field group. + $element['#fieldgroups'][$group_name]->format_type = 'hidden'; + // Hide the elements inside the field group. + $sub_groups = array(); + foreach (array_keys($element['#group_children'], $group_name) as $field_name) { + if (isset($element['#fieldgroups'][$field_name])) { + $sub_groups[] = $field_name; + } else { + $element[$field_name]['#access'] = FALSE; + } + } + field_group_hide_field_groups($element, $sub_groups); + } + } +} + +/** + * Calculates html classes for a group. + */ +function _field_group_get_html_classes(&$group) { + + if (isset($group->format_settings['formatter'])) { + $group->collapsible = in_array($group->format_settings['formatter'], array('collapsible', 'collapsed')); + // Open or closed horizontal or vertical tabs will be collapsible by default. + if ($group->format_type == 'tab' || $group->format_type == 'htab') { + $group->collapsible = TRUE; + } + $group->collapsed = in_array($group->format_settings['formatter'], array('collapsed', 'closed')); + } + + $classes = new stdClass(); + + // Prepare extra classes, required and optional ones. + $optional = array(str_replace('_', '-', $group->group_name)); + $required = array(); + if ($group->format_type == 'multipage') { + $required[] = 'field-group-' . $group->format_type; + } + else { + $optional[] = 'field-group-' . $group->format_type; + } + + if (isset($group->format_settings['formatter']) && $group->collapsible) { + $required[] = 'collapsible'; + if ($group->collapsed) { + $required[] = 'collapsed'; + } + } + + if (isset($group->format_settings['instance_settings'])) { + + // Add a required-fields class to trigger the js. + if (!empty($group->format_settings['instance_settings']['required_fields'])) { + $required[] = 'required-fields'; + } + + // Add user selected classes. + if (!empty($group->format_settings['instance_settings']['classes'])) { + $required[] = check_plain($group->format_settings['instance_settings']['classes']); + } + + // Extra required classes for div. + if ($group->format_type == 'div') { + if ($group->format_settings['formatter'] != 'open') { + + $speed = isset($group->format_settings['instance_settings']['speed']) ? $group->format_settings['instance_settings']['speed'] : 'none'; + $required[] = 'speed-' . $speed; + + $effect = isset($group->format_settings['instance_settings']['effect']) ? $group->format_settings['instance_settings']['effect'] : 'none'; + $required[] = 'effect-' . $effect; + } + } + + // Extra required classes for accordions. + elseif ($group->format_type == 'accordion') { + $required[] = 'field-group-' . $group->format_type . '-wrapper'; + $effect = isset($group->format_settings['instance_settings']['effect']) ? $group->format_settings['instance_settings']['effect'] : 'none'; + $required[] = 'effect-' . $effect; + } + + } + + $classes->required = $required; + $classes->optional = $optional; + + return $classes; +} + +/** + * Get the default formatter settings for a given formatter and a mode. + */ +function _field_group_get_default_formatter_settings($format_type, $mode) { + + $field_group_types = field_group_formatter_info(); + $display_mode = $mode == 'form' ? 'form' : 'display'; + $formatter = $field_group_types[$display_mode][$format_type]; + + return array( + 'formatter' => isset($formatter['default_formatter']) ? $formatter['default_formatter'] : '', + 'instance_settings' => $formatter['instance_settings'] + ); +} + diff --git a/sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs-rtl.css b/sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs-rtl.css new file mode 100644 index 0000000000..e579eea682 --- /dev/null +++ b/sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs-rtl.css @@ -0,0 +1,15 @@ +div.horizontal-tabs { + margin: 0 0 1em 0; +} + +.horizontal-tabs ul.horizontal-tabs-list { + border-right: 0; + border-left: 1px solid #dedede; +} + +/* Layout of each tab */ +.horizontal-tabs ul.horizontal-tabs-list li { + border-right: 0; + border-left: 1px solid #ccc; + float: right; +} diff --git a/sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs.css b/sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs.css new file mode 100644 index 0000000000..86a431f273 --- /dev/null +++ b/sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs.css @@ -0,0 +1,101 @@ +div.horizontal-tabs { + margin: 0 0 1em 0; /* LTR */ + padding: 0; + border: 1px solid #ccc; + position: relative; /* IE6/7 */ +} + +.horizontal-tabs ul.horizontal-tabs-list { + display: inline-block; + margin: 0; + border: 0; + padding: 0px; + position: relative; /* IE6 */ + list-style: none; + list-style-image: none; /* IE6 */ + background-color: #dedede; + border-right: 1px solid #dedede; /* LTR */ + width: 100%; + height: auto; + clear: both; +} + +.horizontal-tabs fieldset.horizontal-tabs-pane { + padding: 0 1em; + border: 0; +} + +fieldset.horizontal-tabs-pane > legend, +fieldset.vertical-tabs-pane fieldset.horizontal-tabs-pane > legend { + display: none; +} + +/* Layout of each tab */ +.horizontal-tabs ul.horizontal-tabs-list li { + background: #eee; + border-right: 1px solid #ccc; /* LTR */ + padding: 1px; + padding-top: 0; + margin: 0; + min-width: 5em; /* IE7 */ + float: left; /* LTR */ +} +.horizontal-tabs ul.horizontal-tabs-list li.selected { + background-color: #fff; + padding: 0 0 1px 0; +} +.horizontal-tabs ul.horizontal-tabs-list li a { + display: block; + text-decoration: none; + padding: 0.5em 0.6em; +} +.horizontal-tabs ul.horizontal-tabs-list li a:hover { + outline: none; + background-color: #ededdd; +} +.horizontal-tabs ul.horizontal-tabs-list li:hover, +.horizontal-tabs ul.horizontal-tabs-list li:focus { + background-color: #ddd; +} +.horizontal-tabs ul.horizontal-tabs-list :focus { + outline: none; +} +.horizontal-tabs ul.horizontal-tabs-list li a:focus strong, +.horizontal-tabs ul.horizontal-tabs-list li a:active strong, +.horizontal-tabs ul.horizontal-tabs-list li a:hover strong { + text-decoration: none; + outline: none; +} +.horizontal-tabs ul.horizontal-tabs-list li a, +.horizontal-tabs ul.horizontal-tabs-list li.selected a { + display: block; + text-decoration: none; + padding: 0.5em 0.6em 0.3em 0.6em; + position:relative; + top: 0px; +} +.horizontal-tabs ul.horizontal-tabs-list .selected strong { + color: #000; +} +.horizontal-tabs ul.horizontal-tabs-list .summary { + display: block; +} +.horizontal-tabs ul.horizontal-tabs ul.horizontal-tabs-list .summary { + line-height: normal; + margin-bottom: 0; +} + +/** + * tab content + */ +div.field-group-htabs-wrapper .field-group-format-wrapper { + clear: both; + padding: 0 0 0.6em; +} +/*hide*/ +.horizontal-tabs .horizontal-tab-hidden { + display: block; + position: absolute; + top: -100000px; + width: 100%; +} diff --git a/sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs.js b/sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs.js new file mode 100644 index 0000000000..977e1b6cd8 --- /dev/null +++ b/sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs.js @@ -0,0 +1,204 @@ +(function ($) { + +/** + * This script transforms a set of fieldsets into a stack of horizontal + * tabs. Another tab pane can be selected by clicking on the respective + * tab. + * + * Each tab may have a summary which can be updated by another + * script. For that to work, each fieldset has an associated + * 'horizontalTabCallback' (with jQuery.data() attached to the fieldset), + * which is called every time the user performs an update to a form + * element inside the tab pane. + */ +Drupal.behaviors.horizontalTabs = { + attach: function (context) { + $('.horizontal-tabs-panes', context).once('horizontal-tabs', function () { + var focusID = $(':hidden.horizontal-tabs-active-tab', this).val(); + var tab_focus; + + // Check if there are some fieldsets that can be converted to horizontal-tabs + var $fieldsets = $('> fieldset', this); + if ($fieldsets.length == 0) { + return; + } + + // Create the tab column. + var tab_list = $('
      '); + $(this).wrap('
      ').before(tab_list); + + // Transform each fieldset into a tab. + $fieldsets.each(function (i) { + var horizontal_tab = new Drupal.horizontalTab({ + title: $('> legend', this).text(), + fieldset: $(this) + }); + horizontal_tab.item.addClass('horizontal-tab-button-' + i); + tab_list.append(horizontal_tab.item); + $(this) + .removeClass('collapsible collapsed') + .addClass('horizontal-tabs-pane') + .data('horizontalTab', horizontal_tab); + if (this.id == focusID) { + tab_focus = $(this); + } + }); + + $('> li:first', tab_list).addClass('first'); + $('> li:last', tab_list).addClass('last'); + + if (!tab_focus) { + // If the current URL has a fragment and one of the tabs contains an + // element that matches the URL fragment, activate that tab. + var hash = window.location.hash.replace(/[=%;,\/]/g, ""); + if (hash !== '#' && $(hash, this).length) { + tab_focus = $(window.location.hash, this).closest('.horizontal-tabs-pane'); + } + else { + tab_focus = $('> .horizontal-tabs-pane:first', this); + } + } + if (tab_focus.length) { + tab_focus.data('horizontalTab').focus(); + } + }); + } +}; + +/** + * The horizontal tab object represents a single tab within a tab group. + * + * @param settings + * An object with the following keys: + * - title: The name of the tab. + * - fieldset: The jQuery object of the fieldset that is the tab pane. + */ +Drupal.horizontalTab = function (settings) { + var self = this; + $.extend(this, settings, Drupal.theme('horizontalTab', settings)); + + this.link.click(function () { + self.focus(); + return false; + }); + + // Keyboard events added: + // Pressing the Enter key will open the tab pane. + this.link.keydown(function(event) { + if (event.keyCode == 13) { + self.focus(); + // Set focus on the first input field of the visible fieldset/tab pane. + $("fieldset.horizontal-tabs-pane :input:visible:enabled:first").focus(); + return false; + } + }); + + // Only bind update summary on forms. + if (this.fieldset.drupalGetSummary) { + this.fieldset.bind('summaryUpdated', function() { + self.updateSummary(); + }).trigger('summaryUpdated'); + } + +}; + +Drupal.horizontalTab.prototype = { + /** + * Displays the tab's content pane. + */ + focus: function () { + this.fieldset + .removeClass('horizontal-tab-hidden') + .siblings('fieldset.horizontal-tabs-pane') + .each(function () { + var tab = $(this).data('horizontalTab'); + tab.fieldset.addClass('horizontal-tab-hidden'); + tab.item.removeClass('selected'); + }) + .end() + .siblings(':hidden.horizontal-tabs-active-tab') + .val(this.fieldset.attr('id')); + this.item.addClass('selected'); + // Mark the active tab for screen readers. + $('#active-horizontal-tab').remove(); + this.link.append('' + Drupal.t('(active tab)') + ''); + }, + + /** + * Updates the tab's summary. + */ + updateSummary: function () { + this.summary.html(this.fieldset.drupalGetSummary()); + }, + + /** + * Shows a horizontal tab pane. + */ + tabShow: function () { + // Display the tab. + this.item.removeClass('horizontal-tab-hidden'); + // Update .first marker for items. We need recurse from parent to retain the + // actual DOM element order as jQuery implements sortOrder, but not as public + // method. + this.item.parent().children('.horizontal-tab-button').removeClass('first') + .filter(':visible:first').addClass('first'); + // Display the fieldset. + this.fieldset.removeClass('horizontal-tab-hidden'); + // Focus this tab. + this.focus(); + return this; + }, + + /** + * Hides a horizontal tab pane. + */ + tabHide: function () { + // Hide this tab. + this.item.addClass('horizontal-tab-hidden'); + // Update .first marker for items. We need recurse from parent to retain the + // actual DOM element order as jQuery implements sortOrder, but not as public + // method. + this.item.parent().children('.horizontal-tab-button').removeClass('first') + .filter(':visible:first').addClass('first'); + // Hide the fieldset. + this.fieldset.addClass('horizontal-tab-hidden'); + // Focus the first visible tab (if there is one). + var $firstTab = this.fieldset.siblings('.horizontal-tabs-pane:not(.horizontal-tab-hidden):first'); + if ($firstTab.length) { + $firstTab.data('horizontalTab').focus(); + } + return this; + } +}; + +/** + * Theme function for a horizontal tab. + * + * @param settings + * An object with the following keys: + * - title: The name of the tab. + * @return + * This function has to return an object with at least these keys: + * - item: The root tab jQuery element + * - link: The anchor tag that acts as the clickable area of the tab + * (jQuery version) + * - summary: The jQuery element that contains the tab summary + */ +Drupal.theme.prototype.horizontalTab = function (settings) { + var tab = {}; + var idAttr = settings.fieldset.attr('id'); + + tab.item = $('
    • ') + .append(tab.link = $('') + .append(tab.title = $('').text(settings.title)) + ); + + // No need to add summary on frontend. + if (settings.fieldset.drupalGetSummary) { + tab.link.append(tab.summary = $('')) + } + + return tab; +}; + +})(jQuery); diff --git a/sites/all/modules/custom/field_group/multipage/multipage-rtl.css b/sites/all/modules/custom/field_group/multipage/multipage-rtl.css new file mode 100644 index 0000000000..9c791678c0 --- /dev/null +++ b/sites/all/modules/custom/field_group/multipage/multipage-rtl.css @@ -0,0 +1,13 @@ +.multipage-controls-list #edit-actions { + float: right !important; +} + +.multipage-button { + float: right !important; +} + +.multipage-counter{ + float: left !important; + margin-right: 0 !important; + margin-left: 5px !important; +} diff --git a/sites/all/modules/custom/field_group/multipage/multipage.css b/sites/all/modules/custom/field_group/multipage/multipage.css new file mode 100644 index 0000000000..3e44a358de --- /dev/null +++ b/sites/all/modules/custom/field_group/multipage/multipage.css @@ -0,0 +1,128 @@ +.multipage-controls-list #edit-actions { + float: left; /* LTR */ +} + +.multipage-button { + margin-bottom: 1em; + margin-top: 0; + float: left; /* LTR */ + line-height: 36px; +} + +.multipage-button a { + padding-top: 10px; +} + +.multipage-counter { + float: right; /* LTR */ + margin-right: 5px; /* LTR */ + height: 0; + position: relative; + top: 1.8em; + line-height: 30px; + font: 12px arial,sans-serif; + font-weight: bold; + color:#666; +} + +a.multipage-link-previous { + font: 12px arial,sans-serif; + font-weight: bold; + color:#666; + -webkit-transition: color 218ms; + -moz-transition: color 218ms; + -o-transition: color 218ms; + transition: color 218ms; +} + +a.multipage-link-previous:hover { + text-decoration:none; + color: #333; +} + +.multipage-controls-list input.form-submit { + background:none; + border: none; + border-radius: 2px; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border: 1px solid rgba(0, 0, 0, 0.1); + font: 12px arial,sans-serif; + font-weight: bold; + color: #666; + text-shadow: 0 1px 0 white; + padding: 7px 12px; + background: -webkit-gradient(linear,0% 40%,0% 70%,from(whiteSmoke),to(#F1F1F1)); + -o-transition: border-top-color 0.218s,border-right-color 0.218s,border-bottom-color 0.218s,border-left-color .218s; + -webkit-transition: border-color .218s; +} + +.multipage-controls-list input.form-submit:hover { + color:#333; + box-shadow: 0 1px 1px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.1); + border-color: #939393; +} + +.multipage-controls-list input.form-submit:active { + background: -webkit-gradient(linear,0% 40%,0% 70%,from(#F1F1F1),to(whiteSmoke)); +} + +.multipage-controls-list input#edit-submit { + background: #4D90FE; /* for non-css3 browsers */ + background-image: #4D90FE; /* for non-css3 browsers */ + background-image: -o-linear-gradient(top,#4d90fe,#4787ed); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#4D90FE', endColorstr='#4787ED'); /* for IE */ + background: -webkit-gradient(linear, center top, center bottom, from(#4D90FE), to(#4787ED)); /* for webkit browsers */ + background: -moz-linear-gradient(center top, #4D90FE, #4787ED); /* for firefox 3.6+ */ + color: white; + text-shadow: none; + text-transform: uppercase; + min-width: 79px; +} + +.multipage-controls-list input#edit-submit:hover { + background-image: -moz-linear-gradient(top,#4d90fe,#357ae8); + background-image: -o-linear-gradient(top,#4d90fe,#357ae8); + background-image: -webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#357ae8)); + color: white; + text-shadow: none; + box-shadow: 0 1px 1px rgba(0,0,0,0.2); + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.2); +} + +.multipage-controls-list input#edit-submit:active { + background: #4D90FE; + border-color: #2F5BB7; +} + +.multipage-controls-list input#edit-delete { + background-image: -moz-linear-gradient(top,#dd4b39,#d14836); + background-image: -o-linear-gradient(top,#dd4b39,#d14836); + background-image: -webkit-gradient(linear,left top,left bottom,from(#dd4b39),to(#d14836)); + text-shadow: 0 1px rgba(0, 0, 0, 0.1); + border: 1px solid transparent; + color: white; + text-shadow: none; + +} + +.multipage-controls-list input#edit-delete:hover { + background-image: -moz-linear-gradient(top,#dd4b39,#c53727); + background-image: -o-linear-gradient(top,#dd4b39,#c53727); + background-image: -webkit-gradient(linear,left top,left bottom,from(#dd4b39),to(#c53727)); + border: 1px solid #B0281A!important; + border-bottom: 1px solid #AF301F!important; + box-shadow: 0 1px 1px rgba(0,0,0,0.2); + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.2); + color: white; +} + +.multipage-controls-list input#edit-delete:active { + background-image: -moz-linear-gradient(top,#dd4b39,#b0281a); + background-image: -o-linear-gradient(top,#dd4b39,#b0281a); + background-image: -webkit-gradient(linear,left top,left bottom,from(#dd4b39),to(#b0281a)); + border: 1px solid #992A1b!important; + box-shadow: 0 1px 2px rgba(0,0,0,0.3); + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.3); +} \ No newline at end of file diff --git a/sites/all/modules/custom/field_group/multipage/multipage.js b/sites/all/modules/custom/field_group/multipage/multipage.js new file mode 100644 index 0000000000..5314031ecd --- /dev/null +++ b/sites/all/modules/custom/field_group/multipage/multipage.js @@ -0,0 +1,269 @@ +(function ($) { + +/** + * This script transforms a set of wrappers into a stack of multipage pages. + * Another pane can be entered by clicking next/previous. + * + */ +Drupal.behaviors.MultiPage = { + attach: function (context) { + $('.multipage-panes', context).once('multipage', function () { + + var focusID = $(':hidden.multipage-active-control', this).val(); + var paneWithFocus; + + // Check if there are some wrappers that can be converted to multipages. + var $panes = $('> div.field-group-multipage', this); + var $form = $panes.parents('form'); + if ($panes.length == 0) { + return; + } + + // Create the next/previous controls. + var $controls; + + // Transform each div.multipage-pane into a multipage with controls. + $panes.each(function () { + + $controls = $('
      '); + $(this).append($controls); + + // Check if the submit button needs to move to the latest pane. + if (Drupal.settings.field_group.multipage_move_submit && $('.form-actions').length) { + $('.form-actions', $form).remove().appendTo($($controls, $panes.last())); + } + + var multipageControl = new Drupal.multipageControl({ + title: $('> .multipage-pane-title', this).text(), + wrapper: $(this), + has_next: $(this).next().length, + has_previous: $(this).prev().length + }); + + $controls.append(multipageControl.item); + $(this) + .addClass('multipage-pane') + .data('multipageControl', multipageControl); + + if (this.id == focusID) { + paneWithFocus = $(this); + } + + }); + + if (paneWithFocus === undefined) { + // If the current URL has a fragment and one of the tabs contains an + // element that matches the URL fragment, activate that tab. + var hash = window.location.hash.replace(/[=%;,\/]/g, ""); + if (hash !== '#' && $(hash, this).length) { + paneWithFocus = $(window.location.hash, this).closest('.multipage-pane'); + } + else { + paneWithFocus = $('multipage-open', this).length ? $('multipage-open', this) : $('> .multipage-pane:first', this); + } + } + if (paneWithFocus !== undefined) { + paneWithFocus.data('multipageControl').focus(); + } + }); + } +}; + +/** + * The multipagePane object represents a single div as a page. + * + * @param settings + * An object with the following keys: + * - title: The name of the tab. + * - wrapper: The jQuery object of the
      that is the tab pane. + */ +Drupal.multipageControl = function (settings) { + var self = this; + var controls = Drupal.theme('multipage', settings); + $.extend(self, settings, controls); + + this.nextLink.click(function () { + self.nextPage(); + return false; + }); + + this.previousLink.click(function () { + self.previousPage(); + return false; + }); + +/* + // Keyboard events added: + // Pressing the Enter key will open the tab pane. + this.nextLink.keydown(function(event) { + if (event.keyCode == 13) { + self.focus(); + // Set focus on the first input field of the visible wrapper/tab pane. + $("div.multipage-pane :input:visible:enabled:first").focus(); + return false; + } + }); + + // Pressing the Enter key lets you leave the tab again. + this.wrapper.keydown(function(event) { + // Enter key should not trigger inside + +

      +

      Used in inline instance

      +

      + Click the below editable region to display floating toolbar, then click UI Color Picker button. +

      +
      +

      This is some sample text. You are using CKEditor.

      +
      + +
      +

      + +

      + + + + diff --git a/sites/all/modules/contrib/ckeditor/includes/uicolor/yui/assets/hue_bg.png b/sites/all/modules/contrib/ckeditor/includes/uicolor/yui/assets/hue_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..d9bcdeb5c49910d5c32c9ebbb134200bf138b7b4 GIT binary patch literal 1120 zcmWkuZA?>V6h6*nD|EKy_G>T#efd;-TcIEZRG=3KG$^eF2Q{FAMV4*KY}f{qh`QSV zerz}DmTbC_Y|fEr#w0P0=t#CW_qsTZ+oCcxM!nmzgkYx0y)F9Qv+IxZJb6w|&dGC5 zaz;Z<^@~z7QUPF5prJObvq_J$hJ`xXo5wcl^n8zhtsmg}%|C)|K3%8x)wT6C_ipWb zw=>oa{%CJkw=1x%v!^@U-5DL&ajAP1z;mggH7#{nz-rJ$faL=7qA45La$rShQh@N! zu%sTCvXE1t{K=eCf%*<$g}~m_lTbYf%#DuhOcn)}oyL+UY!^T)N0SIlg&q}p70^Bg z#v`A*ftBD@6%H#L*N*0!pas#aR&fdVH33r!@M?%V4H}RB^=Q5i+Cy}fVbYD}B4EjH z?P{0x>Acg883%Oa|AzJ?B#N%FVmw`fKNY;g=C3&BXB;Z@Kam~dpydSE;!)KoPs+}MGZ#35TL&dgu1t8ZJCOzunMR5)=3wB`6<04>Wd>fEGNt=fUO7S z2UdorB;0d<%}W2%DB8|}rj&7Bd@G600GiIAl}DfA(T~fGjEtPSpMM-+!RdW!t0gq&tGw>1(Ck!bL+QCwfHM zFSfg6C%J1(_sXrL%2?h=Gs#tB`jY5~^n-B4=5yiEV7#4=o|0Az*Nu@}Ih_Oz$pHOG zC`&0{EO(L#V`PcEmKepS-spt1Gd{>irzEF%o|nyJB4uhF{YR*@P1evnVor$^%6<|| znF`WIVUCMc(=ZuIiR8<#kjLU}uWTnbQf7F06KORJtfO9XHgzgQe;2kI(+lL6NRM$K zObK})t}2X5(vY~u9{XN8DGugG$E0mSB^Mi(>V!GlYlD8E#--~|}G|8JkdYdiH90fD-v+HZu-d;bSJ8}W_+ literal 0 HcmV?d00001 diff --git a/sites/all/modules/contrib/ckeditor/includes/uicolor/yui/assets/hue_thumb.png b/sites/all/modules/contrib/ckeditor/includes/uicolor/yui/assets/hue_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..14d5db4862403a43231ac4766301552afa79e8ae GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeOS+@4BLl;=8&~`zjDUQ}64!{5 z;QX|b^2DN42FH~Aq*MjZ+{E`+k2Qi@7Ao zFBm9x{S+_IKn6ok7srr_TS*Cr74CR#a^B hhMOMV_Dn1i4C!Z>gq7E&G66L+c)I$ztaD0e0ssu{I5q$P literal 0 HcmV?d00001 diff --git a/sites/all/modules/contrib/ckeditor/includes/uicolor/yui/assets/picker_mask.png b/sites/all/modules/contrib/ckeditor/includes/uicolor/yui/assets/picker_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d91932b376af76ccfac030c12eb9fec7ee4c63 GIT binary patch literal 12174 zcmV;9FLBU`P)_6|b&%Dfjpyv}j54LBIXFZqhE-_t{2r7|?ya1%Cs>h{sswI&ir4|Fh z$jAgxe*E!Arq9Rc<1hC3+xpMn|Ni&&sREphKX2dqw+!rCg4fvHA{v>|sAOH9VUq1Wx=i{&V_yqRn;}h7QkI%<-7fW_4(VkZ}j!+ z*W3A4Q2+7AAN1S*{zm`&=RfJ^|M;1H`st@nDf0RFlp-IAiA&;HZ{w3b`^>wEDMb|H zcWo7$YKZ}V2ee&$PJPY#JEPa?S+a1^5~E@1g&W3xW#A&D$3t?w{=G7DSsA*r_4-%Y z`s|z_E&o@}NSYWQ_Q@Xg&3d|Ou zW&0J1V(Gn21@Ok$tl7ApUjkd|>Gf{~b_Mkc=*rd-*uVe&`%Pc}`s=SZK(DV?u$Q+4 zw*GP77{rl7z$bi8N=|4%dgnzQK{K@X9=v7^ctch^o|!a57b!8M)R5bd+^DZB*f)2h zXi(pP{pA7dU4m@DUcq}~?BDNws-MON*}ARvB9}^yYkUl^^T(x&iy;x&pXVP)oMH zG4>x1DYCNm`n+yi_f;$KX~32?&=bL&3KR!`?Ad)hXq&kbL*FF~DPi6Lgmfs6L(D+0 zND0vbo2}RNnI*FeDS>21aabAxyE61@^}W7lp{p^l|7WGkjF52;svSZcA8su7jAYiZ3LweO3*sn5! zSD>!n=?3mEUmKmhK6d%BxhCszn^Za-*h3D(8SY6kiNgaaXQX90(eY3K$c_zH0Bie! zBHJ2UyB-p(7Bef5YbLIag?2iM6)3&}lecGR>8-$C0bN;o1$K2uG_Y5@@20Q6ep|mt z*;#x0tH7=ryq?1awzczFEUg2jL1spUI~;shFFVJMWT3#Y2!p-uSjIu7V%f`fjs-Ap z^O>)I7X@&(g2WB97X@e*&x;21dj4(4t<5d)+aC4x2CzHGU+%zOzu(5F>;Cn4UV*tj zZ$V@8yjpp$fL&R8ZO0o+m)B>04HkLJJo2A^{CRu7ZvXb}emug@Fk>GfXvJPL@_-^q z01_^oksZ=)$m(QUUX;~R(;!CYEsBZDLoIZEb1~!wBOR^fg#bCy%lortW+6TF_FY@w z&6w46@B~bZ!ZnoFU!@$z>E}`k{^oUMnFB{O&3px81f^O z51QS()3a{J?CEH!+pUC&YHNa5>Eykw2XY`qJYY8f?~*Z#9Wbu!EB)#UYzgYy^IbES z3h4T`vT|kq^`Z574Oq_r_AIDJ0c{44L7>OU1PLbsz#Hu@vK`wj512a*;t0UHoeBa? zk6L-sMY|p{s1$`s7O*7~*BX(c{b~v9`g)Thw{{({Us@kq|5b2nV9S~lBm$l;MJBR- zSsN}46ctdtgi9+$xa(0`+j0;b5@@3(htB#Thl4>@u&CE;xE$KTV_CN$*;#_wksf7p zH>9;!8MRBwYyjM)2y#PKP>c6P+kZ7HSsw`0kDr;x8GBY&%c%cEP&e$K0;+W$c6Ga3 z-f4l|(a#9Tgjm>eL6n{@$mNioz>^;m>!~orEy~tWx3~ zOIPqpfCGkR(H?r%tE(Zjv@CMcj9p#<%|dfa05{ue+I>B?x*{YBs9Lr@sIdpzjet7C z(j3YXHqYbA7G>{gy$rQE(#f8iq4wzn3QC-$G_@y1j3806bjQvT*z2!Z!CPeq$}$Qt zKiFGHksaJG`+EfLE_ox5tq+;W^uV3*u}1^OjK^IhVL9wdjz0DhDyAkTJeq`!B#Pcg zhP)_7_7G+P^?uQ&deV!Q8k_%Iz3u(DO+Od8Pl9$mZo9rWlUfCjjYrK(<6~b$ZT0S1 zS3O;Ux%tu+)a&a-3?R6yAif2U*Sn8h->)oR%UIXfo6X1d@8#Re{rTQ*_p!In<@$MS zi0rd9cH9YgPHQJ6i50k+-%kgas7Aw(CeRhp9mnRTLOFML>EN7Z(g?zUW!g!Hg9HcE;V1EAh^ef|OhyG~Aswq6=s?q4)8Rd863y;SWj zSY7I8OIMc~2-fXFMwH5^wNOOZdAr8m>OGbX*q5qptG2GXdan<;-u3UQn|Fkfk?i04PcV*!JYNDjCSSa=A`)xBsyFVf!o zcEj3Z$<&e+vLHr0ak9iY3#aPde)nR zA-C1eupV=%_1K$crutm{Xra05zTK<7Zd!fooV!f@ zjN&Brbhe|X^)|DOW?&^TSXpb-J8|rPncYZ6g>MN)cr9$&910<@S`i zkQl{aQy;-2thth!_d8NT%MNOLaRo zCuFG|O0cz;&U9i--BvN-HZ`yK2WHwUjV^zvpBugv*x@U8x z({-K67HqPx8;i~;!e{od_khhIU{6k}7aYNF7KD;K_3|HlOG;X68|WyQts~R_Ey{93p$q#vLD)BBQJf!DrZ2nhQiG*TS=m|!i=sNPks~sAWNwo((+QeE z#&&JLOxr|mJq#Wvwe^U!h^q1|mxGNOYb!WJG9t^^ z7DMZKI!Lj#PN|b)?X9WqMFoppm0nG~SG!I#I0zVZ`DqtCYId&sD^t_0?Sst)+mcAN zUvx@c>}O&7-Gj-m-xe7Z%Keh9Wq_!IMZnTSjO}I%4>EJ4jWgw@5p#Q)LYiP`6fiQd z^$Ve27n-UX6~u~jBf+k#TtGMMS9dA;lIYZHi)4l30jO7QF&T(%QhouWT^ zynfVSX2S`ZnZPko&ykt#z}4MKa~F_k(OQ~~0%y}dDP!_F!}v#hlq(gM^>trIkoxdHpiniE-2)#zvMuOXYZ z@JTauPGdhoUrzx&2nsFzYz-P9uOq1X=#HU5Icmr1+m7`=TI)3+i)$@z)KfDUFrb|e zMgs?s-Dk1u&Z5gh$7`mpZ50a_t)I09Z_Y2;>j48bSd6fih|8uJJL^RwJv?I9MOj1S zdLU4vQqm5rNLt8_pn<5I7Sa+!IUbUAt>rFsNh$%|eUVd;2@Sq8wo0jAKq5vm`3kt3 z=3N~Rsk>_m9Wl3@TSRJXnS>Dm>Ye59TAeks*WX>pFw%@&JCaPu7;eaM#?H163Yxqm ziO1X{Y;1uY1)XquF~r!S{e#6HD+K5cU}@)0U+V%VRlwA-9$@K^y(J@8pB$}LpzaKz z#@63&zauQRhE`R26msV$Z^{OZT{Yqz~|MKp5@rfxL0c0%O-=ufe>>^uw{kcP3JqOoTg z+bjHcEIkgV+Xd`yFtrAF15DLXpaVjTJA-wc7@{Rz2CcE1z_Vdg<2a#%A@fTHRary$ zx^qPy{_{TkOX+1&?B6kR^}s#nLpfB<^+cJ+!)2=@cHV%N&a^i{jchr@!b(pU4J^^d zO17|ADFAxZ`eGm^1_e)qtT@Ery0EFfmaLv(=|+cN8%Rh$tyRdxLGaieqrB*@ zL#S!P*wWof-%8)Qb4e_g_L$k4z#SDq0S(+`G&PH>PTX|r+7{K~Ti3eID{{XsPtw=} z0bxo@dr1_)!UUvA#=f(B>9TP$k}MsN5fF`Yl1{Sda#ZD%T;wD_* zrR(uRL+ilL+JnOY9wm9-+$udbbEn?0(LOj>$r_hai=7gPtL*qQi|ZPXQR$29gp zkeHn=VZ^I8vx(Xr3C^*P2@HVj>StOa=0bwJ{*liQX>WaLOu?0&v$0Jsj zZGj8Z3^mjKv_3!Zt()Tzw)7pqx@$jMW2a1WYelRebzTA;ZOaH?FNSYztt>#^x{9&}1iB)CrBSv~c-4}XJO4VNu`kuHu8xMR`H+r@WMy3&f@(oD zV-IQUBfyT>ItFjOyTqV&0>y3{a4&QaiC7u|8A%bSB@^2+!6JcGyO0!VK!4kJZHk>1 znNk-3?ybKKaCMsmp|tx{qUMoqf7#pY9YA&lk%ZZwrPU|5J9327sG0NZzDc%Dr%025 zqCIwz@d$Rqv$k9j0=G{sMPM7F99180rOMfIOX{5lSZj~hBGDq+p)@>{DBd>D(nB2@ zz1GjEM9YEo=n!M0*-1Ij*Dw%_*w@JncJ0>&i~KC^eP`rF2U)|W{@J)VA!A!|1Qar* z*jjIw0i|Z_ef0$;GbCeMEUibRZ?mK78J{kaZ6ym=Hg~jl6AQ>=HEZjAwYpG94|(1j zW6N|q-Bz=DfN-cDdxU)xSwru&TsGqlj#fXTK+$96&LKfghSJ8J%i;Ld466Ic7^EwK zuHB7AWfjo^qGj`m7f~6w&sVL%jGPcDOR5_pYDq3q8i?$oc2L&4#06v<775i>3x}i}tq++VK{F93+C@%G zValBBMTkrmmI0*)W{`~}Bamck?hjo=AIT2H;zr=Ov-i5ctc-b|dO^D>y);olB4TMB zC|XiP28;VR$Cqm(8I)rp>kC5c^snH_B6o0E;XOGDq4mJAaYlw*nfA;o{!0X+V9n+`Q=20nuSDlk0 zdgAwJ=+@w{od%FmxoH4qYj6Ry<_6@487vZ>V-HCY_L4Ek;gHVAHhozyMcV2<0vW}W z{7{x50y!yd{Q&F2azst1q4hSTulr-+Tp`h%A*?MwAJ_+zEJ?ObOB4spn(@)R)X>2& zf=kQ!usm=ppk%N<3>mc_`qq7y4os*fgh3{fE%yV-ALNecQ9724spY3iR-n%;mLmd6 zE873Ja6=*qeEPg1Cyb7X=BtLlGg9Z#Gl5!Z*j^VXfzjv;q(@hx2?D~5Jdw7U_P2|X zXdzX>N67uq%&cTd!^|?#(m5pyv#$2jQbRr?MwiJL*{)@0>KMC94OKA3K#t72B8eGQ zho%5VV9w47VpMu*-A$wNL!A%GiU-iw7fW|M05Jh}mf1p5fbI&HM3Gac!nzy#;7ldzS7-AeZ2l+khNtzzZzBJg{dp zb~=mbyw7Y0_M9bK!fawT={_?Rk|qSC2C5A~wb;**BF6L!W`$oc0wS#Y$YvKE zd17j5OQIOlnsscaN0*DLL$AtD>*~b_1WCz@B5FbwppQe4OMr?AbDH21$qb#P1Oo$h z`Jrt*5Px-YLqh0lp~&%y-E2wy05*1A5Qnk%VHvfhCyH zC=hpY#SvhGb9KOVK)%&Y^RnGaB(p=7)*V4_v-Gn7YcXoCFRC_(RZ!S6b8Cfqwbxbv zIj6A?%91d9Xt1|+Of}XTw3;!B44<0% znWwtB|2&P4+P1NSp^2?K9QLkzeJ!ClT9SHNtqA8<27~p{mMh}O4{Na_#LV9CBRDWv z0#Jih47q~#9>@&J3tPNlQHDPawRfPgO~%%`y0s}74Z!7ym6a4BPiw1+ygEt-x+0)F zb#IHD5sR_Ifd)sVNL0&_vGT}Xc+?%csAYn*+Q^s#o56yZ9IR5MSuC&vo8!1&Bi#ab zqlFVvgjB+%|65pFi}1B2Pjo6A6*5T>N(ltKX>(B|m0NHnM|lj~Jr~#sRwic^FJ1-T`NnK`Sm1G_Iw#v}#|WQK-WlSrb8+AYnEC!}nrHzOofG;mq1M+5E# zF0gem)7`OLLSQ3s1BPWaokAx|WSl1)5O_Z6ba(|#QZlH~GNb{nI{^wDZ8k5vpDICX zWG18F@zH)Vr5-va5qopI{6+-mtjzF^x9ma0=x8jY25H&De=xXL-ukp$GA4EJ?nEl- zQ?{Ut(U?OkHjw~DK_d!wv%y_+E+_VTv|H%tHi!TN=lLhqd)(n^$wIw5XbX}6n z`wVcC!1m9<6ftn4w>5(+5MMNCf!6LiiE4Whw^Y6wQ<}v(+fAE42iREv2fEtS=E3Z# z5uh!P+mj_oiZsVqH6tECPhe|8cAs!~*a#jwEAVkGN;B?DgH?WY8pQ;Rv=0J-zk#a?d`U!O06|i&_pC0~% zs`H#tCai{-F-YNecP#Zgvjn-m4!WXHOEei+>hHL2yn0o89qjDD)2se_dhnP@n|qag zq7K&uG4;zpyE+``=ZwZifMAQ|GqM9DW;}m7&*Dql$%OnMBsqMELWGhrj(%q3(o|;F zm3fVvSr`q@)mGl(=b*|dsgt6oOp6bR~u`cPXan(Y?Gyewo|O!dC`^>(LOeEI&2wo%g8#w=7X*X=dws6C9Z=RM)P&R>XeWcW*}*S9|dBO z#E4vw6hn)0PQ$k*rB~U=N_Ki%gBgJqonHde7}bdbG3X-bM%8BGh!5%`glVkCChN}~g3BW$M}kFK2>ONsVtFvIPh8-j|! zP`X_o->~@7R1I1~_EP)g01;!(lkT_dq{zVuDO3BhOrBuw4xoebW0}oV0S%e1I!G@ zS(<=GAhvWhk}V>&+|*Y)b=L0-?9AW-BY4bAxj;rqE3At~Ky}WW0=SHa2iUo(K{h79 zoT?DC0FAa;NfwZ-@hm`!>^_u$QRi@h3rq?mNydOZGE=G{H&Tn{xCKvROl{R@LvI^( zB**_YItF)xh#kMXDH{M%hCO)$0MF=nR&EvuhTU2bMl1Q!wJQMKqreW=pfU8fHKC=;%8?Wy zW7a2QbPj5(!NIjz>u$oivp7#D1d0NoTZEjF9$;1MK(IMCCG zx#4mA491Rzkwx{-qhlU*CEw$JHpIZDM;^H+`-KBjpLq;>6vPe?U29I&lkB=&7dC0T zkL-zu_B9&G9&wIzIR`R>lTzb(!J|=U9R-`&X&KV;#bWceXp7Ay_biXxa!>Y)!Gw|^ zRzPXZRpL4+;23w5y4e9ilxJLLJ(vJZZMK~=hmp~M@T|Zw#n?zU2c03D=h^@)oM4jt zsnM*VVdlh?mfl95dUI}PN`okEK2kL0v3MjOvN9u+K?D|Fd;ZM@K@!6VE-4WpdRjVS z`e9&)&ImiJgbn!Hp)7H-n8gVs%>dH{es0F7IG{|}g8|!fpqD#of!gVkQq&1hX3_GZ z_3_C-5c<`Ii&6%I$Pr){sa-I;}6YGm*O`nF^QD6H`R=aiQ0s=u4 zTza2}Kqg;X`>lWu)lt7?a43FWI*YMWGq5^yjaX|lW+X^@MFS{LxLd9dEvFY2K>Mgp?OA;_w>u?86cFL0 zl^u|i`zRqxP>`3><7&bkb1pweD>LXk79h=KJ3K9)2o~)&cO%)=1g}F zezt&oXXmE4tL+eryM}%D`&caP0o?<5GC3n&x1^uY*oC}O)4&Ny&lDB0x4RvToOh&) zr$x!r&{le0YierKcvjGr`MhwQN2@c|(vL0gU66c2WH&Pd(};GS(b>6m9(kOx2U$5v z@|0jSjm6$YCkMz`nb*JIW&u`KPe-hr@wz*AM^1+0bSRGYKYlwV;Do^T4dXIFHa6J1 z)5oZS&(qlha)lDCehAo6iE0Y?R>0YuTY#ACrKQ=>*;xRyl>~C^y1g2X{k0@ro$W{? zwvM-s$pDz_i65J#OcG%Bz!;8vLC%YD?so%r2z*0VV~N1-I_u_z2H-X|cn0LCMglSM zk_53Mlgw>~!{KUf$8{>kWIt>;QEu|Y(%7QI@3#!A20N#nd+-LJ&->U1fju>|lm~u` zMVtiAa2v1VIPJr2mhANV{@gxO%YTY*rpumms_z`G6*Nz z@vOfDix06fV0>$B$utX(vNk(w-AuBv%gzxK2aX60xFRL6_ufZ}bZ!6>Cu>P8z_~%E zH<=FdoV||Vfm~{K063R%M}Vz=BS&@=XYTJbm>oS$PO`<-#+Jr*?hJ)Bt`PObM)kSZ8H|g?k<=*@;I^`DUND+wP){p6|2G-|G5*}WiV*^B=KId- z;G@Tf8k-jmEBQtPM31$T_1&(cVlBrp3fd&t$w|wntNq&V-IN5&It_E4@Imd|Kl?!< zfuUTc3zAHObCRvo`Z^&~rld%Ai4Mrxfz*f=J2kV1&iOMk#tIN2lVtAiQla>BXSp(9++bG|?7bP^y}FKW_JBeC3hEjw3ZfkQ=ooGj?Ibj8S#saVB*- z(a3wWYzYE&Mi#gdr2U=EcHfQNhXCmfHXuAzgA3lI-REUKqmoum9Ai$?F!CHEmD0~z zqF9XWl^>uxWn#1olpsOM+>$6(x}0oQrzmhdPl^o4kuac)((nmM5;-1}WlGssZT7om z&`$%t(;*_@Mk^abP-k3?V4{ACM!F=WN2VN=j44B&BSj(rM^iD32B1+VaO%L_i|*Y4 zY*t?&sLqff4*OA7!ZgPku1D6@utwCJ{WyPAO_H%kf$k=8h&W*C==PQYs~c!Wj2#U! zFn*)-F|TRRDm+6Dq3p;2+49V@!K-(?{xPPPoF1to z$x0H=yC}mJp~L3**vIz?8MOj$Qro8;i>#|LTTB(5kG`YF^a7^fmu>C|j@F))CsXdp z2*c0Hi~~%Z-PZrVI2D6HRvrQW5r+0;$An*<4jfMfb~Hxr6qu(0VIU{6XB%fdUt+7GKM$ZQ7d z+*G-q^3AhAkG6UGeKe43wk=Z~@{qi^8g4~a7kh3;^x0=fpYx@Ed05BU<|1?Y@y9GNH9cw6|*ydMtC~bu#Ur zW^%V9`U#e%tuqzfu>F?#-9|w@YT*rZk~0~*#cRn2ktxkSAW3Ed%?xnei<~%b>YUvy zQB0iuZb_Yd#{V~D+^D7_lR5mbj7|2~MWfx0!AN^YIy$^?2|Zp0fzVvE@~A_$*cnVA zMw#g)ypCq2vdiFXhx6E0)LqSNUxhI zVW-W=i}3ha-8{;~vjY#ZReptXbC!%U_7TS<<#h*49XcddFz8&+VQpzLHIvtFG}ukc ztmOZTJf~!aiH*rPc@pR;9nD7=JCGdVDq<116>`I1b5xT@tC-Dp5?2cO>`Zi$Oc?Cc z(=Nq~W}cBGvz~W!9>~};tnKM?az?r*E|O;jW_03+7UVQwICongNlHz~C-}PvCLZYw zR_qcowKa`$hP?y!^;8FkQe+UQgE~86O1M%&)(VWI%!rlfG4Y`wbreh^=ZP%0M8brg z;dU5oO-Jt}hg^{e*c8v~l#?WMUt?_~z?@+B^hF06nQ2~sj#!{Wam0bn8hwA4g(GPp zre)|l%aSOn8U*|Kj6IRW895IgvD0rHxqx+pbT_1PaWqhU>-R^eY8dPASqqQe_aWKy zbYM@gdG;KmUU;{SlVCmuzzWeg767aWXd_QWP{P+&9)h)*5Dlk z!wjP}|BcZa_lfvoG{C0G|7UodwcV@AJHfqqjue^oy9ceoY@nI}^Q?wH6;v~TLW`Kr zXy79tKO?#FmJgG$lhVOuZE*2ZjE(?$gwY2R3`cIyVJA+KNNfEK$gcDqZHkf0VMdOe zm>Iv^1hyK8I~oYO9l-Us@yB|M4gsFj<5}h%0zYagcd)ZD(q&^V&IE^>F~$_5al^!k4%1 zJn&9?;+~W-ewCt^;T`NeM?jwi+M(lXmEnk#nsGM*Cu2AujAFmD9g=3^cRpazg{)2P zn8^slCiA+?NR(!+NuZ1{S-MkuZF%6gv9{}!d*XLgzfH?4N!?6zAmK9F0seNx-8fs1 zXDviP*JZL(3;|+<;j`Pb3|s~}q7~H5vaL6j*f~=voG(jG12zp0Lhxjb*#NQD5r-zc z8>nBrJig*G4d%vKNVex5w1@9RM?K}U<_D?ky?<0-r@?(R`7p`ot`?H2s#>^rZ4^=FlN|z7;uANn-1>IN}N2Cr3Zk`BP^T*Bp+h=GXQ?n zq4@~xH~`i&0DT(!&VYJ`-9wFiKyS}TnG}0}0I747b%*zVRH^Xn>CK)NJe~mTrv#t_ zcabwXLIlFM0P-}L$AMa&#=dX$_}d`x3eTZ?RLY=?o8@$7*!k>srvp9PW)jSU?U;_9 z^Qe?K+IdESZGby%u+M1qd$#NeEItDAvw?m9$ftmLQX9{>7*l{gdPf)rHlFHin8at8 zf231nfja`;X`qjQ{TPtT2$-J+=#L;%GCuZM%zFe-GoTq|EqXG0J-rjFA!)YD@D%G+(%jVtWGl1QAU{d2%u&<<*Zbo86f4@e+txxnf@rS&tmU0L4FkI zvtVzu0H1hQIRnIJ0C_feJe#F6_kc5iO=q3M`0__VKFhGvjLYYO_Y5XJ1jJ{7c^Yep zHW&J!52nA`qtNH$?S3o4*oSLk&tTSPNrW?X?<5;9naK^$U}fVxx$Ap|$u2f@bg3gWkxHK%Fp4+8RMf$}i0&g=*$e&(C#qxaD0ZvpHl zv+I6`Mm!BUmxWOUFGBaUp^pXA9e5eL-vl3cNcl?@AS6vgTG5D@?CMq zTi=Sx2mN33JO2+a9~-FUJu&myl|RHap8Fr(82g7GfB2M~pO3%PF!NeM|wNi2*CXBkqA8W@y2&T>3yVv%g*IK)!uk)}MmImzx& dTmu6$gLVMJ@>Lg{{{wY0c)I$ztaD0e0szdFI 0 ) ? B.dump( G[ I ], L - 1 ) : O ); + } else { + N.push( G[ I ] ); + } + N.push( M ); + } + if ( N.length > 1 ) { + N.pop(); + } + N.push( "]" ); + } else { + N.push( "{" ); + for ( I in G ) { + if ( B.hasOwnProperty( G, I ) ) { + N.push( I + J ); + if ( B.isObject( G[ I ] ) ) { + N.push( ( L > 0 ) ? B.dump( G[ I ], L - 1 ) : O ); + } else { + N.push( G[ I ] ); + } + N.push( M ); + } + } + if ( N.length > 1 ) { + N.pop(); + } + N.push( "}" ); + } + return N.join( "" ); + }, + substitute: function( V, H, O ) { + var L, K, J, R, S, U, + Q = [], + I, + M = "dump", + P = " ", + G = "{", + T = "}", + N; + for ( ;; ) { + L = V.lastIndexOf( G ); + if ( L < 0 ) { + break; + } + K = V.indexOf( T, L ); + if ( L + 1 >= K ) { + break; + } + I = V.substring( L + 1, K ); + R = I; + U = null; + J = R.indexOf( P ); + if ( J > -1 ) { + U = R.substring( J + 1 ); + R = R.substring( 0, J ); + } + S = H[ R ]; + if ( O ) { + S = O( R, S, U ); + } + if ( B.isObject( S ) ) { + if ( B.isArray( S ) ) { + S = B.dump( S, parseInt( U, 10 ) ); + } else { + U = U || ""; + N = U.indexOf( M ); + if ( N > -1 ) { + U = U.substring( 4 ); + } + if ( S.toString === A.toString || N > -1 ) { + S = B.dump( S, parseInt( U, 10 ) ); + } else { + S = S.toString(); + } + } + } else { + if ( !B.isString( S ) && !B.isNumber( S ) ) { + S = "~-" + Q.length + "-~"; + Q[ Q.length ] = I; + } + } + V = V.substring( 0, L ) + S + V.substring( K + 1 ); + } + for ( L = Q.length - 1; L >= 0; L = L - 1 ) { + V = V.replace( new RegExp( "~-" + L + "-~" ), "{" + Q[ L ] + "}", "g" ); + } + return V; + }, + trim: function( G ) { + try { + return G.replace( /^\s+|\s+$/g, "" ); + } catch ( H ) { + return G; + } + }, + merge: function() { + var J = {}, + H = arguments, + G = H.length, + I; + for ( I = 0; I < G; I = I + 1 ) { + B.augmentObject( J, H[ I ], true ); + } + return J; + }, + later: function( N, H, O, J, K ) { + N = N || 0; H = H || {}; + var I = O, + M = J, + L, G; + if ( B.isString( O ) ) { + I = H[ O ]; + } + if ( !I ) { + throw new TypeError( "method undefined" ); + } + if ( !B.isArray( M ) ) { + M = [ J ]; + } + L = function() { + I.apply( H, M ); + }; + G = ( K ) ? setInterval( L, N ) : setTimeout( L, N ); + return { + interval: K, cancel: function() { + if ( this.interval ) { + clearInterval( G ); + } else { + clearTimeout( G ); + } + } }; + }, + isValue: function( G ) { + return ( B.isObject( G ) || B.isString( G ) || B.isNumber( G ) || B.isBoolean( G ) ); + } }; B.hasOwnProperty = ( A.hasOwnProperty ) ? + function( G, H ) { + return G && G.hasOwnProperty( H ); + } : function( G, H ) { + return !B.isUndefined( G[ H ] ) && G.constructor.prototype[ H ] !== G[ H ]; + }; + D.augmentObject( B, D, true ); + YAHOO.util.Lang = B; + B.augment = B.augmentProto; + YAHOO.augment = B.augmentProto; + YAHOO.extend = B.extend; +})(); +YAHOO.register( "yahoo", YAHOO, { version: "2.7.0", build: "1796" } ); +(function() { + YAHOO.env._id_counter = YAHOO.env._id_counter || 0; + var E = YAHOO.util, + L = YAHOO.lang, + m = YAHOO.env.ua, + A = YAHOO.lang.trim, + d = {}, + h = {}, + N = /^t(?:able|d|h)$/i, + X = /color$/i, + K = window.document, + W = K.documentElement, + e = "ownerDocument", + n = "defaultView", + v = "documentElement", + t = "compatMode", + b = "offsetLeft", + P = "offsetTop", + u = "offsetParent", + Z = "parentNode", + l = "nodeType", + C = "tagName", + O = "scrollLeft", + i = "scrollTop", + Q = "getBoundingClientRect", + w = "getComputedStyle", + a = "currentStyle", + M = "CSS1Compat", + c = "BackCompat", + g = "class", + F = "className", + J = "", + B = " ", + s = "(?:^|\\s)", + k = "(?= |$)", + U = "g", + p = "position", + f = "fixed", + V = "relative", + j = "left", + o = "top", + r = "medium", + q = "borderLeftWidth", + R = "borderTopWidth", + D = m.opera, + I = m.webkit, + H = m.gecko, + T = m.ie; + E.Dom = { + CUSTOM_ATTRIBUTES: ( !W.hasAttribute ) ? { "for": "htmlFor", "class": F } : { "htmlFor": "for", "className": g }, + get: function( y ) { + var AA, Y, z, x, G; if ( y ) { + if ( y[ l ] || y.item ) { + return y; + } + if ( typeof y === "string" ) { + AA = y; + y = K.getElementById( y ); + if ( y && y.id === AA ) { + return y; + } else { + if ( y && K.all ) { + y = null; + Y = K.all[ AA ]; + for ( x = 0, G = Y.length; x < G; ++x ) { + if ( Y[ x ].id === AA ) { + return Y[ x ]; + } + } + } + } + return y; + } + if ( y.DOM_EVENTS ) { + y = y.get( "element" ); + } + if ( "length" in y ) { + z = []; + for ( x = 0, G = y.length; x < G; ++x ) { + z[ z.length ] = E.Dom.get( y[ x ] ); + } + return z; + } + return y; + } + return null; + }, + getComputedStyle: function( G, Y ) { + if ( window[ w ] ) { + return G[ e ][ n ][ w ]( G, null )[ Y ]; + } else { + if ( G[ a ] ) { + return E.Dom.IE_ComputedStyle.get( G, Y ); + } + } + }, + getStyle: function( G, Y ) { + return E.Dom.batch( G, E.Dom._getStyle, Y ); + }, + _getStyle: function() { + if ( window[ w ] ) { + return function( G, y ) { + y = ( y === "float" ) ? y = "cssFloat" : E.Dom._toCamel( y ); + var x = G.style[ y ], + Y; + if ( !x ) { + Y = G[ e ][ n ][ w ]( G, null ); + if ( Y ) { + x = Y[ y ]; + } + } + return x; + }; + } else { + if ( W[ a ] ) { + return function( G, y ) { + var x; + switch ( y ) { + case "opacity": + x = 100; + try { + x = G.filters[ "DXImageTransform.Microsoft.Alpha" ].opacity; + } catch ( z ) { + try { + x = G.filters( "alpha" ).opacity; + } catch ( Y ) {} + } + return x / 100;case "float": + y = "styleFloat";default: + y = E.Dom._toCamel( y ); + x = G[ a ] ? G[ a ][ y ] : null; + return ( G.style[ y ] || x ); + } + }; + } + } + }(), setStyle: function( G, Y, x ) { + E.Dom.batch( G, E.Dom._setStyle, { prop: Y, val: x } ); + }, + _setStyle: function() { + if ( T ) { + return function( Y, G ) { + var x = E.Dom._toCamel( G.prop ), + y = G.val; + if ( Y ) { + switch ( x ) { + case "opacity": + if ( L.isString( Y.style.filter ) ) { + Y.style.filter = "alpha(opacity=" + y * 100 + ")"; + if ( !Y[ a ] || !Y[ a ].hasLayout ) { + Y.style.zoom = 1; + } + } + break;case "float": + x = "styleFloat";default: + Y.style[ x ] = y; + } + } else {} + }; + } else { + return function( Y, G ) { + var x = E.Dom._toCamel( G.prop ), + y = G.val; + if ( Y ) { + if ( x == "float" ) { + x = "cssFloat"; + } + Y.style[ x ] = y; + } else {} + }; + } + }(), getXY: function( G ) { + return E.Dom.batch( G, E.Dom._getXY ); + }, + _canPosition: function( G ) { + return ( E.Dom._getStyle( G, "display" ) !== "none" && E.Dom._inDoc( G ) ); + }, + _getXY: function() { + if ( K[ v ][ Q ] ) { + return function( y ) { + var z, Y, AA, AF, AE, AD, AC, G, x, + AB = Math.floor, + AG = false; + if ( E.Dom._canPosition( y ) ) { + AA = y[ Q ](); + AF = y[ e ]; + z = E.Dom.getDocumentScrollLeft( AF ); + Y = E.Dom.getDocumentScrollTop( AF ); + AG = [ AB( AA[ j ] ), AB( AA[ o ] ) ]; + if ( T && m.ie < 8 ) { + AE = 2; + AD = 2; + AC = AF[ t ]; + G = S( AF[ v ], q ); + x = S( AF[ v ], R ); + if ( m.ie === 6 ) { + if ( AC !== c ) { + AE = 0; + AD = 0; + } + } + if ( ( AC == c ) ) { + if ( G !== r ) { + AE = parseInt( G, 10 ); + } + if ( x !== r ) { + AD = parseInt( x, 10 ); + } + } + AG[ 0 ] -= AE; + AG[ 1 ] -= AD; + } + if ( ( Y || z ) ) { + AG[ 0 ] += z; + AG[ 1 ] += Y; + } + AG[ 0 ] = AB( AG[ 0 ] ); + AG[ 1 ] = AB( AG[ 1 ] ); + } else {} + return AG; + }; + } else { + return function( y ) { + var x, Y, AA, AB, AC, + z = false, + G = y; + if ( E.Dom._canPosition( y ) ) { + z = [ y[ b ], y[ P ] ]; + x = E.Dom.getDocumentScrollLeft( y[ e ] ); + Y = E.Dom.getDocumentScrollTop( y[ e ] ); + AC = ( ( H || m.webkit > 519 ) ? true : false ); + while ( ( G = G[ u ] ) ) { + z[ 0 ] += G[ b ]; + z[ 1 ] += G[ P ]; + if ( AC ) { + z = E.Dom._calcBorders( G, z ); + } + } + if ( E.Dom._getStyle( y, p ) !== f ) { + G = y; + while ( ( G = G[ Z ] ) && G[ C ] ) { + AA = G[ i ]; + AB = G[ O ]; + if ( H && ( E.Dom._getStyle( G, "overflow" ) !== "visible" ) ) { + z = E.Dom._calcBorders( G, z ); + } + if ( AA || AB ) { + z[ 0 ] -= AB; + z[ 1 ] -= AA; + } + } + z[ 0 ] += x; + z[ 1 ] += Y; + } else { + if ( D ) { + z[ 0 ] -= x; + z[ 1 ] -= Y; + } else { + if ( I || H ) { + z[ 0 ] += x; + z[ 1 ] += Y; + } + } + } + z[ 0 ] = Math.floor( z[ 0 ] ); + z[ 1 ] = Math.floor( z[ 1 ] ); + } else {} + return z; + }; + } + }(), getX: function( G ) { + var Y = function( x ) { + return E.Dom.getXY( x )[ 0 ]; + }; + return E.Dom.batch( G, Y, E.Dom, true ); + }, + getY: function( G ) { + var Y = function( x ) { + return E.Dom.getXY( x )[ 1 ]; + }; + return E.Dom.batch( G, Y, E.Dom, true ); + }, + setXY: function( G, x, Y ) { + E.Dom.batch( G, E.Dom._setXY, { pos: x, noRetry: Y } ); + }, + _setXY: function( G, z ) { + var AA = E.Dom._getStyle( G, p ), + y = E.Dom.setStyle, + AD = z.pos, + Y = z.noRetry, + AB = [ parseInt( E.Dom.getComputedStyle( G, j ), 10 ), parseInt( E.Dom.getComputedStyle( G, o ), 10 ) ], + AC, x; + if ( AA == "static" ) { + AA = V; + y( G, p, AA ); + } + AC = E.Dom._getXY( G ); + if ( !AD || AC === false ) { + return false; + } + if ( isNaN( AB[ 0 ] ) ) { + AB[ 0 ] = ( AA == V ) ? 0 : G[ b ]; + } + if ( isNaN( AB[ 1 ] ) ) { + AB[ 1 ] = ( AA == V ) ? 0 : G[ P ]; + } + if ( AD[ 0 ] !== null ) { + y( G, j, AD[ 0 ] - AC[ 0 ] + AB[ 0 ] + "px" ); + } + if ( AD[ 1 ] !== null ) { + y( G, o, AD[ 1 ] - AC[ 1 ] + AB[ 1 ] + "px" ); + } + if ( !Y ) { + x = E.Dom._getXY( G ); + if ( ( AD[ 0 ] !== null && x[ 0 ] != AD[ 0 ] ) || ( AD[ 1 ] !== null && x[ 1 ] != AD[ 1 ] ) ) { + E.Dom._setXY( G, { pos: AD, noRetry: true } ); + } + } + }, + setX: function( Y, G ) { + E.Dom.setXY( Y, [ G, null ] ); + }, + setY: function( G, Y ) { + E.Dom.setXY( G, [ null, Y ] ); + }, + getRegion: function( G ) { + var Y = function( x ) { + var y = false; + if ( E.Dom._canPosition( x ) ) { + y = E.Region.getRegion( x ); + } else {} + return y; + }; + return E.Dom.batch( G, Y, E.Dom, true ); + }, + getClientWidth: function() { + return E.Dom.getViewportWidth(); + }, + getClientHeight: function() { + return E.Dom.getViewportHeight(); + }, + getElementsByClassName: function( AB, AF, AC, AE, x, AD ) { + AB = L.trim( AB ); + AF = AF || "*"; + AC = ( AC ) ? E.Dom.get( AC ) : null || K; + if ( !AC ) { + return []; + } + var Y = [], + G = AC.getElementsByTagName( AF ), + z = E.Dom.hasClass; + for ( var y = 0, AA = G.length; y < AA; ++y ) { + if ( z( G[ y ], AB ) ) { + Y[ Y.length ] = G[ y ]; + } + } + if ( AE ) { + E.Dom.batch( Y, AE, x, AD ); + } + return Y; + }, + hasClass: function( Y, G ) { + return E.Dom.batch( Y, E.Dom._hasClass, G ); + }, + _hasClass: function( x, Y ) { + var G = false, + y; if ( x && Y ) { + y = E.Dom.getAttribute( x, F ) || J; + if ( Y.exec ) { + G = Y.test( y ); + } else { + G = Y && ( B + y + B ).indexOf( B + Y + B ) > -1; + } + } else {} + return G; + }, + addClass: function( Y, G ) { + return E.Dom.batch( Y, E.Dom._addClass, G ); + }, + _addClass: function( x, Y ) { + var G = false, + y; if ( x && Y ) { + y = E.Dom.getAttribute( x, F ) || J; + if ( !E.Dom._hasClass( x, Y ) ) { + E.Dom.setAttribute( x, F, A( y + B + Y ) ); + G = true; + } + } else {} + return G; + }, + removeClass: function( Y, G ) { + return E.Dom.batch( Y, E.Dom._removeClass, G ); + }, + _removeClass: function( y, x ) { + var Y = false, + AA, z, G; if ( y && x ) { + AA = E.Dom.getAttribute( y, F ) || J; + E.Dom.setAttribute( y, F, AA.replace( E.Dom._getClassRegex( x ), J ) ); + z = E.Dom.getAttribute( y, F ); + if ( AA !== z ) { + E.Dom.setAttribute( y, F, A( z ) ); + Y = true; + if ( E.Dom.getAttribute( y, F ) === "" ) { + G = ( y.hasAttribute && y.hasAttribute( g ) ) ? g : F; + y.removeAttribute( G ); + } + } + } else {} + return Y; + }, + replaceClass: function( x, Y, G ) { + return E.Dom.batch( x, E.Dom._replaceClass, { from: Y, to: G } ); + }, + _replaceClass: function( y, x ) { + var Y, AB, AA, + G = false, + z; if ( y && x ) { + AB = x.from; + AA = x.to; + if ( !AA ) { + G = false; + } else { + if ( !AB ) { + G = E.Dom._addClass( y, x.to ); + } else { + if ( AB !== AA ) { + z = E.Dom.getAttribute( y, F ) || J; + Y = ( B + z.replace( E.Dom._getClassRegex( AB ), B + AA ) ).split( E.Dom._getClassRegex( AA ) ); + Y.splice( 1, 0, B + AA ); + E.Dom.setAttribute( y, F, A( Y.join( J ) ) ); + G = true; + } + } + } + } else {} + return G; + }, + generateId: function( G, x ) { + x = x || "yui-gen"; var Y = function( y ) { + if ( y && y.id ) { + return y.id; + } + var z = x + YAHOO.env._id_counter++; + if ( y ) { + if ( y[ e ].getElementById( z ) ) { + return E.Dom.generateId( y, z + x ); + } + y.id = z; + } + return z; + }; + return E.Dom.batch( G, Y, E.Dom, true ) || Y.apply( E.Dom, arguments ); + }, + isAncestor: function( Y, x ) { + Y = E.Dom.get( Y ); + x = E.Dom.get( x ); + var G = false; + if ( ( Y && x ) && ( Y[ l ] && x[ l ] ) ) { + if ( Y.contains && Y !== x ) { + G = Y.contains( x ); + } else { + if ( Y.compareDocumentPosition ) { + G = !!( Y.compareDocumentPosition( x ) & 16 ); + } + } + } else {} + return G; + }, + inDocument: function( G, Y ) { + return E.Dom._inDoc( E.Dom.get( G ), Y ); + }, + _inDoc: function( Y, x ) { + var G = false; if ( Y && Y[ C ] ) { + x = x || Y[ e ]; + G = E.Dom.isAncestor( x[ v ], Y ); + } else {} + return G; + }, + getElementsBy: function( Y, AF, AB, AD, y, AC, AE ) { + AF = AF || "*"; AB = ( AB ) ? E.Dom.get( AB ) : null || K; + if ( !AB ) { + return []; + } + var x = [], + G = AB.getElementsByTagName( AF ); + for ( var z = 0, AA = G.length; z < AA; ++z ) { + if ( Y( G[ z ] ) ) { + if ( AE ) { + x = G[ z ]; + break; + } else { + x[ x.length ] = G[ z ]; + } + } + } + if ( AD ) { + E.Dom.batch( x, AD, y, AC ); + } + return x; + }, + getElementBy: function( x, G, Y ) { + return E.Dom.getElementsBy( x, G, Y, null, null, null, true ); + }, + batch: function( x, AB, AA, z ) { + var y = [], + Y = ( z ) ? AA : window; + x = ( x && ( x[ C ] || x.item ) ) ? x : E.Dom.get( x ); + if ( x && AB ) { + if ( x[ C ] || x.length === undefined ) { + return AB.call( Y, x, AA ); + } + for ( var G = 0; G < x.length; ++G ) { + y[ y.length ] = AB.call( Y, x[ G ], AA ); + } + } else { + return false; + } + return y; + }, + getDocumentHeight: function() { + var Y = ( K[ t ] != M || I ) ? K.body.scrollHeight : W.scrollHeight, + G = Math.max( Y, E.Dom.getViewportHeight() ); + return G; + }, + getDocumentWidth: function() { + var Y = ( K[ t ] != M || I ) ? K.body.scrollWidth : W.scrollWidth, + G = Math.max( Y, E.Dom.getViewportWidth() ); + return G; + }, + getViewportHeight: function() { + var G = self.innerHeight, + Y = K[ t ]; + if ( ( Y || T ) && !D ) { + G = ( Y == M ) ? W.clientHeight : K.body.clientHeight; + } + return G; + }, + getViewportWidth: function() { + var G = self.innerWidth, + Y = K[ t ]; + if ( Y || T ) { + G = ( Y == M ) ? W.clientWidth : K.body.clientWidth; + } + return G; + }, + getAncestorBy: function( G, Y ) { + while ( ( G = G[ Z ] ) ) { + if ( E.Dom._testElement( G, Y ) ) { + return G; + } + } + return null; + }, + getAncestorByClassName: function( Y, G ) { + Y = E.Dom.get( Y ); + if ( !Y ) { + return null; + } + var x = function( y ) { + return E.Dom.hasClass( y, G ); + }; + return E.Dom.getAncestorBy( Y, x ); + }, + getAncestorByTagName: function( Y, G ) { + Y = E.Dom.get( Y ); + if ( !Y ) { + return null; + } + var x = function( y ) { + return y[ C ] && y[ C ].toUpperCase() == G.toUpperCase(); + }; + return E.Dom.getAncestorBy( Y, x ); + }, + getPreviousSiblingBy: function( G, Y ) { + while ( G ) { + G = G.previousSibling; + if ( E.Dom._testElement( G, Y ) ) { + return G; + } + } + return null; + }, + getPreviousSibling: function( G ) { + G = E.Dom.get( G ); + if ( !G ) { + return null; + } + return E.Dom.getPreviousSiblingBy( G ); + }, + getNextSiblingBy: function( G, Y ) { + while ( G ) { + G = G.nextSibling; + if ( E.Dom._testElement( G, Y ) ) { + return G; + } + } + return null; + }, + getNextSibling: function( G ) { + G = E.Dom.get( G ); + if ( !G ) { + return null; + } + return E.Dom.getNextSiblingBy( G ); + }, + getFirstChildBy: function( G, x ) { + var Y = ( E.Dom._testElement( G.firstChild, x ) ) ? G.firstChild : null; + return Y || E.Dom.getNextSiblingBy( G.firstChild, x ); + }, + getFirstChild: function( G, Y ) { + G = E.Dom.get( G ); + if ( !G ) { + return null; + } + return E.Dom.getFirstChildBy( G ); + }, + getLastChildBy: function( G, x ) { + if ( !G ) { + return null; + } + var Y = ( E.Dom._testElement( G.lastChild, x ) ) ? G.lastChild : null; + return Y || E.Dom.getPreviousSiblingBy( G.lastChild, x ); + }, + getLastChild: function( G ) { + G = E.Dom.get( G ); + return E.Dom.getLastChildBy( G ); + }, + getChildrenBy: function( Y, y ) { + var x = E.Dom.getFirstChildBy( Y, y ), + G = x ? [ x ] : []; + E.Dom.getNextSiblingBy( x, function( z ) { + if ( !y || y( z ) ) { + G[ G.length ] = z; + } + return false; + }); + return G; + }, + getChildren: function( G ) { + G = E.Dom.get( G ); + if ( !G ) {} + return E.Dom.getChildrenBy( G ); + }, + getDocumentScrollLeft: function( G ) { + G = G || K; return Math.max( G[ v ].scrollLeft, G.body.scrollLeft ); + }, + getDocumentScrollTop: function( G ) { + G = G || K; return Math.max( G[ v ].scrollTop, G.body.scrollTop ); + }, + insertBefore: function( Y, G ) { + Y = E.Dom.get( Y ); + G = E.Dom.get( G ); + if ( !Y || !G || !G[ Z ] ) { + return null; + } + return G[ Z ].insertBefore( Y, G ); + }, + insertAfter: function( Y, G ) { + Y = E.Dom.get( Y ); + G = E.Dom.get( G ); + if ( !Y || !G || !G[ Z ] ) { + return null; + } + if ( G.nextSibling ) { + return G[ Z ].insertBefore( Y, G.nextSibling ); + } else { + return G[ Z ].appendChild( Y ); + } + }, + getClientRegion: function() { + var x = E.Dom.getDocumentScrollTop(), + Y = E.Dom.getDocumentScrollLeft(), + y = E.Dom.getViewportWidth() + Y, + G = E.Dom.getViewportHeight() + x; + return new E.Region( x, y, G, Y ); + }, + setAttribute: function( Y, G, x ) { + G = E.Dom.CUSTOM_ATTRIBUTES[ G ] || G; + Y.setAttribute( G, x ); + }, + getAttribute: function( Y, G ) { + G = E.Dom.CUSTOM_ATTRIBUTES[ G ] || G; + return Y.getAttribute( G ); + }, + _toCamel: function( Y ) { + var x = d; + + function G( y, z ) { + return z.toUpperCase(); + } + return x[ Y ] || ( x[ Y ] = Y.indexOf( "-" ) === -1 ? Y : Y.replace( /-([a-z])/gi, G ) ); + }, + _getClassRegex: function( Y ) { + var G; if ( Y !== undefined ) { + if ( Y.exec ) { + G = Y; + } else { + G = h[ Y ]; + if ( !G ) { + Y = Y.replace( E.Dom._patterns.CLASS_RE_TOKENS, "\\$1" ); + G = h[ Y ] = new RegExp( s + Y + k, U ); + } + } + } + return G; + }, + _patterns: { ROOT_TAG: /^body|html$/i, CLASS_RE_TOKENS: /([\.\(\)\^\$\*\+\?\|\[\]\{\}])/g }, + _testElement: function( G, Y ) { + return G && G[ l ] == 1 && ( !Y || Y( G ) ); + }, + _calcBorders: function( x, y ) { + var Y = parseInt( E.Dom[ w ]( x, R ), 10 ) || 0, + G = parseInt( E.Dom[ w ]( x, q ), 10 ) || 0; + if ( H ) { + if ( N.test( x[ C ] ) ) { + Y = 0; + G = 0; + } + } + y[ 0 ] += G; + y[ 1 ] += Y; + return y; + } }; var S = E.Dom[ w ]; + if ( m.opera ) { + E.Dom[ w ] = function( Y, G ) { + var x = S( Y, G ); + if ( X.test( G ) ) { + x = E.Dom.Color.toRGB( x ); + } + return x; + }; + } + if ( m.webkit ) { + E.Dom[ w ] = function( Y, G ) { + var x = S( Y, G ); + if ( x === "rgba(0, 0, 0, 0)" ) { + x = "transparent"; + } + return x; + }; + } +})(); +YAHOO.util.Region = function( C, D, A, B ) { + this.top = C; + this.y = C; + this[ 1 ] = C; + this.right = D; + this.bottom = A; + this.left = B; + this.x = B; + this[ 0 ] = B; + this.width = this.right - this.left; + this.height = this.bottom - this.top; +}; +YAHOO.util.Region.prototype.contains = function( A ) { + return ( A.left >= this.left && A.right <= this.right && A.top >= this.top && A.bottom <= this.bottom ); +}; +YAHOO.util.Region.prototype.getArea = function() { + return ( ( this.bottom - this.top ) * ( this.right - this.left ) ); +}; +YAHOO.util.Region.prototype.intersect = function( E ) { + var C = Math.max( this.top, E.top ), + D = Math.min( this.right, E.right ), + A = Math.min( this.bottom, E.bottom ), + B = Math.max( this.left, E.left ); + if ( A >= C && D >= B ) { + return new YAHOO.util.Region( C, D, A, B ); + } else { + return null; + } +}; +YAHOO.util.Region.prototype.union = function( E ) { + var C = Math.min( this.top, E.top ), + D = Math.max( this.right, E.right ), + A = Math.max( this.bottom, E.bottom ), + B = Math.min( this.left, E.left ); + return new YAHOO.util.Region( C, D, A, B ); +}; +YAHOO.util.Region.prototype.toString = function() { + return ( "Region {" + "top: " + this.top + ", right: " + this.right + ", bottom: " + this.bottom + ", left: " + this.left + ", height: " + this.height + ", width: " + this.width + "}" ); +}; +YAHOO.util.Region.getRegion = function( D ) { + var F = YAHOO.util.Dom.getXY( D ), + C = F[ 1 ], + E = F[ 0 ] + D.offsetWidth, + A = F[ 1 ] + D.offsetHeight, + B = F[ 0 ]; + return new YAHOO.util.Region( C, E, A, B ); +}; +YAHOO.util.Point = function( A, B ) { + if ( YAHOO.lang.isArray( A ) ) { + B = A[ 1 ]; + A = A[ 0 ]; + } + YAHOO.util.Point.superclass.constructor.call( this, B, A, B, A ); +}; +YAHOO.extend( YAHOO.util.Point, YAHOO.util.Region ); +(function() { + var B = YAHOO.util, + A = "clientTop", + F = "clientLeft", + J = "parentNode", + K = "right", + W = "hasLayout", + I = "px", + U = "opacity", + L = "auto", + D = "borderLeftWidth", + G = "borderTopWidth", + P = "borderRightWidth", + V = "borderBottomWidth", + S = "visible", + Q = "transparent", + N = "height", + E = "width", + H = "style", + T = "currentStyle", + R = /^width|height$/, + O = /^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i, + M = { + get: function( X, Z ) { + var Y = "", + a = X[ T ][ Z ]; + if ( Z === U ) { + Y = B.Dom.getStyle( X, U ); + } else { + if ( !a || ( a.indexOf && a.indexOf( I ) > -1 ) ) { + Y = a; + } else { + if ( B.Dom.IE_COMPUTED[ Z ] ) { + Y = B.Dom.IE_COMPUTED[ Z ]( X, Z ); + } else { + if ( O.test( a ) ) { + Y = B.Dom.IE.ComputedStyle.getPixel( X, Z ); + } else { + Y = a; + } + } + } + } + return Y; + }, + getOffset: function( Z, e ) { + var b = Z[ T ][ e ], + X = e.charAt( 0 ).toUpperCase() + e.substr( 1 ), + c = "offset" + X, + Y = "pixel" + X, + a = "", + d; + if ( b == L ) { + d = Z[ c ]; + if ( d === undefined ) { + a = 0; + } + a = d; + if ( R.test( e ) ) { + Z[ H ][ e ] = d; + if ( Z[ c ] > d ) { + a = d - ( Z[ c ] - d ); + } + Z[ H ][ e ] = L; + } + } else { + if ( !Z[ H ][ Y ] && !Z[ H ][ e ] ) { + Z[ H ][ e ] = b; + } + a = Z[ H ][ Y ]; + } + return a + I; + }, + getBorderWidth: function( X, Z ) { + var Y = null; if ( !X[ T ][ W ] ) { + X[ H ].zoom = 1; + } + switch ( Z ) { + case G: + Y = X[ A ]; + break;case V: + Y = X.offsetHeight - X.clientHeight - X[ A ]; + break;case D: + Y = X[ F ]; + break;case P: + Y = X.offsetWidth - X.clientWidth - X[ F ]; + break; + } + return Y + I; + }, + getPixel: function( Y, X ) { + var a = null, + b = Y[ T ][ K ], + Z = Y[ T ][ X ]; + Y[ H ][ K ] = Z; + a = Y[ H ].pixelRight; + Y[ H ][ K ] = b; + return a + I; + }, + getMargin: function( Y, X ) { + var Z; if ( Y[ T ][ X ] == L ) { + Z = 0 + I; + } else { + Z = B.Dom.IE.ComputedStyle.getPixel( Y, X ); + } + return Z; + }, + getVisibility: function( Y, X ) { + var Z; while ( ( Z = Y[ T ] ) && Z[ X ] == "inherit" ) { + Y = Y[ J ]; + } + return ( Z ) ? Z[ X ] : S; + }, + getColor: function( Y, X ) { + return B.Dom.Color.toRGB( Y[ T ][ X ] ) || Q; + }, + getBorderColor: function( Y, X ) { + var Z = Y[ T ], + a = Z[ X ] || Z.color; + return B.Dom.Color.toRGB( B.Dom.Color.toHex( a ) ); + } }, + C = {}; + C.top = C.right = C.bottom = C.left = C[ E ] = C[ N ] = M.getOffset; + C.color = M.getColor; + C[ G ] = C[ P ] = C[ V ] = C[ D ] = M.getBorderWidth; + C.marginTop = C.marginRight = C.marginBottom = C.marginLeft = M.getMargin; + C.visibility = M.getVisibility; + C.borderColor = C.borderTopColor = C.borderRightColor = C.borderBottomColor = C.borderLeftColor = M.getBorderColor; + B.Dom.IE_COMPUTED = C; + B.Dom.IE_ComputedStyle = M; +})(); +(function() { + var C = "toString", + A = parseInt, + B = RegExp, + D = YAHOO.util; + D.Dom.Color = { + KEYWORDS: { black: "000", silver: "c0c0c0", gray: "808080", white: "fff", maroon: "800000", red: "f00", purple: "800080", fuchsia: "f0f", green: "008000", lime: "0f0", olive: "808000", yellow: "ff0", navy: "000080", blue: "00f", teal: "008080", aqua: "0ff" }, + re_RGB: /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i, re_hex: /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i, re_hex3: /([0-9A-F])/gi, toRGB: function( E ) { + if ( !D.Dom.Color.re_RGB.test( E ) ) { + E = D.Dom.Color.toHex( E ); + } + if ( D.Dom.Color.re_hex.exec( E ) ) { + E = "rgb(" + [ A( B.$1, 16 ), A( B.$2, 16 ), A( B.$3, 16 ) ].join( ", " ) + ")"; + } + return E; + }, + toHex: function( H ) { + H = D.Dom.Color.KEYWORDS[ H ] || H; + if ( D.Dom.Color.re_RGB.exec( H ) ) { + var G = ( B.$1.length === 1 ) ? "0" + B.$1 : Number( B.$1 ), + F = ( B.$2.length === 1 ) ? "0" + B.$2 : Number( B.$2 ), + E = ( B.$3.length === 1 ) ? "0" + B.$3 : Number( B.$3 ); + H = [ G[ C ]( 16 ), F[ C ]( 16 ), E[ C ]( 16 ) ].join( "" ); + } + if ( H.length < 6 ) { + H = H.replace( D.Dom.Color.re_hex3, "$1$1" ); + } + if ( H !== "transparent" && H.indexOf( "#" ) < 0 ) { + H = "#" + H; + } + return H.toLowerCase(); + } }; +}() ); +YAHOO.register( "dom", YAHOO.util.Dom, { version: "2.7.0", build: "1796" } ); +YAHOO.util.CustomEvent = function( D, C, B, A ) { + this.type = D; + this.scope = C || window; + this.silent = B; + this.signature = A || YAHOO.util.CustomEvent.LIST; + this.subscribers = []; + if ( !this.silent ) {} + var E = "_YUICEOnSubscribe"; + if ( D !== E ) { + this.subscribeEvent = new YAHOO.util.CustomEvent( E, this, true ); + } + this.lastError = null; +}; +YAHOO.util.CustomEvent.LIST = 0; +YAHOO.util.CustomEvent.FLAT = 1; +YAHOO.util.CustomEvent.prototype = { + subscribe: function( A, B, C ) { + if ( !A ) { + throw new Error( "Invalid callback for subscriber to '" + this.type + "'" ); + } + if ( this.subscribeEvent ) { + this.subscribeEvent.fire( A, B, C ); + } + this.subscribers.push( new YAHOO.util.Subscriber( A, B, C ) ); + }, + unsubscribe: function( D, F ) { + if ( !D ) { + return this.unsubscribeAll(); + } + var E = false; + for ( var B = 0, A = this.subscribers.length; B < A; ++B ) { + var C = this.subscribers[ B ]; + if ( C && C.contains( D, F ) ) { + this._delete( B ); + E = true; + } + } + return E; + }, + fire: function() { + this.lastError = null; var K = [], + E = this.subscribers.length; + if ( !E && this.silent ) { + return true; + } + var I = [].slice.call( arguments, 0 ), + G = true, + D, + J = false; + if ( !this.silent ) {} + var C = this.subscribers.slice(), + A = YAHOO.util.Event.throwErrors; + for ( D = 0; D < E; ++D ) { + var M = C[ D ]; + if ( !M ) { + J = true; + } else { + if ( !this.silent ) {} + var L = M.getScope( this.scope ); + if ( this.signature == YAHOO.util.CustomEvent.FLAT ) { + var B = null; + if ( I.length > 0 ) { + B = I[ 0 ]; + } + try { + G = M.fn.call( L, B, M.obj ); + } catch ( F ) { + this.lastError = F; + if ( A ) { + throw F; + } + } + } else { + try { + G = M.fn.call( L, this.type, I, M.obj ); + } catch ( H ) { + this.lastError = H; + if ( A ) { + throw H; + } + } + } + if ( false === G ) { + if ( !this.silent ) {} + break; + } + } + } + return ( G !== false ); + }, + unsubscribeAll: function() { + var A = this.subscribers.length, + B; for ( B = A - 1; B > -1; B-- ) { + this._delete( B ); + } + this.subscribers = []; + return A; + }, + _delete: function( A ) { + var B = this.subscribers[ A ]; + if ( B ) { + delete B.fn; + delete B.obj; + } + this.subscribers.splice( A, 1 ); + }, + toString: function() { + return "CustomEvent: " + "'" + this.type + "', " + "context: " + this.scope; + } }; YAHOO.util.Subscriber = function( A, B, C ) { + this.fn = A; + this.obj = YAHOO.lang.isUndefined( B ) ? null : B; + this.overrideContext = C; +}; +YAHOO.util.Subscriber.prototype.getScope = function( A ) { + if ( this.overrideContext ) { + if ( this.overrideContext === true ) { + return this.obj; + } else { + return this.overrideContext; + } + } + return A; +}; +YAHOO.util.Subscriber.prototype.contains = function( A, B ) { + if ( B ) { + return ( this.fn == A && this.obj == B ); + } else { + return ( this.fn == A ); + } +}; +YAHOO.util.Subscriber.prototype.toString = function() { + return "Subscriber { obj: " + this.obj + ", overrideContext: " + ( this.overrideContext || "no" ) + " }"; +}; +if ( !YAHOO.util.Event ) { + YAHOO.util.Event = function() { + var H = false; + var I = []; + var J = []; + var G = []; + var E = []; + var C = 0; + var F = []; + var B = []; + var A = 0; + var D = { 63232: 38, 63233: 40, 63234: 37, 63235: 39, 63276: 33, 63277: 34, 25: 9 }; var K = YAHOO.env.ua.ie ? "focusin" : "focus"; var L = YAHOO.env.ua.ie ? "focusout" : "blur"; return { + POLL_RETRYS: 2000, POLL_INTERVAL: 20, EL: 0, TYPE: 1, FN: 2, WFN: 3, UNLOAD_OBJ: 3, ADJ_SCOPE: 4, OBJ: 5, OVERRIDE: 6, lastError: null, isSafari: YAHOO.env.ua.webkit, webkit: YAHOO.env.ua.webkit, isIE: YAHOO.env.ua.ie, _interval: null, _dri: null, DOMReady: false, throwErrors: false, startInterval: function() { + if ( !this._interval ) { + var M = this; + var N = function() { + M._tryPreloadAttach(); + }; + this._interval = setInterval( N, this.POLL_INTERVAL ); + } + }, + onAvailable: function( S, O, Q, R, P ) { + var M = ( YAHOO.lang.isString( S ) ) ? [ S ] : S; + for ( var N = 0; N < M.length; N = N + 1 ) { + F.push({ id: M[ N ], fn: O, obj: Q, overrideContext: R, checkReady: P } ); + } + C = this.POLL_RETRYS; + this.startInterval(); + }, + onContentReady: function( P, M, N, O ) { + this.onAvailable( P, M, N, O, true ); + }, + onDOMReady: function( M, N, O ) { + if ( this.DOMReady ) { + setTimeout( function() { + var P = window; + if ( O ) { + if ( O === true ) { + P = N; + } else { + P = O; + } + } + M.call( P, "DOMReady", [], N ); + }, 0 ); + } else { + this.DOMReadyEvent.subscribe( M, N, O ); + } + }, + _addListener: function( O, M, Y, S, W, b ) { + if ( !Y || !Y.call ) { + return false; + } + if ( this._isValidCollection( O ) ) { + var Z = true; + for ( var T = 0, V = O.length; T < V; ++T ) { + Z = this.on( O[ T ], M, Y, S, W ) && Z; + } + return Z; + } else { + if ( YAHOO.lang.isString( O ) ) { + var R = this.getEl( O ); + if ( R ) { + O = R; + } else { + this.onAvailable( O, function() { + YAHOO.util.Event.on( O, M, Y, S, W ); + }); + return true; + } + } + } + if ( !O ) { + return false; + } + if ( "unload" == M && S !== this ) { + J[ J.length ] = [ O, M, Y, S, W ]; + return true; + } + var N = O; + if ( W ) { + if ( W === true ) { + N = S; + } else { + N = W; + } + } + var P = function( c ) { + return Y.call( N, YAHOO.util.Event.getEvent( c, O ), S ); + }; + var a = [ O, M, Y, P, N, S, W ]; + var U = I.length; + I[ U ] = a; + if ( this.useLegacyEvent( O, M ) ) { + var Q = this.getLegacyIndex( O, M ); + if ( Q == -1 || O != G[ Q ][ 0 ] ) { + Q = G.length; + B[ O.id + M ] = Q; + G[ Q ] = [ O, M, O[ "on" + M ] ]; + E[ Q ] = []; + O[ "on" + M ] = function( c ) { + YAHOO.util.Event.fireLegacyEvent( YAHOO.util.Event.getEvent( c ), Q ); + }; + } + E[ Q ].push( a ); + } else { + try { + this._simpleAdd( O, M, P, b ); + } catch ( X ) { + this.lastError = X; + this.removeListener( O, M, Y ); + return false; + } + } + return true; + }, + addListener: function( N, Q, M, O, P ) { + return this._addListener( N, Q, M, O, P, false ); + }, + addFocusListener: function( N, M, O, P ) { + return this._addListener( N, K, M, O, P, true ); + }, + removeFocusListener: function( N, M ) { + return this.removeListener( N, K, M ); + }, + addBlurListener: function( N, M, O, P ) { + return this._addListener( N, L, M, O, P, true ); + }, + removeBlurListener: function( N, M ) { + return this.removeListener( N, L, M ); + }, + fireLegacyEvent: function( R, P ) { + var T = true, + M, V, U, N, S; V = E[ P ].slice(); + for ( var O = 0, Q = V.length; O < Q; ++O ) { + U = V[ O ]; + if ( U && U[ this.WFN ] ) { + N = U[ this.ADJ_SCOPE ]; + S = U[ this.WFN ].call( N, R ); + T = ( T && S ); + } + } + M = G[ P ]; + if ( M && M[ 2 ] ) { + M[ 2 ]( R ); + } + return T; + }, + getLegacyIndex: function( N, O ) { + var M = this.generateId( N ) + O; + if ( typeof B[ M ] == "undefined" ) { + return -1; + } else { + return B[ M ]; + } + }, + useLegacyEvent: function( M, N ) { + return ( this.webkit && this.webkit < 419 && ( "click" == N || "dblclick" == N ) ); + }, + removeListener: function( N, M, V ) { + var Q, T, X; if ( typeof N == "string" ) { + N = this.getEl( N ); + } else { + if ( this._isValidCollection( N ) ) { + var W = true; + for ( Q = N.length - 1; Q > -1; Q-- ) { + W = ( this.removeListener( N[ Q ], M, V ) && W ); + } + return W; + } + } + if ( !V || !V.call ) { + return this.purgeElement( N, false, M ); + } + if ( "unload" == M ) { + for ( Q = J.length - 1; Q > -1; Q-- ) { + X = J[ Q ]; + if ( X && X[ 0 ] == N && X[ 1 ] == M && X[ 2 ] == V ) { + J.splice( Q, 1 ); + return true; + } + } + return false; + } + var R = null; + var S = arguments[ 3 ]; + if ( "undefined" === typeof S ) { + S = this._getCacheIndex( N, M, V ); + } + if ( S >= 0 ) { + R = I[ S ]; + } + if ( !N || !R ) { + return false; + } + if ( this.useLegacyEvent( N, M ) ) { + var P = this.getLegacyIndex( N, M ); + var O = E[ P ]; + if ( O ) { + for ( Q = 0, T = O.length; Q < T; ++Q ) { + X = O[ Q ]; + if ( X && X[ this.EL ] == N && X[ this.TYPE ] == M && X[ this.FN ] == V ) { + O.splice( Q, 1 ); + break; + } + } + } + } else { + try { + this._simpleRemove( N, M, R[ this.WFN ], false ); + } catch ( U ) { + this.lastError = U; + return false; + } + } + delete I[ S ][ this.WFN ]; + delete I[ S ][ this.FN ]; + I.splice( S, 1 ); + return true; + }, + getTarget: function( O, N ) { + var M = O.target || O.srcElement; return this.resolveTextNode( M ); + }, + resolveTextNode: function( N ) { + try { + if ( N && 3 == N.nodeType ) { + return N.parentNode; + } + } catch ( M ) {} + return N; + }, + getPageX: function( N ) { + var M = N.pageX; if ( !M && 0 !== M ) { + M = N.clientX || 0; + if ( this.isIE ) { + M += this._getScrollLeft(); + } + } + return M; + }, + getPageY: function( M ) { + var N = M.pageY; if ( !N && 0 !== N ) { + N = M.clientY || 0; + if ( this.isIE ) { + N += this._getScrollTop(); + } + } + return N; + }, + getXY: function( M ) { + return [ this.getPageX( M ), this.getPageY( M ) ]; + }, + getRelatedTarget: function( N ) { + var M = N.relatedTarget; if ( !M ) { + if ( N.type == "mouseout" ) { + M = N.toElement; + } else { + if ( N.type == "mouseover" ) { + M = N.fromElement; + } + } + } + return this.resolveTextNode( M ); + }, + getTime: function( O ) { + if ( !O.time ) { + var N = new Date().getTime(); + try { + O.time = N; + } catch ( M ) { + this.lastError = M; + return N; + } + } + return O.time; + }, + stopEvent: function( M ) { + this.stopPropagation( M ); + this.preventDefault( M ); + }, + stopPropagation: function( M ) { + if ( M.stopPropagation ) { + M.stopPropagation(); + } else { + M.cancelBubble = true; + } + }, + preventDefault: function( M ) { + if ( M.preventDefault ) { + M.preventDefault(); + } else { + M.returnValue = false; + } + }, + getEvent: function( O, M ) { + var N = O || window.event; if ( !N ) { + var P = this.getEvent.caller; + while ( P ) { + N = P.arguments[ 0 ]; + if ( N && Event == N.constructor ) { + break; + } + P = P.caller; + } + } + return N; + }, + getCharCode: function( N ) { + var M = N.keyCode || N.charCode || 0; if ( YAHOO.env.ua.webkit && ( M in D ) ) { + M = D[ M ]; + } + return M; + }, + _getCacheIndex: function( Q, R, P ) { + for ( var O = 0, N = I.length; O < N; O = O + 1 ) { + var M = I[ O ]; + if ( M && M[ this.FN ] == P && M[ this.EL ] == Q && M[ this.TYPE ] == R ) { + return O; + } + } + return -1; + }, + generateId: function( M ) { + var N = M.id; if ( !N ) { + N = "yuievtautoid-" + A; + ++A; + M.id = N; + } + return N; + }, + _isValidCollection: function( N ) { + try { + return ( N && typeof N !== "string" && N.length && !N.tagName && !N.alert && typeof N[ 0 ] !== "undefined" ); + } catch ( M ) { + return false; + } + }, + elCache: {}, + getEl: function( M ) { + return ( typeof M === "string" ) ? document.getElementById( M ) : M; + }, + clearCache: function() {}, + DOMReadyEvent: new YAHOO.util.CustomEvent( "DOMReady", this ), _load: function( N ) { + if ( !H ) { + H = true; + var M = YAHOO.util.Event; + M._ready(); + M._tryPreloadAttach(); + } + }, + _ready: function( N ) { + var M = YAHOO.util.Event; if ( !M.DOMReady ) { + M.DOMReady = true; + M.DOMReadyEvent.fire(); + M._simpleRemove( document, "DOMContentLoaded", M._ready ); + } + }, + _tryPreloadAttach: function() { + if ( F.length === 0 ) { + C = 0; + if ( this._interval ) { + clearInterval( this._interval ); + this._interval = null; + } + return; + } + if ( this.locked ) { + return; + } + if ( this.isIE ) { + if ( !this.DOMReady ) { + this.startInterval(); + return; + } + } + this.locked = true; + var S = !H; + if ( !S ) { + S = ( C > 0 && F.length > 0 ); + } + var R = []; + var T = function( V, W ) { + var U = V; + if ( W.overrideContext ) { + if ( W.overrideContext === true ) { + U = W.obj; + } else { + U = W.overrideContext; + } + } + W.fn.call( U, W.obj ); + }; + var N, M, Q, P, + O = []; + for ( N = 0, M = F.length; N < M; N = N + 1 ) { + Q = F[ N ]; + if ( Q ) { + P = this.getEl( Q.id ); + if ( P ) { + if ( Q.checkReady ) { + if ( H || P.nextSibling || !S ) { + O.push( Q ); + F[ N ] = null; + } + } else { + T( P, Q ); + F[ N ] = null; + } + } else { + R.push( Q ); + } + } + } + for ( N = 0, M = O.length; N < M; N = N + 1 ) { + Q = O[ N ]; + T( this.getEl( Q.id ), Q ); + } + C--; + if ( S ) { + for ( N = F.length - 1; N > -1; N-- ) { + Q = F[ N ]; + if ( !Q || !Q.id ) { + F.splice( N, 1 ); + } + } + this.startInterval(); + } else { + if ( this._interval ) { + clearInterval( this._interval ); + this._interval = null; + } + } + this.locked = false; + }, + purgeElement: function( Q, R, T ) { + var O = ( YAHOO.lang.isString( Q ) ) ? this.getEl( Q ) : Q; + var S = this.getListeners( O, T ), + P, M; + if ( S ) { + for ( P = S.length - 1; P > -1; P-- ) { + var N = S[ P ]; + this.removeListener( O, N.type, N.fn ); + } + } + if ( R && O && O.childNodes ) { + for ( P = 0, M = O.childNodes.length; P < M; ++P ) { + this.purgeElement( O.childNodes[ P ], R, T ); + } + } + }, + getListeners: function( O, M ) { + var R = [], + N; + if ( !M ) { + N = [ I, J ]; + } else { + if ( M === "unload" ) { + N = [ J ]; + } else { + N = [ I ]; + } + } + var T = ( YAHOO.lang.isString( O ) ) ? this.getEl( O ) : O; + for ( var Q = 0; Q < N.length; Q = Q + 1 ) { + var V = N[ Q ]; + if ( V ) { + for ( var S = 0, U = V.length; S < U; ++S ) { + var P = V[ S ]; + if ( P && P[ this.EL ] === T && ( !M || M === P[ this.TYPE ] ) ) { + R.push({ type: P[ this.TYPE ], fn: P[ this.FN ], obj: P[ this.OBJ ], adjust: P[ this.OVERRIDE ], scope: P[ this.ADJ_SCOPE ], index: S } ); + } + } + } + } + return ( R.length ) ? R : null; + }, + _unload: function( T ) { + var N = YAHOO.util.Event, + Q, P, O, S, R, + U = J.slice(), + M; + for ( Q = 0, S = J.length; Q < S; ++Q ) { + O = U[ Q ]; + if ( O ) { + M = window; + if ( O[ N.ADJ_SCOPE ] ) { + if ( O[ N.ADJ_SCOPE ] === true ) { + M = O[ N.UNLOAD_OBJ ]; + } else { + M = O[ N.ADJ_SCOPE ]; + } + } + O[ N.FN ].call( M, N.getEvent( T, O[ N.EL ] ), O[ N.UNLOAD_OBJ ] ); + U[ Q ] = null; + } + } + O = null; + M = null; + J = null; + if ( I ) { + for ( P = I.length - 1; P > -1; P-- ) { + O = I[ P ]; + if ( O ) { + N.removeListener( O[ N.EL ], O[ N.TYPE ], O[ N.FN ], P ); + } + } + O = null; + } + G = null; + N._simpleRemove( window, "unload", N._unload ); + }, + _getScrollLeft: function() { + return this._getScroll()[ 1 ]; + }, + _getScrollTop: function() { + return this._getScroll()[ 0 ]; + }, + _getScroll: function() { + var M = document.documentElement, + N = document.body; if ( M && ( M.scrollTop || M.scrollLeft ) ) { + return [ M.scrollTop, M.scrollLeft ]; + } else { + if ( N ) { + return [ N.scrollTop, N.scrollLeft ]; + } else { + return [ 0, 0 ]; + } + } + }, + regCE: function() {}, + _simpleAdd: function() { + if ( window.addEventListener ) { + return function( O, P, N, M ) { + O.addEventListener( P, N, ( M ) ); + }; + } else { + if ( window.attachEvent ) { + return function( O, P, N, M ) { + O.attachEvent( "on" + P, N ); + }; + } else { + return function() {}; + } + } + }(), _simpleRemove: function() { + if ( window.removeEventListener ) { + return function( O, P, N, M ) { + O.removeEventListener( P, N, ( M ) ); + }; + } else { + if ( window.detachEvent ) { + return function( N, O, M ) { + N.detachEvent( "on" + O, M ); + }; + } else { + return function() {}; + } + } + }() }; + }(); + (function() { + var EU = YAHOO.util.Event; + EU.on = EU.addListener; + EU.onFocus = EU.addFocusListener; + EU.onBlur = EU.addBlurListener; + /* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */ + if ( EU.isIE ) { + YAHOO.util.Event.onDOMReady( YAHOO.util.Event._tryPreloadAttach, YAHOO.util.Event, true ); + var n = document.createElement( "p" ); + EU._dri = setInterval( function() { + try { + n.doScroll( "left" ); + clearInterval( EU._dri ); + EU._dri = null; + EU._ready(); + n = null; + } catch ( ex ) {} + }, EU.POLL_INTERVAL ); + } else { + if ( EU.webkit && EU.webkit < 525 ) { + EU._dri = setInterval( function() { + var rs = document.readyState; + if ( "loaded" == rs || "complete" == rs ) { + clearInterval( EU._dri ); + EU._dri = null; + EU._ready(); + } + }, EU.POLL_INTERVAL ); + } else { + EU._simpleAdd( document, "DOMContentLoaded", EU._ready ); + } + } + EU._simpleAdd( window, "load", EU._load ); + EU._simpleAdd( window, "unload", EU._unload ); + EU._tryPreloadAttach(); + })(); +} +YAHOO.util.EventProvider = function() {}; +YAHOO.util.EventProvider.prototype = { + __yui_events: null, __yui_subscribers: null, subscribe: function( A, C, F, E ) { + this.__yui_events = this.__yui_events || {}; + var D = this.__yui_events[ A ]; + if ( D ) { + D.subscribe( C, F, E ); + } else { + this.__yui_subscribers = this.__yui_subscribers || {}; + var B = this.__yui_subscribers; + if ( !B[ A ] ) { + B[ A ] = []; + } + B[ A ].push({ fn: C, obj: F, overrideContext: E } ); + } + }, + unsubscribe: function( C, E, G ) { + this.__yui_events = this.__yui_events || {}; + var A = this.__yui_events; + if ( C ) { + var F = A[ C ]; + if ( F ) { + return F.unsubscribe( E, G ); + } + } else { + var B = true; + for ( var D in A ) { + if ( YAHOO.lang.hasOwnProperty( A, D ) ) { + B = B && A[ D ].unsubscribe( E, G ); + } + } + return B; + } + return false; + }, + unsubscribeAll: function( A ) { + return this.unsubscribe( A ); + }, + createEvent: function( G, D ) { + this.__yui_events = this.__yui_events || {}; + var A = D || {}; + var I = this.__yui_events; + if ( I[ G ] ) {} else { + var H = A.scope || this; + var E = ( A.silent ); + var B = new YAHOO.util.CustomEvent( G, H, E, YAHOO.util.CustomEvent.FLAT ); + I[ G ] = B; + if ( A.onSubscribeCallback ) { + B.subscribeEvent.subscribe( A.onSubscribeCallback ); + } + this.__yui_subscribers = this.__yui_subscribers || {}; + var F = this.__yui_subscribers[ G ]; + if ( F ) { + for ( var C = 0; C < F.length; ++C ) { + B.subscribe( F[ C ].fn, F[ C ].obj, F[ C ].overrideContext ); + } + } + } + return I[ G ]; + }, + fireEvent: function( E, D, A, C ) { + this.__yui_events = this.__yui_events || {}; + var G = this.__yui_events[ E ]; + if ( !G ) { + return null; + } + var B = []; + for ( var F = 1; F < arguments.length; ++F ) { + B.push( arguments[ F ] ); + } + return G.fire.apply( G, B ); + }, + hasEvent: function( A ) { + if ( this.__yui_events ) { + if ( this.__yui_events[ A ] ) { + return true; + } + } + return false; + } }; +(function() { + var A = YAHOO.util.Event, + C = YAHOO.lang; + YAHOO.util.KeyListener = function( D, I, E, F ) { + if ( !D ) {} else { + if ( !I ) {} else { + if ( !E ) {} + } + } + if ( !F ) { + F = YAHOO.util.KeyListener.KEYDOWN; + } + var G = new YAHOO.util.CustomEvent( "keyPressed" ); + this.enabledEvent = new YAHOO.util.CustomEvent( "enabled" ); + this.disabledEvent = new YAHOO.util.CustomEvent( "disabled" ); + if ( C.isString( D ) ) { + D = document.getElementById( D ); + } + if ( C.isFunction( E ) ) { + G.subscribe( E ); + } else { + G.subscribe( E.fn, E.scope, E.correctScope ); + } + function H( O, N ) { + if ( !I.shift ) { + I.shift = false; + } + if ( !I.alt ) { + I.alt = false; + } + if ( !I.ctrl ) { + I.ctrl = false; + } + if ( O.shiftKey == I.shift && O.altKey == I.alt && O.ctrlKey == I.ctrl ) { + var J, + M = I.keys, + L; + if ( YAHOO.lang.isArray( M ) ) { + for ( var K = 0; K < M.length; K++ ) { + J = M[ K ]; + L = A.getCharCode( O ); + if ( J == L ) { + G.fire( L, O ); + break; + } + } + } else { + L = A.getCharCode( O ); + if ( M == L ) { + G.fire( L, O ); + } + } + } + } + this.enable = function() { + if ( !this.enabled ) { + A.on( D, F, H ); + this.enabledEvent.fire( I ); + } + this.enabled = true; + }; + this.disable = function() { + if ( this.enabled ) { + A.removeListener( D, F, H ); + this.disabledEvent.fire( I ); + } + this.enabled = false; + }; + this.toString = function() { + return "KeyListener [" + I.keys + "] " + D.tagName + ( D.id ? "[" + D.id + "]" : "" ); + }; + }; + var B = YAHOO.util.KeyListener; + B.KEYDOWN = "keydown"; + B.KEYUP = "keyup"; + B.KEY = { ALT: 18, BACK_SPACE: 8, CAPS_LOCK: 20, CONTROL: 17, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, LEFT: 37, META: 224, NUM_LOCK: 144, PAGE_DOWN: 34, PAGE_UP: 33, PAUSE: 19, PRINTSCREEN: 44, RIGHT: 39, SCROLL_LOCK: 145, SHIFT: 16, SPACE: 32, TAB: 9, UP: 38 }; +})(); +YAHOO.register( "event", YAHOO.util.Event, { version: "2.7.0", build: "1796" } ); +YAHOO.register( "yahoo-dom-event", YAHOO, { version: "2.7.0", build: "1796" } ); +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +if ( !YAHOO.util.DragDropMgr ) { + YAHOO.util.DragDropMgr = function() { + var A = YAHOO.util.Event, + B = YAHOO.util.Dom; + return { + useShim: false, _shimActive: false, _shimState: false, _debugShim: false, _createShim: function() { + var C = document.createElement( "div" ); + C.id = "yui-ddm-shim"; + if ( document.body.firstChild ) { + document.body.insertBefore( C, document.body.firstChild ); + } else { + document.body.appendChild( C ); + } + C.style.display = "none"; + C.style.backgroundColor = "red"; + C.style.position = "absolute"; + C.style.zIndex = "99999"; + B.setStyle( C, "opacity", "0" ); + this._shim = C; + A.on( C, "mouseup", this.handleMouseUp, this, true ); + A.on( C, "mousemove", this.handleMouseMove, this, true ); + A.on( window, "scroll", this._sizeShim, this, true ); + }, + _sizeShim: function() { + if ( this._shimActive ) { + var C = this._shim; + C.style.height = B.getDocumentHeight() + "px"; + C.style.width = B.getDocumentWidth() + "px"; + C.style.top = "0"; + C.style.left = "0"; + } + }, + _activateShim: function() { + if ( this.useShim ) { + if ( !this._shim ) { + this._createShim(); + } + this._shimActive = true; + var C = this._shim, + D = "0"; + if ( this._debugShim ) { + D = ".5"; + } + B.setStyle( C, "opacity", D ); + this._sizeShim(); + C.style.display = "block"; + } + }, + _deactivateShim: function() { + this._shim.style.display = "none"; this._shimActive = false; + }, + _shim: null, ids: {}, + handleIds: {}, + dragCurrent: null, dragOvers: {}, + deltaX: 0, deltaY: 0, preventDefault: true, stopPropagation: true, initialized: false, locked: false, interactionInfo: null, init: function() { + this.initialized = true; + }, + POINT: 0, INTERSECT: 1, STRICT_INTERSECT: 2, mode: 0, _execOnAll: function( E, D ) { + for ( var F in this.ids ) { + for ( var C in this.ids[ F ] ) { + var G = this.ids[ F ][ C ]; + if ( !this.isTypeOfDD( G ) ) { + continue; + } + G[ E ].apply( G, D ); + } + } + }, + _onLoad: function() { + this.init(); + A.on( document, "mouseup", this.handleMouseUp, this, true ); + A.on( document, "mousemove", this.handleMouseMove, this, true ); + A.on( window, "unload", this._onUnload, this, true ); + A.on( window, "resize", this._onResize, this, true ); + }, + _onResize: function( C ) { + this._execOnAll( "resetConstraints", [] ); + }, + lock: function() { + this.locked = true; + }, + unlock: function() { + this.locked = false; + }, + isLocked: function() { + return this.locked; + }, + locationCache: {}, + useCache: true, clickPixelThresh: 3, clickTimeThresh: 1000, dragThreshMet: false, clickTimeout: null, startX: 0, startY: 0, fromTimeout: false, regDragDrop: function( D, C ) { + if ( !this.initialized ) { + this.init(); + } + if ( !this.ids[ C ] ) { + this.ids[ C ] = {}; + } + this.ids[ C ][ D.id ] = D; + }, + removeDDFromGroup: function( E, C ) { + if ( !this.ids[ C ] ) { + this.ids[ C ] = {}; + } + var D = this.ids[ C ]; + if ( D && D[ E.id ] ) { + delete D[ E.id ]; + } + }, + _remove: function( E ) { + for ( var D in E.groups ) { + if ( D ) { + var C = this.ids[ D ]; + if ( C && C[ E.id ] ) { + delete C[ E.id ]; + } + } + } + delete this.handleIds[ E.id ]; + }, + regHandle: function( D, C ) { + if ( !this.handleIds[ D ] ) { + this.handleIds[ D ] = {}; + } + this.handleIds[ D ][ C ] = C; + }, + isDragDrop: function( C ) { + return ( this.getDDById( C ) ) ? true : false; + }, + getRelated: function( H, D ) { + var G = []; + for ( var F in H.groups ) { + for ( var E in this.ids[ F ] ) { + var C = this.ids[ F ][ E ]; + if ( !this.isTypeOfDD( C ) ) { + continue; + } + if ( !D || C.isTarget ) { + G[ G.length ] = C; + } + } + } + return G; + }, + isLegalTarget: function( G, F ) { + var D = this.getRelated( G, true ); + for ( var E = 0, C = D.length; E < C; ++E ) { + if ( D[ E ].id == F.id ) { + return true; + } + } + return false; + }, + isTypeOfDD: function( C ) { + return ( C && C.__ygDragDrop ); + }, + isHandle: function( D, C ) { + return ( this.handleIds[ D ] && this.handleIds[ D ][ C ] ); + }, + getDDById: function( D ) { + for ( var C in this.ids ) { + if ( this.ids[ C ][ D ] ) { + return this.ids[ C ][ D ]; + } + } + return null; + }, + handleMouseDown: function( E, D ) { + this.currentTarget = YAHOO.util.Event.getTarget( E ); + this.dragCurrent = D; + var C = D.getEl(); + this.startX = YAHOO.util.Event.getPageX( E ); + this.startY = YAHOO.util.Event.getPageY( E ); + this.deltaX = this.startX - C.offsetLeft; + this.deltaY = this.startY - C.offsetTop; + this.dragThreshMet = false; + this.clickTimeout = setTimeout( function() { + var F = YAHOO.util.DDM; + F.startDrag( F.startX, F.startY ); + F.fromTimeout = true; + }, this.clickTimeThresh ); + }, + startDrag: function( C, E ) { + if ( this.dragCurrent && this.dragCurrent.useShim ) { + this._shimState = this.useShim; + this.useShim = true; + } + this._activateShim(); + clearTimeout( this.clickTimeout ); + var D = this.dragCurrent; + if ( D && D.events.b4StartDrag ) { + D.b4StartDrag( C, E ); + D.fireEvent( "b4StartDragEvent", { x: C, y: E } ); + } + if ( D && D.events.startDrag ) { + D.startDrag( C, E ); + D.fireEvent( "startDragEvent", { x: C, y: E } ); + } + this.dragThreshMet = true; + }, + handleMouseUp: function( C ) { + if ( this.dragCurrent ) { + clearTimeout( this.clickTimeout ); + if ( this.dragThreshMet ) { + if ( this.fromTimeout ) { + this.fromTimeout = false; + this.handleMouseMove( C ); + } + this.fromTimeout = false; + this.fireEvents( C, true ); + } else {} + this.stopDrag( C ); + this.stopEvent( C ); + } + }, + stopEvent: function( C ) { + if ( this.stopPropagation ) { + YAHOO.util.Event.stopPropagation( C ); + } + if ( this.preventDefault ) { + YAHOO.util.Event.preventDefault( C ); + } + }, + stopDrag: function( E, D ) { + var C = this.dragCurrent; if ( C && !D ) { + if ( this.dragThreshMet ) { + if ( C.events.b4EndDrag ) { + C.b4EndDrag( E ); + C.fireEvent( "b4EndDragEvent", { e: E } ); + } + if ( C.events.endDrag ) { + C.endDrag( E ); + C.fireEvent( "endDragEvent", { e: E } ); + } + } + if ( C.events.mouseUp ) { + C.onMouseUp( E ); + C.fireEvent( "mouseUpEvent", { e: E } ); + } + } + if ( this._shimActive ) { + this._deactivateShim(); + if ( this.dragCurrent && this.dragCurrent.useShim ) { + this.useShim = this._shimState; + this._shimState = false; + } + } + this.dragCurrent = null; + this.dragOvers = {}; + }, + handleMouseMove: function( F ) { + var C = this.dragCurrent; if ( C ) { + if ( YAHOO.util.Event.isIE && !F.button ) { + this.stopEvent( F ); + return this.handleMouseUp( F ); + } else { + if ( F.clientX < 0 || F.clientY < 0 ) {} + } + if ( !this.dragThreshMet ) { + var E = Math.abs( this.startX - YAHOO.util.Event.getPageX( F ) ); + var D = Math.abs( this.startY - YAHOO.util.Event.getPageY( F ) ); + if ( E > this.clickPixelThresh || D > this.clickPixelThresh ) { + this.startDrag( this.startX, this.startY ); + } + } + if ( this.dragThreshMet ) { + if ( C && C.events.b4Drag ) { + C.b4Drag( F ); + C.fireEvent( "b4DragEvent", { e: F } ); + } + if ( C && C.events.drag ) { + C.onDrag( F ); + C.fireEvent( "dragEvent", { e: F } ); + } + if ( C ) { + this.fireEvents( F, false ); + } + } + this.stopEvent( F ); + } + }, + fireEvents: function( V, L ) { + var a = this.dragCurrent; if ( !a || a.isLocked() || a.dragOnly ) { + return; + } + var N = YAHOO.util.Event.getPageX( V ), + M = YAHOO.util.Event.getPageY( V ), + P = new YAHOO.util.Point( N, M ), + K = a.getTargetCoord( P.x, P.y ), + F = a.getDragEl(), + E = [ "out", "over", "drop", "enter" ], + U = new YAHOO.util.Region( K.y, K.x + F.offsetWidth, K.y + F.offsetHeight, K.x ), + I = [], + D = {}, + Q = [], + c = { outEvts: [], overEvts: [], dropEvts: [], enterEvts: [] }; for ( var S in this.dragOvers ) { + var d = this.dragOvers[ S ]; + if ( !this.isTypeOfDD( d ) ) { + continue; + } + if ( !this.isOverTarget( P, d, this.mode, U ) ) { + c.outEvts.push( d ); + } + I[ S ] = true; + delete this.dragOvers[ S ]; + } + for ( var R in a.groups ) { + if ( "string" != typeof R ) { + continue; + } + for ( S in this.ids[ R ] ) { + var G = this.ids[ R ][ S ]; + if ( !this.isTypeOfDD( G ) ) { + continue; + } + if ( G.isTarget && !G.isLocked() && G != a ) { + if ( this.isOverTarget( P, G, this.mode, U ) ) { + D[ R ] = true; + if ( L ) { + c.dropEvts.push( G ); + } else { + if ( !I[ G.id ] ) { + c.enterEvts.push( G ); + } else { + c.overEvts.push( G ); + } + this.dragOvers[ G.id ] = G; + } + } + } + } + } + this.interactionInfo = { out: c.outEvts, enter: c.enterEvts, over: c.overEvts, drop: c.dropEvts, point: P, draggedRegion: U, sourceRegion: this.locationCache[ a.id ], validDrop: L }; for ( var C in D ) { + Q.push( C ); + } + if ( L && !c.dropEvts.length ) { + this.interactionInfo.validDrop = false; + if ( a.events.invalidDrop ) { + a.onInvalidDrop( V ); + a.fireEvent( "invalidDropEvent", { e: V } ); + } + } + for ( S = 0; S < E.length; S++ ) { + var Y = null; + if ( c[ E[ S ] + "Evts" ] ) { + Y = c[ E[ S ] + "Evts" ]; + } + if ( Y && Y.length ) { + var H = E[ S ].charAt( 0 ).toUpperCase() + E[ S ].substr( 1 ), + X = "onDrag" + H, + J = "b4Drag" + H, + O = "drag" + H + "Event", + W = "drag" + H; + if ( this.mode ) { + if ( a.events[ J ] ) { + a[ J ]( V, Y, Q ); + a.fireEvent( J + "Event", { event: V, info: Y, group: Q } ); + } + if ( a.events[ W ] ) { + a[ X ]( V, Y, Q ); + a.fireEvent( O, { event: V, info: Y, group: Q } ); + } + } else { + for ( var Z = 0, T = Y.length; Z < T; ++Z ) { + if ( a.events[ J ] ) { + a[ J ]( V, Y[ Z ].id, Q[ 0 ] ); + a.fireEvent( J + "Event", { event: V, info: Y[ Z ].id, group: Q[ 0 ] } ); + } + if ( a.events[ W ] ) { + a[ X ]( V, Y[ Z ].id, Q[ 0 ] ); + a.fireEvent( O, { event: V, info: Y[ Z ].id, group: Q[ 0 ] } ); + } + } + } + } + } + }, + getBestMatch: function( E ) { + var G = null; var D = E.length; if ( D == 1 ) { + G = E[ 0 ]; + } else { + for ( var F = 0; F < D; ++F ) { + var C = E[ F ]; + if ( this.mode == this.INTERSECT && C.cursorIsOver ) { + G = C; + break; + } else { + if ( !G || !G.overlap || ( C.overlap && G.overlap.getArea() < C.overlap.getArea() ) ) { + G = C; + } + } + } + } + return G; + }, + refreshCache: function( D ) { + var F = D || this.ids; for ( var C in F ) { + if ( "string" != typeof C ) { + continue; + } + for ( var E in this.ids[ C ] ) { + var G = this.ids[ C ][ E ]; + if ( this.isTypeOfDD( G ) ) { + var H = this.getLocation( G ); + if ( H ) { + this.locationCache[ G.id ] = H; + } else { + delete this.locationCache[ G.id ]; + } + } + } + } + }, + verifyEl: function( D ) { + try { + if ( D ) { + var C = D.offsetParent; + if ( C ) { + return true; + } + } + } catch ( E ) {} + return false; + }, + getLocation: function( H ) { + if ( !this.isTypeOfDD( H ) ) { + return null; + } + var F = H.getEl(), + K, E, D, M, L, N, C, J, G; + try { + K = YAHOO.util.Dom.getXY( F ); + } catch ( I ) {} + if ( !K ) { + return null; + } + E = K[ 0 ]; + D = E + F.offsetWidth; + M = K[ 1 ]; + L = M + F.offsetHeight; + N = M - H.padding[ 0 ]; + C = D + H.padding[ 1 ]; + J = L + H.padding[ 2 ]; + G = E - H.padding[ 3 ]; + return new YAHOO.util.Region( N, C, J, G ); + }, + isOverTarget: function( K, C, E, F ) { + var G = this.locationCache[ C.id ]; + if ( !G || !this.useCache ) { + G = this.getLocation( C ); + this.locationCache[ C.id ] = G; + } + if ( !G ) { + return false; + } + C.cursorIsOver = G.contains( K ); + var J = this.dragCurrent; + if ( !J || ( !E && !J.constrainX && !J.constrainY ) ) { + return C.cursorIsOver; + } + C.overlap = null; + if ( !F ) { + var H = J.getTargetCoord( K.x, K.y ); + var D = J.getDragEl(); + F = new YAHOO.util.Region( H.y, H.x + D.offsetWidth, H.y + D.offsetHeight, H.x ); + } + var I = F.intersect( G ); + if ( I ) { + C.overlap = I; + return ( E ) ? true : C.cursorIsOver; + } else { + return false; + } + }, + _onUnload: function( D, C ) { + this.unregAll(); + }, + unregAll: function() { + if ( this.dragCurrent ) { + this.stopDrag(); + this.dragCurrent = null; + } + this._execOnAll( "unreg", [] ); + this.ids = {}; + }, + elementCache: {}, + getElWrapper: function( D ) { + var C = this.elementCache[ D ]; + if ( !C || !C.el ) { + C = this.elementCache[ D ] = new this.ElementWrapper( YAHOO.util.Dom.get( D ) ); + } + return C; + }, + getElement: function( C ) { + return YAHOO.util.Dom.get( C ); + }, + getCss: function( D ) { + var C = YAHOO.util.Dom.get( D ); + return ( C ) ? C.style : null; + }, + ElementWrapper: function( C ) { + this.el = C || null; this.id = this.el && C.id; this.css = this.el && C.style; + }, + getPosX: function( C ) { + return YAHOO.util.Dom.getX( C ); + }, + getPosY: function( C ) { + return YAHOO.util.Dom.getY( C ); + }, + swapNode: function( E, C ) { + if ( E.swapNode ) { + E.swapNode( C ); + } else { + var F = C.parentNode; + var D = C.nextSibling; + if ( D == E ) { + F.insertBefore( E, C ); + } else { + if ( C == E.nextSibling ) { + F.insertBefore( C, E ); + } else { + E.parentNode.replaceChild( C, E ); + F.insertBefore( E, D ); + } + } + } + }, + getScroll: function() { + var E, C, + F = document.documentElement, + D = document.body; if ( F && ( F.scrollTop || F.scrollLeft ) ) { + E = F.scrollTop; + C = F.scrollLeft; + } else { + if ( D ) { + E = D.scrollTop; + C = D.scrollLeft; + } else {} + } + return { top: E, left: C }; + }, + getStyle: function( D, C ) { + return YAHOO.util.Dom.getStyle( D, C ); + }, + getScrollTop: function() { + return this.getScroll().top; + }, + getScrollLeft: function() { + return this.getScroll().left; + }, + moveToEl: function( C, E ) { + var D = YAHOO.util.Dom.getXY( E ); + YAHOO.util.Dom.setXY( C, D ); + }, + getClientHeight: function() { + return YAHOO.util.Dom.getViewportHeight(); + }, + getClientWidth: function() { + return YAHOO.util.Dom.getViewportWidth(); + }, + numericSort: function( D, C ) { + return ( D - C ); + }, + _timeoutCount: 0, _addListeners: function() { + var C = YAHOO.util.DDM; if ( YAHOO.util.Event && document ) { + C._onLoad(); + } else { + if ( C._timeoutCount > 2000 ) {} else { + setTimeout( C._addListeners, 10 ); + if ( document && document.body ) { + C._timeoutCount += 1; + } + } + } + }, + handleWasClicked: function( C, E ) { + if ( this.isHandle( E, C.id ) ) { + return true; + } else { + var D = C.parentNode; + while ( D ) { + if ( this.isHandle( E, D.id ) ) { + return true; + } else { + D = D.parentNode; + } + } + } + return false; + } }; + }(); + YAHOO.util.DDM = YAHOO.util.DragDropMgr; + YAHOO.util.DDM._addListeners(); +}( function() { + var A = YAHOO.util.Event; + var B = YAHOO.util.Dom; + YAHOO.util.DragDrop = function( E, C, D ) { + if ( E ) { + this.init( E, C, D ); + } + }; + YAHOO.util.DragDrop.prototype = { + events: null, on: function() { + this.subscribe.apply( this, arguments ); + }, + id: null, config: null, dragElId: null, handleElId: null, invalidHandleTypes: null, invalidHandleIds: null, invalidHandleClasses: null, startPageX: 0, startPageY: 0, groups: null, locked: false, lock: function() { + this.locked = true; + }, + unlock: function() { + this.locked = false; + }, + isTarget: true, padding: null, dragOnly: false, useShim: false, _domRef: null, __ygDragDrop: true, constrainX: false, constrainY: false, minX: 0, maxX: 0, minY: 0, maxY: 0, deltaX: 0, deltaY: 0, maintainOffset: false, xTicks: null, yTicks: null, primaryButtonOnly: true, available: false, hasOuterHandles: false, cursorIsOver: false, overlap: null, b4StartDrag: function( C, D ) {}, + startDrag: function( C, D ) {}, + b4Drag: function( C ) {}, + onDrag: function( C ) {}, + onDragEnter: function( C, D ) {}, + b4DragOver: function( C ) {}, + onDragOver: function( C, D ) {}, + b4DragOut: function( C ) {}, + onDragOut: function( C, D ) {}, + b4DragDrop: function( C ) {}, + onDragDrop: function( C, D ) {}, + onInvalidDrop: function( C ) {}, + b4EndDrag: function( C ) {}, + endDrag: function( C ) {}, + b4MouseDown: function( C ) {}, + onMouseDown: function( C ) {}, + onMouseUp: function( C ) {}, + onAvailable: function() {}, + getEl: function() { + if ( !this._domRef ) { + this._domRef = B.get( this.id ); + } + return this._domRef; + }, + getDragEl: function() { + return B.get( this.dragElId ); + }, + init: function( F, C, D ) { + this.initTarget( F, C, D ); + A.on( this._domRef || this.id, "mousedown", this.handleMouseDown, this, true ); + for ( var E in this.events ) { + this.createEvent( E + "Event" ); + } + }, + initTarget: function( E, C, D ) { + this.config = D || {}; + this.events = {}; + this.DDM = YAHOO.util.DDM; + this.groups = {}; + if ( typeof E !== "string" ) { + this._domRef = E; + E = B.generateId( E ); + } + this.id = E; + this.addToGroup( ( C ) ? C : "default" ); + this.handleElId = E; + A.onAvailable( E, this.handleOnAvailable, this, true ); + this.setDragElId( E ); + this.invalidHandleTypes = { A: "A" }; this.invalidHandleIds = {}; + this.invalidHandleClasses = []; + this.applyConfig(); + }, + applyConfig: function() { + this.events = { mouseDown: true, b4MouseDown: true, mouseUp: true, b4StartDrag: true, startDrag: true, b4EndDrag: true, endDrag: true, drag: true, b4Drag: true, invalidDrop: true, b4DragOut: true, dragOut: true, dragEnter: true, b4DragOver: true, dragOver: true, b4DragDrop: true, dragDrop: true }; if ( this.config.events ) { + for ( var C in this.config.events ) { + if ( this.config.events[ C ] === false ) { + this.events[ C ] = false; + } + } + } + this.padding = this.config.padding || [ 0, 0, 0, 0 ]; + this.isTarget = ( this.config.isTarget !== false ); + this.maintainOffset = ( this.config.maintainOffset ); + this.primaryButtonOnly = ( this.config.primaryButtonOnly !== false ); + this.dragOnly = ( ( this.config.dragOnly === true ) ? true : false ); + this.useShim = ( ( this.config.useShim === true ) ? true : false ); + }, + handleOnAvailable: function() { + this.available = true; this.resetConstraints(); + this.onAvailable(); + }, + setPadding: function( E, C, F, D ) { + if ( !C && 0 !== C ) { + this.padding = [ E, E, E, E ]; + } else { + if ( !F && 0 !== F ) { + this.padding = [ E, C, E, C ]; + } else { + this.padding = [ E, C, F, D ]; + } + } + }, + setInitPosition: function( F, E ) { + var G = this.getEl(); + if ( !this.DDM.verifyEl( G ) ) { + if ( G && G.style && ( G.style.display == "none" ) ) {} else {} + return; + } + var D = F || 0; + var C = E || 0; + var H = B.getXY( G ); + this.initPageX = H[ 0 ] - D; + this.initPageY = H[ 1 ] - C; + this.lastPageX = H[ 0 ]; + this.lastPageY = H[ 1 ]; + this.setStartPosition( H ); + }, + setStartPosition: function( D ) { + var C = D || B.getXY( this.getEl() ); + this.deltaSetXY = null; + this.startPageX = C[ 0 ]; + this.startPageY = C[ 1 ]; + }, + addToGroup: function( C ) { + this.groups[ C ] = true; + this.DDM.regDragDrop( this, C ); + }, + removeFromGroup: function( C ) { + if ( this.groups[ C ] ) { + delete this.groups[ C ]; + } + this.DDM.removeDDFromGroup( this, C ); + }, + setDragElId: function( C ) { + this.dragElId = C; + }, + setHandleElId: function( C ) { + if ( typeof C !== "string" ) { + C = B.generateId( C ); + } + this.handleElId = C; + this.DDM.regHandle( this.id, C ); + }, + setOuterHandleElId: function( C ) { + if ( typeof C !== "string" ) { + C = B.generateId( C ); + } + A.on( C, "mousedown", this.handleMouseDown, this, true ); + this.setHandleElId( C ); + this.hasOuterHandles = true; + }, + unreg: function() { + A.removeListener( this.id, "mousedown", this.handleMouseDown ); + this._domRef = null; + this.DDM._remove( this ); + }, + isLocked: function() { + return ( this.DDM.isLocked() || this.locked ); + }, + handleMouseDown: function( J, I ) { + var D = J.which || J.button; if ( this.primaryButtonOnly && D > 1 ) { + return; + } + if ( this.isLocked() ) { + return; + } + var C = this.b4MouseDown( J ), + F = true; + if ( this.events.b4MouseDown ) { + F = this.fireEvent( "b4MouseDownEvent", J ); + } + var E = this.onMouseDown( J ), + H = true; + if ( this.events.mouseDown ) { + H = this.fireEvent( "mouseDownEvent", J ); + } + if ( ( C === false ) || ( E === false ) || ( F === false ) || ( H === false ) ) { + return; + } + this.DDM.refreshCache( this.groups ); + var G = new YAHOO.util.Point( A.getPageX( J ), A.getPageY( J ) ); + if ( !this.hasOuterHandles && !this.DDM.isOverTarget( G, this ) ) {} else { + if ( this.clickValidator( J ) ) { + this.setStartPosition(); + this.DDM.handleMouseDown( J, this ); + this.DDM.stopEvent( J ); + } else {} + } + }, + clickValidator: function( D ) { + var C = YAHOO.util.Event.getTarget( D ); + return ( this.isValidHandleChild( C ) && ( this.id == this.handleElId || this.DDM.handleWasClicked( C, this.id ) ) ); + }, + getTargetCoord: function( E, D ) { + var C = E - this.deltaX; var F = D - this.deltaY; if ( this.constrainX ) { + if ( C < this.minX ) { + C = this.minX; + } + if ( C > this.maxX ) { + C = this.maxX; + } + } + if ( this.constrainY ) { + if ( F < this.minY ) { + F = this.minY; + } + if ( F > this.maxY ) { + F = this.maxY; + } + } + C = this.getTick( C, this.xTicks ); + F = this.getTick( F, this.yTicks ); + return { x: C, y: F }; + }, + addInvalidHandleType: function( C ) { + var D = C.toUpperCase(); + this.invalidHandleTypes[ D ] = D; + }, + addInvalidHandleId: function( C ) { + if ( typeof C !== "string" ) { + C = B.generateId( C ); + } + this.invalidHandleIds[ C ] = C; + }, + addInvalidHandleClass: function( C ) { + this.invalidHandleClasses.push( C ); + }, + removeInvalidHandleType: function( C ) { + var D = C.toUpperCase(); + delete this.invalidHandleTypes[ D ]; + }, + removeInvalidHandleId: function( C ) { + if ( typeof C !== "string" ) { + C = B.generateId( C ); + } + delete this.invalidHandleIds[ C ]; + }, + removeInvalidHandleClass: function( D ) { + for ( var E = 0, C = this.invalidHandleClasses.length; E < C; ++E ) { + if ( this.invalidHandleClasses[ E ] == D ) { + delete this.invalidHandleClasses[ E ]; + } + } + }, + isValidHandleChild: function( F ) { + var E = true; var H; try { + H = F.nodeName.toUpperCase(); + } catch ( G ) { + H = F.nodeName; + } + E = E && !this.invalidHandleTypes[ H ]; + E = E && !this.invalidHandleIds[ F.id ]; + for ( var D = 0, C = this.invalidHandleClasses.length; E && D < C; ++D ) { + E = !B.hasClass( F, this.invalidHandleClasses[ D ] ); + } + return E; + }, + setXTicks: function( F, C ) { + this.xTicks = []; + this.xTickSize = C; + var E = {}; + for ( var D = this.initPageX; D >= this.minX; D = D - C ) { + if ( !E[ D ] ) { + this.xTicks[ this.xTicks.length ] = D; + E[ D ] = true; + } + } + for ( D = this.initPageX; D <= this.maxX; D = D + C ) { + if ( !E[ D ] ) { + this.xTicks[ this.xTicks.length ] = D; + E[ D ] = true; + } + } + this.xTicks.sort( this.DDM.numericSort ); + }, + setYTicks: function( F, C ) { + this.yTicks = []; + this.yTickSize = C; + var E = {}; + for ( var D = this.initPageY; D >= this.minY; D = D - C ) { + if ( !E[ D ] ) { + this.yTicks[ this.yTicks.length ] = D; + E[ D ] = true; + } + } + for ( D = this.initPageY; D <= this.maxY; D = D + C ) { + if ( !E[ D ] ) { + this.yTicks[ this.yTicks.length ] = D; + E[ D ] = true; + } + } + this.yTicks.sort( this.DDM.numericSort ); + }, + setXConstraint: function( E, D, C ) { + this.leftConstraint = parseInt( E, 10 ); + this.rightConstraint = parseInt( D, 10 ); + this.minX = this.initPageX - this.leftConstraint; + this.maxX = this.initPageX + this.rightConstraint; + if ( C ) { + this.setXTicks( this.initPageX, C ); + } + this.constrainX = true; + }, + clearConstraints: function() { + this.constrainX = false; this.constrainY = false; this.clearTicks(); + }, + clearTicks: function() { + this.xTicks = null; this.yTicks = null; this.xTickSize = 0; this.yTickSize = 0; + }, + setYConstraint: function( C, E, D ) { + this.topConstraint = parseInt( C, 10 ); + this.bottomConstraint = parseInt( E, 10 ); + this.minY = this.initPageY - this.topConstraint; + this.maxY = this.initPageY + this.bottomConstraint; + if ( D ) { + this.setYTicks( this.initPageY, D ); + } + this.constrainY = true; + }, + resetConstraints: function() { + if ( this.initPageX || this.initPageX === 0 ) { + var D = ( this.maintainOffset ) ? this.lastPageX - this.initPageX : 0; + var C = ( this.maintainOffset ) ? this.lastPageY - this.initPageY : 0; + this.setInitPosition( D, C ); + } else { + this.setInitPosition(); + } + if ( this.constrainX ) { + this.setXConstraint( this.leftConstraint, this.rightConstraint, this.xTickSize ); + } + if ( this.constrainY ) { + this.setYConstraint( this.topConstraint, this.bottomConstraint, this.yTickSize ); + } + }, + getTick: function( I, F ) { + if ( !F ) { + return I; + } else { + if ( F[ 0 ] >= I ) { + return F[ 0 ]; + } else { + for ( var D = 0, C = F.length; D < C; ++D ) { + var E = D + 1; + if ( F[ E ] && F[ E ] >= I ) { + var H = I - F[ D ]; + var G = F[ E ] - I; + return ( G > H ) ? F[ D ] : F[ E ]; + } + } + return F[ F.length - 1 ]; + } + } + }, + toString: function() { + return ( "DragDrop " + this.id ); + } }; YAHOO.augment( YAHOO.util.DragDrop, YAHOO.util.EventProvider ); +})(); +YAHOO.util.DD = function( C, A, B ) { + if ( C ) { + this.init( C, A, B ); + } +}; +YAHOO.extend( YAHOO.util.DD, YAHOO.util.DragDrop, { + scroll: true, autoOffset: function( C, B ) { + var A = C - this.startPageX; var D = B - this.startPageY; this.setDelta( A, D ); + }, + setDelta: function( B, A ) { + this.deltaX = B; this.deltaY = A; + }, + setDragElPos: function( C, B ) { + var A = this.getDragEl(); + this.alignElWithMouse( A, C, B ); + }, + alignElWithMouse: function( C, G, F ) { + var E = this.getTargetCoord( G, F ); + if ( !this.deltaSetXY ) { + var H = [ E.x, E.y ]; + YAHOO.util.Dom.setXY( C, H ); + var D = parseInt( YAHOO.util.Dom.getStyle( C, "left" ), 10 ); + var B = parseInt( YAHOO.util.Dom.getStyle( C, "top" ), 10 ); + this.deltaSetXY = [ D - E.x, B - E.y ]; + } else { + YAHOO.util.Dom.setStyle( C, "left", ( E.x + this.deltaSetXY[ 0 ] ) + "px" ); + YAHOO.util.Dom.setStyle( C, "top", ( E.y + this.deltaSetXY[ 1 ] ) + "px" ); + } + this.cachePosition( E.x, E.y ); + var A = this; + setTimeout( function() { + A.autoScroll.call( A, E.x, E.y, C.offsetHeight, C.offsetWidth ); + }, 0 ); + }, + cachePosition: function( B, A ) { + if ( B ) { + this.lastPageX = B; + this.lastPageY = A; + } else { + var C = YAHOO.util.Dom.getXY( this.getEl() ); + this.lastPageX = C[ 0 ]; + this.lastPageY = C[ 1 ]; + } + }, + autoScroll: function( J, I, E, K ) { + if ( this.scroll ) { + var L = this.DDM.getClientHeight(); + var B = this.DDM.getClientWidth(); + var N = this.DDM.getScrollTop(); + var D = this.DDM.getScrollLeft(); + var H = E + I; + var M = K + J; + var G = ( L + N - I - this.deltaY ); + var F = ( B + D - J - this.deltaX ); + var C = 40; + var A = ( document.all ) ? 80 : 30; + if ( H > L && G < C ) { + window.scrollTo( D, N + A ); + } + if ( I < N && N > 0 && I - N < C ) { + window.scrollTo( D, N - A ); + } + if ( M > B && F < C ) { + window.scrollTo( D + A, N ); + } + if ( J < D && D > 0 && J - D < C ) { + window.scrollTo( D - A, N ); + } + } + }, + applyConfig: function() { + YAHOO.util.DD.superclass.applyConfig.call( this ); + this.scroll = ( this.config.scroll !== false ); + }, + b4MouseDown: function( A ) { + this.setStartPosition(); + this.autoOffset( YAHOO.util.Event.getPageX( A ), YAHOO.util.Event.getPageY( A ) ); + }, + b4Drag: function( A ) { + this.setDragElPos( YAHOO.util.Event.getPageX( A ), YAHOO.util.Event.getPageY( A ) ); + }, + toString: function() { + return ( "DD " + this.id ); + } } ); +YAHOO.util.DDProxy = function( C, A, B ) { + if ( C ) { + this.init( C, A, B ); + this.initFrame(); + } +}; +YAHOO.util.DDProxy.dragElId = "ygddfdiv"; +YAHOO.extend( YAHOO.util.DDProxy, YAHOO.util.DD, { + resizeFrame: true, centerFrame: false, createFrame: function() { + var B = this, + A = document.body; if ( !A || !A.firstChild ) { + setTimeout( function() { + B.createFrame(); + }, 50 ); + return; + } + var F = this.getDragEl(), + E = YAHOO.util.Dom; + if ( !F ) { + F = document.createElement( "div" ); + F.id = this.dragElId; + var D = F.style; + D.position = "absolute"; + D.visibility = "hidden"; + D.cursor = "move"; + D.border = "2px solid #aaa"; + D.zIndex = 999; + D.height = "25px"; + D.width = "25px"; + var C = document.createElement( "div" ); + E.setStyle( C, "height", "100%" ); + E.setStyle( C, "width", "100%" ); + E.setStyle( C, "background-color", "#ccc" ); + E.setStyle( C, "opacity", "0" ); + F.appendChild( C ); + A.insertBefore( F, A.firstChild ); + } + }, + initFrame: function() { + this.createFrame(); + }, + applyConfig: function() { + YAHOO.util.DDProxy.superclass.applyConfig.call( this ); + this.resizeFrame = ( this.config.resizeFrame !== false ); + this.centerFrame = ( this.config.centerFrame ); + this.setDragElId( this.config.dragElId || YAHOO.util.DDProxy.dragElId ); + }, + showFrame: function( E, D ) { + var C = this.getEl(); + var A = this.getDragEl(); + var B = A.style; + this._resizeProxy(); + if ( this.centerFrame ) { + this.setDelta( Math.round( parseInt( B.width, 10 ) / 2 ), Math.round( parseInt( B.height, 10 ) / 2 ) ); + } + this.setDragElPos( E, D ); + YAHOO.util.Dom.setStyle( A, "visibility", "visible" ); + }, + _resizeProxy: function() { + if ( this.resizeFrame ) { + var H = YAHOO.util.Dom; + var B = this.getEl(); + var C = this.getDragEl(); + var G = parseInt( H.getStyle( C, "borderTopWidth" ), 10 ); + var I = parseInt( H.getStyle( C, "borderRightWidth" ), 10 ); + var F = parseInt( H.getStyle( C, "borderBottomWidth" ), 10 ); + var D = parseInt( H.getStyle( C, "borderLeftWidth" ), 10 ); + if ( isNaN( G ) ) { + G = 0; + } + if ( isNaN( I ) ) { + I = 0; + } + if ( isNaN( F ) ) { + F = 0; + } + if ( isNaN( D ) ) { + D = 0; + } + var E = Math.max( 0, B.offsetWidth - I - D ); + var A = Math.max( 0, B.offsetHeight - G - F ); + H.setStyle( C, "width", E + "px" ); + H.setStyle( C, "height", A + "px" ); + } + }, + b4MouseDown: function( B ) { + this.setStartPosition(); + var A = YAHOO.util.Event.getPageX( B ); + var C = YAHOO.util.Event.getPageY( B ); + this.autoOffset( A, C ); + }, + b4StartDrag: function( A, B ) { + this.showFrame( A, B ); + }, + b4EndDrag: function( A ) { + YAHOO.util.Dom.setStyle( this.getDragEl(), "visibility", "hidden" ); + }, + endDrag: function( D ) { + var C = YAHOO.util.Dom; var B = this.getEl(); + var A = this.getDragEl(); + C.setStyle( A, "visibility", "" ); + C.setStyle( B, "visibility", "hidden" ); + YAHOO.util.DDM.moveToEl( B, A ); + C.setStyle( A, "visibility", "hidden" ); + C.setStyle( B, "visibility", "" ); + }, + toString: function() { + return ( "DDProxy " + this.id ); + } } ); +YAHOO.util.DDTarget = function( C, A, B ) { + if ( C ) { + this.initTarget( C, A, B ); + } +}; +YAHOO.extend( YAHOO.util.DDTarget, YAHOO.util.DragDrop, { + toString: function() { + return ( "DDTarget " + this.id ); + } } ); +YAHOO.register( "dragdrop", YAHOO.util.DragDropMgr, { version: "2.7.0", build: "1796" } ); +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ ( function() { + var B = YAHOO.util.Dom.getXY, + A = YAHOO.util.Event, + D = Array.prototype.slice; + + function C( G, E, F, H ) { + C.ANIM_AVAIL = ( !YAHOO.lang.isUndefined( YAHOO.util.Anim ) ); + if ( G ) { + this.init( G, E, true ); + this.initSlider( H ); + this.initThumb( F ); + } + } + YAHOO.lang.augmentObject( C, { + getHorizSlider: function( F, G, I, H, E ) { + return new C( F, F, new YAHOO.widget.SliderThumb( G, F, I, H, 0, 0, E ), "horiz" ); + }, + getVertSlider: function( G, H, E, I, F ) { + return new C( G, G, new YAHOO.widget.SliderThumb( H, G, 0, 0, E, I, F ), "vert" ); + }, + getSliderRegion: function( G, H, J, I, E, K, F ) { + return new C( G, G, new YAHOO.widget.SliderThumb( H, G, J, I, E, K, F ), "region" ); + }, + SOURCE_UI_EVENT: 1, SOURCE_SET_VALUE: 2, SOURCE_KEY_EVENT: 3, ANIM_AVAIL: false }, true ); + YAHOO.extend( C, YAHOO.util.DragDrop, { + _mouseDown: false, dragOnly: true, initSlider: function( E ) { + this.type = E; this.createEvent( "change", this ); + this.createEvent( "slideStart", this ); + this.createEvent( "slideEnd", this ); + this.isTarget = false; + this.animate = C.ANIM_AVAIL; + this.backgroundEnabled = true; + this.tickPause = 40; + this.enableKeys = true; + this.keyIncrement = 20; + this.moveComplete = true; + this.animationDuration = 0.2; + this.SOURCE_UI_EVENT = 1; + this.SOURCE_SET_VALUE = 2; + this.valueChangeSource = 0; + this._silent = false; + this.lastOffset = [ 0, 0 ]; + }, + initThumb: function( F ) { + var E = this; this.thumb = F; F.cacheBetweenDrags = true; if ( F._isHoriz && F.xTicks && F.xTicks.length ) { + this.tickPause = Math.round( 360 / F.xTicks.length ); + } else { + if ( F.yTicks && F.yTicks.length ) { + this.tickPause = Math.round( 360 / F.yTicks.length ); + } + } + F.onAvailable = function() { + return E.setStartSliderState(); + }; + F.onMouseDown = function() { + E._mouseDown = true; + return E.focus(); + }; + F.startDrag = function() { + E._slideStart(); + }; + F.onDrag = function() { + E.fireEvents( true ); + }; + F.onMouseUp = function() { + E.thumbMouseUp(); + }; + }, + onAvailable: function() { + this._bindKeyEvents(); + }, + _bindKeyEvents: function() { + A.on( this.id, "keydown", this.handleKeyDown, this, true ); + A.on( this.id, "keypress", this.handleKeyPress, this, true ); + }, + handleKeyPress: function( F ) { + if ( this.enableKeys ) { + var E = A.getCharCode( F ); + switch ( E ) { + case 37: + case 38: + case 39: + case 40: + case 36: + case 35: + A.preventDefault( F ); + break;default: + } + } + }, + handleKeyDown: function( J ) { + if ( this.enableKeys ) { + var G = A.getCharCode( J ), + F = this.thumb, + H = this.getXValue(), + E = this.getYValue(), + I = true; + switch ( G ) { + case 37: + H -= this.keyIncrement; + break;case 38: + E -= this.keyIncrement; + break;case 39: + H += this.keyIncrement; + break;case 40: + E += this.keyIncrement; + break;case 36: + H = F.leftConstraint; + E = F.topConstraint; + break;case 35: + H = F.rightConstraint; + E = F.bottomConstraint; + break;default: + I = false; + } + if ( I ) { + if ( F._isRegion ) { + this._setRegionValue( C.SOURCE_KEY_EVENT, H, E, true ); + } else { + this._setValue( C.SOURCE_KEY_EVENT, ( F._isHoriz ? H : E ), true ); + } + A.stopEvent( J ); + } + } + }, + setStartSliderState: function() { + this.setThumbCenterPoint(); + this.baselinePos = B( this.getEl() ); + this.thumb.startOffset = this.thumb.getOffsetFromParent( this.baselinePos ); + if ( this.thumb._isRegion ) { + if ( this.deferredSetRegionValue ) { + this._setRegionValue.apply( this, this.deferredSetRegionValue ); + this.deferredSetRegionValue = null; + } else { + this.setRegionValue( 0, 0, true, true, true ); + } + } else { + if ( this.deferredSetValue ) { + this._setValue.apply( this, this.deferredSetValue ); + this.deferredSetValue = null; + } else { + this.setValue( 0, true, true, true ); + } + } + }, + setThumbCenterPoint: function() { + var E = this.thumb.getEl(); + if ( E ) { + this.thumbCenterPoint = { x: parseInt( E.offsetWidth / 2, 10 ), y: parseInt( E.offsetHeight / 2, 10 ) }; + } + }, + lock: function() { + this.thumb.lock(); + this.locked = true; + }, + unlock: function() { + this.thumb.unlock(); + this.locked = false; + }, + thumbMouseUp: function() { + this._mouseDown = false; if ( !this.isLocked() && !this.moveComplete ) { + this.endMove(); + } + }, + onMouseUp: function() { + this._mouseDown = false; if ( this.backgroundEnabled && !this.isLocked() && !this.moveComplete ) { + this.endMove(); + } + }, + getThumb: function() { + return this.thumb; + }, + focus: function() { + this.valueChangeSource = C.SOURCE_UI_EVENT; var E = this.getEl(); + if ( E.focus ) { + try { + E.focus(); + } catch ( F ) {} + } + this.verifyOffset(); + return !this.isLocked(); + }, + onChange: function( E, F ) {}, + onSlideStart: function() {}, + onSlideEnd: function() {}, + getValue: function() { + return this.thumb.getValue(); + }, + getXValue: function() { + return this.thumb.getXValue(); + }, + getYValue: function() { + return this.thumb.getYValue(); + }, + setValue: function() { + var E = D.call( arguments ); + E.unshift( C.SOURCE_SET_VALUE ); + return this._setValue.apply( this, E ); + }, + _setValue: function( I, L, G, H, E ) { + var F = this.thumb, + K, J; if ( !F.available ) { + this.deferredSetValue = arguments; + return false; + } + if ( this.isLocked() && !H ) { + return false; + } + if ( isNaN( L ) ) { + return false; + } + if ( F._isRegion ) { + return false; + } + this._silent = E; + this.valueChangeSource = I || C.SOURCE_SET_VALUE; + F.lastOffset = [ L, L ]; + this.verifyOffset( true ); + this._slideStart(); + if ( F._isHoriz ) { + K = F.initPageX + L + this.thumbCenterPoint.x; + this.moveThumb( K, F.initPageY, G ); + } else { + J = F.initPageY + L + this.thumbCenterPoint.y; + this.moveThumb( F.initPageX, J, G ); + } + return true; + }, + setRegionValue: function() { + var E = D.call( arguments ); + E.unshift( C.SOURCE_SET_VALUE ); + return this._setRegionValue.apply( this, E ); + }, + _setRegionValue: function( F, J, H, I, G, K ) { + var L = this.thumb, + E, M; if ( !L.available ) { + this.deferredSetRegionValue = arguments; + return false; + } + if ( this.isLocked() && !G ) { + return false; + } + if ( isNaN( J ) ) { + return false; + } + if ( !L._isRegion ) { + return false; + } + this._silent = K; + this.valueChangeSource = F || C.SOURCE_SET_VALUE; + L.lastOffset = [ J, H ]; + this.verifyOffset( true ); + this._slideStart(); + E = L.initPageX + J + this.thumbCenterPoint.x; + M = L.initPageY + H + this.thumbCenterPoint.y; + this.moveThumb( E, M, I ); + return true; + }, + verifyOffset: function( F ) { + var G = B( this.getEl() ), + E = this.thumb; + if ( !this.thumbCenterPoint || !this.thumbCenterPoint.x ) { + this.setThumbCenterPoint(); + } + if ( G ) { + if ( G[ 0 ] != this.baselinePos[ 0 ] || G[ 1 ] != this.baselinePos[ 1 ] ) { + this.setInitPosition(); + this.baselinePos = G; + E.initPageX = this.initPageX + E.startOffset[ 0 ]; + E.initPageY = this.initPageY + E.startOffset[ 1 ]; + E.deltaSetXY = null; + this.resetThumbConstraints(); + return false; + } + } + return true; + }, + moveThumb: function( K, J, I, G ) { + var L = this.thumb, + M = this, + F, E, H; if ( !L.available ) { + return; + } + L.setDelta( this.thumbCenterPoint.x, this.thumbCenterPoint.y ); + E = L.getTargetCoord( K, J ); + F = [ Math.round( E.x ), Math.round( E.y ) ]; + if ( this.animate && L._graduated && !I ) { + this.lock(); + this.curCoord = B( this.thumb.getEl() ); + this.curCoord = [ Math.round( this.curCoord[ 0 ] ), Math.round( this.curCoord[ 1 ] ) ]; + setTimeout( function() { + M.moveOneTick( F ); + }, this.tickPause ); + } else { + if ( this.animate && C.ANIM_AVAIL && !I ) { + this.lock(); + H = new YAHOO.util.Motion( L.id, { + points: { to: F } }, this.animationDuration, YAHOO.util.Easing.easeOut ); + H.onComplete.subscribe( function() { + M.unlock(); + if ( !M._mouseDown ) { + M.endMove(); + } + }); + H.animate(); + } else { + L.setDragElPos( K, J ); + if ( !G && !this._mouseDown ) { + this.endMove(); + } + } + } + }, + _slideStart: function() { + if ( !this._sliding ) { + if ( !this._silent ) { + this.onSlideStart(); + this.fireEvent( "slideStart" ); + } + this._sliding = true; + } + }, + _slideEnd: function() { + if ( this._sliding && this.moveComplete ) { + var E = this._silent; + this._sliding = false; + this._silent = false; + this.moveComplete = false; + if ( !E ) { + this.onSlideEnd(); + this.fireEvent( "slideEnd" ); + } + } + }, + moveOneTick: function( F ) { + var H = this.thumb, + G = this, + I = null, + E, J; if ( H._isRegion ) { + I = this._getNextX( this.curCoord, F ); + E = ( I !== null ) ? I[ 0 ] : this.curCoord[ 0 ]; + I = this._getNextY( this.curCoord, F ); + J = ( I !== null ) ? I[ 1 ] : this.curCoord[ 1 ]; + I = E !== this.curCoord[ 0 ] || J !== this.curCoord[ 1 ] ? [ E, J ] : null; + } else { + if ( H._isHoriz ) { + I = this._getNextX( this.curCoord, F ); + } else { + I = this._getNextY( this.curCoord, F ); + } + } + if ( I ) { + this.curCoord = I; + this.thumb.alignElWithMouse( H.getEl(), I[ 0 ] + this.thumbCenterPoint.x, I[ 1 ] + this.thumbCenterPoint.y ); + if ( !( I[ 0 ] == F[ 0 ] && I[ 1 ] == F[ 1 ] ) ) { + setTimeout( function() { + G.moveOneTick( F ); + }, this.tickPause ); + } else { + this.unlock(); + if ( !this._mouseDown ) { + this.endMove(); + } + } + } else { + this.unlock(); + if ( !this._mouseDown ) { + this.endMove(); + } + } + }, + _getNextX: function( E, F ) { + var H = this.thumb, + J, + G = [], + I = null; + if ( E[ 0 ] > F[ 0 ] ) { + J = H.tickSize - this.thumbCenterPoint.x; + G = H.getTargetCoord( E[ 0 ] - J, E[ 1 ] ); + I = [ G.x, G.y ]; + } else { + if ( E[ 0 ] < F[ 0 ] ) { + J = H.tickSize + this.thumbCenterPoint.x; + G = H.getTargetCoord( E[ 0 ] + J, E[ 1 ] ); + I = [ G.x, G.y ]; + } else {} + } + return I; + }, + _getNextY: function( E, F ) { + var H = this.thumb, + J, + G = [], + I = null; + if ( E[ 1 ] > F[ 1 ] ) { + J = H.tickSize - this.thumbCenterPoint.y; + G = H.getTargetCoord( E[ 0 ], E[ 1 ] - J ); + I = [ G.x, G.y ]; + } else { + if ( E[ 1 ] < F[ 1 ] ) { + J = H.tickSize + this.thumbCenterPoint.y; + G = H.getTargetCoord( E[ 0 ], E[ 1 ] + J ); + I = [ G.x, G.y ]; + } else {} + } + return I; + }, + b4MouseDown: function( E ) { + if ( !this.backgroundEnabled ) { + return false; + } + this.thumb.autoOffset(); + this.resetThumbConstraints(); + }, + onMouseDown: function( F ) { + if ( !this.backgroundEnabled || this.isLocked() ) { + return false; + } + this._mouseDown = true; + var E = A.getPageX( F ), + G = A.getPageY( F ); + this.focus(); + this._slideStart(); + this.moveThumb( E, G ); + }, + onDrag: function( F ) { + if ( this.backgroundEnabled && !this.isLocked() ) { + var E = A.getPageX( F ), + G = A.getPageY( F ); + this.moveThumb( E, G, true, true ); + this.fireEvents(); + } + }, + endMove: function() { + this.unlock(); + this.fireEvents(); + this.moveComplete = true; + this._slideEnd(); + }, + resetThumbConstraints: function() { + var E = this.thumb; E.setXConstraint( E.leftConstraint, E.rightConstraint, E.xTickSize ); + E.setYConstraint( E.topConstraint, E.bottomConstraint, E.xTickSize ); + }, + fireEvents: function( G ) { + var F = this.thumb, + I, H, E; if ( !G ) { + F.cachePosition(); + } + if ( !this.isLocked() ) { + if ( F._isRegion ) { + I = F.getXValue(); + H = F.getYValue(); + if ( I != this.previousX || H != this.previousY ) { + if ( !this._silent ) { + this.onChange( I, H ); + this.fireEvent( "change", { x: I, y: H } ); + } + } + this.previousX = I; + this.previousY = H; + } else { + E = F.getValue(); + if ( E != this.previousVal ) { + if ( !this._silent ) { + this.onChange( E ); + this.fireEvent( "change", E ); + } + } + this.previousVal = E; + } + } + }, + toString: function() { + return ( "Slider (" + this.type + ") " + this.id ); + } } ); + YAHOO.lang.augmentProto( C, YAHOO.util.EventProvider ); + YAHOO.widget.Slider = C; +})(); +YAHOO.widget.SliderThumb = function( G, B, E, D, A, F, C ) { + if ( G ) { + YAHOO.widget.SliderThumb.superclass.constructor.call( this, G, B ); + this.parentElId = B; + } + this.isTarget = false; + this.tickSize = C; + this.maintainOffset = true; + this.initSlider( E, D, A, F, C ); + this.scroll = false; +}; +YAHOO.extend( YAHOO.widget.SliderThumb, YAHOO.util.DD, { + startOffset: null, dragOnly: true, _isHoriz: false, _prevVal: 0, _graduated: false, getOffsetFromParent0: function( C ) { + var A = YAHOO.util.Dom.getXY( this.getEl() ), + B = C || YAHOO.util.Dom.getXY( this.parentElId ); + return [ ( A[ 0 ] - B[ 0 ] ), ( A[ 1 ] - B[ 1 ] ) ]; + }, + getOffsetFromParent: function( H ) { + var A = this.getEl(), + E, I, F, B, K, D, C, J, G; + if ( !this.deltaOffset ) { + I = YAHOO.util.Dom.getXY( A ); + F = H || YAHOO.util.Dom.getXY( this.parentElId ); + E = [ ( I[ 0 ] - F[ 0 ] ), ( I[ 1 ] - F[ 1 ] ) ]; + B = parseInt( YAHOO.util.Dom.getStyle( A, "left" ), 10 ); + K = parseInt( YAHOO.util.Dom.getStyle( A, "top" ), 10 ); + D = B - E[ 0 ]; + C = K - E[ 1 ]; + if ( isNaN( D ) || isNaN( C ) ) {} else { + this.deltaOffset = [ D, C ]; + } + } else { + J = parseInt( YAHOO.util.Dom.getStyle( A, "left" ), 10 ); + G = parseInt( YAHOO.util.Dom.getStyle( A, "top" ), 10 ); + E = [ J + this.deltaOffset[ 0 ], G + this.deltaOffset[ 1 ] ]; + } + return E; + }, + initSlider: function( D, C, A, E, B ) { + this.initLeft = D; this.initRight = C; this.initUp = A; this.initDown = E; this.setXConstraint( D, C, B ); + this.setYConstraint( A, E, B ); + if ( B && B > 1 ) { + this._graduated = true; + } + this._isHoriz = ( D || C ); + this._isVert = ( A || E ); + this._isRegion = ( this._isHoriz && this._isVert ); + }, + clearTicks: function() { + YAHOO.widget.SliderThumb.superclass.clearTicks.call( this ); + this.tickSize = 0; + this._graduated = false; + }, + getValue: function() { + return ( this._isHoriz ) ? this.getXValue() : this.getYValue(); + }, + getXValue: function() { + if ( !this.available ) { + return 0; + } + var A = this.getOffsetFromParent(); + if ( YAHOO.lang.isNumber( A[ 0 ] ) ) { + this.lastOffset = A; + return ( A[ 0 ] - this.startOffset[ 0 ] ); + } else { + return ( this.lastOffset[ 0 ] - this.startOffset[ 0 ] ); + } + }, + getYValue: function() { + if ( !this.available ) { + return 0; + } + var A = this.getOffsetFromParent(); + if ( YAHOO.lang.isNumber( A[ 1 ] ) ) { + this.lastOffset = A; + return ( A[ 1 ] - this.startOffset[ 1 ] ); + } else { + return ( this.lastOffset[ 1 ] - this.startOffset[ 1 ] ); + } + }, + toString: function() { + return "SliderThumb " + this.id; + }, + onChange: function( A, B ) {} } ); +(function() { + var A = YAHOO.util.Event, + B = YAHOO.widget; + + function C( I, F, H, D ) { + var G = this, + J = { min: false, max: false }, + E, K; this.minSlider = I; this.maxSlider = F; this.activeSlider = I; this.isHoriz = I.thumb._isHoriz; E = this.minSlider.thumb.onMouseDown; K = this.maxSlider.thumb.onMouseDown; this.minSlider.thumb.onMouseDown = function() { + G.activeSlider = G.minSlider; + E.apply( this, arguments ); + }; + this.maxSlider.thumb.onMouseDown = function() { + G.activeSlider = G.maxSlider; + K.apply( this, arguments ); + }; + this.minSlider.thumb.onAvailable = function() { + I.setStartSliderState(); + J.min = true; + if ( J.max ) { + G.fireEvent( "ready", G ); + } + }; + this.maxSlider.thumb.onAvailable = function() { + F.setStartSliderState(); + J.max = true; + if ( J.min ) { + G.fireEvent( "ready", G ); + } + }; + I.onMouseDown = F.onMouseDown = function( L ) { + return this.backgroundEnabled && G._handleMouseDown( L ); + }; + I.onDrag = F.onDrag = function( L ) { + G._handleDrag( L ); + }; + I.onMouseUp = F.onMouseUp = function( L ) { + G._handleMouseUp( L ); + }; + I._bindKeyEvents = function() { + G._bindKeyEvents( this ); + }; + F._bindKeyEvents = function() {}; + I.subscribe( "change", this._handleMinChange, I, this ); + I.subscribe( "slideStart", this._handleSlideStart, I, this ); + I.subscribe( "slideEnd", this._handleSlideEnd, I, this ); + F.subscribe( "change", this._handleMaxChange, F, this ); + F.subscribe( "slideStart", this._handleSlideStart, F, this ); + F.subscribe( "slideEnd", this._handleSlideEnd, F, this ); + this.createEvent( "ready", this ); + this.createEvent( "change", this ); + this.createEvent( "slideStart", this ); + this.createEvent( "slideEnd", this ); + D = YAHOO.lang.isArray( D ) ? D : [ 0, H ]; + D[ 0 ] = Math.min( Math.max( parseInt( D[ 0 ], 10 ) | 0, 0 ), H ); + D[ 1 ] = Math.max( Math.min( parseInt( D[ 1 ], 10 ) | 0, H ), 0 ); + if ( D[ 0 ] > D[ 1 ] ) { + D.splice( 0, 2, D[ 1 ], D[ 0 ] ); + } + this.minVal = D[ 0 ]; + this.maxVal = D[ 1 ]; + this.minSlider.setValue( this.minVal, true, true, true ); + this.maxSlider.setValue( this.maxVal, true, true, true ); + } + C.prototype = { + minVal: -1, maxVal: -1, minRange: 0, _handleSlideStart: function( E, D ) { + this.fireEvent( "slideStart", D ); + }, + _handleSlideEnd: function( E, D ) { + this.fireEvent( "slideEnd", D ); + }, + _handleDrag: function( D ) { + B.Slider.prototype.onDrag.call( this.activeSlider, D ); + }, + _handleMinChange: function() { + this.activeSlider = this.minSlider; this.updateValue(); + }, + _handleMaxChange: function() { + this.activeSlider = this.maxSlider; this.updateValue(); + }, + _bindKeyEvents: function( D ) { + A.on( D.id, "keydown", this._handleKeyDown, this, true ); + A.on( D.id, "keypress", this._handleKeyPress, this, true ); + }, + _handleKeyDown: function( D ) { + this.activeSlider.handleKeyDown.apply( this.activeSlider, arguments ); + }, + _handleKeyPress: function( D ) { + this.activeSlider.handleKeyPress.apply( this.activeSlider, arguments ); + }, + setValues: function( H, K, I, E, J ) { + var F = this.minSlider, + M = this.maxSlider, + D = F.thumb, + L = M.thumb, + N = this, + G = { min: false, max: false }; if ( D._isHoriz ) { + D.setXConstraint( D.leftConstraint, L.rightConstraint, D.tickSize ); + L.setXConstraint( D.leftConstraint, L.rightConstraint, L.tickSize ); + } else { + D.setYConstraint( D.topConstraint, L.bottomConstraint, D.tickSize ); + L.setYConstraint( D.topConstraint, L.bottomConstraint, L.tickSize ); + } + this._oneTimeCallback( F, "slideEnd", function() { + G.min = true; + if ( G.max ) { + N.updateValue( J ); + setTimeout( function() { + N._cleanEvent( F, "slideEnd" ); + N._cleanEvent( M, "slideEnd" ); + }, 0 ); + } + }); + this._oneTimeCallback( M, "slideEnd", function() { + G.max = true; + if ( G.min ) { + N.updateValue( J ); + setTimeout( function() { + N._cleanEvent( F, "slideEnd" ); + N._cleanEvent( M, "slideEnd" ); + }, 0 ); + } + }); + F.setValue( H, I, E, false ); + M.setValue( K, I, E, false ); + }, + setMinValue: function( F, H, I, E ) { + var G = this.minSlider, + D = this; this.activeSlider = G; D = this; this._oneTimeCallback( G, "slideEnd", function() { + D.updateValue( E ); + setTimeout( function() { + D._cleanEvent( G, "slideEnd" ); + }, 0 ); + }); + G.setValue( F, H, I ); + }, + setMaxValue: function( D, H, I, F ) { + var G = this.maxSlider, + E = this; this.activeSlider = G; this._oneTimeCallback( G, "slideEnd", function() { + E.updateValue( F ); + setTimeout( function() { + E._cleanEvent( G, "slideEnd" ); + }, 0 ); + }); + G.setValue( D, H, I ); + }, + updateValue: function( J ) { + var E = this.minSlider.getValue(), + K = this.maxSlider.getValue(), + F = false, + D, M, H, I, L, G; + if ( E != this.minVal || K != this.maxVal ) { + F = true; + D = this.minSlider.thumb; + M = this.maxSlider.thumb; + H = this.isHoriz ? "x" : "y"; + G = this.minSlider.thumbCenterPoint[ H ] + this.maxSlider.thumbCenterPoint[ H ]; + I = Math.max( K - G - this.minRange, 0 ); + L = Math.min( -E - G - this.minRange, 0 ); + if ( this.isHoriz ) { + I = Math.min( I, M.rightConstraint ); + D.setXConstraint( D.leftConstraint, I, D.tickSize ); + M.setXConstraint( L, M.rightConstraint, M.tickSize ); + } else { + I = Math.min( I, M.bottomConstraint ); + D.setYConstraint( D.leftConstraint, I, D.tickSize ); + M.setYConstraint( L, M.bottomConstraint, M.tickSize ); + } + } + this.minVal = E; + this.maxVal = K; + if ( F && !J ) { + this.fireEvent( "change", this ); + } + }, + selectActiveSlider: function( H ) { + var E = this.minSlider, + D = this.maxSlider, + J = E.isLocked() || !E.backgroundEnabled, + G = D.isLocked() || !E.backgroundEnabled, + F = YAHOO.util.Event, + I; + if ( J || G ) { + this.activeSlider = J ? D : E; + } else { + if ( this.isHoriz ) { + I = F.getPageX( H ) - E.thumb.initPageX - E.thumbCenterPoint.x; + } else { + I = F.getPageY( H ) - E.thumb.initPageY - E.thumbCenterPoint.y; + } + this.activeSlider = I * 2 > D.getValue() + E.getValue() ? D : E; + } + }, + _handleMouseDown: function( D ) { + if ( !D._handled ) { + D._handled = true; + this.selectActiveSlider( D ); + return B.Slider.prototype.onMouseDown.call( this.activeSlider, D ); + } else { + return false; + } + }, + _handleMouseUp: function( D ) { + B.Slider.prototype.onMouseUp.apply( this.activeSlider, arguments ); + }, + _oneTimeCallback: function( F, D, E ) { + F.subscribe( D, function() { + F.unsubscribe( D, arguments.callee ); + E.apply( {}, [].slice.apply( arguments ) ); + }); + }, + _cleanEvent: function( K, E ) { + var J, I, D, G, H, F; if ( K.__yui_events && K.events[ E ] ) { + for ( I = K.__yui_events.length; I >= 0; --I ) { + if ( K.__yui_events[ I ].type === E ) { + J = K.__yui_events[ I ]; + break; + } + } + if ( J ) { + H = J.subscribers; + F = []; + G = 0; + for ( I = 0, D = H.length; I < D; ++I ) { + if ( H[ I ] ) { + F[ G++ ] = H[ I ]; + } + } + J.subscribers = F; + } + } + } }; YAHOO.lang.augmentProto( C, YAHOO.util.EventProvider ); + B.Slider.getHorizDualSlider = function( H, J, K, G, F, D ) { + var I = new B.SliderThumb( J, H, 0, G, 0, 0, F ), + E = new B.SliderThumb( K, H, 0, G, 0, 0, F ); + return new C( new B.Slider( H, H, I, "horiz" ), new B.Slider( H, H, E, "horiz" ), G, D ); + }; + B.Slider.getVertDualSlider = function( H, J, K, G, F, D ) { + var I = new B.SliderThumb( J, H, 0, 0, 0, G, F ), + E = new B.SliderThumb( K, H, 0, 0, 0, G, F ); + return new B.DualSlider( new B.Slider( H, H, I, "vert" ), new B.Slider( H, H, E, "vert" ), G, D ); + }; + YAHOO.widget.DualSlider = C; +})(); +YAHOO.register( "slider", YAHOO.widget.Slider, { version: "2.7.0", build: "1796" } ); +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +YAHOO.util.Attribute = function( B, A ) { + if ( A ) { + this.owner = A; + this.configure( B, true ); + } +}; +YAHOO.util.Attribute.prototype = { + name: undefined, value: null, owner: null, readOnly: false, writeOnce: false, _initialConfig: null, _written: false, method: null, setter: null, getter: null, validator: null, getValue: function() { + var A = this.value; if ( this.getter ) { + A = this.getter.call( this.owner, this.name ); + } + return A; + }, + setValue: function( F, B ) { + var E, + A = this.owner, + C = this.name; var D = { type: C, prevValue: this.getValue(), newValue: F }; if ( this.readOnly || ( this.writeOnce && this._written ) ) { + return false; + } + if ( this.validator && !this.validator.call( A, F ) ) { + return false; + } + if ( !B ) { + E = A.fireBeforeChangeEvent( D ); + if ( E === false ) { + return false; + } + } + if ( this.setter ) { + F = this.setter.call( A, F, this.name ); + if ( F === undefined ) {} + } + if ( this.method ) { + this.method.call( A, F, this.name ); + } + this.value = F; + this._written = true; + D.type = C; + if ( !B ) { + this.owner.fireChangeEvent( D ); + } + return true; + }, + configure: function( B, C ) { + B = B || {}; + if ( C ) { + this._written = false; + } + this._initialConfig = this._initialConfig || {}; + for ( var A in B ) { + if ( B.hasOwnProperty( A ) ) { + this[ A ] = B[ A ]; + if ( C ) { + this._initialConfig[ A ] = B[ A ]; + } + } + } + }, + resetValue: function() { + return this.setValue( this._initialConfig.value ); + }, + resetConfig: function() { + this.configure( this._initialConfig, true ); + }, + refresh: function( A ) { + this.setValue( this.value, A ); + } }; +(function() { + var A = YAHOO.util.Lang; + YAHOO.util.AttributeProvider = function() {}; + YAHOO.util.AttributeProvider.prototype = { + _configs: null, get: function( C ) { + this._configs = this._configs || {}; + var B = this._configs[ C ]; + if ( !B || !this._configs.hasOwnProperty( C ) ) { + return null; + } + return B.getValue(); + }, + set: function( D, E, B ) { + this._configs = this._configs || {}; + var C = this._configs[ D ]; + if ( !C ) { + return false; + } + return C.setValue( E, B ); + }, + getAttributeKeys: function() { + this._configs = this._configs; var C = [], + B; + for ( B in this._configs ) { + if ( A.hasOwnProperty( this._configs, B ) && !A.isUndefined( this._configs[ B ] ) ) { + C[ C.length ] = B; + } + } + return C; + }, + setAttributes: function( D, B ) { + for ( var C in D ) { + if ( A.hasOwnProperty( D, C ) ) { + this.set( C, D[ C ], B ); + } + } + }, + resetValue: function( C, B ) { + this._configs = this._configs || {}; + if ( this._configs[ C ] ) { + this.set( C, this._configs[ C ]._initialConfig.value, B ); + return true; + } + return false; + }, + refresh: function( E, C ) { + this._configs = this._configs || {}; + var F = this._configs; + E = ( ( A.isString( E ) ) ? [ E ] : E ) || this.getAttributeKeys(); + for ( var D = 0, B = E.length; D < B; ++D ) { + if ( F.hasOwnProperty( E[ D ] ) ) { + this._configs[ E[ D ] ].refresh( C ); + } + } + }, + register: function( B, C ) { + this.setAttributeConfig( B, C ); + }, + getAttributeConfig: function( C ) { + this._configs = this._configs || {}; + var B = this._configs[ C ] || {}; + var D = {}; + for ( C in B ) { + if ( A.hasOwnProperty( B, C ) ) { + D[ C ] = B[ C ]; + } + } + return D; + }, + setAttributeConfig: function( B, C, D ) { + this._configs = this._configs || {}; + C = C || {}; + if ( !this._configs[ B ] ) { + C.name = B; + this._configs[ B ] = this.createAttribute( C ); + } else { + this._configs[ B ].configure( C, D ); + } + }, + configureAttribute: function( B, C, D ) { + this.setAttributeConfig( B, C, D ); + }, + resetAttributeConfig: function( B ) { + this._configs = this._configs || {}; + this._configs[ B ].resetConfig(); + }, + subscribe: function( B, C ) { + this._events = this._events || {}; + if ( !( B in this._events ) ) { + this._events[ B ] = this.createEvent( B ); + } + YAHOO.util.EventProvider.prototype.subscribe.apply( this, arguments ); + }, + on: function() { + this.subscribe.apply( this, arguments ); + }, + addListener: function() { + this.subscribe.apply( this, arguments ); + }, + fireBeforeChangeEvent: function( C ) { + var B = "before"; B += C.type.charAt( 0 ).toUpperCase() + C.type.substr( 1 ) + "Change"; + C.type = B; + return this.fireEvent( C.type, C ); + }, + fireChangeEvent: function( B ) { + B.type += "Change"; return this.fireEvent( B.type, B ); + }, + createAttribute: function( B ) { + return new YAHOO.util.Attribute( B, this ); + } }; YAHOO.augment( YAHOO.util.AttributeProvider, YAHOO.util.EventProvider ); +})(); +(function() { + var B = YAHOO.util.Dom, + C = YAHOO.util.AttributeProvider; + var A = function( D, E ) { + this.init.apply( this, arguments ); + }; + A.DOM_EVENTS = { "click": true, "dblclick": true, "keydown": true, "keypress": true, "keyup": true, "mousedown": true, "mousemove": true, "mouseout": true, "mouseover": true, "mouseup": true, "focus": true, "blur": true, "submit": true, "change": true }; A.prototype = { + DOM_EVENTS: null, DEFAULT_HTML_SETTER: function( F, D ) { + var E = this.get( "element" ); + if ( E ) { + E[ D ] = F; + } + }, + DEFAULT_HTML_GETTER: function( D ) { + var E = this.get( "element" ), + F; + if ( E ) { + F = E[ D ]; + } + return F; + }, + appendChild: function( D ) { + D = D.get ? D.get( "element" ) : D; + return this.get( "element" ).appendChild( D ); + }, + getElementsByTagName: function( D ) { + return this.get( "element" ).getElementsByTagName( D ); + }, + hasChildNodes: function() { + return this.get( "element" ).hasChildNodes(); + }, + insertBefore: function( D, E ) { + D = D.get ? D.get( "element" ) : D; + E = ( E && E.get ) ? E.get( "element" ) : E; + return this.get( "element" ).insertBefore( D, E ); + }, + removeChild: function( D ) { + D = D.get ? D.get( "element" ) : D; + return this.get( "element" ).removeChild( D ); + }, + replaceChild: function( D, E ) { + D = D.get ? D.get( "element" ) : D; + E = E.get ? E.get( "element" ) : E; + return this.get( "element" ).replaceChild( D, E ); + }, + initAttributes: function( D ) {}, + addListener: function( H, G, I, F ) { + var E = this.get( "element" ) || this.get( "id" ); + F = F || this; + var D = this; + if ( !this._events[ H ] ) { + if ( E && this.DOM_EVENTS[ H ] ) { + YAHOO.util.Event.addListener( E, H, function( J ) { + if ( J.srcElement && !J.target ) { + J.target = J.srcElement; + } + D.fireEvent( H, J ); + }, I, F ); + } + this.createEvent( H, this ); + } + return YAHOO.util.EventProvider.prototype.subscribe.apply( this, arguments ); + }, + on: function() { + return this.addListener.apply( this, arguments ); + }, + subscribe: function() { + return this.addListener.apply( this, arguments ); + }, + removeListener: function( E, D ) { + return this.unsubscribe.apply( this, arguments ); + }, + addClass: function( D ) { + B.addClass( this.get( "element" ), D ); + }, + getElementsByClassName: function( E, D ) { + return B.getElementsByClassName( E, D, this.get( "element" ) ); + }, + hasClass: function( D ) { + return B.hasClass( this.get( "element" ), D ); + }, + removeClass: function( D ) { + return B.removeClass( this.get( "element" ), D ); + }, + replaceClass: function( E, D ) { + return B.replaceClass( this.get( "element" ), E, D ); + }, + setStyle: function( E, D ) { + return B.setStyle( this.get( "element" ), E, D ); + }, + getStyle: function( D ) { + return B.getStyle( this.get( "element" ), D ); + }, + fireQueue: function() { + var E = this._queue; for ( var F = 0, D = E.length; F < D; ++F ) { + this[ E[ F ][ 0 ] ].apply( this, E[ F ][ 1 ] ); + } + }, + appendTo: function( E, F ) { + E = ( E.get ) ? E.get( "element" ) : B.get( E ); + this.fireEvent( "beforeAppendTo", { type: "beforeAppendTo", target: E } ); + F = ( F && F.get ) ? F.get( "element" ) : B.get( F ); + var D = this.get( "element" ); + if ( !D ) { + return false; + } + if ( !E ) { + return false; + } + if ( D.parent != E ) { + if ( F ) { + E.insertBefore( D, F ); + } else { + E.appendChild( D ); + } + } + this.fireEvent( "appendTo", { type: "appendTo", target: E } ); + return D; + }, + get: function( D ) { + var F = this._configs || {}, + E = F.element; + if ( E && !F[ D ] && !YAHOO.lang.isUndefined( E.value[ D ] ) ) { + this._setHTMLAttrConfig( D ); + } + return C.prototype.get.call( this, D ); + }, + setAttributes: function( J, G ) { + var E = {}, + H = this._configOrder; + for ( var I = 0, D = H.length; I < D; ++I ) { + if ( J[ H[ I ] ] !== undefined ) { + E[ H[ I ] ] = true; + this.set( H[ I ], J[ H[ I ] ], G ); + } + } + for ( var F in J ) { + if ( J.hasOwnProperty( F ) && !E[ F ] ) { + this.set( F, J[ F ], G ); + } + } + }, + set: function( E, G, D ) { + var F = this.get( "element" ); + if ( !F ) { + this._queue[ this._queue.length ] = [ "set", arguments ]; + if ( this._configs[ E ] ) { + this._configs[ E ].value = G; + } + return; + } + if ( !this._configs[ E ] && !YAHOO.lang.isUndefined( F[ E ] ) ) { + this._setHTMLAttrConfig( E ); + } + return C.prototype.set.apply( this, arguments ); + }, + setAttributeConfig: function( D, E, F ) { + this._configOrder.push( D ); + C.prototype.setAttributeConfig.apply( this, arguments ); + }, + createEvent: function( E, D ) { + this._events[ E ] = true; + return C.prototype.createEvent.apply( this, arguments ); + }, + init: function( E, D ) { + this._initElement( E, D ); + }, + destroy: function() { + var D = this.get( "element" ); + YAHOO.util.Event.purgeElement( D, true ); + this.unsubscribeAll(); + if ( D && D.parentNode ) { + D.parentNode.removeChild( D ); + } + this._queue = []; + this._events = {}; + this._configs = {}; + this._configOrder = []; + }, + _initElement: function( F, E ) { + this._queue = this._queue || []; + this._events = this._events || {}; + this._configs = this._configs || {}; + this._configOrder = []; + E = E || {}; + E.element = E.element || F || null; + var H = false; + var D = A.DOM_EVENTS; + this.DOM_EVENTS = this.DOM_EVENTS || {}; + for ( var G in D ) { + if ( D.hasOwnProperty( G ) ) { + this.DOM_EVENTS[ G ] = D[ G ]; + } + } + if ( typeof E.element === "string" ) { + this._setHTMLAttrConfig( "id", { value: E.element } ); + } + if ( B.get( E.element ) ) { + H = true; + this._initHTMLElement( E ); + this._initContent( E ); + } + YAHOO.util.Event.onAvailable( E.element, function() { + if ( !H ) { + this._initHTMLElement( E ); + } + this.fireEvent( "available", { type: "available", target: B.get( E.element ) } ); + }, this, true ); + YAHOO.util.Event.onContentReady( E.element, function() { + if ( !H ) { + this._initContent( E ); + } + this.fireEvent( "contentReady", { type: "contentReady", target: B.get( E.element ) } ); + }, this, true ); + }, + _initHTMLElement: function( D ) { + this.setAttributeConfig( "element", { value: B.get( D.element ), readOnly: true } ); + }, + _initContent: function( D ) { + this.initAttributes( D ); + this.setAttributes( D, true ); + this.fireQueue(); + }, + _setHTMLAttrConfig: function( D, F ) { + var E = this.get( "element" ); + F = F || {}; + F.name = D; + F.setter = F.setter || this.DEFAULT_HTML_SETTER; + F.getter = F.getter || this.DEFAULT_HTML_GETTER; + F.value = F.value || E[ D ]; + this._configs[ D ] = new YAHOO.util.Attribute( F, this ); + } }; YAHOO.augment( A, C ); + YAHOO.util.Element = A; +})(); +YAHOO.register( "element", YAHOO.util.Element, { version: "2.7.0", build: "1796" } ); +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +YAHOO.util.Color = function() { + var A = "0", + B = YAHOO.lang.isArray, + C = YAHOO.lang.isNumber; + return { + real2dec: function( D ) { + return Math.min( 255, Math.round( D * 256 ) ); + }, + hsv2rgb: function( H, O, M ) { + if ( B( H ) ) { + return this.hsv2rgb.call( this, H[ 0 ], H[ 1 ], H[ 2 ] ); + } + var D, I, L, + G = Math.floor( ( H / 60 ) % 6 ), + J = ( H / 60 ) - G, + F = M * ( 1 - O ), + E = M * ( 1 - J * O ), + N = M * ( 1 - ( 1 - J ) * O ), + K; + switch ( G ) { + case 0: + D = M; + I = N; + L = F; + break;case 1: + D = E; + I = M; + L = F; + break;case 2: + D = F; + I = M; + L = N; + break;case 3: + D = F; + I = E; + L = M; + break;case 4: + D = N; + I = F; + L = M; + break;case 5: + D = M; + I = F; + L = E; + break; + } + K = this.real2dec; + return [ K( D ), K( I ), K( L ) ]; + }, + rgb2hsv: function( D, H, I ) { + if ( B( D ) ) { + return this.rgb2hsv.apply( this, D ); + } + D /= 255; + H /= 255; + I /= 255; + var G, L, + E = Math.min( Math.min( D, H ), I ), + J = Math.max( Math.max( D, H ), I ), + K = J - E, + F; + switch ( J ) { + case E: + G = 0; + break;case D: + G = 60 * ( H - I ) / K; + if ( H < I ) { + G += 360; + } + break;case H: + G = ( 60 * ( I - D ) / K ) + 120; + break;case I: + G = ( 60 * ( D - H ) / K ) + 240; + break; + } + L = ( J === 0 ) ? 0 : 1 - ( E / J ); + F = [ Math.round( G ), L, J ]; + return F; + }, + rgb2hex: function( F, E, D ) { + if ( B( F ) ) { + return this.rgb2hex.apply( this, F ); + } + var G = this.dec2hex; + return G( F ) + G( E ) + G( D ); + }, + dec2hex: function( D ) { + D = parseInt( D, 10 ) | 0; + D = ( D > 255 || D < 0 ) ? 0 : D; + return ( A + D.toString( 16 ) ).slice( -2 ).toUpperCase(); + }, + hex2dec: function( D ) { + return parseInt( D, 16 ); + }, + hex2rgb: function( D ) { + var E = this.hex2dec; return [ E( D.slice( 0, 2 ) ), E( D.slice( 2, 4 ) ), E( D.slice( 4, 6 ) ) ]; + }, + websafe: function( F, E, D ) { + if ( B( F ) ) { + return this.websafe.apply( this, F ); + } + var G = function( H ) { + if ( C( H ) ) { + H = Math.min( Math.max( 0, H ), 255 ); + var I, J; + for ( I = 0; I < 256; I = I + 51 ) { + J = I + 51; + if ( H >= I && H <= J ) { + return ( H - I > 25 ) ? J : I; + } + } + } + return H; + }; + return [ G( F ), G( E ), G( D ) ]; + } }; +}(); +(function() { + var J = 0, + F = YAHOO.util, + C = YAHOO.lang, + D = YAHOO.widget.Slider, + B = F.Color, + E = F.Dom, + I = F.Event, + A = C.substitute, + H = "yui-picker"; + + function G( L, K ) { + J = J + 1; + K = K || {}; + if ( arguments.length === 1 && !YAHOO.lang.isString( L ) && !L.nodeName ) { + K = L; + L = K.element || null; + } + if ( !L && !K.element ) { + L = this._createHostElement( K ); + } + G.superclass.constructor.call( this, L, K ); + this.initPicker(); + } + YAHOO.extend( G, YAHOO.util.Element, { + ID: { R: H + "-r", R_HEX: H + "-rhex", G: H + "-g", G_HEX: H + "-ghex", B: H + "-b", B_HEX: H + "-bhex", H: H + "-h", S: H + "-s", V: H + "-v", PICKER_BG: H + "-bg", PICKER_THUMB: H + "-thumb", HUE_BG: H + "-hue-bg", HUE_THUMB: H + "-hue-thumb", HEX: H + "-hex", SWATCH: H + "-swatch", WEBSAFE_SWATCH: H + "-websafe-swatch", CONTROLS: H + "-controls", RGB_CONTROLS: H + "-rgb-controls", HSV_CONTROLS: H + "-hsv-controls", HEX_CONTROLS: H + "-hex-controls", HEX_SUMMARY: H + "-hex-summary", CONTROLS_LABEL: H + "-controls-label" }, + TXT: { ILLEGAL_HEX: "Illegal hex value entered", SHOW_CONTROLS: "Show color details", HIDE_CONTROLS: "Hide color details", CURRENT_COLOR: "Currently selected color: {rgb}", CLOSEST_WEBSAFE: "Closest websafe color: {rgb}. Click to select.", R: "R", G: "G", B: "B", H: "H", S: "S", V: "V", HEX: "#", DEG: "\u00B0", PERCENT: "%" }, + IMAGE: { PICKER_THUMB: "../../build/colorpicker/assets/picker_thumb.png", HUE_THUMB: "../../build/colorpicker/assets/hue_thumb.png" }, + DEFAULT: { PICKER_SIZE: 180 }, + OPT: { HUE: "hue", SATURATION: "saturation", VALUE: "value", RED: "red", GREEN: "green", BLUE: "blue", HSV: "hsv", RGB: "rgb", WEBSAFE: "websafe", HEX: "hex", PICKER_SIZE: "pickersize", SHOW_CONTROLS: "showcontrols", SHOW_RGB_CONTROLS: "showrgbcontrols", SHOW_HSV_CONTROLS: "showhsvcontrols", SHOW_HEX_CONTROLS: "showhexcontrols", SHOW_HEX_SUMMARY: "showhexsummary", SHOW_WEBSAFE: "showwebsafe", CONTAINER: "container", IDS: "ids", ELEMENTS: "elements", TXT: "txt", IMAGES: "images", ANIMATE: "animate" }, + skipAnim: true, _createHostElement: function() { + var K = document.createElement( "div" ); + if ( this.CSS.BASE ) { + K.className = this.CSS.BASE; + } + return K; + }, + _updateHueSlider: function() { + var K = this.get( this.OPT.PICKER_SIZE ), + L = this.get( this.OPT.HUE ); + L = K - Math.round( L / 360 * K ); + if ( L === K ) { + L = 0; + } + this.hueSlider.setValue( L, this.skipAnim ); + }, + _updatePickerSlider: function() { + var L = this.get( this.OPT.PICKER_SIZE ), + M = this.get( this.OPT.SATURATION ), + K = this.get( this.OPT.VALUE ); + M = Math.round( M * L / 100 ); + K = Math.round( L - ( K * L / 100 ) ); + this.pickerSlider.setRegionValue( M, K, this.skipAnim ); + }, + _updateSliders: function() { + this._updateHueSlider(); + this._updatePickerSlider(); + }, + setValue: function( L, K ) { + K = ( K ) || false; + this.set( this.OPT.RGB, L, K ); + this._updateSliders(); + }, + hueSlider: null, pickerSlider: null, _getH: function() { + var K = this.get( this.OPT.PICKER_SIZE ), + L = ( K - this.hueSlider.getValue() ) / K; + L = Math.round( L * 360 ); + return ( L === 360 ) ? 0 : L; + }, + _getS: function() { + return this.pickerSlider.getXValue() / this.get( this.OPT.PICKER_SIZE ); + }, + _getV: function() { + var K = this.get( this.OPT.PICKER_SIZE ); + return ( K - this.pickerSlider.getYValue() ) / K; + }, + _updateSwatch: function() { + var M = this.get( this.OPT.RGB ), + O = this.get( this.OPT.WEBSAFE ), + N = this.getElement( this.ID.SWATCH ), + L = M.join( "," ), + K = this.get( this.OPT.TXT ); + E.setStyle( N, "background-color", "rgb(" + L + ")" ); + N.title = A( K.CURRENT_COLOR, { "rgb": "#" + this.get( this.OPT.HEX ) } ); + N = this.getElement( this.ID.WEBSAFE_SWATCH ); + L = O.join( "," ); + E.setStyle( N, "background-color", "rgb(" + L + ")" ); + N.title = A( K.CLOSEST_WEBSAFE, { "rgb": "#" + B.rgb2hex( O ) } ); + }, + _getValuesFromSliders: function() { + this.set( this.OPT.RGB, B.hsv2rgb( this._getH(), this._getS(), this._getV() ) ); + }, + _updateFormFields: function() { + this.getElement( this.ID.H ).value = this.get( this.OPT.HUE ); + this.getElement( this.ID.S ).value = this.get( this.OPT.SATURATION ); + this.getElement( this.ID.V ).value = this.get( this.OPT.VALUE ); + this.getElement( this.ID.R ).value = this.get( this.OPT.RED ); + this.getElement( this.ID.R_HEX ).innerHTML = B.dec2hex( this.get( this.OPT.RED ) ); + this.getElement( this.ID.G ).value = this.get( this.OPT.GREEN ); + this.getElement( this.ID.G_HEX ).innerHTML = B.dec2hex( this.get( this.OPT.GREEN ) ); + this.getElement( this.ID.B ).value = this.get( this.OPT.BLUE ); + this.getElement( this.ID.B_HEX ).innerHTML = B.dec2hex( this.get( this.OPT.BLUE ) ); + this.getElement( this.ID.HEX ).value = this.get( this.OPT.HEX ); + }, + _onHueSliderChange: function( N ) { + var L = this._getH(), + K = B.hsv2rgb( L, 1, 1 ), + M = "rgb(" + K.join( "," ) + ")"; + this.set( this.OPT.HUE, L, true ); + E.setStyle( this.getElement( this.ID.PICKER_BG ), "background-color", M ); + if ( this.hueSlider.valueChangeSource !== D.SOURCE_SET_VALUE ) { + this._getValuesFromSliders(); + } + this._updateFormFields(); + this._updateSwatch(); + }, + _onPickerSliderChange: function( M ) { + var L = this._getS(), + K = this._getV(); + this.set( this.OPT.SATURATION, Math.round( L * 100 ), true ); + this.set( this.OPT.VALUE, Math.round( K * 100 ), true ); + if ( this.pickerSlider.valueChangeSource !== D.SOURCE_SET_VALUE ) { + this._getValuesFromSliders(); + } + this._updateFormFields(); + this._updateSwatch(); + }, + _getCommand: function( K ) { + var L = I.getCharCode( K ); + if ( L === 38 ) { + return 3; + } else { + if ( L === 13 ) { + return 6; + } else { + if ( L === 40 ) { + return 4; + } else { + if ( L >= 48 && L <= 57 ) { + return 1; + } else { + if ( L >= 97 && L <= 102 ) { + return 2; + } else { + if ( L >= 65 && L <= 70 ) { + return 2; + } else { + if ( "8, 9, 13, 27, 37, 39".indexOf( L ) > -1 || K.ctrlKey || K.metaKey ) { + return 5; + } else { + return 0; + } + } + } + } + } + } + } + }, + _useFieldValue: function( L, K, N ) { + var M = K.value; if ( N !== this.OPT.HEX ) { + M = parseInt( M, 10 ); + } + if ( M !== this.get( N ) ) { + this.set( N, M ); + } + }, + _rgbFieldKeypress: function( M, K, O ) { + var N = this._getCommand( M ), + L = ( M.shiftKey ) ? 10 : 1; + switch ( N ) { + case 6: + this._useFieldValue.apply( this, arguments ); + break;case 3: + this.set( O, Math.min( this.get( O ) + L, 255 ) ); + this._updateFormFields(); + break;case 4: + this.set( O, Math.max( this.get( O ) - L, 0 ) ); + this._updateFormFields(); + break;default: + } + }, + _hexFieldKeypress: function( L, K, N ) { + var M = this._getCommand( L ); + if ( M === 6 ) { + this._useFieldValue.apply( this, arguments ); + } + }, + _hexOnly: function( L, K ) { + var M = this._getCommand( L ); + switch ( M ) { + case 6: + case 5: + case 1: + break;case 2: + if ( K !== true ) { + break; + }default: + I.stopEvent( L ); + return false; + } + }, + _numbersOnly: function( K ) { + return this._hexOnly( K, true ); + }, + getElement: function( K ) { + return this.get( this.OPT.ELEMENTS )[ this.get( this.OPT.IDS )[ K ] ]; + }, + _createElements: function() { + var N, M, P, O, L, + K = this.get( this.OPT.IDS ), + Q = this.get( this.OPT.TXT ), + S = this.get( this.OPT.IMAGES ), + R = function( U, V ) { + var W = document.createElement( U ); + if ( V ) { + C.augmentObject( W, V, true ); + } + return W; + }, + T = function( U, V ) { + var W = C.merge({ autocomplete: "off", value: "0", size: 3, maxlength: 3 }, V ); + W.name = W.id; + return new R( U, W ); + }; + L = this.get( "element" ); + N = new R( "div", { id: K[ this.ID.PICKER_BG ], className: "yui-picker-bg", tabIndex: -1, hideFocus: true } ); + M = new R( "div", { id: K[ this.ID.PICKER_THUMB ], className: "yui-picker-thumb" } ); + P = new R( "img", { src: S.PICKER_THUMB } ); + M.appendChild( P ); + N.appendChild( M ); + L.appendChild( N ); + N = new R( "div", { id: K[ this.ID.HUE_BG ], className: "yui-picker-hue-bg", tabIndex: -1, hideFocus: true } ); + M = new R( "div", { id: K[ this.ID.HUE_THUMB ], className: "yui-picker-hue-thumb" } ); + P = new R( "img", { src: S.HUE_THUMB } ); + M.appendChild( P ); + N.appendChild( M ); + L.appendChild( N ); + N = new R( "div", { id: K[ this.ID.CONTROLS ], className: "yui-picker-controls" } ); + L.appendChild( N ); + L = N; + N = new R( "div", { className: "hd" } ); + M = new R( "a", { id: K[ this.ID.CONTROLS_LABEL ], href: "#" } ); + N.appendChild( M ); + L.appendChild( N ); + N = new R( "div", { className: "bd" } ); + L.appendChild( N ); + L = N; + N = new R( "ul", { id: K[ this.ID.RGB_CONTROLS ], className: "yui-picker-rgb-controls" } ); + M = new R( "li" ); + M.appendChild( document.createTextNode( Q.R + " " ) ); + O = new T( "input", { id: K[ this.ID.R ], className: "yui-picker-r" } ); + M.appendChild( O ); + N.appendChild( M ); + M = new R( "li" ); + M.appendChild( document.createTextNode( Q.G + " " ) ); + O = new T( "input", { id: K[ this.ID.G ], className: "yui-picker-g" } ); + M.appendChild( O ); + N.appendChild( M ); + M = new R( "li" ); + M.appendChild( document.createTextNode( Q.B + " " ) ); + O = new T( "input", { id: K[ this.ID.B ], className: "yui-picker-b" } ); + M.appendChild( O ); + N.appendChild( M ); + L.appendChild( N ); + N = new R( "ul", { id: K[ this.ID.HSV_CONTROLS ], className: "yui-picker-hsv-controls" } ); + M = new R( "li" ); + M.appendChild( document.createTextNode( Q.H + " " ) ); + O = new T( "input", { id: K[ this.ID.H ], className: "yui-picker-h" } ); + M.appendChild( O ); + M.appendChild( document.createTextNode( " " + Q.DEG ) ); + N.appendChild( M ); + M = new R( "li" ); + M.appendChild( document.createTextNode( Q.S + " " ) ); + O = new T( "input", { id: K[ this.ID.S ], className: "yui-picker-s" } ); + M.appendChild( O ); + M.appendChild( document.createTextNode( " " + Q.PERCENT ) ); + N.appendChild( M ); + M = new R( "li" ); + M.appendChild( document.createTextNode( Q.V + " " ) ); + O = new T( "input", { id: K[ this.ID.V ], className: "yui-picker-v" } ); + M.appendChild( O ); + M.appendChild( document.createTextNode( " " + Q.PERCENT ) ); + N.appendChild( M ); + L.appendChild( N ); + N = new R( "ul", { id: K[ this.ID.HEX_SUMMARY ], className: "yui-picker-hex_summary" } ); + M = new R( "li", { id: K[ this.ID.R_HEX ] } ); + N.appendChild( M ); + M = new R( "li", { id: K[ this.ID.G_HEX ] } ); + N.appendChild( M ); + M = new R( "li", { id: K[ this.ID.B_HEX ] } ); + N.appendChild( M ); + L.appendChild( N ); + N = new R( "div", { id: K[ this.ID.HEX_CONTROLS ], className: "yui-picker-hex-controls" } ); + N.appendChild( document.createTextNode( Q.HEX + " " ) ); + M = new T( "input", { id: K[ this.ID.HEX ], className: "yui-picker-hex", size: 6, maxlength: 6 } ); + N.appendChild( M ); + L.appendChild( N ); + L = this.get( "element" ); + N = new R( "div", { id: K[ this.ID.SWATCH ], className: "yui-picker-swatch" } ); + L.appendChild( N ); + N = new R( "div", { id: K[ this.ID.WEBSAFE_SWATCH ], className: "yui-picker-websafe-swatch" } ); + L.appendChild( N ); + }, + _attachRGBHSV: function( L, K ) { + I.on( this.getElement( L ), "keydown", function( N, M ) { + M._rgbFieldKeypress( N, this, K ); + }, this ); + I.on( this.getElement( L ), "keypress", this._numbersOnly, this, true ); + I.on( this.getElement( L ), "blur", function( N, M ) { + M._useFieldValue( N, this, K ); + }, this ); + }, + _updateRGB: function() { + var K = [ this.get( this.OPT.RED ), this.get( this.OPT.GREEN ), this.get( this.OPT.BLUE ) ]; + this.set( this.OPT.RGB, K ); + this._updateSliders(); + }, + _initElements: function() { + var O = this.OPT, + N = this.get( O.IDS ), + L = this.get( O.ELEMENTS ), + K, M, P; + for ( K in this.ID ) { + if ( C.hasOwnProperty( this.ID, K ) ) { + N[ this.ID[ K ] ] = N[ K ]; + } + } + M = E.get( N[ this.ID.PICKER_BG ] ); + if ( !M ) { + this._createElements(); + } else {} + for ( K in N ) { + if ( C.hasOwnProperty( N, K ) ) { + M = E.get( N[ K ] ); + P = E.generateId( M ); + N[ K ] = P; + N[ N[ K ] ] = P; + L[ P ] = M; + } + } + }, + initPicker: function() { + this._initSliders(); + this._bindUI(); + this.syncUI( true ); + }, + _initSliders: function() { + var K = this.ID, + L = this.get( this.OPT.PICKER_SIZE ); + this.hueSlider = D.getVertSlider( this.getElement( K.HUE_BG ), this.getElement( K.HUE_THUMB ), 0, L ); + this.pickerSlider = D.getSliderRegion( this.getElement( K.PICKER_BG ), this.getElement( K.PICKER_THUMB ), 0, L, 0, L ); + this.set( this.OPT.ANIMATE, this.get( this.OPT.ANIMATE ) ); + }, + _bindUI: function() { + var K = this.ID, + L = this.OPT; this.hueSlider.subscribe( "change", this._onHueSliderChange, this, true ); + this.pickerSlider.subscribe( "change", this._onPickerSliderChange, this, true ); + I.on( this.getElement( K.WEBSAFE_SWATCH ), "click", function( M ) { + this.setValue( this.get( L.WEBSAFE ) ); + }, this, true ); + I.on( this.getElement( K.CONTROLS_LABEL ), "click", function( M ) { + this.set( L.SHOW_CONTROLS, !this.get( L.SHOW_CONTROLS ) ); + I.preventDefault( M ); + }, this, true ); + this._attachRGBHSV( K.R, L.RED ); + this._attachRGBHSV( K.G, L.GREEN ); + this._attachRGBHSV( K.B, L.BLUE ); + this._attachRGBHSV( K.H, L.HUE ); + this._attachRGBHSV( K.S, L.SATURATION ); + this._attachRGBHSV( K.V, L.VALUE ); + I.on( this.getElement( K.HEX ), "keydown", function( N, M ) { + M._hexFieldKeypress( N, this, L.HEX ); + }, this ); + I.on( this.getElement( this.ID.HEX ), "keypress", this._hexOnly, this, true ); + I.on( this.getElement( this.ID.HEX ), "blur", function( N, M ) { + M._useFieldValue( N, this, L.HEX ); + }, this ); + }, + syncUI: function( K ) { + this.skipAnim = K; this._updateRGB(); + this.skipAnim = false; + }, + _updateRGBFromHSV: function() { + var L = [ this.get( this.OPT.HUE ), this.get( this.OPT.SATURATION ) / 100, this.get( this.OPT.VALUE ) / 100 ], + K = B.hsv2rgb( L ); + this.set( this.OPT.RGB, K ); + this._updateSliders(); + }, + _updateHex: function() { + var N = this.get( this.OPT.HEX ), + K = N.length, + O, M, L; + if ( K === 3 ) { + O = N.split( "" ); + for ( M = 0; M < K; M = M + 1 ) { + O[ M ] = O[ M ] + O[ M ]; + } + N = O.join( "" ); + } + if ( N.length !== 6 ) { + return false; + } + L = B.hex2rgb( N ); + this.setValue( L ); + }, + _hideShowEl: function( M, K ) { + var L = ( C.isString( M ) ? this.getElement( M ) : M ); + E.setStyle( L, "display", ( K ) ? "" : "none" ); + }, + initAttributes: function( K ) { + K = K || {}; + G.superclass.initAttributes.call( this, K ); + this.setAttributeConfig( this.OPT.PICKER_SIZE, { value: K.size || this.DEFAULT.PICKER_SIZE } ); + this.setAttributeConfig( this.OPT.HUE, { value: K.hue || 0, validator: C.isNumber } ); + this.setAttributeConfig( this.OPT.SATURATION, { value: K.saturation || 0, validator: C.isNumber } ); + this.setAttributeConfig( this.OPT.VALUE, { value: C.isNumber( K.value ) ? K.value : 100, validator: C.isNumber } ); + this.setAttributeConfig( this.OPT.RED, { value: C.isNumber( K.red ) ? K.red : 255, validator: C.isNumber } ); + this.setAttributeConfig( this.OPT.GREEN, { value: C.isNumber( K.green ) ? K.green : 255, validator: C.isNumber } ); + this.setAttributeConfig( this.OPT.BLUE, { value: C.isNumber( K.blue ) ? K.blue : 255, validator: C.isNumber } ); + this.setAttributeConfig( this.OPT.HEX, { value: K.hex || "FFFFFF", validator: C.isString } ); + this.setAttributeConfig( this.OPT.RGB, { + value: K.rgb || [ 255, 255, 255 ], method: function( O ) { + this.set( this.OPT.RED, O[ 0 ], true ); + this.set( this.OPT.GREEN, O[ 1 ], true ); + this.set( this.OPT.BLUE, O[ 2 ], true ); + var Q = B.websafe( O ), + P = B.rgb2hex( O ), + N = B.rgb2hsv( O ); + this.set( this.OPT.WEBSAFE, Q, true ); + this.set( this.OPT.HEX, P, true ); + if ( N[ 1 ] ) { + this.set( this.OPT.HUE, N[ 0 ], true ); + } + this.set( this.OPT.SATURATION, Math.round( N[ 1 ] * 100 ), true ); + this.set( this.OPT.VALUE, Math.round( N[ 2 ] * 100 ), true ); + }, + readonly: true } ); + this.setAttributeConfig( this.OPT.CONTAINER, { + value: null, method: function( N ) { + if ( N ) { + N.showEvent.subscribe( function() { + this.pickerSlider.focus(); + }, this, true ); + } + } } ); + this.setAttributeConfig( this.OPT.WEBSAFE, { value: K.websafe || [ 255, 255, 255 ] } ); + var M = K.ids || C.merge( {}, this.ID ), + L; + if ( !K.ids && J > 1 ) { + for ( L in M ) { + if ( C.hasOwnProperty( M, L ) ) { + M[ L ] = M[ L ] + J; + } + } + } + this.setAttributeConfig( this.OPT.IDS, { value: M, writeonce: true } ); + this.setAttributeConfig( this.OPT.TXT, { value: K.txt || this.TXT, writeonce: true } ); + this.setAttributeConfig( this.OPT.IMAGES, { value: K.images || this.IMAGE, writeonce: true } ); + this.setAttributeConfig( this.OPT.ELEMENTS, { + value: {}, + readonly: true } ); + this.setAttributeConfig( this.OPT.SHOW_CONTROLS, { + value: C.isBoolean( K.showcontrols ) ? K.showcontrols : true, method: function( N ) { + var O = E.getElementsByClassName( "bd", "div", this.getElement( this.ID.CONTROLS ) )[ 0 ]; + this._hideShowEl( O, N ); + this.getElement( this.ID.CONTROLS_LABEL ).innerHTML = ( N ) ? this.get( this.OPT.TXT ).HIDE_CONTROLS : this.get( this.OPT.TXT ).SHOW_CONTROLS; + } } ); + this.setAttributeConfig( this.OPT.SHOW_RGB_CONTROLS, { + value: C.isBoolean( K.showrgbcontrols ) ? K.showrgbcontrols : true, method: function( N ) { + this._hideShowEl( this.ID.RGB_CONTROLS, N ); + } } ); + this.setAttributeConfig( this.OPT.SHOW_HSV_CONTROLS, { + value: C.isBoolean( K.showhsvcontrols ) ? K.showhsvcontrols : false, method: function( N ) { + this._hideShowEl( this.ID.HSV_CONTROLS, N ); + if ( N && this.get( this.OPT.SHOW_HEX_SUMMARY ) ) { + this.set( this.OPT.SHOW_HEX_SUMMARY, false ); + } + } } ); + this.setAttributeConfig( this.OPT.SHOW_HEX_CONTROLS, { + value: C.isBoolean( K.showhexcontrols ) ? K.showhexcontrols : false, method: function( N ) { + this._hideShowEl( this.ID.HEX_CONTROLS, N ); + } } ); + this.setAttributeConfig( this.OPT.SHOW_WEBSAFE, { + value: C.isBoolean( K.showwebsafe ) ? K.showwebsafe : true, method: function( N ) { + this._hideShowEl( this.ID.WEBSAFE_SWATCH, N ); + } } ); + this.setAttributeConfig( this.OPT.SHOW_HEX_SUMMARY, { + value: C.isBoolean( K.showhexsummary ) ? K.showhexsummary : true, method: function( N ) { + this._hideShowEl( this.ID.HEX_SUMMARY, N ); + if ( N && this.get( this.OPT.SHOW_HSV_CONTROLS ) ) { + this.set( this.OPT.SHOW_HSV_CONTROLS, false ); + } + } } ); + this.setAttributeConfig( this.OPT.ANIMATE, { + value: C.isBoolean( K.animate ) ? K.animate : true, method: function( N ) { + if ( this.pickerSlider ) { + this.pickerSlider.animate = N; + this.hueSlider.animate = N; + } + } } ); + this.on( this.OPT.HUE + "Change", this._updateRGBFromHSV, this, true ); + this.on( this.OPT.SATURATION + "Change", this._updateRGBFromHSV, this, true ); + this.on( this.OPT.VALUE + "Change", this._updateRGBFromHSV, this, true ); + this.on( this.OPT.RED + "Change", this._updateRGB, this, true ); + this.on( this.OPT.GREEN + "Change", this._updateRGB, this, true ); + this.on( this.OPT.BLUE + "Change", this._updateRGB, this, true ); + this.on( this.OPT.HEX + "Change", this._updateHex, this, true ); + this._initElements(); + } } ); + YAHOO.widget.ColorPicker = G; +})(); +YAHOO.register( "colorpicker", YAHOO.widget.ColorPicker, { version: "2.7.0", build: "1796" } ); + +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ ( function() { + var B = YAHOO.util; + var A = function( D, C, E, F ) { + if ( !D ) {} + this.init( D, C, E, F ); + }; + A.NAME = "Anim"; + A.prototype = { + toString: function() { + var C = this.getEl() || {}; + var D = C.id || C.tagName; + return ( this.constructor.NAME + ": " + D ); + }, + patterns: { noNegatives: /width|height|opacity|padding/i, offsetAttribute: /^((width|height)|(top|left))$/, defaultUnit: /width|height|top$|bottom$|left$|right$/i, offsetUnit: /\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i }, + doMethod: function( C, E, D ) { + return this.method( this.currentFrame, E, D - E, this.totalFrames ); + }, + setAttribute: function( C, F, E ) { + var D = this.getEl(); + if ( this.patterns.noNegatives.test( C ) ) { + F = ( F > 0 ) ? F : 0; + } + if ( "style" in D ) { + B.Dom.setStyle( D, C, F + E ); + } else { + if ( C in D ) { + D[ C ] = F; + } + } + }, + getAttribute: function( C ) { + var E = this.getEl(); + var G = B.Dom.getStyle( E, C ); + if ( G !== "auto" && !this.patterns.offsetUnit.test( G ) ) { + return parseFloat( G ); + } + var D = this.patterns.offsetAttribute.exec( C ) || []; + var H = !!( D[ 3 ] ); + var F = !!( D[ 2 ] ); + if ( "style" in E ) { + if ( F || ( B.Dom.getStyle( E, "position" ) == "absolute" && H ) ) { + G = E[ "offset" + D[ 0 ].charAt( 0 ).toUpperCase() + D[ 0 ].substr( 1 ) ]; + } else { + G = 0; + } + } else { + if ( C in E ) { + G = E[ C ]; + } + } + return G; + }, + getDefaultUnit: function( C ) { + if ( this.patterns.defaultUnit.test( C ) ) { + return "px"; + } + return ""; + }, + setRuntimeAttribute: function( D ) { + var I; var E; var F = this.attributes; this.runtimeAttributes[ D ] = {}; + var H = function( J ) { + return ( typeof J !== "undefined" ); + }; + if ( !H( F[ D ][ "to" ] ) && !H( F[ D ][ "by" ] ) ) { + return false; + } + I = ( H( F[ D ][ "from" ] ) ) ? F[ D ][ "from" ] : this.getAttribute( D ); + if ( H( F[ D ][ "to" ] ) ) { + E = F[ D ][ "to" ]; + } else { + if ( H( F[ D ][ "by" ] ) ) { + if ( I.constructor == Array ) { + E = []; + for ( var G = 0, C = I.length; G < C; ++G ) { + E[ G ] = I[ G ] + F[ D ][ "by" ][ G ] * 1; + } + } else { + E = I + F[ D ][ "by" ] * 1; + } + } + } + this.runtimeAttributes[ D ].start = I; + this.runtimeAttributes[ D ].end = E; + this.runtimeAttributes[ D ].unit = ( H( F[ D ].unit ) ) ? F[ D ][ "unit" ] : this.getDefaultUnit( D ); + return true; + }, + init: function( E, J, I, C ) { + var D = false; var F = null; var H = 0; E = B.Dom.get( E ); + this.attributes = J || {}; + this.duration = !YAHOO.lang.isUndefined( I ) ? I : 1; + this.method = C || B.Easing.easeNone; + this.useSeconds = true; + this.currentFrame = 0; + this.totalFrames = B.AnimMgr.fps; + this.setEl = function( M ) { + E = B.Dom.get( M ); + }; + this.getEl = function() { + return E; + }; + this.isAnimated = function() { + return D; + }; + this.getStartTime = function() { + return F; + }; + this.runtimeAttributes = {}; + this.animate = function() { + if ( this.isAnimated() ) { + return false; + } + this.currentFrame = 0; + this.totalFrames = ( this.useSeconds ) ? Math.ceil( B.AnimMgr.fps * this.duration ) : this.duration; + if ( this.duration === 0 && this.useSeconds ) { + this.totalFrames = 1; + } + B.AnimMgr.registerElement( this ); + return true; + }; + this.stop = function( M ) { + if ( !this.isAnimated() ) { + return false; + } + if ( M ) { + this.currentFrame = this.totalFrames; + this._onTween.fire(); + } + B.AnimMgr.stop( this ); + }; + var L = function() { + this.onStart.fire(); + this.runtimeAttributes = {}; + for ( var M in this.attributes ) { + this.setRuntimeAttribute( M ); + } + D = true; + H = 0; + F = new Date(); + }; + var K = function() { + var O = { duration: new Date() - this.getStartTime(), currentFrame: this.currentFrame }; O.toString = function() { + return ( "duration: " + O.duration + ", currentFrame: " + O.currentFrame ); + }; + this.onTween.fire( O ); + var N = this.runtimeAttributes; + for ( var M in N ) { + this.setAttribute( M, this.doMethod( M, N[ M ].start, N[ M ].end ), N[ M ].unit ); + } + H += 1; + }; + var G = function() { + var M = ( new Date() - F ) / 1000; + var N = { duration: M, frames: H, fps: H / M }; N.toString = function() { + return ( "duration: " + N.duration + ", frames: " + N.frames + ", fps: " + N.fps ); + }; + D = false; + H = 0; + this.onComplete.fire( N ); + }; + this._onStart = new B.CustomEvent( "_start", this, true ); + this.onStart = new B.CustomEvent( "start", this ); + this.onTween = new B.CustomEvent( "tween", this ); + this._onTween = new B.CustomEvent( "_tween", this, true ); + this.onComplete = new B.CustomEvent( "complete", this ); + this._onComplete = new B.CustomEvent( "_complete", this, true ); + this._onStart.subscribe( L ); + this._onTween.subscribe( K ); + this._onComplete.subscribe( G ); + } }; B.Anim = A; +})(); +YAHOO.util.AnimMgr = new function() { + var C = null; + var B = []; + var A = 0; + this.fps = 1000; + this.delay = 1; + this.registerElement = function( F ) { + B[ B.length ] = F; + A += 1; + F._onStart.fire(); + this.start(); + }; + this.unRegister = function( G, F ) { + F = F || E( G ); + if ( !G.isAnimated() || F == -1 ) { + return false; + } + G._onComplete.fire(); + B.splice( F, 1 ); + A -= 1; + if ( A <= 0 ) { + this.stop(); + } + return true; + }; + this.start = function() { + if ( C === null ) { + C = setInterval( this.run, this.delay ); + } + }; + this.stop = function( H ) { + if ( !H ) { + clearInterval( C ); + for ( var G = 0, F = B.length; G < F; ++G ) { + this.unRegister( B[ 0 ], 0 ); + } + B = []; + C = null; + A = 0; + } else { + this.unRegister( H ); + } + }; + this.run = function() { + for ( var H = 0, F = B.length; H < F; ++H ) { + var G = B[ H ]; + if ( !G || !G.isAnimated() ) { + continue; + } + if ( G.currentFrame < G.totalFrames || G.totalFrames === null ) { + G.currentFrame += 1; + if ( G.useSeconds ) { + D( G ); + } + G._onTween.fire(); + } else { + YAHOO.util.AnimMgr.stop( G, H ); + } + } + }; + var E = function( H ) { + for ( var G = 0, F = B.length; G < F; ++G ) { + if ( B[ G ] == H ) { + return G; + } + } + return -1; + }; + var D = function( G ) { + var J = G.totalFrames; + var I = G.currentFrame; + var H = ( G.currentFrame * G.duration * 1000 / G.totalFrames ); + var F = ( new Date() - G.getStartTime() ); + var K = 0; + if ( F < G.duration * 1000 ) { + K = Math.round( ( F / H - 1 ) * G.currentFrame ); + } else { + K = J - ( I + 1 ); + } + if ( K > 0 && isFinite( K ) ) { + if ( G.currentFrame + K >= J ) { + K = J - ( I + 1 ); + } + G.currentFrame += K; + } + }; +}; +YAHOO.util.Bezier = new function() { + this.getPosition = function( E, D ) { + var F = E.length; + var C = []; + for ( var B = 0; B < F; ++B ) { + C[ B ] = [ E[ B ][ 0 ], E[ B ][ 1 ] ]; + } + for ( var A = 1; A < F; ++A ) { + for ( B = 0; B < F - A; ++B ) { + C[ B ][ 0 ] = ( 1 - D ) * C[ B ][ 0 ] + D * C[ parseInt( B + 1, 10 ) ][ 0 ]; + C[ B ][ 1 ] = ( 1 - D ) * C[ B ][ 1 ] + D * C[ parseInt( B + 1, 10 ) ][ 1 ]; + } + } + return [ C[ 0 ][ 0 ], C[ 0 ][ 1 ] ]; + }; +}; +(function() { + var A = function( F, E, G, H ) { + A.superclass.constructor.call( this, F, E, G, H ); + }; + A.NAME = "ColorAnim"; + A.DEFAULT_BGCOLOR = "#fff"; + var C = YAHOO.util; + YAHOO.extend( A, C.Anim ); + var D = A.superclass; + var B = A.prototype; + B.patterns.color = /color$/i; + B.patterns.rgb = /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i; + B.patterns.hex = /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i; + B.patterns.hex3 = /^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i; + B.patterns.transparent = /^transparent|rgba\(0, 0, 0, 0\)$/; + B.parseColor = function( E ) { + if ( E.length == 3 ) { + return E; + } + var F = this.patterns.hex.exec( E ); + if ( F && F.length == 4 ) { + return [ parseInt( F[ 1 ], 16 ), parseInt( F[ 2 ], 16 ), parseInt( F[ 3 ], 16 ) ]; + } + F = this.patterns.rgb.exec( E ); + if ( F && F.length == 4 ) { + return [ parseInt( F[ 1 ], 10 ), parseInt( F[ 2 ], 10 ), parseInt( F[ 3 ], 10 ) ]; + } + F = this.patterns.hex3.exec( E ); + if ( F && F.length == 4 ) { + return [ parseInt( F[ 1 ] + F[ 1 ], 16 ), parseInt( F[ 2 ] + F[ 2 ], 16 ), parseInt( F[ 3 ] + F[ 3 ], 16 ) ]; + } + return null; + }; + B.getAttribute = function( E ) { + var G = this.getEl(); + if ( this.patterns.color.test( E ) ) { + var I = YAHOO.util.Dom.getStyle( G, E ); + var H = this; + if ( this.patterns.transparent.test( I ) ) { + var F = YAHOO.util.Dom.getAncestorBy( G, function( J ) { + return !H.patterns.transparent.test( I ); + }); + if ( F ) { + I = C.Dom.getStyle( F, E ); + } else { + I = A.DEFAULT_BGCOLOR; + } + } + } else { + I = D.getAttribute.call( this, E ); + } + return I; + }; + B.doMethod = function( F, J, G ) { + var I; + if ( this.patterns.color.test( F ) ) { + I = []; + for ( var H = 0, E = J.length; H < E; ++H ) { + I[ H ] = D.doMethod.call( this, F, J[ H ], G[ H ] ); + } + I = "rgb(" + Math.floor( I[ 0 ] ) + "," + Math.floor( I[ 1 ] ) + "," + Math.floor( I[ 2 ] ) + ")"; + } else { + I = D.doMethod.call( this, F, J, G ); + } + return I; + }; + B.setRuntimeAttribute = function( F ) { + D.setRuntimeAttribute.call( this, F ); + if ( this.patterns.color.test( F ) ) { + var H = this.attributes; + var J = this.parseColor( this.runtimeAttributes[ F ].start ); + var G = this.parseColor( this.runtimeAttributes[ F ].end ); + if ( typeof H[ F ][ "to" ] === "undefined" && typeof H[ F ][ "by" ] !== "undefined" ) { + G = this.parseColor( H[ F ].by ); + for ( var I = 0, E = J.length; I < E; ++I ) { + G[ I ] = J[ I ] + G[ I ]; + } + } + this.runtimeAttributes[ F ].start = J; + this.runtimeAttributes[ F ].end = G; + } + }; + C.ColorAnim = A; +})(); +/* +TERMS OF USE - EASING EQUATIONS +Open source under the BSD License. +Copyright 2001 Robert Penner All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +YAHOO.util.Easing = { + easeNone: function( B, A, D, C ) { + return D * B / C + A; + }, + easeIn: function( B, A, D, C ) { + return D * ( B /= C ) * B + A; + }, + easeOut: function( B, A, D, C ) { + return -D * ( B /= C ) * ( B - 2 ) + A; + }, + easeBoth: function( B, A, D, C ) { + if ( ( B /= C / 2 ) < 1 ) { + return D / 2 * B * B + A; + } + return -D / 2 * ( ( --B ) * ( B - 2 ) - 1 ) + A; + }, + easeInStrong: function( B, A, D, C ) { + return D * ( B /= C ) * B * B * B + A; + }, + easeOutStrong: function( B, A, D, C ) { + return -D * ( ( B = B / C - 1 ) * B * B * B - 1 ) + A; + }, + easeBothStrong: function( B, A, D, C ) { + if ( ( B /= C / 2 ) < 1 ) { + return D / 2 * B * B * B * B + A; + } + return -D / 2 * ( ( B -= 2 ) * B * B * B - 2 ) + A; + }, + elasticIn: function( C, A, G, F, B, E ) { + if ( C == 0 ) { + return A; + } + if ( ( C /= F ) == 1 ) { + return A + G; + } + if ( !E ) { + E = F * 0.3; + } + if ( !B || B < Math.abs( G ) ) { + B = G; + var D = E / 4; + } else { + var D = E / ( 2 * Math.PI ) * Math.asin( G / B ); + } + return -( B * Math.pow( 2, 10 * ( C -= 1 ) ) * Math.sin( ( C * F - D ) * ( 2 * Math.PI ) / E ) ) + A; + }, + elasticOut: function( C, A, G, F, B, E ) { + if ( C == 0 ) { + return A; + } + if ( ( C /= F ) == 1 ) { + return A + G; + } + if ( !E ) { + E = F * 0.3; + } + if ( !B || B < Math.abs( G ) ) { + B = G; + var D = E / 4; + } else { + var D = E / ( 2 * Math.PI ) * Math.asin( G / B ); + } + return B * Math.pow( 2, -10 * C ) * Math.sin( ( C * F - D ) * ( 2 * Math.PI ) / E ) + G + A; + }, + elasticBoth: function( C, A, G, F, B, E ) { + if ( C == 0 ) { + return A; + } + if ( ( C /= F / 2 ) == 2 ) { + return A + G; + } + if ( !E ) { + E = F * ( 0.3 * 1.5 ); + } + if ( !B || B < Math.abs( G ) ) { + B = G; + var D = E / 4; + } else { + var D = E / ( 2 * Math.PI ) * Math.asin( G / B ); + } + if ( C < 1 ) { + return -0.5 * ( B * Math.pow( 2, 10 * ( C -= 1 ) ) * Math.sin( ( C * F - D ) * ( 2 * Math.PI ) / E ) ) + A; + } + return B * Math.pow( 2, -10 * ( C -= 1 ) ) * Math.sin( ( C * F - D ) * ( 2 * Math.PI ) / E ) * 0.5 + G + A; + }, + backIn: function( B, A, E, D, C ) { + if ( typeof C == "undefined" ) { + C = 1.70158; + } + return E * ( B /= D ) * B * ( ( C + 1 ) * B - C ) + A; + }, + backOut: function( B, A, E, D, C ) { + if ( typeof C == "undefined" ) { + C = 1.70158; + } + return E * ( ( B = B / D - 1 ) * B * ( ( C + 1 ) * B + C ) + 1 ) + A; + }, + backBoth: function( B, A, E, D, C ) { + if ( typeof C == "undefined" ) { + C = 1.70158; + } + if ( ( B /= D / 2 ) < 1 ) { + return E / 2 * ( B * B * ( ( ( C *= ( 1.525 ) ) + 1 ) * B - C ) ) + A; + } + return E / 2 * ( ( B -= 2 ) * B * ( ( ( C *= ( 1.525 ) ) + 1 ) * B + C ) + 2 ) + A; + }, + bounceIn: function( B, A, D, C ) { + return D - YAHOO.util.Easing.bounceOut( C - B, 0, D, C ) + A; + }, + bounceOut: function( B, A, D, C ) { + if ( ( B /= C ) < ( 1 / 2.75 ) ) { + return D * ( 7.5625 * B * B ) + A; + } else { + if ( B < ( 2 / 2.75 ) ) { + return D * ( 7.5625 * ( B -= ( 1.5 / 2.75 ) ) * B + 0.75 ) + A; + } else { + if ( B < ( 2.5 / 2.75 ) ) { + return D * ( 7.5625 * ( B -= ( 2.25 / 2.75 ) ) * B + 0.9375 ) + A; + } + } + } + return D * ( 7.5625 * ( B -= ( 2.625 / 2.75 ) ) * B + 0.984375 ) + A; + }, + bounceBoth: function( B, A, D, C ) { + if ( B < C / 2 ) { + return YAHOO.util.Easing.bounceIn( B * 2, 0, D, C ) * 0.5 + A; + } + return YAHOO.util.Easing.bounceOut( B * 2 - C, 0, D, C ) * 0.5 + D * 0.5 + A; + } }; +(function() { + var A = function( H, G, I, J ) { + if ( H ) { + A.superclass.constructor.call( this, H, G, I, J ); + } + }; + A.NAME = "Motion"; + var E = YAHOO.util; + YAHOO.extend( A, E.ColorAnim ); + var F = A.superclass; + var C = A.prototype; + C.patterns.points = /^points$/i; + C.setAttribute = function( G, I, H ) { + if ( this.patterns.points.test( G ) ) { + H = H || "px"; + F.setAttribute.call( this, "left", I[ 0 ], H ); + F.setAttribute.call( this, "top", I[ 1 ], H ); + } else { + F.setAttribute.call( this, G, I, H ); + } + }; + C.getAttribute = function( G ) { + if ( this.patterns.points.test( G ) ) { + var H = [ F.getAttribute.call( this, "left" ), F.getAttribute.call( this, "top" ) ]; + } else { + H = F.getAttribute.call( this, G ); + } + return H; + }; + C.doMethod = function( G, K, H ) { + var J = null; + if ( this.patterns.points.test( G ) ) { + var I = this.method( this.currentFrame, 0, 100, this.totalFrames ) / 100; + J = E.Bezier.getPosition( this.runtimeAttributes[ G ], I ); + } else { + J = F.doMethod.call( this, G, K, H ); + } + return J; + }; + C.setRuntimeAttribute = function( P ) { + if ( this.patterns.points.test( P ) ) { + var H = this.getEl(); + var J = this.attributes; + var G; + var L = J[ "points" ][ "control" ] || []; + var I; + var M, O; + if ( L.length > 0 && !( L[ 0 ] instanceof Array ) ) { + L = [ L ]; + } else { + var K = []; + for ( M = 0, O = L.length; M < O; ++M ) { + K[ M ] = L[ M ]; + } + L = K; + } + if ( E.Dom.getStyle( H, "position" ) == "static" ) { + E.Dom.setStyle( H, "position", "relative" ); + } + if ( D( J[ "points" ][ "from" ] ) ) { + E.Dom.setXY( H, J[ "points" ][ "from" ] ); + } else { + E.Dom.setXY( H, E.Dom.getXY( H ) ); + } + G = this.getAttribute( "points" ); + if ( D( J[ "points" ][ "to" ] ) ) { + I = B.call( this, J[ "points" ][ "to" ], G ); + var N = E.Dom.getXY( this.getEl() ); + for ( M = 0, O = L.length; M < O; ++M ) { + L[ M ] = B.call( this, L[ M ], G ); + } + } else { + if ( D( J[ "points" ][ "by" ] ) ) { + I = [ G[ 0 ] + J[ "points" ][ "by" ][ 0 ], G[ 1 ] + J[ "points" ][ "by" ][ 1 ] ]; + for ( M = 0, O = L.length; M < O; ++M ) { + L[ M ] = [ G[ 0 ] + L[ M ][ 0 ], G[ 1 ] + L[ M ][ 1 ] ]; + } + } + } + this.runtimeAttributes[ P ] = [ G ]; + if ( L.length > 0 ) { + this.runtimeAttributes[ P ] = this.runtimeAttributes[ P ].concat( L ); + } + this.runtimeAttributes[ P ][ this.runtimeAttributes[ P ].length ] = I; + } else { + F.setRuntimeAttribute.call( this, P ); + } + }; + var B = function( G, I ) { + var H = E.Dom.getXY( this.getEl() ); + G = [ G[ 0 ] - H[ 0 ] + I[ 0 ], G[ 1 ] - H[ 1 ] + I[ 1 ] ]; + return G; + }; + var D = function( G ) { + return ( typeof G !== "undefined" ); + }; + E.Motion = A; +})(); +(function() { + var D = function( F, E, G, H ) { + if ( F ) { + D.superclass.constructor.call( this, F, E, G, H ); + } + }; + D.NAME = "Scroll"; + var B = YAHOO.util; + YAHOO.extend( D, B.ColorAnim ); + var C = D.superclass; + var A = D.prototype; + A.doMethod = function( E, H, F ) { + var G = null; + if ( E == "scroll" ) { + G = [ this.method( this.currentFrame, H[ 0 ], F[ 0 ] - H[ 0 ], this.totalFrames ), this.method( this.currentFrame, H[ 1 ], F[ 1 ] - H[ 1 ], this.totalFrames ) ]; + } else { + G = C.doMethod.call( this, E, H, F ); + } + return G; + }; + A.getAttribute = function( E ) { + var G = null; + var F = this.getEl(); + if ( E == "scroll" ) { + G = [ F.scrollLeft, F.scrollTop ]; + } else { + G = C.getAttribute.call( this, E ); + } + return G; + }; + A.setAttribute = function( E, H, G ) { + var F = this.getEl(); + if ( E == "scroll" ) { + F.scrollLeft = H[ 0 ]; + F.scrollTop = H[ 1 ]; + } else { + C.setAttribute.call( this, E, H, G ); + } + }; + B.Scroll = D; +})(); +YAHOO.register( "animation", YAHOO.util.Anim, { version: "2.7.0", build: "1799" } ); diff --git a/sites/all/modules/contrib/ckeditor/plugins/counter/plugin.js b/sites/all/modules/contrib/ckeditor/plugins/counter/plugin.js new file mode 100644 index 0000000000..28ce72883d --- /dev/null +++ b/sites/all/modules/contrib/ckeditor/plugins/counter/plugin.js @@ -0,0 +1,62 @@ +/** + * @file Plugin to count symbols, symbols without blanks and words + */ +( function(){ + var emptyHtml = ' '; + CKEDITOR.plugins.add( 'counter', + { + init : function( editor ) + { + var spaceId = 'cke_counter_' + editor.name; + var spaceElement; + var ckeditorEventThemeSpace = 'uiSpace'; + var getSpaceElement = function() + { + if ( !spaceElement ) + spaceElement = CKEDITOR.document.getById( spaceId ); + return spaceElement; + }; + + if (Drupal.ckeditor_ver == 3) { + ckeditorEventThemeSpace = 'themeSpace'; + } + + editor.on( ckeditorEventThemeSpace, function( event ) + { + if ( event.data.space == 'bottom' ) + { + event.data.html += + 'Counter' + + '
      ' + emptyHtml + '
      '; + } + }); + + function count( ev ) + { + var space = getSpaceElement(); + var text = ev.editor.getData(); + // decode HTML entities; it also removes HTML tags, but works only if jQuery is available + text = jQuery('
      ').html(text).text(); + // remove all redundant blank symbols + text = text.replace(new RegExp('\\s+', 'g'), ' '); + // remove all blank symbols at the start and at the end + text = text.replace(new RegExp('(^\\s+)|(\\s+$)', 'g'), ''); + var symbols = text.length; + var words = text.split(' ').length; + //remove all blank symbols + text = text.replace(new RegExp('\\s+', 'g'), ''); + var symbols_wo_blanks = text.length; + + space.setHtml( '' + symbols + ' / ' + symbols_wo_blanks + ' symbols; ' + words + ' words' ); + } + + editor.on( 'dataReady', count ); + editor.on( 'blur', count ); + editor.on( 'focus', count ); + // Almost useless + //editor.on( 'saveSnapshot', count ); + // Requires too much resources + //editor.on( 'key', count ); + } + }); +})(); diff --git a/sites/all/modules/contrib/ckeditor/plugins/drupalbreaks/images/drupalbreak.png b/sites/all/modules/contrib/ckeditor/plugins/drupalbreaks/images/drupalbreak.png new file mode 100644 index 0000000000000000000000000000000000000000..97dfea4913a42c4fd5610bbd8960d0554c8a3c96 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh<3?#J|q#XfLjKx9jP7LeL$-D$|I0Jk_TqS@E z28JID4Ek%d4+2??B|(0{3=Yq3q=7g|-tI089jvk*Kn`btM`SSr1Gg{;GcwGY1JcS~ z;_2(kew&e(lhJDR!<1N{kdmj1V+hCfJPE{9O Z7-sHc-ySJA`djQ v4jede;?#*l2M!!Mafl in document. So, look + // for an image with class "cke_drupal_break" (the fake element). + var images = editor.document.getElementsByTag( 'img' ); + for ( var i = 0, len = images.count() ; i < len ; i++ ) + { + var img = images.getItem( i ); + if ( img.hasClass( 'cke_drupal_break' ) ) + { + if ( confirm( Drupal.t( 'The document already contains a teaser break. Do you want to proceed by removing it first?' ) ) ) + { + img.remove(); + break; + } + else + return; + } + } + + insertComment( 'break' ); + } + } ); + + editor.ui.addButton( 'DrupalPageBreak', + { + label : Drupal.t( 'Insert Page Break' ), + icon : this.path + 'images/drupalpagebreak.png', + command : 'drupalpagebreak' + }); + + editor.addCommand( 'drupalpagebreak', + { + exec : function() + { + insertComment( 'pagebreak' ); + } + } ); + + // This function effectively inserts the comment into the editor. + function insertComment( text ) + { + // Create the fake element that will be inserted into the document. + // The trick is declaring it as an
      , so it will behave like a + // block element (and in effect it behaves much like an
      ). + if ( !CKEDITOR.dom.comment.prototype.getAttribute ) { + CKEDITOR.dom.comment.prototype.getAttribute = function() { + return ''; + }; + CKEDITOR.dom.comment.prototype.attributes = { + align : '' + }; + } + var fakeElement = editor.createFakeElement( new CKEDITOR.dom.comment( text ), 'cke_drupal_' + text, 'hr' ); + + // This is the trick part. We can't use editor.insertElement() + // because we need to put the comment directly at level. + // We need to do range manipulation for that. + + // Get a DOM range from the current selection. + var range = editor.getSelection().getRanges()[0], + elementsPath = new CKEDITOR.dom.elementPath( range.getCommonAncestor( true ) ), + element = ( elementsPath.block && elementsPath.block.getParent() ) || elementsPath.blockLimit, + hasMoved; + + // If we're not in go moving the position to after the + // elements until reaching it. This may happen when inside tables, + // lists, blockquotes, etc. + while ( element && element.getName() != 'body' ) + { + range.moveToPosition( element, CKEDITOR.POSITION_AFTER_END ); + hasMoved = 1; + element = element.getParent(); + } + + // Split the current block. + if ( !hasMoved ) + range.splitBlock( 'p' ); + + // Insert the fake element into the document. + range.insertNode( fakeElement ); + + // Now, we move the selection to the best possible place following + // our fake element. + var next = fakeElement; + while ( ( next = next.getNext() ) && !range.moveToElementEditStart( next ) ) + {} + + range.select(); + } + }, + + afterInit : function( editor ) + { + // Adds the comment processing rules to the data filter, so comments + // are replaced by fake elements. + editor.dataProcessor.dataFilter.addRules( + { + comment : function( value ) + { + if ( !CKEDITOR.htmlParser.comment.prototype.getAttribute ) { + CKEDITOR.htmlParser.comment.prototype.getAttribute = function() { + return ''; + }; + CKEDITOR.htmlParser.comment.prototype.attributes = { + align : '' + }; + } + + if ( value == 'break' || value == 'pagebreak' ) + return editor.createFakeParserElement( new CKEDITOR.htmlParser.comment( value ), 'cke_drupal_' + value, 'hr' ); + + return value; + } + }); + } + }); +} )(); diff --git a/sites/all/modules/contrib/ckeditor/plugins/imce/images/icon.png b/sites/all/modules/contrib/ckeditor/plugins/imce/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ab168a1aeff4c41cf9b3324bfe6318a7de9f9171 GIT binary patch literal 523 zcmV+m0`&cfP)Px#z)(z7MF0Q*dDl&G#s8S$YO;MYirrWG=8I#y|7pb8q2zd!VX4SZPKnk!H-SPsam*y zMaP;`GrpD6u3W8nFQINKj$R;{XC|d_E4P3&xPmsRbuBQU{B_6wYr^m9>B0EkV84q@ zS-z<*od4_DWA5H?hsESt%_Tgj9ha< literal 0 HcmV?d00001 diff --git a/sites/all/modules/contrib/ckeditor/plugins/imce/plugin.js b/sites/all/modules/contrib/ckeditor/plugins/imce/plugin.js new file mode 100644 index 0000000000..1149c63073 --- /dev/null +++ b/sites/all/modules/contrib/ckeditor/plugins/imce/plugin.js @@ -0,0 +1,67 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Plugin for inserting files from IMCE without image dialog + */ +( function() { + CKEDITOR.plugins.add( 'imce', + { + init: function( editor ) + { + //adding button + editor.ui.addButton( 'IMCE', + { + label: 'IMCE', + command: 'IMCEWindow', + icon: this.path + 'images/icon.png' + }); + + //opening imce window + editor.addCommand( 'IMCEWindow', { + exec : function () { + var width = editor.config.filebrowserWindowWidth || '80%', + height = editor.config.filebrowserWindowHeight || '70%'; + + editor.popup(Drupal.settings.basePath + 'index.php?q=imce\x26app=ckeditor|sendto@ckeditor_setFile|&CKEditorFuncNum=' + editor._.filebrowserFnIMCE, width, height); + } + }); + + //add editor function + editor._.filebrowserFnIMCE = CKEDITOR.tools.addFunction( setFile, editor ); + + //function which receive imce response + window.ckeditor_setFile = function (file, win) { + var cfunc = win.location.href.split('&'); + for (var x in cfunc) { + if (cfunc[x].match(/^CKEditorFuncNum=\d+$/)) { + cfunc = cfunc[x].split('='); + break; + } + } + CKEDITOR.tools.callFunction(cfunc[1], file); + win.close(); + }; + + } + } ); + function setFile(file) { + var sel = this.getSelection(), + text = sel.getSelectedText(); + if (file.width != 0 && file.height != 0) { + if (text) { + this.insertHtml('' + text + ''); + } else { + this.insertHtml('' + file.name + ''); + } + } else { + if (text) { + this.insertHtml('' + text + ''); + } else { + this.insertHtml('' + file.name + ''); + } + } + } +} )(); diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/wysiwyg_plugins/media_ckeditor/images/icon.gif b/sites/all/modules/contrib/ckeditor/plugins/media/images/icon.gif similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/wysiwyg_plugins/media_ckeditor/images/icon.gif rename to sites/all/modules/contrib/ckeditor/plugins/media/images/icon.gif diff --git a/sites/all/modules/contrib/ckeditor/plugins/media/library.js b/sites/all/modules/contrib/ckeditor/plugins/media/library.js new file mode 100644 index 0000000000..1295ad5c1c --- /dev/null +++ b/sites/all/modules/contrib/ckeditor/plugins/media/library.js @@ -0,0 +1,349 @@ + +/** + * @file + * Attach Media ckeditor behaviors. + */ + +(function ($) { + Drupal.media = Drupal.media || {}; + + Drupal.settings.ckeditor.plugins['media'] = { + + /** + * Initializes the tag map. + */ + initializeTagMap: function () { + if (typeof Drupal.settings.tagmap == 'undefined') { + Drupal.settings.tagmap = { }; + } + }, + /** + * Execute the button. + */ + invoke: function (data, settings, instanceId) { + if (data.format == 'html') { + Drupal.media.popups.mediaBrowser(function (mediaFiles) { + Drupal.settings.ckeditor.plugins['media'].mediaBrowserOnSelect(mediaFiles, instanceId); + }, settings['global']); + } + }, + + /** + * Respond to the mediaBrowser's onSelect event. + */ + mediaBrowserOnSelect: function (mediaFiles, instanceId) { + var mediaFile = mediaFiles[0]; + var options = {}; + Drupal.media.popups.mediaStyleSelector(mediaFile, function (formattedMedia) { + Drupal.settings.ckeditor.plugins['media'].insertMediaFile(mediaFile, formattedMedia.type, formattedMedia.html, formattedMedia.options, CKEDITOR.instances[instanceId]); + }, options); + + return; + }, + + insertMediaFile: function (mediaFile, viewMode, formattedMedia, options, ckeditorInstance) { + + this.initializeTagMap(); + // @TODO: the folks @ ckeditor have told us that there is no way + // to reliably add wrapper divs via normal HTML. + // There is some method of adding a "fake element" + // But until then, we're just going to embed to img. + // This is pretty hacked for now. + // + var imgElement = $(this.stripDivs(formattedMedia)); + this.addImageAttributes(imgElement, mediaFile.fid, viewMode, options); + + var toInsert = this.outerHTML(imgElement); + // Create an inline tag + var inlineTag = Drupal.settings.ckeditor.plugins['media'].createTag(imgElement); + // Add it to the tag map in case the user switches input formats + Drupal.settings.tagmap[inlineTag] = toInsert; + ckeditorInstance.insertHtml(toInsert); + }, + + /** + * Gets the HTML content of an element + * + * @param jQuery element + */ + outerHTML: function (element) { + return $('
      ').append( element.eq(0).clone() ).html(); + }, + + addImageAttributes: function (imgElement, fid, view_mode, additional) { + imgElement.addClass('media-image'); + + this.forceAttributesIntoClass(imgElement, fid, view_mode, additional); + }, + + /** + * Due to problems handling wrapping divs in ckeditor, this is needed. + * + * Going forward, if we don't care about supporting other editors + * we can use the fakeobjects plugin to ckeditor to provide cleaner + * transparency between what Drupal will output
      + * instead of just , for now though, we're going to remove all the stuff surrounding the images. + * + * @param String formattedMedia + * Element containing the image + * + * @return HTML of tag inside formattedMedia + */ + stripDivs: function (formattedMedia) { + // Check to see if the image tag has divs to strip + var stripped = null; + if ($(formattedMedia).is('img')) { + stripped = this.outerHTML($(formattedMedia)); + } else { + stripped = this.outerHTML($('img', $(formattedMedia))); + } + // This will fail if we pass the img tag without anything wrapping it, like we do when re-enabling ckeditor + return stripped; + }, + + /** + * Attach function, called when a rich text editor loads. + * This finds all [[tags]] and replaces them with the html + * that needs to show in the editor. + * + */ + attach: function (content, settings, instanceId) { + var matches = content.match(/\[\[.*?\]\]/g); + this.initializeTagMap(); + var tagmap = Drupal.settings.tagmap; + if (matches) { + var inlineTag = ""; + for (i = 0; i < matches.length; i++) { + inlineTag = matches[i]; + if (tagmap[inlineTag]) { + // This probably needs some work... + // We need to somehow get the fid propogated here. + // We really want to + var tagContent = tagmap[inlineTag]; + var mediaMarkup = this.stripDivs(tagContent); // THis is
      .. + + var _tag = inlineTag; + _tag = _tag.replace('[[',''); + _tag = _tag.replace(']]',''); + mediaObj = JSON.parse(_tag); + + var imgElement = $(mediaMarkup); + this.addImageAttributes(imgElement, mediaObj.fid, mediaObj.view_mode); + var toInsert = this.outerHTML(imgElement); + content = content.replace(inlineTag, toInsert); + } + else { + debug.debug("Could not find content for " + inlineTag); + } + } + } + return content; + }, + + /** + * Detach function, called when a rich text editor detaches + */ + detach: function (content, settings, instanceId) { + var content = $('
      ' + content + '
      '); + $('img.media-image',content).each(function (elem) { + var tag = Drupal.settings.ckeditor.plugins['media'].createTag($(this)); + $(this).replaceWith(tag); + var newContent = content.html(); + var tagContent = $('
      ').append($(this)).html(); + Drupal.settings.tagmap[tag] = tagContent; + }); + return content.html(); + }, + + /** + * @param jQuery imgNode + * Image node to create tag from + */ + createTag: function (imgNode) { + // Currently this is the itself + // Collect all attribs to be stashed into tagContent + var mediaAttributes = {}; + var imgElement = imgNode[0]; + var sorter = []; + + // @todo: this does not work in IE, width and height are always 0. + for (i=0; i< imgElement.attributes.length; i++) { + var attr = imgElement.attributes[i]; + if (attr.specified == true) { + if (attr.name !== 'class') { + sorter.push(attr); + } + else { + // Exctract expando properties from the class field. + var attributes = this.getAttributesFromClass(attr.value); + for (var name in attributes) { + if (attributes.hasOwnProperty(name)) { + var value = attributes[name]; + if (value.type && value.type === 'attr') { + sorter.push(value); + } + } + } + } + } + } + + sorter.sort(this.sortAttributes); + + for (var prop in sorter) { + mediaAttributes[sorter[prop].name] = sorter[prop].value; + } + + // The following 5 ifs are dedicated to IE7 + // If the style is null, it is because IE7 can't read values from itself + if (jQuery.browser.msie && jQuery.browser.version == '7.0') { + if (mediaAttributes.style === "null") { + var imgHeight = imgNode.css('height'); + var imgWidth = imgNode.css('width'); + mediaAttributes.style = { + height: imgHeight, + width: imgWidth + } + if (!mediaAttributes['width']) { + mediaAttributes['width'] = imgWidth; + } + if (!mediaAttributes['height']) { + mediaAttributes['height'] = imgHeight; + } + } + // If the attribute width is zero, get the CSS width + if (Number(mediaAttributes['width']) === 0) { + mediaAttributes['width'] = imgNode.css('width'); + } + // IE7 does support 'auto' as a value of the width attribute. It will not + // display the image if this value is allowed to pass through + if (mediaAttributes['width'] === 'auto') { + delete mediaAttributes['width']; + } + // If the attribute height is zero, get the CSS height + if (Number(mediaAttributes['height']) === 0) { + mediaAttributes['height'] = imgNode.css('height'); + } + // IE7 does support 'auto' as a value of the height attribute. It will not + // display the image if this value is allowed to pass through + if (mediaAttributes['height'] === 'auto') { + delete mediaAttributes['height']; + } + } + + // Remove elements from attribs using the blacklist + for (var blackList in Drupal.settings.media.blacklist) { + delete mediaAttributes[Drupal.settings.media.blacklist[blackList]]; + } + tagContent = { + "type": 'media', + // @todo: This will be selected from the format form + "view_mode": attributes['view_mode'].value, + "fid" : attributes['fid'].value, + "attributes": mediaAttributes + }; + return '[[' + JSON.stringify(tagContent) + ']]'; + }, + + /** + * Forces custom attributes into the class field of the specified image. + * + * Due to a bug in some versions of Firefox + * (http://forums.mozillazine.org/viewtopic.php?f=9&t=1991855), the + * custom attributes used to share information about the image are + * being stripped as the image markup is set into the rich text + * editor. Here we encode these attributes into the class field so + * the data survives. + * + * @param imgElement + * The image + * @fid + * The file id. + * @param view_mode + * The view mode. + * @param additional + * Additional attributes to add to the image. + */ + forceAttributesIntoClass: function (imgElement, fid, view_mode, additional) { + var wysiwyg = imgElement.attr('wysiwyg'); + if (wysiwyg) { + imgElement.addClass('attr__wysiwyg__' + wysiwyg); + } + var format = imgElement.attr('format'); + if (format) { + imgElement.addClass('attr__format__' + format); + } + var typeOf = imgElement.attr('typeof'); + if (typeOf) { + imgElement.addClass('attr__typeof__' + typeOf); + } + if (fid) { + imgElement.addClass('img__fid__' + fid); + } + if (view_mode) { + imgElement.addClass('img__view_mode__' + view_mode); + } + if (additional) { + for (var name in additional) { + if (additional.hasOwnProperty(name)) { + if (name !== 'alt') { + imgElement.addClass('attr__' + name + '__' + additional[name]); + } + } + } + } + }, + + /** + * Retrieves encoded attributes from the specified class string. + * + * @param classString + * A string containing the value of the class attribute. + * @return + * An array containing the attribute names as keys, and an object + * with the name, value, and attribute type (either 'attr' or + * 'img', depending on whether it is an image attribute or should + * be it the attributes section) + */ + getAttributesFromClass: function (classString) { + var actualClasses = []; + var otherAttributes = []; + var classes = classString.split(' '); + var regexp = new RegExp('^(attr|img)__([^\S]*)__([^\S]*)$'); + for (var index = 0; index < classes.length; index++) { + var matches = classes[index].match(regexp); + if (matches && matches.length === 4) { + otherAttributes[matches[2]] = { + name: matches[2], + value: matches[3], + type: matches[1] + }; + } + else { + actualClasses.push(classes[index]); + } + } + if (actualClasses.length > 0) { + otherAttributes['class'] = { + name: 'class', + value: actualClasses.join(' '), + type: 'attr' + }; + } + return otherAttributes; + }, + + sortAttributes: function (a, b) { + var nameA = a.name.toLowerCase(); + var nameB = b.name.toLowerCase(); + if (nameA < nameB) { + return -1; + } + if (nameA > nameB) { + return 1; + } + return 0; + } + }; + +})(jQuery); diff --git a/sites/all/modules/contrib/ckeditor/plugins/media/plugin.js b/sites/all/modules/contrib/ckeditor/plugins/media/plugin.js new file mode 100644 index 0000000000..a575006c34 --- /dev/null +++ b/sites/all/modules/contrib/ckeditor/plugins/media/plugin.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Plugin for inserting images from Drupal media module + */ +( function() { + CKEDITOR.plugins.add( 'media', + { + // Wrap Drupal plugin in a proxy plugin. + init: function(editor) + { + var pluginCommand = { + exec: function (editor) { + var data = { + format: 'html', + node: null, + content: '' + }; + var selection = editor.getSelection(); + + if (selection) { + data.node = selection.getSelectedElement(); + if (data.node) { + data.node = data.node.$; + } + if (selection.getType() == CKEDITOR.SELECTION_TEXT) { + data.content = selection.getSelectedText(); + } + else if (data.node) { + // content is supposed to contain the "outerHTML". + data.content = data.node.parentNode.innerHTML; + } + } + Drupal.settings.ckeditor.plugins['media'].invoke(data, Drupal.settings.ckeditor.plugins['media'], editor.name); + } + }; + editor.addCommand( 'media', pluginCommand ); + + editor.ui.addButton( 'Media', + { + label: 'Add media', + command: 'media', + icon: this.path + 'images/icon.gif' + }); + } + }); + +} )(); + + diff --git a/sites/all/modules/contrib/ckeditor/plugins/mediaembed/dialogs/mediaembed.js b/sites/all/modules/contrib/ckeditor/plugins/mediaembed/dialogs/mediaembed.js new file mode 100644 index 0000000000..6f49f62d8f --- /dev/null +++ b/sites/all/modules/contrib/ckeditor/plugins/mediaembed/dialogs/mediaembed.js @@ -0,0 +1,54 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +CKEDITOR.dialog.add( 'mediaembedDialog', function( editor ) { + var numberRegex = /^\d+(?:\.\d+)?$/; + var cssifyLength = function( length ) + { + if ( numberRegex.test( length ) ) + return length + 'px'; + return length; + } + return { + title : Drupal.t('Embed Media Dialog'), + minWidth : 400, + minHeight : 200, + contents : [ + { + id : 'mediaTab', + label : Drupal.t('Embed media code'), + title : Drupal.t('Embed media code'), + elements : + [ + { + id : 'embed', + type : 'textarea', + rows : 9, + label : Drupal.t('Paste embed code here') + } + ] + } + ], + onOk : function() { + var editor = this.getParentEditor(); + var content = this.getValueOf( 'mediaTab', 'embed' ); + if ( content.length>0 ) { + var realElement = CKEDITOR.dom.element.createFromHtml('
      '); + realElement.setHtml(content); + var fakeElement = editor.createFakeElement( realElement , 'cke_mediaembed', 'div', true); + var matches = content.match(/width=(["']?)(\d+)\1/i); + if (matches && matches.length == 3) { + fakeElement.setStyle('width', cssifyLength(matches[2])); + } + matches = content.match(/height=([\"\']?)(\d+)\1/i); + if (matches && matches.length == 3) { + fakeElement.setStyle('height', cssifyLength(matches[2])); + } + editor.insertElement(fakeElement); + } + } + }; +}); + diff --git a/sites/all/modules/contrib/ckeditor/plugins/mediaembed/images/icon.png b/sites/all/modules/contrib/ckeditor/plugins/mediaembed/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b052b7a0914619e8da00d89ff40387a3ebd43af9 GIT binary patch literal 560 zcmV-00?+-4P)Px#;ZRIeMX=V9EG#TOt;;L9O02A`W@cuTu!R5r|75uTHf9-ss$i3olk3=oT3T9j zb8}nEPLkqOP*6}czJ6c4*h_jaN=izuym@PDYkPZpR)0TbjZSR1?3~|j(B`>a$8T`E z=6TmvrKP3M&4h`pennt5g@uK0!T+nvtwh64IXOAc*q2YYwWht9u+xu>xnud@XKB$v zqvLy0izkk{X>z*kiHV7E#Q$i--CT%CqTqKtZy%YNnKLspl;C1*#rU(-l%3#ni@RiI zzW-~FR(!hKHfk8P)SHI5UzFilpW}CUz3q^GKOA(BlmR+){WDLj3y=*x0V_ ygOlex$#caUHac=gcj@?!_+i8hVN-QoSCubDtQ5ZITC@xR0000rO5Qci(iX%d5J{FNC&`uj>)6`QPmE__w5nny-kHjrfsy zdgFNH=IfZNy-|ze^Ub_cs_L)7^;Vj~VX^Zlr05iz>}H+i_4)idZrp^E`S0@evWQXs z`t=S#jP>p3@Adn9lGN+s-ldk3{PF84lHz)Nfn%l2_VxGq`1v=Y=Gxrg?CtQv!o>w{ ztN;K1A^8LV00000EC2ui0FeMY000L6K%a0(EE-fBW&+q?GcYcC{goSQ^K8A{mjCzQTkdcyTk8~?L z2nahXlXC)}paMTQ9RVUD0SFyAKcS#`0v!lFJqR+aa+Pr%9ySNR2R0cyXQFyIJQvCr zE5@FoKPwe66%_;3*dna1bvzC;;4>QIGY&j)x@xaD8owH~J3Su1Hs_ypD3}5J`~d_z z7o5F;CgQ^f5+QVySg0cei4!phw0b2+Ko1);Fn|DoK@$fK<9f7slP=A@9qu|TxR6Zc zg$ciU)Df^_-v9|C5>QBxV1$JK38~J(0o9^HiW(*wG%#Vp0#l_XYNQA-QJ@vE#-jLWEF^U}78`Sutq7g@y-$uw%=zDVe6juM7ct?1S55!UP8aU>>M^uMLU- z14i^UKp}&N-@h|Z_s z1Ff{d%YHskFaa$J_)u2?M$$3?UnAJ%h6sx-Wr7DZRP}=hC)A(=3d(j?Z5&A8z8U(D=<9pfG8*|fTjr3Fu=fy zYor&=FA5Yu=YRp&P}vT`1Xn--bg`%g4+Bsjgak5twF3o@8sMw6GI-!a0${GuL6i;D zKuo76d}@IN9w_DifM5q2#O5bmRG>jfY4R> zn!)_)M+wB4K?X=WmM>%?0|fx2CIrfW!e;Y^2@GKb7!p8{4sbpcNFYd}VZ#n2=(4Ja z0vd@?7rWdLvjVsv1rI=h875%D3ap|Pvx)%=R`|O%&;?)$aKLdiFbo95rcXLVW4qQc zfFW@I>klhff!WURfDstVFmAY%lp2r%PPpPEQA$b$M&hGyq#y+qIKv7=(5_aAzySc5 z-vZ5`s~-sOK4x%0)a>LZs#OjS6EL6wBp^aG5Wr#ELLe%oq=OoK0FV?RKniNP6b>S% z2Qzpi7T*Aa31pH58sL}xTqvkBUJL;mPyld(qr)9yCk}n=3k6#F0|MMYn-g#z8U#Rt zx|yH^4&hk`#)g9(RNw;%QHl;u@B%pSKpc-e!2_t6NdRC(i$(JnuXshLf>v{fn}ov- zR@n*y_;FhS0B9VN(*UQS^C1$z#tBY9f=?x-1|g`x9MPwN0vO~31jtT1`^f@fjfR>3 ziHqT}W;#&l-2^Jil#7x8Aqgn~Q=Wp(NDf3C88`?D`1XJc zyg&vZ=qCVXz%<*yv`6zm+Ts*u(+p5#4s~?awh#c+1bw0f6F{9)&bbh#Jmx7TAQc=i zBMb>3#2_EgY9_gQBd-Ea9rr*0UBrsUGdhWpba-e12mo0;grWsK7{OyUYk?9-paza< zKnUc315vUu20BZDR>hIV$_DfeIGBJhfWa$s2nr7uFu)!AzzrEp;06kDObK)#fgaGH z2cWe;1N0h)7J$eG(A6P0Y@h%e;EE()6_hhPLkm?rv8`;l0A&Sn$WOcg6RoNLh030Y zfB|_xnR3WM-uee!>#FfQW;tvp_RHTrbh5ty4saO-OyB~)*1!l3@P8A`;6^OC!4NLQ zgCk7gK1{g67{1c)*Po*d^cU)c;>_5n8s ztcC>a7!7-&0O!bXgDV^Q3+SjnK6u%dWlhIUSNVLjwza2mO>8x+ z+6YK!wzqBUN3U7}nHKd+V_joI58&XO+Y1cT9qe!$yjk0HvyKmb@N~Z{(wAQM zi61_Ig!h}?30Sy98t!P0dpr&P{0&;$|vpbEw zK{vhXwoZDnQ61$g6Zs52k@^~%jAvDw_yIwpO1RlvM^*3n%P|%+nfcO6!Kc{(t)%;x z{my3tnA*sAkG7-P3}%TpUV4y^`Wb5eax~aj%vX1o-GMyhgd5??L=X&(Qx9V%8$oR> z=8w{=9QAO&-px7Qv5{-72Bsgl!@$>Yc7soRxflQV9ws>Qmw$#0GavZQe?Et!FZ~Qh R;riImzV^4zeIo<`06Q^WzG?sf literal 0 HcmV?d00001 diff --git a/sites/all/modules/contrib/ckeditor/plugins/mediaembed/plugin.js b/sites/all/modules/contrib/ckeditor/plugins/mediaembed/plugin.js new file mode 100644 index 0000000000..e617008fcd --- /dev/null +++ b/sites/all/modules/contrib/ckeditor/plugins/mediaembed/plugin.js @@ -0,0 +1,110 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * @file Plugin for inserting Drupal embeded media + */ +( function() { + var numberRegex = /^\d+(?:\.\d+)?$/; + var cssifyLength = function( length ) + { + if ( numberRegex.test( length ) ) + return length + 'px'; + return length; + } + CKEDITOR.plugins.add( 'mediaembed', + { + requires : [ 'dialog', 'fakeobjects' ], + init: function( editor ) + { + var addCssObj = CKEDITOR; + + if (Drupal.ckeditor_ver == 3) { + addCssObj = editor; + } + addCssObj.addCss( + 'img.cke_mediaembed' + + '{' + + 'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/placeholder.gif' ) + ');' + + 'background-position: center center;' + + 'background-repeat: no-repeat;' + + 'border: 1px solid #a9a9a9;' + + 'width: 80px;' + + 'height: 80px;' + + '}' + ); + + editor.addCommand( 'mediaembedDialog', new CKEDITOR.dialogCommand( 'mediaembedDialog', { allowedContent : 'div(media_embed);iframe[*](*)' } ) ); + editor.ui.addButton( 'MediaEmbed', + { + label: 'Embed Media', + command: 'mediaembedDialog', + icon: this.path + 'images/icon.png' + } ); + CKEDITOR.dialog.add( 'mediaembedDialog', this.path + 'dialogs/mediaembed.js' ); + }, + afterInit : function( editor ) + { + var dataProcessor = editor.dataProcessor, + dataFilter = dataProcessor && dataProcessor.dataFilter, + htmlFilter = dataProcessor && dataProcessor.htmlFilter; + + if ( htmlFilter ) + { + htmlFilter.addRules({ + elements : + { + 'div' : function ( element ) { + if( element.attributes['class'] == 'media_embed' ) { + for (var x in element.children) { + if (typeof(element.children[x].attributes) != 'undefined') { + if (typeof(element.children[x].attributes.width) != undefined) { + element.children[x].attributes.width = element.attributes.width; + } + if (typeof(element.children[x].attributes.height) != undefined) { + element.children[x].attributes.height = element.attributes.height; + } + } + } + } + } + } + }); + } + if ( dataFilter ) + { + dataFilter.addRules( + { + elements : + { + 'div' : function( element ) + { + var attributes = element.attributes, + classId = attributes.classid && String( attributes.classid ).toLowerCase(); + + if (element.attributes[ 'class' ] == 'media_embed') { + var fakeElement = editor.createFakeParserElement(element, 'cke_mediaembed', 'div', true); + var fakeStyle = fakeElement.attributes.style || ''; + if (element.children[0] && typeof(element.children[0].attributes) != 'undefined') { + var height = element.children[0].attributes.height, + width = element.children[0].attributes.width; + } + if ( typeof width != 'undefined' ) + fakeStyle = fakeElement.attributes.style = fakeStyle + 'width:' + cssifyLength( width ) + ';'; + + if ( typeof height != 'undefined' ) + fakeStyle = fakeElement.attributes.style = fakeStyle + 'height:' + cssifyLength( height ) + ';'; + + return fakeElement; + } + return element; + } + } + }, + 5); + } + } + } ); +} )(); diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_features/LICENSE.txt b/sites/all/modules/contrib/ckeditor_link/LICENSE.txt old mode 100755 new mode 100644 similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_features/LICENSE.txt rename to sites/all/modules/contrib/ckeditor_link/LICENSE.txt diff --git a/sites/all/modules/contrib/ckeditor_link/README.txt b/sites/all/modules/contrib/ckeditor_link/README.txt new file mode 100644 index 0000000000..68256aa744 --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link/README.txt @@ -0,0 +1,55 @@ +CKEDITOR LINK - A PLUGIN TO EASILY CREATE LINKS TO DRUPAL INTERNAL PATHS +http://drupal.org/project/ckeditor_link + + + +REQUIREMENTS +The CKEditor module or the Wysiwyg module +The CKEditor editor +Clean URLs need to be enabled. + + + +INSTALLATION +Copy the ckeditor_link folder to your sites/all/modules directory. +Go to admin/modules and enable the module. + +*Set permissions* +Go to admin/people/permissions and grant the CKEditor Link related permissions +to the desired roles. + +*When using the CKEditor module* +Go to admin/config/content/ckeditor and edit the desired profile. +Under "Editor appearance" > "Plugins", check the "CKEditor Link" box. +Save changes. + +*When using the Wysiwyg module* +Go to admin/config/content/wysiwyg and edit the desired CKEditor-enabled input +format. +Under "Buttons and plugins", check both "Link" and "CKEditor Link" boxes. +Save changes. + +*Set up CKEditor Link Filter* +Go to admin/config/content/formats and edit the desired text format. +Check the "CKEditor Link Filter" box. +If you use other path converting filters like Pathologic or Path Filter, make +sure that CKEditor Link Filter comes before them: +Under "Filter processing order", drag and drop CKEditor Link Filter before +these filters in the list. +Save changes. + +*Configure CKEditor Link* +Go to admin/config/content/ckeditor_link. +Change settings as desired. +Save changes. + + + +EXTENDING CKEDITOR LINK +Developers, see the ckeditor_link.api.php file. + + + +CONTACT +Henri MEDOT +http://www.absyx.fr diff --git a/sites/all/modules/contrib/ckeditor_link/ckeditor_link.admin.inc b/sites/all/modules/contrib/ckeditor_link/ckeditor_link.admin.inc new file mode 100644 index 0000000000..d1e14a11d3 --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link/ckeditor_link.admin.inc @@ -0,0 +1,42 @@ + + * http://www.absyx.fr + */ + +function ckeditor_link_settings_form() { + $form['general'] = array( + '#type' => 'fieldset', + '#title' => t('General settings'), + ); + $form['general']['ckeditor_link_type_name'] = array( + '#type' => 'textfield', + '#title' => t('Link type name'), + '#description' => t('The name of the option added to the Link Type select box. Enter %site_name to use the name of this website.', array('%site_name' => '!site_name')), + '#default_value' => variable_get('ckeditor_link_type_name', 'Internal path'), + ); + $form['general']['ckeditor_link_type_selected'] = array( + '#type' => 'checkbox', + '#title' => t('Selected by default'), + '#description' => t('Whether the %link_type link type should be selected by default instead of the URL link type.', array('%link_type' => ckeditor_link_get_link_type_name())), + '#default_value' => variable_get('ckeditor_link_type_selected', 1), + ); + $form['general']['ckeditor_link_limit'] = array( + '#type' => 'select', + '#title' => t('Number of suggestions'), + '#description' => t('The maximum number of suggestions to display on autocomplete.'), + '#options' => drupal_map_assoc(array(10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100)), + '#default_value' => variable_get('ckeditor_link_limit', 10), + ); + + $types = ckeditor_link_get_types(); + foreach ($types as $type) { + $func = $type['module'] .'_ckeditor_link_'. $type['type'] .'_settings'; + if (function_exists($func)) { + $form = array_merge($form, $func()); + } + } + + return system_settings_form($form); +} diff --git a/sites/all/modules/contrib/ckeditor_link/ckeditor_link.api.php b/sites/all/modules/contrib/ckeditor_link/ckeditor_link.api.php new file mode 100644 index 0000000000..610cdea3a4 --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link/ckeditor_link.api.php @@ -0,0 +1,126 @@ + 'mytype2', 'file' => 'includes/mymodule.mytype2.inc'), + ); +} + +/** + * Alter types. + * + * @param $types + * The types returned by hook_ckeditor_link_types(). The types are keyed by + * 'MODULE.TYPE' for easy lookup. + * + * @see hook_ckeditor_link_types() + */ +function hook_ckeditor_link_types_alter(&$types) { + // Change types +} + +/** + * Get autocomplete suggestions for the given string. + * + * Implementing modules should return only suggestions the current user has + * access to. + * + * @param $string + * The string to autocomplete. + * @param $limit + * The maximum number of suggestions to return. + * + * @return + * An array of suggestions where keys are non-aliased internal paths + * and values are titles. + */ +function hook_ckeditor_link_TYPE_autocomplete($string, $limit) { + $matches = array(); + + $matches['the-path/123'] = 'The title 1'; + $matches['the-path/the-path-2/5'] = 'The title 2'; + + return $matches; +} + +/** + * Alter autocomplete suggestions. + * + * @param $results + * The results returned by hook_ckeditor_link_TYPE_autocomplete. + * @param $string + * The string to autocomplete. + * + * @see hook_ckeditor_link_TYPE_autocomplete() + */ +function hook_ckeditor_link_autocomplete_alter(&$results, $string) { + // Change results. +} + +/** + * Revert a path to a user-friendly title. + * + * @param $path + * The path to revert. + * @param $langcode + * The language code of the path if any. The implementing module may fix it + * if necessary, based on the given path. + * + * @return + * A title, FALSE if not found, or nothing if the implementing module is not + * responsible for the given path. + */ +function hook_ckeditor_link_TYPE_revert($path, &$langcode) { + // +} + +/** + * Convert an internal path into an aliased and, if applicable, language + * prefixed URL. + * + * @param $path + * The internal path to convert. + * @param $langcode + * The language code of the path if any, the language code of the text to be + * filtered otherwise. It should only be used as a fallback when the content + * being linked to does not have any intrisic language. + * + * @return + * An URL alias, or nothing if the implementing module is not responsible for + * the given path. + */ +function hook_ckeditor_link_TYPE_url($path, $langcode) { + // +} + +/** + * Add settings to the CKEditor Link settings form. + * + * @return + * An array containing the form elements to add. + */ +function hook_ckeditor_link_TYPE_settings() { + $form = array( + // + ); + return $form; +} diff --git a/sites/all/modules/contrib/ckeditor_link/ckeditor_link.css b/sites/all/modules/contrib/ckeditor_link/ckeditor_link.css new file mode 100644 index 0000000000..9278d23e40 --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link/ckeditor_link.css @@ -0,0 +1,23 @@ + +/** + * @file + * Written by Henri MEDOT + * http://www.absyx.fr + */ + +div.cke_dialog_ui_input_text #autocomplete li.selected * +{ + cursor: default; + color: #fff; +} + +input.cke_dialog_ui_input_text.form-autocomplete +{ + min-height: 16px; +} + +div.cke_dialog_ui_input_text #autocomplete +{ + max-height: 100%; + overflow-y: auto; +} diff --git a/sites/all/modules/contrib/ckeditor_link/ckeditor_link.info b/sites/all/modules/contrib/ckeditor_link/ckeditor_link.info new file mode 100644 index 0000000000..5439b7d3ea --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link/ckeditor_link.info @@ -0,0 +1,12 @@ +name = CKEditor Link +description = Easily create links to Drupal internal paths through CKEditor. +package = User interface +core = 7.x +configure = admin/config/content/ckeditor_link + +; Information added by drupal.org packaging script on 2013-01-17 +version = "7.x-2.3" +core = "7.x" +project = "ckeditor_link" +datestamp = "1358413212" + diff --git a/sites/all/modules/contrib/ckeditor_link/ckeditor_link.install b/sites/all/modules/contrib/ckeditor_link/ckeditor_link.install new file mode 100644 index 0000000000..d4e6da4a80 --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link/ckeditor_link.install @@ -0,0 +1,42 @@ + + * http://www.absyx.fr + */ + +/** + * Implementation of hook_install(). + */ +function ckeditor_link_install() { + db_update('system') + ->fields(array('weight' => 1)) + ->condition('name', 'ckeditor_link') + ->execute(); +} + +/** + * Implementation of hook_uninstall(). + */ +function ckeditor_link_uninstall() { + db_query("DELETE FROM {variable} WHERE name LIKE 'ckeditor_link_%%'"); +} + +/** + * Implementation of hook_requirements(). + */ +function ckeditor_link_requirements($phase) { + $requirements = array(); + + if (($phase == 'runtime') && !variable_get('clean_url', 0)) { + $requirements['ckeditor_link_clean_url'] = array( + 'title' => t('CKEditor Link'), + 'value' => t('Clean URLs disabled'), + 'description' => t('CKEditor Link requires Clean URLs to be enabled in order to function properly.', array('!url' => url('admin/config/search/clean-urls'))), + 'severity' => REQUIREMENT_ERROR, + ); + } + + return $requirements; +} diff --git a/sites/all/modules/contrib/ckeditor_link/ckeditor_link.module b/sites/all/modules/contrib/ckeditor_link/ckeditor_link.module new file mode 100644 index 0000000000..5363868964 --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link/ckeditor_link.module @@ -0,0 +1,332 @@ + + * http://www.absyx.fr + */ + +/** + * Implementation of hook_permission(). + */ +function ckeditor_link_permission() { + return array( + 'access ckeditor link' => array('title' => t('Access CKEditor Link')), + 'administer ckeditor link' => array('title' => t('Administer CKEditor Link')), + ); +} + +/** + * Implementation of hook_menu(). + */ +function ckeditor_link_menu() { + $items['ckeditor_link/autocomplete'] = array( + 'page callback' => 'ckeditor_link_autocomplete', + 'access arguments' => array('access ckeditor link'), + 'type' => MENU_CALLBACK, + ); + $items['ckeditor_link/revert'] = array( + 'page callback' => 'ckeditor_link_revert', + 'access arguments' => array('access ckeditor link'), + 'type' => MENU_CALLBACK, + ); + $items['admin/config/content/ckeditor_link'] = array( + 'title' => 'CKEditor Link', + 'description' => 'Configure CKEditor Link.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('ckeditor_link_settings_form'), + 'access arguments' => array('administer ckeditor link'), + 'file' => 'ckeditor_link.admin.inc', + ); + return $items; +} + +function ckeditor_link_autocomplete($string = '') { + $matches = array(); + + if ($string !== '') { + $types = ckeditor_link_get_types(); + $limit = variable_get('ckeditor_link_limit', 10); + $results = array(); + foreach ($types as $type) { + $func = $type['module'] .'_ckeditor_link_'. $type['type'] .'_autocomplete'; + if (function_exists($func)) { + $results += $func($string, $limit); + if (count($results) > $limit) { + break; + } + } + } + drupal_alter('ckeditor_link_autocomplete', $results, $string); + + array_splice($results, $limit); + foreach ($results as $path => $title) { + $matches[$title .' ('. $path .')'] = '
      '. check_plain($title) .'
      '; + } + } + + drupal_json_output($matches); +} + +function ckeditor_link_revert() { + $output = NULL; + + $args = func_get_args(); + $path = trim(implode('/', $args), '/'); + if ($path !== '') { + $langcode = LANGUAGE_NONE; + $path = ckeditor_link_path_strip_language($path, $langcode); + $path = drupal_get_normal_path($path, $langcode); + $types = ckeditor_link_get_types(); + foreach ($types as $type) { + $func = $type['module'] .'_ckeditor_link_'. $type['type'] .'_revert'; + if (function_exists($func)) { + $result = $func($path, $langcode); + if ($result !== NULL) { + $output = ($result !== FALSE) ? $result .' ('. ckeditor_link_path_prefix_language($path, $langcode) .')' : FALSE; + break; + } + } + } + } + + drupal_add_http_header('Content-Type', 'text/javascript; charset=utf-8'); + echo drupal_json_encode($output); +} + +function ckeditor_link_get_types() { + static $types; + + if (!isset($types)) { + $types = array(); + + $data = array(); + foreach (module_implements('ckeditor_link_types') as $module) { + $func = $module .'_ckeditor_link_types'; + $data[$module] = $func(); + } + + foreach ($data as $module => $_types) { + foreach ($_types as $type) { + if (!is_array($type)) { + $type = array('type' => $type); + } + $type['module'] = $module; + $types[$module .'.'. $type['type']] = $type; + } + } + + drupal_alter('ckeditor_link_types', $types); + $types = array_values($types); + + foreach ($types as $type) { + if (isset($type['file'])) { + require_once(drupal_get_path('module', $type['module']) .'/'. $type['file']); + } + } + } + + return $types; +} + +/** + * Implementation of hook_ckeditor_link_types(). + */ +function ckeditor_link_ckeditor_link_types() { + $types[] = array('type' => 'node', 'file' => 'includes/ckeditor_link.node.inc'); + + if (module_exists('taxonomy')) { + $types[] = array('type' => 'taxonomy', 'file' => 'includes/ckeditor_link.taxonomy.inc'); + if (module_exists('i18n_taxonomy')) { + $types[] = array('type' => 'i18n_taxonomy', 'file' => 'includes/ckeditor_link.i18n_taxonomy.inc'); + } + } + + $types[] = array('type' => 'menu', 'file' => 'includes/ckeditor_link.menu.inc'); + if (module_exists('i18n_menu')) { + $types[] = array('type' => 'i18n_menu', 'file' => 'includes/ckeditor_link.i18n_menu.inc'); + } + + return $types; +} + +/** + * Implementation of hook_element_info_alter(). + */ +function ckeditor_link_element_info_alter(&$type) { + if (user_access('access ckeditor link')) { + $type['text_format']['#pre_render'][] = 'ckeditor_link_text_format_pre_render'; + $type['form']['#post_render'][] = 'ckeditor_link_form_post_render'; + } +} + +function ckeditor_link_text_format_pre_render($element) { + _ckeditor_link_has_text_format(TRUE); + return $element; +} + +function _ckeditor_link_has_text_format($set = FALSE) { + static $has = FALSE; + if (!$set) { + return $has; + } + $has = TRUE; +} + +function ckeditor_link_form_post_render($content, $element) { + static $added; + if (!isset($added) && _ckeditor_link_has_text_format() && ($js = drupal_add_js()) && isset($js['settings']['data'])) { + $settings = call_user_func_array('array_merge_recursive', $js['settings']['data']); + if (isset($settings['ckeditor']) || isset($settings['wysiwyg']['configs']['ckeditor'])) { + $added = TRUE; + drupal_add_css(drupal_get_path('module', 'ckeditor_link') .'/ckeditor_link.css'); + drupal_add_js('misc/autocomplete.js'); + drupal_add_js(array('ckeditor_link' => array( + 'module_path' => base_path() . drupal_get_path('module', 'ckeditor_link'), + 'autocomplete_path' => url('ckeditor_link/autocomplete'), + 'revert_path' => url('ckeditor_link/revert'), + 'msg_invalid_path' => t('Link must be a valid internal path.'), + 'type_name' => ckeditor_link_get_link_type_name(), + 'type_selected' => (bool) variable_get('ckeditor_link_type_selected', 1), + )), 'setting'); + } + } + return $content; +} + +/** + * Implementation of hook_ckeditor_plugin(). + */ +function ckeditor_link_ckeditor_plugin() { + return array('ckeditor_link' => array( + 'name' => 'drupal_path', + 'desc' => t('CKEditor Link - A plugin to easily create links to Drupal internal paths'), + 'path' => drupal_get_path('module', 'ckeditor_link') .'/plugins/link/', + )); +} + +/** + * Implementation of hook_wysiwyg_plugin(). + */ +function ckeditor_link_wysiwyg_plugin($editor, $version) { + if ($editor == 'ckeditor') { + return array('drupal_path' => array( + 'path' => drupal_get_path('module', 'ckeditor_link') .'/plugins/link/', + 'load' => TRUE, + 'extensions' => array('Link' => t('CKEditor Link')), + )); + } +} + +/** + * Implementation of hook_filter_info(). + */ +function ckeditor_link_filter_info() { + $filters['ckeditor_link_filter'] = array( + 'title' => t('CKEditor Link Filter'), + 'description' => t('Converts links added through CKEditor Link into aliased and language prefixed URLs.'), + 'process callback' => 'ckeditor_link_filter_process', + ); + return $filters; +} + +function ckeditor_link_filter_process($text, $filter, $format, $langcode, $cache, $cache_id) { + _ckeditor_link_filter_process(NULL, $langcode); + return preg_replace_callback('`\bhref="'. preg_quote(base_path(), '`') .'([^?#"]+)`', '_ckeditor_link_filter_process', $text); +} + +function _ckeditor_link_filter_process($matches, $langcode = NULL) { + static $stored_langcode = LANGUAGE_NONE; + if ($matches === NULL) { + $stored_langcode = $langcode; + return; + } + + $path = urldecode($matches[1]); + + $langcode = $stored_langcode; + $path = ckeditor_link_path_strip_language($path, $langcode); + + $types = ckeditor_link_get_types(); + foreach ($types as $type) { + $func = $type['module'] .'_ckeditor_link_'. $type['type'] .'_url'; + if (function_exists($func)) { + $url = $func($path, $langcode); + if ($url) { + return 'href="'. $url; + } + } + } + + return 'href="'. base_path() . $matches[1]; +} + +function ckeditor_link_get_link_type_name() { + return t(variable_get('ckeditor_link_type_name', 'Internal path'), array('!site_name' => variable_get('site_name', 'Drupal'))); +} + +function ckeditor_link_path_strip_language($path, &$langcode) { + $languages = ckeditor_link_get_languages(); + if ($languages) { + $args = explode('/', $path); + $prefix = array_shift($args); + foreach ($languages as $language) { + if (!empty($language->prefix) && ($language->prefix == $prefix)) { + $langcode = $language->language; + $path = implode('/', $args); + break; + } + } + } + + return $path; +} + +function ckeditor_link_path_prefix_language($path, $langcode) { + if ($langcode != LANGUAGE_NONE) { + $languages = ckeditor_link_get_languages(); + if ($languages && isset($languages[$langcode])) { + $language = $languages[$langcode]; + if (!empty($language->prefix)) { + $path = (empty($path)) ? $language->prefix : $language->prefix .'/'. $path; + } + } + } + + return $path; +} + +function ckeditor_link_get_languages() { + static $languages; + + if (!isset($languages)) { + $languages = FALSE; + if (drupal_multilingual() && language_negotiation_get_any(LOCALE_LANGUAGE_NEGOTIATION_URL)) { + $languages = language_list('enabled'); + $languages = $languages[1]; + } + } + + return $languages; +} + +function ckeditor_link_url($path = NULL, $langcode) { + $options = array(); + + if ($langcode != LANGUAGE_NONE) { + $languages = ckeditor_link_get_languages(); + if ($languages && isset($languages[$langcode])) { + $options['language'] = $languages[$langcode]; + } + } + + if (!isset($options['language'])) { + $options['language'] = language_default(); + } + + return url($path, $options); +} + +function _ckeditor_link_check_path($path) { + return preg_match('`^[a-z][\w\/\.-]*$`i', $path); +} diff --git a/sites/all/modules/contrib/ckeditor_link/includes/ckeditor_link.i18n_menu.inc b/sites/all/modules/contrib/ckeditor_link/includes/ckeditor_link.i18n_menu.inc new file mode 100644 index 0000000000..1398f837fb --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link/includes/ckeditor_link.i18n_menu.inc @@ -0,0 +1,79 @@ + + * http://www.absyx.fr + */ + +/** + * Implementation of hook_ckeditor_link_TYPE_autocomplete(). + */ +function ckeditor_link_ckeditor_link_i18n_menu_autocomplete($string, $limit) { + // Currently, this function only supports MySQL. + // TODO: Add support for pgsql. + if (!in_array(db_driver(), array('mysql'))) { + return array(); + } + + $matches = array(); + + $menus = array_keys(array_filter(variable_get('ckeditor_link_autocomplete_menus', array()))); + if (count($menus)) { + $query = db_select('menu_links', 'ml'); + $query->innerJoin('locales_source', 'ls', 'ls.context = CONCAT(:prefix, ml.mlid, :suffix)', array(':prefix' => 'item:', ':suffix' => ':title')); + $query->innerJoin('locales_target', 'lt', 'lt.lid = ls.lid'); + $query->fields('ml', array('link_path')); + $query->addExpression('CONVERT(lt.translation USING utf8)', 'link_title'); + $query->fields('lt', array('language')); + $query->where('CONVERT(lt.translation USING utf8) LIKE :pattern', array(':pattern' => '%'. db_like($string) .'%')); + $query->condition('ml.hidden', 0); + $query->condition('ml.external', 0); + $query->orderBy('link_title'); + $query->range(0, $limit); + if (!in_array('- any -', $menus)) { + $query->condition('ml.menu_name', $menus, 'IN'); + } + $result = $query->execute(); + foreach ($result as $item) { + if (_ckeditor_link_check_path($item->link_path)) { + $router_item = menu_get_item($item->link_path); + if ($router_item && $router_item['access']) { + $path = ckeditor_link_path_prefix_language($item->link_path, $item->language); + $matches[$path] = $item->link_title; + } + } + } + } + + return $matches; +} + +/** + * Implementation of hook_ckeditor_link_TYPE_revert(). + */ +function ckeditor_link_ckeditor_link_i18n_menu_revert($path, &$langcode) { + $router_item = menu_get_item($path); + if ($router_item) { + if (!$router_item['access']) { + return FALSE; + } + $result = db_query('SELECT mlid, link_title, language FROM {menu_links} WHERE link_path = :link_path AND hidden = 0 ORDER BY customized DESC', array(':link_path' => $path)); + $default_langcode = language_default('language'); + $link_title = NULL; + foreach ($result as $item) { + if ($item->language == $langcode) { + $link_title = $item->link_title; + break; + } + elseif (($item->language == $default_langcode) && ($langcode == LANGUAGE_NONE)) { + $langcode = $default_langcode; + $link_title = $item->link_title; + break; + } + elseif (!$link_title && ($item->language == LANGUAGE_NONE)) { + $link_title = i18n_string_translate(array('menu', 'item', $item->mlid, 'title'), $item->link_title, array('langcode' => $langcode)); + } + } + return ($link_title) ? $link_title : NULL; + } +} diff --git a/sites/all/modules/contrib/ckeditor_link/includes/ckeditor_link.i18n_taxonomy.inc b/sites/all/modules/contrib/ckeditor_link/includes/ckeditor_link.i18n_taxonomy.inc new file mode 100644 index 0000000000..66d32e029e --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link/includes/ckeditor_link.i18n_taxonomy.inc @@ -0,0 +1,70 @@ + + * http://www.absyx.fr + */ + +/** + * Implementation of hook_ckeditor_link_TYPE_autocomplete(). + */ +function ckeditor_link_ckeditor_link_i18n_taxonomy_autocomplete($string, $limit) { + // Currently, this function only supports MySQL. + // TODO: Add support for pgsql. + if (!in_array(db_driver(), array('mysql'))) { + return array(); + } + + $matches = array(); + + $vocabularies = array_keys(array_filter(variable_get('ckeditor_link_autocomplete_vocabularies', array()))); + if (count($vocabularies)) { + $query = db_select('taxonomy_term_data', 't'); + $query->innerJoin('locales_source', 'ls', 'ls.context = CONCAT(:prefix, t.tid, :suffix)', array(':prefix' => 'term:', ':suffix' => ':name')); + $query->innerJoin('locales_target', 'lt', 'lt.lid = ls.lid'); + $query->fields('t', array('tid')); + $query->addExpression('CONVERT(lt.translation USING utf8)', 'name'); + $query->fields('lt', array('language')); + $query->where('CONVERT(lt.translation USING utf8) LIKE :pattern', array(':pattern' => '%'. db_like($string) .'%')); + $query->orderBy('name'); + $query->range(0, $limit); + $query->addTag('term_access'); + if (!in_array('- any -', $vocabularies)) { + $query->condition('t.vid', $vocabularies, 'IN'); + } + $result = $query->execute(); + foreach ($result as $term) { + $path = ckeditor_link_path_prefix_language('taxonomy/term/'. $term->tid, $term->language); + $matches[$path] = $term->name; + } + } + + return $matches; +} + +/** + * Implementation of hook_ckeditor_link_TYPE_revert(). + */ +function ckeditor_link_ckeditor_link_i18n_taxonomy_revert($path, &$langcode) { + if (!preg_match('`^taxonomy/term/(\d+)$`', $path, $matches)) { + return; + } + + $tid = $matches[1]; + $result = db_select('taxonomy_term_data', 't') + ->fields('t', array('tid', 'vid', 'name', 'language')) + ->condition('t.tid', $tid) + ->addTag('term_access') + ->execute(); + if ($term = $result->fetchObject()) { + if ($term->language == LANGUAGE_NONE) { + return i18n_taxonomy_term_name($term, $langcode); + } + else { + $langcode = LANGUAGE_NONE; + return $term->name; + } + } + + return FALSE; +} diff --git a/sites/all/modules/contrib/ckeditor_link/includes/ckeditor_link.menu.inc b/sites/all/modules/contrib/ckeditor_link/includes/ckeditor_link.menu.inc new file mode 100644 index 0000000000..2faeb15da5 --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link/includes/ckeditor_link.menu.inc @@ -0,0 +1,84 @@ + + * http://www.absyx.fr + */ + +/** + * Implementation of hook_ckeditor_link_TYPE_autocomplete(). + */ +function ckeditor_link_ckeditor_link_menu_autocomplete($string, $limit) { + $matches = array(); + + $menus = array_keys(array_filter(variable_get('ckeditor_link_autocomplete_menus', array()))); + if (count($menus)) { + $query = db_select('menu_links') + ->fields('menu_links', array('link_path', 'link_title')) + ->condition('link_title', '%'. db_like($string) .'%', 'LIKE') + ->condition('hidden', 0) + ->condition('external', 0) + ->orderBy('link_title') + ->range(0, $limit); + if (function_exists('ckeditor_link_ckeditor_link_i18n_menu_autocomplete')) { + $query->fields('menu_links', array('language')); + } + if (!in_array('- any -', $menus)) { + $query->condition('menu_name', $menus, 'IN'); + } + $result = $query->execute(); + foreach ($result as $item) { + if (_ckeditor_link_check_path($item->link_path)) { + $router_item = menu_get_item($item->link_path); + if ($router_item && $router_item['access']) { + $langcode = (isset($item->language)) ? $item->language : LANGUAGE_NONE; + $path = ckeditor_link_path_prefix_language($item->link_path, $langcode); + $matches[$path] = $item->link_title; + } + } + } + } + + return $matches; +} + +/** + * Implementation of hook_ckeditor_link_TYPE_revert(). + */ +function ckeditor_link_ckeditor_link_menu_revert($path, &$langcode) { + if (function_exists('ckeditor_link_ckeditor_link_i18n_menu_revert')) { + return; + } + + $router_item = menu_get_item($path); + if ($router_item) { + if (!$router_item['access']) { + return FALSE; + } + $link_title = db_query("SELECT link_title FROM {menu_links} WHERE link_path = :link_path AND hidden = 0 ORDER BY customized DESC", array(':link_path' => $path))->fetchField(); + return ($link_title) ? $link_title : NULL; + } +} + +/** + * Implementation of hook_ckeditor_link_TYPE_settings(). + */ +function ckeditor_link_ckeditor_link_menu_settings() { + $form = array(); + + if (module_exists('menu')) { + $form['menu'] = array( + '#type' => 'fieldset', + '#title' => t('Menu items'), + ); + $form['menu']['ckeditor_link_autocomplete_menus'] = array( + '#type' => 'checkboxes', + '#title' => t('Menus'), + '#options' => array('- any -' => t('Any menu')) + array_map('check_plain', menu_get_menus()), + '#default_value' => variable_get('ckeditor_link_autocomplete_menus', array()), + '#description' => t('Select the menus to be available as autocomplete suggestions.'), + ); + } + + return $form; +} diff --git a/sites/all/modules/contrib/ckeditor_link/includes/ckeditor_link.node.inc b/sites/all/modules/contrib/ckeditor_link/includes/ckeditor_link.node.inc new file mode 100644 index 0000000000..0cbe20a012 --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link/includes/ckeditor_link.node.inc @@ -0,0 +1,96 @@ + + * http://www.absyx.fr + */ + +/** + * Implementation of hook_ckeditor_link_TYPE_autocomplete(). + */ +function ckeditor_link_ckeditor_link_node_autocomplete($string, $limit) { + $matches = array(); + + $node_types = array_keys(array_filter(variable_get('ckeditor_link_autocomplete_node_types', array('- any -' => '- any -')))); + if (count($node_types)) { + $query = db_select('node', 'n') + ->fields('n', array('nid', 'title')) + ->condition('n.title', '%'. db_like($string) .'%', 'LIKE') + ->orderBy('n.title') + ->orderBy('n.type') + ->range(0, $limit) + ->addTag('node_access'); + if (!in_array('- any -', $node_types)) { + $query->condition('n.type', $node_types, 'IN'); + } + $result = $query->execute(); + foreach ($result as $node) { + $matches['node/'. $node->nid] = $node->title; + } + } + + return $matches; +} + +/** + * Implementation of hook_ckeditor_link_TYPE_revert(). + */ +function ckeditor_link_ckeditor_link_node_revert($path, &$langcode) { + if (!preg_match('`^node/(\d+)$`', $path, $matches)) { + return; + } + + $nid = $matches[1]; + $query = db_select('node', 'n') + ->fields('n', array('title', 'language')) + ->condition('n.nid', $nid) + ->addTag('node_access'); + if ($node = $query->execute()->fetchObject()) { + if ($node->language != LANGUAGE_NONE) { + $langcode = LANGUAGE_NONE; + } + return $node->title; + } + + return FALSE; +} + +/** + * Implementation of hook_ckeditor_link_TYPE_url(). + */ +function ckeditor_link_ckeditor_link_node_url($path, $langcode) { + if (!preg_match('`^node/(\d+)$`', $path, $matches)) { + return; + } + + $nid = $matches[1]; + + $languages = ckeditor_link_get_languages(); + if ($languages) { + $language = db_query('SELECT language FROM {node} WHERE nid = :nid', array(':nid' => $nid))->fetchField(); + if ($language && ($language != LANGUAGE_NONE) && isset($languages[$language])) { + $langcode = $language; + } + } + + return ckeditor_link_url("node/$nid", $langcode); +} + +/** + * Implementation of hook_ckeditor_link_TYPE_settings(). + */ +function ckeditor_link_ckeditor_link_node_settings() { + $form['node'] = array( + '#type' => 'fieldset', + '#title' => t('Nodes'), + ); + $form['node']['ckeditor_link_autocomplete_node_types'] = array( + '#type' => 'checkboxes', + '#title' => t('Content types'), + '#options' => array('- any -' => t('Any content type')) + array_map('check_plain', node_type_get_names()), + '#default_value' => variable_get('ckeditor_link_autocomplete_node_types', array('- any -' => '- any -')), + '#description' => t('Select the content types to be available as autocomplete suggestions.'), + ); + + return $form; +} diff --git a/sites/all/modules/contrib/ckeditor_link/includes/ckeditor_link.taxonomy.inc b/sites/all/modules/contrib/ckeditor_link/includes/ckeditor_link.taxonomy.inc new file mode 100644 index 0000000000..a38ed5048e --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link/includes/ckeditor_link.taxonomy.inc @@ -0,0 +1,97 @@ + + * http://www.absyx.fr + */ + +/** + * Implementation of hook_ckeditor_link_TYPE_autocomplete(). + */ +function ckeditor_link_ckeditor_link_taxonomy_autocomplete($string, $limit) { + $matches = array(); + + $vocabularies = array_keys(array_filter(variable_get('ckeditor_link_autocomplete_vocabularies', array()))); + if (count($vocabularies)) { + $query = db_select('taxonomy_term_data', 't') + ->fields('t', array('tid', 'name')) + ->condition('t.name', '%'. db_like($string) .'%', 'LIKE') + ->orderBy('t.name') + ->range(0, $limit) + ->addTag('term_access'); + if (!in_array('- any -', $vocabularies)) { + $query->condition('t.vid', $vocabularies, 'IN'); + } + $result = $query->execute(); + foreach ($result as $term) { + $matches['taxonomy/term/'. $term->tid] = $term->name; + } + } + + return $matches; +} + +/** + * Implementation of hook_ckeditor_link_TYPE_revert(). + */ +function ckeditor_link_ckeditor_link_taxonomy_revert($path, &$langcode) { + if (function_exists('ckeditor_link_ckeditor_link_i18n_taxonomy_revert') + || !preg_match('`^taxonomy/term/(\d+)$`', $path, $matches)) { + return; + } + + $tid = $matches[1]; + $name = db_select('taxonomy_term_data', 't') + ->fields('t', array('name')) + ->condition('t.tid', $tid) + ->addTag('term_access') + ->execute() + ->fetchField(); + return ($name) ? $name : FALSE; +} + +/** + * Implementation of hook_ckeditor_link_TYPE_url(). + */ +function ckeditor_link_ckeditor_link_taxonomy_url($path, $langcode) { + if (!preg_match('`^taxonomy/term/(\d+)$`', $path, $matches)) { + return; + } + + $tid = $matches[1]; + + $languages = ckeditor_link_get_languages(); + if ($languages) { + $term = taxonomy_term_load($tid); + if ($term && ($language = @$term->language) && ($language != LANGUAGE_NONE) && isset($languages[$language])) { + $langcode = $language; + } + } + + return ckeditor_link_url("taxonomy/term/$tid", $langcode); +} + +/** + * Implementation of hook_ckeditor_link_TYPE_settings(). + */ +function ckeditor_link_ckeditor_link_taxonomy_settings() { + $form['taxonomy'] = array( + '#type' => 'fieldset', + '#title' => t('Taxonomy terms'), + ); + + $vocabularies = taxonomy_get_vocabularies(); + $options = array('- any -' => t('Any vocabulary')); + foreach ($vocabularies as $vid => $vocabulary) { + $options[$vid] = check_plain($vocabulary->name); + } + $form['taxonomy']['ckeditor_link_autocomplete_vocabularies'] = array( + '#type' => 'checkboxes', + '#title' => t('Vocabularies'), + '#options' => $options, + '#default_value' => variable_get('ckeditor_link_autocomplete_vocabularies', array()), + '#description' => t('Select the vocabularies to be available as autocomplete suggestions.'), + ); + + return $form; +} diff --git a/sites/all/modules/contrib/ckeditor_link/plugins/link/plugin.js b/sites/all/modules/contrib/ckeditor_link/plugins/link/plugin.js new file mode 100644 index 0000000000..3541beb559 --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link/plugins/link/plugin.js @@ -0,0 +1,195 @@ +/** + * @file + * Written by Henri MEDOT + * http://www.absyx.fr + * + * Portions of code: + * Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ + +(function($) { + + // Get a CKEDITOR.dialog.contentDefinition object by its ID. + var getById = function(array, id, recurse) { + for (var i = 0, item; (item = array[i]); i++) { + if (item.id == id) return item; + if (recurse && item[recurse]) { + var retval = getById(item[recurse], id, recurse); + if (retval) return retval; + } + } + return null; + }; + + var resetInitValues = function(dialog) { + dialog.foreach(function(contentObj) { + contentObj.setInitValue && contentObj.setInitValue(); + }); + }; + + var initAutocomplete = function(input, uri) { + input.setAttribute('autocomplete', 'OFF'); + new Drupal.jsAC($(input), new Drupal.ACDB(uri)); + }; + + var extractPath = function(value) { + value = CKEDITOR.tools.trim(value); + var match; + match = /\(([^\(]*?)\)$/i.exec(value); + if (match && match[1]) { + value = match[1]; + } + var basePath = Drupal.settings.basePath; + if (value.indexOf(basePath) == 0) { + value = value.substr(basePath.length); + } + if (/^[a-z][\w\/\.-]*$/i.test(value)) { + return value; + } + return false; + }; + + var cache = {}, revertPath = function(value, callback) { + var path = extractPath(value); + if (!path) { + return false; + } + if (cache[path] !== undefined) { + return cache[path]; + } + $.getJSON(Drupal.settings.ckeditor_link.revert_path + '/' + Drupal.encodePath(path), function(data) { + cache[path] = data; + callback(); + }); + }; + + CKEDITOR.plugins.add('drupal_path', { + + init: function(editor, pluginPath) { + CKEDITOR.on('dialogDefinition', function(e) { + if ((e.editor != editor) || (e.data.name != 'link') || !Drupal.settings.ckeditor_link) return; + + // Overrides definition. + var definition = e.data.definition; + definition.onFocus = CKEDITOR.tools.override(definition.onFocus, function(original) { + return function() { + original.call(this); + if (this.getValueOf('info', 'linkType') == 'drupal') { + this.getContentElement('info', 'drupal_path').select(); + } + }; + }); + definition.onOk = CKEDITOR.tools.override(definition.onOk, function(original) { + return function() { + var process = false; + if ((this.getValueOf('info', 'linkType') == 'drupal') && !this._.selectedElement) { + var ranges = editor.getSelection().getRanges(true); + if ((ranges.length == 1) && ranges[0].collapsed) { + process = true; + } + } + original.call(this); + if (process) { + var value = this.getValueOf('info', 'drupal_path'); + var index = value.lastIndexOf('('); + if (index != -1) { + var text = CKEDITOR.tools.trim(value.substr(0, index)); + if (text) { + CKEDITOR.plugins.link.getSelectedLink(editor).setText(text); + } + } + } + }; + }); + + // Overrides linkType definition. + var infoTab = definition.getContents('info'); + var content = getById(infoTab.elements, 'linkType'); + content.items.unshift([Drupal.settings.ckeditor_link.type_name, 'drupal']); + infoTab.elements.push({ + type: 'vbox', + id: 'drupalOptions', + children: [{ + type: 'text', + id: 'drupal_path', + label: editor.lang.link.title, + required: true, + onLoad: function() { + this.getInputElement().addClass('form-autocomplete'); + initAutocomplete(this.getInputElement().$, Drupal.settings.ckeditor_link.autocomplete_path); + }, + setup: function(data) { + this.setValue(data.drupal_path || ''); + }, + validate: function() { + var dialog = this.getDialog(); + if (dialog.getValueOf('info', 'linkType') != 'drupal') { + return true; + } + var func = CKEDITOR.dialog.validate.notEmpty(editor.lang.link.noUrl); + if (!func.apply(this)) { + return false; + } + if (!extractPath(this.getValue())) { + alert(Drupal.settings.ckeditor_link.msg_invalid_path); + this.focus(); + return false; + } + return true; + } + }] + }); + content.onChange = CKEDITOR.tools.override(content.onChange, function(original) { + return function() { + original.call(this); + var dialog = this.getDialog(); + var element = dialog.getContentElement('info', 'drupalOptions').getElement().getParent().getParent(); + if (this.getValue() == 'drupal') { + element.show(); + if (editor.config.linkShowTargetTab) { + dialog.showPage('target'); + } + var uploadTab = dialog.definition.getContents('upload'); + if (uploadTab && !uploadTab.hidden) { + dialog.hidePage('upload'); + } + } + else { + element.hide(); + } + }; + }); + content.setup = function(data) { + if (!data.type || (data.type == 'url') && !data.url) { + if (Drupal.settings.ckeditor_link.type_selected) { + data.type = 'drupal'; + } + } + else if (data.url && !data.url.protocol && data.url.url) { + var dialog = this.getDialog(); + var path = revertPath(data.url.url, function() { + dialog.setupContent(data); + resetInitValues(dialog); + }); + if (path) { + data.type = 'drupal'; + data.drupal_path = path; + delete data.url; + } + } + this.setValue(data.type); + }; + content.commit = function(data) { + data.type = this.getValue(); + if (data.type == 'drupal') { + data.type = 'url'; + var dialog = this.getDialog(); + dialog.setValueOf('info', 'protocol', ''); + dialog.setValueOf('info', 'url', Drupal.settings.basePath + extractPath(dialog.getValueOf('info', 'drupal_path'))); + } + }; + }); + } + }); +})(jQuery); \ No newline at end of file diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/LICENSE.txt b/sites/all/modules/contrib/ckeditor_link_user/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/LICENSE.txt rename to sites/all/modules/contrib/ckeditor_link_user/LICENSE.txt diff --git a/sites/all/modules/contrib/ckeditor_link_user/ckeditor_link_user.info b/sites/all/modules/contrib/ckeditor_link_user/ckeditor_link_user.info new file mode 100644 index 0000000000..5e142d6694 --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link_user/ckeditor_link_user.info @@ -0,0 +1,12 @@ +name = CKEditor Link for Users +description = Easily create links to Drupal users through CKEditor. +package = User interface +core = 7.x +configure = admin/config/content/ckeditor_link +dependencies[] = ckeditor_link +; Information added by drupal.org packaging script on 2012-04-25 +version = "7.x-1.0" +core = "7.x" +project = "ckeditor_link_user" +datestamp = "1335382578" + diff --git a/sites/all/modules/contrib/ckeditor_link_user/ckeditor_link_user.module b/sites/all/modules/contrib/ckeditor_link_user/ckeditor_link_user.module new file mode 100644 index 0000000000..f61e4f9c1f --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link_user/ckeditor_link_user.module @@ -0,0 +1,9 @@ + 'user', 'file' => 'includes/ckeditor_link_user.user.inc'); + return $types; +} \ No newline at end of file diff --git a/sites/all/modules/contrib/ckeditor_link_user/includes/ckeditor_link_user.user.inc b/sites/all/modules/contrib/ckeditor_link_user/includes/ckeditor_link_user.user.inc new file mode 100644 index 0000000000..8bc83e4910 --- /dev/null +++ b/sites/all/modules/contrib/ckeditor_link_user/includes/ckeditor_link_user.user.inc @@ -0,0 +1,34 @@ +fields('users', array('uid', 'name')) + ->condition('name', '%'. db_like($string) .'%', 'LIKE') + ->range(0, 10) + // ->addTag('user_access'); // Make a proper access hook + ->execute(); + + foreach ($result as $user) { + $matches['user/'. $user->uid] = t('User: @name', array('@name' => $user->name)); + } + + return $matches; +} + +/** + * Implementation of hook_ckeditor_link_TYPE_url(). + */ +function ckeditor_link_user_ckeditor_link_user_url($path, $langcode) { + if (!preg_match('`^user/(\d+)$`', $path, $matches)) { + return; + } + + $uid = $matches[1]; + + return ckeditor_link_url("user/$uid", $langcode); +} \ No newline at end of file diff --git a/sites/all/modules/custom/commerce/.gitignore b/sites/all/modules/contrib/commerce/.gitignore similarity index 100% rename from sites/all/modules/custom/commerce/.gitignore rename to sites/all/modules/contrib/commerce/.gitignore diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_uuid/LICENSE.txt b/sites/all/modules/contrib/commerce/LICENSE.txt old mode 100755 new mode 100644 similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_uuid/LICENSE.txt rename to sites/all/modules/contrib/commerce/LICENSE.txt diff --git a/sites/all/modules/custom/commerce/README.txt b/sites/all/modules/contrib/commerce/README.txt similarity index 100% rename from sites/all/modules/custom/commerce/README.txt rename to sites/all/modules/contrib/commerce/README.txt diff --git a/sites/all/modules/custom/commerce/commerce.api.php b/sites/all/modules/contrib/commerce/commerce.api.php similarity index 100% rename from sites/all/modules/custom/commerce/commerce.api.php rename to sites/all/modules/contrib/commerce/commerce.api.php diff --git a/sites/all/modules/custom/commerce/commerce.info b/sites/all/modules/contrib/commerce/commerce.info similarity index 100% rename from sites/all/modules/custom/commerce/commerce.info rename to sites/all/modules/contrib/commerce/commerce.info diff --git a/sites/all/modules/custom/commerce/commerce.install b/sites/all/modules/contrib/commerce/commerce.install similarity index 100% rename from sites/all/modules/custom/commerce/commerce.install rename to sites/all/modules/contrib/commerce/commerce.install diff --git a/sites/all/modules/custom/commerce/commerce.module b/sites/all/modules/contrib/commerce/commerce.module similarity index 100% rename from sites/all/modules/custom/commerce/commerce.module rename to sites/all/modules/contrib/commerce/commerce.module diff --git a/sites/all/modules/custom/commerce/commerce.rules.inc b/sites/all/modules/contrib/commerce/commerce.rules.inc similarity index 100% rename from sites/all/modules/custom/commerce/commerce.rules.inc rename to sites/all/modules/contrib/commerce/commerce.rules.inc diff --git a/sites/all/modules/custom/commerce/commerce_ui.info b/sites/all/modules/contrib/commerce/commerce_ui.info similarity index 100% rename from sites/all/modules/custom/commerce/commerce_ui.info rename to sites/all/modules/contrib/commerce/commerce_ui.info diff --git a/sites/all/modules/custom/commerce/commerce_ui.module b/sites/all/modules/contrib/commerce/commerce_ui.module similarity index 100% rename from sites/all/modules/custom/commerce/commerce_ui.module rename to sites/all/modules/contrib/commerce/commerce_ui.module diff --git a/sites/all/modules/custom/commerce/help/README.txt b/sites/all/modules/contrib/commerce/help/README.txt similarity index 100% rename from sites/all/modules/custom/commerce/help/README.txt rename to sites/all/modules/contrib/commerce/help/README.txt diff --git a/sites/all/modules/custom/commerce/includes/commerce.controller.inc b/sites/all/modules/contrib/commerce/includes/commerce.controller.inc similarity index 100% rename from sites/all/modules/custom/commerce/includes/commerce.controller.inc rename to sites/all/modules/contrib/commerce/includes/commerce.controller.inc diff --git a/sites/all/modules/custom/commerce/includes/commerce.currency.inc b/sites/all/modules/contrib/commerce/includes/commerce.currency.inc similarity index 100% rename from sites/all/modules/custom/commerce/includes/commerce.currency.inc rename to sites/all/modules/contrib/commerce/includes/commerce.currency.inc diff --git a/sites/all/modules/custom/commerce/includes/commerce_ui.admin.inc b/sites/all/modules/contrib/commerce/includes/commerce_ui.admin.inc similarity index 100% rename from sites/all/modules/custom/commerce/includes/commerce_ui.admin.inc rename to sites/all/modules/contrib/commerce/includes/commerce_ui.admin.inc diff --git a/sites/all/modules/custom/commerce/includes/views/README.txt b/sites/all/modules/contrib/commerce/includes/views/README.txt similarity index 100% rename from sites/all/modules/custom/commerce/includes/views/README.txt rename to sites/all/modules/contrib/commerce/includes/views/README.txt diff --git a/sites/all/modules/custom/commerce/modules/README.txt b/sites/all/modules/contrib/commerce/modules/README.txt similarity index 100% rename from sites/all/modules/custom/commerce/modules/README.txt rename to sites/all/modules/contrib/commerce/modules/README.txt diff --git a/sites/all/modules/custom/commerce/modules/cart/commerce_cart.api.php b/sites/all/modules/contrib/commerce/modules/cart/commerce_cart.api.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/commerce_cart.api.php rename to sites/all/modules/contrib/commerce/modules/cart/commerce_cart.api.php diff --git a/sites/all/modules/custom/commerce/modules/cart/commerce_cart.info b/sites/all/modules/contrib/commerce/modules/cart/commerce_cart.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/commerce_cart.info rename to sites/all/modules/contrib/commerce/modules/cart/commerce_cart.info diff --git a/sites/all/modules/custom/commerce/modules/cart/commerce_cart.info.inc b/sites/all/modules/contrib/commerce/modules/cart/commerce_cart.info.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/commerce_cart.info.inc rename to sites/all/modules/contrib/commerce/modules/cart/commerce_cart.info.inc diff --git a/sites/all/modules/custom/commerce/modules/cart/commerce_cart.install b/sites/all/modules/contrib/commerce/modules/cart/commerce_cart.install similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/commerce_cart.install rename to sites/all/modules/contrib/commerce/modules/cart/commerce_cart.install diff --git a/sites/all/modules/custom/commerce/modules/cart/commerce_cart.module b/sites/all/modules/contrib/commerce/modules/cart/commerce_cart.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/commerce_cart.module rename to sites/all/modules/contrib/commerce/modules/cart/commerce_cart.module diff --git a/sites/all/modules/custom/commerce/modules/cart/commerce_cart.rules.inc b/sites/all/modules/contrib/commerce/modules/cart/commerce_cart.rules.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/commerce_cart.rules.inc rename to sites/all/modules/contrib/commerce/modules/cart/commerce_cart.rules.inc diff --git a/sites/all/modules/custom/commerce/modules/cart/commerce_cart.rules_defaults.inc b/sites/all/modules/contrib/commerce/modules/cart/commerce_cart.rules_defaults.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/commerce_cart.rules_defaults.inc rename to sites/all/modules/contrib/commerce/modules/cart/commerce_cart.rules_defaults.inc diff --git a/sites/all/modules/custom/commerce/modules/cart/includes/commerce_cart.admin.inc b/sites/all/modules/contrib/commerce/modules/cart/includes/commerce_cart.admin.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/includes/commerce_cart.admin.inc rename to sites/all/modules/contrib/commerce/modules/cart/includes/commerce_cart.admin.inc diff --git a/sites/all/modules/custom/commerce/modules/cart/includes/commerce_cart.checkout_pane.inc b/sites/all/modules/contrib/commerce/modules/cart/includes/commerce_cart.checkout_pane.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/includes/commerce_cart.checkout_pane.inc rename to sites/all/modules/contrib/commerce/modules/cart/includes/commerce_cart.checkout_pane.inc diff --git a/sites/all/modules/custom/commerce/modules/cart/includes/commerce_cart.pages.inc b/sites/all/modules/contrib/commerce/modules/cart/includes/commerce_cart.pages.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/includes/commerce_cart.pages.inc rename to sites/all/modules/contrib/commerce/modules/cart/includes/commerce_cart.pages.inc diff --git a/sites/all/modules/custom/commerce/modules/cart/includes/views/commerce_cart.views.inc b/sites/all/modules/contrib/commerce/modules/cart/includes/views/commerce_cart.views.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/includes/views/commerce_cart.views.inc rename to sites/all/modules/contrib/commerce/modules/cart/includes/views/commerce_cart.views.inc diff --git a/sites/all/modules/custom/commerce/modules/cart/includes/views/commerce_cart.views_default.inc b/sites/all/modules/contrib/commerce/modules/cart/includes/views/commerce_cart.views_default.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/includes/views/commerce_cart.views_default.inc rename to sites/all/modules/contrib/commerce/modules/cart/includes/views/commerce_cart.views_default.inc diff --git a/sites/all/modules/custom/commerce/modules/cart/includes/views/handlers/commerce_cart_handler_area_empty_text.inc b/sites/all/modules/contrib/commerce/modules/cart/includes/views/handlers/commerce_cart_handler_area_empty_text.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/includes/views/handlers/commerce_cart_handler_area_empty_text.inc rename to sites/all/modules/contrib/commerce/modules/cart/includes/views/handlers/commerce_cart_handler_area_empty_text.inc diff --git a/sites/all/modules/custom/commerce/modules/cart/includes/views/handlers/commerce_cart_handler_field_add_to_cart_form.inc b/sites/all/modules/contrib/commerce/modules/cart/includes/views/handlers/commerce_cart_handler_field_add_to_cart_form.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/includes/views/handlers/commerce_cart_handler_field_add_to_cart_form.inc rename to sites/all/modules/contrib/commerce/modules/cart/includes/views/handlers/commerce_cart_handler_field_add_to_cart_form.inc diff --git a/sites/all/modules/custom/commerce/modules/cart/includes/views/handlers/commerce_cart_plugin_argument_default_current_cart_order_id.inc b/sites/all/modules/contrib/commerce/modules/cart/includes/views/handlers/commerce_cart_plugin_argument_default_current_cart_order_id.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/includes/views/handlers/commerce_cart_plugin_argument_default_current_cart_order_id.inc rename to sites/all/modules/contrib/commerce/modules/cart/includes/views/handlers/commerce_cart_plugin_argument_default_current_cart_order_id.inc diff --git a/sites/all/modules/custom/commerce/modules/cart/tests/commerce_cart.test b/sites/all/modules/contrib/commerce/modules/cart/tests/commerce_cart.test similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/tests/commerce_cart.test rename to sites/all/modules/contrib/commerce/modules/cart/tests/commerce_cart.test diff --git a/sites/all/modules/custom/commerce/modules/cart/theme/buttons.png b/sites/all/modules/contrib/commerce/modules/cart/theme/buttons.png similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/theme/buttons.png rename to sites/all/modules/contrib/commerce/modules/cart/theme/buttons.png diff --git a/sites/all/modules/custom/commerce/modules/cart/theme/commerce-cart-block.tpl.php b/sites/all/modules/contrib/commerce/modules/cart/theme/commerce-cart-block.tpl.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/theme/commerce-cart-block.tpl.php rename to sites/all/modules/contrib/commerce/modules/cart/theme/commerce-cart-block.tpl.php diff --git a/sites/all/modules/custom/commerce/modules/cart/theme/commerce_cart.theme.css b/sites/all/modules/contrib/commerce/modules/cart/theme/commerce_cart.theme.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/cart/theme/commerce_cart.theme.css rename to sites/all/modules/contrib/commerce/modules/cart/theme/commerce_cart.theme.css diff --git a/sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.api.php b/sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout.api.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.api.php rename to sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout.api.php diff --git a/sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.info b/sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.info rename to sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout.info diff --git a/sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.install b/sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout.install similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.install rename to sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout.install diff --git a/sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.js b/sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout.js similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.js rename to sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout.js diff --git a/sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.module b/sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.module rename to sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout.module diff --git a/sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.rules.inc b/sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout.rules.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.rules.inc rename to sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout.rules.inc diff --git a/sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.rules_defaults.inc b/sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout.rules_defaults.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/commerce_checkout.rules_defaults.inc rename to sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout.rules_defaults.inc diff --git a/sites/all/modules/custom/commerce/modules/checkout/commerce_checkout_admin.js b/sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout_admin.js similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/commerce_checkout_admin.js rename to sites/all/modules/contrib/commerce/modules/checkout/commerce_checkout_admin.js diff --git a/sites/all/modules/custom/commerce/modules/checkout/images/status-active.gif b/sites/all/modules/contrib/commerce/modules/checkout/images/status-active.gif similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/images/status-active.gif rename to sites/all/modules/contrib/commerce/modules/checkout/images/status-active.gif diff --git a/sites/all/modules/custom/commerce/modules/checkout/includes/commerce_checkout.admin.inc b/sites/all/modules/contrib/commerce/modules/checkout/includes/commerce_checkout.admin.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/includes/commerce_checkout.admin.inc rename to sites/all/modules/contrib/commerce/modules/checkout/includes/commerce_checkout.admin.inc diff --git a/sites/all/modules/custom/commerce/modules/checkout/includes/commerce_checkout.checkout_pane.inc b/sites/all/modules/contrib/commerce/modules/checkout/includes/commerce_checkout.checkout_pane.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/includes/commerce_checkout.checkout_pane.inc rename to sites/all/modules/contrib/commerce/modules/checkout/includes/commerce_checkout.checkout_pane.inc diff --git a/sites/all/modules/custom/commerce/modules/checkout/includes/commerce_checkout.pages.inc b/sites/all/modules/contrib/commerce/modules/checkout/includes/commerce_checkout.pages.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/includes/commerce_checkout.pages.inc rename to sites/all/modules/contrib/commerce/modules/checkout/includes/commerce_checkout.pages.inc diff --git a/sites/all/modules/custom/commerce/modules/checkout/tests/commerce_checkout.test b/sites/all/modules/contrib/commerce/modules/checkout/tests/commerce_checkout.test similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/tests/commerce_checkout.test rename to sites/all/modules/contrib/commerce/modules/checkout/tests/commerce_checkout.test diff --git a/sites/all/modules/custom/commerce/modules/checkout/theme/commerce-checkout-errors-message.tpl.php b/sites/all/modules/contrib/commerce/modules/checkout/theme/commerce-checkout-errors-message.tpl.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/theme/commerce-checkout-errors-message.tpl.php rename to sites/all/modules/contrib/commerce/modules/checkout/theme/commerce-checkout-errors-message.tpl.php diff --git a/sites/all/modules/custom/commerce/modules/checkout/theme/commerce-checkout-help.tpl.php b/sites/all/modules/contrib/commerce/modules/checkout/theme/commerce-checkout-help.tpl.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/theme/commerce-checkout-help.tpl.php rename to sites/all/modules/contrib/commerce/modules/checkout/theme/commerce-checkout-help.tpl.php diff --git a/sites/all/modules/custom/commerce/modules/checkout/theme/commerce_checkout.admin.css b/sites/all/modules/contrib/commerce/modules/checkout/theme/commerce_checkout.admin.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/theme/commerce_checkout.admin.css rename to sites/all/modules/contrib/commerce/modules/checkout/theme/commerce_checkout.admin.css diff --git a/sites/all/modules/custom/commerce/modules/checkout/theme/commerce_checkout.base-rtl.css b/sites/all/modules/contrib/commerce/modules/checkout/theme/commerce_checkout.base-rtl.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/theme/commerce_checkout.base-rtl.css rename to sites/all/modules/contrib/commerce/modules/checkout/theme/commerce_checkout.base-rtl.css diff --git a/sites/all/modules/custom/commerce/modules/checkout/theme/commerce_checkout.base.css b/sites/all/modules/contrib/commerce/modules/checkout/theme/commerce_checkout.base.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/theme/commerce_checkout.base.css rename to sites/all/modules/contrib/commerce/modules/checkout/theme/commerce_checkout.base.css diff --git a/sites/all/modules/custom/commerce/modules/checkout/theme/commerce_checkout.theme-rtl.css b/sites/all/modules/contrib/commerce/modules/checkout/theme/commerce_checkout.theme-rtl.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/theme/commerce_checkout.theme-rtl.css rename to sites/all/modules/contrib/commerce/modules/checkout/theme/commerce_checkout.theme-rtl.css diff --git a/sites/all/modules/custom/commerce/modules/checkout/theme/commerce_checkout.theme.css b/sites/all/modules/contrib/commerce/modules/checkout/theme/commerce_checkout.theme.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/checkout/theme/commerce_checkout.theme.css rename to sites/all/modules/contrib/commerce/modules/checkout/theme/commerce_checkout.theme.css diff --git a/sites/all/modules/custom/commerce/modules/customer/commerce_customer.api.php b/sites/all/modules/contrib/commerce/modules/customer/commerce_customer.api.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/commerce_customer.api.php rename to sites/all/modules/contrib/commerce/modules/customer/commerce_customer.api.php diff --git a/sites/all/modules/custom/commerce/modules/customer/commerce_customer.info b/sites/all/modules/contrib/commerce/modules/customer/commerce_customer.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/commerce_customer.info rename to sites/all/modules/contrib/commerce/modules/customer/commerce_customer.info diff --git a/sites/all/modules/custom/commerce/modules/customer/commerce_customer.info.inc b/sites/all/modules/contrib/commerce/modules/customer/commerce_customer.info.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/commerce_customer.info.inc rename to sites/all/modules/contrib/commerce/modules/customer/commerce_customer.info.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/commerce_customer.install b/sites/all/modules/contrib/commerce/modules/customer/commerce_customer.install similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/commerce_customer.install rename to sites/all/modules/contrib/commerce/modules/customer/commerce_customer.install diff --git a/sites/all/modules/custom/commerce/modules/customer/commerce_customer.js b/sites/all/modules/contrib/commerce/modules/customer/commerce_customer.js similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/commerce_customer.js rename to sites/all/modules/contrib/commerce/modules/customer/commerce_customer.js diff --git a/sites/all/modules/custom/commerce/modules/customer/commerce_customer.module b/sites/all/modules/contrib/commerce/modules/customer/commerce_customer.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/commerce_customer.module rename to sites/all/modules/contrib/commerce/modules/customer/commerce_customer.module diff --git a/sites/all/modules/custom/commerce/modules/customer/commerce_customer.tokens.inc b/sites/all/modules/contrib/commerce/modules/customer/commerce_customer.tokens.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/commerce_customer.tokens.inc rename to sites/all/modules/contrib/commerce/modules/customer/commerce_customer.tokens.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/commerce_customer_ui.info b/sites/all/modules/contrib/commerce/modules/customer/commerce_customer_ui.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/commerce_customer_ui.info rename to sites/all/modules/contrib/commerce/modules/customer/commerce_customer_ui.info diff --git a/sites/all/modules/custom/commerce/modules/customer/commerce_customer_ui.module b/sites/all/modules/contrib/commerce/modules/customer/commerce_customer_ui.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/commerce_customer_ui.module rename to sites/all/modules/contrib/commerce/modules/customer/commerce_customer_ui.module diff --git a/sites/all/modules/custom/commerce/modules/customer/includes/commerce_customer.checkout_pane.inc b/sites/all/modules/contrib/commerce/modules/customer/includes/commerce_customer.checkout_pane.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/includes/commerce_customer.checkout_pane.inc rename to sites/all/modules/contrib/commerce/modules/customer/includes/commerce_customer.checkout_pane.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/includes/commerce_customer_profile.controller.inc b/sites/all/modules/contrib/commerce/modules/customer/includes/commerce_customer_profile.controller.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/includes/commerce_customer_profile.controller.inc rename to sites/all/modules/contrib/commerce/modules/customer/includes/commerce_customer_profile.controller.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/includes/commerce_customer_profile.forms.inc b/sites/all/modules/contrib/commerce/modules/customer/includes/commerce_customer_profile.forms.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/includes/commerce_customer_profile.forms.inc rename to sites/all/modules/contrib/commerce/modules/customer/includes/commerce_customer_profile.forms.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/includes/commerce_customer_ui.profile_types.inc b/sites/all/modules/contrib/commerce/modules/customer/includes/commerce_customer_ui.profile_types.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/includes/commerce_customer_ui.profile_types.inc rename to sites/all/modules/contrib/commerce/modules/customer/includes/commerce_customer_ui.profile_types.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/includes/commerce_customer_ui.profiles.inc b/sites/all/modules/contrib/commerce/modules/customer/includes/commerce_customer_ui.profiles.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/includes/commerce_customer_ui.profiles.inc rename to sites/all/modules/contrib/commerce/modules/customer/includes/commerce_customer_ui.profiles.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/includes/views/commerce_customer.views.inc b/sites/all/modules/contrib/commerce/modules/customer/includes/views/commerce_customer.views.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/includes/views/commerce_customer.views.inc rename to sites/all/modules/contrib/commerce/modules/customer/includes/views/commerce_customer.views.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/includes/views/commerce_customer_ui.views_default.inc b/sites/all/modules/contrib/commerce/modules/customer/includes/views/commerce_customer_ui.views_default.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/includes/views/commerce_customer_ui.views_default.inc rename to sites/all/modules/contrib/commerce/modules/customer/includes/views/commerce_customer_ui.views_default.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_area_empty_text.inc b/sites/all/modules/contrib/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_area_empty_text.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_area_empty_text.inc rename to sites/all/modules/contrib/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_area_empty_text.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile.inc b/sites/all/modules/contrib/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile.inc rename to sites/all/modules/contrib/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_link.inc b/sites/all/modules/contrib/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_link.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_link.inc rename to sites/all/modules/contrib/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_link.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_link_delete.inc b/sites/all/modules/contrib/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_link_delete.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_link_delete.inc rename to sites/all/modules/contrib/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_link_delete.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_link_edit.inc b/sites/all/modules/contrib/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_link_edit.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_link_edit.inc rename to sites/all/modules/contrib/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_link_edit.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_type.inc b/sites/all/modules/contrib/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_type.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_type.inc rename to sites/all/modules/contrib/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_field_customer_profile_type.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_filter_customer_profile_type.inc b/sites/all/modules/contrib/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_filter_customer_profile_type.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_filter_customer_profile_type.inc rename to sites/all/modules/contrib/commerce/modules/customer/includes/views/handlers/commerce_customer_handler_filter_customer_profile_type.inc diff --git a/sites/all/modules/custom/commerce/modules/customer/tests/commerce_customer_profile_dummy_type.info b/sites/all/modules/contrib/commerce/modules/customer/tests/commerce_customer_profile_dummy_type.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/tests/commerce_customer_profile_dummy_type.info rename to sites/all/modules/contrib/commerce/modules/customer/tests/commerce_customer_profile_dummy_type.info diff --git a/sites/all/modules/custom/commerce/modules/customer/tests/commerce_customer_profile_dummy_type.module b/sites/all/modules/contrib/commerce/modules/customer/tests/commerce_customer_profile_dummy_type.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/tests/commerce_customer_profile_dummy_type.module rename to sites/all/modules/contrib/commerce/modules/customer/tests/commerce_customer_profile_dummy_type.module diff --git a/sites/all/modules/custom/commerce/modules/customer/tests/commerce_customer_ui.test b/sites/all/modules/contrib/commerce/modules/customer/tests/commerce_customer_ui.test similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/tests/commerce_customer_ui.test rename to sites/all/modules/contrib/commerce/modules/customer/tests/commerce_customer_ui.test diff --git a/sites/all/modules/custom/commerce/modules/customer/theme/commerce_customer.admin.css b/sites/all/modules/contrib/commerce/modules/customer/theme/commerce_customer.admin.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/theme/commerce_customer.admin.css rename to sites/all/modules/contrib/commerce/modules/customer/theme/commerce_customer.admin.css diff --git a/sites/all/modules/custom/commerce/modules/customer/theme/commerce_customer.theme.css b/sites/all/modules/contrib/commerce/modules/customer/theme/commerce_customer.theme.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/customer/theme/commerce_customer.theme.css rename to sites/all/modules/contrib/commerce/modules/customer/theme/commerce_customer.theme.css diff --git a/sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.api.php b/sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.api.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.api.php rename to sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.api.php diff --git a/sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.info b/sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.info rename to sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.info diff --git a/sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.info.inc b/sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.info.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.info.inc rename to sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.info.inc diff --git a/sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.install b/sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.install similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.install rename to sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.install diff --git a/sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.js b/sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.js similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.js rename to sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.js diff --git a/sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.module b/sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.module rename to sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.module diff --git a/sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.rules.inc b/sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.rules.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.rules.inc rename to sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.rules.inc diff --git a/sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.tokens.inc b/sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.tokens.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/commerce_line_item.tokens.inc rename to sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item.tokens.inc diff --git a/sites/all/modules/custom/commerce/modules/line_item/commerce_line_item_ui.info b/sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item_ui.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/commerce_line_item_ui.info rename to sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item_ui.info diff --git a/sites/all/modules/custom/commerce/modules/line_item/commerce_line_item_ui.module b/sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item_ui.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/commerce_line_item_ui.module rename to sites/all/modules/contrib/commerce/modules/line_item/commerce_line_item_ui.module diff --git a/sites/all/modules/custom/commerce/modules/line_item/includes/commerce_line_item.controller.inc b/sites/all/modules/contrib/commerce/modules/line_item/includes/commerce_line_item.controller.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/includes/commerce_line_item.controller.inc rename to sites/all/modules/contrib/commerce/modules/line_item/includes/commerce_line_item.controller.inc diff --git a/sites/all/modules/custom/commerce/modules/line_item/includes/commerce_line_item_ui.types.inc b/sites/all/modules/contrib/commerce/modules/line_item/includes/commerce_line_item_ui.types.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/includes/commerce_line_item_ui.types.inc rename to sites/all/modules/contrib/commerce/modules/line_item/includes/commerce_line_item_ui.types.inc diff --git a/sites/all/modules/custom/commerce/modules/line_item/includes/views/commerce_line_item.views.inc b/sites/all/modules/contrib/commerce/modules/line_item/includes/views/commerce_line_item.views.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/includes/views/commerce_line_item.views.inc rename to sites/all/modules/contrib/commerce/modules/line_item/includes/views/commerce_line_item.views.inc diff --git a/sites/all/modules/custom/commerce/modules/line_item/includes/views/commerce_line_item.views_default.inc b/sites/all/modules/contrib/commerce/modules/line_item/includes/views/commerce_line_item.views_default.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/includes/views/commerce_line_item.views_default.inc rename to sites/all/modules/contrib/commerce/modules/line_item/includes/views/commerce_line_item.views_default.inc diff --git a/sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_area_line_item_summary.inc b/sites/all/modules/contrib/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_area_line_item_summary.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_area_line_item_summary.inc rename to sites/all/modules/contrib/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_area_line_item_summary.inc diff --git a/sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_argument_line_item_line_item_id.inc b/sites/all/modules/contrib/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_argument_line_item_line_item_id.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_argument_line_item_line_item_id.inc rename to sites/all/modules/contrib/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_argument_line_item_line_item_id.inc diff --git a/sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_edit_delete.inc b/sites/all/modules/contrib/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_edit_delete.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_edit_delete.inc rename to sites/all/modules/contrib/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_edit_delete.inc diff --git a/sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_edit_quantity.inc b/sites/all/modules/contrib/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_edit_quantity.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_edit_quantity.inc rename to sites/all/modules/contrib/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_edit_quantity.inc diff --git a/sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_line_item_title.inc b/sites/all/modules/contrib/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_line_item_title.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_line_item_title.inc rename to sites/all/modules/contrib/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_line_item_title.inc diff --git a/sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_line_item_type.inc b/sites/all/modules/contrib/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_line_item_type.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_line_item_type.inc rename to sites/all/modules/contrib/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_field_line_item_type.inc diff --git a/sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_filter_line_item_type.inc b/sites/all/modules/contrib/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_filter_line_item_type.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_filter_line_item_type.inc rename to sites/all/modules/contrib/commerce/modules/line_item/includes/views/handlers/commerce_line_item_handler_filter_line_item_type.inc diff --git a/sites/all/modules/custom/commerce/modules/line_item/theme/commerce-line-item-summary.tpl.php b/sites/all/modules/contrib/commerce/modules/line_item/theme/commerce-line-item-summary.tpl.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/theme/commerce-line-item-summary.tpl.php rename to sites/all/modules/contrib/commerce/modules/line_item/theme/commerce-line-item-summary.tpl.php diff --git a/sites/all/modules/custom/commerce/modules/line_item/theme/commerce_line_item.admin-rtl.css b/sites/all/modules/contrib/commerce/modules/line_item/theme/commerce_line_item.admin-rtl.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/theme/commerce_line_item.admin-rtl.css rename to sites/all/modules/contrib/commerce/modules/line_item/theme/commerce_line_item.admin-rtl.css diff --git a/sites/all/modules/custom/commerce/modules/line_item/theme/commerce_line_item.admin.css b/sites/all/modules/contrib/commerce/modules/line_item/theme/commerce_line_item.admin.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/theme/commerce_line_item.admin.css rename to sites/all/modules/contrib/commerce/modules/line_item/theme/commerce_line_item.admin.css diff --git a/sites/all/modules/custom/commerce/modules/line_item/theme/commerce_line_item.theme-rtl.css b/sites/all/modules/contrib/commerce/modules/line_item/theme/commerce_line_item.theme-rtl.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/theme/commerce_line_item.theme-rtl.css rename to sites/all/modules/contrib/commerce/modules/line_item/theme/commerce_line_item.theme-rtl.css diff --git a/sites/all/modules/custom/commerce/modules/line_item/theme/commerce_line_item.theme.css b/sites/all/modules/contrib/commerce/modules/line_item/theme/commerce_line_item.theme.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/line_item/theme/commerce_line_item.theme.css rename to sites/all/modules/contrib/commerce/modules/line_item/theme/commerce_line_item.theme.css diff --git a/sites/all/modules/custom/commerce/modules/order/commerce_order.api.php b/sites/all/modules/contrib/commerce/modules/order/commerce_order.api.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/commerce_order.api.php rename to sites/all/modules/contrib/commerce/modules/order/commerce_order.api.php diff --git a/sites/all/modules/custom/commerce/modules/order/commerce_order.info b/sites/all/modules/contrib/commerce/modules/order/commerce_order.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/commerce_order.info rename to sites/all/modules/contrib/commerce/modules/order/commerce_order.info diff --git a/sites/all/modules/custom/commerce/modules/order/commerce_order.info.inc b/sites/all/modules/contrib/commerce/modules/order/commerce_order.info.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/commerce_order.info.inc rename to sites/all/modules/contrib/commerce/modules/order/commerce_order.info.inc diff --git a/sites/all/modules/custom/commerce/modules/order/commerce_order.install b/sites/all/modules/contrib/commerce/modules/order/commerce_order.install similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/commerce_order.install rename to sites/all/modules/contrib/commerce/modules/order/commerce_order.install diff --git a/sites/all/modules/custom/commerce/modules/order/commerce_order.js b/sites/all/modules/contrib/commerce/modules/order/commerce_order.js similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/commerce_order.js rename to sites/all/modules/contrib/commerce/modules/order/commerce_order.js diff --git a/sites/all/modules/custom/commerce/modules/order/commerce_order.module b/sites/all/modules/contrib/commerce/modules/order/commerce_order.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/commerce_order.module rename to sites/all/modules/contrib/commerce/modules/order/commerce_order.module diff --git a/sites/all/modules/custom/commerce/modules/order/commerce_order.rules.inc b/sites/all/modules/contrib/commerce/modules/order/commerce_order.rules.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/commerce_order.rules.inc rename to sites/all/modules/contrib/commerce/modules/order/commerce_order.rules.inc diff --git a/sites/all/modules/custom/commerce/modules/order/commerce_order.tokens.inc b/sites/all/modules/contrib/commerce/modules/order/commerce_order.tokens.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/commerce_order.tokens.inc rename to sites/all/modules/contrib/commerce/modules/order/commerce_order.tokens.inc diff --git a/sites/all/modules/custom/commerce/modules/order/commerce_order_ui.info b/sites/all/modules/contrib/commerce/modules/order/commerce_order_ui.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/commerce_order_ui.info rename to sites/all/modules/contrib/commerce/modules/order/commerce_order_ui.info diff --git a/sites/all/modules/custom/commerce/modules/order/commerce_order_ui.info.inc b/sites/all/modules/contrib/commerce/modules/order/commerce_order_ui.info.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/commerce_order_ui.info.inc rename to sites/all/modules/contrib/commerce/modules/order/commerce_order_ui.info.inc diff --git a/sites/all/modules/custom/commerce/modules/order/commerce_order_ui.module b/sites/all/modules/contrib/commerce/modules/order/commerce_order_ui.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/commerce_order_ui.module rename to sites/all/modules/contrib/commerce/modules/order/commerce_order_ui.module diff --git a/sites/all/modules/custom/commerce/modules/order/commerce_order_ui.tokens.inc b/sites/all/modules/contrib/commerce/modules/order/commerce_order_ui.tokens.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/commerce_order_ui.tokens.inc rename to sites/all/modules/contrib/commerce/modules/order/commerce_order_ui.tokens.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/commerce_order.checkout_pane.inc b/sites/all/modules/contrib/commerce/modules/order/includes/commerce_order.checkout_pane.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/commerce_order.checkout_pane.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/commerce_order.checkout_pane.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/commerce_order.controller.inc b/sites/all/modules/contrib/commerce/modules/order/includes/commerce_order.controller.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/commerce_order.controller.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/commerce_order.controller.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/commerce_order.forms.inc b/sites/all/modules/contrib/commerce/modules/order/includes/commerce_order.forms.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/commerce_order.forms.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/commerce_order.forms.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/commerce_order_ui.orders.inc b/sites/all/modules/contrib/commerce/modules/order/includes/commerce_order_ui.orders.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/commerce_order_ui.orders.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/commerce_order_ui.orders.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/commerce_order.views.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/commerce_order.views.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/commerce_order.views.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/commerce_order.views.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/commerce_order_ui.views.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/commerce_order_ui.views.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/commerce_order_ui.views.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/commerce_order_ui.views.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/commerce_order_ui.views_default.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/commerce_order_ui.views_default.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/commerce_order_ui.views_default.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/commerce_order_ui.views_default.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_area_empty_text.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_area_empty_text.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_area_empty_text.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_area_empty_text.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_area_order_total.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_area_order_total.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_area_order_total.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_area_order_total.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_argument_order_order_id.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_argument_order_order_id.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_argument_order_order_id.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_argument_order_order_id.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_link.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_link.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_link.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_link.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_link_delete.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_link_delete.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_link_delete.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_link_delete.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_link_edit.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_link_edit.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_link_edit.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_link_edit.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_mail.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_mail.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_mail.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_mail.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_operations.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_operations.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_operations.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_operations.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_state.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_state.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_state.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_state.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_status.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_status.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_status.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_status.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_type.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_type.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_type.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_field_order_type.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_filter_order_state.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_filter_order_state.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_filter_order_state.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_filter_order_state.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_filter_order_status.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_filter_order_status.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_filter_order_status.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_filter_order_status.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_filter_order_type.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_filter_order_type.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_handler_filter_order_type.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_handler_filter_order_type.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_plugin_argument_validate_user.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_plugin_argument_validate_user.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_plugin_argument_validate_user.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_plugin_argument_validate_user.inc diff --git a/sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_ui_handler_area_view_order_form.inc b/sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_ui_handler_area_view_order_form.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/includes/views/handlers/commerce_order_ui_handler_area_view_order_form.inc rename to sites/all/modules/contrib/commerce/modules/order/includes/views/handlers/commerce_order_ui_handler_area_view_order_form.inc diff --git a/sites/all/modules/custom/commerce/modules/order/tests/commerce_order.rules.test b/sites/all/modules/contrib/commerce/modules/order/tests/commerce_order.rules.test similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/tests/commerce_order.rules.test rename to sites/all/modules/contrib/commerce/modules/order/tests/commerce_order.rules.test diff --git a/sites/all/modules/custom/commerce/modules/order/tests/commerce_order.test b/sites/all/modules/contrib/commerce/modules/order/tests/commerce_order.test similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/tests/commerce_order.test rename to sites/all/modules/contrib/commerce/modules/order/tests/commerce_order.test diff --git a/sites/all/modules/custom/commerce/modules/order/tests/commerce_order_ui.test b/sites/all/modules/contrib/commerce/modules/order/tests/commerce_order_ui.test similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/tests/commerce_order_ui.test rename to sites/all/modules/contrib/commerce/modules/order/tests/commerce_order_ui.test diff --git a/sites/all/modules/custom/commerce/modules/order/theme/commerce_order.admin-rtl.css b/sites/all/modules/contrib/commerce/modules/order/theme/commerce_order.admin-rtl.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/theme/commerce_order.admin-rtl.css rename to sites/all/modules/contrib/commerce/modules/order/theme/commerce_order.admin-rtl.css diff --git a/sites/all/modules/custom/commerce/modules/order/theme/commerce_order.admin.css b/sites/all/modules/contrib/commerce/modules/order/theme/commerce_order.admin.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/theme/commerce_order.admin.css rename to sites/all/modules/contrib/commerce/modules/order/theme/commerce_order.admin.css diff --git a/sites/all/modules/custom/commerce/modules/order/theme/commerce_order.theme.css b/sites/all/modules/contrib/commerce/modules/order/theme/commerce_order.theme.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/order/theme/commerce_order.theme.css rename to sites/all/modules/contrib/commerce/modules/order/theme/commerce_order.theme.css diff --git a/sites/all/modules/custom/commerce/modules/payment/commerce_payment.api.php b/sites/all/modules/contrib/commerce/modules/payment/commerce_payment.api.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/commerce_payment.api.php rename to sites/all/modules/contrib/commerce/modules/payment/commerce_payment.api.php diff --git a/sites/all/modules/custom/commerce/modules/payment/commerce_payment.info b/sites/all/modules/contrib/commerce/modules/payment/commerce_payment.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/commerce_payment.info rename to sites/all/modules/contrib/commerce/modules/payment/commerce_payment.info diff --git a/sites/all/modules/custom/commerce/modules/payment/commerce_payment.info.inc b/sites/all/modules/contrib/commerce/modules/payment/commerce_payment.info.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/commerce_payment.info.inc rename to sites/all/modules/contrib/commerce/modules/payment/commerce_payment.info.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/commerce_payment.install b/sites/all/modules/contrib/commerce/modules/payment/commerce_payment.install similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/commerce_payment.install rename to sites/all/modules/contrib/commerce/modules/payment/commerce_payment.install diff --git a/sites/all/modules/custom/commerce/modules/payment/commerce_payment.js b/sites/all/modules/contrib/commerce/modules/payment/commerce_payment.js similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/commerce_payment.js rename to sites/all/modules/contrib/commerce/modules/payment/commerce_payment.js diff --git a/sites/all/modules/custom/commerce/modules/payment/commerce_payment.module b/sites/all/modules/contrib/commerce/modules/payment/commerce_payment.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/commerce_payment.module rename to sites/all/modules/contrib/commerce/modules/payment/commerce_payment.module diff --git a/sites/all/modules/custom/commerce/modules/payment/commerce_payment.rules.inc b/sites/all/modules/contrib/commerce/modules/payment/commerce_payment.rules.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/commerce_payment.rules.inc rename to sites/all/modules/contrib/commerce/modules/payment/commerce_payment.rules.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/commerce_payment.rules_defaults.inc b/sites/all/modules/contrib/commerce/modules/payment/commerce_payment.rules_defaults.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/commerce_payment.rules_defaults.inc rename to sites/all/modules/contrib/commerce/modules/payment/commerce_payment.rules_defaults.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/commerce_payment.tokens.inc b/sites/all/modules/contrib/commerce/modules/payment/commerce_payment.tokens.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/commerce_payment.tokens.inc rename to sites/all/modules/contrib/commerce/modules/payment/commerce_payment.tokens.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/commerce_payment_ui.info b/sites/all/modules/contrib/commerce/modules/payment/commerce_payment_ui.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/commerce_payment_ui.info rename to sites/all/modules/contrib/commerce/modules/payment/commerce_payment_ui.info diff --git a/sites/all/modules/custom/commerce/modules/payment/commerce_payment_ui.module b/sites/all/modules/contrib/commerce/modules/payment/commerce_payment_ui.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/commerce_payment_ui.module rename to sites/all/modules/contrib/commerce/modules/payment/commerce_payment_ui.module diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/commerce_payment.checkout_pane.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/commerce_payment.checkout_pane.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/commerce_payment.checkout_pane.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/commerce_payment.checkout_pane.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/commerce_payment.credit_card.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/commerce_payment.credit_card.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/commerce_payment.credit_card.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/commerce_payment.credit_card.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/commerce_payment.forms.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/commerce_payment.forms.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/commerce_payment.forms.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/commerce_payment.forms.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/commerce_payment_transaction.controller.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/commerce_payment_transaction.controller.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/commerce_payment_transaction.controller.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/commerce_payment_transaction.controller.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/commerce_payment_ui.admin.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/commerce_payment_ui.admin.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/commerce_payment_ui.admin.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/commerce_payment_ui.admin.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/views/commerce_payment.views.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/views/commerce_payment.views.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/views/commerce_payment.views.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/views/commerce_payment.views.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/views/commerce_payment_ui.views_default.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/views/commerce_payment_ui.views_default.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/views/commerce_payment_ui.views_default.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/views/commerce_payment_ui.views_default.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_area_totals.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_area_totals.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_area_totals.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_area_totals.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_amount.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_amount.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_amount.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_amount.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_balance.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_balance.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_balance.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_balance.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_currency_code.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_currency_code.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_currency_code.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_currency_code.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_message.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_message.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_message.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_message.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_method.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_method.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_method.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_method.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_transaction_link.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_transaction_link.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_transaction_link.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_transaction_link.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_transaction_link_delete.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_transaction_link_delete.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_transaction_link_delete.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_transaction_link_delete.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_transaction_operations.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_transaction_operations.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_transaction_operations.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_payment_transaction_operations.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_status.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_status.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_status.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_field_status.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_filter_currency_code.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_filter_currency_code.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_filter_currency_code.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_filter_currency_code.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_filter_payment_method.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_filter_payment_method.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_filter_payment_method.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_filter_payment_method.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_filter_payment_transaction_status.inc b/sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_filter_payment_transaction_status.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_filter_payment_transaction_status.inc rename to sites/all/modules/contrib/commerce/modules/payment/includes/views/handlers/commerce_payment_handler_filter_payment_transaction_status.inc diff --git a/sites/all/modules/custom/commerce/modules/payment/modules/commerce_payment_example.info b/sites/all/modules/contrib/commerce/modules/payment/modules/commerce_payment_example.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/modules/commerce_payment_example.info rename to sites/all/modules/contrib/commerce/modules/payment/modules/commerce_payment_example.info diff --git a/sites/all/modules/custom/commerce/modules/payment/modules/commerce_payment_example.module b/sites/all/modules/contrib/commerce/modules/payment/modules/commerce_payment_example.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/modules/commerce_payment_example.module rename to sites/all/modules/contrib/commerce/modules/payment/modules/commerce_payment_example.module diff --git a/sites/all/modules/custom/commerce/modules/payment/tests/commerce_payment.rules.test b/sites/all/modules/contrib/commerce/modules/payment/tests/commerce_payment.rules.test similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/tests/commerce_payment.rules.test rename to sites/all/modules/contrib/commerce/modules/payment/tests/commerce_payment.rules.test diff --git a/sites/all/modules/custom/commerce/modules/payment/tests/commerce_payment_dummy_offsite.info b/sites/all/modules/contrib/commerce/modules/payment/tests/commerce_payment_dummy_offsite.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/tests/commerce_payment_dummy_offsite.info rename to sites/all/modules/contrib/commerce/modules/payment/tests/commerce_payment_dummy_offsite.info diff --git a/sites/all/modules/custom/commerce/modules/payment/tests/commerce_payment_dummy_offsite.module b/sites/all/modules/contrib/commerce/modules/payment/tests/commerce_payment_dummy_offsite.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/tests/commerce_payment_dummy_offsite.module rename to sites/all/modules/contrib/commerce/modules/payment/tests/commerce_payment_dummy_offsite.module diff --git a/sites/all/modules/custom/commerce/modules/payment/tests/commerce_payment_ui.test b/sites/all/modules/contrib/commerce/modules/payment/tests/commerce_payment_ui.test similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/tests/commerce_payment_ui.test rename to sites/all/modules/contrib/commerce/modules/payment/tests/commerce_payment_ui.test diff --git a/sites/all/modules/custom/commerce/modules/payment/theme/commerce-payment-totals.tpl.php b/sites/all/modules/contrib/commerce/modules/payment/theme/commerce-payment-totals.tpl.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/theme/commerce-payment-totals.tpl.php rename to sites/all/modules/contrib/commerce/modules/payment/theme/commerce-payment-totals.tpl.php diff --git a/sites/all/modules/custom/commerce/modules/payment/theme/commerce_payment.admin-rtl.css b/sites/all/modules/contrib/commerce/modules/payment/theme/commerce_payment.admin-rtl.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/theme/commerce_payment.admin-rtl.css rename to sites/all/modules/contrib/commerce/modules/payment/theme/commerce_payment.admin-rtl.css diff --git a/sites/all/modules/custom/commerce/modules/payment/theme/commerce_payment.admin.css b/sites/all/modules/contrib/commerce/modules/payment/theme/commerce_payment.admin.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/theme/commerce_payment.admin.css rename to sites/all/modules/contrib/commerce/modules/payment/theme/commerce_payment.admin.css diff --git a/sites/all/modules/custom/commerce/modules/payment/theme/commerce_payment.theme.css b/sites/all/modules/contrib/commerce/modules/payment/theme/commerce_payment.theme.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/theme/commerce_payment.theme.css rename to sites/all/modules/contrib/commerce/modules/payment/theme/commerce_payment.theme.css diff --git a/sites/all/modules/custom/commerce/modules/payment/theme/icon-failure.png b/sites/all/modules/contrib/commerce/modules/payment/theme/icon-failure.png similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/theme/icon-failure.png rename to sites/all/modules/contrib/commerce/modules/payment/theme/icon-failure.png diff --git a/sites/all/modules/custom/commerce/modules/payment/theme/icon-pending.png b/sites/all/modules/contrib/commerce/modules/payment/theme/icon-pending.png similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/theme/icon-pending.png rename to sites/all/modules/contrib/commerce/modules/payment/theme/icon-pending.png diff --git a/sites/all/modules/custom/commerce/modules/payment/theme/icon-success.png b/sites/all/modules/contrib/commerce/modules/payment/theme/icon-success.png similarity index 100% rename from sites/all/modules/custom/commerce/modules/payment/theme/icon-success.png rename to sites/all/modules/contrib/commerce/modules/payment/theme/icon-success.png diff --git a/sites/all/modules/custom/commerce/modules/price/commerce_price.api.php b/sites/all/modules/contrib/commerce/modules/price/commerce_price.api.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/price/commerce_price.api.php rename to sites/all/modules/contrib/commerce/modules/price/commerce_price.api.php diff --git a/sites/all/modules/custom/commerce/modules/price/commerce_price.info b/sites/all/modules/contrib/commerce/modules/price/commerce_price.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/price/commerce_price.info rename to sites/all/modules/contrib/commerce/modules/price/commerce_price.info diff --git a/sites/all/modules/custom/commerce/modules/price/commerce_price.install b/sites/all/modules/contrib/commerce/modules/price/commerce_price.install similarity index 100% rename from sites/all/modules/custom/commerce/modules/price/commerce_price.install rename to sites/all/modules/contrib/commerce/modules/price/commerce_price.install diff --git a/sites/all/modules/custom/commerce/modules/price/commerce_price.module b/sites/all/modules/contrib/commerce/modules/price/commerce_price.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/price/commerce_price.module rename to sites/all/modules/contrib/commerce/modules/price/commerce_price.module diff --git a/sites/all/modules/custom/commerce/modules/price/commerce_price.rules.inc b/sites/all/modules/contrib/commerce/modules/price/commerce_price.rules.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/price/commerce_price.rules.inc rename to sites/all/modules/contrib/commerce/modules/price/commerce_price.rules.inc diff --git a/sites/all/modules/custom/commerce/modules/price/includes/views/commerce_price.views.inc b/sites/all/modules/contrib/commerce/modules/price/includes/views/commerce_price.views.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/price/includes/views/commerce_price.views.inc rename to sites/all/modules/contrib/commerce/modules/price/includes/views/commerce_price.views.inc diff --git a/sites/all/modules/custom/commerce/modules/price/includes/views/handlers/commerce_price_handler_field_commerce_price.inc b/sites/all/modules/contrib/commerce/modules/price/includes/views/handlers/commerce_price_handler_field_commerce_price.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/price/includes/views/handlers/commerce_price_handler_field_commerce_price.inc rename to sites/all/modules/contrib/commerce/modules/price/includes/views/handlers/commerce_price_handler_field_commerce_price.inc diff --git a/sites/all/modules/custom/commerce/modules/price/includes/views/handlers/commerce_price_handler_filter_commerce_price_amount.inc b/sites/all/modules/contrib/commerce/modules/price/includes/views/handlers/commerce_price_handler_filter_commerce_price_amount.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/price/includes/views/handlers/commerce_price_handler_filter_commerce_price_amount.inc rename to sites/all/modules/contrib/commerce/modules/price/includes/views/handlers/commerce_price_handler_filter_commerce_price_amount.inc diff --git a/sites/all/modules/custom/commerce/modules/price/theme/commerce_price.theme-rtl.css b/sites/all/modules/contrib/commerce/modules/price/theme/commerce_price.theme-rtl.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/price/theme/commerce_price.theme-rtl.css rename to sites/all/modules/contrib/commerce/modules/price/theme/commerce_price.theme-rtl.css diff --git a/sites/all/modules/custom/commerce/modules/price/theme/commerce_price.theme.css b/sites/all/modules/contrib/commerce/modules/price/theme/commerce_price.theme.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/price/theme/commerce_price.theme.css rename to sites/all/modules/contrib/commerce/modules/price/theme/commerce_price.theme.css diff --git a/sites/all/modules/custom/commerce/modules/product/commerce_product.api.php b/sites/all/modules/contrib/commerce/modules/product/commerce_product.api.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/commerce_product.api.php rename to sites/all/modules/contrib/commerce/modules/product/commerce_product.api.php diff --git a/sites/all/modules/custom/commerce/modules/product/commerce_product.info b/sites/all/modules/contrib/commerce/modules/product/commerce_product.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/commerce_product.info rename to sites/all/modules/contrib/commerce/modules/product/commerce_product.info diff --git a/sites/all/modules/custom/commerce/modules/product/commerce_product.info.inc b/sites/all/modules/contrib/commerce/modules/product/commerce_product.info.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/commerce_product.info.inc rename to sites/all/modules/contrib/commerce/modules/product/commerce_product.info.inc diff --git a/sites/all/modules/custom/commerce/modules/product/commerce_product.install b/sites/all/modules/contrib/commerce/modules/product/commerce_product.install similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/commerce_product.install rename to sites/all/modules/contrib/commerce/modules/product/commerce_product.install diff --git a/sites/all/modules/custom/commerce/modules/product/commerce_product.module b/sites/all/modules/contrib/commerce/modules/product/commerce_product.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/commerce_product.module rename to sites/all/modules/contrib/commerce/modules/product/commerce_product.module diff --git a/sites/all/modules/custom/commerce/modules/product/commerce_product.tokens.inc b/sites/all/modules/contrib/commerce/modules/product/commerce_product.tokens.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/commerce_product.tokens.inc rename to sites/all/modules/contrib/commerce/modules/product/commerce_product.tokens.inc diff --git a/sites/all/modules/custom/commerce/modules/product/commerce_product_ui.info b/sites/all/modules/contrib/commerce/modules/product/commerce_product_ui.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/commerce_product_ui.info rename to sites/all/modules/contrib/commerce/modules/product/commerce_product_ui.info diff --git a/sites/all/modules/custom/commerce/modules/product/commerce_product_ui.info.inc b/sites/all/modules/contrib/commerce/modules/product/commerce_product_ui.info.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/commerce_product_ui.info.inc rename to sites/all/modules/contrib/commerce/modules/product/commerce_product_ui.info.inc diff --git a/sites/all/modules/custom/commerce/modules/product/commerce_product_ui.install b/sites/all/modules/contrib/commerce/modules/product/commerce_product_ui.install similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/commerce_product_ui.install rename to sites/all/modules/contrib/commerce/modules/product/commerce_product_ui.install diff --git a/sites/all/modules/custom/commerce/modules/product/commerce_product_ui.module b/sites/all/modules/contrib/commerce/modules/product/commerce_product_ui.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/commerce_product_ui.module rename to sites/all/modules/contrib/commerce/modules/product/commerce_product_ui.module diff --git a/sites/all/modules/custom/commerce/modules/product/includes/commerce_product.controller.inc b/sites/all/modules/contrib/commerce/modules/product/includes/commerce_product.controller.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/commerce_product.controller.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/commerce_product.controller.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/commerce_product.forms.inc b/sites/all/modules/contrib/commerce/modules/product/includes/commerce_product.forms.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/commerce_product.forms.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/commerce_product.forms.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/commerce_product.translation_handler.inc b/sites/all/modules/contrib/commerce/modules/product/includes/commerce_product.translation_handler.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/commerce_product.translation_handler.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/commerce_product.translation_handler.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/commerce_product_ui.forms.inc b/sites/all/modules/contrib/commerce/modules/product/includes/commerce_product_ui.forms.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/commerce_product_ui.forms.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/commerce_product_ui.forms.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/commerce_product_ui.products.inc b/sites/all/modules/contrib/commerce/modules/product/includes/commerce_product_ui.products.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/commerce_product_ui.products.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/commerce_product_ui.products.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/commerce_product_ui.types.inc b/sites/all/modules/contrib/commerce/modules/product/includes/commerce_product_ui.types.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/commerce_product_ui.types.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/commerce_product_ui.types.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/views/commerce_product.views.inc b/sites/all/modules/contrib/commerce/modules/product/includes/views/commerce_product.views.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/views/commerce_product.views.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/views/commerce_product.views.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/views/commerce_product_ui.views_default.inc b/sites/all/modules/contrib/commerce/modules/product/includes/views/commerce_product_ui.views_default.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/views/commerce_product_ui.views_default.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/views/commerce_product_ui.views_default.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_area_empty_text.inc b/sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_area_empty_text.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_area_empty_text.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_area_empty_text.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_argument_product_id.inc b/sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_argument_product_id.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_argument_product_id.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_argument_product_id.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product.inc b/sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_link.inc b/sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_link.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_link.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_link.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_link_delete.inc b/sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_link_delete.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_link_delete.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_link_delete.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_link_edit.inc b/sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_link_edit.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_link_edit.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_link_edit.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_operations.inc b/sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_operations.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_operations.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_operations.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_type.inc b/sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_type.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_type.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_field_product_type.inc diff --git a/sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_filter_product_type.inc b/sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_filter_product_type.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/includes/views/handlers/commerce_product_handler_filter_product_type.inc rename to sites/all/modules/contrib/commerce/modules/product/includes/views/handlers/commerce_product_handler_filter_product_type.inc diff --git a/sites/all/modules/custom/commerce/modules/product/tests/commerce_product.test b/sites/all/modules/contrib/commerce/modules/product/tests/commerce_product.test similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/tests/commerce_product.test rename to sites/all/modules/contrib/commerce/modules/product/tests/commerce_product.test diff --git a/sites/all/modules/custom/commerce/modules/product/tests/commerce_product_crud_test.info b/sites/all/modules/contrib/commerce/modules/product/tests/commerce_product_crud_test.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/tests/commerce_product_crud_test.info rename to sites/all/modules/contrib/commerce/modules/product/tests/commerce_product_crud_test.info diff --git a/sites/all/modules/custom/commerce/modules/product/tests/commerce_product_crud_test.module b/sites/all/modules/contrib/commerce/modules/product/tests/commerce_product_crud_test.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/tests/commerce_product_crud_test.module rename to sites/all/modules/contrib/commerce/modules/product/tests/commerce_product_crud_test.module diff --git a/sites/all/modules/custom/commerce/modules/product/tests/commerce_product_ui.test b/sites/all/modules/contrib/commerce/modules/product/tests/commerce_product_ui.test similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/tests/commerce_product_ui.test rename to sites/all/modules/contrib/commerce/modules/product/tests/commerce_product_ui.test diff --git a/sites/all/modules/custom/commerce/modules/product/theme/commerce-product-sku.tpl.php b/sites/all/modules/contrib/commerce/modules/product/theme/commerce-product-sku.tpl.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/theme/commerce-product-sku.tpl.php rename to sites/all/modules/contrib/commerce/modules/product/theme/commerce-product-sku.tpl.php diff --git a/sites/all/modules/custom/commerce/modules/product/theme/commerce-product-status.tpl.php b/sites/all/modules/contrib/commerce/modules/product/theme/commerce-product-status.tpl.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/theme/commerce-product-status.tpl.php rename to sites/all/modules/contrib/commerce/modules/product/theme/commerce-product-status.tpl.php diff --git a/sites/all/modules/custom/commerce/modules/product/theme/commerce-product-title.tpl.php b/sites/all/modules/contrib/commerce/modules/product/theme/commerce-product-title.tpl.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/theme/commerce-product-title.tpl.php rename to sites/all/modules/contrib/commerce/modules/product/theme/commerce-product-title.tpl.php diff --git a/sites/all/modules/custom/commerce/modules/product/theme/commerce_product.admin.css b/sites/all/modules/contrib/commerce/modules/product/theme/commerce_product.admin.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/theme/commerce_product.admin.css rename to sites/all/modules/contrib/commerce/modules/product/theme/commerce_product.admin.css diff --git a/sites/all/modules/custom/commerce/modules/product/theme/commerce_product.theme.css b/sites/all/modules/contrib/commerce/modules/product/theme/commerce_product.theme.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/product/theme/commerce_product.theme.css rename to sites/all/modules/contrib/commerce/modules/product/theme/commerce_product.theme.css diff --git a/sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing.api.php b/sites/all/modules/contrib/commerce/modules/product_pricing/commerce_product_pricing.api.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing.api.php rename to sites/all/modules/contrib/commerce/modules/product_pricing/commerce_product_pricing.api.php diff --git a/sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing.info b/sites/all/modules/contrib/commerce/modules/product_pricing/commerce_product_pricing.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing.info rename to sites/all/modules/contrib/commerce/modules/product_pricing/commerce_product_pricing.info diff --git a/sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing.install b/sites/all/modules/contrib/commerce/modules/product_pricing/commerce_product_pricing.install similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing.install rename to sites/all/modules/contrib/commerce/modules/product_pricing/commerce_product_pricing.install diff --git a/sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing.module b/sites/all/modules/contrib/commerce/modules/product_pricing/commerce_product_pricing.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing.module rename to sites/all/modules/contrib/commerce/modules/product_pricing/commerce_product_pricing.module diff --git a/sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing_ui.info b/sites/all/modules/contrib/commerce/modules/product_pricing/commerce_product_pricing_ui.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing_ui.info rename to sites/all/modules/contrib/commerce/modules/product_pricing/commerce_product_pricing_ui.info diff --git a/sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing_ui.module b/sites/all/modules/contrib/commerce/modules/product_pricing/commerce_product_pricing_ui.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_pricing/commerce_product_pricing_ui.module rename to sites/all/modules/contrib/commerce/modules/product_pricing/commerce_product_pricing_ui.module diff --git a/sites/all/modules/custom/commerce/modules/product_pricing/includes/commerce_product_pricing_ui.admin.inc b/sites/all/modules/contrib/commerce/modules/product_pricing/includes/commerce_product_pricing_ui.admin.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_pricing/includes/commerce_product_pricing_ui.admin.inc rename to sites/all/modules/contrib/commerce/modules/product_pricing/includes/commerce_product_pricing_ui.admin.inc diff --git a/sites/all/modules/custom/commerce/modules/product_reference/commerce_product_reference.api.php b/sites/all/modules/contrib/commerce/modules/product_reference/commerce_product_reference.api.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_reference/commerce_product_reference.api.php rename to sites/all/modules/contrib/commerce/modules/product_reference/commerce_product_reference.api.php diff --git a/sites/all/modules/custom/commerce/modules/product_reference/commerce_product_reference.info b/sites/all/modules/contrib/commerce/modules/product_reference/commerce_product_reference.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_reference/commerce_product_reference.info rename to sites/all/modules/contrib/commerce/modules/product_reference/commerce_product_reference.info diff --git a/sites/all/modules/custom/commerce/modules/product_reference/commerce_product_reference.install b/sites/all/modules/contrib/commerce/modules/product_reference/commerce_product_reference.install similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_reference/commerce_product_reference.install rename to sites/all/modules/contrib/commerce/modules/product_reference/commerce_product_reference.install diff --git a/sites/all/modules/custom/commerce/modules/product_reference/commerce_product_reference.module b/sites/all/modules/contrib/commerce/modules/product_reference/commerce_product_reference.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_reference/commerce_product_reference.module rename to sites/all/modules/contrib/commerce/modules/product_reference/commerce_product_reference.module diff --git a/sites/all/modules/custom/commerce/modules/product_reference/commerce_product_reference.rules.inc b/sites/all/modules/contrib/commerce/modules/product_reference/commerce_product_reference.rules.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_reference/commerce_product_reference.rules.inc rename to sites/all/modules/contrib/commerce/modules/product_reference/commerce_product_reference.rules.inc diff --git a/sites/all/modules/custom/commerce/modules/product_reference/includes/views/commerce_product_reference.views.inc b/sites/all/modules/contrib/commerce/modules/product_reference/includes/views/commerce_product_reference.views.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_reference/includes/views/commerce_product_reference.views.inc rename to sites/all/modules/contrib/commerce/modules/product_reference/includes/views/commerce_product_reference.views.inc diff --git a/sites/all/modules/custom/commerce/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_node_is_product_display.inc b/sites/all/modules/contrib/commerce/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_node_is_product_display.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_node_is_product_display.inc rename to sites/all/modules/contrib/commerce/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_node_is_product_display.inc diff --git a/sites/all/modules/custom/commerce/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_node_type.inc b/sites/all/modules/contrib/commerce/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_node_type.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_node_type.inc rename to sites/all/modules/contrib/commerce/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_node_type.inc diff --git a/sites/all/modules/custom/commerce/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_product_line_item_type.inc b/sites/all/modules/contrib/commerce/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_product_line_item_type.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_product_line_item_type.inc rename to sites/all/modules/contrib/commerce/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_product_line_item_type.inc diff --git a/sites/all/modules/custom/commerce/modules/product_reference/tests/commerce_product_reference.test b/sites/all/modules/contrib/commerce/modules/product_reference/tests/commerce_product_reference.test similarity index 100% rename from sites/all/modules/custom/commerce/modules/product_reference/tests/commerce_product_reference.test rename to sites/all/modules/contrib/commerce/modules/product_reference/tests/commerce_product_reference.test diff --git a/sites/all/modules/custom/commerce/modules/tax/commerce_tax.api.php b/sites/all/modules/contrib/commerce/modules/tax/commerce_tax.api.php similarity index 100% rename from sites/all/modules/custom/commerce/modules/tax/commerce_tax.api.php rename to sites/all/modules/contrib/commerce/modules/tax/commerce_tax.api.php diff --git a/sites/all/modules/custom/commerce/modules/tax/commerce_tax.info b/sites/all/modules/contrib/commerce/modules/tax/commerce_tax.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/tax/commerce_tax.info rename to sites/all/modules/contrib/commerce/modules/tax/commerce_tax.info diff --git a/sites/all/modules/custom/commerce/modules/tax/commerce_tax.module b/sites/all/modules/contrib/commerce/modules/tax/commerce_tax.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/tax/commerce_tax.module rename to sites/all/modules/contrib/commerce/modules/tax/commerce_tax.module diff --git a/sites/all/modules/custom/commerce/modules/tax/commerce_tax.rules.inc b/sites/all/modules/contrib/commerce/modules/tax/commerce_tax.rules.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/tax/commerce_tax.rules.inc rename to sites/all/modules/contrib/commerce/modules/tax/commerce_tax.rules.inc diff --git a/sites/all/modules/custom/commerce/modules/tax/commerce_tax.rules_defaults.inc b/sites/all/modules/contrib/commerce/modules/tax/commerce_tax.rules_defaults.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/tax/commerce_tax.rules_defaults.inc rename to sites/all/modules/contrib/commerce/modules/tax/commerce_tax.rules_defaults.inc diff --git a/sites/all/modules/custom/commerce/modules/tax/commerce_tax_ui.info b/sites/all/modules/contrib/commerce/modules/tax/commerce_tax_ui.info similarity index 100% rename from sites/all/modules/custom/commerce/modules/tax/commerce_tax_ui.info rename to sites/all/modules/contrib/commerce/modules/tax/commerce_tax_ui.info diff --git a/sites/all/modules/custom/commerce/modules/tax/commerce_tax_ui.install b/sites/all/modules/contrib/commerce/modules/tax/commerce_tax_ui.install similarity index 100% rename from sites/all/modules/custom/commerce/modules/tax/commerce_tax_ui.install rename to sites/all/modules/contrib/commerce/modules/tax/commerce_tax_ui.install diff --git a/sites/all/modules/custom/commerce/modules/tax/commerce_tax_ui.module b/sites/all/modules/contrib/commerce/modules/tax/commerce_tax_ui.module similarity index 100% rename from sites/all/modules/custom/commerce/modules/tax/commerce_tax_ui.module rename to sites/all/modules/contrib/commerce/modules/tax/commerce_tax_ui.module diff --git a/sites/all/modules/custom/commerce/modules/tax/includes/commerce_tax_ui.admin.inc b/sites/all/modules/contrib/commerce/modules/tax/includes/commerce_tax_ui.admin.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules/tax/includes/commerce_tax_ui.admin.inc rename to sites/all/modules/contrib/commerce/modules/tax/includes/commerce_tax_ui.admin.inc diff --git a/sites/all/modules/custom/commerce/modules/tax/tests/commerce_tax_ui.test b/sites/all/modules/contrib/commerce/modules/tax/tests/commerce_tax_ui.test similarity index 100% rename from sites/all/modules/custom/commerce/modules/tax/tests/commerce_tax_ui.test rename to sites/all/modules/contrib/commerce/modules/tax/tests/commerce_tax_ui.test diff --git a/sites/all/modules/custom/commerce/modules/tax/theme/commerce_tax.admin.css b/sites/all/modules/contrib/commerce/modules/tax/theme/commerce_tax.admin.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/tax/theme/commerce_tax.admin.css rename to sites/all/modules/contrib/commerce/modules/tax/theme/commerce_tax.admin.css diff --git a/sites/all/modules/custom/commerce/modules/tax/theme/commerce_tax.theme-rtl.css b/sites/all/modules/contrib/commerce/modules/tax/theme/commerce_tax.theme-rtl.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/tax/theme/commerce_tax.theme-rtl.css rename to sites/all/modules/contrib/commerce/modules/tax/theme/commerce_tax.theme-rtl.css diff --git a/sites/all/modules/custom/commerce/modules/tax/theme/commerce_tax.theme.css b/sites/all/modules/contrib/commerce/modules/tax/theme/commerce_tax.theme.css similarity index 100% rename from sites/all/modules/custom/commerce/modules/tax/theme/commerce_tax.theme.css rename to sites/all/modules/contrib/commerce/modules/tax/theme/commerce_tax.theme.css diff --git a/sites/all/modules/custom/ctools/LICENSE.txt b/sites/all/modules/contrib/commerce/modules_contrib/commerce_features/LICENSE.txt old mode 100644 new mode 100755 similarity index 100% rename from sites/all/modules/custom/ctools/LICENSE.txt rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_features/LICENSE.txt diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_coupon_type.features.inc b/sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_coupon_type.features.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_coupon_type.features.inc rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_coupon_type.features.inc diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_customer.features.inc b/sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_customer.features.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_customer.features.inc rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_customer.features.inc diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_features.info b/sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_features.info similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_features.info rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_features.info diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_features.module b/sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_features.module similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_features.module rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_features.module diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_line_item_type.features.inc b/sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_line_item_type.features.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_line_item_type.features.inc rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_line_item_type.features.inc diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_order_type.features.inc b/sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_order_type.features.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_order_type.features.inc rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_order_type.features.inc diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_product_type.features.inc b/sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_product_type.features.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_product_type.features.inc rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_product_type.features.inc diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_tax_rate.features.inc b/sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_tax_rate.features.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_tax_rate.features.inc rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_tax_rate.features.inc diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_tax_type.features.inc b/sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_tax_type.features.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_features/commerce_tax_type.features.inc rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_features/commerce_tax_type.features.inc diff --git a/sites/all/modules/custom/date/LICENSE.txt b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/date/LICENSE.txt rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/LICENSE.txt diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/README.txt b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/README.txt similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/README.txt rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/README.txt diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock.info b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/commerce_stock.info similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock.info rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/commerce_stock.info diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock.install b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/commerce_stock.install similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock.install rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/commerce_stock.install diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock.module b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/commerce_stock.module similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock.module rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/commerce_stock.module diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock.rules.inc b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/commerce_stock.rules.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock.rules.inc rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/commerce_stock.rules.inc diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock.rules_defaults.inc b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/commerce_stock.rules_defaults.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock.rules_defaults.inc rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/commerce_stock.rules_defaults.inc diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock_ui.info b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/commerce_stock_ui.info similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock_ui.info rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/commerce_stock_ui.info diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock_ui.module b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/commerce_stock_ui.module similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/commerce_stock_ui.module rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/commerce_stock_ui.module diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/includes/commerce_stock.admin.inc b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/includes/commerce_stock.admin.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/includes/commerce_stock.admin.inc rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/includes/commerce_stock.admin.inc diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_sdf/commerce_sdf.info b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_sdf/commerce_sdf.info similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_sdf/commerce_sdf.info rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_sdf/commerce_sdf.info diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_sdf/commerce_sdf.module b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_sdf/commerce_sdf.module similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_sdf/commerce_sdf.module rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_sdf/commerce_sdf.module diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.info b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.info similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.info rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.info diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.install b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.install similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.install rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.install diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.module b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.module similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.module rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.module diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.rules.inc b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.rules.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.rules.inc rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.rules.inc diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.rules_defaults.inc b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.rules_defaults.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.rules_defaults.inc rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ss/commerce_ss.rules_defaults.inc diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/includes/commerce_ss.admin.inc b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ss/includes/commerce_ss.admin.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ss/includes/commerce_ss.admin.inc rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ss/includes/commerce_ss.admin.inc diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ssr/commerce_ssr.info b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ssr/commerce_ssr.info similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ssr/commerce_ssr.info rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ssr/commerce_ssr.info diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ssr/commerce_ssr.module b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ssr/commerce_ssr.module similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ssr/commerce_ssr.module rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ssr/commerce_ssr.module diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ssr/commerce_ssr.rules_defaults.inc b/sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ssr/commerce_ssr.rules_defaults.inc similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_stock/modules/commerce_ssr/commerce_ssr.rules_defaults.inc rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_stock/modules/commerce_ssr/commerce_ssr.rules_defaults.inc diff --git a/sites/all/modules/custom/devel/LICENSE.txt b/sites/all/modules/contrib/commerce/modules_contrib/commerce_uuid/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/devel/LICENSE.txt rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_uuid/LICENSE.txt diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_uuid/commerce_uuid.info b/sites/all/modules/contrib/commerce/modules_contrib/commerce_uuid/commerce_uuid.info similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_uuid/commerce_uuid.info rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_uuid/commerce_uuid.info diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_uuid/commerce_uuid.install b/sites/all/modules/contrib/commerce/modules_contrib/commerce_uuid/commerce_uuid.install similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_uuid/commerce_uuid.install rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_uuid/commerce_uuid.install diff --git a/sites/all/modules/custom/commerce/modules_contrib/commerce_uuid/commerce_uuid.module b/sites/all/modules/contrib/commerce/modules_contrib/commerce_uuid/commerce_uuid.module similarity index 100% rename from sites/all/modules/custom/commerce/modules_contrib/commerce_uuid/commerce_uuid.module rename to sites/all/modules/contrib/commerce/modules_contrib/commerce_uuid/commerce_uuid.module diff --git a/sites/all/modules/custom/commerce/tests/README.txt b/sites/all/modules/contrib/commerce/tests/README.txt similarity index 100% rename from sites/all/modules/custom/commerce/tests/README.txt rename to sites/all/modules/contrib/commerce/tests/README.txt diff --git a/sites/all/modules/custom/commerce/tests/commerce_base.test b/sites/all/modules/contrib/commerce/tests/commerce_base.test similarity index 100% rename from sites/all/modules/custom/commerce/tests/commerce_base.test rename to sites/all/modules/contrib/commerce/tests/commerce_base.test diff --git a/sites/all/modules/custom/commerce/theme/README.txt b/sites/all/modules/contrib/commerce/theme/README.txt similarity index 100% rename from sites/all/modules/custom/commerce/theme/README.txt rename to sites/all/modules/contrib/commerce/theme/README.txt diff --git a/sites/all/modules/custom/ctools/API.txt b/sites/all/modules/contrib/ctools/API.txt similarity index 100% rename from sites/all/modules/custom/ctools/API.txt rename to sites/all/modules/contrib/ctools/API.txt diff --git a/sites/all/modules/custom/ctools/CHANGELOG.txt b/sites/all/modules/contrib/ctools/CHANGELOG.txt similarity index 100% rename from sites/all/modules/custom/ctools/CHANGELOG.txt rename to sites/all/modules/contrib/ctools/CHANGELOG.txt diff --git a/sites/all/modules/custom/diff/LICENSE.txt b/sites/all/modules/contrib/ctools/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/diff/LICENSE.txt rename to sites/all/modules/contrib/ctools/LICENSE.txt diff --git a/sites/all/modules/custom/ctools/UPGRADE.txt b/sites/all/modules/contrib/ctools/UPGRADE.txt similarity index 100% rename from sites/all/modules/custom/ctools/UPGRADE.txt rename to sites/all/modules/contrib/ctools/UPGRADE.txt diff --git a/sites/all/modules/custom/ctools/bulk_export/bulk_export.css b/sites/all/modules/contrib/ctools/bulk_export/bulk_export.css similarity index 100% rename from sites/all/modules/custom/ctools/bulk_export/bulk_export.css rename to sites/all/modules/contrib/ctools/bulk_export/bulk_export.css diff --git a/sites/all/modules/custom/ctools/bulk_export/bulk_export.info b/sites/all/modules/contrib/ctools/bulk_export/bulk_export.info similarity index 100% rename from sites/all/modules/custom/ctools/bulk_export/bulk_export.info rename to sites/all/modules/contrib/ctools/bulk_export/bulk_export.info diff --git a/sites/all/modules/custom/ctools/bulk_export/bulk_export.js b/sites/all/modules/contrib/ctools/bulk_export/bulk_export.js similarity index 100% rename from sites/all/modules/custom/ctools/bulk_export/bulk_export.js rename to sites/all/modules/contrib/ctools/bulk_export/bulk_export.js diff --git a/sites/all/modules/custom/ctools/bulk_export/bulk_export.module b/sites/all/modules/contrib/ctools/bulk_export/bulk_export.module similarity index 100% rename from sites/all/modules/custom/ctools/bulk_export/bulk_export.module rename to sites/all/modules/contrib/ctools/bulk_export/bulk_export.module diff --git a/sites/all/modules/custom/ctools/css/button.css b/sites/all/modules/contrib/ctools/css/button.css similarity index 100% rename from sites/all/modules/custom/ctools/css/button.css rename to sites/all/modules/contrib/ctools/css/button.css diff --git a/sites/all/modules/custom/ctools/css/collapsible-div.css b/sites/all/modules/contrib/ctools/css/collapsible-div.css similarity index 100% rename from sites/all/modules/custom/ctools/css/collapsible-div.css rename to sites/all/modules/contrib/ctools/css/collapsible-div.css diff --git a/sites/all/modules/custom/ctools/css/context.css b/sites/all/modules/contrib/ctools/css/context.css similarity index 100% rename from sites/all/modules/custom/ctools/css/context.css rename to sites/all/modules/contrib/ctools/css/context.css diff --git a/sites/all/modules/custom/ctools/css/ctools.css b/sites/all/modules/contrib/ctools/css/ctools.css similarity index 100% rename from sites/all/modules/custom/ctools/css/ctools.css rename to sites/all/modules/contrib/ctools/css/ctools.css diff --git a/sites/all/modules/custom/ctools/css/dropbutton.css b/sites/all/modules/contrib/ctools/css/dropbutton.css similarity index 100% rename from sites/all/modules/custom/ctools/css/dropbutton.css rename to sites/all/modules/contrib/ctools/css/dropbutton.css diff --git a/sites/all/modules/custom/ctools/css/dropdown.css b/sites/all/modules/contrib/ctools/css/dropdown.css similarity index 100% rename from sites/all/modules/custom/ctools/css/dropdown.css rename to sites/all/modules/contrib/ctools/css/dropdown.css diff --git a/sites/all/modules/custom/ctools/css/export-ui-list.css b/sites/all/modules/contrib/ctools/css/export-ui-list.css similarity index 100% rename from sites/all/modules/custom/ctools/css/export-ui-list.css rename to sites/all/modules/contrib/ctools/css/export-ui-list.css diff --git a/sites/all/modules/custom/ctools/css/modal.css b/sites/all/modules/contrib/ctools/css/modal.css similarity index 100% rename from sites/all/modules/custom/ctools/css/modal.css rename to sites/all/modules/contrib/ctools/css/modal.css diff --git a/sites/all/modules/custom/ctools/css/ruleset.css b/sites/all/modules/contrib/ctools/css/ruleset.css similarity index 100% rename from sites/all/modules/custom/ctools/css/ruleset.css rename to sites/all/modules/contrib/ctools/css/ruleset.css diff --git a/sites/all/modules/custom/ctools/css/stylizer.css b/sites/all/modules/contrib/ctools/css/stylizer.css similarity index 100% rename from sites/all/modules/custom/ctools/css/stylizer.css rename to sites/all/modules/contrib/ctools/css/stylizer.css diff --git a/sites/all/modules/custom/ctools/css/wizard.css b/sites/all/modules/contrib/ctools/css/wizard.css similarity index 100% rename from sites/all/modules/custom/ctools/css/wizard.css rename to sites/all/modules/contrib/ctools/css/wizard.css diff --git a/sites/all/modules/custom/ctools/ctools.api.php b/sites/all/modules/contrib/ctools/ctools.api.php similarity index 100% rename from sites/all/modules/custom/ctools/ctools.api.php rename to sites/all/modules/contrib/ctools/ctools.api.php diff --git a/sites/all/modules/custom/ctools/ctools.info b/sites/all/modules/contrib/ctools/ctools.info similarity index 100% rename from sites/all/modules/custom/ctools/ctools.info rename to sites/all/modules/contrib/ctools/ctools.info diff --git a/sites/all/modules/custom/ctools/ctools.install b/sites/all/modules/contrib/ctools/ctools.install similarity index 100% rename from sites/all/modules/custom/ctools/ctools.install rename to sites/all/modules/contrib/ctools/ctools.install diff --git a/sites/all/modules/custom/ctools/ctools.module b/sites/all/modules/contrib/ctools/ctools.module similarity index 100% rename from sites/all/modules/custom/ctools/ctools.module rename to sites/all/modules/contrib/ctools/ctools.module diff --git a/sites/all/modules/custom/ctools/ctools_access_ruleset/ctools_access_ruleset.info b/sites/all/modules/contrib/ctools/ctools_access_ruleset/ctools_access_ruleset.info similarity index 100% rename from sites/all/modules/custom/ctools/ctools_access_ruleset/ctools_access_ruleset.info rename to sites/all/modules/contrib/ctools/ctools_access_ruleset/ctools_access_ruleset.info diff --git a/sites/all/modules/custom/ctools/ctools_access_ruleset/ctools_access_ruleset.install b/sites/all/modules/contrib/ctools/ctools_access_ruleset/ctools_access_ruleset.install similarity index 100% rename from sites/all/modules/custom/ctools/ctools_access_ruleset/ctools_access_ruleset.install rename to sites/all/modules/contrib/ctools/ctools_access_ruleset/ctools_access_ruleset.install diff --git a/sites/all/modules/custom/ctools/ctools_access_ruleset/ctools_access_ruleset.module b/sites/all/modules/contrib/ctools/ctools_access_ruleset/ctools_access_ruleset.module similarity index 100% rename from sites/all/modules/custom/ctools/ctools_access_ruleset/ctools_access_ruleset.module rename to sites/all/modules/contrib/ctools/ctools_access_ruleset/ctools_access_ruleset.module diff --git a/sites/all/modules/custom/ctools/ctools_access_ruleset/plugins/access/ruleset.inc b/sites/all/modules/contrib/ctools/ctools_access_ruleset/plugins/access/ruleset.inc similarity index 100% rename from sites/all/modules/custom/ctools/ctools_access_ruleset/plugins/access/ruleset.inc rename to sites/all/modules/contrib/ctools/ctools_access_ruleset/plugins/access/ruleset.inc diff --git a/sites/all/modules/custom/ctools/ctools_access_ruleset/plugins/export_ui/ctools_access_ruleset.inc b/sites/all/modules/contrib/ctools/ctools_access_ruleset/plugins/export_ui/ctools_access_ruleset.inc similarity index 100% rename from sites/all/modules/custom/ctools/ctools_access_ruleset/plugins/export_ui/ctools_access_ruleset.inc rename to sites/all/modules/contrib/ctools/ctools_access_ruleset/plugins/export_ui/ctools_access_ruleset.inc diff --git a/sites/all/modules/custom/ctools/ctools_access_ruleset/plugins/export_ui/ctools_access_ruleset_ui.class.php b/sites/all/modules/contrib/ctools/ctools_access_ruleset/plugins/export_ui/ctools_access_ruleset_ui.class.php similarity index 100% rename from sites/all/modules/custom/ctools/ctools_access_ruleset/plugins/export_ui/ctools_access_ruleset_ui.class.php rename to sites/all/modules/contrib/ctools/ctools_access_ruleset/plugins/export_ui/ctools_access_ruleset_ui.class.php diff --git a/sites/all/modules/custom/ctools/ctools_ajax_sample/css/ctools-ajax-sample.css b/sites/all/modules/contrib/ctools/ctools_ajax_sample/css/ctools-ajax-sample.css similarity index 100% rename from sites/all/modules/custom/ctools/ctools_ajax_sample/css/ctools-ajax-sample.css rename to sites/all/modules/contrib/ctools/ctools_ajax_sample/css/ctools-ajax-sample.css diff --git a/sites/all/modules/custom/ctools/ctools_ajax_sample/ctools_ajax_sample.info b/sites/all/modules/contrib/ctools/ctools_ajax_sample/ctools_ajax_sample.info similarity index 100% rename from sites/all/modules/custom/ctools/ctools_ajax_sample/ctools_ajax_sample.info rename to sites/all/modules/contrib/ctools/ctools_ajax_sample/ctools_ajax_sample.info diff --git a/sites/all/modules/custom/ctools/ctools_ajax_sample/ctools_ajax_sample.install b/sites/all/modules/contrib/ctools/ctools_ajax_sample/ctools_ajax_sample.install similarity index 100% rename from sites/all/modules/custom/ctools/ctools_ajax_sample/ctools_ajax_sample.install rename to sites/all/modules/contrib/ctools/ctools_ajax_sample/ctools_ajax_sample.install diff --git a/sites/all/modules/custom/ctools/ctools_ajax_sample/ctools_ajax_sample.module b/sites/all/modules/contrib/ctools/ctools_ajax_sample/ctools_ajax_sample.module similarity index 100% rename from sites/all/modules/custom/ctools/ctools_ajax_sample/ctools_ajax_sample.module rename to sites/all/modules/contrib/ctools/ctools_ajax_sample/ctools_ajax_sample.module diff --git a/sites/all/modules/custom/ctools/ctools_ajax_sample/images/ajax-loader.gif b/sites/all/modules/contrib/ctools/ctools_ajax_sample/images/ajax-loader.gif similarity index 100% rename from sites/all/modules/custom/ctools/ctools_ajax_sample/images/ajax-loader.gif rename to sites/all/modules/contrib/ctools/ctools_ajax_sample/images/ajax-loader.gif diff --git a/sites/all/modules/custom/ctools/ctools_ajax_sample/images/loading-large.gif b/sites/all/modules/contrib/ctools/ctools_ajax_sample/images/loading-large.gif similarity index 100% rename from sites/all/modules/custom/ctools/ctools_ajax_sample/images/loading-large.gif rename to sites/all/modules/contrib/ctools/ctools_ajax_sample/images/loading-large.gif diff --git a/sites/all/modules/custom/ctools/ctools_ajax_sample/images/loading.gif b/sites/all/modules/contrib/ctools/ctools_ajax_sample/images/loading.gif similarity index 100% rename from sites/all/modules/custom/ctools/ctools_ajax_sample/images/loading.gif rename to sites/all/modules/contrib/ctools/ctools_ajax_sample/images/loading.gif diff --git a/sites/all/modules/custom/ctools/ctools_ajax_sample/images/popups-border.png b/sites/all/modules/contrib/ctools/ctools_ajax_sample/images/popups-border.png similarity index 100% rename from sites/all/modules/custom/ctools/ctools_ajax_sample/images/popups-border.png rename to sites/all/modules/contrib/ctools/ctools_ajax_sample/images/popups-border.png diff --git a/sites/all/modules/custom/ctools/ctools_ajax_sample/js/ctools-ajax-sample.js b/sites/all/modules/contrib/ctools/ctools_ajax_sample/js/ctools-ajax-sample.js similarity index 100% rename from sites/all/modules/custom/ctools/ctools_ajax_sample/js/ctools-ajax-sample.js rename to sites/all/modules/contrib/ctools/ctools_ajax_sample/js/ctools-ajax-sample.js diff --git a/sites/all/modules/custom/ctools/ctools_custom_content/ctools_custom_content.info b/sites/all/modules/contrib/ctools/ctools_custom_content/ctools_custom_content.info similarity index 100% rename from sites/all/modules/custom/ctools/ctools_custom_content/ctools_custom_content.info rename to sites/all/modules/contrib/ctools/ctools_custom_content/ctools_custom_content.info diff --git a/sites/all/modules/custom/ctools/ctools_custom_content/ctools_custom_content.install b/sites/all/modules/contrib/ctools/ctools_custom_content/ctools_custom_content.install similarity index 100% rename from sites/all/modules/custom/ctools/ctools_custom_content/ctools_custom_content.install rename to sites/all/modules/contrib/ctools/ctools_custom_content/ctools_custom_content.install diff --git a/sites/all/modules/custom/ctools/ctools_custom_content/ctools_custom_content.module b/sites/all/modules/contrib/ctools/ctools_custom_content/ctools_custom_content.module similarity index 100% rename from sites/all/modules/custom/ctools/ctools_custom_content/ctools_custom_content.module rename to sites/all/modules/contrib/ctools/ctools_custom_content/ctools_custom_content.module diff --git a/sites/all/modules/custom/ctools/ctools_custom_content/plugins/export_ui/ctools_custom_content.inc b/sites/all/modules/contrib/ctools/ctools_custom_content/plugins/export_ui/ctools_custom_content.inc similarity index 100% rename from sites/all/modules/custom/ctools/ctools_custom_content/plugins/export_ui/ctools_custom_content.inc rename to sites/all/modules/contrib/ctools/ctools_custom_content/plugins/export_ui/ctools_custom_content.inc diff --git a/sites/all/modules/custom/ctools/ctools_custom_content/plugins/export_ui/ctools_custom_content_ui.class.php b/sites/all/modules/contrib/ctools/ctools_custom_content/plugins/export_ui/ctools_custom_content_ui.class.php similarity index 100% rename from sites/all/modules/custom/ctools/ctools_custom_content/plugins/export_ui/ctools_custom_content_ui.class.php rename to sites/all/modules/contrib/ctools/ctools_custom_content/plugins/export_ui/ctools_custom_content_ui.class.php diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/README.txt b/sites/all/modules/contrib/ctools/ctools_plugin_example/README.txt similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/README.txt rename to sites/all/modules/contrib/ctools/ctools_plugin_example/README.txt diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/ctools_plugin_example.info b/sites/all/modules/contrib/ctools/ctools_plugin_example/ctools_plugin_example.info similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/ctools_plugin_example.info rename to sites/all/modules/contrib/ctools/ctools_plugin_example/ctools_plugin_example.info diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/ctools_plugin_example.module b/sites/all/modules/contrib/ctools/ctools_plugin_example/ctools_plugin_example.module similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/ctools_plugin_example.module rename to sites/all/modules/contrib/ctools/ctools_plugin_example/ctools_plugin_example.module diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/ctools_plugin_example.pages_default.inc b/sites/all/modules/contrib/ctools/ctools_plugin_example/ctools_plugin_example.pages_default.inc similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/ctools_plugin_example.pages_default.inc rename to sites/all/modules/contrib/ctools/ctools_plugin_example/ctools_plugin_example.pages_default.inc diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/help/Access-Plugins--Determining-access-and-visibility.html b/sites/all/modules/contrib/ctools/ctools_plugin_example/help/Access-Plugins--Determining-access-and-visibility.html similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/help/Access-Plugins--Determining-access-and-visibility.html rename to sites/all/modules/contrib/ctools/ctools_plugin_example/help/Access-Plugins--Determining-access-and-visibility.html diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/help/Argument-Plugins--Starting-at-the-beginning.html b/sites/all/modules/contrib/ctools/ctools_plugin_example/help/Argument-Plugins--Starting-at-the-beginning.html similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/help/Argument-Plugins--Starting-at-the-beginning.html rename to sites/all/modules/contrib/ctools/ctools_plugin_example/help/Argument-Plugins--Starting-at-the-beginning.html diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/help/Chaos-Tools--CTools--Plugin-Examples.html b/sites/all/modules/contrib/ctools/ctools_plugin_example/help/Chaos-Tools--CTools--Plugin-Examples.html similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/help/Chaos-Tools--CTools--Plugin-Examples.html rename to sites/all/modules/contrib/ctools/ctools_plugin_example/help/Chaos-Tools--CTools--Plugin-Examples.html diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/help/Content-Type-Plugins--Displaying-content-using-a-context.html b/sites/all/modules/contrib/ctools/ctools_plugin_example/help/Content-Type-Plugins--Displaying-content-using-a-context.html similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/help/Content-Type-Plugins--Displaying-content-using-a-context.html rename to sites/all/modules/contrib/ctools/ctools_plugin_example/help/Content-Type-Plugins--Displaying-content-using-a-context.html diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/help/Context-plugins--Creating-a--context--from-an-argument.html b/sites/all/modules/contrib/ctools/ctools_plugin_example/help/Context-plugins--Creating-a--context--from-an-argument.html similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/help/Context-plugins--Creating-a--context--from-an-argument.html rename to sites/all/modules/contrib/ctools/ctools_plugin_example/help/Context-plugins--Creating-a--context--from-an-argument.html diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/help/Module-setup-and-hooks.html b/sites/all/modules/contrib/ctools/ctools_plugin_example/help/Module-setup-and-hooks.html similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/help/Module-setup-and-hooks.html rename to sites/all/modules/contrib/ctools/ctools_plugin_example/help/Module-setup-and-hooks.html diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/help/Relationships--Letting-one-context-take-us-to-another.html b/sites/all/modules/contrib/ctools/ctools_plugin_example/help/Relationships--Letting-one-context-take-us-to-another.html similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/help/Relationships--Letting-one-context-take-us-to-another.html rename to sites/all/modules/contrib/ctools/ctools_plugin_example/help/Relationships--Letting-one-context-take-us-to-another.html diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/help/ctools_plugin_example.help.ini b/sites/all/modules/contrib/ctools/ctools_plugin_example/help/ctools_plugin_example.help.ini similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/help/ctools_plugin_example.help.ini rename to sites/all/modules/contrib/ctools/ctools_plugin_example/help/ctools_plugin_example.help.ini diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/plugins/access/arg_length.inc b/sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/access/arg_length.inc similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/plugins/access/arg_length.inc rename to sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/access/arg_length.inc diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/plugins/access/example_role.inc b/sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/access/example_role.inc similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/plugins/access/example_role.inc rename to sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/access/example_role.inc diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/plugins/arguments/simplecontext_arg.inc b/sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/arguments/simplecontext_arg.inc similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/plugins/arguments/simplecontext_arg.inc rename to sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/arguments/simplecontext_arg.inc diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/plugins/content_types/icon_example.png b/sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/content_types/icon_example.png similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/plugins/content_types/icon_example.png rename to sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/content_types/icon_example.png diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/plugins/content_types/no_context_content_type.inc b/sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/content_types/no_context_content_type.inc similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/plugins/content_types/no_context_content_type.inc rename to sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/content_types/no_context_content_type.inc diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/plugins/content_types/relcontext_content_type.inc b/sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/content_types/relcontext_content_type.inc similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/plugins/content_types/relcontext_content_type.inc rename to sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/content_types/relcontext_content_type.inc diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/plugins/content_types/simplecontext_content_type.inc b/sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/content_types/simplecontext_content_type.inc similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/plugins/content_types/simplecontext_content_type.inc rename to sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/content_types/simplecontext_content_type.inc diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/plugins/contexts/relcontext.inc b/sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/contexts/relcontext.inc similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/plugins/contexts/relcontext.inc rename to sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/contexts/relcontext.inc diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/plugins/contexts/simplecontext.inc b/sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/contexts/simplecontext.inc similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/plugins/contexts/simplecontext.inc rename to sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/contexts/simplecontext.inc diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/plugins/panels.pages.inc b/sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/panels.pages.inc similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/plugins/panels.pages.inc rename to sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/panels.pages.inc diff --git a/sites/all/modules/custom/ctools/ctools_plugin_example/plugins/relationships/relcontext_from_simplecontext.inc b/sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/relationships/relcontext_from_simplecontext.inc similarity index 100% rename from sites/all/modules/custom/ctools/ctools_plugin_example/plugins/relationships/relcontext_from_simplecontext.inc rename to sites/all/modules/contrib/ctools/ctools_plugin_example/plugins/relationships/relcontext_from_simplecontext.inc diff --git a/sites/all/modules/custom/ctools/drush/ctools.drush.inc b/sites/all/modules/contrib/ctools/drush/ctools.drush.inc similarity index 100% rename from sites/all/modules/custom/ctools/drush/ctools.drush.inc rename to sites/all/modules/contrib/ctools/drush/ctools.drush.inc diff --git a/sites/all/modules/custom/ctools/help/about.html b/sites/all/modules/contrib/ctools/help/about.html similarity index 100% rename from sites/all/modules/custom/ctools/help/about.html rename to sites/all/modules/contrib/ctools/help/about.html diff --git a/sites/all/modules/custom/ctools/help/ajax.html b/sites/all/modules/contrib/ctools/help/ajax.html similarity index 100% rename from sites/all/modules/custom/ctools/help/ajax.html rename to sites/all/modules/contrib/ctools/help/ajax.html diff --git a/sites/all/modules/custom/ctools/help/collapsible-div.html b/sites/all/modules/contrib/ctools/help/collapsible-div.html similarity index 100% rename from sites/all/modules/custom/ctools/help/collapsible-div.html rename to sites/all/modules/contrib/ctools/help/collapsible-div.html diff --git a/sites/all/modules/custom/ctools/help/context-access.html b/sites/all/modules/contrib/ctools/help/context-access.html similarity index 100% rename from sites/all/modules/custom/ctools/help/context-access.html rename to sites/all/modules/contrib/ctools/help/context-access.html diff --git a/sites/all/modules/custom/ctools/help/context-arguments.html b/sites/all/modules/contrib/ctools/help/context-arguments.html similarity index 100% rename from sites/all/modules/custom/ctools/help/context-arguments.html rename to sites/all/modules/contrib/ctools/help/context-arguments.html diff --git a/sites/all/modules/custom/ctools/help/context-content.html b/sites/all/modules/contrib/ctools/help/context-content.html similarity index 100% rename from sites/all/modules/custom/ctools/help/context-content.html rename to sites/all/modules/contrib/ctools/help/context-content.html diff --git a/sites/all/modules/custom/ctools/help/context-context.html b/sites/all/modules/contrib/ctools/help/context-context.html similarity index 100% rename from sites/all/modules/custom/ctools/help/context-context.html rename to sites/all/modules/contrib/ctools/help/context-context.html diff --git a/sites/all/modules/custom/ctools/help/context-relationships.html b/sites/all/modules/contrib/ctools/help/context-relationships.html similarity index 100% rename from sites/all/modules/custom/ctools/help/context-relationships.html rename to sites/all/modules/contrib/ctools/help/context-relationships.html diff --git a/sites/all/modules/custom/ctools/help/context.html b/sites/all/modules/contrib/ctools/help/context.html similarity index 100% rename from sites/all/modules/custom/ctools/help/context.html rename to sites/all/modules/contrib/ctools/help/context.html diff --git a/sites/all/modules/custom/ctools/help/css.html b/sites/all/modules/contrib/ctools/help/css.html similarity index 100% rename from sites/all/modules/custom/ctools/help/css.html rename to sites/all/modules/contrib/ctools/help/css.html diff --git a/sites/all/modules/custom/ctools/help/ctools.help.ini b/sites/all/modules/contrib/ctools/help/ctools.help.ini similarity index 100% rename from sites/all/modules/custom/ctools/help/ctools.help.ini rename to sites/all/modules/contrib/ctools/help/ctools.help.ini diff --git a/sites/all/modules/custom/ctools/help/dependent.html b/sites/all/modules/contrib/ctools/help/dependent.html similarity index 100% rename from sites/all/modules/custom/ctools/help/dependent.html rename to sites/all/modules/contrib/ctools/help/dependent.html diff --git a/sites/all/modules/custom/ctools/help/dropbutton.html b/sites/all/modules/contrib/ctools/help/dropbutton.html similarity index 100% rename from sites/all/modules/custom/ctools/help/dropbutton.html rename to sites/all/modules/contrib/ctools/help/dropbutton.html diff --git a/sites/all/modules/custom/ctools/help/dropdown.html b/sites/all/modules/contrib/ctools/help/dropdown.html similarity index 100% rename from sites/all/modules/custom/ctools/help/dropdown.html rename to sites/all/modules/contrib/ctools/help/dropdown.html diff --git a/sites/all/modules/custom/ctools/help/export-ui.html b/sites/all/modules/contrib/ctools/help/export-ui.html similarity index 100% rename from sites/all/modules/custom/ctools/help/export-ui.html rename to sites/all/modules/contrib/ctools/help/export-ui.html diff --git a/sites/all/modules/custom/ctools/help/export.html b/sites/all/modules/contrib/ctools/help/export.html similarity index 100% rename from sites/all/modules/custom/ctools/help/export.html rename to sites/all/modules/contrib/ctools/help/export.html diff --git a/sites/all/modules/custom/ctools/help/form.html b/sites/all/modules/contrib/ctools/help/form.html similarity index 100% rename from sites/all/modules/custom/ctools/help/form.html rename to sites/all/modules/contrib/ctools/help/form.html diff --git a/sites/all/modules/custom/ctools/help/modal.html b/sites/all/modules/contrib/ctools/help/modal.html similarity index 100% rename from sites/all/modules/custom/ctools/help/modal.html rename to sites/all/modules/contrib/ctools/help/modal.html diff --git a/sites/all/modules/custom/ctools/help/object-cache.html b/sites/all/modules/contrib/ctools/help/object-cache.html similarity index 100% rename from sites/all/modules/custom/ctools/help/object-cache.html rename to sites/all/modules/contrib/ctools/help/object-cache.html diff --git a/sites/all/modules/custom/ctools/help/plugins-api.html b/sites/all/modules/contrib/ctools/help/plugins-api.html similarity index 100% rename from sites/all/modules/custom/ctools/help/plugins-api.html rename to sites/all/modules/contrib/ctools/help/plugins-api.html diff --git a/sites/all/modules/custom/ctools/help/plugins-creating.html b/sites/all/modules/contrib/ctools/help/plugins-creating.html similarity index 100% rename from sites/all/modules/custom/ctools/help/plugins-creating.html rename to sites/all/modules/contrib/ctools/help/plugins-creating.html diff --git a/sites/all/modules/custom/ctools/help/plugins-implementing.html b/sites/all/modules/contrib/ctools/help/plugins-implementing.html similarity index 100% rename from sites/all/modules/custom/ctools/help/plugins-implementing.html rename to sites/all/modules/contrib/ctools/help/plugins-implementing.html diff --git a/sites/all/modules/custom/ctools/help/plugins.html b/sites/all/modules/contrib/ctools/help/plugins.html similarity index 100% rename from sites/all/modules/custom/ctools/help/plugins.html rename to sites/all/modules/contrib/ctools/help/plugins.html diff --git a/sites/all/modules/custom/ctools/help/wizard.html b/sites/all/modules/contrib/ctools/help/wizard.html similarity index 100% rename from sites/all/modules/custom/ctools/help/wizard.html rename to sites/all/modules/contrib/ctools/help/wizard.html diff --git a/sites/all/modules/custom/ctools/images/arrow-active.png b/sites/all/modules/contrib/ctools/images/arrow-active.png similarity index 100% rename from sites/all/modules/custom/ctools/images/arrow-active.png rename to sites/all/modules/contrib/ctools/images/arrow-active.png diff --git a/sites/all/modules/custom/ctools/images/collapsible-collapsed.png b/sites/all/modules/contrib/ctools/images/collapsible-collapsed.png similarity index 100% rename from sites/all/modules/custom/ctools/images/collapsible-collapsed.png rename to sites/all/modules/contrib/ctools/images/collapsible-collapsed.png diff --git a/sites/all/modules/custom/ctools/images/collapsible-expanded.png b/sites/all/modules/contrib/ctools/images/collapsible-expanded.png similarity index 100% rename from sites/all/modules/custom/ctools/images/collapsible-expanded.png rename to sites/all/modules/contrib/ctools/images/collapsible-expanded.png diff --git a/sites/all/modules/custom/ctools/images/expanded-options.png b/sites/all/modules/contrib/ctools/images/expanded-options.png similarity index 100% rename from sites/all/modules/custom/ctools/images/expanded-options.png rename to sites/all/modules/contrib/ctools/images/expanded-options.png diff --git a/sites/all/modules/custom/ctools/images/icon-close-window.png b/sites/all/modules/contrib/ctools/images/icon-close-window.png similarity index 100% rename from sites/all/modules/custom/ctools/images/icon-close-window.png rename to sites/all/modules/contrib/ctools/images/icon-close-window.png diff --git a/sites/all/modules/custom/ctools/images/icon-configure.png b/sites/all/modules/contrib/ctools/images/icon-configure.png similarity index 100% rename from sites/all/modules/custom/ctools/images/icon-configure.png rename to sites/all/modules/contrib/ctools/images/icon-configure.png diff --git a/sites/all/modules/custom/ctools/images/icon-delete.png b/sites/all/modules/contrib/ctools/images/icon-delete.png similarity index 100% rename from sites/all/modules/custom/ctools/images/icon-delete.png rename to sites/all/modules/contrib/ctools/images/icon-delete.png diff --git a/sites/all/modules/custom/ctools/images/no-icon.png b/sites/all/modules/contrib/ctools/images/no-icon.png similarity index 100% rename from sites/all/modules/custom/ctools/images/no-icon.png rename to sites/all/modules/contrib/ctools/images/no-icon.png diff --git a/sites/all/modules/custom/ctools/images/status-active.gif b/sites/all/modules/contrib/ctools/images/status-active.gif similarity index 100% rename from sites/all/modules/custom/ctools/images/status-active.gif rename to sites/all/modules/contrib/ctools/images/status-active.gif diff --git a/sites/all/modules/custom/ctools/images/throbber.gif b/sites/all/modules/contrib/ctools/images/throbber.gif similarity index 100% rename from sites/all/modules/custom/ctools/images/throbber.gif rename to sites/all/modules/contrib/ctools/images/throbber.gif diff --git a/sites/all/modules/custom/ctools/includes/action-links.theme.inc b/sites/all/modules/contrib/ctools/includes/action-links.theme.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/action-links.theme.inc rename to sites/all/modules/contrib/ctools/includes/action-links.theme.inc diff --git a/sites/all/modules/custom/ctools/includes/ajax.inc b/sites/all/modules/contrib/ctools/includes/ajax.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/ajax.inc rename to sites/all/modules/contrib/ctools/includes/ajax.inc diff --git a/sites/all/modules/custom/ctools/includes/cache.inc b/sites/all/modules/contrib/ctools/includes/cache.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/cache.inc rename to sites/all/modules/contrib/ctools/includes/cache.inc diff --git a/sites/all/modules/custom/ctools/includes/cache.plugin-type.inc b/sites/all/modules/contrib/ctools/includes/cache.plugin-type.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/cache.plugin-type.inc rename to sites/all/modules/contrib/ctools/includes/cache.plugin-type.inc diff --git a/sites/all/modules/custom/ctools/includes/cleanstring.inc b/sites/all/modules/contrib/ctools/includes/cleanstring.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/cleanstring.inc rename to sites/all/modules/contrib/ctools/includes/cleanstring.inc diff --git a/sites/all/modules/custom/ctools/includes/collapsible.theme.inc b/sites/all/modules/contrib/ctools/includes/collapsible.theme.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/collapsible.theme.inc rename to sites/all/modules/contrib/ctools/includes/collapsible.theme.inc diff --git a/sites/all/modules/custom/ctools/includes/content.inc b/sites/all/modules/contrib/ctools/includes/content.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/content.inc rename to sites/all/modules/contrib/ctools/includes/content.inc diff --git a/sites/all/modules/custom/ctools/includes/content.menu.inc b/sites/all/modules/contrib/ctools/includes/content.menu.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/content.menu.inc rename to sites/all/modules/contrib/ctools/includes/content.menu.inc diff --git a/sites/all/modules/custom/ctools/includes/content.plugin-type.inc b/sites/all/modules/contrib/ctools/includes/content.plugin-type.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/content.plugin-type.inc rename to sites/all/modules/contrib/ctools/includes/content.plugin-type.inc diff --git a/sites/all/modules/custom/ctools/includes/content.theme.inc b/sites/all/modules/contrib/ctools/includes/content.theme.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/content.theme.inc rename to sites/all/modules/contrib/ctools/includes/content.theme.inc diff --git a/sites/all/modules/custom/ctools/includes/context-access-admin.inc b/sites/all/modules/contrib/ctools/includes/context-access-admin.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/context-access-admin.inc rename to sites/all/modules/contrib/ctools/includes/context-access-admin.inc diff --git a/sites/all/modules/custom/ctools/includes/context-admin.inc b/sites/all/modules/contrib/ctools/includes/context-admin.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/context-admin.inc rename to sites/all/modules/contrib/ctools/includes/context-admin.inc diff --git a/sites/all/modules/custom/ctools/includes/context-task-handler.inc b/sites/all/modules/contrib/ctools/includes/context-task-handler.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/context-task-handler.inc rename to sites/all/modules/contrib/ctools/includes/context-task-handler.inc diff --git a/sites/all/modules/custom/ctools/includes/context.inc b/sites/all/modules/contrib/ctools/includes/context.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/context.inc rename to sites/all/modules/contrib/ctools/includes/context.inc diff --git a/sites/all/modules/custom/ctools/includes/context.menu.inc b/sites/all/modules/contrib/ctools/includes/context.menu.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/context.menu.inc rename to sites/all/modules/contrib/ctools/includes/context.menu.inc diff --git a/sites/all/modules/custom/ctools/includes/context.plugin-type.inc b/sites/all/modules/contrib/ctools/includes/context.plugin-type.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/context.plugin-type.inc rename to sites/all/modules/contrib/ctools/includes/context.plugin-type.inc diff --git a/sites/all/modules/custom/ctools/includes/context.theme.inc b/sites/all/modules/contrib/ctools/includes/context.theme.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/context.theme.inc rename to sites/all/modules/contrib/ctools/includes/context.theme.inc diff --git a/sites/all/modules/custom/ctools/includes/css-cache.inc b/sites/all/modules/contrib/ctools/includes/css-cache.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/css-cache.inc rename to sites/all/modules/contrib/ctools/includes/css-cache.inc diff --git a/sites/all/modules/custom/ctools/includes/css.inc b/sites/all/modules/contrib/ctools/includes/css.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/css.inc rename to sites/all/modules/contrib/ctools/includes/css.inc diff --git a/sites/all/modules/custom/ctools/includes/dependent.inc b/sites/all/modules/contrib/ctools/includes/dependent.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/dependent.inc rename to sites/all/modules/contrib/ctools/includes/dependent.inc diff --git a/sites/all/modules/custom/ctools/includes/dropbutton.theme.inc b/sites/all/modules/contrib/ctools/includes/dropbutton.theme.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/dropbutton.theme.inc rename to sites/all/modules/contrib/ctools/includes/dropbutton.theme.inc diff --git a/sites/all/modules/custom/ctools/includes/dropdown.theme.inc b/sites/all/modules/contrib/ctools/includes/dropdown.theme.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/dropdown.theme.inc rename to sites/all/modules/contrib/ctools/includes/dropdown.theme.inc diff --git a/sites/all/modules/custom/ctools/includes/export-ui.inc b/sites/all/modules/contrib/ctools/includes/export-ui.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/export-ui.inc rename to sites/all/modules/contrib/ctools/includes/export-ui.inc diff --git a/sites/all/modules/custom/ctools/includes/export-ui.menu.inc b/sites/all/modules/contrib/ctools/includes/export-ui.menu.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/export-ui.menu.inc rename to sites/all/modules/contrib/ctools/includes/export-ui.menu.inc diff --git a/sites/all/modules/custom/ctools/includes/export-ui.plugin-type.inc b/sites/all/modules/contrib/ctools/includes/export-ui.plugin-type.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/export-ui.plugin-type.inc rename to sites/all/modules/contrib/ctools/includes/export-ui.plugin-type.inc diff --git a/sites/all/modules/custom/ctools/includes/export.inc b/sites/all/modules/contrib/ctools/includes/export.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/export.inc rename to sites/all/modules/contrib/ctools/includes/export.inc diff --git a/sites/all/modules/custom/ctools/includes/fields.inc b/sites/all/modules/contrib/ctools/includes/fields.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/fields.inc rename to sites/all/modules/contrib/ctools/includes/fields.inc diff --git a/sites/all/modules/custom/ctools/includes/jump-menu.inc b/sites/all/modules/contrib/ctools/includes/jump-menu.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/jump-menu.inc rename to sites/all/modules/contrib/ctools/includes/jump-menu.inc diff --git a/sites/all/modules/custom/ctools/includes/language.inc b/sites/all/modules/contrib/ctools/includes/language.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/language.inc rename to sites/all/modules/contrib/ctools/includes/language.inc diff --git a/sites/all/modules/custom/ctools/includes/math-expr.inc b/sites/all/modules/contrib/ctools/includes/math-expr.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/math-expr.inc rename to sites/all/modules/contrib/ctools/includes/math-expr.inc diff --git a/sites/all/modules/custom/ctools/includes/menu.inc b/sites/all/modules/contrib/ctools/includes/menu.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/menu.inc rename to sites/all/modules/contrib/ctools/includes/menu.inc diff --git a/sites/all/modules/custom/ctools/includes/modal.inc b/sites/all/modules/contrib/ctools/includes/modal.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/modal.inc rename to sites/all/modules/contrib/ctools/includes/modal.inc diff --git a/sites/all/modules/custom/ctools/includes/object-cache.cron.inc b/sites/all/modules/contrib/ctools/includes/object-cache.cron.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/object-cache.cron.inc rename to sites/all/modules/contrib/ctools/includes/object-cache.cron.inc diff --git a/sites/all/modules/custom/ctools/includes/object-cache.inc b/sites/all/modules/contrib/ctools/includes/object-cache.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/object-cache.inc rename to sites/all/modules/contrib/ctools/includes/object-cache.inc diff --git a/sites/all/modules/custom/ctools/includes/page-wizard.inc b/sites/all/modules/contrib/ctools/includes/page-wizard.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/page-wizard.inc rename to sites/all/modules/contrib/ctools/includes/page-wizard.inc diff --git a/sites/all/modules/custom/ctools/includes/page-wizard.menu.inc b/sites/all/modules/contrib/ctools/includes/page-wizard.menu.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/page-wizard.menu.inc rename to sites/all/modules/contrib/ctools/includes/page-wizard.menu.inc diff --git a/sites/all/modules/custom/ctools/includes/plugins-admin.inc b/sites/all/modules/contrib/ctools/includes/plugins-admin.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/plugins-admin.inc rename to sites/all/modules/contrib/ctools/includes/plugins-admin.inc diff --git a/sites/all/modules/custom/ctools/includes/plugins.inc b/sites/all/modules/contrib/ctools/includes/plugins.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/plugins.inc rename to sites/all/modules/contrib/ctools/includes/plugins.inc diff --git a/sites/all/modules/custom/ctools/includes/registry.inc b/sites/all/modules/contrib/ctools/includes/registry.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/registry.inc rename to sites/all/modules/contrib/ctools/includes/registry.inc diff --git a/sites/all/modules/custom/ctools/includes/stylizer.inc b/sites/all/modules/contrib/ctools/includes/stylizer.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/stylizer.inc rename to sites/all/modules/contrib/ctools/includes/stylizer.inc diff --git a/sites/all/modules/custom/ctools/includes/stylizer.theme.inc b/sites/all/modules/contrib/ctools/includes/stylizer.theme.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/stylizer.theme.inc rename to sites/all/modules/contrib/ctools/includes/stylizer.theme.inc diff --git a/sites/all/modules/custom/ctools/includes/utility.inc b/sites/all/modules/contrib/ctools/includes/utility.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/utility.inc rename to sites/all/modules/contrib/ctools/includes/utility.inc diff --git a/sites/all/modules/custom/ctools/includes/uuid.inc b/sites/all/modules/contrib/ctools/includes/uuid.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/uuid.inc rename to sites/all/modules/contrib/ctools/includes/uuid.inc diff --git a/sites/all/modules/custom/ctools/includes/views.inc b/sites/all/modules/contrib/ctools/includes/views.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/views.inc rename to sites/all/modules/contrib/ctools/includes/views.inc diff --git a/sites/all/modules/custom/ctools/includes/wizard.inc b/sites/all/modules/contrib/ctools/includes/wizard.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/wizard.inc rename to sites/all/modules/contrib/ctools/includes/wizard.inc diff --git a/sites/all/modules/custom/ctools/includes/wizard.theme.inc b/sites/all/modules/contrib/ctools/includes/wizard.theme.inc similarity index 100% rename from sites/all/modules/custom/ctools/includes/wizard.theme.inc rename to sites/all/modules/contrib/ctools/includes/wizard.theme.inc diff --git a/sites/all/modules/custom/ctools/js/ajax-responder.js b/sites/all/modules/contrib/ctools/js/ajax-responder.js similarity index 100% rename from sites/all/modules/custom/ctools/js/ajax-responder.js rename to sites/all/modules/contrib/ctools/js/ajax-responder.js diff --git a/sites/all/modules/custom/ctools/js/auto-submit.js b/sites/all/modules/contrib/ctools/js/auto-submit.js similarity index 100% rename from sites/all/modules/custom/ctools/js/auto-submit.js rename to sites/all/modules/contrib/ctools/js/auto-submit.js diff --git a/sites/all/modules/custom/ctools/js/collapsible-div.js b/sites/all/modules/contrib/ctools/js/collapsible-div.js similarity index 100% rename from sites/all/modules/custom/ctools/js/collapsible-div.js rename to sites/all/modules/contrib/ctools/js/collapsible-div.js diff --git a/sites/all/modules/custom/ctools/js/dependent.js b/sites/all/modules/contrib/ctools/js/dependent.js similarity index 100% rename from sites/all/modules/custom/ctools/js/dependent.js rename to sites/all/modules/contrib/ctools/js/dependent.js diff --git a/sites/all/modules/custom/ctools/js/dropbutton.js b/sites/all/modules/contrib/ctools/js/dropbutton.js similarity index 100% rename from sites/all/modules/custom/ctools/js/dropbutton.js rename to sites/all/modules/contrib/ctools/js/dropbutton.js diff --git a/sites/all/modules/custom/ctools/js/dropdown.js b/sites/all/modules/contrib/ctools/js/dropdown.js similarity index 100% rename from sites/all/modules/custom/ctools/js/dropdown.js rename to sites/all/modules/contrib/ctools/js/dropdown.js diff --git a/sites/all/modules/custom/ctools/js/jump-menu.js b/sites/all/modules/contrib/ctools/js/jump-menu.js similarity index 100% rename from sites/all/modules/custom/ctools/js/jump-menu.js rename to sites/all/modules/contrib/ctools/js/jump-menu.js diff --git a/sites/all/modules/custom/ctools/js/modal.js b/sites/all/modules/contrib/ctools/js/modal.js similarity index 100% rename from sites/all/modules/custom/ctools/js/modal.js rename to sites/all/modules/contrib/ctools/js/modal.js diff --git a/sites/all/modules/custom/ctools/js/stylizer.js b/sites/all/modules/contrib/ctools/js/stylizer.js similarity index 100% rename from sites/all/modules/custom/ctools/js/stylizer.js rename to sites/all/modules/contrib/ctools/js/stylizer.js diff --git a/sites/all/modules/custom/ctools/page_manager/css/page-manager.css b/sites/all/modules/contrib/ctools/page_manager/css/page-manager.css similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/css/page-manager.css rename to sites/all/modules/contrib/ctools/page_manager/css/page-manager.css diff --git a/sites/all/modules/custom/ctools/page_manager/help/about.html b/sites/all/modules/contrib/ctools/page_manager/help/about.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/about.html rename to sites/all/modules/contrib/ctools/page_manager/help/about.html diff --git a/sites/all/modules/custom/ctools/page_manager/help/api-task-handler.html b/sites/all/modules/contrib/ctools/page_manager/help/api-task-handler.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/api-task-handler.html rename to sites/all/modules/contrib/ctools/page_manager/help/api-task-handler.html diff --git a/sites/all/modules/custom/ctools/page_manager/help/api-task-type.html b/sites/all/modules/contrib/ctools/page_manager/help/api-task-type.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/api-task-type.html rename to sites/all/modules/contrib/ctools/page_manager/help/api-task-type.html diff --git a/sites/all/modules/custom/ctools/page_manager/help/api-task.html b/sites/all/modules/contrib/ctools/page_manager/help/api-task.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/api-task.html rename to sites/all/modules/contrib/ctools/page_manager/help/api-task.html diff --git a/sites/all/modules/custom/ctools/page_manager/help/custom-pages-access.html b/sites/all/modules/contrib/ctools/page_manager/help/custom-pages-access.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/custom-pages-access.html rename to sites/all/modules/contrib/ctools/page_manager/help/custom-pages-access.html diff --git a/sites/all/modules/custom/ctools/page_manager/help/custom-pages-arguments.html b/sites/all/modules/contrib/ctools/page_manager/help/custom-pages-arguments.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/custom-pages-arguments.html rename to sites/all/modules/contrib/ctools/page_manager/help/custom-pages-arguments.html diff --git a/sites/all/modules/custom/ctools/page_manager/help/custom-pages-menu.html b/sites/all/modules/contrib/ctools/page_manager/help/custom-pages-menu.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/custom-pages-menu.html rename to sites/all/modules/contrib/ctools/page_manager/help/custom-pages-menu.html diff --git a/sites/all/modules/custom/ctools/page_manager/help/custom-pages.html b/sites/all/modules/contrib/ctools/page_manager/help/custom-pages.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/custom-pages.html rename to sites/all/modules/contrib/ctools/page_manager/help/custom-pages.html diff --git a/sites/all/modules/custom/ctools/page_manager/help/getting-started-create.html b/sites/all/modules/contrib/ctools/page_manager/help/getting-started-create.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/getting-started-create.html rename to sites/all/modules/contrib/ctools/page_manager/help/getting-started-create.html diff --git a/sites/all/modules/custom/ctools/page_manager/help/getting-started-custom-nodes.html b/sites/all/modules/contrib/ctools/page_manager/help/getting-started-custom-nodes.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/getting-started-custom-nodes.html rename to sites/all/modules/contrib/ctools/page_manager/help/getting-started-custom-nodes.html diff --git a/sites/all/modules/custom/ctools/page_manager/help/getting-started-custom-vocabulary.html b/sites/all/modules/contrib/ctools/page_manager/help/getting-started-custom-vocabulary.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/getting-started-custom-vocabulary.html rename to sites/all/modules/contrib/ctools/page_manager/help/getting-started-custom-vocabulary.html diff --git a/sites/all/modules/custom/ctools/page_manager/help/getting-started-members.html b/sites/all/modules/contrib/ctools/page_manager/help/getting-started-members.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/getting-started-members.html rename to sites/all/modules/contrib/ctools/page_manager/help/getting-started-members.html diff --git a/sites/all/modules/custom/ctools/page_manager/help/getting-started-page-list.html b/sites/all/modules/contrib/ctools/page_manager/help/getting-started-page-list.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/getting-started-page-list.html rename to sites/all/modules/contrib/ctools/page_manager/help/getting-started-page-list.html diff --git a/sites/all/modules/custom/ctools/page_manager/help/getting-started.html b/sites/all/modules/contrib/ctools/page_manager/help/getting-started.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/getting-started.html rename to sites/all/modules/contrib/ctools/page_manager/help/getting-started.html diff --git a/sites/all/modules/custom/ctools/page_manager/help/page-task-type.html b/sites/all/modules/contrib/ctools/page_manager/help/page-task-type.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/page-task-type.html rename to sites/all/modules/contrib/ctools/page_manager/help/page-task-type.html diff --git a/sites/all/modules/custom/ctools/page_manager/help/page_manager.help.ini b/sites/all/modules/contrib/ctools/page_manager/help/page_manager.help.ini similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/page_manager.help.ini rename to sites/all/modules/contrib/ctools/page_manager/help/page_manager.help.ini diff --git a/sites/all/modules/custom/ctools/page_manager/help/variants.html b/sites/all/modules/contrib/ctools/page_manager/help/variants.html similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/help/variants.html rename to sites/all/modules/contrib/ctools/page_manager/help/variants.html diff --git a/sites/all/modules/custom/ctools/page_manager/images/arrow-active.png b/sites/all/modules/contrib/ctools/page_manager/images/arrow-active.png similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/images/arrow-active.png rename to sites/all/modules/contrib/ctools/page_manager/images/arrow-active.png diff --git a/sites/all/modules/custom/ctools/page_manager/images/locked-other.png b/sites/all/modules/contrib/ctools/page_manager/images/locked-other.png similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/images/locked-other.png rename to sites/all/modules/contrib/ctools/page_manager/images/locked-other.png diff --git a/sites/all/modules/custom/ctools/page_manager/images/locked.png b/sites/all/modules/contrib/ctools/page_manager/images/locked.png similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/images/locked.png rename to sites/all/modules/contrib/ctools/page_manager/images/locked.png diff --git a/sites/all/modules/custom/ctools/page_manager/js/page-list.js b/sites/all/modules/contrib/ctools/page_manager/js/page-list.js similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/js/page-list.js rename to sites/all/modules/contrib/ctools/page_manager/js/page-list.js diff --git a/sites/all/modules/custom/ctools/page_manager/page_manager.admin.inc b/sites/all/modules/contrib/ctools/page_manager/page_manager.admin.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/page_manager.admin.inc rename to sites/all/modules/contrib/ctools/page_manager/page_manager.admin.inc diff --git a/sites/all/modules/custom/ctools/page_manager/page_manager.api.php b/sites/all/modules/contrib/ctools/page_manager/page_manager.api.php similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/page_manager.api.php rename to sites/all/modules/contrib/ctools/page_manager/page_manager.api.php diff --git a/sites/all/modules/custom/ctools/page_manager/page_manager.info b/sites/all/modules/contrib/ctools/page_manager/page_manager.info similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/page_manager.info rename to sites/all/modules/contrib/ctools/page_manager/page_manager.info diff --git a/sites/all/modules/custom/ctools/page_manager/page_manager.install b/sites/all/modules/contrib/ctools/page_manager/page_manager.install similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/page_manager.install rename to sites/all/modules/contrib/ctools/page_manager/page_manager.install diff --git a/sites/all/modules/custom/ctools/page_manager/page_manager.module b/sites/all/modules/contrib/ctools/page_manager/page_manager.module similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/page_manager.module rename to sites/all/modules/contrib/ctools/page_manager/page_manager.module diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/cache/page_manager_context.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/cache/page_manager_context.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/cache/page_manager_context.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/cache/page_manager_context.inc diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/task_handlers/http_response.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/task_handlers/http_response.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/task_handlers/http_response.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/task_handlers/http_response.inc diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/tasks/blog.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/tasks/blog.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/tasks/blog.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/tasks/blog.inc diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/tasks/blog_user.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/tasks/blog_user.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/tasks/blog_user.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/tasks/blog_user.inc diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/tasks/comment_reply.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/tasks/comment_reply.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/tasks/comment_reply.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/tasks/comment_reply.inc diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/tasks/contact_site.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/tasks/contact_site.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/tasks/contact_site.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/tasks/contact_site.inc diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/tasks/contact_user.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/tasks/contact_user.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/tasks/contact_user.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/tasks/contact_user.inc diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/tasks/node_edit.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/tasks/node_edit.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/tasks/node_edit.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/tasks/node_edit.inc diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/tasks/node_view.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/tasks/node_view.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/tasks/node_view.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/tasks/node_view.inc diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/tasks/page.admin.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/tasks/page.admin.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/tasks/page.admin.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/tasks/page.admin.inc diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/tasks/page.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/tasks/page.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/tasks/page.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/tasks/page.inc diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/tasks/poll.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/tasks/poll.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/tasks/poll.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/tasks/poll.inc diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/tasks/search.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/tasks/search.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/tasks/search.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/tasks/search.inc diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/tasks/term_view.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/tasks/term_view.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/tasks/term_view.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/tasks/term_view.inc diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/tasks/user_edit.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/tasks/user_edit.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/tasks/user_edit.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/tasks/user_edit.inc diff --git a/sites/all/modules/custom/ctools/page_manager/plugins/tasks/user_view.inc b/sites/all/modules/contrib/ctools/page_manager/plugins/tasks/user_view.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/plugins/tasks/user_view.inc rename to sites/all/modules/contrib/ctools/page_manager/plugins/tasks/user_view.inc diff --git a/sites/all/modules/custom/ctools/page_manager/theme/page-manager-edit-page.tpl.php b/sites/all/modules/contrib/ctools/page_manager/theme/page-manager-edit-page.tpl.php similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/theme/page-manager-edit-page.tpl.php rename to sites/all/modules/contrib/ctools/page_manager/theme/page-manager-edit-page.tpl.php diff --git a/sites/all/modules/custom/ctools/page_manager/theme/page_manager.theme.inc b/sites/all/modules/contrib/ctools/page_manager/theme/page_manager.theme.inc similarity index 100% rename from sites/all/modules/custom/ctools/page_manager/theme/page_manager.theme.inc rename to sites/all/modules/contrib/ctools/page_manager/theme/page_manager.theme.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/book.inc b/sites/all/modules/contrib/ctools/plugins/access/book.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/book.inc rename to sites/all/modules/contrib/ctools/plugins/access/book.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/compare_users.inc b/sites/all/modules/contrib/ctools/plugins/access/compare_users.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/compare_users.inc rename to sites/all/modules/contrib/ctools/plugins/access/compare_users.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/context_exists.inc b/sites/all/modules/contrib/ctools/plugins/access/context_exists.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/context_exists.inc rename to sites/all/modules/contrib/ctools/plugins/access/context_exists.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/entity_bundle.inc b/sites/all/modules/contrib/ctools/plugins/access/entity_bundle.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/entity_bundle.inc rename to sites/all/modules/contrib/ctools/plugins/access/entity_bundle.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/entity_field_value.inc b/sites/all/modules/contrib/ctools/plugins/access/entity_field_value.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/entity_field_value.inc rename to sites/all/modules/contrib/ctools/plugins/access/entity_field_value.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/front.inc b/sites/all/modules/contrib/ctools/plugins/access/front.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/front.inc rename to sites/all/modules/contrib/ctools/plugins/access/front.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/node.inc b/sites/all/modules/contrib/ctools/plugins/access/node.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/node.inc rename to sites/all/modules/contrib/ctools/plugins/access/node.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/node_access.inc b/sites/all/modules/contrib/ctools/plugins/access/node_access.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/node_access.inc rename to sites/all/modules/contrib/ctools/plugins/access/node_access.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/node_comment.inc b/sites/all/modules/contrib/ctools/plugins/access/node_comment.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/node_comment.inc rename to sites/all/modules/contrib/ctools/plugins/access/node_comment.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/node_language.inc b/sites/all/modules/contrib/ctools/plugins/access/node_language.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/node_language.inc rename to sites/all/modules/contrib/ctools/plugins/access/node_language.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/node_status.inc b/sites/all/modules/contrib/ctools/plugins/access/node_status.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/node_status.inc rename to sites/all/modules/contrib/ctools/plugins/access/node_status.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/node_type.inc b/sites/all/modules/contrib/ctools/plugins/access/node_type.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/node_type.inc rename to sites/all/modules/contrib/ctools/plugins/access/node_type.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/path_visibility.inc b/sites/all/modules/contrib/ctools/plugins/access/path_visibility.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/path_visibility.inc rename to sites/all/modules/contrib/ctools/plugins/access/path_visibility.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/perm.inc b/sites/all/modules/contrib/ctools/plugins/access/perm.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/perm.inc rename to sites/all/modules/contrib/ctools/plugins/access/perm.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/php.inc b/sites/all/modules/contrib/ctools/plugins/access/php.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/php.inc rename to sites/all/modules/contrib/ctools/plugins/access/php.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/role.inc b/sites/all/modules/contrib/ctools/plugins/access/role.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/role.inc rename to sites/all/modules/contrib/ctools/plugins/access/role.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/site_language.inc b/sites/all/modules/contrib/ctools/plugins/access/site_language.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/site_language.inc rename to sites/all/modules/contrib/ctools/plugins/access/site_language.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/string_equal.inc b/sites/all/modules/contrib/ctools/plugins/access/string_equal.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/string_equal.inc rename to sites/all/modules/contrib/ctools/plugins/access/string_equal.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/string_length.inc b/sites/all/modules/contrib/ctools/plugins/access/string_length.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/string_length.inc rename to sites/all/modules/contrib/ctools/plugins/access/string_length.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/term.inc b/sites/all/modules/contrib/ctools/plugins/access/term.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/term.inc rename to sites/all/modules/contrib/ctools/plugins/access/term.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/term_has_parent.inc b/sites/all/modules/contrib/ctools/plugins/access/term_has_parent.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/term_has_parent.inc rename to sites/all/modules/contrib/ctools/plugins/access/term_has_parent.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/term_parent.inc b/sites/all/modules/contrib/ctools/plugins/access/term_parent.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/term_parent.inc rename to sites/all/modules/contrib/ctools/plugins/access/term_parent.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/term_vocabulary.inc b/sites/all/modules/contrib/ctools/plugins/access/term_vocabulary.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/term_vocabulary.inc rename to sites/all/modules/contrib/ctools/plugins/access/term_vocabulary.inc diff --git a/sites/all/modules/custom/ctools/plugins/access/theme.inc b/sites/all/modules/contrib/ctools/plugins/access/theme.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/access/theme.inc rename to sites/all/modules/contrib/ctools/plugins/access/theme.inc diff --git a/sites/all/modules/custom/ctools/plugins/arguments/entity_id.inc b/sites/all/modules/contrib/ctools/plugins/arguments/entity_id.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/arguments/entity_id.inc rename to sites/all/modules/contrib/ctools/plugins/arguments/entity_id.inc diff --git a/sites/all/modules/custom/ctools/plugins/arguments/nid.inc b/sites/all/modules/contrib/ctools/plugins/arguments/nid.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/arguments/nid.inc rename to sites/all/modules/contrib/ctools/plugins/arguments/nid.inc diff --git a/sites/all/modules/custom/ctools/plugins/arguments/node_add.inc b/sites/all/modules/contrib/ctools/plugins/arguments/node_add.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/arguments/node_add.inc rename to sites/all/modules/contrib/ctools/plugins/arguments/node_add.inc diff --git a/sites/all/modules/custom/ctools/plugins/arguments/node_edit.inc b/sites/all/modules/contrib/ctools/plugins/arguments/node_edit.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/arguments/node_edit.inc rename to sites/all/modules/contrib/ctools/plugins/arguments/node_edit.inc diff --git a/sites/all/modules/custom/ctools/plugins/arguments/rid.inc b/sites/all/modules/contrib/ctools/plugins/arguments/rid.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/arguments/rid.inc rename to sites/all/modules/contrib/ctools/plugins/arguments/rid.inc diff --git a/sites/all/modules/custom/ctools/plugins/arguments/string.inc b/sites/all/modules/contrib/ctools/plugins/arguments/string.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/arguments/string.inc rename to sites/all/modules/contrib/ctools/plugins/arguments/string.inc diff --git a/sites/all/modules/custom/ctools/plugins/arguments/term.inc b/sites/all/modules/contrib/ctools/plugins/arguments/term.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/arguments/term.inc rename to sites/all/modules/contrib/ctools/plugins/arguments/term.inc diff --git a/sites/all/modules/custom/ctools/plugins/arguments/terms.inc b/sites/all/modules/contrib/ctools/plugins/arguments/terms.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/arguments/terms.inc rename to sites/all/modules/contrib/ctools/plugins/arguments/terms.inc diff --git a/sites/all/modules/custom/ctools/plugins/arguments/uid.inc b/sites/all/modules/contrib/ctools/plugins/arguments/uid.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/arguments/uid.inc rename to sites/all/modules/contrib/ctools/plugins/arguments/uid.inc diff --git a/sites/all/modules/custom/ctools/plugins/arguments/user_edit.inc b/sites/all/modules/contrib/ctools/plugins/arguments/user_edit.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/arguments/user_edit.inc rename to sites/all/modules/contrib/ctools/plugins/arguments/user_edit.inc diff --git a/sites/all/modules/custom/ctools/plugins/arguments/user_name.inc b/sites/all/modules/contrib/ctools/plugins/arguments/user_name.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/arguments/user_name.inc rename to sites/all/modules/contrib/ctools/plugins/arguments/user_name.inc diff --git a/sites/all/modules/custom/ctools/plugins/arguments/vid.inc b/sites/all/modules/contrib/ctools/plugins/arguments/vid.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/arguments/vid.inc rename to sites/all/modules/contrib/ctools/plugins/arguments/vid.inc diff --git a/sites/all/modules/custom/ctools/plugins/cache/export_ui.inc b/sites/all/modules/contrib/ctools/plugins/cache/export_ui.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/cache/export_ui.inc rename to sites/all/modules/contrib/ctools/plugins/cache/export_ui.inc diff --git a/sites/all/modules/custom/ctools/plugins/cache/simple.inc b/sites/all/modules/contrib/ctools/plugins/cache/simple.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/cache/simple.inc rename to sites/all/modules/contrib/ctools/plugins/cache/simple.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/block.inc b/sites/all/modules/contrib/ctools/plugins/content_types/block/block.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/block.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/block/block.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_contrib_block.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_contrib_block.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_contrib_block.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_contrib_block.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_contrib_block_empty.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_contrib_block_empty.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_contrib_block_empty.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_contrib_block_empty.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_contrib_menu.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_contrib_menu.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_contrib_menu.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_contrib_menu.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_contrib_page.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_contrib_page.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_contrib_page.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_contrib_page.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_activeforumtopics.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_activeforumtopics.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_activeforumtopics.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_activeforumtopics.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_authorinformation.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_authorinformation.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_authorinformation.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_authorinformation.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_block.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_block.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_block.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_block.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_block_empty.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_block_empty.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_block_empty.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_block_empty.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_block_menu.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_block_menu.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_block_menu.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_block_menu.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_booknavigation.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_booknavigation.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_booknavigation.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_booknavigation.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_languageswitcher.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_languageswitcher.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_languageswitcher.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_languageswitcher.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_navigation.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_navigation.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_navigation.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_navigation.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_newforumtopics.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_newforumtopics.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_newforumtopics.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_newforumtopics.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_page.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_page.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_page.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_page.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_popularcontent.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_popularcontent.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_popularcontent.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_popularcontent.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_primarylinks.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_primarylinks.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_primarylinks.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_primarylinks.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_recentblogposts.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_recentblogposts.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_recentblogposts.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_recentblogposts.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_recentcomments.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_recentcomments.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_recentcomments.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_recentcomments.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_recentpoll.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_recentpoll.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_recentpoll.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_recentpoll.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_searchform.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_searchform.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_searchform.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_searchform.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_syndicate.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_syndicate.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_syndicate.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_syndicate.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_userlogin.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_userlogin.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_userlogin.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_userlogin.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_whosnew.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_whosnew.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_whosnew.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_whosnew.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_whosonline.png b/sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_whosonline.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/block/icon_core_whosonline.png rename to sites/all/modules/contrib/ctools/plugins/content_types/block/icon_core_whosonline.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/comment/comment_links.inc b/sites/all/modules/contrib/ctools/plugins/content_types/comment/comment_links.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/comment/comment_links.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/comment/comment_links.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/comment/comment_reply_form.inc b/sites/all/modules/contrib/ctools/plugins/content_types/comment/comment_reply_form.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/comment/comment_reply_form.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/comment/comment_reply_form.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/contact/contact.inc b/sites/all/modules/contrib/ctools/plugins/content_types/contact/contact.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/contact/contact.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/contact/contact.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/contact/icon_contact.png b/sites/all/modules/contrib/ctools/plugins/content_types/contact/icon_contact.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/contact/icon_contact.png rename to sites/all/modules/contrib/ctools/plugins/content_types/contact/icon_contact.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/contact/user_contact.inc b/sites/all/modules/contrib/ctools/plugins/content_types/contact/user_contact.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/contact/user_contact.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/contact/user_contact.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/custom/custom.inc b/sites/all/modules/contrib/ctools/plugins/content_types/custom/custom.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/custom/custom.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/custom/custom.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/custom/icon_block_custom.png b/sites/all/modules/contrib/ctools/plugins/content_types/custom/icon_block_custom.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/custom/icon_block_custom.png rename to sites/all/modules/contrib/ctools/plugins/content_types/custom/icon_block_custom.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/entity_context/entity_field.inc b/sites/all/modules/contrib/ctools/plugins/content_types/entity_context/entity_field.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/entity_context/entity_field.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/entity_context/entity_field.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/entity_context/entity_field_extra.inc b/sites/all/modules/contrib/ctools/plugins/content_types/entity_context/entity_field_extra.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/entity_context/entity_field_extra.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/entity_context/entity_field_extra.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/form/entity_form_field.inc b/sites/all/modules/contrib/ctools/plugins/content_types/form/entity_form_field.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/form/entity_form_field.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/form/entity_form_field.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/form/form.inc b/sites/all/modules/contrib/ctools/plugins/content_types/form/form.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/form/form.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/form/form.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/form/icon_form.png b/sites/all/modules/contrib/ctools/plugins/content_types/form/icon_form.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/form/icon_form.png rename to sites/all/modules/contrib/ctools/plugins/content_types/form/icon_form.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node/icon_node.png b/sites/all/modules/contrib/ctools/plugins/content_types/node/icon_node.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node/icon_node.png rename to sites/all/modules/contrib/ctools/plugins/content_types/node/icon_node.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node/node.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node/node.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node/node.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node/node.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/icon_node.png b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/icon_node.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/icon_node.png rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/icon_node.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/node_attachments.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_attachments.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/node_attachments.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_attachments.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/node_author.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_author.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/node_author.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_author.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/node_body.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_body.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/node_body.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_body.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/node_book_children.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_book_children.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/node_book_children.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_book_children.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/node_book_nav.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_book_nav.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/node_book_nav.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_book_nav.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/node_comment_form.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_comment_form.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/node_comment_form.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_comment_form.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/node_comment_wrapper.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_comment_wrapper.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/node_comment_wrapper.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_comment_wrapper.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/node_comments.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_comments.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/node_comments.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_comments.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/node_content.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_content.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/node_content.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_content.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/node_created.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_created.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/node_created.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_created.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/node_links.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_links.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/node_links.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_links.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/node_terms.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_terms.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/node_terms.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_terms.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/node_title.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_title.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/node_title.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_title.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/node_type_desc.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_type_desc.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/node_type_desc.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_type_desc.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_context/node_updated.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_updated.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_context/node_updated.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_context/node_updated.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_form/icon_node_form.png b/sites/all/modules/contrib/ctools/plugins/content_types/node_form/icon_node_form.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_form/icon_node_form.png rename to sites/all/modules/contrib/ctools/plugins/content_types/node_form/icon_node_form.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_attachments.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_attachments.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_attachments.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_attachments.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_author.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_author.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_author.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_author.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_book.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_book.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_book.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_book.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_buttons.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_buttons.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_buttons.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_buttons.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_comment.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_comment.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_comment.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_comment.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_language.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_language.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_language.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_language.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_log.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_log.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_log.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_log.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_menu.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_menu.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_menu.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_menu.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_path.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_path.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_path.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_path.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_publishing.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_publishing.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_publishing.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_publishing.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_title.inc b/sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_title.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/node_form/node_form_title.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/node_form/node_form_title.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/page/page_actions.inc b/sites/all/modules/contrib/ctools/plugins/content_types/page/page_actions.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/page/page_actions.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/page/page_actions.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/page/page_breadcrumb.inc b/sites/all/modules/contrib/ctools/plugins/content_types/page/page_breadcrumb.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/page/page_breadcrumb.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/page/page_breadcrumb.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/page/page_feed_icons.inc b/sites/all/modules/contrib/ctools/plugins/content_types/page/page_feed_icons.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/page/page_feed_icons.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/page/page_feed_icons.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/page/page_help.inc b/sites/all/modules/contrib/ctools/plugins/content_types/page/page_help.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/page/page_help.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/page/page_help.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/page/page_logo.inc b/sites/all/modules/contrib/ctools/plugins/content_types/page/page_logo.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/page/page_logo.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/page/page_logo.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/page/page_messages.inc b/sites/all/modules/contrib/ctools/plugins/content_types/page/page_messages.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/page/page_messages.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/page/page_messages.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/page/page_primary_links.inc b/sites/all/modules/contrib/ctools/plugins/content_types/page/page_primary_links.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/page/page_primary_links.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/page/page_primary_links.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/page/page_secondary_links.inc b/sites/all/modules/contrib/ctools/plugins/content_types/page/page_secondary_links.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/page/page_secondary_links.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/page/page_secondary_links.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/page/page_site_name.inc b/sites/all/modules/contrib/ctools/plugins/content_types/page/page_site_name.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/page/page_site_name.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/page/page_site_name.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/page/page_slogan.inc b/sites/all/modules/contrib/ctools/plugins/content_types/page/page_slogan.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/page/page_slogan.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/page/page_slogan.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/page/page_tabs.inc b/sites/all/modules/contrib/ctools/plugins/content_types/page/page_tabs.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/page/page_tabs.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/page/page_tabs.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/page/page_title.inc b/sites/all/modules/contrib/ctools/plugins/content_types/page/page_title.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/page/page_title.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/page/page_title.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/search/icon_search.png b/sites/all/modules/contrib/ctools/plugins/content_types/search/icon_search.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/search/icon_search.png rename to sites/all/modules/contrib/ctools/plugins/content_types/search/icon_search.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/search/search_form.inc b/sites/all/modules/contrib/ctools/plugins/content_types/search/search_form.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/search/search_form.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/search/search_form.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/search/search_result.inc b/sites/all/modules/contrib/ctools/plugins/content_types/search/search_result.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/search/search_result.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/search/search_result.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/term_context/icon_term.png b/sites/all/modules/contrib/ctools/plugins/content_types/term_context/icon_term.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/term_context/icon_term.png rename to sites/all/modules/contrib/ctools/plugins/content_types/term_context/icon_term.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/term_context/term_description.inc b/sites/all/modules/contrib/ctools/plugins/content_types/term_context/term_description.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/term_context/term_description.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/term_context/term_description.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/term_context/term_list.inc b/sites/all/modules/contrib/ctools/plugins/content_types/term_context/term_list.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/term_context/term_list.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/term_context/term_list.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/term_context/term_name.inc b/sites/all/modules/contrib/ctools/plugins/content_types/term_context/term_name.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/term_context/term_name.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/term_context/term_name.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/token/icon_token.png b/sites/all/modules/contrib/ctools/plugins/content_types/token/icon_token.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/token/icon_token.png rename to sites/all/modules/contrib/ctools/plugins/content_types/token/icon_token.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/token/token.inc b/sites/all/modules/contrib/ctools/plugins/content_types/token/token.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/token/token.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/token/token.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/user_context/icon_user.png b/sites/all/modules/contrib/ctools/plugins/content_types/user_context/icon_user.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/user_context/icon_user.png rename to sites/all/modules/contrib/ctools/plugins/content_types/user_context/icon_user.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/user_context/profile_fields.inc b/sites/all/modules/contrib/ctools/plugins/content_types/user_context/profile_fields.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/user_context/profile_fields.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/user_context/profile_fields.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/user_context/profile_fields_pane.tpl.php b/sites/all/modules/contrib/ctools/plugins/content_types/user_context/profile_fields_pane.tpl.php similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/user_context/profile_fields_pane.tpl.php rename to sites/all/modules/contrib/ctools/plugins/content_types/user_context/profile_fields_pane.tpl.php diff --git a/sites/all/modules/custom/ctools/plugins/content_types/user_context/user_links.inc b/sites/all/modules/contrib/ctools/plugins/content_types/user_context/user_links.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/user_context/user_links.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/user_context/user_links.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/user_context/user_picture.inc b/sites/all/modules/contrib/ctools/plugins/content_types/user_context/user_picture.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/user_context/user_picture.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/user_context/user_picture.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/user_context/user_profile.inc b/sites/all/modules/contrib/ctools/plugins/content_types/user_context/user_profile.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/user_context/user_profile.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/user_context/user_profile.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/user_context/user_signature.inc b/sites/all/modules/contrib/ctools/plugins/content_types/user_context/user_signature.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/user_context/user_signature.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/user_context/user_signature.inc diff --git a/sites/all/modules/custom/ctools/plugins/content_types/vocabulary_context/icon_vocabulary.png b/sites/all/modules/contrib/ctools/plugins/content_types/vocabulary_context/icon_vocabulary.png similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/vocabulary_context/icon_vocabulary.png rename to sites/all/modules/contrib/ctools/plugins/content_types/vocabulary_context/icon_vocabulary.png diff --git a/sites/all/modules/custom/ctools/plugins/content_types/vocabulary_context/vocabulary_terms.inc b/sites/all/modules/contrib/ctools/plugins/content_types/vocabulary_context/vocabulary_terms.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/content_types/vocabulary_context/vocabulary_terms.inc rename to sites/all/modules/contrib/ctools/plugins/content_types/vocabulary_context/vocabulary_terms.inc diff --git a/sites/all/modules/custom/ctools/plugins/contexts/entity.inc b/sites/all/modules/contrib/ctools/plugins/contexts/entity.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/contexts/entity.inc rename to sites/all/modules/contrib/ctools/plugins/contexts/entity.inc diff --git a/sites/all/modules/custom/ctools/plugins/contexts/node.inc b/sites/all/modules/contrib/ctools/plugins/contexts/node.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/contexts/node.inc rename to sites/all/modules/contrib/ctools/plugins/contexts/node.inc diff --git a/sites/all/modules/custom/ctools/plugins/contexts/node_add_form.inc b/sites/all/modules/contrib/ctools/plugins/contexts/node_add_form.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/contexts/node_add_form.inc rename to sites/all/modules/contrib/ctools/plugins/contexts/node_add_form.inc diff --git a/sites/all/modules/custom/ctools/plugins/contexts/node_edit_form.inc b/sites/all/modules/contrib/ctools/plugins/contexts/node_edit_form.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/contexts/node_edit_form.inc rename to sites/all/modules/contrib/ctools/plugins/contexts/node_edit_form.inc diff --git a/sites/all/modules/custom/ctools/plugins/contexts/string.inc b/sites/all/modules/contrib/ctools/plugins/contexts/string.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/contexts/string.inc rename to sites/all/modules/contrib/ctools/plugins/contexts/string.inc diff --git a/sites/all/modules/custom/ctools/plugins/contexts/term.inc b/sites/all/modules/contrib/ctools/plugins/contexts/term.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/contexts/term.inc rename to sites/all/modules/contrib/ctools/plugins/contexts/term.inc diff --git a/sites/all/modules/custom/ctools/plugins/contexts/terms.inc b/sites/all/modules/contrib/ctools/plugins/contexts/terms.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/contexts/terms.inc rename to sites/all/modules/contrib/ctools/plugins/contexts/terms.inc diff --git a/sites/all/modules/custom/ctools/plugins/contexts/token.inc b/sites/all/modules/contrib/ctools/plugins/contexts/token.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/contexts/token.inc rename to sites/all/modules/contrib/ctools/plugins/contexts/token.inc diff --git a/sites/all/modules/custom/ctools/plugins/contexts/user.inc b/sites/all/modules/contrib/ctools/plugins/contexts/user.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/contexts/user.inc rename to sites/all/modules/contrib/ctools/plugins/contexts/user.inc diff --git a/sites/all/modules/custom/ctools/plugins/contexts/user_edit_form.inc b/sites/all/modules/contrib/ctools/plugins/contexts/user_edit_form.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/contexts/user_edit_form.inc rename to sites/all/modules/contrib/ctools/plugins/contexts/user_edit_form.inc diff --git a/sites/all/modules/custom/ctools/plugins/contexts/vocabulary.inc b/sites/all/modules/contrib/ctools/plugins/contexts/vocabulary.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/contexts/vocabulary.inc rename to sites/all/modules/contrib/ctools/plugins/contexts/vocabulary.inc diff --git a/sites/all/modules/custom/ctools/plugins/export_ui/ctools_export_ui.class.php b/sites/all/modules/contrib/ctools/plugins/export_ui/ctools_export_ui.class.php similarity index 100% rename from sites/all/modules/custom/ctools/plugins/export_ui/ctools_export_ui.class.php rename to sites/all/modules/contrib/ctools/plugins/export_ui/ctools_export_ui.class.php diff --git a/sites/all/modules/custom/ctools/plugins/export_ui/ctools_export_ui.inc b/sites/all/modules/contrib/ctools/plugins/export_ui/ctools_export_ui.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/export_ui/ctools_export_ui.inc rename to sites/all/modules/contrib/ctools/plugins/export_ui/ctools_export_ui.inc diff --git a/sites/all/modules/custom/ctools/plugins/relationships/book_parent.inc b/sites/all/modules/contrib/ctools/plugins/relationships/book_parent.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/relationships/book_parent.inc rename to sites/all/modules/contrib/ctools/plugins/relationships/book_parent.inc diff --git a/sites/all/modules/custom/ctools/plugins/relationships/entity_from_field.inc b/sites/all/modules/contrib/ctools/plugins/relationships/entity_from_field.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/relationships/entity_from_field.inc rename to sites/all/modules/contrib/ctools/plugins/relationships/entity_from_field.inc diff --git a/sites/all/modules/custom/ctools/plugins/relationships/entity_from_schema.inc b/sites/all/modules/contrib/ctools/plugins/relationships/entity_from_schema.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/relationships/entity_from_schema.inc rename to sites/all/modules/contrib/ctools/plugins/relationships/entity_from_schema.inc diff --git a/sites/all/modules/custom/ctools/plugins/relationships/node_edit_form_from_node.inc b/sites/all/modules/contrib/ctools/plugins/relationships/node_edit_form_from_node.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/relationships/node_edit_form_from_node.inc rename to sites/all/modules/contrib/ctools/plugins/relationships/node_edit_form_from_node.inc diff --git a/sites/all/modules/custom/ctools/plugins/relationships/term_from_node.inc b/sites/all/modules/contrib/ctools/plugins/relationships/term_from_node.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/relationships/term_from_node.inc rename to sites/all/modules/contrib/ctools/plugins/relationships/term_from_node.inc diff --git a/sites/all/modules/custom/ctools/plugins/relationships/term_parent.inc b/sites/all/modules/contrib/ctools/plugins/relationships/term_parent.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/relationships/term_parent.inc rename to sites/all/modules/contrib/ctools/plugins/relationships/term_parent.inc diff --git a/sites/all/modules/custom/ctools/plugins/relationships/terms_from_node.inc b/sites/all/modules/contrib/ctools/plugins/relationships/terms_from_node.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/relationships/terms_from_node.inc rename to sites/all/modules/contrib/ctools/plugins/relationships/terms_from_node.inc diff --git a/sites/all/modules/custom/ctools/plugins/relationships/user_category_edit_form_from_user.inc b/sites/all/modules/contrib/ctools/plugins/relationships/user_category_edit_form_from_user.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/relationships/user_category_edit_form_from_user.inc rename to sites/all/modules/contrib/ctools/plugins/relationships/user_category_edit_form_from_user.inc diff --git a/sites/all/modules/custom/ctools/plugins/relationships/user_from_node.inc b/sites/all/modules/contrib/ctools/plugins/relationships/user_from_node.inc similarity index 100% rename from sites/all/modules/custom/ctools/plugins/relationships/user_from_node.inc rename to sites/all/modules/contrib/ctools/plugins/relationships/user_from_node.inc diff --git a/sites/all/modules/custom/ctools/stylizer/plugins/export_ui/stylizer.inc b/sites/all/modules/contrib/ctools/stylizer/plugins/export_ui/stylizer.inc similarity index 100% rename from sites/all/modules/custom/ctools/stylizer/plugins/export_ui/stylizer.inc rename to sites/all/modules/contrib/ctools/stylizer/plugins/export_ui/stylizer.inc diff --git a/sites/all/modules/custom/ctools/stylizer/plugins/export_ui/stylizer_ui.class.php b/sites/all/modules/contrib/ctools/stylizer/plugins/export_ui/stylizer_ui.class.php similarity index 100% rename from sites/all/modules/custom/ctools/stylizer/plugins/export_ui/stylizer_ui.class.php rename to sites/all/modules/contrib/ctools/stylizer/plugins/export_ui/stylizer_ui.class.php diff --git a/sites/all/modules/custom/ctools/stylizer/stylizer.info b/sites/all/modules/contrib/ctools/stylizer/stylizer.info similarity index 100% rename from sites/all/modules/custom/ctools/stylizer/stylizer.info rename to sites/all/modules/contrib/ctools/stylizer/stylizer.info diff --git a/sites/all/modules/custom/ctools/stylizer/stylizer.install b/sites/all/modules/contrib/ctools/stylizer/stylizer.install similarity index 100% rename from sites/all/modules/custom/ctools/stylizer/stylizer.install rename to sites/all/modules/contrib/ctools/stylizer/stylizer.install diff --git a/sites/all/modules/custom/ctools/stylizer/stylizer.module b/sites/all/modules/contrib/ctools/stylizer/stylizer.module similarity index 100% rename from sites/all/modules/custom/ctools/stylizer/stylizer.module rename to sites/all/modules/contrib/ctools/stylizer/stylizer.module diff --git a/sites/all/modules/custom/ctools/term_depth/plugins/access/term_depth.inc b/sites/all/modules/contrib/ctools/term_depth/plugins/access/term_depth.inc similarity index 100% rename from sites/all/modules/custom/ctools/term_depth/plugins/access/term_depth.inc rename to sites/all/modules/contrib/ctools/term_depth/plugins/access/term_depth.inc diff --git a/sites/all/modules/custom/ctools/term_depth/term_depth.info b/sites/all/modules/contrib/ctools/term_depth/term_depth.info similarity index 100% rename from sites/all/modules/custom/ctools/term_depth/term_depth.info rename to sites/all/modules/contrib/ctools/term_depth/term_depth.info diff --git a/sites/all/modules/custom/ctools/term_depth/term_depth.module b/sites/all/modules/contrib/ctools/term_depth/term_depth.module similarity index 100% rename from sites/all/modules/custom/ctools/term_depth/term_depth.module rename to sites/all/modules/contrib/ctools/term_depth/term_depth.module diff --git a/sites/all/modules/custom/ctools/tests/context.test b/sites/all/modules/contrib/ctools/tests/context.test similarity index 100% rename from sites/all/modules/custom/ctools/tests/context.test rename to sites/all/modules/contrib/ctools/tests/context.test diff --git a/sites/all/modules/custom/ctools/tests/css.test b/sites/all/modules/contrib/ctools/tests/css.test similarity index 100% rename from sites/all/modules/custom/ctools/tests/css.test rename to sites/all/modules/contrib/ctools/tests/css.test diff --git a/sites/all/modules/custom/ctools/tests/css_cache.test b/sites/all/modules/contrib/ctools/tests/css_cache.test similarity index 100% rename from sites/all/modules/custom/ctools/tests/css_cache.test rename to sites/all/modules/contrib/ctools/tests/css_cache.test diff --git a/sites/all/modules/custom/ctools/tests/ctools.drush.sh b/sites/all/modules/contrib/ctools/tests/ctools.drush.sh similarity index 100% rename from sites/all/modules/custom/ctools/tests/ctools.drush.sh rename to sites/all/modules/contrib/ctools/tests/ctools.drush.sh diff --git a/sites/all/modules/custom/ctools/tests/ctools.plugins.test b/sites/all/modules/contrib/ctools/tests/ctools.plugins.test similarity index 100% rename from sites/all/modules/custom/ctools/tests/ctools.plugins.test rename to sites/all/modules/contrib/ctools/tests/ctools.plugins.test diff --git a/sites/all/modules/custom/ctools/tests/ctools_export_test/ctools_export.test b/sites/all/modules/contrib/ctools/tests/ctools_export_test/ctools_export.test similarity index 100% rename from sites/all/modules/custom/ctools/tests/ctools_export_test/ctools_export.test rename to sites/all/modules/contrib/ctools/tests/ctools_export_test/ctools_export.test diff --git a/sites/all/modules/custom/ctools/tests/ctools_export_test/ctools_export_test.default_ctools_export_tests.inc b/sites/all/modules/contrib/ctools/tests/ctools_export_test/ctools_export_test.default_ctools_export_tests.inc similarity index 100% rename from sites/all/modules/custom/ctools/tests/ctools_export_test/ctools_export_test.default_ctools_export_tests.inc rename to sites/all/modules/contrib/ctools/tests/ctools_export_test/ctools_export_test.default_ctools_export_tests.inc diff --git a/sites/all/modules/custom/ctools/tests/ctools_export_test/ctools_export_test.info b/sites/all/modules/contrib/ctools/tests/ctools_export_test/ctools_export_test.info similarity index 100% rename from sites/all/modules/custom/ctools/tests/ctools_export_test/ctools_export_test.info rename to sites/all/modules/contrib/ctools/tests/ctools_export_test/ctools_export_test.info diff --git a/sites/all/modules/custom/ctools/tests/ctools_export_test/ctools_export_test.install b/sites/all/modules/contrib/ctools/tests/ctools_export_test/ctools_export_test.install similarity index 100% rename from sites/all/modules/custom/ctools/tests/ctools_export_test/ctools_export_test.install rename to sites/all/modules/contrib/ctools/tests/ctools_export_test/ctools_export_test.install diff --git a/sites/all/modules/custom/ctools/tests/ctools_export_test/ctools_export_test.module b/sites/all/modules/contrib/ctools/tests/ctools_export_test/ctools_export_test.module similarity index 100% rename from sites/all/modules/custom/ctools/tests/ctools_export_test/ctools_export_test.module rename to sites/all/modules/contrib/ctools/tests/ctools_export_test/ctools_export_test.module diff --git a/sites/all/modules/custom/ctools/tests/ctools_plugin_test.info b/sites/all/modules/contrib/ctools/tests/ctools_plugin_test.info similarity index 100% rename from sites/all/modules/custom/ctools/tests/ctools_plugin_test.info rename to sites/all/modules/contrib/ctools/tests/ctools_plugin_test.info diff --git a/sites/all/modules/custom/ctools/tests/ctools_plugin_test.module b/sites/all/modules/contrib/ctools/tests/ctools_plugin_test.module similarity index 100% rename from sites/all/modules/custom/ctools/tests/ctools_plugin_test.module rename to sites/all/modules/contrib/ctools/tests/ctools_plugin_test.module diff --git a/sites/all/modules/custom/ctools/tests/math_expression.test b/sites/all/modules/contrib/ctools/tests/math_expression.test similarity index 100% rename from sites/all/modules/custom/ctools/tests/math_expression.test rename to sites/all/modules/contrib/ctools/tests/math_expression.test diff --git a/sites/all/modules/custom/ctools/tests/math_expression_stack.test b/sites/all/modules/contrib/ctools/tests/math_expression_stack.test similarity index 100% rename from sites/all/modules/custom/ctools/tests/math_expression_stack.test rename to sites/all/modules/contrib/ctools/tests/math_expression_stack.test diff --git a/sites/all/modules/custom/ctools/tests/object_cache.test b/sites/all/modules/contrib/ctools/tests/object_cache.test similarity index 100% rename from sites/all/modules/custom/ctools/tests/object_cache.test rename to sites/all/modules/contrib/ctools/tests/object_cache.test diff --git a/sites/all/modules/custom/ctools/tests/plugins/cached/ctoolsCachedPluginArray.class.php b/sites/all/modules/contrib/ctools/tests/plugins/cached/ctoolsCachedPluginArray.class.php similarity index 100% rename from sites/all/modules/custom/ctools/tests/plugins/cached/ctoolsCachedPluginArray.class.php rename to sites/all/modules/contrib/ctools/tests/plugins/cached/ctoolsCachedPluginArray.class.php diff --git a/sites/all/modules/custom/ctools/tests/plugins/cached/ctoolsCachedPluginArray2.class.php b/sites/all/modules/contrib/ctools/tests/plugins/cached/ctoolsCachedPluginArray2.class.php similarity index 100% rename from sites/all/modules/custom/ctools/tests/plugins/cached/ctoolsCachedPluginArray2.class.php rename to sites/all/modules/contrib/ctools/tests/plugins/cached/ctoolsCachedPluginArray2.class.php diff --git a/sites/all/modules/custom/ctools/tests/plugins/cached/plugin_array.inc b/sites/all/modules/contrib/ctools/tests/plugins/cached/plugin_array.inc similarity index 100% rename from sites/all/modules/custom/ctools/tests/plugins/cached/plugin_array.inc rename to sites/all/modules/contrib/ctools/tests/plugins/cached/plugin_array.inc diff --git a/sites/all/modules/custom/ctools/tests/plugins/cached/plugin_array2.inc b/sites/all/modules/contrib/ctools/tests/plugins/cached/plugin_array2.inc similarity index 100% rename from sites/all/modules/custom/ctools/tests/plugins/cached/plugin_array2.inc rename to sites/all/modules/contrib/ctools/tests/plugins/cached/plugin_array2.inc diff --git a/sites/all/modules/custom/ctools/tests/plugins/cached/plugin_array_dne.inc b/sites/all/modules/contrib/ctools/tests/plugins/cached/plugin_array_dne.inc similarity index 100% rename from sites/all/modules/custom/ctools/tests/plugins/cached/plugin_array_dne.inc rename to sites/all/modules/contrib/ctools/tests/plugins/cached/plugin_array_dne.inc diff --git a/sites/all/modules/custom/ctools/tests/plugins/not_cached/ctoolsNotCachedPluginArray.class.php b/sites/all/modules/contrib/ctools/tests/plugins/not_cached/ctoolsNotCachedPluginArray.class.php similarity index 100% rename from sites/all/modules/custom/ctools/tests/plugins/not_cached/ctoolsNotCachedPluginArray.class.php rename to sites/all/modules/contrib/ctools/tests/plugins/not_cached/ctoolsNotCachedPluginArray.class.php diff --git a/sites/all/modules/custom/ctools/tests/plugins/not_cached/ctoolsNotCachedPluginArray2.class.php b/sites/all/modules/contrib/ctools/tests/plugins/not_cached/ctoolsNotCachedPluginArray2.class.php similarity index 100% rename from sites/all/modules/custom/ctools/tests/plugins/not_cached/ctoolsNotCachedPluginArray2.class.php rename to sites/all/modules/contrib/ctools/tests/plugins/not_cached/ctoolsNotCachedPluginArray2.class.php diff --git a/sites/all/modules/custom/ctools/tests/plugins/not_cached/plugin_array.inc b/sites/all/modules/contrib/ctools/tests/plugins/not_cached/plugin_array.inc similarity index 100% rename from sites/all/modules/custom/ctools/tests/plugins/not_cached/plugin_array.inc rename to sites/all/modules/contrib/ctools/tests/plugins/not_cached/plugin_array.inc diff --git a/sites/all/modules/custom/ctools/tests/plugins/not_cached/plugin_array2.inc b/sites/all/modules/contrib/ctools/tests/plugins/not_cached/plugin_array2.inc similarity index 100% rename from sites/all/modules/custom/ctools/tests/plugins/not_cached/plugin_array2.inc rename to sites/all/modules/contrib/ctools/tests/plugins/not_cached/plugin_array2.inc diff --git a/sites/all/modules/custom/ctools/tests/plugins/not_cached/plugin_array_dne.inc b/sites/all/modules/contrib/ctools/tests/plugins/not_cached/plugin_array_dne.inc similarity index 100% rename from sites/all/modules/custom/ctools/tests/plugins/not_cached/plugin_array_dne.inc rename to sites/all/modules/contrib/ctools/tests/plugins/not_cached/plugin_array_dne.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/content_types/icon_views_block_legacy.png b/sites/all/modules/contrib/ctools/views_content/plugins/content_types/icon_views_block_legacy.png similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/content_types/icon_views_block_legacy.png rename to sites/all/modules/contrib/ctools/views_content/plugins/content_types/icon_views_block_legacy.png diff --git a/sites/all/modules/custom/ctools/views_content/plugins/content_types/icon_views_page.png b/sites/all/modules/contrib/ctools/views_content/plugins/content_types/icon_views_page.png similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/content_types/icon_views_page.png rename to sites/all/modules/contrib/ctools/views_content/plugins/content_types/icon_views_page.png diff --git a/sites/all/modules/custom/ctools/views_content/plugins/content_types/icon_views_page_legacy.png b/sites/all/modules/contrib/ctools/views_content/plugins/content_types/icon_views_page_legacy.png similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/content_types/icon_views_page_legacy.png rename to sites/all/modules/contrib/ctools/views_content/plugins/content_types/icon_views_page_legacy.png diff --git a/sites/all/modules/custom/ctools/views_content/plugins/content_types/views.inc b/sites/all/modules/contrib/ctools/views_content/plugins/content_types/views.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/content_types/views.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/content_types/views.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/content_types/views_attachments.inc b/sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_attachments.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/content_types/views_attachments.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_attachments.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/content_types/views_empty.inc b/sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_empty.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/content_types/views_empty.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_empty.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/content_types/views_exposed.inc b/sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_exposed.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/content_types/views_exposed.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_exposed.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/content_types/views_feed.inc b/sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_feed.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/content_types/views_feed.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_feed.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/content_types/views_footer.inc b/sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_footer.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/content_types/views_footer.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_footer.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/content_types/views_header.inc b/sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_header.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/content_types/views_header.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_header.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/content_types/views_pager.inc b/sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_pager.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/content_types/views_pager.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_pager.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/content_types/views_panes.inc b/sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_panes.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/content_types/views_panes.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_panes.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/content_types/views_row.inc b/sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_row.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/content_types/views_row.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_row.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/content_types/views_view.inc b/sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_view.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/content_types/views_view.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/content_types/views_view.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/contexts/view.inc b/sites/all/modules/contrib/ctools/views_content/plugins/contexts/view.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/contexts/view.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/contexts/view.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/relationships/node_from_view.inc b/sites/all/modules/contrib/ctools/views_content/plugins/relationships/node_from_view.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/relationships/node_from_view.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/relationships/node_from_view.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/relationships/term_from_view.inc b/sites/all/modules/contrib/ctools/views_content/plugins/relationships/term_from_view.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/relationships/term_from_view.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/relationships/term_from_view.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/relationships/user_from_view.inc b/sites/all/modules/contrib/ctools/views_content/plugins/relationships/user_from_view.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/relationships/user_from_view.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/relationships/user_from_view.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/relationships/view_from_argument.inc b/sites/all/modules/contrib/ctools/views_content/plugins/relationships/view_from_argument.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/relationships/view_from_argument.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/relationships/view_from_argument.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/views/views_content.views.inc b/sites/all/modules/contrib/ctools/views_content/plugins/views/views_content.views.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/views/views_content.views.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/views/views_content.views.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/views/views_content_plugin_display_ctools_context.inc b/sites/all/modules/contrib/ctools/views_content/plugins/views/views_content_plugin_display_ctools_context.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/views/views_content_plugin_display_ctools_context.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/views/views_content_plugin_display_ctools_context.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/views/views_content_plugin_display_panel_pane.inc b/sites/all/modules/contrib/ctools/views_content/plugins/views/views_content_plugin_display_panel_pane.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/views/views_content_plugin_display_panel_pane.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/views/views_content_plugin_display_panel_pane.inc diff --git a/sites/all/modules/custom/ctools/views_content/plugins/views/views_content_plugin_style_ctools_context.inc b/sites/all/modules/contrib/ctools/views_content/plugins/views/views_content_plugin_style_ctools_context.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/plugins/views/views_content_plugin_style_ctools_context.inc rename to sites/all/modules/contrib/ctools/views_content/plugins/views/views_content_plugin_style_ctools_context.inc diff --git a/sites/all/modules/custom/ctools/views_content/views_content.admin.inc b/sites/all/modules/contrib/ctools/views_content/views_content.admin.inc similarity index 100% rename from sites/all/modules/custom/ctools/views_content/views_content.admin.inc rename to sites/all/modules/contrib/ctools/views_content/views_content.admin.inc diff --git a/sites/all/modules/custom/ctools/views_content/views_content.info b/sites/all/modules/contrib/ctools/views_content/views_content.info similarity index 100% rename from sites/all/modules/custom/ctools/views_content/views_content.info rename to sites/all/modules/contrib/ctools/views_content/views_content.info diff --git a/sites/all/modules/custom/ctools/views_content/views_content.module b/sites/all/modules/contrib/ctools/views_content/views_content.module similarity index 100% rename from sites/all/modules/custom/ctools/views_content/views_content.module rename to sites/all/modules/contrib/ctools/views_content/views_content.module diff --git a/sites/all/modules/custom/date/CHANGELOG.txt b/sites/all/modules/contrib/date/CHANGELOG.txt similarity index 100% rename from sites/all/modules/custom/date/CHANGELOG.txt rename to sites/all/modules/contrib/date/CHANGELOG.txt diff --git a/sites/all/modules/custom/date/INSTALL.txt b/sites/all/modules/contrib/date/INSTALL.txt similarity index 100% rename from sites/all/modules/custom/date/INSTALL.txt rename to sites/all/modules/contrib/date/INSTALL.txt diff --git a/sites/all/modules/custom/domain/LICENSE.txt b/sites/all/modules/contrib/date/LICENSE.txt old mode 100755 new mode 100644 similarity index 100% rename from sites/all/modules/custom/domain/LICENSE.txt rename to sites/all/modules/contrib/date/LICENSE.txt diff --git a/sites/all/modules/custom/date/README.txt b/sites/all/modules/contrib/date/README.txt similarity index 100% rename from sites/all/modules/custom/date/README.txt rename to sites/all/modules/contrib/date/README.txt diff --git a/sites/all/modules/custom/date/date.api.php b/sites/all/modules/contrib/date/date.api.php similarity index 100% rename from sites/all/modules/custom/date/date.api.php rename to sites/all/modules/contrib/date/date.api.php diff --git a/sites/all/modules/custom/date/date.devel_generate.inc b/sites/all/modules/contrib/date/date.devel_generate.inc similarity index 100% rename from sites/all/modules/custom/date/date.devel_generate.inc rename to sites/all/modules/contrib/date/date.devel_generate.inc diff --git a/sites/all/modules/custom/date/date.diff.inc b/sites/all/modules/contrib/date/date.diff.inc similarity index 100% rename from sites/all/modules/custom/date/date.diff.inc rename to sites/all/modules/contrib/date/date.diff.inc diff --git a/sites/all/modules/custom/date/date.field.inc b/sites/all/modules/contrib/date/date.field.inc similarity index 100% rename from sites/all/modules/custom/date/date.field.inc rename to sites/all/modules/contrib/date/date.field.inc diff --git a/sites/all/modules/custom/date/date.info b/sites/all/modules/contrib/date/date.info similarity index 100% rename from sites/all/modules/custom/date/date.info rename to sites/all/modules/contrib/date/date.info diff --git a/sites/all/modules/custom/date/date.install b/sites/all/modules/contrib/date/date.install similarity index 100% rename from sites/all/modules/custom/date/date.install rename to sites/all/modules/contrib/date/date.install diff --git a/sites/all/modules/custom/date/date.js b/sites/all/modules/contrib/date/date.js similarity index 100% rename from sites/all/modules/custom/date/date.js rename to sites/all/modules/contrib/date/date.js diff --git a/sites/all/modules/custom/date/date.migrate.inc b/sites/all/modules/contrib/date/date.migrate.inc similarity index 100% rename from sites/all/modules/custom/date/date.migrate.inc rename to sites/all/modules/contrib/date/date.migrate.inc diff --git a/sites/all/modules/custom/date/date.module b/sites/all/modules/contrib/date/date.module similarity index 100% rename from sites/all/modules/custom/date/date.module rename to sites/all/modules/contrib/date/date.module diff --git a/sites/all/modules/custom/date/date.theme b/sites/all/modules/contrib/date/date.theme similarity index 100% rename from sites/all/modules/custom/date/date.theme rename to sites/all/modules/contrib/date/date.theme diff --git a/sites/all/modules/custom/date/date.tokens.inc b/sites/all/modules/contrib/date/date.tokens.inc similarity index 100% rename from sites/all/modules/custom/date/date.tokens.inc rename to sites/all/modules/contrib/date/date.tokens.inc diff --git a/sites/all/modules/custom/date/date_admin.inc b/sites/all/modules/contrib/date/date_admin.inc similarity index 100% rename from sites/all/modules/custom/date/date_admin.inc rename to sites/all/modules/contrib/date/date_admin.inc diff --git a/sites/all/modules/custom/date/date_admin.js b/sites/all/modules/contrib/date/date_admin.js similarity index 100% rename from sites/all/modules/custom/date/date_admin.js rename to sites/all/modules/contrib/date/date_admin.js diff --git a/sites/all/modules/custom/date/date_all_day/README.txt b/sites/all/modules/contrib/date/date_all_day/README.txt similarity index 100% rename from sites/all/modules/custom/date/date_all_day/README.txt rename to sites/all/modules/contrib/date/date_all_day/README.txt diff --git a/sites/all/modules/custom/date/date_all_day/date_all_day.info b/sites/all/modules/contrib/date/date_all_day/date_all_day.info similarity index 100% rename from sites/all/modules/custom/date/date_all_day/date_all_day.info rename to sites/all/modules/contrib/date/date_all_day/date_all_day.info diff --git a/sites/all/modules/custom/date/date_all_day/date_all_day.module b/sites/all/modules/contrib/date/date_all_day/date_all_day.module similarity index 100% rename from sites/all/modules/custom/date/date_all_day/date_all_day.module rename to sites/all/modules/contrib/date/date_all_day/date_all_day.module diff --git a/sites/all/modules/custom/date/date_api/date-rtl.css b/sites/all/modules/contrib/date/date_api/date-rtl.css similarity index 100% rename from sites/all/modules/custom/date/date_api/date-rtl.css rename to sites/all/modules/contrib/date/date_api/date-rtl.css diff --git a/sites/all/modules/custom/date/date_api/date.css b/sites/all/modules/contrib/date/date_api/date.css similarity index 100% rename from sites/all/modules/custom/date/date_api/date.css rename to sites/all/modules/contrib/date/date_api/date.css diff --git a/sites/all/modules/custom/date/date_api/date_api.admin.inc b/sites/all/modules/contrib/date/date_api/date_api.admin.inc similarity index 100% rename from sites/all/modules/custom/date/date_api/date_api.admin.inc rename to sites/all/modules/contrib/date/date_api/date_api.admin.inc diff --git a/sites/all/modules/custom/date/date_api/date_api.info b/sites/all/modules/contrib/date/date_api/date_api.info similarity index 100% rename from sites/all/modules/custom/date/date_api/date_api.info rename to sites/all/modules/contrib/date/date_api/date_api.info diff --git a/sites/all/modules/custom/date/date_api/date_api.install b/sites/all/modules/contrib/date/date_api/date_api.install similarity index 100% rename from sites/all/modules/custom/date/date_api/date_api.install rename to sites/all/modules/contrib/date/date_api/date_api.install diff --git a/sites/all/modules/custom/date/date_api/date_api.module b/sites/all/modules/contrib/date/date_api/date_api.module similarity index 100% rename from sites/all/modules/custom/date/date_api/date_api.module rename to sites/all/modules/contrib/date/date_api/date_api.module diff --git a/sites/all/modules/custom/date/date_api/date_api_elements.inc b/sites/all/modules/contrib/date/date_api/date_api_elements.inc similarity index 100% rename from sites/all/modules/custom/date/date_api/date_api_elements.inc rename to sites/all/modules/contrib/date/date_api/date_api_elements.inc diff --git a/sites/all/modules/custom/date/date_api/date_api_ical.inc b/sites/all/modules/contrib/date/date_api/date_api_ical.inc similarity index 100% rename from sites/all/modules/custom/date/date_api/date_api_ical.inc rename to sites/all/modules/contrib/date/date_api/date_api_ical.inc diff --git a/sites/all/modules/custom/date/date_api/date_api_sql.inc b/sites/all/modules/contrib/date/date_api/date_api_sql.inc similarity index 100% rename from sites/all/modules/custom/date/date_api/date_api_sql.inc rename to sites/all/modules/contrib/date/date_api/date_api_sql.inc diff --git a/sites/all/modules/custom/date/date_api/date_year_range.js b/sites/all/modules/contrib/date/date_api/date_year_range.js similarity index 100% rename from sites/all/modules/custom/date/date_api/date_year_range.js rename to sites/all/modules/contrib/date/date_api/date_year_range.js diff --git a/sites/all/modules/custom/date/date_api/images/calendar.png b/sites/all/modules/contrib/date/date_api/images/calendar.png similarity index 100% rename from sites/all/modules/custom/date/date_api/images/calendar.png rename to sites/all/modules/contrib/date/date_api/images/calendar.png diff --git a/sites/all/modules/custom/date/date_api/images/ical16x16.gif b/sites/all/modules/contrib/date/date_api/images/ical16x16.gif similarity index 100% rename from sites/all/modules/custom/date/date_api/images/ical16x16.gif rename to sites/all/modules/contrib/date/date_api/images/ical16x16.gif diff --git a/sites/all/modules/custom/date/date_api/theme/theme.inc b/sites/all/modules/contrib/date/date_api/theme/theme.inc similarity index 100% rename from sites/all/modules/custom/date/date_api/theme/theme.inc rename to sites/all/modules/contrib/date/date_api/theme/theme.inc diff --git a/sites/all/modules/custom/date/date_context/date_context.info b/sites/all/modules/contrib/date/date_context/date_context.info similarity index 100% rename from sites/all/modules/custom/date/date_context/date_context.info rename to sites/all/modules/contrib/date/date_context/date_context.info diff --git a/sites/all/modules/custom/date/date_context/date_context.module b/sites/all/modules/contrib/date/date_context/date_context.module similarity index 100% rename from sites/all/modules/custom/date/date_context/date_context.module rename to sites/all/modules/contrib/date/date_context/date_context.module diff --git a/sites/all/modules/custom/date/date_context/plugins/date_context_date_condition.inc b/sites/all/modules/contrib/date/date_context/plugins/date_context_date_condition.inc similarity index 100% rename from sites/all/modules/custom/date/date_context/plugins/date_context_date_condition.inc rename to sites/all/modules/contrib/date/date_context/plugins/date_context_date_condition.inc diff --git a/sites/all/modules/custom/date/date_elements.inc b/sites/all/modules/contrib/date/date_elements.inc similarity index 100% rename from sites/all/modules/custom/date/date_elements.inc rename to sites/all/modules/contrib/date/date_elements.inc diff --git a/sites/all/modules/custom/date/date_migrate/date_migrate.info b/sites/all/modules/contrib/date/date_migrate/date_migrate.info similarity index 100% rename from sites/all/modules/custom/date/date_migrate/date_migrate.info rename to sites/all/modules/contrib/date/date_migrate/date_migrate.info diff --git a/sites/all/modules/custom/date/date_migrate/date_migrate.module b/sites/all/modules/contrib/date/date_migrate/date_migrate.module similarity index 100% rename from sites/all/modules/custom/date/date_migrate/date_migrate.module rename to sites/all/modules/contrib/date/date_migrate/date_migrate.module diff --git a/sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.features.field.inc b/sites/all/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.features.field.inc similarity index 100% rename from sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.features.field.inc rename to sites/all/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.features.field.inc diff --git a/sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.features.inc b/sites/all/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.features.inc similarity index 100% rename from sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.features.inc rename to sites/all/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.features.inc diff --git a/sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.info b/sites/all/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.info similarity index 100% rename from sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.info rename to sites/all/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.info diff --git a/sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.install b/sites/all/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.install similarity index 100% rename from sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.install rename to sites/all/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.install diff --git a/sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.migrate.inc b/sites/all/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.migrate.inc similarity index 100% rename from sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.migrate.inc rename to sites/all/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.migrate.inc diff --git a/sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.module b/sites/all/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.module similarity index 100% rename from sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.module rename to sites/all/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.module diff --git a/sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.xml b/sites/all/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.xml similarity index 100% rename from sites/all/modules/custom/date/date_migrate/date_migrate_example/date_migrate_example.xml rename to sites/all/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.xml diff --git a/sites/all/modules/custom/date/date_popup/README.txt b/sites/all/modules/contrib/date/date_popup/README.txt similarity index 100% rename from sites/all/modules/custom/date/date_popup/README.txt rename to sites/all/modules/contrib/date/date_popup/README.txt diff --git a/sites/all/modules/custom/date/date_popup/date_popup.info b/sites/all/modules/contrib/date/date_popup/date_popup.info similarity index 100% rename from sites/all/modules/custom/date/date_popup/date_popup.info rename to sites/all/modules/contrib/date/date_popup/date_popup.info diff --git a/sites/all/modules/custom/date/date_popup/date_popup.install b/sites/all/modules/contrib/date/date_popup/date_popup.install similarity index 100% rename from sites/all/modules/custom/date/date_popup/date_popup.install rename to sites/all/modules/contrib/date/date_popup/date_popup.install diff --git a/sites/all/modules/custom/date/date_popup/date_popup.js b/sites/all/modules/contrib/date/date_popup/date_popup.js similarity index 100% rename from sites/all/modules/custom/date/date_popup/date_popup.js rename to sites/all/modules/contrib/date/date_popup/date_popup.js diff --git a/sites/all/modules/custom/date/date_popup/date_popup.module b/sites/all/modules/contrib/date/date_popup/date_popup.module similarity index 100% rename from sites/all/modules/custom/date/date_popup/date_popup.module rename to sites/all/modules/contrib/date/date_popup/date_popup.module diff --git a/sites/all/modules/custom/date/date_popup/jquery.timeentry.pack.js b/sites/all/modules/contrib/date/date_popup/jquery.timeentry.pack.js similarity index 100% rename from sites/all/modules/custom/date/date_popup/jquery.timeentry.pack.js rename to sites/all/modules/contrib/date/date_popup/jquery.timeentry.pack.js diff --git a/sites/all/modules/custom/date/date_popup/themes/datepicker.1.7.css b/sites/all/modules/contrib/date/date_popup/themes/datepicker.1.7.css similarity index 100% rename from sites/all/modules/custom/date/date_popup/themes/datepicker.1.7.css rename to sites/all/modules/contrib/date/date_popup/themes/datepicker.1.7.css diff --git a/sites/all/modules/custom/date/date_popup/themes/jquery.timeentry.css b/sites/all/modules/contrib/date/date_popup/themes/jquery.timeentry.css similarity index 100% rename from sites/all/modules/custom/date/date_popup/themes/jquery.timeentry.css rename to sites/all/modules/contrib/date/date_popup/themes/jquery.timeentry.css diff --git a/sites/all/modules/custom/date/date_repeat.inc b/sites/all/modules/contrib/date/date_repeat.inc similarity index 100% rename from sites/all/modules/custom/date/date_repeat.inc rename to sites/all/modules/contrib/date/date_repeat.inc diff --git a/sites/all/modules/custom/date/date_repeat/date_repeat.info b/sites/all/modules/contrib/date/date_repeat/date_repeat.info similarity index 100% rename from sites/all/modules/custom/date/date_repeat/date_repeat.info rename to sites/all/modules/contrib/date/date_repeat/date_repeat.info diff --git a/sites/all/modules/custom/date/date_repeat/date_repeat.install b/sites/all/modules/contrib/date/date_repeat/date_repeat.install similarity index 100% rename from sites/all/modules/custom/date/date_repeat/date_repeat.install rename to sites/all/modules/contrib/date/date_repeat/date_repeat.install diff --git a/sites/all/modules/custom/date/date_repeat/date_repeat.module b/sites/all/modules/contrib/date/date_repeat/date_repeat.module similarity index 100% rename from sites/all/modules/custom/date/date_repeat/date_repeat.module rename to sites/all/modules/contrib/date/date_repeat/date_repeat.module diff --git a/sites/all/modules/custom/date/date_repeat/date_repeat_calc.inc b/sites/all/modules/contrib/date/date_repeat/date_repeat_calc.inc similarity index 100% rename from sites/all/modules/custom/date/date_repeat/date_repeat_calc.inc rename to sites/all/modules/contrib/date/date_repeat/date_repeat_calc.inc diff --git a/sites/all/modules/custom/date/date_repeat/date_repeat_form.inc b/sites/all/modules/contrib/date/date_repeat/date_repeat_form.inc similarity index 100% rename from sites/all/modules/custom/date/date_repeat/date_repeat_form.inc rename to sites/all/modules/contrib/date/date_repeat/date_repeat_form.inc diff --git a/sites/all/modules/custom/date/date_repeat/tests/date_repeat.test b/sites/all/modules/contrib/date/date_repeat/tests/date_repeat.test similarity index 100% rename from sites/all/modules/custom/date/date_repeat/tests/date_repeat.test rename to sites/all/modules/contrib/date/date_repeat/tests/date_repeat.test diff --git a/sites/all/modules/custom/date/date_repeat/tests/date_repeat_form.test b/sites/all/modules/contrib/date/date_repeat/tests/date_repeat_form.test similarity index 100% rename from sites/all/modules/custom/date/date_repeat/tests/date_repeat_form.test rename to sites/all/modules/contrib/date/date_repeat/tests/date_repeat_form.test diff --git a/sites/all/modules/custom/date/date_repeat_field/README.txt b/sites/all/modules/contrib/date/date_repeat_field/README.txt similarity index 100% rename from sites/all/modules/custom/date/date_repeat_field/README.txt rename to sites/all/modules/contrib/date/date_repeat_field/README.txt diff --git a/sites/all/modules/custom/date/date_repeat_field/date_repeat_field.css b/sites/all/modules/contrib/date/date_repeat_field/date_repeat_field.css similarity index 100% rename from sites/all/modules/custom/date/date_repeat_field/date_repeat_field.css rename to sites/all/modules/contrib/date/date_repeat_field/date_repeat_field.css diff --git a/sites/all/modules/custom/date/date_repeat_field/date_repeat_field.devel_generate.inc b/sites/all/modules/contrib/date/date_repeat_field/date_repeat_field.devel_generate.inc similarity index 100% rename from sites/all/modules/custom/date/date_repeat_field/date_repeat_field.devel_generate.inc rename to sites/all/modules/contrib/date/date_repeat_field/date_repeat_field.devel_generate.inc diff --git a/sites/all/modules/custom/date/date_repeat_field/date_repeat_field.info b/sites/all/modules/contrib/date/date_repeat_field/date_repeat_field.info similarity index 100% rename from sites/all/modules/custom/date/date_repeat_field/date_repeat_field.info rename to sites/all/modules/contrib/date/date_repeat_field/date_repeat_field.info diff --git a/sites/all/modules/custom/date/date_repeat_field/date_repeat_field.module b/sites/all/modules/contrib/date/date_repeat_field/date_repeat_field.module similarity index 100% rename from sites/all/modules/custom/date/date_repeat_field/date_repeat_field.module rename to sites/all/modules/contrib/date/date_repeat_field/date_repeat_field.module diff --git a/sites/all/modules/custom/date/date_tools/date_tools.change_type.inc b/sites/all/modules/contrib/date/date_tools/date_tools.change_type.inc similarity index 100% rename from sites/all/modules/custom/date/date_tools/date_tools.change_type.inc rename to sites/all/modules/contrib/date/date_tools/date_tools.change_type.inc diff --git a/sites/all/modules/custom/date/date_tools/date_tools.info b/sites/all/modules/contrib/date/date_tools/date_tools.info similarity index 100% rename from sites/all/modules/custom/date/date_tools/date_tools.info rename to sites/all/modules/contrib/date/date_tools/date_tools.info diff --git a/sites/all/modules/custom/date/date_tools/date_tools.module b/sites/all/modules/contrib/date/date_tools/date_tools.module similarity index 100% rename from sites/all/modules/custom/date/date_tools/date_tools.module rename to sites/all/modules/contrib/date/date_tools/date_tools.module diff --git a/sites/all/modules/custom/date/date_tools/date_tools.wizard.inc b/sites/all/modules/contrib/date/date_tools/date_tools.wizard.inc similarity index 100% rename from sites/all/modules/custom/date/date_tools/date_tools.wizard.inc rename to sites/all/modules/contrib/date/date_tools/date_tools.wizard.inc diff --git a/sites/all/modules/custom/date/date_tools/tests/date_tools.test b/sites/all/modules/contrib/date/date_tools/tests/date_tools.test similarity index 100% rename from sites/all/modules/custom/date/date_tools/tests/date_tools.test rename to sites/all/modules/contrib/date/date_tools/tests/date_tools.test diff --git a/sites/all/modules/custom/date/date_views/css/date_views.css b/sites/all/modules/contrib/date/date_views/css/date_views.css similarity index 100% rename from sites/all/modules/custom/date/date_views/css/date_views.css rename to sites/all/modules/contrib/date/date_views/css/date_views.css diff --git a/sites/all/modules/custom/date/date_views/date_views.info b/sites/all/modules/contrib/date/date_views/date_views.info similarity index 100% rename from sites/all/modules/custom/date/date_views/date_views.info rename to sites/all/modules/contrib/date/date_views/date_views.info diff --git a/sites/all/modules/custom/date/date_views/date_views.install b/sites/all/modules/contrib/date/date_views/date_views.install similarity index 100% rename from sites/all/modules/custom/date/date_views/date_views.install rename to sites/all/modules/contrib/date/date_views/date_views.install diff --git a/sites/all/modules/custom/date/date_views/date_views.module b/sites/all/modules/contrib/date/date_views/date_views.module similarity index 100% rename from sites/all/modules/custom/date/date_views/date_views.module rename to sites/all/modules/contrib/date/date_views/date_views.module diff --git a/sites/all/modules/custom/date/date_views/includes/date_plugin_display_attachment.inc b/sites/all/modules/contrib/date/date_views/includes/date_plugin_display_attachment.inc similarity index 100% rename from sites/all/modules/custom/date/date_views/includes/date_plugin_display_attachment.inc rename to sites/all/modules/contrib/date/date_views/includes/date_plugin_display_attachment.inc diff --git a/sites/all/modules/custom/date/date_views/includes/date_views.views.inc b/sites/all/modules/contrib/date/date_views/includes/date_views.views.inc similarity index 100% rename from sites/all/modules/custom/date/date_views/includes/date_views.views.inc rename to sites/all/modules/contrib/date/date_views/includes/date_views.views.inc diff --git a/sites/all/modules/custom/date/date_views/includes/date_views_argument_handler.inc b/sites/all/modules/contrib/date/date_views/includes/date_views_argument_handler.inc similarity index 100% rename from sites/all/modules/custom/date/date_views/includes/date_views_argument_handler.inc rename to sites/all/modules/contrib/date/date_views/includes/date_views_argument_handler.inc diff --git a/sites/all/modules/custom/date/date_views/includes/date_views_argument_handler_simple.inc b/sites/all/modules/contrib/date/date_views/includes/date_views_argument_handler_simple.inc similarity index 100% rename from sites/all/modules/custom/date/date_views/includes/date_views_argument_handler_simple.inc rename to sites/all/modules/contrib/date/date_views/includes/date_views_argument_handler_simple.inc diff --git a/sites/all/modules/custom/date/date_views/includes/date_views_fields.inc b/sites/all/modules/contrib/date/date_views/includes/date_views_fields.inc similarity index 100% rename from sites/all/modules/custom/date/date_views/includes/date_views_fields.inc rename to sites/all/modules/contrib/date/date_views/includes/date_views_fields.inc diff --git a/sites/all/modules/custom/date/date_views/includes/date_views_filter_handler.inc b/sites/all/modules/contrib/date/date_views/includes/date_views_filter_handler.inc similarity index 100% rename from sites/all/modules/custom/date/date_views/includes/date_views_filter_handler.inc rename to sites/all/modules/contrib/date/date_views/includes/date_views_filter_handler.inc diff --git a/sites/all/modules/custom/date/date_views/includes/date_views_filter_handler_simple.inc b/sites/all/modules/contrib/date/date_views/includes/date_views_filter_handler_simple.inc similarity index 100% rename from sites/all/modules/custom/date/date_views/includes/date_views_filter_handler_simple.inc rename to sites/all/modules/contrib/date/date_views/includes/date_views_filter_handler_simple.inc diff --git a/sites/all/modules/custom/date/date_views/includes/date_views_plugin_pager.inc b/sites/all/modules/contrib/date/date_views/includes/date_views_plugin_pager.inc similarity index 100% rename from sites/all/modules/custom/date/date_views/includes/date_views_plugin_pager.inc rename to sites/all/modules/contrib/date/date_views/includes/date_views_plugin_pager.inc diff --git a/sites/all/modules/custom/date/date_views/theme/date-views-filter-form.tpl.php b/sites/all/modules/contrib/date/date_views/theme/date-views-filter-form.tpl.php similarity index 100% rename from sites/all/modules/custom/date/date_views/theme/date-views-filter-form.tpl.php rename to sites/all/modules/contrib/date/date_views/theme/date-views-filter-form.tpl.php diff --git a/sites/all/modules/custom/date/date_views/theme/date-views-pager.tpl.php b/sites/all/modules/contrib/date/date_views/theme/date-views-pager.tpl.php similarity index 100% rename from sites/all/modules/custom/date/date_views/theme/date-views-pager.tpl.php rename to sites/all/modules/contrib/date/date_views/theme/date-views-pager.tpl.php diff --git a/sites/all/modules/custom/date/date_views/theme/theme.inc b/sites/all/modules/contrib/date/date_views/theme/theme.inc similarity index 100% rename from sites/all/modules/custom/date/date_views/theme/theme.inc rename to sites/all/modules/contrib/date/date_views/theme/theme.inc diff --git a/sites/all/modules/custom/date/tests/README.txt b/sites/all/modules/contrib/date/tests/README.txt similarity index 100% rename from sites/all/modules/custom/date/tests/README.txt rename to sites/all/modules/contrib/date/tests/README.txt diff --git a/sites/all/modules/custom/date/tests/USHolidays.ics b/sites/all/modules/contrib/date/tests/USHolidays.ics similarity index 100% rename from sites/all/modules/custom/date/tests/USHolidays.ics rename to sites/all/modules/contrib/date/tests/USHolidays.ics diff --git a/sites/all/modules/custom/date/tests/Yahoo.csv b/sites/all/modules/contrib/date/tests/Yahoo.csv similarity index 100% rename from sites/all/modules/custom/date/tests/Yahoo.csv rename to sites/all/modules/contrib/date/tests/Yahoo.csv diff --git a/sites/all/modules/custom/date/tests/date.test b/sites/all/modules/contrib/date/tests/date.test similarity index 100% rename from sites/all/modules/custom/date/tests/date.test rename to sites/all/modules/contrib/date/tests/date.test diff --git a/sites/all/modules/custom/date/tests/date_api.test b/sites/all/modules/contrib/date/tests/date_api.test similarity index 100% rename from sites/all/modules/custom/date/tests/date_api.test rename to sites/all/modules/contrib/date/tests/date_api.test diff --git a/sites/all/modules/custom/date/tests/date_field.test b/sites/all/modules/contrib/date/tests/date_field.test similarity index 100% rename from sites/all/modules/custom/date/tests/date_field.test rename to sites/all/modules/contrib/date/tests/date_field.test diff --git a/sites/all/modules/custom/date/tests/date_migrate.test b/sites/all/modules/contrib/date/tests/date_migrate.test similarity index 100% rename from sites/all/modules/custom/date/tests/date_migrate.test rename to sites/all/modules/contrib/date/tests/date_migrate.test diff --git a/sites/all/modules/custom/date/tests/date_timezone.test b/sites/all/modules/contrib/date/tests/date_timezone.test similarity index 100% rename from sites/all/modules/custom/date/tests/date_timezone.test rename to sites/all/modules/contrib/date/tests/date_timezone.test diff --git a/sites/all/modules/custom/date/tests/date_validation.test b/sites/all/modules/contrib/date/tests/date_validation.test similarity index 100% rename from sites/all/modules/custom/date/tests/date_validation.test rename to sites/all/modules/contrib/date/tests/date_validation.test diff --git a/sites/all/modules/custom/date/tests/rrule.ics b/sites/all/modules/contrib/date/tests/rrule.ics similarity index 100% rename from sites/all/modules/custom/date/tests/rrule.ics rename to sites/all/modules/contrib/date/tests/rrule.ics diff --git a/sites/all/modules/custom/draggableviews/LICENSE.txt b/sites/all/modules/contrib/devel/LICENSE.txt old mode 100644 new mode 100755 similarity index 100% rename from sites/all/modules/custom/draggableviews/LICENSE.txt rename to sites/all/modules/contrib/devel/LICENSE.txt diff --git a/sites/all/modules/custom/devel/README.txt b/sites/all/modules/contrib/devel/README.txt similarity index 100% rename from sites/all/modules/custom/devel/README.txt rename to sites/all/modules/contrib/devel/README.txt diff --git a/sites/all/modules/custom/devel/README_devel_node_access.txt b/sites/all/modules/contrib/devel/README_devel_node_access.txt similarity index 100% rename from sites/all/modules/custom/devel/README_devel_node_access.txt rename to sites/all/modules/contrib/devel/README_devel_node_access.txt diff --git a/sites/all/modules/custom/devel/devel-rtl.css b/sites/all/modules/contrib/devel/devel-rtl.css similarity index 100% rename from sites/all/modules/custom/devel/devel-rtl.css rename to sites/all/modules/contrib/devel/devel-rtl.css diff --git a/sites/all/modules/custom/devel/devel.admin.inc b/sites/all/modules/contrib/devel/devel.admin.inc similarity index 100% rename from sites/all/modules/custom/devel/devel.admin.inc rename to sites/all/modules/contrib/devel/devel.admin.inc diff --git a/sites/all/modules/custom/devel/devel.css b/sites/all/modules/contrib/devel/devel.css similarity index 100% rename from sites/all/modules/custom/devel/devel.css rename to sites/all/modules/contrib/devel/devel.css diff --git a/sites/all/modules/custom/devel/devel.drush.inc b/sites/all/modules/contrib/devel/devel.drush.inc similarity index 100% rename from sites/all/modules/custom/devel/devel.drush.inc rename to sites/all/modules/contrib/devel/devel.drush.inc diff --git a/sites/all/modules/custom/devel/devel.info b/sites/all/modules/contrib/devel/devel.info similarity index 100% rename from sites/all/modules/custom/devel/devel.info rename to sites/all/modules/contrib/devel/devel.info diff --git a/sites/all/modules/custom/devel/devel.install b/sites/all/modules/contrib/devel/devel.install similarity index 100% rename from sites/all/modules/custom/devel/devel.install rename to sites/all/modules/contrib/devel/devel.install diff --git a/sites/all/modules/custom/devel/devel.js b/sites/all/modules/contrib/devel/devel.js similarity index 100% rename from sites/all/modules/custom/devel/devel.js rename to sites/all/modules/contrib/devel/devel.js diff --git a/sites/all/modules/custom/devel/devel.mail.inc b/sites/all/modules/contrib/devel/devel.mail.inc similarity index 100% rename from sites/all/modules/custom/devel/devel.mail.inc rename to sites/all/modules/contrib/devel/devel.mail.inc diff --git a/sites/all/modules/custom/devel/devel.module b/sites/all/modules/contrib/devel/devel.module similarity index 100% rename from sites/all/modules/custom/devel/devel.module rename to sites/all/modules/contrib/devel/devel.module diff --git a/sites/all/modules/custom/devel/devel.pages.inc b/sites/all/modules/contrib/devel/devel.pages.inc similarity index 100% rename from sites/all/modules/custom/devel/devel.pages.inc rename to sites/all/modules/contrib/devel/devel.pages.inc diff --git a/sites/all/modules/custom/devel/devel.rules.inc b/sites/all/modules/contrib/devel/devel.rules.inc similarity index 100% rename from sites/all/modules/custom/devel/devel.rules.inc rename to sites/all/modules/contrib/devel/devel.rules.inc diff --git a/sites/all/modules/custom/devel/devel.test b/sites/all/modules/contrib/devel/devel.test similarity index 100% rename from sites/all/modules/custom/devel/devel.test rename to sites/all/modules/contrib/devel/devel.test diff --git a/sites/all/modules/custom/devel/develDrushTest.php b/sites/all/modules/contrib/devel/develDrushTest.php similarity index 100% rename from sites/all/modules/custom/devel/develDrushTest.php rename to sites/all/modules/contrib/devel/develDrushTest.php diff --git a/sites/all/modules/custom/devel/devel_generate/devel_generate.drush.inc b/sites/all/modules/contrib/devel/devel_generate/devel_generate.drush.inc similarity index 100% rename from sites/all/modules/custom/devel/devel_generate/devel_generate.drush.inc rename to sites/all/modules/contrib/devel/devel_generate/devel_generate.drush.inc diff --git a/sites/all/modules/custom/devel/devel_generate/devel_generate.fields.inc b/sites/all/modules/contrib/devel/devel_generate/devel_generate.fields.inc similarity index 100% rename from sites/all/modules/custom/devel/devel_generate/devel_generate.fields.inc rename to sites/all/modules/contrib/devel/devel_generate/devel_generate.fields.inc diff --git a/sites/all/modules/custom/devel/devel_generate/devel_generate.inc b/sites/all/modules/contrib/devel/devel_generate/devel_generate.inc similarity index 100% rename from sites/all/modules/custom/devel/devel_generate/devel_generate.inc rename to sites/all/modules/contrib/devel/devel_generate/devel_generate.inc diff --git a/sites/all/modules/custom/devel/devel_generate/devel_generate.info b/sites/all/modules/contrib/devel/devel_generate/devel_generate.info similarity index 100% rename from sites/all/modules/custom/devel/devel_generate/devel_generate.info rename to sites/all/modules/contrib/devel/devel_generate/devel_generate.info diff --git a/sites/all/modules/custom/devel/devel_generate/devel_generate.module b/sites/all/modules/contrib/devel/devel_generate/devel_generate.module similarity index 100% rename from sites/all/modules/custom/devel/devel_generate/devel_generate.module rename to sites/all/modules/contrib/devel/devel_generate/devel_generate.module diff --git a/sites/all/modules/custom/devel/devel_generate/devel_generate.test b/sites/all/modules/contrib/devel/devel_generate/devel_generate.test similarity index 100% rename from sites/all/modules/custom/devel/devel_generate/devel_generate.test rename to sites/all/modules/contrib/devel/devel_generate/devel_generate.test diff --git a/sites/all/modules/custom/devel/devel_generate/devel_generate_batch.inc b/sites/all/modules/contrib/devel/devel_generate/devel_generate_batch.inc similarity index 100% rename from sites/all/modules/custom/devel/devel_generate/devel_generate_batch.inc rename to sites/all/modules/contrib/devel/devel_generate/devel_generate_batch.inc diff --git a/sites/all/modules/custom/devel/devel_generate/file.devel_generate.inc b/sites/all/modules/contrib/devel/devel_generate/file.devel_generate.inc similarity index 100% rename from sites/all/modules/custom/devel/devel_generate/file.devel_generate.inc rename to sites/all/modules/contrib/devel/devel_generate/file.devel_generate.inc diff --git a/sites/all/modules/custom/devel/devel_generate/image.devel_generate.inc b/sites/all/modules/contrib/devel/devel_generate/image.devel_generate.inc similarity index 100% rename from sites/all/modules/custom/devel/devel_generate/image.devel_generate.inc rename to sites/all/modules/contrib/devel/devel_generate/image.devel_generate.inc diff --git a/sites/all/modules/custom/devel/devel_generate/list.devel_generate.inc b/sites/all/modules/contrib/devel/devel_generate/list.devel_generate.inc similarity index 100% rename from sites/all/modules/custom/devel/devel_generate/list.devel_generate.inc rename to sites/all/modules/contrib/devel/devel_generate/list.devel_generate.inc diff --git a/sites/all/modules/custom/devel/devel_generate/number.devel_generate.inc b/sites/all/modules/contrib/devel/devel_generate/number.devel_generate.inc similarity index 100% rename from sites/all/modules/custom/devel/devel_generate/number.devel_generate.inc rename to sites/all/modules/contrib/devel/devel_generate/number.devel_generate.inc diff --git a/sites/all/modules/custom/devel/devel_generate/taxonomy.devel_generate.inc b/sites/all/modules/contrib/devel/devel_generate/taxonomy.devel_generate.inc similarity index 100% rename from sites/all/modules/custom/devel/devel_generate/taxonomy.devel_generate.inc rename to sites/all/modules/contrib/devel/devel_generate/taxonomy.devel_generate.inc diff --git a/sites/all/modules/custom/devel/devel_generate/text.devel_generate.inc b/sites/all/modules/contrib/devel/devel_generate/text.devel_generate.inc similarity index 100% rename from sites/all/modules/custom/devel/devel_generate/text.devel_generate.inc rename to sites/all/modules/contrib/devel/devel_generate/text.devel_generate.inc diff --git a/sites/all/modules/custom/devel/devel_krumo_path.js b/sites/all/modules/contrib/devel/devel_krumo_path.js similarity index 100% rename from sites/all/modules/custom/devel/devel_krumo_path.js rename to sites/all/modules/contrib/devel/devel_krumo_path.js diff --git a/sites/all/modules/custom/devel/devel_node_access.api.php b/sites/all/modules/contrib/devel/devel_node_access.api.php similarity index 100% rename from sites/all/modules/custom/devel/devel_node_access.api.php rename to sites/all/modules/contrib/devel/devel_node_access.api.php diff --git a/sites/all/modules/custom/devel/devel_node_access.info b/sites/all/modules/contrib/devel/devel_node_access.info similarity index 100% rename from sites/all/modules/custom/devel/devel_node_access.info rename to sites/all/modules/contrib/devel/devel_node_access.info diff --git a/sites/all/modules/custom/devel/devel_node_access.install b/sites/all/modules/contrib/devel/devel_node_access.install similarity index 100% rename from sites/all/modules/custom/devel/devel_node_access.install rename to sites/all/modules/contrib/devel/devel_node_access.install diff --git a/sites/all/modules/custom/devel/devel_node_access.js b/sites/all/modules/contrib/devel/devel_node_access.js similarity index 100% rename from sites/all/modules/custom/devel/devel_node_access.js rename to sites/all/modules/contrib/devel/devel_node_access.js diff --git a/sites/all/modules/custom/devel/devel_node_access.module b/sites/all/modules/contrib/devel/devel_node_access.module similarity index 100% rename from sites/all/modules/custom/devel/devel_node_access.module rename to sites/all/modules/contrib/devel/devel_node_access.module diff --git a/sites/all/modules/custom/devel/jquery-1.4.4-uncompressed.js b/sites/all/modules/contrib/devel/jquery-1.4.4-uncompressed.js similarity index 100% rename from sites/all/modules/custom/devel/jquery-1.4.4-uncompressed.js rename to sites/all/modules/contrib/devel/jquery-1.4.4-uncompressed.js diff --git a/sites/all/modules/custom/devel/krumo/INSTALL b/sites/all/modules/contrib/devel/krumo/INSTALL similarity index 100% rename from sites/all/modules/custom/devel/krumo/INSTALL rename to sites/all/modules/contrib/devel/krumo/INSTALL diff --git a/sites/all/modules/custom/devel/krumo/LICENSE b/sites/all/modules/contrib/devel/krumo/LICENSE similarity index 100% rename from sites/all/modules/custom/devel/krumo/LICENSE rename to sites/all/modules/contrib/devel/krumo/LICENSE diff --git a/sites/all/modules/custom/devel/krumo/README b/sites/all/modules/contrib/devel/krumo/README similarity index 100% rename from sites/all/modules/custom/devel/krumo/README rename to sites/all/modules/contrib/devel/krumo/README diff --git a/sites/all/modules/custom/devel/krumo/TODO b/sites/all/modules/contrib/devel/krumo/TODO similarity index 100% rename from sites/all/modules/custom/devel/krumo/TODO rename to sites/all/modules/contrib/devel/krumo/TODO diff --git a/sites/all/modules/custom/devel/krumo/VERSION b/sites/all/modules/contrib/devel/krumo/VERSION similarity index 100% rename from sites/all/modules/custom/devel/krumo/VERSION rename to sites/all/modules/contrib/devel/krumo/VERSION diff --git a/sites/all/modules/custom/devel/krumo/class.krumo.php b/sites/all/modules/contrib/devel/krumo/class.krumo.php similarity index 100% rename from sites/all/modules/custom/devel/krumo/class.krumo.php rename to sites/all/modules/contrib/devel/krumo/class.krumo.php diff --git a/sites/all/modules/custom/devel/krumo/docs/Krumo/_class.krumo.php.html b/sites/all/modules/contrib/devel/krumo/docs/Krumo/_class.krumo.php.html similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/Krumo/_class.krumo.php.html rename to sites/all/modules/contrib/devel/krumo/docs/Krumo/_class.krumo.php.html diff --git a/sites/all/modules/custom/devel/krumo/docs/Krumo/krumo.html b/sites/all/modules/contrib/devel/krumo/docs/Krumo/krumo.html similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/Krumo/krumo.html rename to sites/all/modules/contrib/devel/krumo/docs/Krumo/krumo.html diff --git a/sites/all/modules/custom/devel/krumo/docs/blank.html b/sites/all/modules/contrib/devel/krumo/docs/blank.html similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/blank.html rename to sites/all/modules/contrib/devel/krumo/docs/blank.html diff --git a/sites/all/modules/custom/devel/krumo/docs/classtrees_Krumo.html b/sites/all/modules/contrib/devel/krumo/docs/classtrees_Krumo.html similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/classtrees_Krumo.html rename to sites/all/modules/contrib/devel/krumo/docs/classtrees_Krumo.html diff --git a/sites/all/modules/custom/devel/krumo/docs/elementindex.html b/sites/all/modules/contrib/devel/krumo/docs/elementindex.html similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/elementindex.html rename to sites/all/modules/contrib/devel/krumo/docs/elementindex.html diff --git a/sites/all/modules/custom/devel/krumo/docs/elementindex_Krumo.html b/sites/all/modules/contrib/devel/krumo/docs/elementindex_Krumo.html similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/elementindex_Krumo.html rename to sites/all/modules/contrib/devel/krumo/docs/elementindex_Krumo.html diff --git a/sites/all/modules/custom/devel/krumo/docs/errors.html b/sites/all/modules/contrib/devel/krumo/docs/errors.html similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/errors.html rename to sites/all/modules/contrib/devel/krumo/docs/errors.html diff --git a/sites/all/modules/custom/devel/krumo/docs/index.html b/sites/all/modules/contrib/devel/krumo/docs/index.html similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/index.html rename to sites/all/modules/contrib/devel/krumo/docs/index.html diff --git a/sites/all/modules/custom/devel/krumo/docs/li_Krumo.html b/sites/all/modules/contrib/devel/krumo/docs/li_Krumo.html similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/li_Krumo.html rename to sites/all/modules/contrib/devel/krumo/docs/li_Krumo.html diff --git a/sites/all/modules/custom/devel/krumo/docs/media/banner.css b/sites/all/modules/contrib/devel/krumo/docs/media/banner.css similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/banner.css rename to sites/all/modules/contrib/devel/krumo/docs/media/banner.css diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/AbstractClass.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/AbstractClass.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/AbstractClass.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/AbstractClass.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/AbstractClass_logo.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/AbstractClass_logo.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/AbstractClass_logo.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/AbstractClass_logo.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/AbstractMethod.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/AbstractMethod.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/AbstractMethod.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/AbstractMethod.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/AbstractPrivateClass.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/AbstractPrivateClass.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/AbstractPrivateClass.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/AbstractPrivateClass.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/AbstractPrivateClass_logo.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/AbstractPrivateClass_logo.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/AbstractPrivateClass_logo.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/AbstractPrivateClass_logo.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/AbstractPrivateMethod.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/AbstractPrivateMethod.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/AbstractPrivateMethod.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/AbstractPrivateMethod.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Class.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Class.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Class.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Class.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Class_logo.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Class_logo.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Class_logo.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Class_logo.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Constant.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Constant.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Constant.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Constant.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Constructor.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Constructor.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Constructor.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Constructor.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Destructor.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Destructor.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Destructor.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Destructor.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Function.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Function.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Function.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Function.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Global.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Global.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Global.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Global.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/I.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/I.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/I.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/I.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Index.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Index.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Index.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Index.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Interface.PNG b/sites/all/modules/contrib/devel/krumo/docs/media/images/Interface.PNG similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Interface.PNG rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Interface.PNG diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Interface_logo.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Interface_logo.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Interface_logo.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Interface_logo.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/L.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/L.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/L.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/L.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Lminus.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Lminus.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Lminus.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Lminus.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Lplus.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Lplus.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Lplus.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Lplus.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Method.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Method.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Method.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Method.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Page.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Page.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Page.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Page.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Page_logo.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Page_logo.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Page_logo.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Page_logo.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/PrivateClass.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/PrivateClass.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/PrivateClass.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/PrivateClass.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/PrivateClass_logo.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/PrivateClass_logo.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/PrivateClass_logo.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/PrivateClass_logo.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/PrivateMethod.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/PrivateMethod.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/PrivateMethod.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/PrivateMethod.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/PrivateVariable.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/PrivateVariable.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/PrivateVariable.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/PrivateVariable.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/StaticMethod.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/StaticMethod.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/StaticMethod.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/StaticMethod.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/StaticVariable.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/StaticVariable.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/StaticVariable.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/StaticVariable.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/T.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/T.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/T.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/T.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Tminus.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Tminus.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Tminus.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Tminus.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Tplus.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Tplus.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Tplus.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Tplus.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/Variable.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/Variable.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/Variable.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/Variable.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/blank.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/blank.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/blank.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/blank.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/class_folder.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/class_folder.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/class_folder.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/class_folder.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/empty.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/empty.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/empty.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/empty.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/file.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/file.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/file.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/file.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/folder.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/folder.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/folder.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/folder.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/function_folder.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/function_folder.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/function_folder.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/function_folder.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/minus.gif b/sites/all/modules/contrib/devel/krumo/docs/media/images/minus.gif similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/minus.gif rename to sites/all/modules/contrib/devel/krumo/docs/media/images/minus.gif diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/next_button.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/next_button.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/next_button.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/next_button.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/next_button_disabled.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/next_button_disabled.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/next_button_disabled.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/next_button_disabled.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/package.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/package.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/package.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/package.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/package_folder.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/package_folder.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/package_folder.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/package_folder.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/plus.gif b/sites/all/modules/contrib/devel/krumo/docs/media/images/plus.gif similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/plus.gif rename to sites/all/modules/contrib/devel/krumo/docs/media/images/plus.gif diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/previous_button.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/previous_button.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/previous_button.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/previous_button.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/previous_button_disabled.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/previous_button_disabled.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/previous_button_disabled.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/previous_button_disabled.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/private_class_logo.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/private_class_logo.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/private_class_logo.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/private_class_logo.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/tutorial.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/tutorial.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/tutorial.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/tutorial.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/tutorial_folder.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/tutorial_folder.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/tutorial_folder.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/tutorial_folder.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/images/up_button.png b/sites/all/modules/contrib/devel/krumo/docs/media/images/up_button.png similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/images/up_button.png rename to sites/all/modules/contrib/devel/krumo/docs/media/images/up_button.png diff --git a/sites/all/modules/custom/devel/krumo/docs/media/lib/classTree.js b/sites/all/modules/contrib/devel/krumo/docs/media/lib/classTree.js similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/lib/classTree.js rename to sites/all/modules/contrib/devel/krumo/docs/media/lib/classTree.js diff --git a/sites/all/modules/custom/devel/krumo/docs/media/stylesheet.css b/sites/all/modules/contrib/devel/krumo/docs/media/stylesheet.css similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/media/stylesheet.css rename to sites/all/modules/contrib/devel/krumo/docs/media/stylesheet.css diff --git a/sites/all/modules/custom/devel/krumo/docs/packages.html b/sites/all/modules/contrib/devel/krumo/docs/packages.html similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/packages.html rename to sites/all/modules/contrib/devel/krumo/docs/packages.html diff --git a/sites/all/modules/custom/devel/krumo/docs/ric_INSTALL.html b/sites/all/modules/contrib/devel/krumo/docs/ric_INSTALL.html similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/ric_INSTALL.html rename to sites/all/modules/contrib/devel/krumo/docs/ric_INSTALL.html diff --git a/sites/all/modules/custom/devel/krumo/docs/ric_LICENSE.html b/sites/all/modules/contrib/devel/krumo/docs/ric_LICENSE.html similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/ric_LICENSE.html rename to sites/all/modules/contrib/devel/krumo/docs/ric_LICENSE.html diff --git a/sites/all/modules/custom/devel/krumo/docs/ric_README.html b/sites/all/modules/contrib/devel/krumo/docs/ric_README.html similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/ric_README.html rename to sites/all/modules/contrib/devel/krumo/docs/ric_README.html diff --git a/sites/all/modules/custom/devel/krumo/docs/ric_TODO.html b/sites/all/modules/contrib/devel/krumo/docs/ric_TODO.html similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/ric_TODO.html rename to sites/all/modules/contrib/devel/krumo/docs/ric_TODO.html diff --git a/sites/all/modules/custom/devel/krumo/docs/ric_VERSION.html b/sites/all/modules/contrib/devel/krumo/docs/ric_VERSION.html similarity index 100% rename from sites/all/modules/custom/devel/krumo/docs/ric_VERSION.html rename to sites/all/modules/contrib/devel/krumo/docs/ric_VERSION.html diff --git a/sites/all/modules/custom/devel/krumo/krumo.ini b/sites/all/modules/contrib/devel/krumo/krumo.ini similarity index 100% rename from sites/all/modules/custom/devel/krumo/krumo.ini rename to sites/all/modules/contrib/devel/krumo/krumo.ini diff --git a/sites/all/modules/custom/devel/krumo/krumo.js b/sites/all/modules/contrib/devel/krumo/krumo.js similarity index 100% rename from sites/all/modules/custom/devel/krumo/krumo.js rename to sites/all/modules/contrib/devel/krumo/krumo.js diff --git a/sites/all/modules/custom/devel/krumo/skins/blue/bg.gif b/sites/all/modules/contrib/devel/krumo/skins/blue/bg.gif similarity index 100% rename from sites/all/modules/custom/devel/krumo/skins/blue/bg.gif rename to sites/all/modules/contrib/devel/krumo/skins/blue/bg.gif diff --git a/sites/all/modules/custom/devel/krumo/skins/blue/skin.css b/sites/all/modules/contrib/devel/krumo/skins/blue/skin.css similarity index 100% rename from sites/all/modules/custom/devel/krumo/skins/blue/skin.css rename to sites/all/modules/contrib/devel/krumo/skins/blue/skin.css diff --git a/sites/all/modules/custom/devel/krumo/skins/default/bg.gif b/sites/all/modules/contrib/devel/krumo/skins/default/bg.gif similarity index 100% rename from sites/all/modules/custom/devel/krumo/skins/default/bg.gif rename to sites/all/modules/contrib/devel/krumo/skins/default/bg.gif diff --git a/sites/all/modules/custom/devel/krumo/skins/default/skin.css b/sites/all/modules/contrib/devel/krumo/skins/default/skin.css similarity index 100% rename from sites/all/modules/custom/devel/krumo/skins/default/skin.css rename to sites/all/modules/contrib/devel/krumo/skins/default/skin.css diff --git a/sites/all/modules/custom/devel/krumo/skins/green/bg.gif b/sites/all/modules/contrib/devel/krumo/skins/green/bg.gif similarity index 100% rename from sites/all/modules/custom/devel/krumo/skins/green/bg.gif rename to sites/all/modules/contrib/devel/krumo/skins/green/bg.gif diff --git a/sites/all/modules/custom/devel/krumo/skins/green/skin.css b/sites/all/modules/contrib/devel/krumo/skins/green/skin.css similarity index 100% rename from sites/all/modules/custom/devel/krumo/skins/green/skin.css rename to sites/all/modules/contrib/devel/krumo/skins/green/skin.css diff --git a/sites/all/modules/custom/devel/krumo/skins/orange/bg.gif b/sites/all/modules/contrib/devel/krumo/skins/orange/bg.gif similarity index 100% rename from sites/all/modules/custom/devel/krumo/skins/orange/bg.gif rename to sites/all/modules/contrib/devel/krumo/skins/orange/bg.gif diff --git a/sites/all/modules/custom/devel/krumo/skins/orange/skin.css b/sites/all/modules/contrib/devel/krumo/skins/orange/skin.css similarity index 100% rename from sites/all/modules/custom/devel/krumo/skins/orange/skin.css rename to sites/all/modules/contrib/devel/krumo/skins/orange/skin.css diff --git a/sites/all/modules/custom/devel/krumo/skins/white/collapsed.gif b/sites/all/modules/contrib/devel/krumo/skins/white/collapsed.gif similarity index 100% rename from sites/all/modules/custom/devel/krumo/skins/white/collapsed.gif rename to sites/all/modules/contrib/devel/krumo/skins/white/collapsed.gif diff --git a/sites/all/modules/custom/devel/krumo/skins/white/dotted.gif b/sites/all/modules/contrib/devel/krumo/skins/white/dotted.gif similarity index 100% rename from sites/all/modules/custom/devel/krumo/skins/white/dotted.gif rename to sites/all/modules/contrib/devel/krumo/skins/white/dotted.gif diff --git a/sites/all/modules/custom/devel/krumo/skins/white/empty.gif b/sites/all/modules/contrib/devel/krumo/skins/white/empty.gif similarity index 100% rename from sites/all/modules/custom/devel/krumo/skins/white/empty.gif rename to sites/all/modules/contrib/devel/krumo/skins/white/empty.gif diff --git a/sites/all/modules/custom/devel/krumo/skins/white/expanded.gif b/sites/all/modules/contrib/devel/krumo/skins/white/expanded.gif similarity index 100% rename from sites/all/modules/custom/devel/krumo/skins/white/expanded.gif rename to sites/all/modules/contrib/devel/krumo/skins/white/expanded.gif diff --git a/sites/all/modules/custom/devel/krumo/skins/white/skin.css b/sites/all/modules/contrib/devel/krumo/skins/white/skin.css similarity index 100% rename from sites/all/modules/custom/devel/krumo/skins/white/skin.css rename to sites/all/modules/contrib/devel/krumo/skins/white/skin.css diff --git a/sites/all/modules/custom/devel/runtests.sh b/sites/all/modules/contrib/devel/runtests.sh similarity index 100% rename from sites/all/modules/custom/devel/runtests.sh rename to sites/all/modules/contrib/devel/runtests.sh diff --git a/sites/all/modules/custom/diff/CHANGELOG.txt b/sites/all/modules/contrib/diff/CHANGELOG.txt similarity index 100% rename from sites/all/modules/custom/diff/CHANGELOG.txt rename to sites/all/modules/contrib/diff/CHANGELOG.txt diff --git a/sites/all/modules/custom/diff/DiffEngine.php b/sites/all/modules/contrib/diff/DiffEngine.php similarity index 100% rename from sites/all/modules/custom/diff/DiffEngine.php rename to sites/all/modules/contrib/diff/DiffEngine.php diff --git a/sites/all/modules/custom/ds/LICENSE.txt b/sites/all/modules/contrib/diff/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/ds/LICENSE.txt rename to sites/all/modules/contrib/diff/LICENSE.txt diff --git a/sites/all/modules/custom/diff/css/diff.boxes.css b/sites/all/modules/contrib/diff/css/diff.boxes.css similarity index 100% rename from sites/all/modules/custom/diff/css/diff.boxes.css rename to sites/all/modules/contrib/diff/css/diff.boxes.css diff --git a/sites/all/modules/custom/diff/css/diff.default.css b/sites/all/modules/contrib/diff/css/diff.default.css similarity index 100% rename from sites/all/modules/custom/diff/css/diff.default.css rename to sites/all/modules/contrib/diff/css/diff.default.css diff --git a/sites/all/modules/custom/diff/diff.admin.inc b/sites/all/modules/contrib/diff/diff.admin.inc similarity index 100% rename from sites/all/modules/custom/diff/diff.admin.inc rename to sites/all/modules/contrib/diff/diff.admin.inc diff --git a/sites/all/modules/custom/diff/diff.api.php b/sites/all/modules/contrib/diff/diff.api.php similarity index 100% rename from sites/all/modules/custom/diff/diff.api.php rename to sites/all/modules/contrib/diff/diff.api.php diff --git a/sites/all/modules/custom/diff/diff.css b/sites/all/modules/contrib/diff/diff.css similarity index 100% rename from sites/all/modules/custom/diff/diff.css rename to sites/all/modules/contrib/diff/diff.css diff --git a/sites/all/modules/custom/diff/diff.diff.inc b/sites/all/modules/contrib/diff/diff.diff.inc similarity index 100% rename from sites/all/modules/custom/diff/diff.diff.inc rename to sites/all/modules/contrib/diff/diff.diff.inc diff --git a/sites/all/modules/custom/diff/diff.info b/sites/all/modules/contrib/diff/diff.info similarity index 100% rename from sites/all/modules/custom/diff/diff.info rename to sites/all/modules/contrib/diff/diff.info diff --git a/sites/all/modules/custom/diff/diff.install b/sites/all/modules/contrib/diff/diff.install similarity index 100% rename from sites/all/modules/custom/diff/diff.install rename to sites/all/modules/contrib/diff/diff.install diff --git a/sites/all/modules/custom/diff/diff.module b/sites/all/modules/contrib/diff/diff.module similarity index 100% rename from sites/all/modules/custom/diff/diff.module rename to sites/all/modules/contrib/diff/diff.module diff --git a/sites/all/modules/custom/diff/diff.pages.inc b/sites/all/modules/contrib/diff/diff.pages.inc similarity index 100% rename from sites/all/modules/custom/diff/diff.pages.inc rename to sites/all/modules/contrib/diff/diff.pages.inc diff --git a/sites/all/modules/custom/diff/diff.theme.inc b/sites/all/modules/contrib/diff/diff.theme.inc similarity index 100% rename from sites/all/modules/custom/diff/diff.theme.inc rename to sites/all/modules/contrib/diff/diff.theme.inc diff --git a/sites/all/modules/custom/diff/diff.tokens.inc b/sites/all/modules/contrib/diff/diff.tokens.inc similarity index 100% rename from sites/all/modules/custom/diff/diff.tokens.inc rename to sites/all/modules/contrib/diff/diff.tokens.inc diff --git a/sites/all/modules/custom/diff/includes/file.inc b/sites/all/modules/contrib/diff/includes/file.inc similarity index 100% rename from sites/all/modules/custom/diff/includes/file.inc rename to sites/all/modules/contrib/diff/includes/file.inc diff --git a/sites/all/modules/custom/diff/includes/image.inc b/sites/all/modules/contrib/diff/includes/image.inc similarity index 100% rename from sites/all/modules/custom/diff/includes/image.inc rename to sites/all/modules/contrib/diff/includes/image.inc diff --git a/sites/all/modules/custom/diff/includes/list.inc b/sites/all/modules/contrib/diff/includes/list.inc similarity index 100% rename from sites/all/modules/custom/diff/includes/list.inc rename to sites/all/modules/contrib/diff/includes/list.inc diff --git a/sites/all/modules/custom/diff/includes/node.inc b/sites/all/modules/contrib/diff/includes/node.inc similarity index 100% rename from sites/all/modules/custom/diff/includes/node.inc rename to sites/all/modules/contrib/diff/includes/node.inc diff --git a/sites/all/modules/custom/diff/includes/number.inc b/sites/all/modules/contrib/diff/includes/number.inc similarity index 100% rename from sites/all/modules/custom/diff/includes/number.inc rename to sites/all/modules/contrib/diff/includes/number.inc diff --git a/sites/all/modules/custom/diff/includes/taxonomy.inc b/sites/all/modules/contrib/diff/includes/taxonomy.inc similarity index 100% rename from sites/all/modules/custom/diff/includes/taxonomy.inc rename to sites/all/modules/contrib/diff/includes/taxonomy.inc diff --git a/sites/all/modules/custom/diff/includes/text.inc b/sites/all/modules/contrib/diff/includes/text.inc similarity index 100% rename from sites/all/modules/custom/diff/includes/text.inc rename to sites/all/modules/contrib/diff/includes/text.inc diff --git a/sites/all/modules/custom/diff/js/diff.js b/sites/all/modules/contrib/diff/js/diff.js similarity index 100% rename from sites/all/modules/custom/diff/js/diff.js rename to sites/all/modules/contrib/diff/js/diff.js diff --git a/sites/all/modules/custom/diff/readme.txt b/sites/all/modules/contrib/diff/readme.txt similarity index 100% rename from sites/all/modules/custom/diff/readme.txt rename to sites/all/modules/contrib/diff/readme.txt diff --git a/sites/all/modules/custom/domain/CHANGELOG.txt b/sites/all/modules/contrib/domain/CHANGELOG.txt similarity index 100% rename from sites/all/modules/custom/domain/CHANGELOG.txt rename to sites/all/modules/contrib/domain/CHANGELOG.txt diff --git a/sites/all/modules/custom/domain/INSTALL.txt b/sites/all/modules/contrib/domain/INSTALL.txt similarity index 100% rename from sites/all/modules/custom/domain/INSTALL.txt rename to sites/all/modules/contrib/domain/INSTALL.txt diff --git a/sites/all/modules/custom/domain/INSTALL_QUICKSTART.txt b/sites/all/modules/contrib/domain/INSTALL_QUICKSTART.txt similarity index 100% rename from sites/all/modules/custom/domain/INSTALL_QUICKSTART.txt rename to sites/all/modules/contrib/domain/INSTALL_QUICKSTART.txt diff --git a/sites/all/modules/custom/entity/LICENSE.txt b/sites/all/modules/contrib/domain/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/entity/LICENSE.txt rename to sites/all/modules/contrib/domain/LICENSE.txt diff --git a/sites/all/modules/custom/domain/README.txt b/sites/all/modules/contrib/domain/README.txt similarity index 100% rename from sites/all/modules/custom/domain/README.txt rename to sites/all/modules/contrib/domain/README.txt diff --git a/sites/all/modules/custom/domain/UPGRADE.txt b/sites/all/modules/contrib/domain/UPGRADE.txt similarity index 100% rename from sites/all/modules/custom/domain/UPGRADE.txt rename to sites/all/modules/contrib/domain/UPGRADE.txt diff --git a/sites/all/modules/custom/domain/domain.admin.inc b/sites/all/modules/contrib/domain/domain.admin.inc similarity index 100% rename from sites/all/modules/custom/domain/domain.admin.inc rename to sites/all/modules/contrib/domain/domain.admin.inc diff --git a/sites/all/modules/custom/domain/domain.api.php b/sites/all/modules/contrib/domain/domain.api.php similarity index 100% rename from sites/all/modules/custom/domain/domain.api.php rename to sites/all/modules/contrib/domain/domain.api.php diff --git a/sites/all/modules/custom/domain/domain.blocks.inc b/sites/all/modules/contrib/domain/domain.blocks.inc similarity index 100% rename from sites/all/modules/custom/domain/domain.blocks.inc rename to sites/all/modules/contrib/domain/domain.blocks.inc diff --git a/sites/all/modules/custom/domain/domain.bootstrap.inc b/sites/all/modules/contrib/domain/domain.bootstrap.inc similarity index 100% rename from sites/all/modules/custom/domain/domain.bootstrap.inc rename to sites/all/modules/contrib/domain/domain.bootstrap.inc diff --git a/sites/all/modules/custom/domain/domain.drush.inc b/sites/all/modules/contrib/domain/domain.drush.inc similarity index 100% rename from sites/all/modules/custom/domain/domain.drush.inc rename to sites/all/modules/contrib/domain/domain.drush.inc diff --git a/sites/all/modules/custom/domain/domain.features.inc b/sites/all/modules/contrib/domain/domain.features.inc similarity index 100% rename from sites/all/modules/custom/domain/domain.features.inc rename to sites/all/modules/contrib/domain/domain.features.inc diff --git a/sites/all/modules/custom/domain/domain.info b/sites/all/modules/contrib/domain/domain.info similarity index 100% rename from sites/all/modules/custom/domain/domain.info rename to sites/all/modules/contrib/domain/domain.info diff --git a/sites/all/modules/custom/domain/domain.install b/sites/all/modules/contrib/domain/domain.install similarity index 100% rename from sites/all/modules/custom/domain/domain.install rename to sites/all/modules/contrib/domain/domain.install diff --git a/sites/all/modules/custom/domain/domain.migrate.inc b/sites/all/modules/contrib/domain/domain.migrate.inc similarity index 100% rename from sites/all/modules/custom/domain/domain.migrate.inc rename to sites/all/modules/contrib/domain/domain.migrate.inc diff --git a/sites/all/modules/custom/domain/domain.module b/sites/all/modules/contrib/domain/domain.module similarity index 100% rename from sites/all/modules/custom/domain/domain.module rename to sites/all/modules/contrib/domain/domain.module diff --git a/sites/all/modules/custom/domain/domain.tokens.inc b/sites/all/modules/contrib/domain/domain.tokens.inc similarity index 100% rename from sites/all/modules/custom/domain/domain.tokens.inc rename to sites/all/modules/contrib/domain/domain.tokens.inc diff --git a/sites/all/modules/custom/domain/domain_alias/README.txt b/sites/all/modules/contrib/domain/domain_alias/README.txt similarity index 100% rename from sites/all/modules/custom/domain/domain_alias/README.txt rename to sites/all/modules/contrib/domain/domain_alias/README.txt diff --git a/sites/all/modules/custom/domain/domain_alias/domain_alias.admin.inc b/sites/all/modules/contrib/domain/domain_alias/domain_alias.admin.inc similarity index 100% rename from sites/all/modules/custom/domain/domain_alias/domain_alias.admin.inc rename to sites/all/modules/contrib/domain/domain_alias/domain_alias.admin.inc diff --git a/sites/all/modules/custom/domain/domain_alias/domain_alias.domain.inc b/sites/all/modules/contrib/domain/domain_alias/domain_alias.domain.inc similarity index 100% rename from sites/all/modules/custom/domain/domain_alias/domain_alias.domain.inc rename to sites/all/modules/contrib/domain/domain_alias/domain_alias.domain.inc diff --git a/sites/all/modules/custom/domain/domain_alias/domain_alias.features.inc b/sites/all/modules/contrib/domain/domain_alias/domain_alias.features.inc similarity index 100% rename from sites/all/modules/custom/domain/domain_alias/domain_alias.features.inc rename to sites/all/modules/contrib/domain/domain_alias/domain_alias.features.inc diff --git a/sites/all/modules/custom/domain/domain_alias/domain_alias.info b/sites/all/modules/contrib/domain/domain_alias/domain_alias.info similarity index 100% rename from sites/all/modules/custom/domain/domain_alias/domain_alias.info rename to sites/all/modules/contrib/domain/domain_alias/domain_alias.info diff --git a/sites/all/modules/custom/domain/domain_alias/domain_alias.install b/sites/all/modules/contrib/domain/domain_alias/domain_alias.install similarity index 100% rename from sites/all/modules/custom/domain/domain_alias/domain_alias.install rename to sites/all/modules/contrib/domain/domain_alias/domain_alias.install diff --git a/sites/all/modules/custom/domain/domain_alias/domain_alias.module b/sites/all/modules/contrib/domain/domain_alias/domain_alias.module similarity index 100% rename from sites/all/modules/custom/domain/domain_alias/domain_alias.module rename to sites/all/modules/contrib/domain/domain_alias/domain_alias.module diff --git a/sites/all/modules/custom/domain/domain_conf/README.txt b/sites/all/modules/contrib/domain/domain_conf/README.txt similarity index 100% rename from sites/all/modules/custom/domain/domain_conf/README.txt rename to sites/all/modules/contrib/domain/domain_conf/README.txt diff --git a/sites/all/modules/custom/domain/domain_conf/domain_conf.admin.inc b/sites/all/modules/contrib/domain/domain_conf/domain_conf.admin.inc similarity index 100% rename from sites/all/modules/custom/domain/domain_conf/domain_conf.admin.inc rename to sites/all/modules/contrib/domain/domain_conf/domain_conf.admin.inc diff --git a/sites/all/modules/custom/domain/domain_conf/domain_conf.domain.inc b/sites/all/modules/contrib/domain/domain_conf/domain_conf.domain.inc similarity index 100% rename from sites/all/modules/custom/domain/domain_conf/domain_conf.domain.inc rename to sites/all/modules/contrib/domain/domain_conf/domain_conf.domain.inc diff --git a/sites/all/modules/custom/domain/domain_conf/domain_conf.drush.inc b/sites/all/modules/contrib/domain/domain_conf/domain_conf.drush.inc similarity index 100% rename from sites/all/modules/custom/domain/domain_conf/domain_conf.drush.inc rename to sites/all/modules/contrib/domain/domain_conf/domain_conf.drush.inc diff --git a/sites/all/modules/custom/domain/domain_conf/domain_conf.features.inc b/sites/all/modules/contrib/domain/domain_conf/domain_conf.features.inc similarity index 100% rename from sites/all/modules/custom/domain/domain_conf/domain_conf.features.inc rename to sites/all/modules/contrib/domain/domain_conf/domain_conf.features.inc diff --git a/sites/all/modules/custom/domain/domain_conf/domain_conf.info b/sites/all/modules/contrib/domain/domain_conf/domain_conf.info similarity index 100% rename from sites/all/modules/custom/domain/domain_conf/domain_conf.info rename to sites/all/modules/contrib/domain/domain_conf/domain_conf.info diff --git a/sites/all/modules/custom/domain/domain_conf/domain_conf.install b/sites/all/modules/contrib/domain/domain_conf/domain_conf.install similarity index 100% rename from sites/all/modules/custom/domain/domain_conf/domain_conf.install rename to sites/all/modules/contrib/domain/domain_conf/domain_conf.install diff --git a/sites/all/modules/custom/domain/domain_conf/domain_conf.module b/sites/all/modules/contrib/domain/domain_conf/domain_conf.module similarity index 100% rename from sites/all/modules/custom/domain/domain_conf/domain_conf.module rename to sites/all/modules/contrib/domain/domain_conf/domain_conf.module diff --git a/sites/all/modules/custom/domain/domain_content/README.txt b/sites/all/modules/contrib/domain/domain_content/README.txt similarity index 100% rename from sites/all/modules/custom/domain/domain_content/README.txt rename to sites/all/modules/contrib/domain/domain_content/README.txt diff --git a/sites/all/modules/custom/domain/domain_content/domain_content-rtl.css b/sites/all/modules/contrib/domain/domain_content/domain_content-rtl.css similarity index 100% rename from sites/all/modules/custom/domain/domain_content/domain_content-rtl.css rename to sites/all/modules/contrib/domain/domain_content/domain_content-rtl.css diff --git a/sites/all/modules/custom/domain/domain_content/domain_content.admin.inc b/sites/all/modules/contrib/domain/domain_content/domain_content.admin.inc similarity index 100% rename from sites/all/modules/custom/domain/domain_content/domain_content.admin.inc rename to sites/all/modules/contrib/domain/domain_content/domain_content.admin.inc diff --git a/sites/all/modules/custom/domain/domain_content/domain_content.css b/sites/all/modules/contrib/domain/domain_content/domain_content.css similarity index 100% rename from sites/all/modules/custom/domain/domain_content/domain_content.css rename to sites/all/modules/contrib/domain/domain_content/domain_content.css diff --git a/sites/all/modules/custom/domain/domain_content/domain_content.domain.inc b/sites/all/modules/contrib/domain/domain_content/domain_content.domain.inc similarity index 100% rename from sites/all/modules/custom/domain/domain_content/domain_content.domain.inc rename to sites/all/modules/contrib/domain/domain_content/domain_content.domain.inc diff --git a/sites/all/modules/custom/domain/domain_content/domain_content.info b/sites/all/modules/contrib/domain/domain_content/domain_content.info similarity index 100% rename from sites/all/modules/custom/domain/domain_content/domain_content.info rename to sites/all/modules/contrib/domain/domain_content/domain_content.info diff --git a/sites/all/modules/custom/domain/domain_content/domain_content.module b/sites/all/modules/contrib/domain/domain_content/domain_content.module similarity index 100% rename from sites/all/modules/custom/domain/domain_content/domain_content.module rename to sites/all/modules/contrib/domain/domain_content/domain_content.module diff --git a/sites/all/modules/custom/domain/domain_nav/README.txt b/sites/all/modules/contrib/domain/domain_nav/README.txt similarity index 100% rename from sites/all/modules/custom/domain/domain_nav/README.txt rename to sites/all/modules/contrib/domain/domain_nav/README.txt diff --git a/sites/all/modules/custom/domain/domain_nav/domain_nav.css b/sites/all/modules/contrib/domain/domain_nav/domain_nav.css similarity index 100% rename from sites/all/modules/custom/domain/domain_nav/domain_nav.css rename to sites/all/modules/contrib/domain/domain_nav/domain_nav.css diff --git a/sites/all/modules/custom/domain/domain_nav/domain_nav.info b/sites/all/modules/contrib/domain/domain_nav/domain_nav.info similarity index 100% rename from sites/all/modules/custom/domain/domain_nav/domain_nav.info rename to sites/all/modules/contrib/domain/domain_nav/domain_nav.info diff --git a/sites/all/modules/custom/domain/domain_nav/domain_nav.install b/sites/all/modules/contrib/domain/domain_nav/domain_nav.install similarity index 100% rename from sites/all/modules/custom/domain/domain_nav/domain_nav.install rename to sites/all/modules/contrib/domain/domain_nav/domain_nav.install diff --git a/sites/all/modules/custom/domain/domain_nav/domain_nav.module b/sites/all/modules/contrib/domain/domain_nav/domain_nav.module similarity index 100% rename from sites/all/modules/custom/domain/domain_nav/domain_nav.module rename to sites/all/modules/contrib/domain/domain_nav/domain_nav.module diff --git a/sites/all/modules/custom/domain/domain_settings/README.txt b/sites/all/modules/contrib/domain/domain_settings/README.txt similarity index 100% rename from sites/all/modules/custom/domain/domain_settings/README.txt rename to sites/all/modules/contrib/domain/domain_settings/README.txt diff --git a/sites/all/modules/custom/domain/domain_settings/domain_settings.info b/sites/all/modules/contrib/domain/domain_settings/domain_settings.info similarity index 100% rename from sites/all/modules/custom/domain/domain_settings/domain_settings.info rename to sites/all/modules/contrib/domain/domain_settings/domain_settings.info diff --git a/sites/all/modules/custom/domain/domain_settings/domain_settings.install b/sites/all/modules/contrib/domain/domain_settings/domain_settings.install similarity index 100% rename from sites/all/modules/custom/domain/domain_settings/domain_settings.install rename to sites/all/modules/contrib/domain/domain_settings/domain_settings.install diff --git a/sites/all/modules/custom/domain/domain_settings/domain_settings.module b/sites/all/modules/contrib/domain/domain_settings/domain_settings.module similarity index 100% rename from sites/all/modules/custom/domain/domain_settings/domain_settings.module rename to sites/all/modules/contrib/domain/domain_settings/domain_settings.module diff --git a/sites/all/modules/custom/domain/domain_source/README.txt b/sites/all/modules/contrib/domain/domain_source/README.txt similarity index 100% rename from sites/all/modules/custom/domain/domain_source/README.txt rename to sites/all/modules/contrib/domain/domain_source/README.txt diff --git a/sites/all/modules/custom/domain/domain_source/domain_source.domain.inc b/sites/all/modules/contrib/domain/domain_source/domain_source.domain.inc similarity index 100% rename from sites/all/modules/custom/domain/domain_source/domain_source.domain.inc rename to sites/all/modules/contrib/domain/domain_source/domain_source.domain.inc diff --git a/sites/all/modules/custom/domain/domain_source/domain_source.info b/sites/all/modules/contrib/domain/domain_source/domain_source.info similarity index 100% rename from sites/all/modules/custom/domain/domain_source/domain_source.info rename to sites/all/modules/contrib/domain/domain_source/domain_source.info diff --git a/sites/all/modules/custom/domain/domain_source/domain_source.install b/sites/all/modules/contrib/domain/domain_source/domain_source.install similarity index 100% rename from sites/all/modules/custom/domain/domain_source/domain_source.install rename to sites/all/modules/contrib/domain/domain_source/domain_source.install diff --git a/sites/all/modules/custom/domain/domain_source/domain_source.module b/sites/all/modules/contrib/domain/domain_source/domain_source.module similarity index 100% rename from sites/all/modules/custom/domain/domain_source/domain_source.module rename to sites/all/modules/contrib/domain/domain_source/domain_source.module diff --git a/sites/all/modules/custom/domain/domain_source/domain_source.views.inc b/sites/all/modules/contrib/domain/domain_source/domain_source.views.inc similarity index 100% rename from sites/all/modules/custom/domain/domain_source/domain_source.views.inc rename to sites/all/modules/contrib/domain/domain_source/domain_source.views.inc diff --git a/sites/all/modules/custom/domain/domain_source/includes/domain_source_handler_filter_domain_id.inc b/sites/all/modules/contrib/domain/domain_source/includes/domain_source_handler_filter_domain_id.inc similarity index 100% rename from sites/all/modules/custom/domain/domain_source/includes/domain_source_handler_filter_domain_id.inc rename to sites/all/modules/contrib/domain/domain_source/includes/domain_source_handler_filter_domain_id.inc diff --git a/sites/all/modules/custom/domain/domain_source/tests/domain_source.test b/sites/all/modules/contrib/domain/domain_source/tests/domain_source.test similarity index 100% rename from sites/all/modules/custom/domain/domain_source/tests/domain_source.test rename to sites/all/modules/contrib/domain/domain_source/tests/domain_source.test diff --git a/sites/all/modules/custom/domain/domain_strict/README.txt b/sites/all/modules/contrib/domain/domain_strict/README.txt similarity index 100% rename from sites/all/modules/custom/domain/domain_strict/README.txt rename to sites/all/modules/contrib/domain/domain_strict/README.txt diff --git a/sites/all/modules/custom/domain/domain_strict/domain_strict.info b/sites/all/modules/contrib/domain/domain_strict/domain_strict.info similarity index 100% rename from sites/all/modules/custom/domain/domain_strict/domain_strict.info rename to sites/all/modules/contrib/domain/domain_strict/domain_strict.info diff --git a/sites/all/modules/custom/domain/domain_strict/domain_strict.module b/sites/all/modules/contrib/domain/domain_strict/domain_strict.module similarity index 100% rename from sites/all/modules/custom/domain/domain_strict/domain_strict.module rename to sites/all/modules/contrib/domain/domain_strict/domain_strict.module diff --git a/sites/all/modules/custom/domain/domain_strict/domain_strict.test b/sites/all/modules/contrib/domain/domain_strict/domain_strict.test similarity index 100% rename from sites/all/modules/custom/domain/domain_strict/domain_strict.test rename to sites/all/modules/contrib/domain/domain_strict/domain_strict.test diff --git a/sites/all/modules/custom/domain/domain_theme/README.txt b/sites/all/modules/contrib/domain/domain_theme/README.txt similarity index 100% rename from sites/all/modules/custom/domain/domain_theme/README.txt rename to sites/all/modules/contrib/domain/domain_theme/README.txt diff --git a/sites/all/modules/custom/domain/domain_theme/domain_theme.admin.inc b/sites/all/modules/contrib/domain/domain_theme/domain_theme.admin.inc similarity index 100% rename from sites/all/modules/custom/domain/domain_theme/domain_theme.admin.inc rename to sites/all/modules/contrib/domain/domain_theme/domain_theme.admin.inc diff --git a/sites/all/modules/custom/domain/domain_theme/domain_theme.domain.inc b/sites/all/modules/contrib/domain/domain_theme/domain_theme.domain.inc similarity index 100% rename from sites/all/modules/custom/domain/domain_theme/domain_theme.domain.inc rename to sites/all/modules/contrib/domain/domain_theme/domain_theme.domain.inc diff --git a/sites/all/modules/custom/domain/domain_theme/domain_theme.features.inc b/sites/all/modules/contrib/domain/domain_theme/domain_theme.features.inc similarity index 100% rename from sites/all/modules/custom/domain/domain_theme/domain_theme.features.inc rename to sites/all/modules/contrib/domain/domain_theme/domain_theme.features.inc diff --git a/sites/all/modules/custom/domain/domain_theme/domain_theme.info b/sites/all/modules/contrib/domain/domain_theme/domain_theme.info similarity index 100% rename from sites/all/modules/custom/domain/domain_theme/domain_theme.info rename to sites/all/modules/contrib/domain/domain_theme/domain_theme.info diff --git a/sites/all/modules/custom/domain/domain_theme/domain_theme.install b/sites/all/modules/contrib/domain/domain_theme/domain_theme.install similarity index 100% rename from sites/all/modules/custom/domain/domain_theme/domain_theme.install rename to sites/all/modules/contrib/domain/domain_theme/domain_theme.install diff --git a/sites/all/modules/custom/domain/domain_theme/domain_theme.module b/sites/all/modules/contrib/domain/domain_theme/domain_theme.module similarity index 100% rename from sites/all/modules/custom/domain/domain_theme/domain_theme.module rename to sites/all/modules/contrib/domain/domain_theme/domain_theme.module diff --git a/sites/all/modules/custom/domain/settings.inc b/sites/all/modules/contrib/domain/settings.inc similarity index 100% rename from sites/all/modules/custom/domain/settings.inc rename to sites/all/modules/contrib/domain/settings.inc diff --git a/sites/all/modules/custom/domain/settings_custom_url.inc b/sites/all/modules/contrib/domain/settings_custom_url.inc similarity index 100% rename from sites/all/modules/custom/domain/settings_custom_url.inc rename to sites/all/modules/contrib/domain/settings_custom_url.inc diff --git a/sites/all/modules/custom/domain/tests/200.png b/sites/all/modules/contrib/domain/tests/200.png similarity index 100% rename from sites/all/modules/custom/domain/tests/200.png rename to sites/all/modules/contrib/domain/tests/200.png diff --git a/sites/all/modules/custom/domain/tests/domain.test b/sites/all/modules/contrib/domain/tests/domain.test similarity index 100% rename from sites/all/modules/custom/domain/tests/domain.test rename to sites/all/modules/contrib/domain/tests/domain.test diff --git a/sites/all/modules/custom/domain/tests/domain_test.domain.inc b/sites/all/modules/contrib/domain/tests/domain_test.domain.inc similarity index 100% rename from sites/all/modules/custom/domain/tests/domain_test.domain.inc rename to sites/all/modules/contrib/domain/tests/domain_test.domain.inc diff --git a/sites/all/modules/custom/domain/tests/domain_test.info b/sites/all/modules/contrib/domain/tests/domain_test.info similarity index 100% rename from sites/all/modules/custom/domain/tests/domain_test.info rename to sites/all/modules/contrib/domain/tests/domain_test.info diff --git a/sites/all/modules/custom/domain/tests/domain_test.module b/sites/all/modules/contrib/domain/tests/domain_test.module similarity index 100% rename from sites/all/modules/custom/domain/tests/domain_test.module rename to sites/all/modules/contrib/domain/tests/domain_test.module diff --git a/sites/all/modules/custom/entity_dependency/LICENSE.txt b/sites/all/modules/contrib/draggableviews/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/entity_dependency/LICENSE.txt rename to sites/all/modules/contrib/draggableviews/LICENSE.txt diff --git a/sites/all/modules/custom/draggableviews/README.txt b/sites/all/modules/contrib/draggableviews/README.txt similarity index 100% rename from sites/all/modules/custom/draggableviews/README.txt rename to sites/all/modules/contrib/draggableviews/README.txt diff --git a/sites/all/modules/custom/draggableviews/css/draggableviews_list.css b/sites/all/modules/contrib/draggableviews/css/draggableviews_list.css similarity index 100% rename from sites/all/modules/custom/draggableviews/css/draggableviews_list.css rename to sites/all/modules/contrib/draggableviews/css/draggableviews_list.css diff --git a/sites/all/modules/custom/draggableviews/draggableviews.api.php b/sites/all/modules/contrib/draggableviews/draggableviews.api.php similarity index 100% rename from sites/all/modules/custom/draggableviews/draggableviews.api.php rename to sites/all/modules/contrib/draggableviews/draggableviews.api.php diff --git a/sites/all/modules/custom/draggableviews/draggableviews.info b/sites/all/modules/contrib/draggableviews/draggableviews.info similarity index 100% rename from sites/all/modules/custom/draggableviews/draggableviews.info rename to sites/all/modules/contrib/draggableviews/draggableviews.info diff --git a/sites/all/modules/custom/draggableviews/draggableviews.install b/sites/all/modules/contrib/draggableviews/draggableviews.install similarity index 100% rename from sites/all/modules/custom/draggableviews/draggableviews.install rename to sites/all/modules/contrib/draggableviews/draggableviews.install diff --git a/sites/all/modules/custom/draggableviews/draggableviews.module b/sites/all/modules/contrib/draggableviews/draggableviews.module similarity index 100% rename from sites/all/modules/custom/draggableviews/draggableviews.module rename to sites/all/modules/contrib/draggableviews/draggableviews.module diff --git a/sites/all/modules/custom/draggableviews/draggableviews.rules.inc b/sites/all/modules/contrib/draggableviews/draggableviews.rules.inc similarity index 100% rename from sites/all/modules/custom/draggableviews/draggableviews.rules.inc rename to sites/all/modules/contrib/draggableviews/draggableviews.rules.inc diff --git a/sites/all/modules/custom/draggableviews/handlers/draggableviews_handler.inc b/sites/all/modules/contrib/draggableviews/handlers/draggableviews_handler.inc similarity index 100% rename from sites/all/modules/custom/draggableviews/handlers/draggableviews_handler.inc rename to sites/all/modules/contrib/draggableviews/handlers/draggableviews_handler.inc diff --git a/sites/all/modules/custom/draggableviews/handlers/draggableviews_handler_fieldapi.inc b/sites/all/modules/contrib/draggableviews/handlers/draggableviews_handler_fieldapi.inc similarity index 100% rename from sites/all/modules/custom/draggableviews/handlers/draggableviews_handler_fieldapi.inc rename to sites/all/modules/contrib/draggableviews/handlers/draggableviews_handler_fieldapi.inc diff --git a/sites/all/modules/custom/draggableviews/handlers/draggableviews_handler_native.inc b/sites/all/modules/contrib/draggableviews/handlers/draggableviews_handler_native.inc similarity index 100% rename from sites/all/modules/custom/draggableviews/handlers/draggableviews_handler_native.inc rename to sites/all/modules/contrib/draggableviews/handlers/draggableviews_handler_native.inc diff --git a/sites/all/modules/custom/draggableviews/js/draggableviews_list.js b/sites/all/modules/contrib/draggableviews/js/draggableviews_list.js similarity index 100% rename from sites/all/modules/custom/draggableviews/js/draggableviews_list.js rename to sites/all/modules/contrib/draggableviews/js/draggableviews_list.js diff --git a/sites/all/modules/custom/draggableviews/test/draggableviews.test b/sites/all/modules/contrib/draggableviews/test/draggableviews.test similarity index 100% rename from sites/all/modules/custom/draggableviews/test/draggableviews.test rename to sites/all/modules/contrib/draggableviews/test/draggableviews.test diff --git a/sites/all/modules/custom/draggableviews/test/draggableviews_test/draggableviews_test.info b/sites/all/modules/contrib/draggableviews/test/draggableviews_test/draggableviews_test.info similarity index 100% rename from sites/all/modules/custom/draggableviews/test/draggableviews_test/draggableviews_test.info rename to sites/all/modules/contrib/draggableviews/test/draggableviews_test/draggableviews_test.info diff --git a/sites/all/modules/custom/draggableviews/test/draggableviews_test/draggableviews_test.module b/sites/all/modules/contrib/draggableviews/test/draggableviews_test/draggableviews_test.module similarity index 100% rename from sites/all/modules/custom/draggableviews/test/draggableviews_test/draggableviews_test.module rename to sites/all/modules/contrib/draggableviews/test/draggableviews_test/draggableviews_test.module diff --git a/sites/all/modules/custom/draggableviews/test/draggableviews_test/draggableviews_test.views_default.inc b/sites/all/modules/contrib/draggableviews/test/draggableviews_test/draggableviews_test.views_default.inc similarity index 100% rename from sites/all/modules/custom/draggableviews/test/draggableviews_test/draggableviews_test.views_default.inc rename to sites/all/modules/contrib/draggableviews/test/draggableviews_test/draggableviews_test.views_default.inc diff --git a/sites/all/modules/custom/draggableviews/views/draggableviews.views.inc b/sites/all/modules/contrib/draggableviews/views/draggableviews.views.inc similarity index 100% rename from sites/all/modules/custom/draggableviews/views/draggableviews.views.inc rename to sites/all/modules/contrib/draggableviews/views/draggableviews.views.inc diff --git a/sites/all/modules/custom/draggableviews/views/draggableviews_handler_field_draggable.inc b/sites/all/modules/contrib/draggableviews/views/draggableviews_handler_field_draggable.inc similarity index 100% rename from sites/all/modules/custom/draggableviews/views/draggableviews_handler_field_draggable.inc rename to sites/all/modules/contrib/draggableviews/views/draggableviews_handler_field_draggable.inc diff --git a/sites/all/modules/custom/draggableviews/views/draggableviews_handler_sort.inc b/sites/all/modules/contrib/draggableviews/views/draggableviews_handler_sort.inc similarity index 100% rename from sites/all/modules/custom/draggableviews/views/draggableviews_handler_sort.inc rename to sites/all/modules/contrib/draggableviews/views/draggableviews_handler_sort.inc diff --git a/sites/all/modules/custom/draggableviews/views/draggableviews_join_handler.inc b/sites/all/modules/contrib/draggableviews/views/draggableviews_join_handler.inc similarity index 100% rename from sites/all/modules/custom/draggableviews/views/draggableviews_join_handler.inc rename to sites/all/modules/contrib/draggableviews/views/draggableviews_join_handler.inc diff --git a/sites/all/modules/custom/entityreference/LICENSE.txt b/sites/all/modules/contrib/ds/LICENSE.txt old mode 100755 new mode 100644 similarity index 100% rename from sites/all/modules/custom/entityreference/LICENSE.txt rename to sites/all/modules/contrib/ds/LICENSE.txt diff --git a/sites/all/modules/custom/ds/README.txt b/sites/all/modules/contrib/ds/README.txt similarity index 100% rename from sites/all/modules/custom/ds/README.txt rename to sites/all/modules/contrib/ds/README.txt diff --git a/sites/all/modules/custom/ds/css/ds.admin.css b/sites/all/modules/contrib/ds/css/ds.admin.css similarity index 100% rename from sites/all/modules/custom/ds/css/ds.admin.css rename to sites/all/modules/contrib/ds/css/ds.admin.css diff --git a/sites/all/modules/custom/ds/drush/ds.drush.inc b/sites/all/modules/contrib/ds/drush/ds.drush.inc similarity index 100% rename from sites/all/modules/custom/ds/drush/ds.drush.inc rename to sites/all/modules/contrib/ds/drush/ds.drush.inc diff --git a/sites/all/modules/custom/ds/drush/example_layout/README.txt b/sites/all/modules/contrib/ds/drush/example_layout/README.txt similarity index 100% rename from sites/all/modules/custom/ds/drush/example_layout/README.txt rename to sites/all/modules/contrib/ds/drush/example_layout/README.txt diff --git a/sites/all/modules/custom/ds/drush/example_layout/example-layout.tpl.php b/sites/all/modules/contrib/ds/drush/example_layout/example-layout.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/drush/example_layout/example-layout.tpl.php rename to sites/all/modules/contrib/ds/drush/example_layout/example-layout.tpl.php diff --git a/sites/all/modules/custom/ds/drush/example_layout/example_layout-rtl.css b/sites/all/modules/contrib/ds/drush/example_layout/example_layout-rtl.css similarity index 100% rename from sites/all/modules/custom/ds/drush/example_layout/example_layout-rtl.css rename to sites/all/modules/contrib/ds/drush/example_layout/example_layout-rtl.css diff --git a/sites/all/modules/custom/ds/drush/example_layout/example_layout.css b/sites/all/modules/contrib/ds/drush/example_layout/example_layout.css similarity index 100% rename from sites/all/modules/custom/ds/drush/example_layout/example_layout.css rename to sites/all/modules/contrib/ds/drush/example_layout/example_layout.css diff --git a/sites/all/modules/custom/ds/drush/example_layout/example_layout.inc b/sites/all/modules/contrib/ds/drush/example_layout/example_layout.inc similarity index 100% rename from sites/all/modules/custom/ds/drush/example_layout/example_layout.inc rename to sites/all/modules/contrib/ds/drush/example_layout/example_layout.inc diff --git a/sites/all/modules/custom/ds/drush/example_layout/example_layout.png b/sites/all/modules/contrib/ds/drush/example_layout/example_layout.png similarity index 100% rename from sites/all/modules/custom/ds/drush/example_layout/example_layout.png rename to sites/all/modules/contrib/ds/drush/example_layout/example_layout.png diff --git a/sites/all/modules/custom/ds/ds.api.php b/sites/all/modules/contrib/ds/ds.api.php similarity index 100% rename from sites/all/modules/custom/ds/ds.api.php rename to sites/all/modules/contrib/ds/ds.api.php diff --git a/sites/all/modules/custom/ds/ds.ds_fields_info.inc b/sites/all/modules/contrib/ds/ds.ds_fields_info.inc similarity index 100% rename from sites/all/modules/custom/ds/ds.ds_fields_info.inc rename to sites/all/modules/contrib/ds/ds.ds_fields_info.inc diff --git a/sites/all/modules/custom/ds/ds.info b/sites/all/modules/contrib/ds/ds.info similarity index 100% rename from sites/all/modules/custom/ds/ds.info rename to sites/all/modules/contrib/ds/ds.info diff --git a/sites/all/modules/custom/ds/ds.install b/sites/all/modules/contrib/ds/ds.install similarity index 100% rename from sites/all/modules/custom/ds/ds.install rename to sites/all/modules/contrib/ds/ds.install diff --git a/sites/all/modules/custom/ds/ds.module b/sites/all/modules/contrib/ds/ds.module similarity index 100% rename from sites/all/modules/custom/ds/ds.module rename to sites/all/modules/contrib/ds/ds.module diff --git a/sites/all/modules/custom/ds/ds.views.inc b/sites/all/modules/contrib/ds/ds.views.inc similarity index 100% rename from sites/all/modules/custom/ds/ds.views.inc rename to sites/all/modules/contrib/ds/ds.views.inc diff --git a/sites/all/modules/custom/ds/images/arrow.png b/sites/all/modules/contrib/ds/images/arrow.png similarity index 100% rename from sites/all/modules/custom/ds/images/arrow.png rename to sites/all/modules/contrib/ds/images/arrow.png diff --git a/sites/all/modules/custom/ds/images/preview.png b/sites/all/modules/contrib/ds/images/preview.png similarity index 100% rename from sites/all/modules/custom/ds/images/preview.png rename to sites/all/modules/contrib/ds/images/preview.png diff --git a/sites/all/modules/custom/ds/includes/ds.contextual.inc b/sites/all/modules/contrib/ds/includes/ds.contextual.inc similarity index 100% rename from sites/all/modules/custom/ds/includes/ds.contextual.inc rename to sites/all/modules/contrib/ds/includes/ds.contextual.inc diff --git a/sites/all/modules/custom/ds/includes/ds.displays.inc b/sites/all/modules/contrib/ds/includes/ds.displays.inc similarity index 100% rename from sites/all/modules/custom/ds/includes/ds.displays.inc rename to sites/all/modules/contrib/ds/includes/ds.displays.inc diff --git a/sites/all/modules/custom/ds/includes/ds.field_ui.inc b/sites/all/modules/contrib/ds/includes/ds.field_ui.inc similarity index 100% rename from sites/all/modules/custom/ds/includes/ds.field_ui.inc rename to sites/all/modules/contrib/ds/includes/ds.field_ui.inc diff --git a/sites/all/modules/custom/ds/includes/ds.registry.inc b/sites/all/modules/contrib/ds/includes/ds.registry.inc similarity index 100% rename from sites/all/modules/custom/ds/includes/ds.registry.inc rename to sites/all/modules/contrib/ds/includes/ds.registry.inc diff --git a/sites/all/modules/custom/ds/includes/ds.revision.inc b/sites/all/modules/contrib/ds/includes/ds.revision.inc similarity index 100% rename from sites/all/modules/custom/ds/includes/ds.revision.inc rename to sites/all/modules/contrib/ds/includes/ds.revision.inc diff --git a/sites/all/modules/custom/ds/js/ds.admin.js b/sites/all/modules/contrib/ds/js/ds.admin.js similarity index 100% rename from sites/all/modules/custom/ds/js/ds.admin.js rename to sites/all/modules/contrib/ds/js/ds.admin.js diff --git a/sites/all/modules/custom/ds/layouts/ds_1col/ds-1col.tpl.php b/sites/all/modules/contrib/ds/layouts/ds_1col/ds-1col.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_1col/ds-1col.tpl.php rename to sites/all/modules/contrib/ds/layouts/ds_1col/ds-1col.tpl.php diff --git a/sites/all/modules/custom/ds/layouts/ds_1col/ds_1col.png b/sites/all/modules/contrib/ds/layouts/ds_1col/ds_1col.png similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_1col/ds_1col.png rename to sites/all/modules/contrib/ds/layouts/ds_1col/ds_1col.png diff --git a/sites/all/modules/custom/ds/layouts/ds_1col_wrapper/ds-1col-wrapper.tpl.php b/sites/all/modules/contrib/ds/layouts/ds_1col_wrapper/ds-1col-wrapper.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_1col_wrapper/ds-1col-wrapper.tpl.php rename to sites/all/modules/contrib/ds/layouts/ds_1col_wrapper/ds-1col-wrapper.tpl.php diff --git a/sites/all/modules/custom/ds/layouts/ds_1col_wrapper/ds_1col_wrapper.png b/sites/all/modules/contrib/ds/layouts/ds_1col_wrapper/ds_1col_wrapper.png similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_1col_wrapper/ds_1col_wrapper.png rename to sites/all/modules/contrib/ds/layouts/ds_1col_wrapper/ds_1col_wrapper.png diff --git a/sites/all/modules/custom/ds/layouts/ds_2col/ds-2col.tpl.php b/sites/all/modules/contrib/ds/layouts/ds_2col/ds-2col.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col/ds-2col.tpl.php rename to sites/all/modules/contrib/ds/layouts/ds_2col/ds-2col.tpl.php diff --git a/sites/all/modules/custom/ds/layouts/ds_2col/ds_2col-rtl.css b/sites/all/modules/contrib/ds/layouts/ds_2col/ds_2col-rtl.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col/ds_2col-rtl.css rename to sites/all/modules/contrib/ds/layouts/ds_2col/ds_2col-rtl.css diff --git a/sites/all/modules/custom/ds/layouts/ds_2col/ds_2col.css b/sites/all/modules/contrib/ds/layouts/ds_2col/ds_2col.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col/ds_2col.css rename to sites/all/modules/contrib/ds/layouts/ds_2col/ds_2col.css diff --git a/sites/all/modules/custom/ds/layouts/ds_2col/ds_2col.png b/sites/all/modules/contrib/ds/layouts/ds_2col/ds_2col.png similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col/ds_2col.png rename to sites/all/modules/contrib/ds/layouts/ds_2col/ds_2col.png diff --git a/sites/all/modules/custom/ds/layouts/ds_2col_fluid/ds-2col-fluid.tpl.php b/sites/all/modules/contrib/ds/layouts/ds_2col_fluid/ds-2col-fluid.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col_fluid/ds-2col-fluid.tpl.php rename to sites/all/modules/contrib/ds/layouts/ds_2col_fluid/ds-2col-fluid.tpl.php diff --git a/sites/all/modules/custom/ds/layouts/ds_2col_fluid/ds_2col_fluid-rtl.css b/sites/all/modules/contrib/ds/layouts/ds_2col_fluid/ds_2col_fluid-rtl.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col_fluid/ds_2col_fluid-rtl.css rename to sites/all/modules/contrib/ds/layouts/ds_2col_fluid/ds_2col_fluid-rtl.css diff --git a/sites/all/modules/custom/ds/layouts/ds_2col_fluid/ds_2col_fluid.css b/sites/all/modules/contrib/ds/layouts/ds_2col_fluid/ds_2col_fluid.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col_fluid/ds_2col_fluid.css rename to sites/all/modules/contrib/ds/layouts/ds_2col_fluid/ds_2col_fluid.css diff --git a/sites/all/modules/custom/ds/layouts/ds_2col_fluid/ds_2col_fluid.png b/sites/all/modules/contrib/ds/layouts/ds_2col_fluid/ds_2col_fluid.png similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col_fluid/ds_2col_fluid.png rename to sites/all/modules/contrib/ds/layouts/ds_2col_fluid/ds_2col_fluid.png diff --git a/sites/all/modules/custom/ds/layouts/ds_2col_stacked/ds-2col-stacked.tpl.php b/sites/all/modules/contrib/ds/layouts/ds_2col_stacked/ds-2col-stacked.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col_stacked/ds-2col-stacked.tpl.php rename to sites/all/modules/contrib/ds/layouts/ds_2col_stacked/ds-2col-stacked.tpl.php diff --git a/sites/all/modules/custom/ds/layouts/ds_2col_stacked/ds_2col_stacked-rtl.css b/sites/all/modules/contrib/ds/layouts/ds_2col_stacked/ds_2col_stacked-rtl.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col_stacked/ds_2col_stacked-rtl.css rename to sites/all/modules/contrib/ds/layouts/ds_2col_stacked/ds_2col_stacked-rtl.css diff --git a/sites/all/modules/custom/ds/layouts/ds_2col_stacked/ds_2col_stacked.css b/sites/all/modules/contrib/ds/layouts/ds_2col_stacked/ds_2col_stacked.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col_stacked/ds_2col_stacked.css rename to sites/all/modules/contrib/ds/layouts/ds_2col_stacked/ds_2col_stacked.css diff --git a/sites/all/modules/custom/ds/layouts/ds_2col_stacked/ds_2col_stacked.png b/sites/all/modules/contrib/ds/layouts/ds_2col_stacked/ds_2col_stacked.png similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col_stacked/ds_2col_stacked.png rename to sites/all/modules/contrib/ds/layouts/ds_2col_stacked/ds_2col_stacked.png diff --git a/sites/all/modules/custom/ds/layouts/ds_2col_stacked_fluid/ds-2col-stacked-fluid.tpl.php b/sites/all/modules/contrib/ds/layouts/ds_2col_stacked_fluid/ds-2col-stacked-fluid.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col_stacked_fluid/ds-2col-stacked-fluid.tpl.php rename to sites/all/modules/contrib/ds/layouts/ds_2col_stacked_fluid/ds-2col-stacked-fluid.tpl.php diff --git a/sites/all/modules/custom/ds/layouts/ds_2col_stacked_fluid/ds_2col_stacked_fluid-rtl.css b/sites/all/modules/contrib/ds/layouts/ds_2col_stacked_fluid/ds_2col_stacked_fluid-rtl.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col_stacked_fluid/ds_2col_stacked_fluid-rtl.css rename to sites/all/modules/contrib/ds/layouts/ds_2col_stacked_fluid/ds_2col_stacked_fluid-rtl.css diff --git a/sites/all/modules/custom/ds/layouts/ds_2col_stacked_fluid/ds_2col_stacked_fluid.css b/sites/all/modules/contrib/ds/layouts/ds_2col_stacked_fluid/ds_2col_stacked_fluid.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col_stacked_fluid/ds_2col_stacked_fluid.css rename to sites/all/modules/contrib/ds/layouts/ds_2col_stacked_fluid/ds_2col_stacked_fluid.css diff --git a/sites/all/modules/custom/ds/layouts/ds_2col_stacked_fluid/ds_2col_stacked_fluid.png b/sites/all/modules/contrib/ds/layouts/ds_2col_stacked_fluid/ds_2col_stacked_fluid.png similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_2col_stacked_fluid/ds_2col_stacked_fluid.png rename to sites/all/modules/contrib/ds/layouts/ds_2col_stacked_fluid/ds_2col_stacked_fluid.png diff --git a/sites/all/modules/custom/ds/layouts/ds_3col/ds-3col.tpl.php b/sites/all/modules/contrib/ds/layouts/ds_3col/ds-3col.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col/ds-3col.tpl.php rename to sites/all/modules/contrib/ds/layouts/ds_3col/ds-3col.tpl.php diff --git a/sites/all/modules/custom/ds/layouts/ds_3col/ds_3col-rtl.css b/sites/all/modules/contrib/ds/layouts/ds_3col/ds_3col-rtl.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col/ds_3col-rtl.css rename to sites/all/modules/contrib/ds/layouts/ds_3col/ds_3col-rtl.css diff --git a/sites/all/modules/custom/ds/layouts/ds_3col/ds_3col.css b/sites/all/modules/contrib/ds/layouts/ds_3col/ds_3col.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col/ds_3col.css rename to sites/all/modules/contrib/ds/layouts/ds_3col/ds_3col.css diff --git a/sites/all/modules/custom/ds/layouts/ds_3col/ds_3col.png b/sites/all/modules/contrib/ds/layouts/ds_3col/ds_3col.png similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col/ds_3col.png rename to sites/all/modules/contrib/ds/layouts/ds_3col/ds_3col.png diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_equal_width/ds-3col-equal-width.tpl.php b/sites/all/modules/contrib/ds/layouts/ds_3col_equal_width/ds-3col-equal-width.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_equal_width/ds-3col-equal-width.tpl.php rename to sites/all/modules/contrib/ds/layouts/ds_3col_equal_width/ds-3col-equal-width.tpl.php diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_equal_width/ds_3col_equal_width-rtl.css b/sites/all/modules/contrib/ds/layouts/ds_3col_equal_width/ds_3col_equal_width-rtl.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_equal_width/ds_3col_equal_width-rtl.css rename to sites/all/modules/contrib/ds/layouts/ds_3col_equal_width/ds_3col_equal_width-rtl.css diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_equal_width/ds_3col_equal_width.css b/sites/all/modules/contrib/ds/layouts/ds_3col_equal_width/ds_3col_equal_width.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_equal_width/ds_3col_equal_width.css rename to sites/all/modules/contrib/ds/layouts/ds_3col_equal_width/ds_3col_equal_width.css diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_equal_width/ds_3col_equal_width.png b/sites/all/modules/contrib/ds/layouts/ds_3col_equal_width/ds_3col_equal_width.png similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_equal_width/ds_3col_equal_width.png rename to sites/all/modules/contrib/ds/layouts/ds_3col_equal_width/ds_3col_equal_width.png diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_stacked/ds-3col-stacked.tpl.php b/sites/all/modules/contrib/ds/layouts/ds_3col_stacked/ds-3col-stacked.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_stacked/ds-3col-stacked.tpl.php rename to sites/all/modules/contrib/ds/layouts/ds_3col_stacked/ds-3col-stacked.tpl.php diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_stacked/ds_3col_stacked-rtl.css b/sites/all/modules/contrib/ds/layouts/ds_3col_stacked/ds_3col_stacked-rtl.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_stacked/ds_3col_stacked-rtl.css rename to sites/all/modules/contrib/ds/layouts/ds_3col_stacked/ds_3col_stacked-rtl.css diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_stacked/ds_3col_stacked.css b/sites/all/modules/contrib/ds/layouts/ds_3col_stacked/ds_3col_stacked.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_stacked/ds_3col_stacked.css rename to sites/all/modules/contrib/ds/layouts/ds_3col_stacked/ds_3col_stacked.css diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_stacked/ds_3col_stacked.png b/sites/all/modules/contrib/ds/layouts/ds_3col_stacked/ds_3col_stacked.png similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_stacked/ds_3col_stacked.png rename to sites/all/modules/contrib/ds/layouts/ds_3col_stacked/ds_3col_stacked.png diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_stacked_equal_width/ds-3col-stacked-equal-width.tpl.php b/sites/all/modules/contrib/ds/layouts/ds_3col_stacked_equal_width/ds-3col-stacked-equal-width.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_stacked_equal_width/ds-3col-stacked-equal-width.tpl.php rename to sites/all/modules/contrib/ds/layouts/ds_3col_stacked_equal_width/ds-3col-stacked-equal-width.tpl.php diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_stacked_equal_width/ds_3col_stacked_equal_width-rtl.css b/sites/all/modules/contrib/ds/layouts/ds_3col_stacked_equal_width/ds_3col_stacked_equal_width-rtl.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_stacked_equal_width/ds_3col_stacked_equal_width-rtl.css rename to sites/all/modules/contrib/ds/layouts/ds_3col_stacked_equal_width/ds_3col_stacked_equal_width-rtl.css diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_stacked_equal_width/ds_3col_stacked_equal_width.css b/sites/all/modules/contrib/ds/layouts/ds_3col_stacked_equal_width/ds_3col_stacked_equal_width.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_stacked_equal_width/ds_3col_stacked_equal_width.css rename to sites/all/modules/contrib/ds/layouts/ds_3col_stacked_equal_width/ds_3col_stacked_equal_width.css diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_stacked_equal_width/ds_3col_stacked_equal_width.png b/sites/all/modules/contrib/ds/layouts/ds_3col_stacked_equal_width/ds_3col_stacked_equal_width.png similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_stacked_equal_width/ds_3col_stacked_equal_width.png rename to sites/all/modules/contrib/ds/layouts/ds_3col_stacked_equal_width/ds_3col_stacked_equal_width.png diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_stacked_fluid/ds-3col-stacked-fluid.tpl.php b/sites/all/modules/contrib/ds/layouts/ds_3col_stacked_fluid/ds-3col-stacked-fluid.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_stacked_fluid/ds-3col-stacked-fluid.tpl.php rename to sites/all/modules/contrib/ds/layouts/ds_3col_stacked_fluid/ds-3col-stacked-fluid.tpl.php diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_stacked_fluid/ds_3col_stacked_fluid-rtl.css b/sites/all/modules/contrib/ds/layouts/ds_3col_stacked_fluid/ds_3col_stacked_fluid-rtl.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_stacked_fluid/ds_3col_stacked_fluid-rtl.css rename to sites/all/modules/contrib/ds/layouts/ds_3col_stacked_fluid/ds_3col_stacked_fluid-rtl.css diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_stacked_fluid/ds_3col_stacked_fluid.css b/sites/all/modules/contrib/ds/layouts/ds_3col_stacked_fluid/ds_3col_stacked_fluid.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_stacked_fluid/ds_3col_stacked_fluid.css rename to sites/all/modules/contrib/ds/layouts/ds_3col_stacked_fluid/ds_3col_stacked_fluid.css diff --git a/sites/all/modules/custom/ds/layouts/ds_3col_stacked_fluid/ds_3col_stacked_fluid.png b/sites/all/modules/contrib/ds/layouts/ds_3col_stacked_fluid/ds_3col_stacked_fluid.png similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_3col_stacked_fluid/ds_3col_stacked_fluid.png rename to sites/all/modules/contrib/ds/layouts/ds_3col_stacked_fluid/ds_3col_stacked_fluid.png diff --git a/sites/all/modules/custom/ds/layouts/ds_4col/ds-4col.tpl.php b/sites/all/modules/contrib/ds/layouts/ds_4col/ds-4col.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_4col/ds-4col.tpl.php rename to sites/all/modules/contrib/ds/layouts/ds_4col/ds-4col.tpl.php diff --git a/sites/all/modules/custom/ds/layouts/ds_4col/ds_4col-rtl.css b/sites/all/modules/contrib/ds/layouts/ds_4col/ds_4col-rtl.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_4col/ds_4col-rtl.css rename to sites/all/modules/contrib/ds/layouts/ds_4col/ds_4col-rtl.css diff --git a/sites/all/modules/custom/ds/layouts/ds_4col/ds_4col.css b/sites/all/modules/contrib/ds/layouts/ds_4col/ds_4col.css similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_4col/ds_4col.css rename to sites/all/modules/contrib/ds/layouts/ds_4col/ds_4col.css diff --git a/sites/all/modules/custom/ds/layouts/ds_4col/ds_4col.png b/sites/all/modules/contrib/ds/layouts/ds_4col/ds_4col.png similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_4col/ds_4col.png rename to sites/all/modules/contrib/ds/layouts/ds_4col/ds_4col.png diff --git a/sites/all/modules/custom/ds/layouts/ds_reset/ds-reset.tpl.php b/sites/all/modules/contrib/ds/layouts/ds_reset/ds-reset.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_reset/ds-reset.tpl.php rename to sites/all/modules/contrib/ds/layouts/ds_reset/ds-reset.tpl.php diff --git a/sites/all/modules/custom/ds/layouts/ds_reset/ds_reset.png b/sites/all/modules/contrib/ds/layouts/ds_reset/ds_reset.png similarity index 100% rename from sites/all/modules/custom/ds/layouts/ds_reset/ds_reset.png rename to sites/all/modules/contrib/ds/layouts/ds_reset/ds_reset.png diff --git a/sites/all/modules/custom/ds/modules/ds_devel/ds_devel.info b/sites/all/modules/contrib/ds/modules/ds_devel/ds_devel.info similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_devel/ds_devel.info rename to sites/all/modules/contrib/ds/modules/ds_devel/ds_devel.info diff --git a/sites/all/modules/custom/ds/modules/ds_devel/ds_devel.module b/sites/all/modules/contrib/ds/modules/ds_devel/ds_devel.module similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_devel/ds_devel.module rename to sites/all/modules/contrib/ds/modules/ds_devel/ds_devel.module diff --git a/sites/all/modules/custom/ds/modules/ds_extras/README.txt b/sites/all/modules/contrib/ds/modules/ds_extras/README.txt similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_extras/README.txt rename to sites/all/modules/contrib/ds/modules/ds_extras/README.txt diff --git a/sites/all/modules/custom/ds/modules/ds_extras/ds_extras.ds_fields_info.inc b/sites/all/modules/contrib/ds/modules/ds_extras/ds_extras.ds_fields_info.inc similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_extras/ds_extras.ds_fields_info.inc rename to sites/all/modules/contrib/ds/modules/ds_extras/ds_extras.ds_fields_info.inc diff --git a/sites/all/modules/custom/ds/modules/ds_extras/ds_extras.info b/sites/all/modules/contrib/ds/modules/ds_extras/ds_extras.info similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_extras/ds_extras.info rename to sites/all/modules/contrib/ds/modules/ds_extras/ds_extras.info diff --git a/sites/all/modules/custom/ds/modules/ds_extras/ds_extras.install b/sites/all/modules/contrib/ds/modules/ds_extras/ds_extras.install similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_extras/ds_extras.install rename to sites/all/modules/contrib/ds/modules/ds_extras/ds_extras.install diff --git a/sites/all/modules/custom/ds/modules/ds_extras/ds_extras.module b/sites/all/modules/contrib/ds/modules/ds_extras/ds_extras.module similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_extras/ds_extras.module rename to sites/all/modules/contrib/ds/modules/ds_extras/ds_extras.module diff --git a/sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.admin.inc b/sites/all/modules/contrib/ds/modules/ds_extras/includes/ds_extras.admin.inc similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.admin.inc rename to sites/all/modules/contrib/ds/modules/ds_extras/includes/ds_extras.admin.inc diff --git a/sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.pages.inc b/sites/all/modules/contrib/ds/modules/ds_extras/includes/ds_extras.pages.inc similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.pages.inc rename to sites/all/modules/contrib/ds/modules/ds_extras/includes/ds_extras.pages.inc diff --git a/sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.registry.inc b/sites/all/modules/contrib/ds/modules/ds_extras/includes/ds_extras.registry.inc similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.registry.inc rename to sites/all/modules/contrib/ds/modules/ds_extras/includes/ds_extras.registry.inc diff --git a/sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.vd.inc b/sites/all/modules/contrib/ds/modules/ds_extras/includes/ds_extras.vd.inc similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_extras/includes/ds_extras.vd.inc rename to sites/all/modules/contrib/ds/modules/ds_extras/includes/ds_extras.vd.inc diff --git a/sites/all/modules/custom/ds/modules/ds_extras/js/ds_extras.admin.js b/sites/all/modules/contrib/ds/modules/ds_extras/js/ds_extras.admin.js similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_extras/js/ds_extras.admin.js rename to sites/all/modules/contrib/ds/modules/ds_extras/js/ds_extras.admin.js diff --git a/sites/all/modules/custom/ds/modules/ds_extras/js/ds_extras.js b/sites/all/modules/contrib/ds/modules/ds_extras/js/ds_extras.js similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_extras/js/ds_extras.js rename to sites/all/modules/contrib/ds/modules/ds_extras/js/ds_extras.js diff --git a/sites/all/modules/custom/ds/modules/ds_format/ds_format.info b/sites/all/modules/contrib/ds/modules/ds_format/ds_format.info similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_format/ds_format.info rename to sites/all/modules/contrib/ds/modules/ds_format/ds_format.info diff --git a/sites/all/modules/custom/ds/modules/ds_format/ds_format.install b/sites/all/modules/contrib/ds/modules/ds_format/ds_format.install similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_format/ds_format.install rename to sites/all/modules/contrib/ds/modules/ds_format/ds_format.install diff --git a/sites/all/modules/custom/ds/modules/ds_format/ds_format.module b/sites/all/modules/contrib/ds/modules/ds_format/ds_format.module similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_format/ds_format.module rename to sites/all/modules/contrib/ds/modules/ds_format/ds_format.module diff --git a/sites/all/modules/custom/ds/modules/ds_forms/css/ds_forms.admin.css b/sites/all/modules/contrib/ds/modules/ds_forms/css/ds_forms.admin.css similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_forms/css/ds_forms.admin.css rename to sites/all/modules/contrib/ds/modules/ds_forms/css/ds_forms.admin.css diff --git a/sites/all/modules/custom/ds/modules/ds_forms/ds_forms.info b/sites/all/modules/contrib/ds/modules/ds_forms/ds_forms.info similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_forms/ds_forms.info rename to sites/all/modules/contrib/ds/modules/ds_forms/ds_forms.info diff --git a/sites/all/modules/custom/ds/modules/ds_forms/ds_forms.install b/sites/all/modules/contrib/ds/modules/ds_forms/ds_forms.install similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_forms/ds_forms.install rename to sites/all/modules/contrib/ds/modules/ds_forms/ds_forms.install diff --git a/sites/all/modules/custom/ds/modules/ds_forms/ds_forms.module b/sites/all/modules/contrib/ds/modules/ds_forms/ds_forms.module similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_forms/ds_forms.module rename to sites/all/modules/contrib/ds/modules/ds_forms/ds_forms.module diff --git a/sites/all/modules/custom/ds/modules/ds_forms/js/ds_forms.admin.js b/sites/all/modules/contrib/ds/modules/ds_forms/js/ds_forms.admin.js similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_forms/js/ds_forms.admin.js rename to sites/all/modules/contrib/ds/modules/ds_forms/js/ds_forms.admin.js diff --git a/sites/all/modules/custom/ds/modules/ds_search/css/ds_search.theme.css b/sites/all/modules/contrib/ds/modules/ds_search/css/ds_search.theme.css similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_search/css/ds_search.theme.css rename to sites/all/modules/contrib/ds/modules/ds_search/css/ds_search.theme.css diff --git a/sites/all/modules/custom/ds/modules/ds_search/ds_search.info b/sites/all/modules/contrib/ds/modules/ds_search/ds_search.info similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_search/ds_search.info rename to sites/all/modules/contrib/ds/modules/ds_search/ds_search.info diff --git a/sites/all/modules/custom/ds/modules/ds_search/ds_search.install b/sites/all/modules/contrib/ds/modules/ds_search/ds_search.install similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_search/ds_search.install rename to sites/all/modules/contrib/ds/modules/ds_search/ds_search.install diff --git a/sites/all/modules/custom/ds/modules/ds_search/ds_search.module b/sites/all/modules/contrib/ds/modules/ds_search/ds_search.module similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_search/ds_search.module rename to sites/all/modules/contrib/ds/modules/ds_search/ds_search.module diff --git a/sites/all/modules/custom/ds/modules/ds_search/includes/ds_search.admin.inc b/sites/all/modules/contrib/ds/modules/ds_search/includes/ds_search.admin.inc similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_search/includes/ds_search.admin.inc rename to sites/all/modules/contrib/ds/modules/ds_search/includes/ds_search.admin.inc diff --git a/sites/all/modules/custom/ds/modules/ds_search/js/ds_search.js b/sites/all/modules/contrib/ds/modules/ds_search/js/ds_search.js similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_search/js/ds_search.js rename to sites/all/modules/contrib/ds/modules/ds_search/js/ds_search.js diff --git a/sites/all/modules/custom/ds/modules/ds_ui/ds_ui.info b/sites/all/modules/contrib/ds/modules/ds_ui/ds_ui.info similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_ui/ds_ui.info rename to sites/all/modules/contrib/ds/modules/ds_ui/ds_ui.info diff --git a/sites/all/modules/custom/ds/modules/ds_ui/ds_ui.module b/sites/all/modules/contrib/ds/modules/ds_ui/ds_ui.module similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_ui/ds_ui.module rename to sites/all/modules/contrib/ds/modules/ds_ui/ds_ui.module diff --git a/sites/all/modules/custom/ds/modules/ds_ui/includes/ds.classes.inc b/sites/all/modules/contrib/ds/modules/ds_ui/includes/ds.classes.inc similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_ui/includes/ds.classes.inc rename to sites/all/modules/contrib/ds/modules/ds_ui/includes/ds.classes.inc diff --git a/sites/all/modules/custom/ds/modules/ds_ui/includes/ds.fields.inc b/sites/all/modules/contrib/ds/modules/ds_ui/includes/ds.fields.inc similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_ui/includes/ds.fields.inc rename to sites/all/modules/contrib/ds/modules/ds_ui/includes/ds.fields.inc diff --git a/sites/all/modules/custom/ds/modules/ds_ui/includes/ds.view_modes.inc b/sites/all/modules/contrib/ds/modules/ds_ui/includes/ds.view_modes.inc similarity index 100% rename from sites/all/modules/custom/ds/modules/ds_ui/includes/ds.view_modes.inc rename to sites/all/modules/contrib/ds/modules/ds_ui/includes/ds.view_modes.inc diff --git a/sites/all/modules/custom/ds/plugins/content_types/dsc/dsc.inc b/sites/all/modules/contrib/ds/plugins/content_types/dsc/dsc.inc similarity index 100% rename from sites/all/modules/custom/ds/plugins/content_types/dsc/dsc.inc rename to sites/all/modules/contrib/ds/plugins/content_types/dsc/dsc.inc diff --git a/sites/all/modules/custom/ds/tests/ds.base.test b/sites/all/modules/contrib/ds/tests/ds.base.test similarity index 100% rename from sites/all/modules/custom/ds/tests/ds.base.test rename to sites/all/modules/contrib/ds/tests/ds.base.test diff --git a/sites/all/modules/custom/ds/tests/ds.entities.test b/sites/all/modules/contrib/ds/tests/ds.entities.test similarity index 100% rename from sites/all/modules/custom/ds/tests/ds.entities.test rename to sites/all/modules/contrib/ds/tests/ds.entities.test diff --git a/sites/all/modules/custom/ds/tests/ds.exportables.test b/sites/all/modules/contrib/ds/tests/ds.exportables.test similarity index 100% rename from sites/all/modules/custom/ds/tests/ds.exportables.test rename to sites/all/modules/contrib/ds/tests/ds.exportables.test diff --git a/sites/all/modules/custom/ds/tests/ds.forms.test b/sites/all/modules/contrib/ds/tests/ds.forms.test similarity index 100% rename from sites/all/modules/custom/ds/tests/ds.forms.test rename to sites/all/modules/contrib/ds/tests/ds.forms.test diff --git a/sites/all/modules/custom/ds/tests/ds.search.test b/sites/all/modules/contrib/ds/tests/ds.search.test similarity index 100% rename from sites/all/modules/custom/ds/tests/ds.search.test rename to sites/all/modules/contrib/ds/tests/ds.search.test diff --git a/sites/all/modules/custom/ds/tests/ds.views.test b/sites/all/modules/contrib/ds/tests/ds.views.test similarity index 100% rename from sites/all/modules/custom/ds/tests/ds.views.test rename to sites/all/modules/contrib/ds/tests/ds.views.test diff --git a/sites/all/modules/custom/ds/tests/ds_exportables_test/ds_exportables_test.info b/sites/all/modules/contrib/ds/tests/ds_exportables_test/ds_exportables_test.info similarity index 100% rename from sites/all/modules/custom/ds/tests/ds_exportables_test/ds_exportables_test.info rename to sites/all/modules/contrib/ds/tests/ds_exportables_test/ds_exportables_test.info diff --git a/sites/all/modules/custom/ds/tests/ds_exportables_test/ds_exportables_test.module b/sites/all/modules/contrib/ds/tests/ds_exportables_test/ds_exportables_test.module similarity index 100% rename from sites/all/modules/custom/ds/tests/ds_exportables_test/ds_exportables_test.module rename to sites/all/modules/contrib/ds/tests/ds_exportables_test/ds_exportables_test.module diff --git a/sites/all/modules/custom/ds/tests/ds_test.info b/sites/all/modules/contrib/ds/tests/ds_test.info similarity index 100% rename from sites/all/modules/custom/ds/tests/ds_test.info rename to sites/all/modules/contrib/ds/tests/ds_test.info diff --git a/sites/all/modules/custom/ds/tests/ds_test.module b/sites/all/modules/contrib/ds/tests/ds_test.module similarity index 100% rename from sites/all/modules/custom/ds/tests/ds_test.module rename to sites/all/modules/contrib/ds/tests/ds_test.module diff --git a/sites/all/modules/custom/ds/tests/ds_test.views_default.inc b/sites/all/modules/contrib/ds/tests/ds_test.views_default.inc similarity index 100% rename from sites/all/modules/custom/ds/tests/ds_test.views_default.inc rename to sites/all/modules/contrib/ds/tests/ds_test.views_default.inc diff --git a/sites/all/modules/custom/ds/tests/dstest_1col/dstest-1col.tpl.php b/sites/all/modules/contrib/ds/tests/dstest_1col/dstest-1col.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/tests/dstest_1col/dstest-1col.tpl.php rename to sites/all/modules/contrib/ds/tests/dstest_1col/dstest-1col.tpl.php diff --git a/sites/all/modules/custom/ds/tests/dstest_2col/dstest-2col.tpl.php b/sites/all/modules/contrib/ds/tests/dstest_2col/dstest-2col.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/tests/dstest_2col/dstest-2col.tpl.php rename to sites/all/modules/contrib/ds/tests/dstest_2col/dstest-2col.tpl.php diff --git a/sites/all/modules/custom/ds/tests/dstest_2col/dstest_2col.css b/sites/all/modules/contrib/ds/tests/dstest_2col/dstest_2col.css similarity index 100% rename from sites/all/modules/custom/ds/tests/dstest_2col/dstest_2col.css rename to sites/all/modules/contrib/ds/tests/dstest_2col/dstest_2col.css diff --git a/sites/all/modules/custom/ds/views/ds-row-fields.tpl.php b/sites/all/modules/contrib/ds/views/ds-row-fields.tpl.php similarity index 100% rename from sites/all/modules/custom/ds/views/ds-row-fields.tpl.php rename to sites/all/modules/contrib/ds/views/ds-row-fields.tpl.php diff --git a/sites/all/modules/custom/ds/views/views_plugin_ds_entity_view.inc b/sites/all/modules/contrib/ds/views/views_plugin_ds_entity_view.inc similarity index 100% rename from sites/all/modules/custom/ds/views/views_plugin_ds_entity_view.inc rename to sites/all/modules/contrib/ds/views/views_plugin_ds_entity_view.inc diff --git a/sites/all/modules/custom/ds/views/views_plugin_ds_fields_view.inc b/sites/all/modules/contrib/ds/views/views_plugin_ds_fields_view.inc similarity index 100% rename from sites/all/modules/custom/ds/views/views_plugin_ds_fields_view.inc rename to sites/all/modules/contrib/ds/views/views_plugin_ds_fields_view.inc diff --git a/sites/all/modules/custom/eva/LICENSE.txt b/sites/all/modules/contrib/entity/LICENSE.txt old mode 100644 new mode 100755 similarity index 100% rename from sites/all/modules/custom/eva/LICENSE.txt rename to sites/all/modules/contrib/entity/LICENSE.txt diff --git a/sites/all/modules/custom/entity/README.txt b/sites/all/modules/contrib/entity/README.txt similarity index 100% rename from sites/all/modules/custom/entity/README.txt rename to sites/all/modules/contrib/entity/README.txt diff --git a/sites/all/modules/custom/entity/ctools/content_types/entity_view.inc b/sites/all/modules/contrib/entity/ctools/content_types/entity_view.inc similarity index 100% rename from sites/all/modules/custom/entity/ctools/content_types/entity_view.inc rename to sites/all/modules/contrib/entity/ctools/content_types/entity_view.inc diff --git a/sites/all/modules/custom/entity/entity.api.php b/sites/all/modules/contrib/entity/entity.api.php similarity index 100% rename from sites/all/modules/custom/entity/entity.api.php rename to sites/all/modules/contrib/entity/entity.api.php diff --git a/sites/all/modules/custom/entity/entity.features.inc b/sites/all/modules/contrib/entity/entity.features.inc similarity index 100% rename from sites/all/modules/custom/entity/entity.features.inc rename to sites/all/modules/contrib/entity/entity.features.inc diff --git a/sites/all/modules/custom/entity/entity.i18n.inc b/sites/all/modules/contrib/entity/entity.i18n.inc similarity index 100% rename from sites/all/modules/custom/entity/entity.i18n.inc rename to sites/all/modules/contrib/entity/entity.i18n.inc diff --git a/sites/all/modules/custom/entity/entity.info b/sites/all/modules/contrib/entity/entity.info similarity index 100% rename from sites/all/modules/custom/entity/entity.info rename to sites/all/modules/contrib/entity/entity.info diff --git a/sites/all/modules/custom/entity/entity.info.inc b/sites/all/modules/contrib/entity/entity.info.inc similarity index 100% rename from sites/all/modules/custom/entity/entity.info.inc rename to sites/all/modules/contrib/entity/entity.info.inc diff --git a/sites/all/modules/custom/entity/entity.install b/sites/all/modules/contrib/entity/entity.install similarity index 100% rename from sites/all/modules/custom/entity/entity.install rename to sites/all/modules/contrib/entity/entity.install diff --git a/sites/all/modules/custom/entity/entity.module b/sites/all/modules/contrib/entity/entity.module similarity index 100% rename from sites/all/modules/custom/entity/entity.module rename to sites/all/modules/contrib/entity/entity.module diff --git a/sites/all/modules/custom/entity/entity.rules.inc b/sites/all/modules/contrib/entity/entity.rules.inc similarity index 100% rename from sites/all/modules/custom/entity/entity.rules.inc rename to sites/all/modules/contrib/entity/entity.rules.inc diff --git a/sites/all/modules/custom/entity/entity.test b/sites/all/modules/contrib/entity/entity.test similarity index 100% rename from sites/all/modules/custom/entity/entity.test rename to sites/all/modules/contrib/entity/entity.test diff --git a/sites/all/modules/custom/entity/entity_token.info b/sites/all/modules/contrib/entity/entity_token.info similarity index 100% rename from sites/all/modules/custom/entity/entity_token.info rename to sites/all/modules/contrib/entity/entity_token.info diff --git a/sites/all/modules/custom/entity/entity_token.module b/sites/all/modules/contrib/entity/entity_token.module similarity index 100% rename from sites/all/modules/custom/entity/entity_token.module rename to sites/all/modules/contrib/entity/entity_token.module diff --git a/sites/all/modules/custom/entity/entity_token.tokens.inc b/sites/all/modules/contrib/entity/entity_token.tokens.inc similarity index 100% rename from sites/all/modules/custom/entity/entity_token.tokens.inc rename to sites/all/modules/contrib/entity/entity_token.tokens.inc diff --git a/sites/all/modules/custom/entity/includes/entity.controller.inc b/sites/all/modules/contrib/entity/includes/entity.controller.inc similarity index 100% rename from sites/all/modules/custom/entity/includes/entity.controller.inc rename to sites/all/modules/contrib/entity/includes/entity.controller.inc diff --git a/sites/all/modules/custom/entity/includes/entity.inc b/sites/all/modules/contrib/entity/includes/entity.inc similarity index 100% rename from sites/all/modules/custom/entity/includes/entity.inc rename to sites/all/modules/contrib/entity/includes/entity.inc diff --git a/sites/all/modules/custom/entity/includes/entity.property.inc b/sites/all/modules/contrib/entity/includes/entity.property.inc similarity index 100% rename from sites/all/modules/custom/entity/includes/entity.property.inc rename to sites/all/modules/contrib/entity/includes/entity.property.inc diff --git a/sites/all/modules/custom/entity/includes/entity.ui.inc b/sites/all/modules/contrib/entity/includes/entity.ui.inc similarity index 100% rename from sites/all/modules/custom/entity/includes/entity.ui.inc rename to sites/all/modules/contrib/entity/includes/entity.ui.inc diff --git a/sites/all/modules/custom/entity/includes/entity.wrapper.inc b/sites/all/modules/contrib/entity/includes/entity.wrapper.inc similarity index 100% rename from sites/all/modules/custom/entity/includes/entity.wrapper.inc rename to sites/all/modules/contrib/entity/includes/entity.wrapper.inc diff --git a/sites/all/modules/custom/entity/modules/book.info.inc b/sites/all/modules/contrib/entity/modules/book.info.inc similarity index 100% rename from sites/all/modules/custom/entity/modules/book.info.inc rename to sites/all/modules/contrib/entity/modules/book.info.inc diff --git a/sites/all/modules/custom/entity/modules/callbacks.inc b/sites/all/modules/contrib/entity/modules/callbacks.inc similarity index 100% rename from sites/all/modules/custom/entity/modules/callbacks.inc rename to sites/all/modules/contrib/entity/modules/callbacks.inc diff --git a/sites/all/modules/custom/entity/modules/comment.info.inc b/sites/all/modules/contrib/entity/modules/comment.info.inc similarity index 100% rename from sites/all/modules/custom/entity/modules/comment.info.inc rename to sites/all/modules/contrib/entity/modules/comment.info.inc diff --git a/sites/all/modules/custom/entity/modules/field.info.inc b/sites/all/modules/contrib/entity/modules/field.info.inc similarity index 100% rename from sites/all/modules/custom/entity/modules/field.info.inc rename to sites/all/modules/contrib/entity/modules/field.info.inc diff --git a/sites/all/modules/custom/entity/modules/locale.info.inc b/sites/all/modules/contrib/entity/modules/locale.info.inc similarity index 100% rename from sites/all/modules/custom/entity/modules/locale.info.inc rename to sites/all/modules/contrib/entity/modules/locale.info.inc diff --git a/sites/all/modules/custom/entity/modules/node.info.inc b/sites/all/modules/contrib/entity/modules/node.info.inc similarity index 100% rename from sites/all/modules/custom/entity/modules/node.info.inc rename to sites/all/modules/contrib/entity/modules/node.info.inc diff --git a/sites/all/modules/custom/entity/modules/poll.info.inc b/sites/all/modules/contrib/entity/modules/poll.info.inc similarity index 100% rename from sites/all/modules/custom/entity/modules/poll.info.inc rename to sites/all/modules/contrib/entity/modules/poll.info.inc diff --git a/sites/all/modules/custom/entity/modules/statistics.info.inc b/sites/all/modules/contrib/entity/modules/statistics.info.inc similarity index 100% rename from sites/all/modules/custom/entity/modules/statistics.info.inc rename to sites/all/modules/contrib/entity/modules/statistics.info.inc diff --git a/sites/all/modules/custom/entity/modules/system.info.inc b/sites/all/modules/contrib/entity/modules/system.info.inc similarity index 100% rename from sites/all/modules/custom/entity/modules/system.info.inc rename to sites/all/modules/contrib/entity/modules/system.info.inc diff --git a/sites/all/modules/custom/entity/modules/taxonomy.info.inc b/sites/all/modules/contrib/entity/modules/taxonomy.info.inc similarity index 100% rename from sites/all/modules/custom/entity/modules/taxonomy.info.inc rename to sites/all/modules/contrib/entity/modules/taxonomy.info.inc diff --git a/sites/all/modules/custom/entity/modules/user.info.inc b/sites/all/modules/contrib/entity/modules/user.info.inc similarity index 100% rename from sites/all/modules/custom/entity/modules/user.info.inc rename to sites/all/modules/contrib/entity/modules/user.info.inc diff --git a/sites/all/modules/custom/entity/tests/entity_feature.info b/sites/all/modules/contrib/entity/tests/entity_feature.info similarity index 100% rename from sites/all/modules/custom/entity/tests/entity_feature.info rename to sites/all/modules/contrib/entity/tests/entity_feature.info diff --git a/sites/all/modules/custom/entity/tests/entity_feature.module b/sites/all/modules/contrib/entity/tests/entity_feature.module similarity index 100% rename from sites/all/modules/custom/entity/tests/entity_feature.module rename to sites/all/modules/contrib/entity/tests/entity_feature.module diff --git a/sites/all/modules/custom/entity/tests/entity_test.info b/sites/all/modules/contrib/entity/tests/entity_test.info similarity index 100% rename from sites/all/modules/custom/entity/tests/entity_test.info rename to sites/all/modules/contrib/entity/tests/entity_test.info diff --git a/sites/all/modules/custom/entity/tests/entity_test.install b/sites/all/modules/contrib/entity/tests/entity_test.install similarity index 100% rename from sites/all/modules/custom/entity/tests/entity_test.install rename to sites/all/modules/contrib/entity/tests/entity_test.install diff --git a/sites/all/modules/custom/entity/tests/entity_test.module b/sites/all/modules/contrib/entity/tests/entity_test.module similarity index 100% rename from sites/all/modules/custom/entity/tests/entity_test.module rename to sites/all/modules/contrib/entity/tests/entity_test.module diff --git a/sites/all/modules/custom/entity/tests/entity_test_i18n.info b/sites/all/modules/contrib/entity/tests/entity_test_i18n.info similarity index 100% rename from sites/all/modules/custom/entity/tests/entity_test_i18n.info rename to sites/all/modules/contrib/entity/tests/entity_test_i18n.info diff --git a/sites/all/modules/custom/entity/tests/entity_test_i18n.module b/sites/all/modules/contrib/entity/tests/entity_test_i18n.module similarity index 100% rename from sites/all/modules/custom/entity/tests/entity_test_i18n.module rename to sites/all/modules/contrib/entity/tests/entity_test_i18n.module diff --git a/sites/all/modules/custom/entity/theme/entity.theme.css b/sites/all/modules/contrib/entity/theme/entity.theme.css similarity index 100% rename from sites/all/modules/custom/entity/theme/entity.theme.css rename to sites/all/modules/contrib/entity/theme/entity.theme.css diff --git a/sites/all/modules/custom/entity/theme/entity.theme.inc b/sites/all/modules/contrib/entity/theme/entity.theme.inc similarity index 100% rename from sites/all/modules/custom/entity/theme/entity.theme.inc rename to sites/all/modules/contrib/entity/theme/entity.theme.inc diff --git a/sites/all/modules/custom/entity/theme/entity.tpl.php b/sites/all/modules/contrib/entity/theme/entity.tpl.php similarity index 100% rename from sites/all/modules/custom/entity/theme/entity.tpl.php rename to sites/all/modules/contrib/entity/theme/entity.tpl.php diff --git a/sites/all/modules/custom/entity/views/entity.views.inc b/sites/all/modules/contrib/entity/views/entity.views.inc similarity index 100% rename from sites/all/modules/custom/entity/views/entity.views.inc rename to sites/all/modules/contrib/entity/views/entity.views.inc diff --git a/sites/all/modules/custom/entity/views/entity_views_example_query.php b/sites/all/modules/contrib/entity/views/entity_views_example_query.php similarity index 100% rename from sites/all/modules/custom/entity/views/entity_views_example_query.php rename to sites/all/modules/contrib/entity/views/entity_views_example_query.php diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_field_handler_helper.inc b/sites/all/modules/contrib/entity/views/handlers/entity_views_field_handler_helper.inc similarity index 100% rename from sites/all/modules/custom/entity/views/handlers/entity_views_field_handler_helper.inc rename to sites/all/modules/contrib/entity/views/handlers/entity_views_field_handler_helper.inc diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_area_entity.inc b/sites/all/modules/contrib/entity/views/handlers/entity_views_handler_area_entity.inc similarity index 100% rename from sites/all/modules/custom/entity/views/handlers/entity_views_handler_area_entity.inc rename to sites/all/modules/contrib/entity/views/handlers/entity_views_handler_area_entity.inc diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_boolean.inc b/sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_boolean.inc similarity index 100% rename from sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_boolean.inc rename to sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_boolean.inc diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_date.inc b/sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_date.inc similarity index 100% rename from sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_date.inc rename to sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_date.inc diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_duration.inc b/sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_duration.inc similarity index 100% rename from sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_duration.inc rename to sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_duration.inc diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_entity.inc b/sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_entity.inc similarity index 100% rename from sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_entity.inc rename to sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_entity.inc diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_field.inc b/sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_field.inc similarity index 100% rename from sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_field.inc rename to sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_field.inc diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_numeric.inc b/sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_numeric.inc similarity index 100% rename from sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_numeric.inc rename to sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_numeric.inc diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_options.inc b/sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_options.inc similarity index 100% rename from sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_options.inc rename to sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_options.inc diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_text.inc b/sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_text.inc similarity index 100% rename from sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_text.inc rename to sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_text.inc diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_uri.inc b/sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_uri.inc similarity index 100% rename from sites/all/modules/custom/entity/views/handlers/entity_views_handler_field_uri.inc rename to sites/all/modules/contrib/entity/views/handlers/entity_views_handler_field_uri.inc diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_relationship.inc b/sites/all/modules/contrib/entity/views/handlers/entity_views_handler_relationship.inc similarity index 100% rename from sites/all/modules/custom/entity/views/handlers/entity_views_handler_relationship.inc rename to sites/all/modules/contrib/entity/views/handlers/entity_views_handler_relationship.inc diff --git a/sites/all/modules/custom/entity/views/handlers/entity_views_handler_relationship_by_bundle.inc b/sites/all/modules/contrib/entity/views/handlers/entity_views_handler_relationship_by_bundle.inc similarity index 100% rename from sites/all/modules/custom/entity/views/handlers/entity_views_handler_relationship_by_bundle.inc rename to sites/all/modules/contrib/entity/views/handlers/entity_views_handler_relationship_by_bundle.inc diff --git a/sites/all/modules/custom/entity/views/plugins/entity_views_plugin_row_entity_view.inc b/sites/all/modules/contrib/entity/views/plugins/entity_views_plugin_row_entity_view.inc similarity index 100% rename from sites/all/modules/custom/entity/views/plugins/entity_views_plugin_row_entity_view.inc rename to sites/all/modules/contrib/entity/views/plugins/entity_views_plugin_row_entity_view.inc diff --git a/sites/all/modules/custom/entity_dependency/EntityDependencyIterator.inc b/sites/all/modules/contrib/entity_dependency/EntityDependencyIterator.inc similarity index 100% rename from sites/all/modules/custom/entity_dependency/EntityDependencyIterator.inc rename to sites/all/modules/contrib/entity_dependency/EntityDependencyIterator.inc diff --git a/sites/all/modules/custom/entity_dependency/EntityDependencyIteratorInterface.inc b/sites/all/modules/contrib/entity_dependency/EntityDependencyIteratorInterface.inc similarity index 100% rename from sites/all/modules/custom/entity_dependency/EntityDependencyIteratorInterface.inc rename to sites/all/modules/contrib/entity_dependency/EntityDependencyIteratorInterface.inc diff --git a/sites/all/modules/custom/features/LICENSE.txt b/sites/all/modules/contrib/entity_dependency/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/features/LICENSE.txt rename to sites/all/modules/contrib/entity_dependency/LICENSE.txt diff --git a/sites/all/modules/custom/entity_dependency/README.txt b/sites/all/modules/contrib/entity_dependency/README.txt similarity index 100% rename from sites/all/modules/custom/entity_dependency/README.txt rename to sites/all/modules/contrib/entity_dependency/README.txt diff --git a/sites/all/modules/custom/entity_dependency/entity_dependency.api.php b/sites/all/modules/contrib/entity_dependency/entity_dependency.api.php similarity index 100% rename from sites/all/modules/custom/entity_dependency/entity_dependency.api.php rename to sites/all/modules/contrib/entity_dependency/entity_dependency.api.php diff --git a/sites/all/modules/custom/entity_dependency/entity_dependency.core.inc b/sites/all/modules/contrib/entity_dependency/entity_dependency.core.inc similarity index 100% rename from sites/all/modules/custom/entity_dependency/entity_dependency.core.inc rename to sites/all/modules/contrib/entity_dependency/entity_dependency.core.inc diff --git a/sites/all/modules/custom/entity_dependency/entity_dependency.info b/sites/all/modules/contrib/entity_dependency/entity_dependency.info similarity index 100% rename from sites/all/modules/custom/entity_dependency/entity_dependency.info rename to sites/all/modules/contrib/entity_dependency/entity_dependency.info diff --git a/sites/all/modules/custom/entity_dependency/entity_dependency.module b/sites/all/modules/contrib/entity_dependency/entity_dependency.module similarity index 100% rename from sites/all/modules/custom/entity_dependency/entity_dependency.module rename to sites/all/modules/contrib/entity_dependency/entity_dependency.module diff --git a/sites/all/modules/custom/entity_dependency/entity_dependency.test b/sites/all/modules/contrib/entity_dependency/entity_dependency.test similarity index 100% rename from sites/all/modules/custom/entity_dependency/entity_dependency.test rename to sites/all/modules/contrib/entity_dependency/entity_dependency.test diff --git a/sites/all/modules/custom/field_group/LICENSE.txt b/sites/all/modules/contrib/entityreference/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/field_group/LICENSE.txt rename to sites/all/modules/contrib/entityreference/LICENSE.txt diff --git a/sites/all/modules/custom/entityreference/README.txt b/sites/all/modules/contrib/entityreference/README.txt similarity index 100% rename from sites/all/modules/custom/entityreference/README.txt rename to sites/all/modules/contrib/entityreference/README.txt diff --git a/sites/all/modules/custom/entityreference/entityreference.admin.css b/sites/all/modules/contrib/entityreference/entityreference.admin.css similarity index 100% rename from sites/all/modules/custom/entityreference/entityreference.admin.css rename to sites/all/modules/contrib/entityreference/entityreference.admin.css diff --git a/sites/all/modules/custom/entityreference/entityreference.devel_generate.inc b/sites/all/modules/contrib/entityreference/entityreference.devel_generate.inc similarity index 100% rename from sites/all/modules/custom/entityreference/entityreference.devel_generate.inc rename to sites/all/modules/contrib/entityreference/entityreference.devel_generate.inc diff --git a/sites/all/modules/custom/entityreference/entityreference.diff.inc b/sites/all/modules/contrib/entityreference/entityreference.diff.inc similarity index 100% rename from sites/all/modules/custom/entityreference/entityreference.diff.inc rename to sites/all/modules/contrib/entityreference/entityreference.diff.inc diff --git a/sites/all/modules/custom/entityreference/entityreference.feeds.inc b/sites/all/modules/contrib/entityreference/entityreference.feeds.inc similarity index 100% rename from sites/all/modules/custom/entityreference/entityreference.feeds.inc rename to sites/all/modules/contrib/entityreference/entityreference.feeds.inc diff --git a/sites/all/modules/custom/entityreference/entityreference.info b/sites/all/modules/contrib/entityreference/entityreference.info similarity index 100% rename from sites/all/modules/custom/entityreference/entityreference.info rename to sites/all/modules/contrib/entityreference/entityreference.info diff --git a/sites/all/modules/custom/entityreference/entityreference.install b/sites/all/modules/contrib/entityreference/entityreference.install similarity index 100% rename from sites/all/modules/custom/entityreference/entityreference.install rename to sites/all/modules/contrib/entityreference/entityreference.install diff --git a/sites/all/modules/custom/entityreference/entityreference.migrate.inc b/sites/all/modules/contrib/entityreference/entityreference.migrate.inc similarity index 100% rename from sites/all/modules/custom/entityreference/entityreference.migrate.inc rename to sites/all/modules/contrib/entityreference/entityreference.migrate.inc diff --git a/sites/all/modules/custom/entityreference/entityreference.module b/sites/all/modules/contrib/entityreference/entityreference.module similarity index 100% rename from sites/all/modules/custom/entityreference/entityreference.module rename to sites/all/modules/contrib/entityreference/entityreference.module diff --git a/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.info b/sites/all/modules/contrib/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.info similarity index 100% rename from sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.info rename to sites/all/modules/contrib/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.info diff --git a/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.module b/sites/all/modules/contrib/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.module similarity index 100% rename from sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.module rename to sites/all/modules/contrib/entityreference/examples/entityreference_behavior_example/entityreference_behavior_example.module diff --git a/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceFieldBehaviorExample.class.php b/sites/all/modules/contrib/entityreference/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceFieldBehaviorExample.class.php similarity index 100% rename from sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceFieldBehaviorExample.class.php rename to sites/all/modules/contrib/entityreference/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceFieldBehaviorExample.class.php diff --git a/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceInstanceBehaviorExample.class.php b/sites/all/modules/contrib/entityreference/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceInstanceBehaviorExample.class.php similarity index 100% rename from sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceInstanceBehaviorExample.class.php rename to sites/all/modules/contrib/entityreference/examples/entityreference_behavior_example/plugins/behavior/EntityReferenceInstanceBehaviorExample.class.php diff --git a/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_field_behavior.inc b/sites/all/modules/contrib/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_field_behavior.inc similarity index 100% rename from sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_field_behavior.inc rename to sites/all/modules/contrib/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_field_behavior.inc diff --git a/sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_instance_behavior.inc b/sites/all/modules/contrib/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_instance_behavior.inc similarity index 100% rename from sites/all/modules/custom/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_instance_behavior.inc rename to sites/all/modules/contrib/entityreference/examples/entityreference_behavior_example/plugins/behavior/test_instance_behavior.inc diff --git a/sites/all/modules/custom/entityreference/plugins/behavior/EntityReferenceBehavior_TaxonomyIndex.class.php b/sites/all/modules/contrib/entityreference/plugins/behavior/EntityReferenceBehavior_TaxonomyIndex.class.php similarity index 100% rename from sites/all/modules/custom/entityreference/plugins/behavior/EntityReferenceBehavior_TaxonomyIndex.class.php rename to sites/all/modules/contrib/entityreference/plugins/behavior/EntityReferenceBehavior_TaxonomyIndex.class.php diff --git a/sites/all/modules/custom/entityreference/plugins/behavior/EntityReferenceBehavior_ViewsFilterSelect.class.php b/sites/all/modules/contrib/entityreference/plugins/behavior/EntityReferenceBehavior_ViewsFilterSelect.class.php similarity index 100% rename from sites/all/modules/custom/entityreference/plugins/behavior/EntityReferenceBehavior_ViewsFilterSelect.class.php rename to sites/all/modules/contrib/entityreference/plugins/behavior/EntityReferenceBehavior_ViewsFilterSelect.class.php diff --git a/sites/all/modules/custom/entityreference/plugins/behavior/abstract.inc b/sites/all/modules/contrib/entityreference/plugins/behavior/abstract.inc similarity index 100% rename from sites/all/modules/custom/entityreference/plugins/behavior/abstract.inc rename to sites/all/modules/contrib/entityreference/plugins/behavior/abstract.inc diff --git a/sites/all/modules/custom/entityreference/plugins/behavior/taxonomy-index.inc b/sites/all/modules/contrib/entityreference/plugins/behavior/taxonomy-index.inc similarity index 100% rename from sites/all/modules/custom/entityreference/plugins/behavior/taxonomy-index.inc rename to sites/all/modules/contrib/entityreference/plugins/behavior/taxonomy-index.inc diff --git a/sites/all/modules/custom/entityreference/plugins/behavior/views-select-list.inc b/sites/all/modules/contrib/entityreference/plugins/behavior/views-select-list.inc similarity index 100% rename from sites/all/modules/custom/entityreference/plugins/behavior/views-select-list.inc rename to sites/all/modules/contrib/entityreference/plugins/behavior/views-select-list.inc diff --git a/sites/all/modules/custom/entityreference/plugins/selection/EntityReference_SelectionHandler_Generic.class.php b/sites/all/modules/contrib/entityreference/plugins/selection/EntityReference_SelectionHandler_Generic.class.php similarity index 100% rename from sites/all/modules/custom/entityreference/plugins/selection/EntityReference_SelectionHandler_Generic.class.php rename to sites/all/modules/contrib/entityreference/plugins/selection/EntityReference_SelectionHandler_Generic.class.php diff --git a/sites/all/modules/custom/entityreference/plugins/selection/EntityReference_SelectionHandler_Views.class.php b/sites/all/modules/contrib/entityreference/plugins/selection/EntityReference_SelectionHandler_Views.class.php similarity index 100% rename from sites/all/modules/custom/entityreference/plugins/selection/EntityReference_SelectionHandler_Views.class.php rename to sites/all/modules/contrib/entityreference/plugins/selection/EntityReference_SelectionHandler_Views.class.php diff --git a/sites/all/modules/custom/entityreference/plugins/selection/abstract.inc b/sites/all/modules/contrib/entityreference/plugins/selection/abstract.inc similarity index 100% rename from sites/all/modules/custom/entityreference/plugins/selection/abstract.inc rename to sites/all/modules/contrib/entityreference/plugins/selection/abstract.inc diff --git a/sites/all/modules/custom/entityreference/plugins/selection/base.inc b/sites/all/modules/contrib/entityreference/plugins/selection/base.inc similarity index 100% rename from sites/all/modules/custom/entityreference/plugins/selection/base.inc rename to sites/all/modules/contrib/entityreference/plugins/selection/base.inc diff --git a/sites/all/modules/custom/entityreference/plugins/selection/views.inc b/sites/all/modules/contrib/entityreference/plugins/selection/views.inc similarity index 100% rename from sites/all/modules/custom/entityreference/plugins/selection/views.inc rename to sites/all/modules/contrib/entityreference/plugins/selection/views.inc diff --git a/sites/all/modules/custom/entityreference/tests/entityreference.admin.test b/sites/all/modules/contrib/entityreference/tests/entityreference.admin.test similarity index 100% rename from sites/all/modules/custom/entityreference/tests/entityreference.admin.test rename to sites/all/modules/contrib/entityreference/tests/entityreference.admin.test diff --git a/sites/all/modules/custom/entityreference/tests/entityreference.feeds.test b/sites/all/modules/contrib/entityreference/tests/entityreference.feeds.test similarity index 100% rename from sites/all/modules/custom/entityreference/tests/entityreference.feeds.test rename to sites/all/modules/contrib/entityreference/tests/entityreference.feeds.test diff --git a/sites/all/modules/custom/entityreference/tests/entityreference.handlers.test b/sites/all/modules/contrib/entityreference/tests/entityreference.handlers.test similarity index 100% rename from sites/all/modules/custom/entityreference/tests/entityreference.handlers.test rename to sites/all/modules/contrib/entityreference/tests/entityreference.handlers.test diff --git a/sites/all/modules/custom/entityreference/tests/entityreference.taxonomy.test b/sites/all/modules/contrib/entityreference/tests/entityreference.taxonomy.test similarity index 100% rename from sites/all/modules/custom/entityreference/tests/entityreference.taxonomy.test rename to sites/all/modules/contrib/entityreference/tests/entityreference.taxonomy.test diff --git a/sites/all/modules/custom/entityreference/tests/feeds_test.csv b/sites/all/modules/contrib/entityreference/tests/feeds_test.csv similarity index 100% rename from sites/all/modules/custom/entityreference/tests/feeds_test.csv rename to sites/all/modules/contrib/entityreference/tests/feeds_test.csv diff --git a/sites/all/modules/custom/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.info b/sites/all/modules/contrib/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.info similarity index 100% rename from sites/all/modules/custom/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.info rename to sites/all/modules/contrib/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.info diff --git a/sites/all/modules/custom/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.module b/sites/all/modules/contrib/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.module similarity index 100% rename from sites/all/modules/custom/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.module rename to sites/all/modules/contrib/entityreference/tests/modules/entityreference_feeds_test/entityreference_feeds_test.module diff --git a/sites/all/modules/custom/entityreference/views/entityreference.views.inc b/sites/all/modules/contrib/entityreference/views/entityreference.views.inc similarity index 100% rename from sites/all/modules/custom/entityreference/views/entityreference.views.inc rename to sites/all/modules/contrib/entityreference/views/entityreference.views.inc diff --git a/sites/all/modules/custom/entityreference/views/entityreference_plugin_display.inc b/sites/all/modules/contrib/entityreference/views/entityreference_plugin_display.inc similarity index 100% rename from sites/all/modules/custom/entityreference/views/entityreference_plugin_display.inc rename to sites/all/modules/contrib/entityreference/views/entityreference_plugin_display.inc diff --git a/sites/all/modules/custom/entityreference/views/entityreference_plugin_row_fields.inc b/sites/all/modules/contrib/entityreference/views/entityreference_plugin_row_fields.inc similarity index 100% rename from sites/all/modules/custom/entityreference/views/entityreference_plugin_row_fields.inc rename to sites/all/modules/contrib/entityreference/views/entityreference_plugin_row_fields.inc diff --git a/sites/all/modules/custom/entityreference/views/entityreference_plugin_style.inc b/sites/all/modules/contrib/entityreference/views/entityreference_plugin_style.inc similarity index 100% rename from sites/all/modules/custom/entityreference/views/entityreference_plugin_style.inc rename to sites/all/modules/contrib/entityreference/views/entityreference_plugin_style.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/LICENSE.txt b/sites/all/modules/contrib/eva/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/LICENSE.txt rename to sites/all/modules/contrib/eva/LICENSE.txt diff --git a/sites/all/modules/custom/eva/README.txt b/sites/all/modules/contrib/eva/README.txt similarity index 100% rename from sites/all/modules/custom/eva/README.txt rename to sites/all/modules/contrib/eva/README.txt diff --git a/sites/all/modules/custom/eva/eva-display-entity-view.tpl.php b/sites/all/modules/contrib/eva/eva-display-entity-view.tpl.php similarity index 100% rename from sites/all/modules/custom/eva/eva-display-entity-view.tpl.php rename to sites/all/modules/contrib/eva/eva-display-entity-view.tpl.php diff --git a/sites/all/modules/custom/eva/eva.info b/sites/all/modules/contrib/eva/eva.info similarity index 100% rename from sites/all/modules/custom/eva/eva.info rename to sites/all/modules/contrib/eva/eva.info diff --git a/sites/all/modules/custom/eva/eva.module b/sites/all/modules/contrib/eva/eva.module similarity index 100% rename from sites/all/modules/custom/eva/eva.module rename to sites/all/modules/contrib/eva/eva.module diff --git a/sites/all/modules/custom/eva/eva.theme.inc b/sites/all/modules/contrib/eva/eva.theme.inc similarity index 100% rename from sites/all/modules/custom/eva/eva.theme.inc rename to sites/all/modules/contrib/eva/eva.theme.inc diff --git a/sites/all/modules/custom/eva/eva.views.inc b/sites/all/modules/contrib/eva/eva.views.inc similarity index 100% rename from sites/all/modules/custom/eva/eva.views.inc rename to sites/all/modules/contrib/eva/eva.views.inc diff --git a/sites/all/modules/custom/eva/eva_plugin_display_entity.inc b/sites/all/modules/contrib/eva/eva_plugin_display_entity.inc similarity index 100% rename from sites/all/modules/custom/eva/eva_plugin_display_entity.inc rename to sites/all/modules/contrib/eva/eva_plugin_display_entity.inc diff --git a/sites/all/modules/custom/features/API.txt b/sites/all/modules/contrib/features/API.txt similarity index 100% rename from sites/all/modules/custom/features/API.txt rename to sites/all/modules/contrib/features/API.txt diff --git a/sites/all/modules/custom/features/CHANGELOG.txt b/sites/all/modules/contrib/features/CHANGELOG.txt similarity index 100% rename from sites/all/modules/custom/features/CHANGELOG.txt rename to sites/all/modules/contrib/features/CHANGELOG.txt diff --git a/sites/all/modules/custom/file_entity/LICENSE.txt b/sites/all/modules/contrib/features/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/file_entity/LICENSE.txt rename to sites/all/modules/contrib/features/LICENSE.txt diff --git a/sites/all/modules/custom/features/README.txt b/sites/all/modules/contrib/features/README.txt similarity index 100% rename from sites/all/modules/custom/features/README.txt rename to sites/all/modules/contrib/features/README.txt diff --git a/sites/all/modules/custom/features/features.admin.inc b/sites/all/modules/contrib/features/features.admin.inc similarity index 100% rename from sites/all/modules/custom/features/features.admin.inc rename to sites/all/modules/contrib/features/features.admin.inc diff --git a/sites/all/modules/custom/features/features.api.php b/sites/all/modules/contrib/features/features.api.php similarity index 100% rename from sites/all/modules/custom/features/features.api.php rename to sites/all/modules/contrib/features/features.api.php diff --git a/sites/all/modules/custom/features/features.css b/sites/all/modules/contrib/features/features.css similarity index 100% rename from sites/all/modules/custom/features/features.css rename to sites/all/modules/contrib/features/features.css diff --git a/sites/all/modules/custom/features/features.drush.inc b/sites/all/modules/contrib/features/features.drush.inc similarity index 100% rename from sites/all/modules/custom/features/features.drush.inc rename to sites/all/modules/contrib/features/features.drush.inc diff --git a/sites/all/modules/custom/features/features.export.inc b/sites/all/modules/contrib/features/features.export.inc similarity index 100% rename from sites/all/modules/custom/features/features.export.inc rename to sites/all/modules/contrib/features/features.export.inc diff --git a/sites/all/modules/custom/features/features.info b/sites/all/modules/contrib/features/features.info similarity index 100% rename from sites/all/modules/custom/features/features.info rename to sites/all/modules/contrib/features/features.info diff --git a/sites/all/modules/custom/features/features.install b/sites/all/modules/contrib/features/features.install similarity index 100% rename from sites/all/modules/custom/features/features.install rename to sites/all/modules/contrib/features/features.install diff --git a/sites/all/modules/custom/features/features.js b/sites/all/modules/contrib/features/features.js similarity index 100% rename from sites/all/modules/custom/features/features.js rename to sites/all/modules/contrib/features/features.js diff --git a/sites/all/modules/custom/features/features.module b/sites/all/modules/contrib/features/features.module similarity index 100% rename from sites/all/modules/custom/features/features.module rename to sites/all/modules/contrib/features/features.module diff --git a/sites/all/modules/custom/features/includes/features.block.inc b/sites/all/modules/contrib/features/includes/features.block.inc similarity index 100% rename from sites/all/modules/custom/features/includes/features.block.inc rename to sites/all/modules/contrib/features/includes/features.block.inc diff --git a/sites/all/modules/custom/features/includes/features.context.inc b/sites/all/modules/contrib/features/includes/features.context.inc similarity index 100% rename from sites/all/modules/custom/features/includes/features.context.inc rename to sites/all/modules/contrib/features/includes/features.context.inc diff --git a/sites/all/modules/custom/features/includes/features.ctools.inc b/sites/all/modules/contrib/features/includes/features.ctools.inc similarity index 100% rename from sites/all/modules/custom/features/includes/features.ctools.inc rename to sites/all/modules/contrib/features/includes/features.ctools.inc diff --git a/sites/all/modules/custom/features/includes/features.features.inc b/sites/all/modules/contrib/features/includes/features.features.inc similarity index 100% rename from sites/all/modules/custom/features/includes/features.features.inc rename to sites/all/modules/contrib/features/includes/features.features.inc diff --git a/sites/all/modules/custom/features/includes/features.field.inc b/sites/all/modules/contrib/features/includes/features.field.inc similarity index 100% rename from sites/all/modules/custom/features/includes/features.field.inc rename to sites/all/modules/contrib/features/includes/features.field.inc diff --git a/sites/all/modules/custom/features/includes/features.filter.inc b/sites/all/modules/contrib/features/includes/features.filter.inc similarity index 100% rename from sites/all/modules/custom/features/includes/features.filter.inc rename to sites/all/modules/contrib/features/includes/features.filter.inc diff --git a/sites/all/modules/custom/features/includes/features.image.inc b/sites/all/modules/contrib/features/includes/features.image.inc similarity index 100% rename from sites/all/modules/custom/features/includes/features.image.inc rename to sites/all/modules/contrib/features/includes/features.image.inc diff --git a/sites/all/modules/custom/features/includes/features.locale.inc b/sites/all/modules/contrib/features/includes/features.locale.inc similarity index 100% rename from sites/all/modules/custom/features/includes/features.locale.inc rename to sites/all/modules/contrib/features/includes/features.locale.inc diff --git a/sites/all/modules/custom/features/includes/features.menu.inc b/sites/all/modules/contrib/features/includes/features.menu.inc similarity index 100% rename from sites/all/modules/custom/features/includes/features.menu.inc rename to sites/all/modules/contrib/features/includes/features.menu.inc diff --git a/sites/all/modules/custom/features/includes/features.node.inc b/sites/all/modules/contrib/features/includes/features.node.inc similarity index 100% rename from sites/all/modules/custom/features/includes/features.node.inc rename to sites/all/modules/contrib/features/includes/features.node.inc diff --git a/sites/all/modules/custom/features/includes/features.taxonomy.inc b/sites/all/modules/contrib/features/includes/features.taxonomy.inc similarity index 100% rename from sites/all/modules/custom/features/includes/features.taxonomy.inc rename to sites/all/modules/contrib/features/includes/features.taxonomy.inc diff --git a/sites/all/modules/custom/features/includes/features.user.inc b/sites/all/modules/contrib/features/includes/features.user.inc similarity index 100% rename from sites/all/modules/custom/features/includes/features.user.inc rename to sites/all/modules/contrib/features/includes/features.user.inc diff --git a/sites/all/modules/custom/features/tests/features.test b/sites/all/modules/contrib/features/tests/features.test similarity index 100% rename from sites/all/modules/custom/features/tests/features.test rename to sites/all/modules/contrib/features/tests/features.test diff --git a/sites/all/modules/custom/features/tests/features_test/features_test.features.field_base.inc b/sites/all/modules/contrib/features/tests/features_test/features_test.features.field_base.inc similarity index 100% rename from sites/all/modules/custom/features/tests/features_test/features_test.features.field_base.inc rename to sites/all/modules/contrib/features/tests/features_test/features_test.features.field_base.inc diff --git a/sites/all/modules/custom/features/tests/features_test/features_test.features.field_instance.inc b/sites/all/modules/contrib/features/tests/features_test/features_test.features.field_instance.inc similarity index 100% rename from sites/all/modules/custom/features/tests/features_test/features_test.features.field_instance.inc rename to sites/all/modules/contrib/features/tests/features_test/features_test.features.field_instance.inc diff --git a/sites/all/modules/custom/features/tests/features_test/features_test.features.filter.inc b/sites/all/modules/contrib/features/tests/features_test/features_test.features.filter.inc similarity index 100% rename from sites/all/modules/custom/features/tests/features_test/features_test.features.filter.inc rename to sites/all/modules/contrib/features/tests/features_test/features_test.features.filter.inc diff --git a/sites/all/modules/custom/features/tests/features_test/features_test.features.inc b/sites/all/modules/contrib/features/tests/features_test/features_test.features.inc similarity index 100% rename from sites/all/modules/custom/features/tests/features_test/features_test.features.inc rename to sites/all/modules/contrib/features/tests/features_test/features_test.features.inc diff --git a/sites/all/modules/custom/features/tests/features_test/features_test.features.taxonomy.inc b/sites/all/modules/contrib/features/tests/features_test/features_test.features.taxonomy.inc similarity index 100% rename from sites/all/modules/custom/features/tests/features_test/features_test.features.taxonomy.inc rename to sites/all/modules/contrib/features/tests/features_test/features_test.features.taxonomy.inc diff --git a/sites/all/modules/custom/features/tests/features_test/features_test.features.user_permission.inc b/sites/all/modules/contrib/features/tests/features_test/features_test.features.user_permission.inc similarity index 100% rename from sites/all/modules/custom/features/tests/features_test/features_test.features.user_permission.inc rename to sites/all/modules/contrib/features/tests/features_test/features_test.features.user_permission.inc diff --git a/sites/all/modules/custom/features/tests/features_test/features_test.info b/sites/all/modules/contrib/features/tests/features_test/features_test.info similarity index 100% rename from sites/all/modules/custom/features/tests/features_test/features_test.info rename to sites/all/modules/contrib/features/tests/features_test/features_test.info diff --git a/sites/all/modules/custom/features/tests/features_test/features_test.module b/sites/all/modules/contrib/features/tests/features_test/features_test.module similarity index 100% rename from sites/all/modules/custom/features/tests/features_test/features_test.module rename to sites/all/modules/contrib/features/tests/features_test/features_test.module diff --git a/sites/all/modules/custom/features/tests/features_test/features_test.views_default.inc b/sites/all/modules/contrib/features/tests/features_test/features_test.views_default.inc similarity index 100% rename from sites/all/modules/custom/features/tests/features_test/features_test.views_default.inc rename to sites/all/modules/contrib/features/tests/features_test/features_test.views_default.inc diff --git a/sites/all/modules/custom/features/theme/features-admin-components.tpl.php b/sites/all/modules/contrib/features/theme/features-admin-components.tpl.php similarity index 100% rename from sites/all/modules/custom/features/theme/features-admin-components.tpl.php rename to sites/all/modules/contrib/features/theme/features-admin-components.tpl.php diff --git a/sites/all/modules/custom/features/theme/theme.inc b/sites/all/modules/contrib/features/theme/theme.inc similarity index 100% rename from sites/all/modules/custom/features/theme/theme.inc rename to sites/all/modules/contrib/features/theme/theme.inc diff --git a/sites/all/modules/custom/field_group/CHANGELOG.txt b/sites/all/modules/contrib/field_group/CHANGELOG.txt similarity index 100% rename from sites/all/modules/custom/field_group/CHANGELOG.txt rename to sites/all/modules/contrib/field_group/CHANGELOG.txt diff --git a/sites/all/modules/custom/filefield_paths/LICENSE.txt b/sites/all/modules/contrib/field_group/LICENSE.txt old mode 100644 new mode 100755 similarity index 100% rename from sites/all/modules/custom/filefield_paths/LICENSE.txt rename to sites/all/modules/contrib/field_group/LICENSE.txt diff --git a/sites/all/modules/custom/field_group/README.txt b/sites/all/modules/contrib/field_group/README.txt similarity index 100% rename from sites/all/modules/custom/field_group/README.txt rename to sites/all/modules/contrib/field_group/README.txt diff --git a/sites/all/modules/custom/field_group/field_group-rtl.css b/sites/all/modules/contrib/field_group/field_group-rtl.css similarity index 100% rename from sites/all/modules/custom/field_group/field_group-rtl.css rename to sites/all/modules/contrib/field_group/field_group-rtl.css diff --git a/sites/all/modules/custom/field_group/field_group.api.php b/sites/all/modules/contrib/field_group/field_group.api.php similarity index 100% rename from sites/all/modules/custom/field_group/field_group.api.php rename to sites/all/modules/contrib/field_group/field_group.api.php diff --git a/sites/all/modules/custom/field_group/field_group.css b/sites/all/modules/contrib/field_group/field_group.css similarity index 100% rename from sites/all/modules/custom/field_group/field_group.css rename to sites/all/modules/contrib/field_group/field_group.css diff --git a/sites/all/modules/custom/field_group/field_group.features.inc b/sites/all/modules/contrib/field_group/field_group.features.inc similarity index 100% rename from sites/all/modules/custom/field_group/field_group.features.inc rename to sites/all/modules/contrib/field_group/field_group.features.inc diff --git a/sites/all/modules/custom/field_group/field_group.field_ui.css b/sites/all/modules/contrib/field_group/field_group.field_ui.css similarity index 100% rename from sites/all/modules/custom/field_group/field_group.field_ui.css rename to sites/all/modules/contrib/field_group/field_group.field_ui.css diff --git a/sites/all/modules/custom/field_group/field_group.field_ui.inc b/sites/all/modules/contrib/field_group/field_group.field_ui.inc similarity index 100% rename from sites/all/modules/custom/field_group/field_group.field_ui.inc rename to sites/all/modules/contrib/field_group/field_group.field_ui.inc diff --git a/sites/all/modules/custom/field_group/field_group.field_ui.js b/sites/all/modules/contrib/field_group/field_group.field_ui.js similarity index 100% rename from sites/all/modules/custom/field_group/field_group.field_ui.js rename to sites/all/modules/contrib/field_group/field_group.field_ui.js diff --git a/sites/all/modules/custom/field_group/field_group.info b/sites/all/modules/contrib/field_group/field_group.info similarity index 100% rename from sites/all/modules/custom/field_group/field_group.info rename to sites/all/modules/contrib/field_group/field_group.info diff --git a/sites/all/modules/custom/field_group/field_group.install b/sites/all/modules/contrib/field_group/field_group.install similarity index 100% rename from sites/all/modules/custom/field_group/field_group.install rename to sites/all/modules/contrib/field_group/field_group.install diff --git a/sites/all/modules/custom/field_group/field_group.js b/sites/all/modules/contrib/field_group/field_group.js similarity index 100% rename from sites/all/modules/custom/field_group/field_group.js rename to sites/all/modules/contrib/field_group/field_group.js diff --git a/sites/all/modules/custom/field_group/field_group.module b/sites/all/modules/contrib/field_group/field_group.module similarity index 100% rename from sites/all/modules/custom/field_group/field_group.module rename to sites/all/modules/contrib/field_group/field_group.module diff --git a/sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs-rtl.css b/sites/all/modules/contrib/field_group/horizontal-tabs/horizontal-tabs-rtl.css similarity index 100% rename from sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs-rtl.css rename to sites/all/modules/contrib/field_group/horizontal-tabs/horizontal-tabs-rtl.css diff --git a/sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs.css b/sites/all/modules/contrib/field_group/horizontal-tabs/horizontal-tabs.css similarity index 100% rename from sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs.css rename to sites/all/modules/contrib/field_group/horizontal-tabs/horizontal-tabs.css diff --git a/sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs.js b/sites/all/modules/contrib/field_group/horizontal-tabs/horizontal-tabs.js similarity index 100% rename from sites/all/modules/custom/field_group/horizontal-tabs/horizontal-tabs.js rename to sites/all/modules/contrib/field_group/horizontal-tabs/horizontal-tabs.js diff --git a/sites/all/modules/custom/field_group/multipage/multipage-rtl.css b/sites/all/modules/contrib/field_group/multipage/multipage-rtl.css similarity index 100% rename from sites/all/modules/custom/field_group/multipage/multipage-rtl.css rename to sites/all/modules/contrib/field_group/multipage/multipage-rtl.css diff --git a/sites/all/modules/custom/field_group/multipage/multipage.css b/sites/all/modules/contrib/field_group/multipage/multipage.css similarity index 100% rename from sites/all/modules/custom/field_group/multipage/multipage.css rename to sites/all/modules/contrib/field_group/multipage/multipage.css diff --git a/sites/all/modules/custom/field_group/multipage/multipage.js b/sites/all/modules/contrib/field_group/multipage/multipage.js similarity index 100% rename from sites/all/modules/custom/field_group/multipage/multipage.js rename to sites/all/modules/contrib/field_group/multipage/multipage.js diff --git a/sites/all/modules/custom/field_group/tests/field_group.display.test b/sites/all/modules/contrib/field_group/tests/field_group.display.test similarity index 100% rename from sites/all/modules/custom/field_group/tests/field_group.display.test rename to sites/all/modules/contrib/field_group/tests/field_group.display.test diff --git a/sites/all/modules/custom/field_group/tests/field_group.ui.test b/sites/all/modules/contrib/field_group/tests/field_group.ui.test similarity index 100% rename from sites/all/modules/custom/field_group/tests/field_group.ui.test rename to sites/all/modules/contrib/field_group/tests/field_group.ui.test diff --git a/sites/all/modules/custom/field_group/tests/field_group_test.info b/sites/all/modules/contrib/field_group/tests/field_group_test.info similarity index 100% rename from sites/all/modules/custom/field_group/tests/field_group_test.info rename to sites/all/modules/contrib/field_group/tests/field_group_test.info diff --git a/sites/all/modules/custom/field_group/tests/field_group_test.module b/sites/all/modules/contrib/field_group/tests/field_group_test.module similarity index 100% rename from sites/all/modules/custom/field_group/tests/field_group_test.module rename to sites/all/modules/contrib/field_group/tests/field_group_test.module diff --git a/sites/all/modules/custom/filter_perms/LICENSE.txt b/sites/all/modules/contrib/fieldable_panels_panes/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/filter_perms/LICENSE.txt rename to sites/all/modules/contrib/fieldable_panels_panes/LICENSE.txt diff --git a/sites/all/modules/custom/fieldable_panels_panes/README.txt b/sites/all/modules/contrib/fieldable_panels_panes/README.txt similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/README.txt rename to sites/all/modules/contrib/fieldable_panels_panes/README.txt diff --git a/sites/all/modules/custom/fieldable_panels_panes/fieldable-panels-pane.tpl.php b/sites/all/modules/contrib/fieldable_panels_panes/fieldable-panels-pane.tpl.php similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/fieldable-panels-pane.tpl.php rename to sites/all/modules/contrib/fieldable_panels_panes/fieldable-panels-pane.tpl.php diff --git a/sites/all/modules/custom/fieldable_panels_panes/fieldable_panels_panes.info b/sites/all/modules/contrib/fieldable_panels_panes/fieldable_panels_panes.info similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/fieldable_panels_panes.info rename to sites/all/modules/contrib/fieldable_panels_panes/fieldable_panels_panes.info diff --git a/sites/all/modules/custom/fieldable_panels_panes/fieldable_panels_panes.install b/sites/all/modules/contrib/fieldable_panels_panes/fieldable_panels_panes.install similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/fieldable_panels_panes.install rename to sites/all/modules/contrib/fieldable_panels_panes/fieldable_panels_panes.install diff --git a/sites/all/modules/custom/fieldable_panels_panes/fieldable_panels_panes.module b/sites/all/modules/contrib/fieldable_panels_panes/fieldable_panels_panes.module similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/fieldable_panels_panes.module rename to sites/all/modules/contrib/fieldable_panels_panes/fieldable_panels_panes.module diff --git a/sites/all/modules/custom/fieldable_panels_panes/includes/PanelsPaneController.class.php b/sites/all/modules/contrib/fieldable_panels_panes/includes/PanelsPaneController.class.php similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/includes/PanelsPaneController.class.php rename to sites/all/modules/contrib/fieldable_panels_panes/includes/PanelsPaneController.class.php diff --git a/sites/all/modules/custom/fieldable_panels_panes/includes/admin.inc b/sites/all/modules/contrib/fieldable_panels_panes/includes/admin.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/includes/admin.inc rename to sites/all/modules/contrib/fieldable_panels_panes/includes/admin.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/includes/translation.handler.fieldable_panels_pane.inc b/sites/all/modules/contrib/fieldable_panels_panes/includes/translation.handler.fieldable_panels_pane.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/includes/translation.handler.fieldable_panels_pane.inc rename to sites/all/modules/contrib/fieldable_panels_panes/includes/translation.handler.fieldable_panels_pane.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/content_types/fieldable_panels_pane.inc b/sites/all/modules/contrib/fieldable_panels_panes/plugins/content_types/fieldable_panels_pane.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/content_types/fieldable_panels_pane.inc rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/content_types/fieldable_panels_pane.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/entity/FieldablePanelsPaneEntity.class.php b/sites/all/modules/contrib/fieldable_panels_panes/plugins/entity/FieldablePanelsPaneEntity.class.php similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/entity/FieldablePanelsPaneEntity.class.php rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/entity/FieldablePanelsPaneEntity.class.php diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/entity/fieldable_panels_pane.inc b/sites/all/modules/contrib/fieldable_panels_panes/plugins/entity/fieldable_panels_pane.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/entity/fieldable_panels_pane.inc rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/entity/fieldable_panels_pane.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes.views.inc b/sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes.views.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes.views.inc rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes.views.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes.views_default.inc b/sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes.views_default.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes.views_default.inc rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes.views_default.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_argument_bundle.inc b/sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_argument_bundle.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_argument_bundle.inc rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_argument_bundle.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_bundle.inc b/sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_bundle.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_bundle.inc rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_bundle.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_delete_entity.inc b/sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_delete_entity.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_delete_entity.inc rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_delete_entity.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_delete_revision.inc b/sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_delete_revision.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_delete_revision.inc rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_delete_revision.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_edit_entity.inc b/sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_edit_entity.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_edit_entity.inc rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_edit_entity.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_edit_revision.inc b/sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_edit_revision.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_edit_revision.inc rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_edit_revision.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_is_current.inc b/sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_is_current.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_is_current.inc rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_is_current.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_make_current.inc b/sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_make_current.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_make_current.inc rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_make_current.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_view_entity.inc b/sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_view_entity.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_view_entity.inc rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_view_entity.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_view_revision.inc b/sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_view_revision.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_view_revision.inc rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_field_view_revision.inc diff --git a/sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_filter_bundle.inc b/sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_filter_bundle.inc similarity index 100% rename from sites/all/modules/custom/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_filter_bundle.inc rename to sites/all/modules/contrib/fieldable_panels_panes/plugins/views/fieldable_panels_panes_handler_filter_bundle.inc diff --git a/sites/all/modules/custom/fitvids/LICENSE.txt b/sites/all/modules/contrib/file_entity/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/fitvids/LICENSE.txt rename to sites/all/modules/contrib/file_entity/LICENSE.txt diff --git a/sites/all/modules/custom/file_entity/admin_views_default/file.admin-content-file.inc b/sites/all/modules/contrib/file_entity/admin_views_default/file.admin-content-file.inc similarity index 100% rename from sites/all/modules/custom/file_entity/admin_views_default/file.admin-content-file.inc rename to sites/all/modules/contrib/file_entity/admin_views_default/file.admin-content-file.inc diff --git a/sites/all/modules/custom/file_entity/file_entity.admin.inc b/sites/all/modules/contrib/file_entity/file_entity.admin.inc similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.admin.inc rename to sites/all/modules/contrib/file_entity/file_entity.admin.inc diff --git a/sites/all/modules/custom/file_entity/file_entity.admin.js b/sites/all/modules/contrib/file_entity/file_entity.admin.js similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.admin.js rename to sites/all/modules/contrib/file_entity/file_entity.admin.js diff --git a/sites/all/modules/custom/file_entity/file_entity.api.php b/sites/all/modules/contrib/file_entity/file_entity.api.php similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.api.php rename to sites/all/modules/contrib/file_entity/file_entity.api.php diff --git a/sites/all/modules/custom/file_entity/file_entity.field.inc b/sites/all/modules/contrib/file_entity/file_entity.field.inc similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.field.inc rename to sites/all/modules/contrib/file_entity/file_entity.field.inc diff --git a/sites/all/modules/custom/file_entity/file_entity.file.inc b/sites/all/modules/contrib/file_entity/file_entity.file.inc similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.file.inc rename to sites/all/modules/contrib/file_entity/file_entity.file.inc diff --git a/sites/all/modules/custom/file_entity/file_entity.file_api.inc b/sites/all/modules/contrib/file_entity/file_entity.file_api.inc similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.file_api.inc rename to sites/all/modules/contrib/file_entity/file_entity.file_api.inc diff --git a/sites/all/modules/custom/file_entity/file_entity.file_default_displays.inc b/sites/all/modules/contrib/file_entity/file_entity.file_default_displays.inc similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.file_default_displays.inc rename to sites/all/modules/contrib/file_entity/file_entity.file_default_displays.inc diff --git a/sites/all/modules/custom/file_entity/file_entity.info b/sites/all/modules/contrib/file_entity/file_entity.info similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.info rename to sites/all/modules/contrib/file_entity/file_entity.info diff --git a/sites/all/modules/custom/file_entity/file_entity.install b/sites/all/modules/contrib/file_entity/file_entity.install similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.install rename to sites/all/modules/contrib/file_entity/file_entity.install diff --git a/sites/all/modules/custom/file_entity/file_entity.js b/sites/all/modules/contrib/file_entity/file_entity.js similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.js rename to sites/all/modules/contrib/file_entity/file_entity.js diff --git a/sites/all/modules/custom/file_entity/file_entity.module b/sites/all/modules/contrib/file_entity/file_entity.module similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.module rename to sites/all/modules/contrib/file_entity/file_entity.module diff --git a/sites/all/modules/custom/file_entity/file_entity.pages.inc b/sites/all/modules/contrib/file_entity/file_entity.pages.inc similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.pages.inc rename to sites/all/modules/contrib/file_entity/file_entity.pages.inc diff --git a/sites/all/modules/custom/file_entity/file_entity.pathauto.inc b/sites/all/modules/contrib/file_entity/file_entity.pathauto.inc similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.pathauto.inc rename to sites/all/modules/contrib/file_entity/file_entity.pathauto.inc diff --git a/sites/all/modules/custom/file_entity/file_entity.test b/sites/all/modules/contrib/file_entity/file_entity.test similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.test rename to sites/all/modules/contrib/file_entity/file_entity.test diff --git a/sites/all/modules/custom/file_entity/file_entity.theme.inc b/sites/all/modules/contrib/file_entity/file_entity.theme.inc similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.theme.inc rename to sites/all/modules/contrib/file_entity/file_entity.theme.inc diff --git a/sites/all/modules/custom/file_entity/file_entity.tokens.inc b/sites/all/modules/contrib/file_entity/file_entity.tokens.inc similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.tokens.inc rename to sites/all/modules/contrib/file_entity/file_entity.tokens.inc diff --git a/sites/all/modules/custom/file_entity/file_entity.tpl.php b/sites/all/modules/contrib/file_entity/file_entity.tpl.php similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.tpl.php rename to sites/all/modules/contrib/file_entity/file_entity.tpl.php diff --git a/sites/all/modules/custom/file_entity/file_entity.views.inc b/sites/all/modules/contrib/file_entity/file_entity.views.inc similarity index 100% rename from sites/all/modules/custom/file_entity/file_entity.views.inc rename to sites/all/modules/contrib/file_entity/file_entity.views.inc diff --git a/sites/all/modules/custom/file_entity/plugins/content_types/file_content.inc b/sites/all/modules/contrib/file_entity/plugins/content_types/file_content.inc similarity index 100% rename from sites/all/modules/custom/file_entity/plugins/content_types/file_content.inc rename to sites/all/modules/contrib/file_entity/plugins/content_types/file_content.inc diff --git a/sites/all/modules/custom/file_entity/plugins/content_types/file_display.inc b/sites/all/modules/contrib/file_entity/plugins/content_types/file_display.inc similarity index 100% rename from sites/all/modules/custom/file_entity/plugins/content_types/file_display.inc rename to sites/all/modules/contrib/file_entity/plugins/content_types/file_display.inc diff --git a/sites/all/modules/custom/file_entity/tests/file_entity_test.info b/sites/all/modules/contrib/file_entity/tests/file_entity_test.info similarity index 100% rename from sites/all/modules/custom/file_entity/tests/file_entity_test.info rename to sites/all/modules/contrib/file_entity/tests/file_entity_test.info diff --git a/sites/all/modules/custom/file_entity/tests/file_entity_test.module b/sites/all/modules/contrib/file_entity/tests/file_entity_test.module similarity index 100% rename from sites/all/modules/custom/file_entity/tests/file_entity_test.module rename to sites/all/modules/contrib/file_entity/tests/file_entity_test.module diff --git a/sites/all/modules/custom/file_entity/tests/file_entity_test.pages.inc b/sites/all/modules/contrib/file_entity/tests/file_entity_test.pages.inc similarity index 100% rename from sites/all/modules/custom/file_entity/tests/file_entity_test.pages.inc rename to sites/all/modules/contrib/file_entity/tests/file_entity_test.pages.inc diff --git a/sites/all/modules/custom/file_entity/views/views_handler_argument_file_type.inc b/sites/all/modules/contrib/file_entity/views/views_handler_argument_file_type.inc similarity index 100% rename from sites/all/modules/custom/file_entity/views/views_handler_argument_file_type.inc rename to sites/all/modules/contrib/file_entity/views/views_handler_argument_file_type.inc diff --git a/sites/all/modules/custom/file_entity/views/views_handler_field_file_filename.inc b/sites/all/modules/contrib/file_entity/views/views_handler_field_file_filename.inc similarity index 100% rename from sites/all/modules/custom/file_entity/views/views_handler_field_file_filename.inc rename to sites/all/modules/contrib/file_entity/views/views_handler_field_file_filename.inc diff --git a/sites/all/modules/custom/file_entity/views/views_handler_field_file_link.inc b/sites/all/modules/contrib/file_entity/views/views_handler_field_file_link.inc similarity index 100% rename from sites/all/modules/custom/file_entity/views/views_handler_field_file_link.inc rename to sites/all/modules/contrib/file_entity/views/views_handler_field_file_link.inc diff --git a/sites/all/modules/custom/file_entity/views/views_handler_field_file_link_delete.inc b/sites/all/modules/contrib/file_entity/views/views_handler_field_file_link_delete.inc similarity index 100% rename from sites/all/modules/custom/file_entity/views/views_handler_field_file_link_delete.inc rename to sites/all/modules/contrib/file_entity/views/views_handler_field_file_link_delete.inc diff --git a/sites/all/modules/custom/file_entity/views/views_handler_field_file_link_download.inc b/sites/all/modules/contrib/file_entity/views/views_handler_field_file_link_download.inc similarity index 100% rename from sites/all/modules/custom/file_entity/views/views_handler_field_file_link_download.inc rename to sites/all/modules/contrib/file_entity/views/views_handler_field_file_link_download.inc diff --git a/sites/all/modules/custom/file_entity/views/views_handler_field_file_link_edit.inc b/sites/all/modules/contrib/file_entity/views/views_handler_field_file_link_edit.inc similarity index 100% rename from sites/all/modules/custom/file_entity/views/views_handler_field_file_link_edit.inc rename to sites/all/modules/contrib/file_entity/views/views_handler_field_file_link_edit.inc diff --git a/sites/all/modules/custom/file_entity/views/views_handler_field_file_link_usage.inc b/sites/all/modules/contrib/file_entity/views/views_handler_field_file_link_usage.inc similarity index 100% rename from sites/all/modules/custom/file_entity/views/views_handler_field_file_link_usage.inc rename to sites/all/modules/contrib/file_entity/views/views_handler_field_file_link_usage.inc diff --git a/sites/all/modules/custom/file_entity/views/views_handler_field_file_rendered.inc b/sites/all/modules/contrib/file_entity/views/views_handler_field_file_rendered.inc similarity index 100% rename from sites/all/modules/custom/file_entity/views/views_handler_field_file_rendered.inc rename to sites/all/modules/contrib/file_entity/views/views_handler_field_file_rendered.inc diff --git a/sites/all/modules/custom/file_entity/views/views_handler_field_file_type.inc b/sites/all/modules/contrib/file_entity/views/views_handler_field_file_type.inc similarity index 100% rename from sites/all/modules/custom/file_entity/views/views_handler_field_file_type.inc rename to sites/all/modules/contrib/file_entity/views/views_handler_field_file_type.inc diff --git a/sites/all/modules/custom/file_entity/views/views_handler_filter_file_type.inc b/sites/all/modules/contrib/file_entity/views/views_handler_filter_file_type.inc similarity index 100% rename from sites/all/modules/custom/file_entity/views/views_handler_filter_file_type.inc rename to sites/all/modules/contrib/file_entity/views/views_handler_filter_file_type.inc diff --git a/sites/all/modules/custom/file_entity/views/views_handler_filter_schema_type.inc b/sites/all/modules/contrib/file_entity/views/views_handler_filter_schema_type.inc similarity index 100% rename from sites/all/modules/custom/file_entity/views/views_handler_filter_schema_type.inc rename to sites/all/modules/contrib/file_entity/views/views_handler_filter_schema_type.inc diff --git a/sites/all/modules/custom/file_entity/views/views_plugin_row_file_rss.inc b/sites/all/modules/contrib/file_entity/views/views_plugin_row_file_rss.inc similarity index 100% rename from sites/all/modules/custom/file_entity/views/views_plugin_row_file_rss.inc rename to sites/all/modules/contrib/file_entity/views/views_plugin_row_file_rss.inc diff --git a/sites/all/modules/custom/file_entity/views/views_plugin_row_file_view.inc b/sites/all/modules/contrib/file_entity/views/views_plugin_row_file_view.inc similarity index 100% rename from sites/all/modules/custom/file_entity/views/views_plugin_row_file_view.inc rename to sites/all/modules/contrib/file_entity/views/views_plugin_row_file_view.inc diff --git a/sites/all/modules/custom/filefield_paths/CHANGELOG.txt b/sites/all/modules/contrib/filefield_paths/CHANGELOG.txt similarity index 100% rename from sites/all/modules/custom/filefield_paths/CHANGELOG.txt rename to sites/all/modules/contrib/filefield_paths/CHANGELOG.txt diff --git a/sites/all/modules/custom/flag/LICENSE.txt b/sites/all/modules/contrib/filefield_paths/LICENSE.txt old mode 100755 new mode 100644 similarity index 100% rename from sites/all/modules/custom/flag/LICENSE.txt rename to sites/all/modules/contrib/filefield_paths/LICENSE.txt diff --git a/sites/all/modules/custom/filefield_paths/README.txt b/sites/all/modules/contrib/filefield_paths/README.txt similarity index 100% rename from sites/all/modules/custom/filefield_paths/README.txt rename to sites/all/modules/contrib/filefield_paths/README.txt diff --git a/sites/all/modules/custom/filefield_paths/filefield_paths.drush.inc b/sites/all/modules/contrib/filefield_paths/filefield_paths.drush.inc similarity index 100% rename from sites/all/modules/custom/filefield_paths/filefield_paths.drush.inc rename to sites/all/modules/contrib/filefield_paths/filefield_paths.drush.inc diff --git a/sites/all/modules/custom/filefield_paths/filefield_paths.info b/sites/all/modules/contrib/filefield_paths/filefield_paths.info similarity index 100% rename from sites/all/modules/custom/filefield_paths/filefield_paths.info rename to sites/all/modules/contrib/filefield_paths/filefield_paths.info diff --git a/sites/all/modules/custom/filefield_paths/filefield_paths.install b/sites/all/modules/contrib/filefield_paths/filefield_paths.install similarity index 100% rename from sites/all/modules/custom/filefield_paths/filefield_paths.install rename to sites/all/modules/contrib/filefield_paths/filefield_paths.install diff --git a/sites/all/modules/custom/filefield_paths/filefield_paths.module b/sites/all/modules/contrib/filefield_paths/filefield_paths.module similarity index 100% rename from sites/all/modules/custom/filefield_paths/filefield_paths.module rename to sites/all/modules/contrib/filefield_paths/filefield_paths.module diff --git a/sites/all/modules/custom/filefield_paths/modules/features.inc b/sites/all/modules/contrib/filefield_paths/modules/features.inc similarity index 100% rename from sites/all/modules/custom/filefield_paths/modules/features.inc rename to sites/all/modules/contrib/filefield_paths/modules/features.inc diff --git a/sites/all/modules/custom/filefield_paths/modules/file.inc b/sites/all/modules/contrib/filefield_paths/modules/file.inc similarity index 100% rename from sites/all/modules/custom/filefield_paths/modules/file.inc rename to sites/all/modules/contrib/filefield_paths/modules/file.inc diff --git a/sites/all/modules/custom/filefield_paths/modules/filefield_paths.inc b/sites/all/modules/contrib/filefield_paths/modules/filefield_paths.inc similarity index 100% rename from sites/all/modules/custom/filefield_paths/modules/filefield_paths.inc rename to sites/all/modules/contrib/filefield_paths/modules/filefield_paths.inc diff --git a/sites/all/modules/custom/filefield_paths/modules/image.inc b/sites/all/modules/contrib/filefield_paths/modules/image.inc similarity index 100% rename from sites/all/modules/custom/filefield_paths/modules/image.inc rename to sites/all/modules/contrib/filefield_paths/modules/image.inc diff --git a/sites/all/modules/custom/filefield_paths/modules/token.inc b/sites/all/modules/contrib/filefield_paths/modules/token.inc similarity index 100% rename from sites/all/modules/custom/filefield_paths/modules/token.inc rename to sites/all/modules/contrib/filefield_paths/modules/token.inc diff --git a/sites/all/modules/custom/filefield_paths/modules/video.inc b/sites/all/modules/contrib/filefield_paths/modules/video.inc similarity index 100% rename from sites/all/modules/custom/filefield_paths/modules/video.inc rename to sites/all/modules/contrib/filefield_paths/modules/video.inc diff --git a/sites/all/modules/custom/google_analytics/LICENSE.txt b/sites/all/modules/contrib/filter_perms/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/google_analytics/LICENSE.txt rename to sites/all/modules/contrib/filter_perms/LICENSE.txt diff --git a/sites/all/modules/custom/filter_perms/filter_perms.css b/sites/all/modules/contrib/filter_perms/filter_perms.css similarity index 100% rename from sites/all/modules/custom/filter_perms/filter_perms.css rename to sites/all/modules/contrib/filter_perms/filter_perms.css diff --git a/sites/all/modules/custom/filter_perms/filter_perms.info b/sites/all/modules/contrib/filter_perms/filter_perms.info similarity index 100% rename from sites/all/modules/custom/filter_perms/filter_perms.info rename to sites/all/modules/contrib/filter_perms/filter_perms.info diff --git a/sites/all/modules/custom/filter_perms/filter_perms.module b/sites/all/modules/contrib/filter_perms/filter_perms.module similarity index 100% rename from sites/all/modules/custom/filter_perms/filter_perms.module rename to sites/all/modules/contrib/filter_perms/filter_perms.module diff --git a/sites/all/modules/custom/hms_field/LICENSE.txt b/sites/all/modules/contrib/fitvids/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/hms_field/LICENSE.txt rename to sites/all/modules/contrib/fitvids/LICENSE.txt diff --git a/sites/all/modules/custom/fitvids/README.txt b/sites/all/modules/contrib/fitvids/README.txt similarity index 100% rename from sites/all/modules/custom/fitvids/README.txt rename to sites/all/modules/contrib/fitvids/README.txt diff --git a/sites/all/modules/custom/fitvids/fitvids.css b/sites/all/modules/contrib/fitvids/fitvids.css similarity index 100% rename from sites/all/modules/custom/fitvids/fitvids.css rename to sites/all/modules/contrib/fitvids/fitvids.css diff --git a/sites/all/modules/custom/fitvids/fitvids.info b/sites/all/modules/contrib/fitvids/fitvids.info similarity index 100% rename from sites/all/modules/custom/fitvids/fitvids.info rename to sites/all/modules/contrib/fitvids/fitvids.info diff --git a/sites/all/modules/custom/fitvids/fitvids.install b/sites/all/modules/contrib/fitvids/fitvids.install similarity index 100% rename from sites/all/modules/custom/fitvids/fitvids.install rename to sites/all/modules/contrib/fitvids/fitvids.install diff --git a/sites/all/modules/custom/fitvids/fitvids.js b/sites/all/modules/contrib/fitvids/fitvids.js similarity index 100% rename from sites/all/modules/custom/fitvids/fitvids.js rename to sites/all/modules/contrib/fitvids/fitvids.js diff --git a/sites/all/modules/custom/fitvids/fitvids.make.example b/sites/all/modules/contrib/fitvids/fitvids.make.example similarity index 100% rename from sites/all/modules/custom/fitvids/fitvids.make.example rename to sites/all/modules/contrib/fitvids/fitvids.make.example diff --git a/sites/all/modules/custom/fitvids/fitvids.module b/sites/all/modules/contrib/fitvids/fitvids.module similarity index 100% rename from sites/all/modules/custom/fitvids/fitvids.module rename to sites/all/modules/contrib/fitvids/fitvids.module diff --git a/sites/all/modules/custom/honeypot/LICENSE.txt b/sites/all/modules/contrib/flag/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/honeypot/LICENSE.txt rename to sites/all/modules/contrib/flag/LICENSE.txt diff --git a/sites/all/modules/custom/flag/README.txt b/sites/all/modules/contrib/flag/README.txt similarity index 100% rename from sites/all/modules/custom/flag/README.txt rename to sites/all/modules/contrib/flag/README.txt diff --git a/sites/all/modules/custom/flag/flag.api.php b/sites/all/modules/contrib/flag/flag.api.php similarity index 100% rename from sites/all/modules/custom/flag/flag.api.php rename to sites/all/modules/contrib/flag/flag.api.php diff --git a/sites/all/modules/custom/flag/flag.flag.inc b/sites/all/modules/contrib/flag/flag.flag.inc similarity index 100% rename from sites/all/modules/custom/flag/flag.flag.inc rename to sites/all/modules/contrib/flag/flag.flag.inc diff --git a/sites/all/modules/custom/flag/flag.info b/sites/all/modules/contrib/flag/flag.info similarity index 100% rename from sites/all/modules/custom/flag/flag.info rename to sites/all/modules/contrib/flag/flag.info diff --git a/sites/all/modules/custom/flag/flag.info.inc b/sites/all/modules/contrib/flag/flag.info.inc similarity index 100% rename from sites/all/modules/custom/flag/flag.info.inc rename to sites/all/modules/contrib/flag/flag.info.inc diff --git a/sites/all/modules/custom/flag/flag.install b/sites/all/modules/contrib/flag/flag.install similarity index 100% rename from sites/all/modules/custom/flag/flag.install rename to sites/all/modules/contrib/flag/flag.install diff --git a/sites/all/modules/custom/flag/flag.module b/sites/all/modules/contrib/flag/flag.module similarity index 100% rename from sites/all/modules/custom/flag/flag.module rename to sites/all/modules/contrib/flag/flag.module diff --git a/sites/all/modules/custom/flag/flag.rules.inc b/sites/all/modules/contrib/flag/flag.rules.inc similarity index 100% rename from sites/all/modules/custom/flag/flag.rules.inc rename to sites/all/modules/contrib/flag/flag.rules.inc diff --git a/sites/all/modules/custom/flag/flag.tokens.inc b/sites/all/modules/contrib/flag/flag.tokens.inc similarity index 100% rename from sites/all/modules/custom/flag/flag.tokens.inc rename to sites/all/modules/contrib/flag/flag.tokens.inc diff --git a/sites/all/modules/custom/flag/flag_actions.info b/sites/all/modules/contrib/flag/flag_actions.info similarity index 100% rename from sites/all/modules/custom/flag/flag_actions.info rename to sites/all/modules/contrib/flag/flag_actions.info diff --git a/sites/all/modules/custom/flag/flag_actions.install b/sites/all/modules/contrib/flag/flag_actions.install similarity index 100% rename from sites/all/modules/custom/flag/flag_actions.install rename to sites/all/modules/contrib/flag/flag_actions.install diff --git a/sites/all/modules/custom/flag/flag_actions.module b/sites/all/modules/contrib/flag/flag_actions.module similarity index 100% rename from sites/all/modules/custom/flag/flag_actions.module rename to sites/all/modules/contrib/flag/flag_actions.module diff --git a/sites/all/modules/custom/flag/flag_bookmark/flag_bookmark.info b/sites/all/modules/contrib/flag/flag_bookmark/flag_bookmark.info similarity index 100% rename from sites/all/modules/custom/flag/flag_bookmark/flag_bookmark.info rename to sites/all/modules/contrib/flag/flag_bookmark/flag_bookmark.info diff --git a/sites/all/modules/custom/flag/flag_bookmark/flag_bookmark.install b/sites/all/modules/contrib/flag/flag_bookmark/flag_bookmark.install similarity index 100% rename from sites/all/modules/custom/flag/flag_bookmark/flag_bookmark.install rename to sites/all/modules/contrib/flag/flag_bookmark/flag_bookmark.install diff --git a/sites/all/modules/custom/flag/flag_bookmark/flag_bookmark.module b/sites/all/modules/contrib/flag/flag_bookmark/flag_bookmark.module similarity index 100% rename from sites/all/modules/custom/flag/flag_bookmark/flag_bookmark.module rename to sites/all/modules/contrib/flag/flag_bookmark/flag_bookmark.module diff --git a/sites/all/modules/custom/flag/flag_bookmark/includes/flag_bookmark.views_default.inc b/sites/all/modules/contrib/flag/flag_bookmark/includes/flag_bookmark.views_default.inc similarity index 100% rename from sites/all/modules/custom/flag/flag_bookmark/includes/flag_bookmark.views_default.inc rename to sites/all/modules/contrib/flag/flag_bookmark/includes/flag_bookmark.views_default.inc diff --git a/sites/all/modules/custom/flag/includes/flag.actions.inc b/sites/all/modules/contrib/flag/includes/flag.actions.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/flag.actions.inc rename to sites/all/modules/contrib/flag/includes/flag.actions.inc diff --git a/sites/all/modules/custom/flag/includes/flag.admin.inc b/sites/all/modules/contrib/flag/includes/flag.admin.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/flag.admin.inc rename to sites/all/modules/contrib/flag/includes/flag.admin.inc diff --git a/sites/all/modules/custom/flag/includes/flag.cookie_storage.inc b/sites/all/modules/contrib/flag/includes/flag.cookie_storage.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/flag.cookie_storage.inc rename to sites/all/modules/contrib/flag/includes/flag.cookie_storage.inc diff --git a/sites/all/modules/custom/flag/includes/flag.entity.inc b/sites/all/modules/contrib/flag/includes/flag.entity.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/flag.entity.inc rename to sites/all/modules/contrib/flag/includes/flag.entity.inc diff --git a/sites/all/modules/custom/flag/includes/flag.export.inc b/sites/all/modules/contrib/flag/includes/flag.export.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/flag.export.inc rename to sites/all/modules/contrib/flag/includes/flag.export.inc diff --git a/sites/all/modules/custom/flag/includes/flag.features.inc b/sites/all/modules/contrib/flag/includes/flag.features.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/flag.features.inc rename to sites/all/modules/contrib/flag/includes/flag.features.inc diff --git a/sites/all/modules/custom/flag/includes/flag.pages.inc b/sites/all/modules/contrib/flag/includes/flag.pages.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/flag.pages.inc rename to sites/all/modules/contrib/flag/includes/flag.pages.inc diff --git a/sites/all/modules/custom/flag/includes/flag/flag_comment.inc b/sites/all/modules/contrib/flag/includes/flag/flag_comment.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/flag/flag_comment.inc rename to sites/all/modules/contrib/flag/includes/flag/flag_comment.inc diff --git a/sites/all/modules/custom/flag/includes/flag/flag_entity.inc b/sites/all/modules/contrib/flag/includes/flag/flag_entity.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/flag/flag_entity.inc rename to sites/all/modules/contrib/flag/includes/flag/flag_entity.inc diff --git a/sites/all/modules/custom/flag/includes/flag/flag_flag.inc b/sites/all/modules/contrib/flag/includes/flag/flag_flag.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/flag/flag_flag.inc rename to sites/all/modules/contrib/flag/includes/flag/flag_flag.inc diff --git a/sites/all/modules/custom/flag/includes/flag/flag_node.inc b/sites/all/modules/contrib/flag/includes/flag/flag_node.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/flag/flag_node.inc rename to sites/all/modules/contrib/flag/includes/flag/flag_node.inc diff --git a/sites/all/modules/custom/flag/includes/flag/flag_user.inc b/sites/all/modules/contrib/flag/includes/flag/flag_user.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/flag/flag_user.inc rename to sites/all/modules/contrib/flag/includes/flag/flag_user.inc diff --git a/sites/all/modules/custom/flag/includes/views/flag.views.inc b/sites/all/modules/contrib/flag/includes/views/flag.views.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/views/flag.views.inc rename to sites/all/modules/contrib/flag/includes/views/flag.views.inc diff --git a/sites/all/modules/custom/flag/includes/views/flag.views_convert.inc b/sites/all/modules/contrib/flag/includes/views/flag.views_convert.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/views/flag.views_convert.inc rename to sites/all/modules/contrib/flag/includes/views/flag.views_convert.inc diff --git a/sites/all/modules/custom/flag/includes/views/flag_handler_argument_entity_id.inc b/sites/all/modules/contrib/flag/includes/views/flag_handler_argument_entity_id.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/views/flag_handler_argument_entity_id.inc rename to sites/all/modules/contrib/flag/includes/views/flag_handler_argument_entity_id.inc diff --git a/sites/all/modules/custom/flag/includes/views/flag_handler_field_flagged.inc b/sites/all/modules/contrib/flag/includes/views/flag_handler_field_flagged.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/views/flag_handler_field_flagged.inc rename to sites/all/modules/contrib/flag/includes/views/flag_handler_field_flagged.inc diff --git a/sites/all/modules/custom/flag/includes/views/flag_handler_field_ops.inc b/sites/all/modules/contrib/flag/includes/views/flag_handler_field_ops.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/views/flag_handler_field_ops.inc rename to sites/all/modules/contrib/flag/includes/views/flag_handler_field_ops.inc diff --git a/sites/all/modules/custom/flag/includes/views/flag_handler_filter_flagged.inc b/sites/all/modules/contrib/flag/includes/views/flag_handler_filter_flagged.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/views/flag_handler_filter_flagged.inc rename to sites/all/modules/contrib/flag/includes/views/flag_handler_filter_flagged.inc diff --git a/sites/all/modules/custom/flag/includes/views/flag_handler_relationships.inc b/sites/all/modules/contrib/flag/includes/views/flag_handler_relationships.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/views/flag_handler_relationships.inc rename to sites/all/modules/contrib/flag/includes/views/flag_handler_relationships.inc diff --git a/sites/all/modules/custom/flag/includes/views/flag_handler_sort_flagged.inc b/sites/all/modules/contrib/flag/includes/views/flag_handler_sort_flagged.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/views/flag_handler_sort_flagged.inc rename to sites/all/modules/contrib/flag/includes/views/flag_handler_sort_flagged.inc diff --git a/sites/all/modules/custom/flag/includes/views/flag_plugin_argument_validate_flaggability.inc b/sites/all/modules/contrib/flag/includes/views/flag_plugin_argument_validate_flaggability.inc similarity index 100% rename from sites/all/modules/custom/flag/includes/views/flag_plugin_argument_validate_flaggability.inc rename to sites/all/modules/contrib/flag/includes/views/flag_plugin_argument_validate_flaggability.inc diff --git a/sites/all/modules/custom/flag/plugins/access/flag_is_flagged/flag_is_flagged.inc b/sites/all/modules/contrib/flag/plugins/access/flag_is_flagged/flag_is_flagged.inc similarity index 100% rename from sites/all/modules/custom/flag/plugins/access/flag_is_flagged/flag_is_flagged.inc rename to sites/all/modules/contrib/flag/plugins/access/flag_is_flagged/flag_is_flagged.inc diff --git a/sites/all/modules/custom/flag/plugins/content_types/flag_link/flag_link.inc b/sites/all/modules/contrib/flag/plugins/content_types/flag_link/flag_link.inc similarity index 100% rename from sites/all/modules/custom/flag/plugins/content_types/flag_link/flag_link.inc rename to sites/all/modules/contrib/flag/plugins/content_types/flag_link/flag_link.inc diff --git a/sites/all/modules/custom/flag/tests/flag.test b/sites/all/modules/contrib/flag/tests/flag.test similarity index 100% rename from sites/all/modules/custom/flag/tests/flag.test rename to sites/all/modules/contrib/flag/tests/flag.test diff --git a/sites/all/modules/custom/flag/tests/flag_fields_test/flag_fields_test.info b/sites/all/modules/contrib/flag/tests/flag_fields_test/flag_fields_test.info similarity index 100% rename from sites/all/modules/custom/flag/tests/flag_fields_test/flag_fields_test.info rename to sites/all/modules/contrib/flag/tests/flag_fields_test/flag_fields_test.info diff --git a/sites/all/modules/custom/flag/tests/flag_fields_test/flag_fields_test.install b/sites/all/modules/contrib/flag/tests/flag_fields_test/flag_fields_test.install similarity index 100% rename from sites/all/modules/custom/flag/tests/flag_fields_test/flag_fields_test.install rename to sites/all/modules/contrib/flag/tests/flag_fields_test/flag_fields_test.install diff --git a/sites/all/modules/custom/flag/tests/flag_fields_test/flag_fields_test.module b/sites/all/modules/contrib/flag/tests/flag_fields_test/flag_fields_test.module similarity index 100% rename from sites/all/modules/custom/flag/tests/flag_fields_test/flag_fields_test.module rename to sites/all/modules/contrib/flag/tests/flag_fields_test/flag_fields_test.module diff --git a/sites/all/modules/custom/flag/tests/flag_hook_test/flag_hook_test.info b/sites/all/modules/contrib/flag/tests/flag_hook_test/flag_hook_test.info similarity index 100% rename from sites/all/modules/custom/flag/tests/flag_hook_test/flag_hook_test.info rename to sites/all/modules/contrib/flag/tests/flag_hook_test/flag_hook_test.info diff --git a/sites/all/modules/custom/flag/tests/flag_hook_test/flag_hook_test.module b/sites/all/modules/contrib/flag/tests/flag_hook_test/flag_hook_test.module similarity index 100% rename from sites/all/modules/custom/flag/tests/flag_hook_test/flag_hook_test.module rename to sites/all/modules/contrib/flag/tests/flag_hook_test/flag_hook_test.module diff --git a/sites/all/modules/custom/flag/tests/flagaccesstest/flagaccesstest.info b/sites/all/modules/contrib/flag/tests/flagaccesstest/flagaccesstest.info similarity index 100% rename from sites/all/modules/custom/flag/tests/flagaccesstest/flagaccesstest.info rename to sites/all/modules/contrib/flag/tests/flagaccesstest/flagaccesstest.info diff --git a/sites/all/modules/custom/flag/tests/flagaccesstest/flagaccesstest.module b/sites/all/modules/contrib/flag/tests/flagaccesstest/flagaccesstest.module similarity index 100% rename from sites/all/modules/custom/flag/tests/flagaccesstest/flagaccesstest.module rename to sites/all/modules/contrib/flag/tests/flagaccesstest/flagaccesstest.module diff --git a/sites/all/modules/custom/flag/theme/README.txt b/sites/all/modules/contrib/flag/theme/README.txt similarity index 100% rename from sites/all/modules/custom/flag/theme/README.txt rename to sites/all/modules/contrib/flag/theme/README.txt diff --git a/sites/all/modules/custom/flag/theme/flag-admin.css b/sites/all/modules/contrib/flag/theme/flag-admin.css similarity index 100% rename from sites/all/modules/custom/flag/theme/flag-admin.css rename to sites/all/modules/contrib/flag/theme/flag-admin.css diff --git a/sites/all/modules/custom/flag/theme/flag-admin.js b/sites/all/modules/contrib/flag/theme/flag-admin.js similarity index 100% rename from sites/all/modules/custom/flag/theme/flag-admin.js rename to sites/all/modules/contrib/flag/theme/flag-admin.js diff --git a/sites/all/modules/custom/flag/theme/flag-throbber.gif b/sites/all/modules/contrib/flag/theme/flag-throbber.gif similarity index 100% rename from sites/all/modules/custom/flag/theme/flag-throbber.gif rename to sites/all/modules/contrib/flag/theme/flag-throbber.gif diff --git a/sites/all/modules/custom/flag/theme/flag.css b/sites/all/modules/contrib/flag/theme/flag.css similarity index 100% rename from sites/all/modules/custom/flag/theme/flag.css rename to sites/all/modules/contrib/flag/theme/flag.css diff --git a/sites/all/modules/custom/flag/theme/flag.js b/sites/all/modules/contrib/flag/theme/flag.js similarity index 100% rename from sites/all/modules/custom/flag/theme/flag.js rename to sites/all/modules/contrib/flag/theme/flag.js diff --git a/sites/all/modules/custom/flag/theme/flag.tpl.php b/sites/all/modules/contrib/flag/theme/flag.tpl.php similarity index 100% rename from sites/all/modules/custom/flag/theme/flag.tpl.php rename to sites/all/modules/contrib/flag/theme/flag.tpl.php diff --git a/sites/all/modules/custom/jeditable/LICENSE.txt b/sites/all/modules/contrib/google_analytics/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/jeditable/LICENSE.txt rename to sites/all/modules/contrib/google_analytics/LICENSE.txt diff --git a/sites/all/modules/custom/google_analytics/README.txt b/sites/all/modules/contrib/google_analytics/README.txt similarity index 100% rename from sites/all/modules/custom/google_analytics/README.txt rename to sites/all/modules/contrib/google_analytics/README.txt diff --git a/sites/all/modules/custom/google_analytics/googleanalytics.admin.inc b/sites/all/modules/contrib/google_analytics/googleanalytics.admin.inc similarity index 100% rename from sites/all/modules/custom/google_analytics/googleanalytics.admin.inc rename to sites/all/modules/contrib/google_analytics/googleanalytics.admin.inc diff --git a/sites/all/modules/custom/google_analytics/googleanalytics.admin.js b/sites/all/modules/contrib/google_analytics/googleanalytics.admin.js similarity index 100% rename from sites/all/modules/custom/google_analytics/googleanalytics.admin.js rename to sites/all/modules/contrib/google_analytics/googleanalytics.admin.js diff --git a/sites/all/modules/custom/google_analytics/googleanalytics.debug.js b/sites/all/modules/contrib/google_analytics/googleanalytics.debug.js similarity index 100% rename from sites/all/modules/custom/google_analytics/googleanalytics.debug.js rename to sites/all/modules/contrib/google_analytics/googleanalytics.debug.js diff --git a/sites/all/modules/custom/google_analytics/googleanalytics.info b/sites/all/modules/contrib/google_analytics/googleanalytics.info similarity index 100% rename from sites/all/modules/custom/google_analytics/googleanalytics.info rename to sites/all/modules/contrib/google_analytics/googleanalytics.info diff --git a/sites/all/modules/custom/google_analytics/googleanalytics.install b/sites/all/modules/contrib/google_analytics/googleanalytics.install similarity index 100% rename from sites/all/modules/custom/google_analytics/googleanalytics.install rename to sites/all/modules/contrib/google_analytics/googleanalytics.install diff --git a/sites/all/modules/custom/google_analytics/googleanalytics.js b/sites/all/modules/contrib/google_analytics/googleanalytics.js similarity index 100% rename from sites/all/modules/custom/google_analytics/googleanalytics.js rename to sites/all/modules/contrib/google_analytics/googleanalytics.js diff --git a/sites/all/modules/custom/google_analytics/googleanalytics.module b/sites/all/modules/contrib/google_analytics/googleanalytics.module similarity index 100% rename from sites/all/modules/custom/google_analytics/googleanalytics.module rename to sites/all/modules/contrib/google_analytics/googleanalytics.module diff --git a/sites/all/modules/custom/google_analytics/googleanalytics.test b/sites/all/modules/contrib/google_analytics/googleanalytics.test similarity index 100% rename from sites/all/modules/custom/google_analytics/googleanalytics.test rename to sites/all/modules/contrib/google_analytics/googleanalytics.test diff --git a/sites/all/modules/custom/google_analytics/googleanalytics.test.js b/sites/all/modules/contrib/google_analytics/googleanalytics.test.js similarity index 100% rename from sites/all/modules/custom/google_analytics/googleanalytics.test.js rename to sites/all/modules/contrib/google_analytics/googleanalytics.test.js diff --git a/sites/all/modules/custom/google_analytics/googleanalytics.tokens.inc b/sites/all/modules/contrib/google_analytics/googleanalytics.tokens.inc similarity index 100% rename from sites/all/modules/custom/google_analytics/googleanalytics.tokens.inc rename to sites/all/modules/contrib/google_analytics/googleanalytics.tokens.inc diff --git a/sites/all/modules/custom/google_analytics/googleanalytics.variable.inc b/sites/all/modules/contrib/google_analytics/googleanalytics.variable.inc similarity index 100% rename from sites/all/modules/custom/google_analytics/googleanalytics.variable.inc rename to sites/all/modules/contrib/google_analytics/googleanalytics.variable.inc diff --git a/sites/all/modules/custom/job_scheduler/LICENSE.txt b/sites/all/modules/contrib/hms_field/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/job_scheduler/LICENSE.txt rename to sites/all/modules/contrib/hms_field/LICENSE.txt diff --git a/sites/all/modules/custom/hms_field/hms_field.devel_generate.inc b/sites/all/modules/contrib/hms_field/hms_field.devel_generate.inc similarity index 100% rename from sites/all/modules/custom/hms_field/hms_field.devel_generate.inc rename to sites/all/modules/contrib/hms_field/hms_field.devel_generate.inc diff --git a/sites/all/modules/custom/hms_field/hms_field.feeds.inc b/sites/all/modules/contrib/hms_field/hms_field.feeds.inc similarity index 100% rename from sites/all/modules/custom/hms_field/hms_field.feeds.inc rename to sites/all/modules/contrib/hms_field/hms_field.feeds.inc diff --git a/sites/all/modules/custom/hms_field/hms_field.info b/sites/all/modules/contrib/hms_field/hms_field.info similarity index 100% rename from sites/all/modules/custom/hms_field/hms_field.info rename to sites/all/modules/contrib/hms_field/hms_field.info diff --git a/sites/all/modules/custom/hms_field/hms_field.install b/sites/all/modules/contrib/hms_field/hms_field.install similarity index 100% rename from sites/all/modules/custom/hms_field/hms_field.install rename to sites/all/modules/contrib/hms_field/hms_field.install diff --git a/sites/all/modules/custom/hms_field/hms_field.js b/sites/all/modules/contrib/hms_field/hms_field.js similarity index 100% rename from sites/all/modules/custom/hms_field/hms_field.js rename to sites/all/modules/contrib/hms_field/hms_field.js diff --git a/sites/all/modules/custom/hms_field/hms_field.migrate.inc b/sites/all/modules/contrib/hms_field/hms_field.migrate.inc similarity index 100% rename from sites/all/modules/custom/hms_field/hms_field.migrate.inc rename to sites/all/modules/contrib/hms_field/hms_field.migrate.inc diff --git a/sites/all/modules/custom/hms_field/hms_field.module b/sites/all/modules/contrib/hms_field/hms_field.module similarity index 100% rename from sites/all/modules/custom/hms_field/hms_field.module rename to sites/all/modules/contrib/hms_field/hms_field.module diff --git a/sites/all/modules/custom/hms_field/views/hms_field.views.inc b/sites/all/modules/contrib/hms_field/views/hms_field.views.inc similarity index 100% rename from sites/all/modules/custom/hms_field/views/hms_field.views.inc rename to sites/all/modules/contrib/hms_field/views/hms_field.views.inc diff --git a/sites/all/modules/custom/hms_field/views/hms_field_views_handler_filter_hms.inc b/sites/all/modules/contrib/hms_field/views/hms_field_views_handler_filter_hms.inc similarity index 100% rename from sites/all/modules/custom/hms_field/views/hms_field_views_handler_filter_hms.inc rename to sites/all/modules/contrib/hms_field/views/hms_field_views_handler_filter_hms.inc diff --git a/sites/all/modules/custom/jplayer/LICENSE.txt b/sites/all/modules/contrib/honeypot/LICENSE.txt old mode 100644 new mode 100755 similarity index 100% rename from sites/all/modules/custom/jplayer/LICENSE.txt rename to sites/all/modules/contrib/honeypot/LICENSE.txt diff --git a/sites/all/modules/custom/honeypot/README.txt b/sites/all/modules/contrib/honeypot/README.txt similarity index 100% rename from sites/all/modules/custom/honeypot/README.txt rename to sites/all/modules/contrib/honeypot/README.txt diff --git a/sites/all/modules/custom/honeypot/honeypot.admin.inc b/sites/all/modules/contrib/honeypot/honeypot.admin.inc similarity index 100% rename from sites/all/modules/custom/honeypot/honeypot.admin.inc rename to sites/all/modules/contrib/honeypot/honeypot.admin.inc diff --git a/sites/all/modules/custom/honeypot/honeypot.api.php b/sites/all/modules/contrib/honeypot/honeypot.api.php similarity index 100% rename from sites/all/modules/custom/honeypot/honeypot.api.php rename to sites/all/modules/contrib/honeypot/honeypot.api.php diff --git a/sites/all/modules/custom/honeypot/honeypot.info b/sites/all/modules/contrib/honeypot/honeypot.info similarity index 100% rename from sites/all/modules/custom/honeypot/honeypot.info rename to sites/all/modules/contrib/honeypot/honeypot.info diff --git a/sites/all/modules/custom/honeypot/honeypot.install b/sites/all/modules/contrib/honeypot/honeypot.install similarity index 100% rename from sites/all/modules/custom/honeypot/honeypot.install rename to sites/all/modules/contrib/honeypot/honeypot.install diff --git a/sites/all/modules/custom/honeypot/honeypot.module b/sites/all/modules/contrib/honeypot/honeypot.module similarity index 100% rename from sites/all/modules/custom/honeypot/honeypot.module rename to sites/all/modules/contrib/honeypot/honeypot.module diff --git a/sites/all/modules/custom/honeypot/honeypot.test b/sites/all/modules/contrib/honeypot/honeypot.test similarity index 100% rename from sites/all/modules/custom/honeypot/honeypot.test rename to sites/all/modules/contrib/honeypot/honeypot.test diff --git a/sites/all/modules/custom/jquery_update/LICENSE.txt b/sites/all/modules/contrib/jeditable/LICENSE.txt old mode 100755 new mode 100644 similarity index 100% rename from sites/all/modules/custom/jquery_update/LICENSE.txt rename to sites/all/modules/contrib/jeditable/LICENSE.txt diff --git a/sites/all/modules/custom/jeditable/README.txt b/sites/all/modules/contrib/jeditable/README.txt similarity index 100% rename from sites/all/modules/custom/jeditable/README.txt rename to sites/all/modules/contrib/jeditable/README.txt diff --git a/sites/all/modules/custom/jeditable/drupal_jeditable.js b/sites/all/modules/contrib/jeditable/drupal_jeditable.js similarity index 100% rename from sites/all/modules/custom/jeditable/drupal_jeditable.js rename to sites/all/modules/contrib/jeditable/drupal_jeditable.js diff --git a/sites/all/modules/custom/jeditable/includes/jeditable.views.inc b/sites/all/modules/contrib/jeditable/includes/jeditable.views.inc similarity index 100% rename from sites/all/modules/custom/jeditable/includes/jeditable.views.inc rename to sites/all/modules/contrib/jeditable/includes/jeditable.views.inc diff --git a/sites/all/modules/custom/jeditable/includes/views_handler_field_jeditable.inc b/sites/all/modules/contrib/jeditable/includes/views_handler_field_jeditable.inc similarity index 100% rename from sites/all/modules/custom/jeditable/includes/views_handler_field_jeditable.inc rename to sites/all/modules/contrib/jeditable/includes/views_handler_field_jeditable.inc diff --git a/sites/all/modules/custom/jeditable/jeditable.css b/sites/all/modules/contrib/jeditable/jeditable.css similarity index 100% rename from sites/all/modules/custom/jeditable/jeditable.css rename to sites/all/modules/contrib/jeditable/jeditable.css diff --git a/sites/all/modules/custom/jeditable/jeditable.info b/sites/all/modules/contrib/jeditable/jeditable.info similarity index 100% rename from sites/all/modules/custom/jeditable/jeditable.info rename to sites/all/modules/contrib/jeditable/jeditable.info diff --git a/sites/all/modules/custom/jeditable/jeditable.module b/sites/all/modules/contrib/jeditable/jeditable.module similarity index 100% rename from sites/all/modules/custom/jeditable/jeditable.module rename to sites/all/modules/contrib/jeditable/jeditable.module diff --git a/sites/all/modules/custom/job_scheduler/CHANGELOG.txt b/sites/all/modules/contrib/job_scheduler/CHANGELOG.txt similarity index 100% rename from sites/all/modules/custom/job_scheduler/CHANGELOG.txt rename to sites/all/modules/contrib/job_scheduler/CHANGELOG.txt diff --git a/sites/all/modules/custom/job_scheduler/JobScheduler.inc b/sites/all/modules/contrib/job_scheduler/JobScheduler.inc similarity index 100% rename from sites/all/modules/custom/job_scheduler/JobScheduler.inc rename to sites/all/modules/contrib/job_scheduler/JobScheduler.inc diff --git a/sites/all/modules/custom/job_scheduler/JobSchedulerCronTab.inc b/sites/all/modules/contrib/job_scheduler/JobSchedulerCronTab.inc similarity index 100% rename from sites/all/modules/custom/job_scheduler/JobSchedulerCronTab.inc rename to sites/all/modules/contrib/job_scheduler/JobSchedulerCronTab.inc diff --git a/sites/all/modules/custom/libraries/LICENSE.txt b/sites/all/modules/contrib/job_scheduler/LICENSE.txt old mode 100755 new mode 100644 similarity index 100% rename from sites/all/modules/custom/libraries/LICENSE.txt rename to sites/all/modules/contrib/job_scheduler/LICENSE.txt diff --git a/sites/all/modules/custom/job_scheduler/README.txt b/sites/all/modules/contrib/job_scheduler/README.txt similarity index 100% rename from sites/all/modules/custom/job_scheduler/README.txt rename to sites/all/modules/contrib/job_scheduler/README.txt diff --git a/sites/all/modules/custom/job_scheduler/job_scheduler.api.php b/sites/all/modules/contrib/job_scheduler/job_scheduler.api.php similarity index 100% rename from sites/all/modules/custom/job_scheduler/job_scheduler.api.php rename to sites/all/modules/contrib/job_scheduler/job_scheduler.api.php diff --git a/sites/all/modules/custom/job_scheduler/job_scheduler.info b/sites/all/modules/contrib/job_scheduler/job_scheduler.info similarity index 100% rename from sites/all/modules/custom/job_scheduler/job_scheduler.info rename to sites/all/modules/contrib/job_scheduler/job_scheduler.info diff --git a/sites/all/modules/custom/job_scheduler/job_scheduler.install b/sites/all/modules/contrib/job_scheduler/job_scheduler.install similarity index 100% rename from sites/all/modules/custom/job_scheduler/job_scheduler.install rename to sites/all/modules/contrib/job_scheduler/job_scheduler.install diff --git a/sites/all/modules/custom/job_scheduler/job_scheduler.module b/sites/all/modules/contrib/job_scheduler/job_scheduler.module similarity index 100% rename from sites/all/modules/custom/job_scheduler/job_scheduler.module rename to sites/all/modules/contrib/job_scheduler/job_scheduler.module diff --git a/sites/all/modules/custom/job_scheduler/modules/job_scheduler_trigger/README.md b/sites/all/modules/contrib/job_scheduler/modules/job_scheduler_trigger/README.md similarity index 100% rename from sites/all/modules/custom/job_scheduler/modules/job_scheduler_trigger/README.md rename to sites/all/modules/contrib/job_scheduler/modules/job_scheduler_trigger/README.md diff --git a/sites/all/modules/custom/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.admin.inc b/sites/all/modules/contrib/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.admin.inc similarity index 100% rename from sites/all/modules/custom/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.admin.inc rename to sites/all/modules/contrib/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.admin.inc diff --git a/sites/all/modules/custom/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.info b/sites/all/modules/contrib/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.info similarity index 100% rename from sites/all/modules/custom/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.info rename to sites/all/modules/contrib/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.info diff --git a/sites/all/modules/custom/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.install b/sites/all/modules/contrib/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.install similarity index 100% rename from sites/all/modules/custom/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.install rename to sites/all/modules/contrib/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.install diff --git a/sites/all/modules/custom/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.module b/sites/all/modules/contrib/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.module similarity index 100% rename from sites/all/modules/custom/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.module rename to sites/all/modules/contrib/job_scheduler/modules/job_scheduler_trigger/job_scheduler_trigger.module diff --git a/sites/all/modules/custom/link/LICENSE.txt b/sites/all/modules/contrib/jplayer/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/link/LICENSE.txt rename to sites/all/modules/contrib/jplayer/LICENSE.txt diff --git a/sites/all/modules/custom/jplayer/README.txt b/sites/all/modules/contrib/jplayer/README.txt similarity index 100% rename from sites/all/modules/custom/jplayer/README.txt rename to sites/all/modules/contrib/jplayer/README.txt diff --git a/sites/all/modules/custom/jplayer/includes/jplayer.admin.inc b/sites/all/modules/contrib/jplayer/includes/jplayer.admin.inc similarity index 100% rename from sites/all/modules/custom/jplayer/includes/jplayer.admin.inc rename to sites/all/modules/contrib/jplayer/includes/jplayer.admin.inc diff --git a/sites/all/modules/custom/jplayer/includes/jplayer.theme.inc b/sites/all/modules/contrib/jplayer/includes/jplayer.theme.inc similarity index 100% rename from sites/all/modules/custom/jplayer/includes/jplayer.theme.inc rename to sites/all/modules/contrib/jplayer/includes/jplayer.theme.inc diff --git a/sites/all/modules/custom/jplayer/includes/jplayer.views.inc b/sites/all/modules/contrib/jplayer/includes/jplayer.views.inc similarity index 100% rename from sites/all/modules/custom/jplayer/includes/jplayer.views.inc rename to sites/all/modules/contrib/jplayer/includes/jplayer.views.inc diff --git a/sites/all/modules/custom/jplayer/includes/jplayer_style_plugin.inc b/sites/all/modules/contrib/jplayer/includes/jplayer_style_plugin.inc similarity index 100% rename from sites/all/modules/custom/jplayer/includes/jplayer_style_plugin.inc rename to sites/all/modules/contrib/jplayer/includes/jplayer_style_plugin.inc diff --git a/sites/all/modules/custom/jplayer/jplayer.info b/sites/all/modules/contrib/jplayer/jplayer.info similarity index 100% rename from sites/all/modules/custom/jplayer/jplayer.info rename to sites/all/modules/contrib/jplayer/jplayer.info diff --git a/sites/all/modules/custom/jplayer/jplayer.install b/sites/all/modules/contrib/jplayer/jplayer.install similarity index 100% rename from sites/all/modules/custom/jplayer/jplayer.install rename to sites/all/modules/contrib/jplayer/jplayer.install diff --git a/sites/all/modules/custom/jplayer/jplayer.module b/sites/all/modules/contrib/jplayer/jplayer.module similarity index 100% rename from sites/all/modules/custom/jplayer/jplayer.module rename to sites/all/modules/contrib/jplayer/jplayer.module diff --git a/sites/all/modules/custom/jplayer/jplayer_protect/jplayer-protect.js b/sites/all/modules/contrib/jplayer/jplayer_protect/jplayer-protect.js similarity index 100% rename from sites/all/modules/custom/jplayer/jplayer_protect/jplayer-protect.js rename to sites/all/modules/contrib/jplayer/jplayer_protect/jplayer-protect.js diff --git a/sites/all/modules/custom/jplayer/jplayer_protect/jplayer_protect.admin.inc b/sites/all/modules/contrib/jplayer/jplayer_protect/jplayer_protect.admin.inc similarity index 100% rename from sites/all/modules/custom/jplayer/jplayer_protect/jplayer_protect.admin.inc rename to sites/all/modules/contrib/jplayer/jplayer_protect/jplayer_protect.admin.inc diff --git a/sites/all/modules/custom/jplayer/jplayer_protect/jplayer_protect.info b/sites/all/modules/contrib/jplayer/jplayer_protect/jplayer_protect.info similarity index 100% rename from sites/all/modules/custom/jplayer/jplayer_protect/jplayer_protect.info rename to sites/all/modules/contrib/jplayer/jplayer_protect/jplayer_protect.info diff --git a/sites/all/modules/custom/jplayer/jplayer_protect/jplayer_protect.install b/sites/all/modules/contrib/jplayer/jplayer_protect/jplayer_protect.install similarity index 100% rename from sites/all/modules/custom/jplayer/jplayer_protect/jplayer_protect.install rename to sites/all/modules/contrib/jplayer/jplayer_protect/jplayer_protect.install diff --git a/sites/all/modules/custom/jplayer/jplayer_protect/jplayer_protect.module b/sites/all/modules/contrib/jplayer/jplayer_protect/jplayer_protect.module similarity index 100% rename from sites/all/modules/custom/jplayer/jplayer_protect/jplayer_protect.module rename to sites/all/modules/contrib/jplayer/jplayer_protect/jplayer_protect.module diff --git a/sites/all/modules/custom/jplayer/theme/THEMING.txt b/sites/all/modules/contrib/jplayer/theme/THEMING.txt similarity index 100% rename from sites/all/modules/custom/jplayer/theme/THEMING.txt rename to sites/all/modules/contrib/jplayer/theme/THEMING.txt diff --git a/sites/all/modules/custom/jplayer/theme/jplayer.blue.monday.jpg b/sites/all/modules/contrib/jplayer/theme/jplayer.blue.monday.jpg similarity index 100% rename from sites/all/modules/custom/jplayer/theme/jplayer.blue.monday.jpg rename to sites/all/modules/contrib/jplayer/theme/jplayer.blue.monday.jpg diff --git a/sites/all/modules/custom/jplayer/theme/jplayer.blue.monday.video.play.hover.png b/sites/all/modules/contrib/jplayer/theme/jplayer.blue.monday.video.play.hover.png similarity index 100% rename from sites/all/modules/custom/jplayer/theme/jplayer.blue.monday.video.play.hover.png rename to sites/all/modules/contrib/jplayer/theme/jplayer.blue.monday.video.play.hover.png diff --git a/sites/all/modules/custom/jplayer/theme/jplayer.blue.monday.video.play.png b/sites/all/modules/contrib/jplayer/theme/jplayer.blue.monday.video.play.png similarity index 100% rename from sites/all/modules/custom/jplayer/theme/jplayer.blue.monday.video.play.png rename to sites/all/modules/contrib/jplayer/theme/jplayer.blue.monday.video.play.png diff --git a/sites/all/modules/custom/jplayer/theme/jplayer.css b/sites/all/modules/contrib/jplayer/theme/jplayer.css similarity index 100% rename from sites/all/modules/custom/jplayer/theme/jplayer.css rename to sites/all/modules/contrib/jplayer/theme/jplayer.css diff --git a/sites/all/modules/custom/jplayer/theme/jplayer.js b/sites/all/modules/contrib/jplayer/theme/jplayer.js similarity index 100% rename from sites/all/modules/custom/jplayer/theme/jplayer.js rename to sites/all/modules/contrib/jplayer/theme/jplayer.js diff --git a/sites/all/modules/custom/jplayer/theme/jplayer.tpl.php b/sites/all/modules/contrib/jplayer/theme/jplayer.tpl.php similarity index 100% rename from sites/all/modules/custom/jplayer/theme/jplayer.tpl.php rename to sites/all/modules/contrib/jplayer/theme/jplayer.tpl.php diff --git a/sites/all/modules/custom/jplayer/theme/pbar-ani.gif b/sites/all/modules/contrib/jplayer/theme/pbar-ani.gif similarity index 100% rename from sites/all/modules/custom/jplayer/theme/pbar-ani.gif rename to sites/all/modules/contrib/jplayer/theme/pbar-ani.gif diff --git a/sites/all/modules/custom/masquerade/LICENSE.txt b/sites/all/modules/contrib/jquery_update/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/masquerade/LICENSE.txt rename to sites/all/modules/contrib/jquery_update/LICENSE.txt diff --git a/sites/all/modules/custom/jquery_update/README.txt b/sites/all/modules/contrib/jquery_update/README.txt similarity index 100% rename from sites/all/modules/custom/jquery_update/README.txt rename to sites/all/modules/contrib/jquery_update/README.txt diff --git a/sites/all/modules/custom/jquery_update/jquery_update.info b/sites/all/modules/contrib/jquery_update/jquery_update.info similarity index 100% rename from sites/all/modules/custom/jquery_update/jquery_update.info rename to sites/all/modules/contrib/jquery_update/jquery_update.info diff --git a/sites/all/modules/custom/jquery_update/jquery_update.install b/sites/all/modules/contrib/jquery_update/jquery_update.install similarity index 100% rename from sites/all/modules/custom/jquery_update/jquery_update.install rename to sites/all/modules/contrib/jquery_update/jquery_update.install diff --git a/sites/all/modules/custom/jquery_update/jquery_update.module b/sites/all/modules/contrib/jquery_update/jquery_update.module similarity index 100% rename from sites/all/modules/custom/jquery_update/jquery_update.module rename to sites/all/modules/contrib/jquery_update/jquery_update.module diff --git a/sites/all/modules/custom/jquery_update/js/jquery_update.js b/sites/all/modules/contrib/jquery_update/js/jquery_update.js similarity index 100% rename from sites/all/modules/custom/jquery_update/js/jquery_update.js rename to sites/all/modules/contrib/jquery_update/js/jquery_update.js diff --git a/sites/all/modules/custom/jquery_update/replace/jquery/1.10/jquery-1.10.2.min.map b/sites/all/modules/contrib/jquery_update/replace/jquery/1.10/jquery-1.10.2.min.map similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/jquery/1.10/jquery-1.10.2.min.map rename to sites/all/modules/contrib/jquery_update/replace/jquery/1.10/jquery-1.10.2.min.map diff --git a/sites/all/modules/custom/jquery_update/replace/jquery/1.10/jquery.js b/sites/all/modules/contrib/jquery_update/replace/jquery/1.10/jquery.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/jquery/1.10/jquery.js rename to sites/all/modules/contrib/jquery_update/replace/jquery/1.10/jquery.js diff --git a/sites/all/modules/custom/jquery_update/replace/jquery/1.10/jquery.min.js b/sites/all/modules/contrib/jquery_update/replace/jquery/1.10/jquery.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/jquery/1.10/jquery.min.js rename to sites/all/modules/contrib/jquery_update/replace/jquery/1.10/jquery.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/jquery/1.5/jquery.js b/sites/all/modules/contrib/jquery_update/replace/jquery/1.5/jquery.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/jquery/1.5/jquery.js rename to sites/all/modules/contrib/jquery_update/replace/jquery/1.5/jquery.js diff --git a/sites/all/modules/custom/jquery_update/replace/jquery/1.5/jquery.min.js b/sites/all/modules/contrib/jquery_update/replace/jquery/1.5/jquery.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/jquery/1.5/jquery.min.js rename to sites/all/modules/contrib/jquery_update/replace/jquery/1.5/jquery.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/jquery/1.7/jquery.js b/sites/all/modules/contrib/jquery_update/replace/jquery/1.7/jquery.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/jquery/1.7/jquery.js rename to sites/all/modules/contrib/jquery_update/replace/jquery/1.7/jquery.js diff --git a/sites/all/modules/custom/jquery_update/replace/jquery/1.7/jquery.min.js b/sites/all/modules/contrib/jquery_update/replace/jquery/1.7/jquery.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/jquery/1.7/jquery.min.js rename to sites/all/modules/contrib/jquery_update/replace/jquery/1.7/jquery.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/jquery/1.8/jquery.js b/sites/all/modules/contrib/jquery_update/replace/jquery/1.8/jquery.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/jquery/1.8/jquery.js rename to sites/all/modules/contrib/jquery_update/replace/jquery/1.8/jquery.js diff --git a/sites/all/modules/custom/jquery_update/replace/jquery/1.8/jquery.min.js b/sites/all/modules/contrib/jquery_update/replace/jquery/1.8/jquery.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/jquery/1.8/jquery.min.js rename to sites/all/modules/contrib/jquery_update/replace/jquery/1.8/jquery.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/jquery/1.9/jquery.js b/sites/all/modules/contrib/jquery_update/replace/jquery/1.9/jquery.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/jquery/1.9/jquery.js rename to sites/all/modules/contrib/jquery_update/replace/jquery/1.9/jquery.js diff --git a/sites/all/modules/custom/jquery_update/replace/jquery/1.9/jquery.min.js b/sites/all/modules/contrib/jquery_update/replace/jquery/1.9/jquery.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/jquery/1.9/jquery.min.js rename to sites/all/modules/contrib/jquery_update/replace/jquery/1.9/jquery.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/jquery/1.9/jquery.min.map b/sites/all/modules/contrib/jquery_update/replace/jquery/1.9/jquery.min.map similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/jquery/1.9/jquery.min.map rename to sites/all/modules/contrib/jquery_update/replace/jquery/1.9/jquery.min.map diff --git a/sites/all/modules/custom/jquery_update/replace/misc/1.9/jquery.ba-bbq.js b/sites/all/modules/contrib/jquery_update/replace/misc/1.9/jquery.ba-bbq.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/misc/1.9/jquery.ba-bbq.js rename to sites/all/modules/contrib/jquery_update/replace/misc/1.9/jquery.ba-bbq.js diff --git a/sites/all/modules/custom/jquery_update/replace/misc/1.9/jquery.ba-bbq.min.js b/sites/all/modules/contrib/jquery_update/replace/misc/1.9/jquery.ba-bbq.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/misc/1.9/jquery.ba-bbq.min.js rename to sites/all/modules/contrib/jquery_update/replace/misc/1.9/jquery.ba-bbq.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/misc/1.9/overlay-parent.diff.js b/sites/all/modules/contrib/jquery_update/replace/misc/1.9/overlay-parent.diff.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/misc/1.9/overlay-parent.diff.js rename to sites/all/modules/contrib/jquery_update/replace/misc/1.9/overlay-parent.diff.js diff --git a/sites/all/modules/custom/jquery_update/replace/misc/1.9/overlay-parent.js b/sites/all/modules/contrib/jquery_update/replace/misc/1.9/overlay-parent.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/misc/1.9/overlay-parent.js rename to sites/all/modules/contrib/jquery_update/replace/misc/1.9/overlay-parent.js diff --git a/sites/all/modules/custom/jquery_update/replace/misc/jquery.form.js b/sites/all/modules/contrib/jquery_update/replace/misc/jquery.form.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/misc/jquery.form.js rename to sites/all/modules/contrib/jquery_update/replace/misc/jquery.form.js diff --git a/sites/all/modules/custom/jquery_update/replace/misc/jquery.form.min.js b/sites/all/modules/contrib/jquery_update/replace/misc/jquery.form.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/misc/jquery.form.min.js rename to sites/all/modules/contrib/jquery_update/replace/misc/jquery.form.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/AUTHORS.txt b/sites/all/modules/contrib/jquery_update/replace/ui/AUTHORS.txt similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/AUTHORS.txt rename to sites/all/modules/contrib/jquery_update/replace/ui/AUTHORS.txt diff --git a/sites/all/modules/custom/jquery_update/replace/ui/external/globalize.culture.de-DE.js b/sites/all/modules/contrib/jquery_update/replace/ui/external/globalize.culture.de-DE.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/external/globalize.culture.de-DE.js rename to sites/all/modules/contrib/jquery_update/replace/ui/external/globalize.culture.de-DE.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/external/globalize.culture.ja-JP.js b/sites/all/modules/contrib/jquery_update/replace/ui/external/globalize.culture.ja-JP.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/external/globalize.culture.ja-JP.js rename to sites/all/modules/contrib/jquery_update/replace/ui/external/globalize.culture.ja-JP.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/external/globalize.js b/sites/all/modules/contrib/jquery_update/replace/ui/external/globalize.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/external/globalize.js rename to sites/all/modules/contrib/jquery_update/replace/ui/external/globalize.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/external/jquery.bgiframe-2.1.2.js b/sites/all/modules/contrib/jquery_update/replace/ui/external/jquery.bgiframe-2.1.2.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/external/jquery.bgiframe-2.1.2.js rename to sites/all/modules/contrib/jquery_update/replace/ui/external/jquery.bgiframe-2.1.2.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/external/jquery.cookie.js b/sites/all/modules/contrib/jquery_update/replace/ui/external/jquery.cookie.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/external/jquery.cookie.js rename to sites/all/modules/contrib/jquery_update/replace/ui/external/jquery.cookie.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/external/jquery.metadata.js b/sites/all/modules/contrib/jquery_update/replace/ui/external/jquery.metadata.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/external/jquery.metadata.js rename to sites/all/modules/contrib/jquery_update/replace/ui/external/jquery.metadata.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/external/jquery.mousewheel.js b/sites/all/modules/contrib/jquery_update/replace/ui/external/jquery.mousewheel.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/external/jquery.mousewheel.js rename to sites/all/modules/contrib/jquery_update/replace/ui/external/jquery.mousewheel.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/external/jshint.js b/sites/all/modules/contrib/jquery_update/replace/ui/external/jshint.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/external/jshint.js rename to sites/all/modules/contrib/jquery_update/replace/ui/external/jshint.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/external/qunit.css b/sites/all/modules/contrib/jquery_update/replace/ui/external/qunit.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/external/qunit.css rename to sites/all/modules/contrib/jquery_update/replace/ui/external/qunit.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/external/qunit.js b/sites/all/modules/contrib/jquery_update/replace/ui/external/qunit.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/external/qunit.js rename to sites/all/modules/contrib/jquery_update/replace/ui/external/qunit.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/animated-overlay.gif b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/animated-overlay.gif similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/animated-overlay.gif rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/animated-overlay.gif diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_flat_75_ffffff_40x100.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_flat_75_ffffff_40x100.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_flat_75_ffffff_40x100.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_flat_75_ffffff_40x100.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_glass_75_dadada_1x400.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_glass_75_dadada_1x400.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_glass_75_dadada_1x400.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_glass_75_dadada_1x400.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-icons_222222_256x240.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-icons_222222_256x240.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-icons_222222_256x240.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-icons_222222_256x240.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-icons_2e83ff_256x240.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-icons_2e83ff_256x240.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-icons_2e83ff_256x240.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-icons_2e83ff_256x240.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-icons_454545_256x240.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-icons_454545_256x240.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-icons_454545_256x240.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-icons_454545_256x240.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-icons_888888_256x240.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-icons_888888_256x240.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-icons_888888_256x240.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-icons_888888_256x240.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-icons_cd0a0a_256x240.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-icons_cd0a0a_256x240.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/images/ui-icons_cd0a0a_256x240.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/images/ui-icons_cd0a0a_256x240.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery-ui.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery-ui.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery-ui.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery-ui.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.accordion.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.accordion.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.accordion.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.accordion.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.all.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.all.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.all.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.all.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.autocomplete.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.autocomplete.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.autocomplete.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.autocomplete.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.base.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.base.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.base.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.base.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.button.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.button.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.button.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.button.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.core.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.core.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.core.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.core.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.datepicker.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.datepicker.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.datepicker.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.datepicker.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.dialog.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.dialog.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.dialog.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.dialog.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.menu.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.menu.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.menu.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.menu.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.progressbar.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.progressbar.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.progressbar.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.progressbar.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.resizable.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.resizable.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.resizable.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.resizable.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.selectable.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.selectable.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.selectable.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.selectable.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.slider.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.slider.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.slider.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.slider.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.spinner.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.spinner.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.spinner.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.spinner.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.tabs.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.tabs.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.tabs.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.tabs.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.theme.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.theme.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.theme.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.theme.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.tooltip.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.tooltip.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/jquery.ui.tooltip.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/jquery.ui.tooltip.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/animated-overlay.gif b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/animated-overlay.gif similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/animated-overlay.gif rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/animated-overlay.gif diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-icons_222222_256x240.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-icons_222222_256x240.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-icons_222222_256x240.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-icons_222222_256x240.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-icons_2e83ff_256x240.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-icons_2e83ff_256x240.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-icons_2e83ff_256x240.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-icons_2e83ff_256x240.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-icons_454545_256x240.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-icons_454545_256x240.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-icons_454545_256x240.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-icons_454545_256x240.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-icons_888888_256x240.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-icons_888888_256x240.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-icons_888888_256x240.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-icons_888888_256x240.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-icons_cd0a0a_256x240.png b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-icons_cd0a0a_256x240.png similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/images/ui-icons_cd0a0a_256x240.png rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/images/ui-icons_cd0a0a_256x240.png diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery-ui.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery-ui.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery-ui.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery-ui.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.accordion.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.accordion.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.accordion.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.accordion.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.autocomplete.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.autocomplete.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.autocomplete.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.autocomplete.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.button.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.button.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.button.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.button.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.core.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.core.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.core.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.core.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.datepicker.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.datepicker.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.datepicker.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.datepicker.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.dialog.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.dialog.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.dialog.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.dialog.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.menu.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.menu.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.menu.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.menu.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.progressbar.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.progressbar.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.progressbar.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.progressbar.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.resizable.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.resizable.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.resizable.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.resizable.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.selectable.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.selectable.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.selectable.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.selectable.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.slider.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.slider.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.slider.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.slider.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.spinner.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.spinner.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.spinner.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.spinner.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.tabs.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.tabs.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.tabs.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.tabs.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.theme.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.theme.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.theme.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.theme.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.tooltip.min.css b/sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.tooltip.min.css similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/themes/base/minified/jquery.ui.tooltip.min.css rename to sites/all/modules/contrib/jquery_update/replace/ui/themes/base/minified/jquery.ui.tooltip.min.css diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/.jshintrc b/sites/all/modules/contrib/jquery_update/replace/ui/ui/.jshintrc similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/.jshintrc rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/.jshintrc diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery-ui-i18n.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery-ui-i18n.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery-ui-i18n.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery-ui-i18n.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-af.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-af.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-af.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-af.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ar-DZ.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ar-DZ.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ar-DZ.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ar-DZ.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ar.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ar.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ar.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ar.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-az.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-az.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-az.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-az.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-be.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-be.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-be.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-be.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-bg.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-bg.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-bg.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-bg.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-bs.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-bs.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-bs.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-bs.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ca.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ca.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ca.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ca.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-cs.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-cs.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-cs.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-cs.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-cy-GB.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-cy-GB.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-cy-GB.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-cy-GB.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-da.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-da.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-da.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-da.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-de.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-de.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-de.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-de.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-el.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-el.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-el.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-el.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-en-AU.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-en-AU.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-en-AU.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-en-AU.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-en-GB.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-en-GB.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-en-GB.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-en-GB.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-en-NZ.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-en-NZ.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-en-NZ.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-en-NZ.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-eo.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-eo.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-eo.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-eo.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-es.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-es.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-es.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-es.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-et.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-et.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-et.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-et.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-eu.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-eu.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-eu.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-eu.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fa.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fa.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fa.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fa.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fi.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fi.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fi.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fi.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fo.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fo.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fo.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fo.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fr-CA.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fr-CA.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fr-CA.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fr-CA.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fr-CH.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fr-CH.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fr-CH.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fr-CH.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fr.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fr.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fr.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-fr.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-gl.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-gl.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-gl.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-gl.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-he.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-he.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-he.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-he.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hi.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hi.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hi.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hi.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hr.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hr.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hr.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hr.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hu.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hu.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hu.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hu.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hy.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hy.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hy.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-hy.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-id.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-id.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-id.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-id.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-is.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-is.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-is.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-is.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-it.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-it.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-it.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-it.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ja.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ja.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ja.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ja.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ka.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ka.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ka.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ka.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-kk.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-kk.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-kk.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-kk.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-km.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-km.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-km.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-km.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ko.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ko.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ko.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ko.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ky.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ky.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ky.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ky.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-lb.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-lb.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-lb.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-lb.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-lt.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-lt.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-lt.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-lt.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-lv.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-lv.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-lv.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-lv.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-mk.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-mk.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-mk.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-mk.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ml.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ml.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ml.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ml.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ms.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ms.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ms.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ms.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nb.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nb.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nb.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nb.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nl-BE.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nl-BE.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nl-BE.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nl-BE.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nl.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nl.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nl.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nl.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nn.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nn.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nn.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-nn.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-no.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-no.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-no.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-no.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-pl.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-pl.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-pl.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-pl.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-pt-BR.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-pt-BR.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-pt-BR.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-pt-BR.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-pt.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-pt.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-pt.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-pt.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-rm.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-rm.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-rm.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-rm.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ro.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ro.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ro.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ro.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ru.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ru.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ru.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ru.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sk.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sk.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sk.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sk.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sl.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sl.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sl.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sl.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sq.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sq.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sq.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sq.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sr-SR.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sr-SR.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sr-SR.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sr-SR.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sr.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sr.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sr.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sr.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sv.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sv.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sv.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-sv.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ta.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ta.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ta.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-ta.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-th.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-th.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-th.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-th.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-tj.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-tj.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-tj.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-tj.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-tr.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-tr.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-tr.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-tr.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-uk.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-uk.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-uk.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-uk.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-vi.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-vi.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-vi.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-vi.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-zh-CN.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-zh-CN.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-zh-CN.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-zh-CN.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-zh-HK.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-zh-HK.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-zh-HK.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-zh-HK.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-zh-TW.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-zh-TW.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-zh-TW.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/i18n/jquery.ui.datepicker-zh-TW.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery-ui.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery-ui.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery-ui.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery-ui.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.accordion.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.accordion.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.accordion.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.accordion.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.autocomplete.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.autocomplete.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.autocomplete.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.autocomplete.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.button.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.button.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.button.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.button.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.core.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.core.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.core.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.core.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.datepicker.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.datepicker.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.datepicker.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.datepicker.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.dialog.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.dialog.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.dialog.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.dialog.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.draggable.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.draggable.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.draggable.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.draggable.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.droppable.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.droppable.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.droppable.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.droppable.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-blind.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-blind.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-blind.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-blind.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-bounce.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-bounce.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-bounce.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-bounce.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-clip.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-clip.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-clip.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-clip.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-drop.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-drop.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-drop.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-drop.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-explode.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-explode.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-explode.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-explode.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-fade.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-fade.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-fade.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-fade.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-fold.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-fold.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-fold.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-fold.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-highlight.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-highlight.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-highlight.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-highlight.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-pulsate.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-pulsate.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-pulsate.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-pulsate.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-scale.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-scale.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-scale.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-scale.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-shake.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-shake.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-shake.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-shake.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-slide.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-slide.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-slide.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-slide.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-transfer.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-transfer.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect-transfer.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect-transfer.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.effect.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.effect.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.menu.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.menu.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.menu.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.menu.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.mouse.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.mouse.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.mouse.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.mouse.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.position.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.position.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.position.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.position.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.progressbar.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.progressbar.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.progressbar.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.progressbar.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.resizable.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.resizable.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.resizable.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.resizable.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.selectable.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.selectable.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.selectable.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.selectable.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.slider.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.slider.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.slider.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.slider.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.sortable.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.sortable.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.sortable.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.sortable.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.spinner.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.spinner.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.spinner.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.spinner.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.tabs.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.tabs.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.tabs.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.tabs.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.tooltip.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.tooltip.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.tooltip.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.tooltip.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.widget.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.widget.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/jquery.ui.widget.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.widget.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery-ui-i18n.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery-ui-i18n.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery-ui-i18n.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery-ui-i18n.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-af.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-af.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-af.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-af.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ar-DZ.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ar-DZ.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ar-DZ.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ar-DZ.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ar.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ar.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ar.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ar.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-az.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-az.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-az.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-az.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-be.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-be.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-be.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-be.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-bg.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-bg.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-bg.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-bg.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-bs.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-bs.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-bs.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-bs.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ca.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ca.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ca.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ca.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-cs.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-cs.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-cs.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-cs.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-cy-GB.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-cy-GB.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-cy-GB.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-cy-GB.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-da.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-da.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-da.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-da.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-de.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-de.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-de.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-de.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-el.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-el.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-el.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-el.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-en-AU.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-en-AU.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-en-AU.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-en-AU.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-en-GB.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-en-GB.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-en-GB.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-en-GB.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-en-NZ.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-en-NZ.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-en-NZ.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-en-NZ.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-eo.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-eo.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-eo.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-eo.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-es.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-es.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-es.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-es.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-et.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-et.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-et.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-et.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-eu.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-eu.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-eu.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-eu.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fa.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fa.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fa.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fa.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fi.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fi.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fi.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fi.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fo.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fo.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fo.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fo.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fr-CA.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fr-CA.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fr-CA.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fr-CA.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fr-CH.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fr-CH.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fr-CH.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fr-CH.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fr.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fr.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fr.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-fr.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-gl.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-gl.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-gl.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-gl.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-he.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-he.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-he.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-he.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hi.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hi.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hi.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hi.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hr.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hr.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hr.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hr.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hu.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hu.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hu.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hu.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hy.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hy.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hy.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-hy.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-id.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-id.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-id.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-id.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-is.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-is.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-is.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-is.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-it.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-it.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-it.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-it.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ja.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ja.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ja.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ja.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ka.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ka.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ka.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ka.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-kk.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-kk.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-kk.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-kk.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-km.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-km.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-km.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-km.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ko.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ko.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ko.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ko.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ky.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ky.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ky.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ky.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-lb.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-lb.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-lb.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-lb.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-lt.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-lt.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-lt.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-lt.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-lv.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-lv.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-lv.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-lv.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-mk.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-mk.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-mk.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-mk.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ml.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ml.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ml.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ml.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ms.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ms.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ms.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ms.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nb.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nb.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nb.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nb.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nl-BE.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nl-BE.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nl-BE.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nl-BE.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nl.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nl.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nl.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nl.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nn.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nn.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nn.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-nn.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-no.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-no.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-no.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-no.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-pl.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-pl.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-pl.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-pl.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-pt-BR.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-pt-BR.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-pt-BR.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-pt-BR.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-pt.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-pt.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-pt.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-pt.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-rm.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-rm.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-rm.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-rm.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ro.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ro.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ro.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ro.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ru.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ru.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ru.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ru.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sk.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sk.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sk.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sk.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sl.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sl.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sl.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sl.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sq.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sq.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sq.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sq.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sr-SR.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sr-SR.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sr-SR.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sr-SR.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sr.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sr.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sr.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sr.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sv.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sv.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sv.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-sv.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ta.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ta.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ta.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-ta.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-th.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-th.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-th.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-th.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-tj.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-tj.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-tj.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-tj.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-tr.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-tr.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-tr.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-tr.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-uk.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-uk.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-uk.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-uk.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-vi.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-vi.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-vi.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-vi.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-zh-CN.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-zh-CN.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-zh-CN.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-zh-CN.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-zh-HK.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-zh-HK.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-zh-HK.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-zh-HK.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-zh-TW.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-zh-TW.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-zh-TW.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/i18n/jquery.ui.datepicker-zh-TW.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery-ui.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery-ui.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery-ui.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery-ui.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.accordion.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.accordion.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.accordion.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.accordion.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.autocomplete.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.autocomplete.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.autocomplete.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.autocomplete.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.button.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.button.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.button.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.button.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.core.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.core.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.core.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.core.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.datepicker.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.datepicker.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.datepicker.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.datepicker.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.dialog.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.dialog.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.dialog.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.dialog.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.draggable.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.draggable.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.draggable.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.draggable.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.droppable.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.droppable.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.droppable.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.droppable.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-blind.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-blind.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-blind.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-blind.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-bounce.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-bounce.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-bounce.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-bounce.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-clip.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-clip.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-clip.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-clip.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-drop.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-drop.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-drop.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-drop.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-explode.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-explode.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-explode.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-explode.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-fade.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-fade.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-fade.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-fade.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-fold.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-fold.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-fold.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-fold.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-highlight.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-highlight.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-highlight.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-highlight.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-pulsate.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-pulsate.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-pulsate.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-pulsate.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-scale.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-scale.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-scale.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-scale.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-shake.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-shake.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-shake.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-shake.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-slide.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-slide.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-slide.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-slide.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-transfer.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-transfer.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect-transfer.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect-transfer.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.effect.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.effect.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.menu.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.menu.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.menu.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.menu.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.mouse.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.mouse.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.mouse.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.mouse.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.position.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.position.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.position.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.position.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.progressbar.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.progressbar.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.progressbar.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.progressbar.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.resizable.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.resizable.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.resizable.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.resizable.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.selectable.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.selectable.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.selectable.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.selectable.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.slider.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.slider.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.slider.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.slider.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.sortable.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.sortable.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.sortable.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.sortable.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.spinner.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.spinner.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.spinner.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.spinner.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.tabs.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.tabs.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.tabs.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.tabs.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.tooltip.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.tooltip.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.tooltip.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.tooltip.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.widget.min.js b/sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.widget.min.js similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/ui/minified/jquery.ui.widget.min.js rename to sites/all/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.widget.min.js diff --git a/sites/all/modules/custom/jquery_update/replace/ui/version.txt b/sites/all/modules/contrib/jquery_update/replace/ui/version.txt similarity index 100% rename from sites/all/modules/custom/jquery_update/replace/ui/version.txt rename to sites/all/modules/contrib/jquery_update/replace/ui/version.txt diff --git a/sites/all/modules/custom/libraries/CHANGELOG.txt b/sites/all/modules/contrib/libraries/CHANGELOG.txt similarity index 100% rename from sites/all/modules/custom/libraries/CHANGELOG.txt rename to sites/all/modules/contrib/libraries/CHANGELOG.txt diff --git a/sites/all/modules/custom/media/LICENSE.txt b/sites/all/modules/contrib/libraries/LICENSE.txt old mode 100644 new mode 100755 similarity index 100% rename from sites/all/modules/custom/media/LICENSE.txt rename to sites/all/modules/contrib/libraries/LICENSE.txt diff --git a/sites/all/modules/custom/libraries/README.txt b/sites/all/modules/contrib/libraries/README.txt similarity index 100% rename from sites/all/modules/custom/libraries/README.txt rename to sites/all/modules/contrib/libraries/README.txt diff --git a/sites/all/modules/custom/libraries/libraries.api.php b/sites/all/modules/contrib/libraries/libraries.api.php similarity index 100% rename from sites/all/modules/custom/libraries/libraries.api.php rename to sites/all/modules/contrib/libraries/libraries.api.php diff --git a/sites/all/modules/custom/libraries/libraries.drush.inc b/sites/all/modules/contrib/libraries/libraries.drush.inc similarity index 100% rename from sites/all/modules/custom/libraries/libraries.drush.inc rename to sites/all/modules/contrib/libraries/libraries.drush.inc diff --git a/sites/all/modules/custom/libraries/libraries.info b/sites/all/modules/contrib/libraries/libraries.info similarity index 100% rename from sites/all/modules/custom/libraries/libraries.info rename to sites/all/modules/contrib/libraries/libraries.info diff --git a/sites/all/modules/custom/libraries/libraries.install b/sites/all/modules/contrib/libraries/libraries.install similarity index 100% rename from sites/all/modules/custom/libraries/libraries.install rename to sites/all/modules/contrib/libraries/libraries.install diff --git a/sites/all/modules/custom/libraries/libraries.module b/sites/all/modules/contrib/libraries/libraries.module similarity index 100% rename from sites/all/modules/custom/libraries/libraries.module rename to sites/all/modules/contrib/libraries/libraries.module diff --git a/sites/all/modules/custom/libraries/tests/libraries.test b/sites/all/modules/contrib/libraries/tests/libraries.test similarity index 100% rename from sites/all/modules/custom/libraries/tests/libraries.test rename to sites/all/modules/contrib/libraries/tests/libraries.test diff --git a/sites/all/modules/custom/libraries/tests/libraries/example/README.txt b/sites/all/modules/contrib/libraries/tests/libraries/example/README.txt similarity index 100% rename from sites/all/modules/custom/libraries/tests/libraries/example/README.txt rename to sites/all/modules/contrib/libraries/tests/libraries/example/README.txt diff --git a/sites/all/modules/custom/libraries/tests/libraries/example/example_1.css b/sites/all/modules/contrib/libraries/tests/libraries/example/example_1.css similarity index 100% rename from sites/all/modules/custom/libraries/tests/libraries/example/example_1.css rename to sites/all/modules/contrib/libraries/tests/libraries/example/example_1.css diff --git a/sites/all/modules/custom/libraries/tests/libraries/example/example_1.js b/sites/all/modules/contrib/libraries/tests/libraries/example/example_1.js similarity index 100% rename from sites/all/modules/custom/libraries/tests/libraries/example/example_1.js rename to sites/all/modules/contrib/libraries/tests/libraries/example/example_1.js diff --git a/sites/all/modules/custom/libraries/tests/libraries/example/example_1.php b/sites/all/modules/contrib/libraries/tests/libraries/example/example_1.php similarity index 100% rename from sites/all/modules/custom/libraries/tests/libraries/example/example_1.php rename to sites/all/modules/contrib/libraries/tests/libraries/example/example_1.php diff --git a/sites/all/modules/custom/libraries/tests/libraries/example/example_2.css b/sites/all/modules/contrib/libraries/tests/libraries/example/example_2.css similarity index 100% rename from sites/all/modules/custom/libraries/tests/libraries/example/example_2.css rename to sites/all/modules/contrib/libraries/tests/libraries/example/example_2.css diff --git a/sites/all/modules/custom/libraries/tests/libraries/example/example_2.js b/sites/all/modules/contrib/libraries/tests/libraries/example/example_2.js similarity index 100% rename from sites/all/modules/custom/libraries/tests/libraries/example/example_2.js rename to sites/all/modules/contrib/libraries/tests/libraries/example/example_2.js diff --git a/sites/all/modules/custom/libraries/tests/libraries/example/example_2.php b/sites/all/modules/contrib/libraries/tests/libraries/example/example_2.php similarity index 100% rename from sites/all/modules/custom/libraries/tests/libraries/example/example_2.php rename to sites/all/modules/contrib/libraries/tests/libraries/example/example_2.php diff --git a/sites/all/modules/custom/libraries/tests/libraries/example/example_3.css b/sites/all/modules/contrib/libraries/tests/libraries/example/example_3.css similarity index 100% rename from sites/all/modules/custom/libraries/tests/libraries/example/example_3.css rename to sites/all/modules/contrib/libraries/tests/libraries/example/example_3.css diff --git a/sites/all/modules/custom/libraries/tests/libraries/example/example_3.js b/sites/all/modules/contrib/libraries/tests/libraries/example/example_3.js similarity index 100% rename from sites/all/modules/custom/libraries/tests/libraries/example/example_3.js rename to sites/all/modules/contrib/libraries/tests/libraries/example/example_3.js diff --git a/sites/all/modules/custom/libraries/tests/libraries/example/example_3.php b/sites/all/modules/contrib/libraries/tests/libraries/example/example_3.php similarity index 100% rename from sites/all/modules/custom/libraries/tests/libraries/example/example_3.php rename to sites/all/modules/contrib/libraries/tests/libraries/example/example_3.php diff --git a/sites/all/modules/custom/libraries/tests/libraries/example/example_4.css b/sites/all/modules/contrib/libraries/tests/libraries/example/example_4.css similarity index 100% rename from sites/all/modules/custom/libraries/tests/libraries/example/example_4.css rename to sites/all/modules/contrib/libraries/tests/libraries/example/example_4.css diff --git a/sites/all/modules/custom/libraries/tests/libraries/example/example_4.js b/sites/all/modules/contrib/libraries/tests/libraries/example/example_4.js similarity index 100% rename from sites/all/modules/custom/libraries/tests/libraries/example/example_4.js rename to sites/all/modules/contrib/libraries/tests/libraries/example/example_4.js diff --git a/sites/all/modules/custom/libraries/tests/libraries/example/example_4.php b/sites/all/modules/contrib/libraries/tests/libraries/example/example_4.php similarity index 100% rename from sites/all/modules/custom/libraries/tests/libraries/example/example_4.php rename to sites/all/modules/contrib/libraries/tests/libraries/example/example_4.php diff --git a/sites/all/modules/custom/libraries/tests/libraries/example_info_file.libraries.info b/sites/all/modules/contrib/libraries/tests/libraries/example_info_file.libraries.info similarity index 100% rename from sites/all/modules/custom/libraries/tests/libraries/example_info_file.libraries.info rename to sites/all/modules/contrib/libraries/tests/libraries/example_info_file.libraries.info diff --git a/sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module.css b/sites/all/modules/contrib/libraries/tests/modules/libraries_test_module/libraries_test_module.css similarity index 100% rename from sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module.css rename to sites/all/modules/contrib/libraries/tests/modules/libraries_test_module/libraries_test_module.css diff --git a/sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module.inc b/sites/all/modules/contrib/libraries/tests/modules/libraries_test_module/libraries_test_module.inc similarity index 100% rename from sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module.inc rename to sites/all/modules/contrib/libraries/tests/modules/libraries_test_module/libraries_test_module.inc diff --git a/sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module.info b/sites/all/modules/contrib/libraries/tests/modules/libraries_test_module/libraries_test_module.info similarity index 100% rename from sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module.info rename to sites/all/modules/contrib/libraries/tests/modules/libraries_test_module/libraries_test_module.info diff --git a/sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module.js b/sites/all/modules/contrib/libraries/tests/modules/libraries_test_module/libraries_test_module.js similarity index 100% rename from sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module.js rename to sites/all/modules/contrib/libraries/tests/modules/libraries_test_module/libraries_test_module.js diff --git a/sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module.module b/sites/all/modules/contrib/libraries/tests/modules/libraries_test_module/libraries_test_module.module similarity index 100% rename from sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module.module rename to sites/all/modules/contrib/libraries/tests/modules/libraries_test_module/libraries_test_module.module diff --git a/sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module_post_load.inc b/sites/all/modules/contrib/libraries/tests/modules/libraries_test_module/libraries_test_module_post_load.inc similarity index 100% rename from sites/all/modules/custom/libraries/tests/modules/libraries_test_module/libraries_test_module_post_load.inc rename to sites/all/modules/contrib/libraries/tests/modules/libraries_test_module/libraries_test_module_post_load.inc diff --git a/sites/all/modules/custom/libraries/tests/themes/libraries_test_theme/libraries_test_theme.css b/sites/all/modules/contrib/libraries/tests/themes/libraries_test_theme/libraries_test_theme.css similarity index 100% rename from sites/all/modules/custom/libraries/tests/themes/libraries_test_theme/libraries_test_theme.css rename to sites/all/modules/contrib/libraries/tests/themes/libraries_test_theme/libraries_test_theme.css diff --git a/sites/all/modules/custom/libraries/tests/themes/libraries_test_theme/libraries_test_theme.inc b/sites/all/modules/contrib/libraries/tests/themes/libraries_test_theme/libraries_test_theme.inc similarity index 100% rename from sites/all/modules/custom/libraries/tests/themes/libraries_test_theme/libraries_test_theme.inc rename to sites/all/modules/contrib/libraries/tests/themes/libraries_test_theme/libraries_test_theme.inc diff --git a/sites/all/modules/custom/libraries/tests/themes/libraries_test_theme/libraries_test_theme.info b/sites/all/modules/contrib/libraries/tests/themes/libraries_test_theme/libraries_test_theme.info similarity index 100% rename from sites/all/modules/custom/libraries/tests/themes/libraries_test_theme/libraries_test_theme.info rename to sites/all/modules/contrib/libraries/tests/themes/libraries_test_theme/libraries_test_theme.info diff --git a/sites/all/modules/custom/libraries/tests/themes/libraries_test_theme/libraries_test_theme.js b/sites/all/modules/contrib/libraries/tests/themes/libraries_test_theme/libraries_test_theme.js similarity index 100% rename from sites/all/modules/custom/libraries/tests/themes/libraries_test_theme/libraries_test_theme.js rename to sites/all/modules/contrib/libraries/tests/themes/libraries_test_theme/libraries_test_theme.js diff --git a/sites/all/modules/custom/libraries/tests/themes/libraries_test_theme/template.php b/sites/all/modules/contrib/libraries/tests/themes/libraries_test_theme/template.php similarity index 100% rename from sites/all/modules/custom/libraries/tests/themes/libraries_test_theme/template.php rename to sites/all/modules/contrib/libraries/tests/themes/libraries_test_theme/template.php diff --git a/sites/all/modules/custom/menu_attributes/LICENSE.txt b/sites/all/modules/contrib/link/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/menu_attributes/LICENSE.txt rename to sites/all/modules/contrib/link/LICENSE.txt diff --git a/sites/all/modules/custom/link/link-rtl.css b/sites/all/modules/contrib/link/link-rtl.css similarity index 100% rename from sites/all/modules/custom/link/link-rtl.css rename to sites/all/modules/contrib/link/link-rtl.css diff --git a/sites/all/modules/custom/link/link.css b/sites/all/modules/contrib/link/link.css similarity index 100% rename from sites/all/modules/custom/link/link.css rename to sites/all/modules/contrib/link/link.css diff --git a/sites/all/modules/custom/link/link.devel_generate.inc b/sites/all/modules/contrib/link/link.devel_generate.inc similarity index 100% rename from sites/all/modules/custom/link/link.devel_generate.inc rename to sites/all/modules/contrib/link/link.devel_generate.inc diff --git a/sites/all/modules/custom/link/link.diff.inc b/sites/all/modules/contrib/link/link.diff.inc similarity index 100% rename from sites/all/modules/custom/link/link.diff.inc rename to sites/all/modules/contrib/link/link.diff.inc diff --git a/sites/all/modules/custom/link/link.info b/sites/all/modules/contrib/link/link.info similarity index 100% rename from sites/all/modules/custom/link/link.info rename to sites/all/modules/contrib/link/link.info diff --git a/sites/all/modules/custom/link/link.install b/sites/all/modules/contrib/link/link.install similarity index 100% rename from sites/all/modules/custom/link/link.install rename to sites/all/modules/contrib/link/link.install diff --git a/sites/all/modules/custom/link/link.migrate.inc b/sites/all/modules/contrib/link/link.migrate.inc similarity index 100% rename from sites/all/modules/custom/link/link.migrate.inc rename to sites/all/modules/contrib/link/link.migrate.inc diff --git a/sites/all/modules/custom/link/link.module b/sites/all/modules/contrib/link/link.module similarity index 100% rename from sites/all/modules/custom/link/link.module rename to sites/all/modules/contrib/link/link.module diff --git a/sites/all/modules/custom/link/tests/link.attribute.test b/sites/all/modules/contrib/link/tests/link.attribute.test similarity index 100% rename from sites/all/modules/custom/link/tests/link.attribute.test rename to sites/all/modules/contrib/link/tests/link.attribute.test diff --git a/sites/all/modules/custom/link/tests/link.crud.test b/sites/all/modules/contrib/link/tests/link.crud.test similarity index 100% rename from sites/all/modules/custom/link/tests/link.crud.test rename to sites/all/modules/contrib/link/tests/link.crud.test diff --git a/sites/all/modules/custom/link/tests/link.crud_browser.test b/sites/all/modules/contrib/link/tests/link.crud_browser.test similarity index 100% rename from sites/all/modules/custom/link/tests/link.crud_browser.test rename to sites/all/modules/contrib/link/tests/link.crud_browser.test diff --git a/sites/all/modules/custom/link/tests/link.test b/sites/all/modules/contrib/link/tests/link.test similarity index 100% rename from sites/all/modules/custom/link/tests/link.test rename to sites/all/modules/contrib/link/tests/link.test diff --git a/sites/all/modules/custom/link/tests/link.token.test b/sites/all/modules/contrib/link/tests/link.token.test similarity index 100% rename from sites/all/modules/custom/link/tests/link.token.test rename to sites/all/modules/contrib/link/tests/link.token.test diff --git a/sites/all/modules/custom/link/tests/link.validate.test b/sites/all/modules/contrib/link/tests/link.validate.test similarity index 100% rename from sites/all/modules/custom/link/tests/link.validate.test rename to sites/all/modules/contrib/link/tests/link.validate.test diff --git a/sites/all/modules/custom/link/views/link.views.inc b/sites/all/modules/contrib/link/views/link.views.inc similarity index 100% rename from sites/all/modules/custom/link/views/link.views.inc rename to sites/all/modules/contrib/link/views/link.views.inc diff --git a/sites/all/modules/custom/link/views/link_views_handler_argument_target.inc b/sites/all/modules/contrib/link/views/link_views_handler_argument_target.inc similarity index 100% rename from sites/all/modules/custom/link/views/link_views_handler_argument_target.inc rename to sites/all/modules/contrib/link/views/link_views_handler_argument_target.inc diff --git a/sites/all/modules/custom/link/views/link_views_handler_filter_protocol.inc b/sites/all/modules/contrib/link/views/link_views_handler_filter_protocol.inc similarity index 100% rename from sites/all/modules/custom/link/views/link_views_handler_filter_protocol.inc rename to sites/all/modules/contrib/link/views/link_views_handler_filter_protocol.inc diff --git a/sites/all/modules/custom/menu_block/LICENSE.txt b/sites/all/modules/contrib/masquerade/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/menu_block/LICENSE.txt rename to sites/all/modules/contrib/masquerade/LICENSE.txt diff --git a/sites/all/modules/custom/masquerade/README.txt b/sites/all/modules/contrib/masquerade/README.txt similarity index 100% rename from sites/all/modules/custom/masquerade/README.txt rename to sites/all/modules/contrib/masquerade/README.txt diff --git a/sites/all/modules/custom/masquerade/masquerade.info b/sites/all/modules/contrib/masquerade/masquerade.info similarity index 100% rename from sites/all/modules/custom/masquerade/masquerade.info rename to sites/all/modules/contrib/masquerade/masquerade.info diff --git a/sites/all/modules/custom/masquerade/masquerade.install b/sites/all/modules/contrib/masquerade/masquerade.install similarity index 100% rename from sites/all/modules/custom/masquerade/masquerade.install rename to sites/all/modules/contrib/masquerade/masquerade.install diff --git a/sites/all/modules/custom/masquerade/masquerade.module b/sites/all/modules/contrib/masquerade/masquerade.module similarity index 100% rename from sites/all/modules/custom/masquerade/masquerade.module rename to sites/all/modules/contrib/masquerade/masquerade.module diff --git a/sites/all/modules/custom/masquerade/masquerade.test b/sites/all/modules/contrib/masquerade/masquerade.test similarity index 100% rename from sites/all/modules/custom/masquerade/masquerade.test rename to sites/all/modules/contrib/masquerade/masquerade.test diff --git a/sites/all/modules/custom/module_filter/LICENSE.txt b/sites/all/modules/contrib/media/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/module_filter/LICENSE.txt rename to sites/all/modules/contrib/media/LICENSE.txt diff --git a/sites/all/modules/custom/media/README.txt b/sites/all/modules/contrib/media/README.txt similarity index 100% rename from sites/all/modules/custom/media/README.txt rename to sites/all/modules/contrib/media/README.txt diff --git a/sites/all/modules/custom/media/css/media.css b/sites/all/modules/contrib/media/css/media.css similarity index 100% rename from sites/all/modules/custom/media/css/media.css rename to sites/all/modules/contrib/media/css/media.css diff --git a/sites/all/modules/custom/media/images/icons/default/application-octet-stream.png b/sites/all/modules/contrib/media/images/icons/default/application-octet-stream.png similarity index 100% rename from sites/all/modules/custom/media/images/icons/default/application-octet-stream.png rename to sites/all/modules/contrib/media/images/icons/default/application-octet-stream.png diff --git a/sites/all/modules/custom/media/images/icons/default/audio-mpeg.png b/sites/all/modules/contrib/media/images/icons/default/audio-mpeg.png similarity index 100% rename from sites/all/modules/custom/media/images/icons/default/audio-mpeg.png rename to sites/all/modules/contrib/media/images/icons/default/audio-mpeg.png diff --git a/sites/all/modules/custom/media/images/icons/default/audio-x-generic.png b/sites/all/modules/contrib/media/images/icons/default/audio-x-generic.png similarity index 100% rename from sites/all/modules/custom/media/images/icons/default/audio-x-generic.png rename to sites/all/modules/contrib/media/images/icons/default/audio-x-generic.png diff --git a/sites/all/modules/custom/media/images/icons/default/file-unknown.png b/sites/all/modules/contrib/media/images/icons/default/file-unknown.png similarity index 100% rename from sites/all/modules/custom/media/images/icons/default/file-unknown.png rename to sites/all/modules/contrib/media/images/icons/default/file-unknown.png diff --git a/sites/all/modules/custom/media/images/icons/default/image-x-generic.png b/sites/all/modules/contrib/media/images/icons/default/image-x-generic.png similarity index 100% rename from sites/all/modules/custom/media/images/icons/default/image-x-generic.png rename to sites/all/modules/contrib/media/images/icons/default/image-x-generic.png diff --git a/sites/all/modules/custom/media/images/icons/default/video-x-generic.png b/sites/all/modules/contrib/media/images/icons/default/video-x-generic.png similarity index 100% rename from sites/all/modules/custom/media/images/icons/default/video-x-generic.png rename to sites/all/modules/contrib/media/images/icons/default/video-x-generic.png diff --git a/sites/all/modules/custom/media/includes/MediaBrowserPlugin.inc b/sites/all/modules/contrib/media/includes/MediaBrowserPlugin.inc similarity index 100% rename from sites/all/modules/custom/media/includes/MediaBrowserPlugin.inc rename to sites/all/modules/contrib/media/includes/MediaBrowserPlugin.inc diff --git a/sites/all/modules/custom/media/includes/MediaBrowserPluginInterface.inc b/sites/all/modules/contrib/media/includes/MediaBrowserPluginInterface.inc similarity index 100% rename from sites/all/modules/custom/media/includes/MediaBrowserPluginInterface.inc rename to sites/all/modules/contrib/media/includes/MediaBrowserPluginInterface.inc diff --git a/sites/all/modules/custom/media/includes/MediaBrowserUpload.inc b/sites/all/modules/contrib/media/includes/MediaBrowserUpload.inc similarity index 100% rename from sites/all/modules/custom/media/includes/MediaBrowserUpload.inc rename to sites/all/modules/contrib/media/includes/MediaBrowserUpload.inc diff --git a/sites/all/modules/custom/media/includes/MediaBrowserView.inc b/sites/all/modules/contrib/media/includes/MediaBrowserView.inc similarity index 100% rename from sites/all/modules/custom/media/includes/MediaBrowserView.inc rename to sites/all/modules/contrib/media/includes/MediaBrowserView.inc diff --git a/sites/all/modules/custom/media/includes/MediaEntityTranslationHandler.inc b/sites/all/modules/contrib/media/includes/MediaEntityTranslationHandler.inc similarity index 100% rename from sites/all/modules/custom/media/includes/MediaEntityTranslationHandler.inc rename to sites/all/modules/contrib/media/includes/MediaEntityTranslationHandler.inc diff --git a/sites/all/modules/custom/media/includes/MediaReadOnlyStreamWrapper.inc b/sites/all/modules/contrib/media/includes/MediaReadOnlyStreamWrapper.inc similarity index 100% rename from sites/all/modules/custom/media/includes/MediaReadOnlyStreamWrapper.inc rename to sites/all/modules/contrib/media/includes/MediaReadOnlyStreamWrapper.inc diff --git a/sites/all/modules/custom/media/includes/media.admin.inc b/sites/all/modules/contrib/media/includes/media.admin.inc similarity index 100% rename from sites/all/modules/custom/media/includes/media.admin.inc rename to sites/all/modules/contrib/media/includes/media.admin.inc diff --git a/sites/all/modules/custom/media/includes/media.browser.inc b/sites/all/modules/contrib/media/includes/media.browser.inc similarity index 100% rename from sites/all/modules/custom/media/includes/media.browser.inc rename to sites/all/modules/contrib/media/includes/media.browser.inc diff --git a/sites/all/modules/custom/media/includes/media.fields.inc b/sites/all/modules/contrib/media/includes/media.fields.inc similarity index 100% rename from sites/all/modules/custom/media/includes/media.fields.inc rename to sites/all/modules/contrib/media/includes/media.fields.inc diff --git a/sites/all/modules/custom/media/includes/media.pages.inc b/sites/all/modules/contrib/media/includes/media.pages.inc similarity index 100% rename from sites/all/modules/custom/media/includes/media.pages.inc rename to sites/all/modules/contrib/media/includes/media.pages.inc diff --git a/sites/all/modules/custom/media/includes/media.theme.inc b/sites/all/modules/contrib/media/includes/media.theme.inc similarity index 100% rename from sites/all/modules/custom/media/includes/media.theme.inc rename to sites/all/modules/contrib/media/includes/media.theme.inc diff --git a/sites/all/modules/custom/media/includes/media_views_plugin_display_media_browser.inc b/sites/all/modules/contrib/media/includes/media_views_plugin_display_media_browser.inc similarity index 100% rename from sites/all/modules/custom/media/includes/media_views_plugin_display_media_browser.inc rename to sites/all/modules/contrib/media/includes/media_views_plugin_display_media_browser.inc diff --git a/sites/all/modules/custom/media/includes/media_views_plugin_style_media_browser.inc b/sites/all/modules/contrib/media/includes/media_views_plugin_style_media_browser.inc similarity index 100% rename from sites/all/modules/custom/media/includes/media_views_plugin_style_media_browser.inc rename to sites/all/modules/contrib/media/includes/media_views_plugin_style_media_browser.inc diff --git a/sites/all/modules/custom/media/js/media.admin.js b/sites/all/modules/contrib/media/js/media.admin.js similarity index 100% rename from sites/all/modules/custom/media/js/media.admin.js rename to sites/all/modules/contrib/media/js/media.admin.js diff --git a/sites/all/modules/custom/media/js/media.browser.js b/sites/all/modules/contrib/media/js/media.browser.js similarity index 100% rename from sites/all/modules/custom/media/js/media.browser.js rename to sites/all/modules/contrib/media/js/media.browser.js diff --git a/sites/all/modules/custom/media/js/media.core.js b/sites/all/modules/contrib/media/js/media.core.js similarity index 100% rename from sites/all/modules/custom/media/js/media.core.js rename to sites/all/modules/contrib/media/js/media.core.js diff --git a/sites/all/modules/custom/media/js/media.js b/sites/all/modules/contrib/media/js/media.js similarity index 100% rename from sites/all/modules/custom/media/js/media.js rename to sites/all/modules/contrib/media/js/media.js diff --git a/sites/all/modules/custom/media/js/media.popups.js b/sites/all/modules/contrib/media/js/media.popups.js similarity index 100% rename from sites/all/modules/custom/media/js/media.popups.js rename to sites/all/modules/contrib/media/js/media.popups.js diff --git a/sites/all/modules/custom/media/js/plugins/media.views.js b/sites/all/modules/contrib/media/js/plugins/media.views.js similarity index 100% rename from sites/all/modules/custom/media/js/plugins/media.views.js rename to sites/all/modules/contrib/media/js/plugins/media.views.js diff --git a/sites/all/modules/custom/media/js/util/ba-debug.min.js b/sites/all/modules/contrib/media/js/util/ba-debug.min.js similarity index 100% rename from sites/all/modules/custom/media/js/util/ba-debug.min.js rename to sites/all/modules/contrib/media/js/util/ba-debug.min.js diff --git a/sites/all/modules/custom/media/js/util/json2.js b/sites/all/modules/contrib/media/js/util/json2.js similarity index 100% rename from sites/all/modules/custom/media/js/util/json2.js rename to sites/all/modules/contrib/media/js/util/json2.js diff --git a/sites/all/modules/custom/media/media-views-view-media-browser.tpl.php b/sites/all/modules/contrib/media/media-views-view-media-browser.tpl.php similarity index 100% rename from sites/all/modules/custom/media/media-views-view-media-browser.tpl.php rename to sites/all/modules/contrib/media/media-views-view-media-browser.tpl.php diff --git a/sites/all/modules/custom/media/media.api.php b/sites/all/modules/contrib/media/media.api.php similarity index 100% rename from sites/all/modules/custom/media/media.api.php rename to sites/all/modules/contrib/media/media.api.php diff --git a/sites/all/modules/custom/media/media.file_default_displays.inc b/sites/all/modules/contrib/media/media.file_default_displays.inc similarity index 100% rename from sites/all/modules/custom/media/media.file_default_displays.inc rename to sites/all/modules/contrib/media/media.file_default_displays.inc diff --git a/sites/all/modules/custom/media/media.info b/sites/all/modules/contrib/media/media.info similarity index 100% rename from sites/all/modules/custom/media/media.info rename to sites/all/modules/contrib/media/media.info diff --git a/sites/all/modules/custom/media/media.install b/sites/all/modules/contrib/media/media.install similarity index 100% rename from sites/all/modules/custom/media/media.install rename to sites/all/modules/contrib/media/media.install diff --git a/sites/all/modules/custom/media/media.media.inc b/sites/all/modules/contrib/media/media.media.inc similarity index 100% rename from sites/all/modules/custom/media/media.media.inc rename to sites/all/modules/contrib/media/media.media.inc diff --git a/sites/all/modules/custom/media/media.module b/sites/all/modules/contrib/media/media.module similarity index 100% rename from sites/all/modules/custom/media/media.module rename to sites/all/modules/contrib/media/media.module diff --git a/sites/all/modules/custom/media/media.views.inc b/sites/all/modules/contrib/media/media.views.inc similarity index 100% rename from sites/all/modules/custom/media/media.views.inc rename to sites/all/modules/contrib/media/media.views.inc diff --git a/sites/all/modules/custom/media/modules/media_bulk_upload/includes/MediaBrowserBulkUpload.inc b/sites/all/modules/contrib/media/modules/media_bulk_upload/includes/MediaBrowserBulkUpload.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_bulk_upload/includes/MediaBrowserBulkUpload.inc rename to sites/all/modules/contrib/media/modules/media_bulk_upload/includes/MediaBrowserBulkUpload.inc diff --git a/sites/all/modules/custom/media/modules/media_bulk_upload/includes/media_bulk_upload.admin.inc b/sites/all/modules/contrib/media/modules/media_bulk_upload/includes/media_bulk_upload.admin.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_bulk_upload/includes/media_bulk_upload.admin.inc rename to sites/all/modules/contrib/media/modules/media_bulk_upload/includes/media_bulk_upload.admin.inc diff --git a/sites/all/modules/custom/media/modules/media_bulk_upload/includes/media_bulk_upload.pages.inc b/sites/all/modules/contrib/media/modules/media_bulk_upload/includes/media_bulk_upload.pages.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_bulk_upload/includes/media_bulk_upload.pages.inc rename to sites/all/modules/contrib/media/modules/media_bulk_upload/includes/media_bulk_upload.pages.inc diff --git a/sites/all/modules/custom/media/modules/media_bulk_upload/media_bulk_upload.info b/sites/all/modules/contrib/media/modules/media_bulk_upload/media_bulk_upload.info similarity index 100% rename from sites/all/modules/custom/media/modules/media_bulk_upload/media_bulk_upload.info rename to sites/all/modules/contrib/media/modules/media_bulk_upload/media_bulk_upload.info diff --git a/sites/all/modules/custom/media/modules/media_bulk_upload/media_bulk_upload.install b/sites/all/modules/contrib/media/modules/media_bulk_upload/media_bulk_upload.install similarity index 100% rename from sites/all/modules/custom/media/modules/media_bulk_upload/media_bulk_upload.install rename to sites/all/modules/contrib/media/modules/media_bulk_upload/media_bulk_upload.install diff --git a/sites/all/modules/custom/media/modules/media_bulk_upload/media_bulk_upload.module b/sites/all/modules/contrib/media/modules/media_bulk_upload/media_bulk_upload.module similarity index 100% rename from sites/all/modules/custom/media/modules/media_bulk_upload/media_bulk_upload.module rename to sites/all/modules/contrib/media/modules/media_bulk_upload/media_bulk_upload.module diff --git a/sites/all/modules/custom/media/modules/media_bulk_upload/tests/media_bulk_upload.test b/sites/all/modules/contrib/media/modules/media_bulk_upload/tests/media_bulk_upload.test similarity index 100% rename from sites/all/modules/custom/media/modules/media_bulk_upload/tests/media_bulk_upload.test rename to sites/all/modules/contrib/media/modules/media_bulk_upload/tests/media_bulk_upload.test diff --git a/sites/all/modules/custom/media/modules/media_internet/includes/MediaBrowserInternet.inc b/sites/all/modules/contrib/media/modules/media_internet/includes/MediaBrowserInternet.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_internet/includes/MediaBrowserInternet.inc rename to sites/all/modules/contrib/media/modules/media_internet/includes/MediaBrowserInternet.inc diff --git a/sites/all/modules/custom/media/modules/media_internet/includes/MediaInternetBaseHandler.inc b/sites/all/modules/contrib/media/modules/media_internet/includes/MediaInternetBaseHandler.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_internet/includes/MediaInternetBaseHandler.inc rename to sites/all/modules/contrib/media/modules/media_internet/includes/MediaInternetBaseHandler.inc diff --git a/sites/all/modules/custom/media/modules/media_internet/includes/MediaInternetFileHandler.inc b/sites/all/modules/contrib/media/modules/media_internet/includes/MediaInternetFileHandler.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_internet/includes/MediaInternetFileHandler.inc rename to sites/all/modules/contrib/media/modules/media_internet/includes/MediaInternetFileHandler.inc diff --git a/sites/all/modules/custom/media/modules/media_internet/includes/MediaInternetNoHandlerException.inc b/sites/all/modules/contrib/media/modules/media_internet/includes/MediaInternetNoHandlerException.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_internet/includes/MediaInternetNoHandlerException.inc rename to sites/all/modules/contrib/media/modules/media_internet/includes/MediaInternetNoHandlerException.inc diff --git a/sites/all/modules/custom/media/modules/media_internet/includes/MediaInternetValidationException.inc b/sites/all/modules/contrib/media/modules/media_internet/includes/MediaInternetValidationException.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_internet/includes/MediaInternetValidationException.inc rename to sites/all/modules/contrib/media/modules/media_internet/includes/MediaInternetValidationException.inc diff --git a/sites/all/modules/custom/media/modules/media_internet/media_internet.api.php b/sites/all/modules/contrib/media/modules/media_internet/media_internet.api.php similarity index 100% rename from sites/all/modules/custom/media/modules/media_internet/media_internet.api.php rename to sites/all/modules/contrib/media/modules/media_internet/media_internet.api.php diff --git a/sites/all/modules/custom/media/modules/media_internet/media_internet.info b/sites/all/modules/contrib/media/modules/media_internet/media_internet.info similarity index 100% rename from sites/all/modules/custom/media/modules/media_internet/media_internet.info rename to sites/all/modules/contrib/media/modules/media_internet/media_internet.info diff --git a/sites/all/modules/custom/media/modules/media_internet/media_internet.install b/sites/all/modules/contrib/media/modules/media_internet/media_internet.install similarity index 100% rename from sites/all/modules/custom/media/modules/media_internet/media_internet.install rename to sites/all/modules/contrib/media/modules/media_internet/media_internet.install diff --git a/sites/all/modules/custom/media/modules/media_internet/media_internet.media.inc b/sites/all/modules/contrib/media/modules/media_internet/media_internet.media.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_internet/media_internet.media.inc rename to sites/all/modules/contrib/media/modules/media_internet/media_internet.media.inc diff --git a/sites/all/modules/custom/media/modules/media_internet/media_internet.module b/sites/all/modules/contrib/media/modules/media_internet/media_internet.module similarity index 100% rename from sites/all/modules/custom/media/modules/media_internet/media_internet.module rename to sites/all/modules/contrib/media/modules/media_internet/media_internet.module diff --git a/sites/all/modules/custom/media/modules/media_internet/tests/includes/MediaInternetTestHandler.inc b/sites/all/modules/contrib/media/modules/media_internet/tests/includes/MediaInternetTestHandler.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_internet/tests/includes/MediaInternetTestHandler.inc rename to sites/all/modules/contrib/media/modules/media_internet/tests/includes/MediaInternetTestHandler.inc diff --git a/sites/all/modules/custom/media/modules/media_internet/tests/includes/MediaInternetTestStreamWrapper.inc b/sites/all/modules/contrib/media/modules/media_internet/tests/includes/MediaInternetTestStreamWrapper.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_internet/tests/includes/MediaInternetTestStreamWrapper.inc rename to sites/all/modules/contrib/media/modules/media_internet/tests/includes/MediaInternetTestStreamWrapper.inc diff --git a/sites/all/modules/custom/media/modules/media_internet/tests/media_internet.test b/sites/all/modules/contrib/media/modules/media_internet/tests/media_internet.test similarity index 100% rename from sites/all/modules/custom/media/modules/media_internet/tests/media_internet.test rename to sites/all/modules/contrib/media/modules/media_internet/tests/media_internet.test diff --git a/sites/all/modules/custom/media/modules/media_internet/tests/media_internet_test.info b/sites/all/modules/contrib/media/modules/media_internet/tests/media_internet_test.info similarity index 100% rename from sites/all/modules/custom/media/modules/media_internet/tests/media_internet_test.info rename to sites/all/modules/contrib/media/modules/media_internet/tests/media_internet_test.info diff --git a/sites/all/modules/custom/media/modules/media_internet/tests/media_internet_test.module b/sites/all/modules/contrib/media/modules/media_internet/tests/media_internet_test.module similarity index 100% rename from sites/all/modules/custom/media/modules/media_internet/tests/media_internet_test.module rename to sites/all/modules/contrib/media/modules/media_internet/tests/media_internet_test.module diff --git a/sites/all/modules/custom/media/modules/media_migrate_file_types/includes/media_migrate_file_types.pages.inc b/sites/all/modules/contrib/media/modules/media_migrate_file_types/includes/media_migrate_file_types.pages.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_migrate_file_types/includes/media_migrate_file_types.pages.inc rename to sites/all/modules/contrib/media/modules/media_migrate_file_types/includes/media_migrate_file_types.pages.inc diff --git a/sites/all/modules/custom/media/modules/media_migrate_file_types/media_migrate_file_types.info b/sites/all/modules/contrib/media/modules/media_migrate_file_types/media_migrate_file_types.info similarity index 100% rename from sites/all/modules/custom/media/modules/media_migrate_file_types/media_migrate_file_types.info rename to sites/all/modules/contrib/media/modules/media_migrate_file_types/media_migrate_file_types.info diff --git a/sites/all/modules/custom/media/modules/media_migrate_file_types/media_migrate_file_types.module b/sites/all/modules/contrib/media/modules/media_migrate_file_types/media_migrate_file_types.module similarity index 100% rename from sites/all/modules/custom/media/modules/media_migrate_file_types/media_migrate_file_types.module rename to sites/all/modules/contrib/media/modules/media_migrate_file_types/media_migrate_file_types.module diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/css/media_wysiwyg.css b/sites/all/modules/contrib/media/modules/media_wysiwyg/css/media_wysiwyg.css similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/css/media_wysiwyg.css rename to sites/all/modules/contrib/media/modules/media_wysiwyg/css/media_wysiwyg.css diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/images/wysiwyg-media.gif b/sites/all/modules/contrib/media/modules/media_wysiwyg/images/wysiwyg-media.gif similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/images/wysiwyg-media.gif rename to sites/all/modules/contrib/media/modules/media_wysiwyg/images/wysiwyg-media.gif diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/includes/media_wysiwyg.file_usage.inc b/sites/all/modules/contrib/media/modules/media_wysiwyg/includes/media_wysiwyg.file_usage.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/includes/media_wysiwyg.file_usage.inc rename to sites/all/modules/contrib/media/modules/media_wysiwyg/includes/media_wysiwyg.file_usage.inc diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/includes/media_wysiwyg.filter.inc b/sites/all/modules/contrib/media/modules/media_wysiwyg/includes/media_wysiwyg.filter.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/includes/media_wysiwyg.filter.inc rename to sites/all/modules/contrib/media/modules/media_wysiwyg/includes/media_wysiwyg.filter.inc diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/includes/media_wysiwyg.pages.inc b/sites/all/modules/contrib/media/modules/media_wysiwyg/includes/media_wysiwyg.pages.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/includes/media_wysiwyg.pages.inc rename to sites/all/modules/contrib/media/modules/media_wysiwyg/includes/media_wysiwyg.pages.inc diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/includes/media_wysiwyg.uuid.inc b/sites/all/modules/contrib/media/modules/media_wysiwyg/includes/media_wysiwyg.uuid.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/includes/media_wysiwyg.uuid.inc rename to sites/all/modules/contrib/media/modules/media_wysiwyg/includes/media_wysiwyg.uuid.inc diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/js/media_wysiwyg.filter.js b/sites/all/modules/contrib/media/modules/media_wysiwyg/js/media_wysiwyg.filter.js similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/js/media_wysiwyg.filter.js rename to sites/all/modules/contrib/media/modules/media_wysiwyg/js/media_wysiwyg.filter.js diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/js/media_wysiwyg.format_form.js b/sites/all/modules/contrib/media/modules/media_wysiwyg/js/media_wysiwyg.format_form.js similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/js/media_wysiwyg.format_form.js rename to sites/all/modules/contrib/media/modules/media_wysiwyg/js/media_wysiwyg.format_form.js diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/js/wysiwyg-media.js b/sites/all/modules/contrib/media/modules/media_wysiwyg/js/wysiwyg-media.js similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/js/wysiwyg-media.js rename to sites/all/modules/contrib/media/modules/media_wysiwyg/js/wysiwyg-media.js diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.api.php b/sites/all/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.api.php similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.api.php rename to sites/all/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.api.php diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.ckeditor.inc b/sites/all/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.ckeditor.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.ckeditor.inc rename to sites/all/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.ckeditor.inc diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.info b/sites/all/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.info similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.info rename to sites/all/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.info diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.install b/sites/all/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.install similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.install rename to sites/all/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.install diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.module b/sites/all/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.module similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.module rename to sites/all/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.module diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.test b/sites/all/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.test similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.test rename to sites/all/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.test diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.variable.inc b/sites/all/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.variable.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/media_wysiwyg.variable.inc rename to sites/all/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.variable.inc diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/tests/media_wysiwyg.file_usage.test b/sites/all/modules/contrib/media/modules/media_wysiwyg/tests/media_wysiwyg.file_usage.test similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/tests/media_wysiwyg.file_usage.test rename to sites/all/modules/contrib/media/modules/media_wysiwyg/tests/media_wysiwyg.file_usage.test diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/tests/media_wysiwyg.macro.test b/sites/all/modules/contrib/media/modules/media_wysiwyg/tests/media_wysiwyg.macro.test similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/tests/media_wysiwyg.macro.test rename to sites/all/modules/contrib/media/modules/media_wysiwyg/tests/media_wysiwyg.macro.test diff --git a/sites/all/modules/custom/media/modules/media_wysiwyg/wysiwyg_plugins/media.inc b/sites/all/modules/contrib/media/modules/media_wysiwyg/wysiwyg_plugins/media.inc similarity index 100% rename from sites/all/modules/custom/media/modules/media_wysiwyg/wysiwyg_plugins/media.inc rename to sites/all/modules/contrib/media/modules/media_wysiwyg/wysiwyg_plugins/media.inc diff --git a/sites/all/modules/contrib/media/modules/media_wysiwyg/wysiwyg_plugins/media_ckeditor/images/icon.gif b/sites/all/modules/contrib/media/modules/media_wysiwyg/wysiwyg_plugins/media_ckeditor/images/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..bf9b501c3dd5a10dcbc33ce2491afe1ea55fb737 GIT binary patch literal 126 zcmZ?wbhEHb6krfwSj52a|NsAk55FHcaG;@~fdR|~l0cyNlZBC;ft5iA!~v;gV0Mn! zb;sM_)DNZ&KjMOxwKKS- + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/sites/all/modules/custom/views_responsive_grid/README.txt b/sites/all/modules/contrib/views_responsive_grid/README.txt similarity index 100% rename from sites/all/modules/custom/views_responsive_grid/README.txt rename to sites/all/modules/contrib/views_responsive_grid/README.txt diff --git a/sites/all/modules/custom/views_responsive_grid/views-view-responsive-grid.tpl.php b/sites/all/modules/contrib/views_responsive_grid/views-view-responsive-grid.tpl.php similarity index 100% rename from sites/all/modules/custom/views_responsive_grid/views-view-responsive-grid.tpl.php rename to sites/all/modules/contrib/views_responsive_grid/views-view-responsive-grid.tpl.php diff --git a/sites/all/modules/custom/views_responsive_grid/views_responsive_grid.info b/sites/all/modules/contrib/views_responsive_grid/views_responsive_grid.info similarity index 100% rename from sites/all/modules/custom/views_responsive_grid/views_responsive_grid.info rename to sites/all/modules/contrib/views_responsive_grid/views_responsive_grid.info diff --git a/sites/all/modules/custom/views_responsive_grid/views_responsive_grid.module b/sites/all/modules/contrib/views_responsive_grid/views_responsive_grid.module similarity index 100% rename from sites/all/modules/custom/views_responsive_grid/views_responsive_grid.module rename to sites/all/modules/contrib/views_responsive_grid/views_responsive_grid.module diff --git a/sites/all/modules/custom/views_responsive_grid/views_responsive_grid.views.inc b/sites/all/modules/contrib/views_responsive_grid/views_responsive_grid.views.inc similarity index 100% rename from sites/all/modules/custom/views_responsive_grid/views_responsive_grid.views.inc rename to sites/all/modules/contrib/views_responsive_grid/views_responsive_grid.views.inc diff --git a/sites/all/modules/custom/views_responsive_grid/views_responsive_grid_plugin_style_responsive_grid.inc b/sites/all/modules/contrib/views_responsive_grid/views_responsive_grid_plugin_style_responsive_grid.inc similarity index 100% rename from sites/all/modules/custom/views_responsive_grid/views_responsive_grid_plugin_style_responsive_grid.inc rename to sites/all/modules/contrib/views_responsive_grid/views_responsive_grid_plugin_style_responsive_grid.inc diff --git a/sites/all/modules/contrib/webform/LICENSE.txt b/sites/all/modules/contrib/webform/LICENSE.txt new file mode 100644 index 0000000000..d159169d10 --- /dev/null +++ b/sites/all/modules/contrib/webform/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/sites/all/modules/custom/webform/README.txt b/sites/all/modules/contrib/webform/README.txt similarity index 100% rename from sites/all/modules/custom/webform/README.txt rename to sites/all/modules/contrib/webform/README.txt diff --git a/sites/all/modules/custom/webform/THEMING.txt b/sites/all/modules/contrib/webform/THEMING.txt similarity index 100% rename from sites/all/modules/custom/webform/THEMING.txt rename to sites/all/modules/contrib/webform/THEMING.txt diff --git a/sites/all/modules/custom/webform/components/date.inc b/sites/all/modules/contrib/webform/components/date.inc similarity index 100% rename from sites/all/modules/custom/webform/components/date.inc rename to sites/all/modules/contrib/webform/components/date.inc diff --git a/sites/all/modules/custom/webform/components/email.inc b/sites/all/modules/contrib/webform/components/email.inc similarity index 100% rename from sites/all/modules/custom/webform/components/email.inc rename to sites/all/modules/contrib/webform/components/email.inc diff --git a/sites/all/modules/custom/webform/components/fieldset.inc b/sites/all/modules/contrib/webform/components/fieldset.inc similarity index 100% rename from sites/all/modules/custom/webform/components/fieldset.inc rename to sites/all/modules/contrib/webform/components/fieldset.inc diff --git a/sites/all/modules/custom/webform/components/file.inc b/sites/all/modules/contrib/webform/components/file.inc similarity index 100% rename from sites/all/modules/custom/webform/components/file.inc rename to sites/all/modules/contrib/webform/components/file.inc diff --git a/sites/all/modules/custom/webform/components/grid.inc b/sites/all/modules/contrib/webform/components/grid.inc similarity index 100% rename from sites/all/modules/custom/webform/components/grid.inc rename to sites/all/modules/contrib/webform/components/grid.inc diff --git a/sites/all/modules/custom/webform/components/hidden.inc b/sites/all/modules/contrib/webform/components/hidden.inc similarity index 100% rename from sites/all/modules/custom/webform/components/hidden.inc rename to sites/all/modules/contrib/webform/components/hidden.inc diff --git a/sites/all/modules/custom/webform/components/markup.inc b/sites/all/modules/contrib/webform/components/markup.inc similarity index 100% rename from sites/all/modules/custom/webform/components/markup.inc rename to sites/all/modules/contrib/webform/components/markup.inc diff --git a/sites/all/modules/custom/webform/components/number.inc b/sites/all/modules/contrib/webform/components/number.inc similarity index 100% rename from sites/all/modules/custom/webform/components/number.inc rename to sites/all/modules/contrib/webform/components/number.inc diff --git a/sites/all/modules/custom/webform/components/pagebreak.inc b/sites/all/modules/contrib/webform/components/pagebreak.inc similarity index 100% rename from sites/all/modules/custom/webform/components/pagebreak.inc rename to sites/all/modules/contrib/webform/components/pagebreak.inc diff --git a/sites/all/modules/custom/webform/components/select.inc b/sites/all/modules/contrib/webform/components/select.inc similarity index 100% rename from sites/all/modules/custom/webform/components/select.inc rename to sites/all/modules/contrib/webform/components/select.inc diff --git a/sites/all/modules/custom/webform/components/textarea.inc b/sites/all/modules/contrib/webform/components/textarea.inc similarity index 100% rename from sites/all/modules/custom/webform/components/textarea.inc rename to sites/all/modules/contrib/webform/components/textarea.inc diff --git a/sites/all/modules/custom/webform/components/textfield.inc b/sites/all/modules/contrib/webform/components/textfield.inc similarity index 100% rename from sites/all/modules/custom/webform/components/textfield.inc rename to sites/all/modules/contrib/webform/components/textfield.inc diff --git a/sites/all/modules/custom/webform/components/time.inc b/sites/all/modules/contrib/webform/components/time.inc similarity index 100% rename from sites/all/modules/custom/webform/components/time.inc rename to sites/all/modules/contrib/webform/components/time.inc diff --git a/sites/all/modules/custom/webform/css/webform-admin.css b/sites/all/modules/contrib/webform/css/webform-admin.css similarity index 100% rename from sites/all/modules/custom/webform/css/webform-admin.css rename to sites/all/modules/contrib/webform/css/webform-admin.css diff --git a/sites/all/modules/custom/webform/css/webform.css b/sites/all/modules/contrib/webform/css/webform.css similarity index 100% rename from sites/all/modules/custom/webform/css/webform.css rename to sites/all/modules/contrib/webform/css/webform.css diff --git a/sites/all/modules/custom/webform/images/calendar.png b/sites/all/modules/contrib/webform/images/calendar.png similarity index 100% rename from sites/all/modules/custom/webform/images/calendar.png rename to sites/all/modules/contrib/webform/images/calendar.png diff --git a/sites/all/modules/custom/webform/includes/exporters/webform_exporter.inc b/sites/all/modules/contrib/webform/includes/exporters/webform_exporter.inc similarity index 100% rename from sites/all/modules/custom/webform/includes/exporters/webform_exporter.inc rename to sites/all/modules/contrib/webform/includes/exporters/webform_exporter.inc diff --git a/sites/all/modules/custom/webform/includes/exporters/webform_exporter_delimited.inc b/sites/all/modules/contrib/webform/includes/exporters/webform_exporter_delimited.inc similarity index 100% rename from sites/all/modules/custom/webform/includes/exporters/webform_exporter_delimited.inc rename to sites/all/modules/contrib/webform/includes/exporters/webform_exporter_delimited.inc diff --git a/sites/all/modules/custom/webform/includes/exporters/webform_exporter_excel_delimited.inc b/sites/all/modules/contrib/webform/includes/exporters/webform_exporter_excel_delimited.inc similarity index 100% rename from sites/all/modules/custom/webform/includes/exporters/webform_exporter_excel_delimited.inc rename to sites/all/modules/contrib/webform/includes/exporters/webform_exporter_excel_delimited.inc diff --git a/sites/all/modules/custom/webform/includes/exporters/webform_exporter_excel_xlsx.inc b/sites/all/modules/contrib/webform/includes/exporters/webform_exporter_excel_xlsx.inc similarity index 100% rename from sites/all/modules/custom/webform/includes/exporters/webform_exporter_excel_xlsx.inc rename to sites/all/modules/contrib/webform/includes/exporters/webform_exporter_excel_xlsx.inc diff --git a/sites/all/modules/custom/webform/includes/webform.admin.inc b/sites/all/modules/contrib/webform/includes/webform.admin.inc similarity index 100% rename from sites/all/modules/custom/webform/includes/webform.admin.inc rename to sites/all/modules/contrib/webform/includes/webform.admin.inc diff --git a/sites/all/modules/custom/webform/includes/webform.components.inc b/sites/all/modules/contrib/webform/includes/webform.components.inc similarity index 100% rename from sites/all/modules/custom/webform/includes/webform.components.inc rename to sites/all/modules/contrib/webform/includes/webform.components.inc diff --git a/sites/all/modules/custom/webform/includes/webform.conditionals.inc b/sites/all/modules/contrib/webform/includes/webform.conditionals.inc similarity index 100% rename from sites/all/modules/custom/webform/includes/webform.conditionals.inc rename to sites/all/modules/contrib/webform/includes/webform.conditionals.inc diff --git a/sites/all/modules/custom/webform/includes/webform.emails.inc b/sites/all/modules/contrib/webform/includes/webform.emails.inc similarity index 100% rename from sites/all/modules/custom/webform/includes/webform.emails.inc rename to sites/all/modules/contrib/webform/includes/webform.emails.inc diff --git a/sites/all/modules/custom/webform/includes/webform.export.inc b/sites/all/modules/contrib/webform/includes/webform.export.inc similarity index 100% rename from sites/all/modules/custom/webform/includes/webform.export.inc rename to sites/all/modules/contrib/webform/includes/webform.export.inc diff --git a/sites/all/modules/custom/webform/includes/webform.options.inc b/sites/all/modules/contrib/webform/includes/webform.options.inc similarity index 100% rename from sites/all/modules/custom/webform/includes/webform.options.inc rename to sites/all/modules/contrib/webform/includes/webform.options.inc diff --git a/sites/all/modules/custom/webform/includes/webform.pages.inc b/sites/all/modules/contrib/webform/includes/webform.pages.inc similarity index 100% rename from sites/all/modules/custom/webform/includes/webform.pages.inc rename to sites/all/modules/contrib/webform/includes/webform.pages.inc diff --git a/sites/all/modules/custom/webform/includes/webform.report.inc b/sites/all/modules/contrib/webform/includes/webform.report.inc similarity index 100% rename from sites/all/modules/custom/webform/includes/webform.report.inc rename to sites/all/modules/contrib/webform/includes/webform.report.inc diff --git a/sites/all/modules/custom/webform/includes/webform.submissions.inc b/sites/all/modules/contrib/webform/includes/webform.submissions.inc similarity index 100% rename from sites/all/modules/custom/webform/includes/webform.submissions.inc rename to sites/all/modules/contrib/webform/includes/webform.submissions.inc diff --git a/sites/all/modules/custom/webform/js/node-type-form.js b/sites/all/modules/contrib/webform/js/node-type-form.js similarity index 100% rename from sites/all/modules/custom/webform/js/node-type-form.js rename to sites/all/modules/contrib/webform/js/node-type-form.js diff --git a/sites/all/modules/custom/webform/js/select-admin.js b/sites/all/modules/contrib/webform/js/select-admin.js similarity index 100% rename from sites/all/modules/custom/webform/js/select-admin.js rename to sites/all/modules/contrib/webform/js/select-admin.js diff --git a/sites/all/modules/custom/webform/js/webform-admin.js b/sites/all/modules/contrib/webform/js/webform-admin.js similarity index 100% rename from sites/all/modules/custom/webform/js/webform-admin.js rename to sites/all/modules/contrib/webform/js/webform-admin.js diff --git a/sites/all/modules/custom/webform/js/webform.js b/sites/all/modules/contrib/webform/js/webform.js similarity index 100% rename from sites/all/modules/custom/webform/js/webform.js rename to sites/all/modules/contrib/webform/js/webform.js diff --git a/sites/all/modules/custom/webform/templates/webform-analysis-component.tpl.php b/sites/all/modules/contrib/webform/templates/webform-analysis-component.tpl.php similarity index 100% rename from sites/all/modules/custom/webform/templates/webform-analysis-component.tpl.php rename to sites/all/modules/contrib/webform/templates/webform-analysis-component.tpl.php diff --git a/sites/all/modules/custom/webform/templates/webform-analysis.tpl.php b/sites/all/modules/contrib/webform/templates/webform-analysis.tpl.php similarity index 100% rename from sites/all/modules/custom/webform/templates/webform-analysis.tpl.php rename to sites/all/modules/contrib/webform/templates/webform-analysis.tpl.php diff --git a/sites/all/modules/custom/webform/templates/webform-calendar.tpl.php b/sites/all/modules/contrib/webform/templates/webform-calendar.tpl.php similarity index 100% rename from sites/all/modules/custom/webform/templates/webform-calendar.tpl.php rename to sites/all/modules/contrib/webform/templates/webform-calendar.tpl.php diff --git a/sites/all/modules/custom/webform/templates/webform-confirmation.tpl.php b/sites/all/modules/contrib/webform/templates/webform-confirmation.tpl.php similarity index 100% rename from sites/all/modules/custom/webform/templates/webform-confirmation.tpl.php rename to sites/all/modules/contrib/webform/templates/webform-confirmation.tpl.php diff --git a/sites/all/modules/custom/webform/templates/webform-form.tpl.php b/sites/all/modules/contrib/webform/templates/webform-form.tpl.php similarity index 100% rename from sites/all/modules/custom/webform/templates/webform-form.tpl.php rename to sites/all/modules/contrib/webform/templates/webform-form.tpl.php diff --git a/sites/all/modules/custom/webform/templates/webform-mail.tpl.php b/sites/all/modules/contrib/webform/templates/webform-mail.tpl.php similarity index 100% rename from sites/all/modules/custom/webform/templates/webform-mail.tpl.php rename to sites/all/modules/contrib/webform/templates/webform-mail.tpl.php diff --git a/sites/all/modules/custom/webform/templates/webform-progressbar.tpl.php b/sites/all/modules/contrib/webform/templates/webform-progressbar.tpl.php similarity index 100% rename from sites/all/modules/custom/webform/templates/webform-progressbar.tpl.php rename to sites/all/modules/contrib/webform/templates/webform-progressbar.tpl.php diff --git a/sites/all/modules/custom/webform/templates/webform-results-submissions.tpl.php b/sites/all/modules/contrib/webform/templates/webform-results-submissions.tpl.php similarity index 100% rename from sites/all/modules/custom/webform/templates/webform-results-submissions.tpl.php rename to sites/all/modules/contrib/webform/templates/webform-results-submissions.tpl.php diff --git a/sites/all/modules/custom/webform/templates/webform-submission-information.tpl.php b/sites/all/modules/contrib/webform/templates/webform-submission-information.tpl.php similarity index 100% rename from sites/all/modules/custom/webform/templates/webform-submission-information.tpl.php rename to sites/all/modules/contrib/webform/templates/webform-submission-information.tpl.php diff --git a/sites/all/modules/custom/webform/templates/webform-submission-navigation.tpl.php b/sites/all/modules/contrib/webform/templates/webform-submission-navigation.tpl.php similarity index 100% rename from sites/all/modules/custom/webform/templates/webform-submission-navigation.tpl.php rename to sites/all/modules/contrib/webform/templates/webform-submission-navigation.tpl.php diff --git a/sites/all/modules/custom/webform/templates/webform-submission-page.tpl.php b/sites/all/modules/contrib/webform/templates/webform-submission-page.tpl.php similarity index 100% rename from sites/all/modules/custom/webform/templates/webform-submission-page.tpl.php rename to sites/all/modules/contrib/webform/templates/webform-submission-page.tpl.php diff --git a/sites/all/modules/custom/webform/templates/webform-submission.tpl.php b/sites/all/modules/contrib/webform/templates/webform-submission.tpl.php similarity index 100% rename from sites/all/modules/custom/webform/templates/webform-submission.tpl.php rename to sites/all/modules/contrib/webform/templates/webform-submission.tpl.php diff --git a/sites/all/modules/custom/webform/tests/components.test b/sites/all/modules/contrib/webform/tests/components.test similarity index 100% rename from sites/all/modules/custom/webform/tests/components.test rename to sites/all/modules/contrib/webform/tests/components.test diff --git a/sites/all/modules/custom/webform/tests/conditionals.test b/sites/all/modules/contrib/webform/tests/conditionals.test similarity index 100% rename from sites/all/modules/custom/webform/tests/conditionals.test rename to sites/all/modules/contrib/webform/tests/conditionals.test diff --git a/sites/all/modules/custom/webform/tests/permissions.test b/sites/all/modules/contrib/webform/tests/permissions.test similarity index 100% rename from sites/all/modules/custom/webform/tests/permissions.test rename to sites/all/modules/contrib/webform/tests/permissions.test diff --git a/sites/all/modules/custom/webform/tests/submission.test b/sites/all/modules/contrib/webform/tests/submission.test similarity index 100% rename from sites/all/modules/custom/webform/tests/submission.test rename to sites/all/modules/contrib/webform/tests/submission.test diff --git a/sites/all/modules/custom/webform/tests/webform.test b/sites/all/modules/contrib/webform/tests/webform.test similarity index 100% rename from sites/all/modules/custom/webform/tests/webform.test rename to sites/all/modules/contrib/webform/tests/webform.test diff --git a/sites/all/modules/custom/webform/views/default_views/webform_results.inc b/sites/all/modules/contrib/webform/views/default_views/webform_results.inc similarity index 100% rename from sites/all/modules/custom/webform/views/default_views/webform_results.inc rename to sites/all/modules/contrib/webform/views/default_views/webform_results.inc diff --git a/sites/all/modules/custom/webform/views/default_views/webform_submissions.inc b/sites/all/modules/contrib/webform/views/default_views/webform_submissions.inc similarity index 100% rename from sites/all/modules/custom/webform/views/default_views/webform_submissions.inc rename to sites/all/modules/contrib/webform/views/default_views/webform_submissions.inc diff --git a/sites/all/modules/custom/webform/views/webform.views.inc b/sites/all/modules/contrib/webform/views/webform.views.inc similarity index 100% rename from sites/all/modules/custom/webform/views/webform.views.inc rename to sites/all/modules/contrib/webform/views/webform.views.inc diff --git a/sites/all/modules/custom/webform/views/webform_handler_area_result_pager.inc b/sites/all/modules/contrib/webform/views/webform_handler_area_result_pager.inc similarity index 100% rename from sites/all/modules/custom/webform/views/webform_handler_area_result_pager.inc rename to sites/all/modules/contrib/webform/views/webform_handler_area_result_pager.inc diff --git a/sites/all/modules/custom/webform/views/webform_handler_field_form_body.inc b/sites/all/modules/contrib/webform/views/webform_handler_field_form_body.inc similarity index 100% rename from sites/all/modules/custom/webform/views/webform_handler_field_form_body.inc rename to sites/all/modules/contrib/webform/views/webform_handler_field_form_body.inc diff --git a/sites/all/modules/custom/webform/views/webform_handler_field_is_draft.inc b/sites/all/modules/contrib/webform/views/webform_handler_field_is_draft.inc similarity index 100% rename from sites/all/modules/custom/webform/views/webform_handler_field_is_draft.inc rename to sites/all/modules/contrib/webform/views/webform_handler_field_is_draft.inc diff --git a/sites/all/modules/custom/webform/views/webform_handler_field_node_link_edit.inc b/sites/all/modules/contrib/webform/views/webform_handler_field_node_link_edit.inc similarity index 100% rename from sites/all/modules/custom/webform/views/webform_handler_field_node_link_edit.inc rename to sites/all/modules/contrib/webform/views/webform_handler_field_node_link_edit.inc diff --git a/sites/all/modules/custom/webform/views/webform_handler_field_node_link_results.inc b/sites/all/modules/contrib/webform/views/webform_handler_field_node_link_results.inc similarity index 100% rename from sites/all/modules/custom/webform/views/webform_handler_field_node_link_results.inc rename to sites/all/modules/contrib/webform/views/webform_handler_field_node_link_results.inc diff --git a/sites/all/modules/custom/webform/views/webform_handler_field_submission_count.inc b/sites/all/modules/contrib/webform/views/webform_handler_field_submission_count.inc similarity index 100% rename from sites/all/modules/custom/webform/views/webform_handler_field_submission_count.inc rename to sites/all/modules/contrib/webform/views/webform_handler_field_submission_count.inc diff --git a/sites/all/modules/custom/webform/views/webform_handler_field_submission_data.inc b/sites/all/modules/contrib/webform/views/webform_handler_field_submission_data.inc similarity index 100% rename from sites/all/modules/custom/webform/views/webform_handler_field_submission_data.inc rename to sites/all/modules/contrib/webform/views/webform_handler_field_submission_data.inc diff --git a/sites/all/modules/custom/webform/views/webform_handler_field_submission_link.inc b/sites/all/modules/contrib/webform/views/webform_handler_field_submission_link.inc similarity index 100% rename from sites/all/modules/custom/webform/views/webform_handler_field_submission_link.inc rename to sites/all/modules/contrib/webform/views/webform_handler_field_submission_link.inc diff --git a/sites/all/modules/custom/webform/views/webform_handler_field_webform_status.inc b/sites/all/modules/contrib/webform/views/webform_handler_field_webform_status.inc similarity index 100% rename from sites/all/modules/custom/webform/views/webform_handler_field_webform_status.inc rename to sites/all/modules/contrib/webform/views/webform_handler_field_webform_status.inc diff --git a/sites/all/modules/custom/webform/views/webform_handler_filter_is_draft.inc b/sites/all/modules/contrib/webform/views/webform_handler_filter_is_draft.inc similarity index 100% rename from sites/all/modules/custom/webform/views/webform_handler_filter_is_draft.inc rename to sites/all/modules/contrib/webform/views/webform_handler_filter_is_draft.inc diff --git a/sites/all/modules/custom/webform/views/webform_handler_filter_submission_data.inc b/sites/all/modules/contrib/webform/views/webform_handler_filter_submission_data.inc similarity index 100% rename from sites/all/modules/custom/webform/views/webform_handler_filter_submission_data.inc rename to sites/all/modules/contrib/webform/views/webform_handler_filter_submission_data.inc diff --git a/sites/all/modules/custom/webform/views/webform_handler_filter_webform_status.inc b/sites/all/modules/contrib/webform/views/webform_handler_filter_webform_status.inc similarity index 100% rename from sites/all/modules/custom/webform/views/webform_handler_filter_webform_status.inc rename to sites/all/modules/contrib/webform/views/webform_handler_filter_webform_status.inc diff --git a/sites/all/modules/custom/webform/views/webform_handler_relationship_submission_data.inc b/sites/all/modules/contrib/webform/views/webform_handler_relationship_submission_data.inc similarity index 100% rename from sites/all/modules/custom/webform/views/webform_handler_relationship_submission_data.inc rename to sites/all/modules/contrib/webform/views/webform_handler_relationship_submission_data.inc diff --git a/sites/all/modules/custom/webform/views/webform_plugin_row_submission_view.inc b/sites/all/modules/contrib/webform/views/webform_plugin_row_submission_view.inc similarity index 100% rename from sites/all/modules/custom/webform/views/webform_plugin_row_submission_view.inc rename to sites/all/modules/contrib/webform/views/webform_plugin_row_submission_view.inc diff --git a/sites/all/modules/custom/webform/webform.api.php b/sites/all/modules/contrib/webform/webform.api.php similarity index 100% rename from sites/all/modules/custom/webform/webform.api.php rename to sites/all/modules/contrib/webform/webform.api.php diff --git a/sites/all/modules/custom/webform/webform.drush.inc b/sites/all/modules/contrib/webform/webform.drush.inc similarity index 100% rename from sites/all/modules/custom/webform/webform.drush.inc rename to sites/all/modules/contrib/webform/webform.drush.inc diff --git a/sites/all/modules/custom/webform/webform.info b/sites/all/modules/contrib/webform/webform.info similarity index 100% rename from sites/all/modules/custom/webform/webform.info rename to sites/all/modules/contrib/webform/webform.info diff --git a/sites/all/modules/custom/webform/webform.install b/sites/all/modules/contrib/webform/webform.install similarity index 100% rename from sites/all/modules/custom/webform/webform.install rename to sites/all/modules/contrib/webform/webform.install diff --git a/sites/all/modules/custom/webform/webform.module b/sites/all/modules/contrib/webform/webform.module similarity index 100% rename from sites/all/modules/custom/webform/webform.module rename to sites/all/modules/contrib/webform/webform.module diff --git a/sites/all/modules/custom/webform/webform.tokens.inc b/sites/all/modules/contrib/webform/webform.tokens.inc similarity index 100% rename from sites/all/modules/custom/webform/webform.tokens.inc rename to sites/all/modules/contrib/webform/webform.tokens.inc diff --git a/sites/all/modules/contrib/weight/LICENSE.txt b/sites/all/modules/contrib/weight/LICENSE.txt new file mode 100644 index 0000000000..d159169d10 --- /dev/null +++ b/sites/all/modules/contrib/weight/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/sites/all/modules/custom/weight/README.txt b/sites/all/modules/contrib/weight/README.txt similarity index 100% rename from sites/all/modules/custom/weight/README.txt rename to sites/all/modules/contrib/weight/README.txt diff --git a/sites/all/modules/custom/weight/views/weight.views.inc b/sites/all/modules/contrib/weight/views/weight.views.inc similarity index 100% rename from sites/all/modules/custom/weight/views/weight.views.inc rename to sites/all/modules/contrib/weight/views/weight.views.inc diff --git a/sites/all/modules/custom/weight/views/weight.views_default.inc b/sites/all/modules/contrib/weight/views/weight.views_default.inc similarity index 100% rename from sites/all/modules/custom/weight/views/weight.views_default.inc rename to sites/all/modules/contrib/weight/views/weight.views_default.inc diff --git a/sites/all/modules/custom/weight/views/weight_handler_field_weight.inc b/sites/all/modules/contrib/weight/views/weight_handler_field_weight.inc similarity index 100% rename from sites/all/modules/custom/weight/views/weight_handler_field_weight.inc rename to sites/all/modules/contrib/weight/views/weight_handler_field_weight.inc diff --git a/sites/all/modules/custom/weight/views/weight_handler_filter_weight_enabled.inc b/sites/all/modules/contrib/weight/views/weight_handler_filter_weight_enabled.inc similarity index 100% rename from sites/all/modules/custom/weight/views/weight_handler_filter_weight_enabled.inc rename to sites/all/modules/contrib/weight/views/weight_handler_filter_weight_enabled.inc diff --git a/sites/all/modules/custom/weight/weight.features.inc b/sites/all/modules/contrib/weight/weight.features.inc similarity index 100% rename from sites/all/modules/custom/weight/weight.features.inc rename to sites/all/modules/contrib/weight/weight.features.inc diff --git a/sites/all/modules/custom/weight/weight.info b/sites/all/modules/contrib/weight/weight.info similarity index 100% rename from sites/all/modules/custom/weight/weight.info rename to sites/all/modules/contrib/weight/weight.info diff --git a/sites/all/modules/custom/weight/weight.install b/sites/all/modules/contrib/weight/weight.install similarity index 100% rename from sites/all/modules/custom/weight/weight.install rename to sites/all/modules/contrib/weight/weight.install diff --git a/sites/all/modules/custom/weight/weight.js b/sites/all/modules/contrib/weight/weight.js similarity index 100% rename from sites/all/modules/custom/weight/weight.js rename to sites/all/modules/contrib/weight/weight.js diff --git a/sites/all/modules/custom/weight/weight.migrate.inc b/sites/all/modules/contrib/weight/weight.migrate.inc similarity index 100% rename from sites/all/modules/custom/weight/weight.migrate.inc rename to sites/all/modules/contrib/weight/weight.migrate.inc diff --git a/sites/all/modules/custom/weight/weight.module b/sites/all/modules/contrib/weight/weight.module similarity index 100% rename from sites/all/modules/custom/weight/weight.module rename to sites/all/modules/contrib/weight/weight.module diff --git a/sites/all/modules/custom/wysiwyg_filter/CHANGELOG.txt b/sites/all/modules/contrib/wysiwyg_filter/CHANGELOG.txt similarity index 100% rename from sites/all/modules/custom/wysiwyg_filter/CHANGELOG.txt rename to sites/all/modules/contrib/wysiwyg_filter/CHANGELOG.txt diff --git a/sites/all/modules/custom/wysiwyg_filter/LICENSE.txt b/sites/all/modules/contrib/wysiwyg_filter/LICENSE.txt similarity index 100% rename from sites/all/modules/custom/wysiwyg_filter/LICENSE.txt rename to sites/all/modules/contrib/wysiwyg_filter/LICENSE.txt diff --git a/sites/all/modules/custom/wysiwyg_filter/README.txt b/sites/all/modules/contrib/wysiwyg_filter/README.txt similarity index 100% rename from sites/all/modules/custom/wysiwyg_filter/README.txt rename to sites/all/modules/contrib/wysiwyg_filter/README.txt diff --git a/sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.admin.css b/sites/all/modules/contrib/wysiwyg_filter/wysiwyg_filter.admin.css similarity index 100% rename from sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.admin.css rename to sites/all/modules/contrib/wysiwyg_filter/wysiwyg_filter.admin.css diff --git a/sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.admin.inc b/sites/all/modules/contrib/wysiwyg_filter/wysiwyg_filter.admin.inc similarity index 100% rename from sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.admin.inc rename to sites/all/modules/contrib/wysiwyg_filter/wysiwyg_filter.admin.inc diff --git a/sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.inc b/sites/all/modules/contrib/wysiwyg_filter/wysiwyg_filter.inc similarity index 100% rename from sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.inc rename to sites/all/modules/contrib/wysiwyg_filter/wysiwyg_filter.inc diff --git a/sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.info b/sites/all/modules/contrib/wysiwyg_filter/wysiwyg_filter.info similarity index 100% rename from sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.info rename to sites/all/modules/contrib/wysiwyg_filter/wysiwyg_filter.info diff --git a/sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.install b/sites/all/modules/contrib/wysiwyg_filter/wysiwyg_filter.install similarity index 100% rename from sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.install rename to sites/all/modules/contrib/wysiwyg_filter/wysiwyg_filter.install diff --git a/sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.module b/sites/all/modules/contrib/wysiwyg_filter/wysiwyg_filter.module similarity index 100% rename from sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.module rename to sites/all/modules/contrib/wysiwyg_filter/wysiwyg_filter.module diff --git a/sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.pages.inc b/sites/all/modules/contrib/wysiwyg_filter/wysiwyg_filter.pages.inc similarity index 100% rename from sites/all/modules/custom/wysiwyg_filter/wysiwyg_filter.pages.inc rename to sites/all/modules/contrib/wysiwyg_filter/wysiwyg_filter.pages.inc From 62465a318f41d38369014ed720b863e382a7c180 Mon Sep 17 00:00:00 2001 From: Willy Karam Date: Sat, 7 Mar 2015 23:00:19 -0500 Subject: [PATCH 5/9] Adding spyc library --- sites/all/libraries/spyc/COPYING | 21 + sites/all/libraries/spyc/README.md | 30 + sites/all/libraries/spyc/Spyc.php | 1147 +++++++++++++++++ sites/all/libraries/spyc/composer.json | 27 + .../all/libraries/spyc/examples/yaml-dump.php | 25 + .../all/libraries/spyc/examples/yaml-load.php | 21 + sites/all/libraries/spyc/php4/5to4.php | 17 + sites/all/libraries/spyc/php4/spyc.php4 | 1023 +++++++++++++++ sites/all/libraries/spyc/php4/test.php4 | 162 +++ sites/all/libraries/spyc/spyc.yaml | 219 ++++ sites/all/libraries/spyc/tests/DumpTest.php | 136 ++ sites/all/libraries/spyc/tests/IndentTest.php | 65 + sites/all/libraries/spyc/tests/ParseTest.php | 401 ++++++ .../libraries/spyc/tests/RoundTripTest.php | 78 ++ sites/all/libraries/spyc/tests/comments.yaml | 3 + sites/all/libraries/spyc/tests/failing1.yaml | 2 + sites/all/libraries/spyc/tests/indent_1.yaml | 65 + sites/all/libraries/spyc/tests/quotes.yaml | 8 + 18 files changed, 3450 insertions(+) create mode 100755 sites/all/libraries/spyc/COPYING create mode 100755 sites/all/libraries/spyc/README.md create mode 100755 sites/all/libraries/spyc/Spyc.php create mode 100755 sites/all/libraries/spyc/composer.json create mode 100755 sites/all/libraries/spyc/examples/yaml-dump.php create mode 100755 sites/all/libraries/spyc/examples/yaml-load.php create mode 100755 sites/all/libraries/spyc/php4/5to4.php create mode 100755 sites/all/libraries/spyc/php4/spyc.php4 create mode 100755 sites/all/libraries/spyc/php4/test.php4 create mode 100755 sites/all/libraries/spyc/spyc.yaml create mode 100755 sites/all/libraries/spyc/tests/DumpTest.php create mode 100755 sites/all/libraries/spyc/tests/IndentTest.php create mode 100755 sites/all/libraries/spyc/tests/ParseTest.php create mode 100755 sites/all/libraries/spyc/tests/RoundTripTest.php create mode 100755 sites/all/libraries/spyc/tests/comments.yaml create mode 100755 sites/all/libraries/spyc/tests/failing1.yaml create mode 100755 sites/all/libraries/spyc/tests/indent_1.yaml create mode 100755 sites/all/libraries/spyc/tests/quotes.yaml diff --git a/sites/all/libraries/spyc/COPYING b/sites/all/libraries/spyc/COPYING new file mode 100755 index 0000000000..8e7ddbcf6b --- /dev/null +++ b/sites/all/libraries/spyc/COPYING @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2011 Vladimir Andersen + +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. \ No newline at end of file diff --git a/sites/all/libraries/spyc/README.md b/sites/all/libraries/spyc/README.md new file mode 100755 index 0000000000..f8fa848739 --- /dev/null +++ b/sites/all/libraries/spyc/README.md @@ -0,0 +1,30 @@ +**Spyc** is a YAML loader/dumper written in pure PHP. Given a YAML document, Spyc will return an array that +you can use however you see fit. Given an array, Spyc will return a string which contains a YAML document +built from your data. + +**YAML** is an amazingly human friendly and strikingly versatile data serialization language which can be used +for log files, config files, custom protocols, the works. For more information, see http://www.yaml.org. + +Spyc supports YAML 1.0 specification. + +## Using Spyc + +Using Spyc is trivial: + +``` + + * @author Chris Wanstrath + * @link https://github.com/mustangostang/spyc/ + * @copyright Copyright 2005-2006 Chris Wanstrath, 2006-2011 Vlad Andersen + * @license http://www.opensource.org/licenses/mit-license.php MIT License + * @package Spyc + */ + +if (!function_exists('spyc_load')) { + /** + * Parses YAML to array. + * @param string $string YAML string. + * @return array + */ + function spyc_load ($string) { + return Spyc::YAMLLoadString($string); + } +} + +if (!function_exists('spyc_load_file')) { + /** + * Parses YAML to array. + * @param string $file Path to YAML file. + * @return array + */ + function spyc_load_file ($file) { + return Spyc::YAMLLoad($file); + } +} + +if (!function_exists('spyc_dump')) { + /** + * Dumps array to YAML. + * @param array $data Array. + * @return string + */ + function spyc_dump ($data) { + return Spyc::YAMLDump($data, false, false, true); + } +} + +/** + * The Simple PHP YAML Class. + * + * This class can be used to read a YAML file and convert its contents + * into a PHP array. It currently supports a very limited subsection of + * the YAML spec. + * + * Usage: + * + * $Spyc = new Spyc; + * $array = $Spyc->load($file); + * + * or: + * + * $array = Spyc::YAMLLoad($file); + * + * or: + * + * $array = spyc_load_file($file); + * + * @package Spyc + */ +class Spyc { + + // SETTINGS + + const REMPTY = "\0\0\0\0\0"; + + /** + * Setting this to true will force YAMLDump to enclose any string value in + * quotes. False by default. + * + * @var bool + */ + public $setting_dump_force_quotes = false; + + /** + * Setting this to true will forse YAMLLoad to use syck_load function when + * possible. False by default. + * @var bool + */ + public $setting_use_syck_is_possible = false; + + + + /**#@+ + * @access private + * @var mixed + */ + private $_dumpIndent; + private $_dumpWordWrap; + private $_containsGroupAnchor = false; + private $_containsGroupAlias = false; + private $path; + private $result; + private $LiteralPlaceHolder = '___YAML_Literal_Block___'; + private $SavedGroups = array(); + private $indent; + /** + * Path modifier that should be applied after adding current element. + * @var array + */ + private $delayedPath = array(); + + /**#@+ + * @access public + * @var mixed + */ + public $_nodeId; + +/** + * Load a valid YAML string to Spyc. + * @param string $input + * @return array + */ + public function load ($input) { + return $this->__loadString($input); + } + + /** + * Load a valid YAML file to Spyc. + * @param string $file + * @return array + */ + public function loadFile ($file) { + return $this->__load($file); + } + + /** + * Load YAML into a PHP array statically + * + * The load method, when supplied with a YAML stream (string or file), + * will do its best to convert YAML in a file into a PHP array. Pretty + * simple. + * Usage: + * + * $array = Spyc::YAMLLoad('lucky.yaml'); + * print_r($array); + * + * @access public + * @return array + * @param string $input Path of YAML file or string containing YAML + */ + public static function YAMLLoad($input) { + $Spyc = new Spyc; + return $Spyc->__load($input); + } + + /** + * Load a string of YAML into a PHP array statically + * + * The load method, when supplied with a YAML string, will do its best + * to convert YAML in a string into a PHP array. Pretty simple. + * + * Note: use this function if you don't want files from the file system + * loaded and processed as YAML. This is of interest to people concerned + * about security whose input is from a string. + * + * Usage: + * + * $array = Spyc::YAMLLoadString("---\n0: hello world\n"); + * print_r($array); + * + * @access public + * @return array + * @param string $input String containing YAML + */ + public static function YAMLLoadString($input) { + $Spyc = new Spyc; + return $Spyc->__loadString($input); + } + + /** + * Dump YAML from PHP array statically + * + * The dump method, when supplied with an array, will do its best + * to convert the array into friendly YAML. Pretty simple. Feel free to + * save the returned string as nothing.yaml and pass it around. + * + * Oh, and you can decide how big the indent is and what the wordwrap + * for folding is. Pretty cool -- just pass in 'false' for either if + * you want to use the default. + * + * Indent's default is 2 spaces, wordwrap's default is 40 characters. And + * you can turn off wordwrap by passing in 0. + * + * @access public + * @return string + * @param array $array PHP array + * @param int $indent Pass in false to use the default, which is 2 + * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40) + * @param int $no_opening_dashes Do not start YAML file with "---\n" + */ + public static function YAMLDump($array, $indent = false, $wordwrap = false, $no_opening_dashes = false) { + $spyc = new Spyc; + return $spyc->dump($array, $indent, $wordwrap, $no_opening_dashes); + } + + + /** + * Dump PHP array to YAML + * + * The dump method, when supplied with an array, will do its best + * to convert the array into friendly YAML. Pretty simple. Feel free to + * save the returned string as tasteful.yaml and pass it around. + * + * Oh, and you can decide how big the indent is and what the wordwrap + * for folding is. Pretty cool -- just pass in 'false' for either if + * you want to use the default. + * + * Indent's default is 2 spaces, wordwrap's default is 40 characters. And + * you can turn off wordwrap by passing in 0. + * + * @access public + * @return string + * @param array $array PHP array + * @param int $indent Pass in false to use the default, which is 2 + * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40) + */ + public function dump($array,$indent = false,$wordwrap = false, $no_opening_dashes = false) { + // Dumps to some very clean YAML. We'll have to add some more features + // and options soon. And better support for folding. + + // New features and options. + if ($indent === false or !is_numeric($indent)) { + $this->_dumpIndent = 2; + } else { + $this->_dumpIndent = $indent; + } + + if ($wordwrap === false or !is_numeric($wordwrap)) { + $this->_dumpWordWrap = 40; + } else { + $this->_dumpWordWrap = $wordwrap; + } + + // New YAML document + $string = ""; + if (!$no_opening_dashes) $string = "---\n"; + + // Start at the base of the array and move through it. + if ($array) { + $array = (array)$array; + $previous_key = -1; + foreach ($array as $key => $value) { + if (!isset($first_key)) $first_key = $key; + $string .= $this->_yamlize($key,$value,0,$previous_key, $first_key, $array); + $previous_key = $key; + } + } + return $string; + } + + /** + * Attempts to convert a key / value array item to YAML + * @access private + * @return string + * @param $key The name of the key + * @param $value The value of the item + * @param $indent The indent of the current node + */ + private function _yamlize($key,$value,$indent, $previous_key = -1, $first_key = 0, $source_array = null) { + if (is_array($value)) { + if (empty ($value)) + return $this->_dumpNode($key, array(), $indent, $previous_key, $first_key, $source_array); + // It has children. What to do? + // Make it the right kind of item + $string = $this->_dumpNode($key, self::REMPTY, $indent, $previous_key, $first_key, $source_array); + // Add the indent + $indent += $this->_dumpIndent; + // Yamlize the array + $string .= $this->_yamlizeArray($value,$indent); + } elseif (!is_array($value)) { + // It doesn't have children. Yip. + $string = $this->_dumpNode($key, $value, $indent, $previous_key, $first_key, $source_array); + } + return $string; + } + + /** + * Attempts to convert an array to YAML + * @access private + * @return string + * @param $array The array you want to convert + * @param $indent The indent of the current level + */ + private function _yamlizeArray($array,$indent) { + if (is_array($array)) { + $string = ''; + $previous_key = -1; + foreach ($array as $key => $value) { + if (!isset($first_key)) $first_key = $key; + $string .= $this->_yamlize($key, $value, $indent, $previous_key, $first_key, $array); + $previous_key = $key; + } + return $string; + } else { + return false; + } + } + + /** + * Returns YAML from a key and a value + * @access private + * @return string + * @param $key The name of the key + * @param $value The value of the item + * @param $indent The indent of the current node + */ + private function _dumpNode($key, $value, $indent, $previous_key = -1, $first_key = 0, $source_array = null) { + // do some folding here, for blocks + if (is_string ($value) && ((strpos($value,"\n") !== false || strpos($value,": ") !== false || strpos($value,"- ") !== false || + strpos($value,"*") !== false || strpos($value,"#") !== false || strpos($value,"<") !== false || strpos($value,">") !== false || strpos ($value, ' ') !== false || + strpos($value,"[") !== false || strpos($value,"]") !== false || strpos($value,"{") !== false || strpos($value,"}") !== false) || strpos($value,"&") !== false || strpos($value, "'") !== false || strpos($value, "!") === 0 || + substr ($value, -1, 1) == ':') + ) { + $value = $this->_doLiteralBlock($value,$indent); + } else { + $value = $this->_doFolding($value,$indent); + } + + if ($value === array()) $value = '[ ]'; + if ($value === "") $value = '""'; + if (self::isTranslationWord($value)) { + $value = $this->_doLiteralBlock($value, $indent); + } + if (trim ($value) != $value) + $value = $this->_doLiteralBlock($value,$indent); + + if (is_bool($value)) { + $value = $value ? "true" : "false"; + } + + if ($value === null) $value = 'null'; + if ($value === "'" . self::REMPTY . "'") $value = null; + + $spaces = str_repeat(' ',$indent); + + //if (is_int($key) && $key - 1 == $previous_key && $first_key===0) { + if (is_array ($source_array) && array_keys($source_array) === range(0, count($source_array) - 1)) { + // It's a sequence + $string = $spaces.'- '.$value."\n"; + } else { + // if ($first_key===0) throw new Exception('Keys are all screwy. The first one was zero, now it\'s "'. $key .'"'); + // It's mapped + if (strpos($key, ":") !== false || strpos($key, "#") !== false) { $key = '"' . $key . '"'; } + $string = rtrim ($spaces.$key.': '.$value)."\n"; + } + return $string; + } + + /** + * Creates a literal block for dumping + * @access private + * @return string + * @param $value + * @param $indent int The value of the indent + */ + private function _doLiteralBlock($value,$indent) { + if ($value === "\n") return '\n'; + if (strpos($value, "\n") === false && strpos($value, "'") === false) { + return sprintf ("'%s'", $value); + } + if (strpos($value, "\n") === false && strpos($value, '"') === false) { + return sprintf ('"%s"', $value); + } + $exploded = explode("\n",$value); + $newValue = '|'; + $indent += $this->_dumpIndent; + $spaces = str_repeat(' ',$indent); + foreach ($exploded as $line) { + $newValue .= "\n" . $spaces . ($line); + } + return $newValue; + } + + /** + * Folds a string of text, if necessary + * @access private + * @return string + * @param $value The string you wish to fold + */ + private function _doFolding($value,$indent) { + // Don't do anything if wordwrap is set to 0 + + if ($this->_dumpWordWrap !== 0 && is_string ($value) && strlen($value) > $this->_dumpWordWrap) { + $indent += $this->_dumpIndent; + $indent = str_repeat(' ',$indent); + $wrapped = wordwrap($value,$this->_dumpWordWrap,"\n$indent"); + $value = ">\n".$indent.$wrapped; + } else { + if ($this->setting_dump_force_quotes && is_string ($value) && $value !== self::REMPTY) + $value = '"' . $value . '"'; + if (is_numeric($value) && is_string($value)) + $value = '"' . $value . '"'; + } + + + return $value; + } + + private function isTrueWord($value) { + $words = self::getTranslations(array('true', 'on', 'yes', 'y')); + return in_array($value, $words, true); + } + + private function isFalseWord($value) { + $words = self::getTranslations(array('false', 'off', 'no', 'n')); + return in_array($value, $words, true); + } + + private function isNullWord($value) { + $words = self::getTranslations(array('null', '~')); + return in_array($value, $words, true); + } + + private function isTranslationWord($value) { + return ( + self::isTrueWord($value) || + self::isFalseWord($value) || + self::isNullWord($value) + ); + } + + /** + * Coerce a string into a native type + * Reference: http://yaml.org/type/bool.html + * TODO: Use only words from the YAML spec. + * @access private + * @param $value The value to coerce + */ + private function coerceValue(&$value) { + if (self::isTrueWord($value)) { + $value = true; + } else if (self::isFalseWord($value)) { + $value = false; + } else if (self::isNullWord($value)) { + $value = null; + } + } + + /** + * Given a set of words, perform the appropriate translations on them to + * match the YAML 1.1 specification for type coercing. + * @param $words The words to translate + * @access private + */ + private static function getTranslations(array $words) { + $result = array(); + foreach ($words as $i) { + $result = array_merge($result, array(ucfirst($i), strtoupper($i), strtolower($i))); + } + return $result; + } + +// LOADING FUNCTIONS + + private function __load($input) { + $Source = $this->loadFromSource($input); + return $this->loadWithSource($Source); + } + + private function __loadString($input) { + $Source = $this->loadFromString($input); + return $this->loadWithSource($Source); + } + + private function loadWithSource($Source) { + if (empty ($Source)) return array(); + if ($this->setting_use_syck_is_possible && function_exists ('syck_load')) { + $array = syck_load (implode ("\n", $Source)); + return is_array($array) ? $array : array(); + } + + $this->path = array(); + $this->result = array(); + + $cnt = count($Source); + for ($i = 0; $i < $cnt; $i++) { + $line = $Source[$i]; + + $this->indent = strlen($line) - strlen(ltrim($line)); + $tempPath = $this->getParentPathByIndent($this->indent); + $line = self::stripIndent($line, $this->indent); + if (self::isComment($line)) continue; + if (self::isEmpty($line)) continue; + $this->path = $tempPath; + + $literalBlockStyle = self::startsLiteralBlock($line); + if ($literalBlockStyle) { + $line = rtrim ($line, $literalBlockStyle . " \n"); + $literalBlock = ''; + $line .= ' '.$this->LiteralPlaceHolder; + $literal_block_indent = strlen($Source[$i+1]) - strlen(ltrim($Source[$i+1])); + while (++$i < $cnt && $this->literalBlockContinues($Source[$i], $this->indent)) { + $literalBlock = $this->addLiteralLine($literalBlock, $Source[$i], $literalBlockStyle, $literal_block_indent); + } + $i--; + } + + // Strip out comments + if (strpos ($line, '#')) { + $line = preg_replace('/\s*#([^"\']+)$/','',$line); + } + + while (++$i < $cnt && self::greedilyNeedNextLine($line)) { + $line = rtrim ($line, " \n\t\r") . ' ' . ltrim ($Source[$i], " \t"); + } + $i--; + + $lineArray = $this->_parseLine($line); + + if ($literalBlockStyle) + $lineArray = $this->revertLiteralPlaceHolder ($lineArray, $literalBlock); + + $this->addArray($lineArray, $this->indent); + + foreach ($this->delayedPath as $indent => $delayedPath) + $this->path[$indent] = $delayedPath; + + $this->delayedPath = array(); + + } + return $this->result; + } + + private function loadFromSource ($input) { + if (!empty($input) && strpos($input, "\n") === false && file_exists($input)) + $input = file_get_contents($input); + + return $this->loadFromString($input); + } + + private function loadFromString ($input) { + $lines = explode("\n",$input); + foreach ($lines as $k => $_) { + $lines[$k] = rtrim ($_, "\r"); + } + return $lines; + } + + /** + * Parses YAML code and returns an array for a node + * @access private + * @return array + * @param string $line A line from the YAML file + */ + private function _parseLine($line) { + if (!$line) return array(); + $line = trim($line); + if (!$line) return array(); + + $array = array(); + + $group = $this->nodeContainsGroup($line); + if ($group) { + $this->addGroup($line, $group); + $line = $this->stripGroup ($line, $group); + } + + if ($this->startsMappedSequence($line)) + return $this->returnMappedSequence($line); + + if ($this->startsMappedValue($line)) + return $this->returnMappedValue($line); + + if ($this->isArrayElement($line)) + return $this->returnArrayElement($line); + + if ($this->isPlainArray($line)) + return $this->returnPlainArray($line); + + + return $this->returnKeyValuePair($line); + + } + + /** + * Finds the type of the passed value, returns the value as the new type. + * @access private + * @param string $value + * @return mixed + */ + private function _toType($value) { + if ($value === '') return ""; + $first_character = $value[0]; + $last_character = substr($value, -1, 1); + + $is_quoted = false; + do { + if (!$value) break; + if ($first_character != '"' && $first_character != "'") break; + if ($last_character != '"' && $last_character != "'") break; + $is_quoted = true; + } while (0); + + if ($is_quoted) { + $value = str_replace('\n', "\n", $value); + return strtr(substr ($value, 1, -1), array ('\\"' => '"', '\'\'' => '\'', '\\\'' => '\'')); + } + + if (strpos($value, ' #') !== false && !$is_quoted) + $value = preg_replace('/\s+#(.+)$/','',$value); + + if ($first_character == '[' && $last_character == ']') { + // Take out strings sequences and mappings + $innerValue = trim(substr ($value, 1, -1)); + if ($innerValue === '') return array(); + $explode = $this->_inlineEscape($innerValue); + // Propagate value array + $value = array(); + foreach ($explode as $v) { + $value[] = $this->_toType($v); + } + return $value; + } + + if (strpos($value,': ')!==false && $first_character != '{') { + $array = explode(': ',$value); + $key = trim($array[0]); + array_shift($array); + $value = trim(implode(': ',$array)); + $value = $this->_toType($value); + return array($key => $value); + } + + if ($first_character == '{' && $last_character == '}') { + $innerValue = trim(substr ($value, 1, -1)); + if ($innerValue === '') return array(); + // Inline Mapping + // Take out strings sequences and mappings + $explode = $this->_inlineEscape($innerValue); + // Propagate value array + $array = array(); + foreach ($explode as $v) { + $SubArr = $this->_toType($v); + if (empty($SubArr)) continue; + if (is_array ($SubArr)) { + $array[key($SubArr)] = $SubArr[key($SubArr)]; continue; + } + $array[] = $SubArr; + } + return $array; + } + + if ($value == 'null' || $value == 'NULL' || $value == 'Null' || $value == '' || $value == '~') { + return null; + } + + if ( is_numeric($value) && preg_match ('/^(-|)[1-9]+[0-9]*$/', $value) ){ + $intvalue = (int)$value; + if ($intvalue != PHP_INT_MAX) + $value = $intvalue; + return $value; + } + + if (is_numeric($value) && preg_match('/^0[xX][0-9a-fA-F]+$/', $value)) { + // Hexadecimal value. + return hexdec($value); + } + + $this->coerceValue($value); + + if (is_numeric($value)) { + if ($value === '0') return 0; + if (rtrim ($value, 0) === $value) + $value = (float)$value; + return $value; + } + + return $value; + } + + /** + * Used in inlines to check for more inlines or quoted strings + * @access private + * @return array + */ + private function _inlineEscape($inline) { + // There's gotta be a cleaner way to do this... + // While pure sequences seem to be nesting just fine, + // pure mappings and mappings with sequences inside can't go very + // deep. This needs to be fixed. + + $seqs = array(); + $maps = array(); + $saved_strings = array(); + $saved_empties = array(); + + // Check for empty strings + $regex = '/("")|(\'\')/'; + if (preg_match_all($regex,$inline,$strings)) { + $saved_empties = $strings[0]; + $inline = preg_replace($regex,'YAMLEmpty',$inline); + } + unset($regex); + + // Check for strings + $regex = '/(?:(")|(?:\'))((?(1)[^"]+|[^\']+))(?(1)"|\')/'; + if (preg_match_all($regex,$inline,$strings)) { + $saved_strings = $strings[0]; + $inline = preg_replace($regex,'YAMLString',$inline); + } + unset($regex); + + // echo $inline; + + $i = 0; + do { + + // Check for sequences + while (preg_match('/\[([^{}\[\]]+)\]/U',$inline,$matchseqs)) { + $seqs[] = $matchseqs[0]; + $inline = preg_replace('/\[([^{}\[\]]+)\]/U', ('YAMLSeq' . (count($seqs) - 1) . 's'), $inline, 1); + } + + // Check for mappings + while (preg_match('/{([^\[\]{}]+)}/U',$inline,$matchmaps)) { + $maps[] = $matchmaps[0]; + $inline = preg_replace('/{([^\[\]{}]+)}/U', ('YAMLMap' . (count($maps) - 1) . 's'), $inline, 1); + } + + if ($i++ >= 10) break; + + } while (strpos ($inline, '[') !== false || strpos ($inline, '{') !== false); + + $explode = explode(',',$inline); + $explode = array_map('trim', $explode); + $stringi = 0; $i = 0; + + while (1) { + + // Re-add the sequences + if (!empty($seqs)) { + foreach ($explode as $key => $value) { + if (strpos($value,'YAMLSeq') !== false) { + foreach ($seqs as $seqk => $seq) { + $explode[$key] = str_replace(('YAMLSeq'.$seqk.'s'),$seq,$value); + $value = $explode[$key]; + } + } + } + } + + // Re-add the mappings + if (!empty($maps)) { + foreach ($explode as $key => $value) { + if (strpos($value,'YAMLMap') !== false) { + foreach ($maps as $mapk => $map) { + $explode[$key] = str_replace(('YAMLMap'.$mapk.'s'), $map, $value); + $value = $explode[$key]; + } + } + } + } + + + // Re-add the strings + if (!empty($saved_strings)) { + foreach ($explode as $key => $value) { + while (strpos($value,'YAMLString') !== false) { + $explode[$key] = preg_replace('/YAMLString/',$saved_strings[$stringi],$value, 1); + unset($saved_strings[$stringi]); + ++$stringi; + $value = $explode[$key]; + } + } + } + + + // Re-add the empties + if (!empty($saved_empties)) { + foreach ($explode as $key => $value) { + while (strpos($value,'YAMLEmpty') !== false) { + $explode[$key] = preg_replace('/YAMLEmpty/', '', $value, 1); + $value = $explode[$key]; + } + } + } + + $finished = true; + foreach ($explode as $key => $value) { + if (strpos($value,'YAMLSeq') !== false) { + $finished = false; break; + } + if (strpos($value,'YAMLMap') !== false) { + $finished = false; break; + } + if (strpos($value,'YAMLString') !== false) { + $finished = false; break; + } + if (strpos($value,'YAMLEmpty') !== false) { + $finished = false; break; + } + } + if ($finished) break; + + $i++; + if ($i > 10) + break; // Prevent infinite loops. + } + + + return $explode; + } + + private function literalBlockContinues ($line, $lineIndent) { + if (!trim($line)) return true; + if (strlen($line) - strlen(ltrim($line)) > $lineIndent) return true; + return false; + } + + private function referenceContentsByAlias ($alias) { + do { + if (!isset($this->SavedGroups[$alias])) { echo "Bad group name: $alias."; break; } + $groupPath = $this->SavedGroups[$alias]; + $value = $this->result; + foreach ($groupPath as $k) { + $value = $value[$k]; + } + } while (false); + return $value; + } + + private function addArrayInline ($array, $indent) { + $CommonGroupPath = $this->path; + if (empty ($array)) return false; + + foreach ($array as $k => $_) { + $this->addArray(array($k => $_), $indent); + $this->path = $CommonGroupPath; + } + return true; + } + + private function addArray ($incoming_data, $incoming_indent) { + + // print_r ($incoming_data); + + if (count ($incoming_data) > 1) + return $this->addArrayInline ($incoming_data, $incoming_indent); + + $key = key ($incoming_data); + $value = isset($incoming_data[$key]) ? $incoming_data[$key] : null; + if ($key === '__!YAMLZero') $key = '0'; + + if ($incoming_indent == 0 && !$this->_containsGroupAlias && !$this->_containsGroupAnchor) { // Shortcut for root-level values. + if ($key || $key === '' || $key === '0') { + $this->result[$key] = $value; + } else { + $this->result[] = $value; end ($this->result); $key = key ($this->result); + } + $this->path[$incoming_indent] = $key; + return; + } + + + + $history = array(); + // Unfolding inner array tree. + $history[] = $_arr = $this->result; + foreach ($this->path as $k) { + $history[] = $_arr = $_arr[$k]; + } + + if ($this->_containsGroupAlias) { + $value = $this->referenceContentsByAlias($this->_containsGroupAlias); + $this->_containsGroupAlias = false; + } + + + // Adding string or numeric key to the innermost level or $this->arr. + if (is_string($key) && $key == '<<') { + if (!is_array ($_arr)) { $_arr = array (); } + + $_arr = array_merge ($_arr, $value); + } else if ($key || $key === '' || $key === '0') { + if (!is_array ($_arr)) + $_arr = array ($key=>$value); + else + $_arr[$key] = $value; + } else { + if (!is_array ($_arr)) { $_arr = array ($value); $key = 0; } + else { $_arr[] = $value; end ($_arr); $key = key ($_arr); } + } + + $reverse_path = array_reverse($this->path); + $reverse_history = array_reverse ($history); + $reverse_history[0] = $_arr; + $cnt = count($reverse_history) - 1; + for ($i = 0; $i < $cnt; $i++) { + $reverse_history[$i+1][$reverse_path[$i]] = $reverse_history[$i]; + } + $this->result = $reverse_history[$cnt]; + + $this->path[$incoming_indent] = $key; + + if ($this->_containsGroupAnchor) { + $this->SavedGroups[$this->_containsGroupAnchor] = $this->path; + if (is_array ($value)) { + $k = key ($value); + if (!is_int ($k)) { + $this->SavedGroups[$this->_containsGroupAnchor][$incoming_indent + 2] = $k; + } + } + $this->_containsGroupAnchor = false; + } + + } + + private static function startsLiteralBlock ($line) { + $lastChar = substr (trim($line), -1); + if ($lastChar != '>' && $lastChar != '|') return false; + if ($lastChar == '|') return $lastChar; + // HTML tags should not be counted as literal blocks. + if (preg_match ('#<.*?>$#', $line)) return false; + return $lastChar; + } + + private static function greedilyNeedNextLine($line) { + $line = trim ($line); + if (!strlen($line)) return false; + if (substr ($line, -1, 1) == ']') return false; + if ($line[0] == '[') return true; + if (preg_match ('#^[^:]+?:\s*\[#', $line)) return true; + return false; + } + + private function addLiteralLine ($literalBlock, $line, $literalBlockStyle, $indent = -1) { + $line = self::stripIndent($line, $indent); + if ($literalBlockStyle !== '|') { + $line = self::stripIndent($line); + } + $line = rtrim ($line, "\r\n\t ") . "\n"; + if ($literalBlockStyle == '|') { + return $literalBlock . $line; + } + if (strlen($line) == 0) + return rtrim($literalBlock, ' ') . "\n"; + if ($line == "\n" && $literalBlockStyle == '>') { + return rtrim ($literalBlock, " \t") . "\n"; + } + if ($line != "\n") + $line = trim ($line, "\r\n ") . " "; + return $literalBlock . $line; + } + + function revertLiteralPlaceHolder ($lineArray, $literalBlock) { + foreach ($lineArray as $k => $_) { + if (is_array($_)) + $lineArray[$k] = $this->revertLiteralPlaceHolder ($_, $literalBlock); + else if (substr($_, -1 * strlen ($this->LiteralPlaceHolder)) == $this->LiteralPlaceHolder) + $lineArray[$k] = rtrim ($literalBlock, " \r\n"); + } + return $lineArray; + } + + private static function stripIndent ($line, $indent = -1) { + if ($indent == -1) $indent = strlen($line) - strlen(ltrim($line)); + return substr ($line, $indent); + } + + private function getParentPathByIndent ($indent) { + if ($indent == 0) return array(); + $linePath = $this->path; + do { + end($linePath); $lastIndentInParentPath = key($linePath); + if ($indent <= $lastIndentInParentPath) array_pop ($linePath); + } while ($indent <= $lastIndentInParentPath); + return $linePath; + } + + + private function clearBiggerPathValues ($indent) { + + + if ($indent == 0) $this->path = array(); + if (empty ($this->path)) return true; + + foreach ($this->path as $k => $_) { + if ($k > $indent) unset ($this->path[$k]); + } + + return true; + } + + + private static function isComment ($line) { + if (!$line) return false; + if ($line[0] == '#') return true; + if (trim($line, " \r\n\t") == '---') return true; + return false; + } + + private static function isEmpty ($line) { + return (trim ($line) === ''); + } + + + private function isArrayElement ($line) { + if (!$line || !is_scalar($line)) return false; + if (substr($line, 0, 2) != '- ') return false; + if (strlen ($line) > 3) + if (substr($line,0,3) == '---') return false; + + return true; + } + + private function isHashElement ($line) { + return strpos($line, ':'); + } + + private function isLiteral ($line) { + if ($this->isArrayElement($line)) return false; + if ($this->isHashElement($line)) return false; + return true; + } + + + private static function unquote ($value) { + if (!$value) return $value; + if (!is_string($value)) return $value; + if ($value[0] == '\'') return trim ($value, '\''); + if ($value[0] == '"') return trim ($value, '"'); + return $value; + } + + private function startsMappedSequence ($line) { + return (substr($line, 0, 2) == '- ' && substr ($line, -1, 1) == ':'); + } + + private function returnMappedSequence ($line) { + $array = array(); + $key = self::unquote(trim(substr($line,1,-1))); + $array[$key] = array(); + $this->delayedPath = array(strpos ($line, $key) + $this->indent => $key); + return array($array); + } + + private function checkKeysInValue($value) { + if (strchr('[{"\'', $value[0]) === false) { + if (strchr($value, ': ') !== false) { + throw new Exception('Too many keys: '.$value); + } + } + } + + private function returnMappedValue ($line) { + $this->checkKeysInValue($line); + $array = array(); + $key = self::unquote (trim(substr($line,0,-1))); + $array[$key] = ''; + return $array; + } + + private function startsMappedValue ($line) { + return (substr ($line, -1, 1) == ':'); + } + + private function isPlainArray ($line) { + return ($line[0] == '[' && substr ($line, -1, 1) == ']'); + } + + private function returnPlainArray ($line) { + return $this->_toType($line); + } + + private function returnKeyValuePair ($line) { + $array = array(); + $key = ''; + if (strpos ($line, ': ')) { + // It's a key/value pair most likely + // If the key is in double quotes pull it out + if (($line[0] == '"' || $line[0] == "'") && preg_match('/^(["\'](.*)["\'](\s)*:)/',$line,$matches)) { + $value = trim(str_replace($matches[1],'',$line)); + $key = $matches[2]; + } else { + // Do some guesswork as to the key and the value + $explode = explode(': ', $line); + $key = trim(array_shift($explode)); + $value = trim(implode(': ', $explode)); + $this->checkKeysInValue($value); + } + // Set the type of the value. Int, string, etc + $value = $this->_toType($value); + if ($key === '0') $key = '__!YAMLZero'; + $array[$key] = $value; + } else { + $array = array ($line); + } + return $array; + + } + + + private function returnArrayElement ($line) { + if (strlen($line) <= 1) return array(array()); // Weird %) + $array = array(); + $value = trim(substr($line,1)); + $value = $this->_toType($value); + if ($this->isArrayElement($value)) { + $value = $this->returnArrayElement($value); + } + $array[] = $value; + return $array; + } + + + private function nodeContainsGroup ($line) { + $symbolsForReference = 'A-z0-9_\-'; + if (strpos($line, '&') === false && strpos($line, '*') === false) return false; // Please die fast ;-) + if ($line[0] == '&' && preg_match('/^(&['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1]; + if ($line[0] == '*' && preg_match('/^(\*['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1]; + if (preg_match('/(&['.$symbolsForReference.']+)$/', $line, $matches)) return $matches[1]; + if (preg_match('/(\*['.$symbolsForReference.']+$)/', $line, $matches)) return $matches[1]; + if (preg_match ('#^\s*<<\s*:\s*(\*[^\s]+).*$#', $line, $matches)) return $matches[1]; + return false; + + } + + private function addGroup ($line, $group) { + if ($group[0] == '&') $this->_containsGroupAnchor = substr ($group, 1); + if ($group[0] == '*') $this->_containsGroupAlias = substr ($group, 1); + //print_r ($this->path); + } + + private function stripGroup ($line, $group) { + $line = trim(str_replace($group, '', $line)); + return $line; + } +} + +// Enable use of Spyc from command line +// The syntax is the following: php Spyc.php spyc.yaml + +do { + if (PHP_SAPI != 'cli') break; + if (empty ($_SERVER['argc']) || $_SERVER['argc'] < 2) break; + if (empty ($_SERVER['PHP_SELF']) || FALSE === strpos ($_SERVER['PHP_SELF'], 'Spyc.php') ) break; + $file = $argv[1]; + echo json_encode (spyc_load_file ($file)); +} while (0); diff --git a/sites/all/libraries/spyc/composer.json b/sites/all/libraries/spyc/composer.json new file mode 100755 index 0000000000..9105de589a --- /dev/null +++ b/sites/all/libraries/spyc/composer.json @@ -0,0 +1,27 @@ +{ + "name": "mustangostang/spyc", + "description": "A simple YAML loader/dumper class for PHP", + "type": "library", + "keywords": [ + "spyc", + "yaml", + "yml" + ], + "homepage": "https://github.com/mustangostang/spyc/", + "authors" : [{ + "name": "mustangostang", + "email": "vlad.andersen@gmail.com" + }], + "license": "MIT", + "require": { + "php": ">=5.3.1" + }, + "autoload": { + "files": [ "Spyc.php" ] + }, + "extra": { + "branch-alias": { + "dev-master": "0.5.x-dev" + } + } +} diff --git a/sites/all/libraries/spyc/examples/yaml-dump.php b/sites/all/libraries/spyc/examples/yaml-dump.php new file mode 100755 index 0000000000..9d2160aaf8 --- /dev/null +++ b/sites/all/libraries/spyc/examples/yaml-dump.php @@ -0,0 +1,25 @@ + 'A sequence','second' => 'of mapped values'); +$array['Mapped'] = array('A sequence','which is mapped'); +$array['A Note'] = 'What if your text is too long?'; +$array['Another Note'] = 'If that is the case, the dumper will probably fold your text by using a block. Kinda like this.'; +$array['The trick?'] = 'The trick is that we overrode the default indent, 2, to 4 and the default wordwrap, 40, to 60.'; +$array['Old Dog'] = "And if you want\n to preserve line breaks, \ngo ahead!"; +$array['key:withcolon'] = "Should support this to"; + +$yaml = Spyc::YAMLDump($array,4,60); diff --git a/sites/all/libraries/spyc/examples/yaml-load.php b/sites/all/libraries/spyc/examples/yaml-load.php new file mode 100755 index 0000000000..9e457e1e15 --- /dev/null +++ b/sites/all/libraries/spyc/examples/yaml-load.php @@ -0,0 +1,21 @@ +spyc.yaml loaded into PHP:
      '; +print_r($array); +echo ''; + + +echo '
      YAML Data dumped back:
      '; +echo Spyc::YAMLDump($array); +echo '
      '; diff --git a/sites/all/libraries/spyc/php4/5to4.php b/sites/all/libraries/spyc/php4/5to4.php new file mode 100755 index 0000000000..5a48694f01 --- /dev/null +++ b/sites/all/libraries/spyc/php4/5to4.php @@ -0,0 +1,17 @@ +', $code); + $f = fopen ($dest, 'w'); + fwrite($f, $code); + fclose ($f); + print "Written to $dest.\n"; +} \ No newline at end of file diff --git a/sites/all/libraries/spyc/php4/spyc.php4 b/sites/all/libraries/spyc/php4/spyc.php4 new file mode 100755 index 0000000000..73f08cc079 --- /dev/null +++ b/sites/all/libraries/spyc/php4/spyc.php4 @@ -0,0 +1,1023 @@ + + * @author Chris Wanstrath + * @link http://code.google.com/p/spyc/ + * @copyright Copyright 2005-2006 Chris Wanstrath, 2006-2009 Vlad Andersen + * @license http://www.opensource.org/licenses/mit-license.php MIT License + * @package Spyc + */ + +if (!function_exists('spyc_load')) { + /** + * Parses YAML to array. + * @param string $string YAML string. + * @return array + */ + function spyc_load ($string) { + return Spyc::YAMLLoadString($string); + } +} + +if (!function_exists('spyc_load_file')) { + /** + * Parses YAML to array. + * @param string $file Path to YAML file. + * @return array + */ + function spyc_load_file ($file) { + return Spyc::YAMLLoad($file); + } +} + +/** + * The Simple PHP YAML Class. + * + * This class can be used to read a YAML file and convert its contents + * into a PHP array. It currently supports a very limited subsection of + * the YAML spec. + * + * Usage: + * + * $Spyc = new Spyc; + * $array = $Spyc->load($file); + * + * or: + * + * $array = Spyc::YAMLLoad($file); + * + * or: + * + * $array = spyc_load_file($file); + * + * @package Spyc + */ +class Spyc { + + // SETTINGS + + /** + * Setting this to true will force YAMLDump to enclose any string value in + * quotes. False by default. + * + * @var bool + */ + var $setting_dump_force_quotes = false; + + /** + * Setting this to true will forse YAMLLoad to use syck_load function when + * possible. False by default. + * @var bool + */ + var $setting_use_syck_is_possible = false; + + + + /**#@+ + * @access private + * @var mixed + */ + var $_dumpIndent; + var $_dumpWordWrap; + var $_containsGroupAnchor = false; + var $_containsGroupAlias = false; + var $path; + var $result; + var $LiteralPlaceHolder = '___YAML_Literal_Block___'; + var $SavedGroups = array(); + var $indent; + /** + * Path modifier that should be applied after adding current element. + * @var array + */ + var $delayedPath = array(); + + /**#@+ + * @access public + * @var mixed + */ + var $_nodeId; + +/** + * Load a valid YAML string to Spyc. + * @param string $input + * @return array + */ + function load ($input) { + return $this->__loadString($input); + } + + /** + * Load a valid YAML file to Spyc. + * @param string $file + * @return array + */ + function loadFile ($file) { + return $this->__load($file); + } + + /** + * Load YAML into a PHP array statically + * + * The load method, when supplied with a YAML stream (string or file), + * will do its best to convert YAML in a file into a PHP array. Pretty + * simple. + * Usage: + * + * $array = Spyc::YAMLLoad('lucky.yaml'); + * print_r($array); + * + * @access public + * @return array + * @param string $input Path of YAML file or string containing YAML + */ + function YAMLLoad($input) { + $Spyc = new Spyc; + return $Spyc->__load($input); + } + + /** + * Load a string of YAML into a PHP array statically + * + * The load method, when supplied with a YAML string, will do its best + * to convert YAML in a string into a PHP array. Pretty simple. + * + * Note: use this function if you don't want files from the file system + * loaded and processed as YAML. This is of interest to people concerned + * about security whose input is from a string. + * + * Usage: + * + * $array = Spyc::YAMLLoadString("---\n0: hello world\n"); + * print_r($array); + * + * @access public + * @return array + * @param string $input String containing YAML + */ + function YAMLLoadString($input) { + $Spyc = new Spyc; + return $Spyc->__loadString($input); + } + + /** + * Dump YAML from PHP array statically + * + * The dump method, when supplied with an array, will do its best + * to convert the array into friendly YAML. Pretty simple. Feel free to + * save the returned string as nothing.yaml and pass it around. + * + * Oh, and you can decide how big the indent is and what the wordwrap + * for folding is. Pretty cool -- just pass in 'false' for either if + * you want to use the default. + * + * Indent's default is 2 spaces, wordwrap's default is 40 characters. And + * you can turn off wordwrap by passing in 0. + * + * @access public + * @return string + * @param array $array PHP array + * @param int $indent Pass in false to use the default, which is 2 + * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40) + */ + function YAMLDump($array,$indent = false,$wordwrap = false) { + $spyc = new Spyc; + return $spyc->dump($array,$indent,$wordwrap); + } + + + /** + * Dump PHP array to YAML + * + * The dump method, when supplied with an array, will do its best + * to convert the array into friendly YAML. Pretty simple. Feel free to + * save the returned string as tasteful.yaml and pass it around. + * + * Oh, and you can decide how big the indent is and what the wordwrap + * for folding is. Pretty cool -- just pass in 'false' for either if + * you want to use the default. + * + * Indent's default is 2 spaces, wordwrap's default is 40 characters. And + * you can turn off wordwrap by passing in 0. + * + * @access public + * @return string + * @param array $array PHP array + * @param int $indent Pass in false to use the default, which is 2 + * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40) + */ + function dump($array,$indent = false,$wordwrap = false) { + // Dumps to some very clean YAML. We'll have to add some more features + // and options soon. And better support for folding. + + // New features and options. + if ($indent === false or !is_numeric($indent)) { + $this->_dumpIndent = 2; + } else { + $this->_dumpIndent = $indent; + } + + if ($wordwrap === false or !is_numeric($wordwrap)) { + $this->_dumpWordWrap = 40; + } else { + $this->_dumpWordWrap = $wordwrap; + } + + // New YAML document + $string = "---\n"; + + // Start at the base of the array and move through it. + if ($array) { + $array = (array)$array; + $first_key = key($array); + + $previous_key = -1; + foreach ($array as $key => $value) { + $string .= $this->_yamlize($key,$value,0,$previous_key, $first_key); + $previous_key = $key; + } + } + return $string; + } + + /** + * Attempts to convert a key / value array item to YAML + * @access private + * @return string + * @param $key The name of the key + * @param $value The value of the item + * @param $indent The indent of the current node + */ + function _yamlize($key,$value,$indent, $previous_key = -1, $first_key = 0) { + if (is_array($value)) { + if (empty ($value)) + return $this->_dumpNode($key, array(), $indent, $previous_key, $first_key); + // It has children. What to do? + // Make it the right kind of item + $string = $this->_dumpNode($key, NULL, $indent, $previous_key, $first_key); + // Add the indent + $indent += $this->_dumpIndent; + // Yamlize the array + $string .= $this->_yamlizeArray($value,$indent); + } elseif (!is_array($value)) { + // It doesn't have children. Yip. + $string = $this->_dumpNode($key, $value, $indent, $previous_key, $first_key); + } + return $string; + } + + /** + * Attempts to convert an array to YAML + * @access private + * @return string + * @param $array The array you want to convert + * @param $indent The indent of the current level + */ + function _yamlizeArray($array,$indent) { + if (is_array($array)) { + $string = ''; + $previous_key = -1; + $first_key = key($array); + foreach ($array as $key => $value) { + $string .= $this->_yamlize($key, $value, $indent, $previous_key, $first_key); + $previous_key = $key; + } + return $string; + } else { + return false; + } + } + + /** + * Returns YAML from a key and a value + * @access private + * @return string + * @param $key The name of the key + * @param $value The value of the item + * @param $indent The indent of the current node + */ + function _dumpNode($key, $value, $indent, $previous_key = -1, $first_key = 0) { + // do some folding here, for blocks + if (is_string ($value) && ((strpos($value,"\n") !== false || strpos($value,": ") !== false || strpos($value,"- ") !== false || + strpos($value,"*") !== false || strpos($value,"#") !== false || strpos($value,"<") !== false || strpos($value,">") !== false || + strpos($value,"[") !== false || strpos($value,"]") !== false || strpos($value,"{") !== false || strpos($value,"}") !== false) || substr ($value, -1, 1) == ':')) { + $value = $this->_doLiteralBlock($value,$indent); + } else { + $value = $this->_doFolding($value,$indent); + if (is_bool($value)) { + $value = ($value) ? "true" : "false"; + } + } + + if ($value === array()) $value = '[ ]'; + + $spaces = str_repeat(' ',$indent); + + if (is_int($key) && $key - 1 == $previous_key && $first_key===0) { + // It's a sequence + $string = $spaces.'- '.$value."\n"; + } else { + if ($first_key===0) throw new Exception('Keys are all screwy. The first one was zero, now it\'s "'. $key .'"'); + // It's mapped + if (strpos($key, ":") !== false) { $key = '"' . $key . '"'; } + $string = $spaces.$key.': '.$value."\n"; + } + return $string; + } + + /** + * Creates a literal block for dumping + * @access private + * @return string + * @param $value + * @param $indent int The value of the indent + */ + function _doLiteralBlock($value,$indent) { + if (strpos($value, "\n") === false && strpos($value, "'") === false) { + return sprintf ("'%s'", $value); + } + if (strpos($value, "\n") === false && strpos($value, '"') === false) { + return sprintf ('"%s"', $value); + } + $exploded = explode("\n",$value); + $newValue = '|'; + $indent += $this->_dumpIndent; + $spaces = str_repeat(' ',$indent); + foreach ($exploded as $line) { + $newValue .= "\n" . $spaces . trim($line); + } + return $newValue; + } + + /** + * Folds a string of text, if necessary + * @access private + * @return string + * @param $value The string you wish to fold + */ + function _doFolding($value,$indent) { + // Don't do anything if wordwrap is set to 0 + + if ($this->_dumpWordWrap !== 0 && is_string ($value) && strlen($value) > $this->_dumpWordWrap) { + $indent += $this->_dumpIndent; + $indent = str_repeat(' ',$indent); + $wrapped = wordwrap($value,$this->_dumpWordWrap,"\n$indent"); + $value = ">\n".$indent.$wrapped; + } else { + if ($this->setting_dump_force_quotes && is_string ($value)) + $value = '"' . $value . '"'; + } + + + return $value; + } + +// LOADING FUNCTIONS + + function __load($input) { + $Source = $this->loadFromSource($input); + return $this->loadWithSource($Source); + } + + function __loadString($input) { + $Source = $this->loadFromString($input); + return $this->loadWithSource($Source); + } + + function loadWithSource($Source) { + if (empty ($Source)) return array(); + if ($this->setting_use_syck_is_possible && function_exists ('syck_load')) { + $array = syck_load (implode ('', $Source)); + return is_array($array) ? $array : array(); + } + + $this->path = array(); + $this->result = array(); + + $cnt = count($Source); + for ($i = 0; $i < $cnt; $i++) { + $line = $Source[$i]; + + $this->indent = strlen($line) - strlen(ltrim($line)); + $tempPath = $this->getParentPathByIndent($this->indent); + $line = $this->stripIndent($line, $this->indent); + if ($this->isComment($line)) continue; + if ($this->isEmpty($line)) continue; + $this->path = $tempPath; + + $literalBlockStyle = $this->startsLiteralBlock($line); + if ($literalBlockStyle) { + $line = rtrim ($line, $literalBlockStyle . " \n"); + $literalBlock = ''; + $line .= $this->LiteralPlaceHolder; + + while (++$i < $cnt && $this->literalBlockContinues($Source[$i], $this->indent)) { + $literalBlock = $this->addLiteralLine($literalBlock, $Source[$i], $literalBlockStyle); + } + $i--; + } + + while (++$i < $cnt && $this->greedilyNeedNextLine($line)) { + $line = rtrim ($line, " \n\t\r") . ' ' . ltrim ($Source[$i], " \t"); + } + $i--; + + + + if (strpos ($line, '#')) { + if (strpos ($line, '"') === false && strpos ($line, "'") === false) + $line = preg_replace('/\s+#(.+)$/','',$line); + } + + $lineArray = $this->_parseLine($line); + + if ($literalBlockStyle) + $lineArray = $this->revertLiteralPlaceHolder ($lineArray, $literalBlock); + + $this->addArray($lineArray, $this->indent); + + foreach ($this->delayedPath as $indent => $delayedPath) + $this->path[$indent] = $delayedPath; + + $this->delayedPath = array(); + + } + return $this->result; + } + + function loadFromSource ($input) { + if (!empty($input) && strpos($input, "\n") === false && file_exists($input)) + return file($input); + + return $this->loadFromString($input); + } + + function loadFromString ($input) { + $lines = explode("\n",$input); + foreach ($lines as $k => $_) { + $lines[$k] = rtrim ($_, "\r"); + } + return $lines; + } + + /** + * Parses YAML code and returns an array for a node + * @access private + * @return array + * @param string $line A line from the YAML file + */ + function _parseLine($line) { + if (!$line) return array(); + $line = trim($line); + + if (!$line) return array(); + $array = array(); + + $group = $this->nodeContainsGroup($line); + if ($group) { + $this->addGroup($line, $group); + $line = $this->stripGroup ($line, $group); + } + + if ($this->startsMappedSequence($line)) + return $this->returnMappedSequence($line); + + if ($this->startsMappedValue($line)) + return $this->returnMappedValue($line); + + if ($this->isArrayElement($line)) + return $this->returnArrayElement($line); + + if ($this->isPlainArray($line)) + return $this->returnPlainArray($line); + + + return $this->returnKeyValuePair($line); + + } + + /** + * Finds the type of the passed value, returns the value as the new type. + * @access private + * @param string $value + * @return mixed + */ + function _toType($value) { + if ($value === '') return null; + $first_character = $value[0]; + $last_character = substr($value, -1, 1); + + $is_quoted = false; + do { + if (!$value) break; + if ($first_character != '"' && $first_character != "'") break; + if ($last_character != '"' && $last_character != "'") break; + $is_quoted = true; + } while (0); + + if ($is_quoted) + return strtr(substr ($value, 1, -1), array ('\\"' => '"', '\'\'' => '\'', '\\\'' => '\'')); + + if (strpos($value, ' #') !== false) + $value = preg_replace('/\s+#(.+)$/','',$value); + + if ($first_character == '[' && $last_character == ']') { + // Take out strings sequences and mappings + $innerValue = trim(substr ($value, 1, -1)); + if ($innerValue === '') return array(); + $explode = $this->_inlineEscape($innerValue); + // Propagate value array + $value = array(); + foreach ($explode as $v) { + $value[] = $this->_toType($v); + } + return $value; + } + + if (strpos($value,': ')!==false && $first_character != '{') { + $array = explode(': ',$value); + $key = trim($array[0]); + array_shift($array); + $value = trim(implode(': ',$array)); + $value = $this->_toType($value); + return array($key => $value); + } + + if ($first_character == '{' && $last_character == '}') { + $innerValue = trim(substr ($value, 1, -1)); + if ($innerValue === '') return array(); + // Inline Mapping + // Take out strings sequences and mappings + $explode = $this->_inlineEscape($innerValue); + // Propagate value array + $array = array(); + foreach ($explode as $v) { + $SubArr = $this->_toType($v); + if (empty($SubArr)) continue; + if (is_array ($SubArr)) { + $array[key($SubArr)] = $SubArr[key($SubArr)]; continue; + } + $array[] = $SubArr; + } + return $array; + } + + if ($value == 'null' || $value == 'NULL' || $value == 'Null' || $value == '' || $value == '~') { + return null; + } + + if (intval($first_character) > 0 && preg_match ('/^[1-9]+[0-9]*$/', $value)) { + $intvalue = (int)$value; + if ($intvalue != PHP_INT_MAX) + $value = $intvalue; + return $value; + } + + if (in_array($value, + array('true', 'on', '+', 'yes', 'y', 'True', 'TRUE', 'On', 'ON', 'YES', 'Yes', 'Y'))) { + return true; + } + + if (in_array(strtolower($value), + array('false', 'off', '-', 'no', 'n'))) { + return false; + } + + if (is_numeric($value)) { + if ($value === '0') return 0; + if (trim ($value, 0) === $value) + $value = (float)$value; + return $value; + } + + return $value; + } + + /** + * Used in inlines to check for more inlines or quoted strings + * @access private + * @return array + */ + function _inlineEscape($inline) { + // There's gotta be a cleaner way to do this... + // While pure sequences seem to be nesting just fine, + // pure mappings and mappings with sequences inside can't go very + // deep. This needs to be fixed. + + $seqs = array(); + $maps = array(); + $saved_strings = array(); + + // Check for strings + $regex = '/(?:(")|(?:\'))((?(1)[^"]+|[^\']+))(?(1)"|\')/'; + if (preg_match_all($regex,$inline,$strings)) { + $saved_strings = $strings[0]; + $inline = preg_replace($regex,'YAMLString',$inline); + } + unset($regex); + + $i = 0; + do { + + // Check for sequences + while (preg_match('/\[([^{}\[\]]+)\]/U',$inline,$matchseqs)) { + $seqs[] = $matchseqs[0]; + $inline = preg_replace('/\[([^{}\[\]]+)\]/U', ('YAMLSeq' . (count($seqs) - 1) . 's'), $inline, 1); + } + + // Check for mappings + while (preg_match('/{([^\[\]{}]+)}/U',$inline,$matchmaps)) { + $maps[] = $matchmaps[0]; + $inline = preg_replace('/{([^\[\]{}]+)}/U', ('YAMLMap' . (count($maps) - 1) . 's'), $inline, 1); + } + + if ($i++ >= 10) break; + + } while (strpos ($inline, '[') !== false || strpos ($inline, '{') !== false); + + $explode = explode(', ',$inline); + $stringi = 0; $i = 0; + + while (1) { + + // Re-add the sequences + if (!empty($seqs)) { + foreach ($explode as $key => $value) { + if (strpos($value,'YAMLSeq') !== false) { + foreach ($seqs as $seqk => $seq) { + $explode[$key] = str_replace(('YAMLSeq'.$seqk.'s'),$seq,$value); + $value = $explode[$key]; + } + } + } + } + + // Re-add the mappings + if (!empty($maps)) { + foreach ($explode as $key => $value) { + if (strpos($value,'YAMLMap') !== false) { + foreach ($maps as $mapk => $map) { + $explode[$key] = str_replace(('YAMLMap'.$mapk.'s'), $map, $value); + $value = $explode[$key]; + } + } + } + } + + + // Re-add the strings + if (!empty($saved_strings)) { + foreach ($explode as $key => $value) { + while (strpos($value,'YAMLString') !== false) { + $explode[$key] = preg_replace('/YAMLString/',$saved_strings[$stringi],$value, 1); + unset($saved_strings[$stringi]); + ++$stringi; + $value = $explode[$key]; + } + } + } + + $finished = true; + foreach ($explode as $key => $value) { + if (strpos($value,'YAMLSeq') !== false) { + $finished = false; break; + } + if (strpos($value,'YAMLMap') !== false) { + $finished = false; break; + } + if (strpos($value,'YAMLString') !== false) { + $finished = false; break; + } + } + if ($finished) break; + + $i++; + if ($i > 10) + break; // Prevent infinite loops. + } + + return $explode; + } + + function literalBlockContinues ($line, $lineIndent) { + if (!trim($line)) return true; + if (strlen($line) - strlen(ltrim($line)) > $lineIndent) return true; + return false; + } + + function referenceContentsByAlias ($alias) { + do { + if (!isset($this->SavedGroups[$alias])) { echo "Bad group name: $alias."; break; } + $groupPath = $this->SavedGroups[$alias]; + $value = $this->result; + foreach ($groupPath as $k) { + $value = $value[$k]; + } + } while (false); + return $value; + } + + function addArrayInline ($array, $indent) { + $CommonGroupPath = $this->path; + if (empty ($array)) return false; + + foreach ($array as $k => $_) { + $this->addArray(array($k => $_), $indent); + $this->path = $CommonGroupPath; + } + return true; + } + + function addArray ($incoming_data, $incoming_indent) { + + // print_r ($incoming_data); + + if (count ($incoming_data) > 1) + return $this->addArrayInline ($incoming_data, $incoming_indent); + + $key = key ($incoming_data); + $value = isset($incoming_data[$key]) ? $incoming_data[$key] : null; + if ($key === '__!YAMLZero') $key = '0'; + + if ($incoming_indent == 0 && !$this->_containsGroupAlias && !$this->_containsGroupAnchor) { // Shortcut for root-level values. + if ($key || $key === '' || $key === '0') { + $this->result[$key] = $value; + } else { + $this->result[] = $value; end ($this->result); $key = key ($this->result); + } + $this->path[$incoming_indent] = $key; + return; + } + + + + $history = array(); + // Unfolding inner array tree. + $history[] = $_arr = $this->result; + foreach ($this->path as $k) { + $history[] = $_arr = $_arr[$k]; + } + + if ($this->_containsGroupAlias) { + $value = $this->referenceContentsByAlias($this->_containsGroupAlias); + $this->_containsGroupAlias = false; + } + + + // Adding string or numeric key to the innermost level or $this->arr. + if (is_string($key) && $key == '<<') { + if (!is_array ($_arr)) { $_arr = array (); } + $_arr = array_merge ($_arr, $value); + } else if ($key || $key === '' || $key === '0') { + $_arr[$key] = $value; + } else { + if (!is_array ($_arr)) { $_arr = array ($value); $key = 0; } + else { $_arr[] = $value; end ($_arr); $key = key ($_arr); } + } + + $reverse_path = array_reverse($this->path); + $reverse_history = array_reverse ($history); + $reverse_history[0] = $_arr; + $cnt = count($reverse_history) - 1; + for ($i = 0; $i < $cnt; $i++) { + $reverse_history[$i+1][$reverse_path[$i]] = $reverse_history[$i]; + } + $this->result = $reverse_history[$cnt]; + + $this->path[$incoming_indent] = $key; + + if ($this->_containsGroupAnchor) { + $this->SavedGroups[$this->_containsGroupAnchor] = $this->path; + if (is_array ($value)) { + $k = key ($value); + if (!is_int ($k)) { + $this->SavedGroups[$this->_containsGroupAnchor][$incoming_indent + 2] = $k; + } + } + $this->_containsGroupAnchor = false; + } + + } + + function startsLiteralBlock ($line) { + $lastChar = substr (trim($line), -1); + if ($lastChar != '>' && $lastChar != '|') return false; + if ($lastChar == '|') return $lastChar; + // HTML tags should not be counted as literal blocks. + if (preg_match ('#<.*?>$#', $line)) return false; + return $lastChar; + } + + function greedilyNeedNextLine($line) { + $line = trim ($line); + if (!strlen($line)) return false; + if (substr ($line, -1, 1) == ']') return false; + if ($line[0] == '[') return true; + if (preg_match ('#^[^:]+?:\s*\[#', $line)) return true; + return false; + } + + function addLiteralLine ($literalBlock, $line, $literalBlockStyle) { + $line = $this->stripIndent($line); + $line = rtrim ($line, "\r\n\t ") . "\n"; + if ($literalBlockStyle == '|') { + return $literalBlock . $line; + } + if (strlen($line) == 0) + return rtrim($literalBlock, ' ') . "\n"; + if ($line == "\n" && $literalBlockStyle == '>') { + return rtrim ($literalBlock, " \t") . "\n"; + } + if ($line != "\n") + $line = trim ($line, "\r\n ") . " "; + return $literalBlock . $line; + } + + function revertLiteralPlaceHolder ($lineArray, $literalBlock) { + foreach ($lineArray as $k => $_) { + if (is_array($_)) + $lineArray[$k] = $this->revertLiteralPlaceHolder ($_, $literalBlock); + else if (substr($_, -1 * strlen ($this->LiteralPlaceHolder)) == $this->LiteralPlaceHolder) + $lineArray[$k] = rtrim ($literalBlock, " \r\n"); + } + return $lineArray; + } + + function stripIndent ($line, $indent = -1) { + if ($indent == -1) $indent = strlen($line) - strlen(ltrim($line)); + return substr ($line, $indent); + } + + function getParentPathByIndent ($indent) { + if ($indent == 0) return array(); + $linePath = $this->path; + do { + end($linePath); $lastIndentInParentPath = key($linePath); + if ($indent <= $lastIndentInParentPath) array_pop ($linePath); + } while ($indent <= $lastIndentInParentPath); + return $linePath; + } + + + function clearBiggerPathValues ($indent) { + + + if ($indent == 0) $this->path = array(); + if (empty ($this->path)) return true; + + foreach ($this->path as $k => $_) { + if ($k > $indent) unset ($this->path[$k]); + } + + return true; + } + + + function isComment ($line) { + if (!$line) return false; + if ($line[0] == '#') return true; + if (trim($line, " \r\n\t") == '---') return true; + return false; + } + + function isEmpty ($line) { + return (trim ($line) === ''); + } + + + function isArrayElement ($line) { + if (!$line) return false; + if ($line[0] != '-') return false; + if (strlen ($line) > 3) + if (substr($line,0,3) == '---') return false; + + return true; + } + + function isHashElement ($line) { + return strpos($line, ':'); + } + + function isLiteral ($line) { + if ($this->isArrayElement($line)) return false; + if ($this->isHashElement($line)) return false; + return true; + } + + + function unquote ($value) { + if (!$value) return $value; + if (!is_string($value)) return $value; + if ($value[0] == '\'') return trim ($value, '\''); + if ($value[0] == '"') return trim ($value, '"'); + return $value; + } + + function startsMappedSequence ($line) { + return ($line[0] == '-' && substr ($line, -1, 1) == ':'); + } + + function returnMappedSequence ($line) { + $array = array(); + $key = $this->unquote(trim(substr($line,1,-1))); + $array[$key] = array(); + $this->delayedPath = array(strpos ($line, $key) + $this->indent => $key); + return array($array); + } + + function returnMappedValue ($line) { + $array = array(); + $key = $this->unquote (trim(substr($line,0,-1))); + $array[$key] = ''; + return $array; + } + + function startsMappedValue ($line) { + return (substr ($line, -1, 1) == ':'); + } + + function isPlainArray ($line) { + return ($line[0] == '[' && substr ($line, -1, 1) == ']'); + } + + function returnPlainArray ($line) { + return $this->_toType($line); + } + + function returnKeyValuePair ($line) { + $array = array(); + $key = ''; + if (strpos ($line, ':')) { + // It's a key/value pair most likely + // If the key is in double quotes pull it out + if (($line[0] == '"' || $line[0] == "'") && preg_match('/^(["\'](.*)["\'](\s)*:)/',$line,$matches)) { + $value = trim(str_replace($matches[1],'',$line)); + $key = $matches[2]; + } else { + // Do some guesswork as to the key and the value + $explode = explode(':',$line); + $key = trim($explode[0]); + array_shift($explode); + $value = trim(implode(':',$explode)); + } + // Set the type of the value. Int, string, etc + $value = $this->_toType($value); + if ($key === '0') $key = '__!YAMLZero'; + $array[$key] = $value; + } else { + $array = array ($line); + } + return $array; + + } + + + function returnArrayElement ($line) { + if (strlen($line) <= 1) return array(array()); // Weird %) + $array = array(); + $value = trim(substr($line,1)); + $value = $this->_toType($value); + $array[] = $value; + return $array; + } + + + function nodeContainsGroup ($line) { + $symbolsForReference = 'A-z0-9_\-'; + if (strpos($line, '&') === false && strpos($line, '*') === false) return false; // Please die fast ;-) + if ($line[0] == '&' && preg_match('/^(&['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1]; + if ($line[0] == '*' && preg_match('/^(\*['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1]; + if (preg_match('/(&['.$symbolsForReference.']+)$/', $line, $matches)) return $matches[1]; + if (preg_match('/(\*['.$symbolsForReference.']+$)/', $line, $matches)) return $matches[1]; + if (preg_match ('#^\s*<<\s*:\s*(\*[^\s]+).*$#', $line, $matches)) return $matches[1]; + return false; + + } + + function addGroup ($line, $group) { + if ($group[0] == '&') $this->_containsGroupAnchor = substr ($group, 1); + if ($group[0] == '*') $this->_containsGroupAlias = substr ($group, 1); + //print_r ($this->path); + } + + function stripGroup ($line, $group) { + $line = trim(str_replace($group, '', $line)); + return $line; + } +} + +// Enable use of Spyc from command line +// The syntax is the following: php spyc.php spyc.yaml + +define ('SPYC_FROM_COMMAND_LINE', false); + +do { + if (!SPYC_FROM_COMMAND_LINE) break; + if (empty ($_SERVER['argc']) || $_SERVER['argc'] < 2) break; + if (empty ($_SERVER['PHP_SELF']) || $_SERVER['PHP_SELF'] != 'spyc.php') break; + $file = $argv[1]; + printf ("Spyc loading file: %s\n", $file); + print_r (spyc_load_file ($file)); +} while (0); \ No newline at end of file diff --git a/sites/all/libraries/spyc/php4/test.php4 b/sites/all/libraries/spyc/php4/test.php4 new file mode 100755 index 0000000000..315f5019d8 --- /dev/null +++ b/sites/all/libraries/spyc/php4/test.php4 @@ -0,0 +1,162 @@ + "1.5ghz", "ram" => "1 gig", + "os" => "os x 10.4.1")) + die('Sequence 4 failed'); + +# Mapped sequence +if ($yaml['domains'] != array("yaml.org", "php.net")) + die("Key: 'domains' failed"); + +# A sequence like this. +if ($yaml[5] != array("program" => "Adium", "platform" => "OS X", + "type" => "Chat Client")) + die('Sequence 5 failed'); + +# A folded block as a mapped value +if ($yaml['no time'] != "There isn't any time for your tricks!\nDo you understand?") + die("Key: 'no time' failed"); + +# A literal block as a mapped value +if ($yaml['some time'] != "There is nothing but time\nfor your tricks.") + die("Key: 'some time' failed"); + +# Crazy combinations +if ($yaml['databases'] != array( array("name" => "spartan", "notes" => + array( "Needs to be backed up", + "Needs to be normalized" ), + "type" => "mysql" ))) + die("Key: 'databases' failed"); + +# You can be a bit tricky +if ($yaml["if: you'd"] != "like") + die("Key: 'if: you\'d' failed"); + +# Inline sequences +if ($yaml[6] != array("One", "Two", "Three", "Four")) + die("Sequence 6 failed"); + +# Nested Inline Sequences +if ($yaml[7] != array("One", array("Two", "And", "Three"), "Four", "Five")) + die("Sequence 7 failed"); + +# Nested Nested Inline Sequences +if ($yaml[8] != array( "This", array("Is", "Getting", array("Ridiculous", "Guys")), + "Seriously", array("Show", "Mercy"))) + die("Sequence 8 failed"); + +# Inline mappings +if ($yaml[9] != array("name" => "chris", "age" => "young", "brand" => "lucky strike")) + die("Sequence 9 failed"); + +# Nested inline mappings +if ($yaml[10] != array("name" => "mark", "age" => "older than chris", + "brand" => array("marlboro", "lucky strike"))) + die("Sequence 10 failed"); + +# References -- they're shaky, but functional +if ($yaml['dynamic languages'] != array('Perl', 'Python', 'PHP', 'Ruby')) + die("Key: 'dynamic languages' failed"); + +if ($yaml['compiled languages'] != array('C/C++', 'Java')) + die("Key: 'compiled languages' failed"); + +if ($yaml['all languages'] != array( + array('Perl', 'Python', 'PHP', 'Ruby'), + array('C/C++', 'Java') + )) + die("Key: 'all languages' failed"); + +# Added in .2.2: Escaped quotes +if ($yaml[11] != "you know, this shouldn't work. but it does.") + die("Sequence 11 failed."); + +if ($yaml[12] != "that's my value.") + die("Sequence 12 failed."); + +if ($yaml[13] != "again, that's my value.") + die("Sequence 13 failed."); + +if ($yaml[14] != "here's to \"quotes\", boss.") + die("Sequence 14 failed."); + +if ($yaml[15] != array( 'name' => "Foo, Bar's", 'age' => 20)) + die("Sequence 15 failed."); + +if ($yaml[16] != array( 0 => "a", 1 => array (0 => 1, 1 => 2), 2 => "b")) + die("Sequence 16 failed."); + +if ($yaml['endloop'] != "Does this line in the end indeed make Spyc go to an infinite loop?") + die("[endloop] failed."); + + +print "spyc.yaml parsed correctly\n"; + +?> \ No newline at end of file diff --git a/sites/all/libraries/spyc/spyc.yaml b/sites/all/libraries/spyc/spyc.yaml new file mode 100755 index 0000000000..489f28c9fb --- /dev/null +++ b/sites/all/libraries/spyc/spyc.yaml @@ -0,0 +1,219 @@ +# +# S P Y C +# a simple php yaml class +# +# authors: [vlad andersen (vlad.andersen@gmail.com), chris wanstrath (chris@ozmm.org)] +# websites: [http://www.yaml.org, http://spyc.sourceforge.net/] +# license: [MIT License, http://www.opensource.org/licenses/mit-license.php] +# copyright: (c) 2005-2006 Chris Wanstrath, 2006-2014 Vlad Andersen +# +# spyc.yaml - A file containing the YAML that Spyc understands. + +--- + +# Mappings - with proper types +String: Anyone's name, really. +Int: 13 +BadHex: f0xf3 +Hex: 0xf3 +True: true +False: false +Zero: 0 +Null: NULL +NotNull: 'null' +NotTrue: 'y' +NotBoolTrue: 'true' +NotInt: '5' +Float: 5.34 +Negative: -90 +SmallFloat: 0.7 +NewLine: \n +QuotedNewLine: "\n" + +# A sequence +- PHP Class +- Basic YAML Loader +- Very Basic YAML Dumper + +# A sequence of a sequence +- + - YAML is so easy to learn. + - Your config files will never be the same. + +# Sequence of mappings +- + cpu: 1.5ghz + ram: 1 gig + os : os x 10.4.1 + +# Mapped sequence +domains: + - yaml.org + - php.net + +# A sequence like this. +- program: Adium + platform: OS X + type: Chat Client + +# A folded block as a mapped value +no time: > + There isn't any time + for your tricks! + + Do you understand? + +# A literal block as a mapped value +some time: | + There is nothing but time + for your tricks. + +# Crazy combinations +databases: + - name: spartan + notes: + - Needs to be backed up + - Needs to be normalized + type: mysql + +# You can be a bit tricky +"if: you'd": like + +# Inline sequences +- [One, Two, Three, Four] + +# Nested Inline Sequences +- [One, [Two, And, Three], Four, Five] + +# Nested Nested Inline Sequences +- [This, [Is, Getting, [Ridiculous, Guys]], Seriously, [Show, Mercy]] + +# Inline mappings +- {name: chris, age: young, brand: lucky strike} + +# Nested inline mappings +- {name: mark, age: older than chris, brand: [marlboro, lucky strike]} + +# References -- they're shaky, but functional +dynamic languages: &DLANGS + - Perl + - Python + - PHP + - Ruby +compiled languages: &CLANGS + - C/C++ + - Java +all languages: + - *DLANGS + - *CLANGS + +# Added in .2.2: Escaped quotes +- you know, this shouldn't work. but it does. +- 'that''s my value.' +- 'again, that\'s my value.' +- "here's to \"quotes\", boss." + +# added in .2.3 +- {name: "Foo, Bar's", age: 20} + +# Added in .2.4: bug [ 1418193 ] Quote Values in Nested Arrays +- [a, ['1', "2"], b] + +# Add in .5.2: Quoted new line values. +- "First line\nSecond line\nThird line" + +# Added in .2.4: malformed YAML +all + javascripts: [dom1.js, dom.js] + +# Added in .2 +1040: Ooo, a numeric key! # And working comments? Wow! Colons in comments: a menace (0.3). + +hash_1: Hash #and a comment +hash_2: "Hash #and a comment" +"hash#3": "Hash (#) can appear in key too" + +float_test: 1.0 +float_test_with_quotes: '1.0' +float_inverse_test: 001 + +a_really_large_number: 115792089237316195423570985008687907853269984665640564039457584007913129639936 # 2^256 + +int array: [ 1, 2, 3 ] + +array on several lines: + [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ] + +morelesskey: "" + +array_of_zero: [0] +sophisticated_array_of_zero: {rx: {tx: [0]} } + +switches: + - { row: 0, col: 0, func: {tx: [0, 1]} } + +empty_sequence: [ ] +empty_hash: { } + +special_characters: "[{]]{{]]" + +asterisks: "*" + +empty_key: + : + key: value + +trailing_colon: "foo:" + +multiline_items: + - type: SomeItem + values: [blah, blah, blah, + blah] + ints: [2, 54, 12, + 2143] + +many_lines: | + A quick + fox + + + jumped + over + + + + + + a lazy + + + + dog + + +werte: + 1: nummer 1 + 0: Stunde 0 + +noindent_records: +- record1: value1 +- record2: value2 + +"a:1": [1000] +"a:2": + - 2000 +a:3: [3000] + +complex_unquoted_key: + a:b:''test': value + +array with commas: + ["0","1"] + +invoice: ["Something", "", '', "Something else"] +quotes: ['Something', "Nothing", 'Anything', "Thing"] + +# [Endloop] +endloop: | + Does this line in the end indeed make Spyc go to an infinite loop? diff --git a/sites/all/libraries/spyc/tests/DumpTest.php b/sites/all/libraries/spyc/tests/DumpTest.php new file mode 100755 index 0000000000..9c31e92a66 --- /dev/null +++ b/sites/all/libraries/spyc/tests/DumpTest.php @@ -0,0 +1,136 @@ +files_to_test = array ('../spyc.yaml', 'failing1.yaml', 'indent_1.yaml', 'quotes.yaml'); + } + + public function testShortSyntax() { + $dump = spyc_dump(array ('item1', 'item2', 'item3')); + $awaiting = "- item1\n- item2\n- item3\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDump() { + foreach ($this->files_to_test as $file) { + $yaml = spyc_load(file_get_contents($file)); + $dump = Spyc::YAMLDump ($yaml); + $yaml_after_dump = Spyc::YAMLLoad ($dump); + $this->assertEquals ($yaml, $yaml_after_dump); + } + } + + public function testDumpWithQuotes() { + $Spyc = new Spyc(); + $Spyc->setting_dump_force_quotes = true; + foreach ($this->files_to_test as $file) { + $yaml = $Spyc->load(file_get_contents($file)); + $dump = $Spyc->dump ($yaml); + $yaml_after_dump = Spyc::YAMLLoad ($dump); + $this->assertEquals ($yaml, $yaml_after_dump); + } + } + + public function testDumpArrays() { + $dump = Spyc::YAMLDump(array ('item1', 'item2', 'item3')); + $awaiting = "---\n- item1\n- item2\n- item3\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testNull() { + $dump = Spyc::YAMLDump(array('a' => 1, 'b' => null, 'c' => 3)); + $awaiting = "---\na: 1\nb: null\nc: 3\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testNext() { + $array = array("aaa", "bbb", "ccc"); + #set arrays internal pointer to next element + next($array); + $dump = Spyc::YAMLDump($array); + $awaiting = "---\n- aaa\n- bbb\n- ccc\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpingMixedArrays() { + $array = array(); + $array[] = 'Sequence item'; + $array['The Key'] = 'Mapped value'; + $array[] = array('A sequence','of a sequence'); + $array[] = array('first' => 'A sequence','second' => 'of mapped values'); + $array['Mapped'] = array('A sequence','which is mapped'); + $array['A Note'] = 'What if your text is too long?'; + $array['Another Note'] = 'If that is the case, the dumper will probably fold your text by using a block. Kinda like this.'; + $array['The trick?'] = 'The trick is that we overrode the default indent, 2, to 4 and the default wordwrap, 40, to 60.'; + $array['Old Dog'] = "And if you want\n to preserve line breaks, \ngo ahead!"; + $array['key:withcolon'] = "Should support this to"; + + $yaml = Spyc::YAMLDump($array,4,60); + } + + public function testMixed() { + $dump = Spyc::YAMLDump(array(0 => 1, 'b' => 2, 1 => 3)); + $awaiting = "---\n0: 1\nb: 2\n1: 3\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpNumerics() { + $dump = Spyc::YAMLDump(array ('404', '405', '500')); + $awaiting = "---\n- \"404\"\n- \"405\"\n- \"500\"\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpAsterisks() { + $dump = Spyc::YAMLDump(array ('*')); + $awaiting = "---\n- '*'\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpAmpersands() { + $dump = Spyc::YAMLDump(array ('some' => '&foo')); + $awaiting = "---\nsome: '&foo'\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpExclamations() { + $dump = Spyc::YAMLDump(array ('some' => '!foo')); + $awaiting = "---\nsome: '!foo'\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpExclamations2() { + $dump = Spyc::YAMLDump(array ('some' => 'foo!')); + $awaiting = "---\nsome: foo!\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpApostrophes() { + $dump = Spyc::YAMLDump(array ('some' => "'Biz' pimpt bedrijventerreinen")); + $awaiting = "---\nsome: \"'Biz' pimpt bedrijventerreinen\"\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpNumericHashes() { + $dump = Spyc::YAMLDump(array ("titel"=> array("0" => "", 1 => "Dr.", 5 => "Prof.", 6 => "Prof. Dr."))); + $awaiting = "---\ntitel:\n 0: \"\"\n 1: Dr.\n 5: Prof.\n 6: Prof. Dr.\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testEmpty() { + $dump = Spyc::YAMLDump(array("foo" => array())); + $awaiting = "---\nfoo: [ ]\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testHashesInKeys() { + $dump = Spyc::YAMLDump(array ('#color' => '#ffffff')); + $awaiting = "---\n\"#color\": '#ffffff'\n"; + $this->assertEquals ($awaiting, $dump); + } + +} diff --git a/sites/all/libraries/spyc/tests/IndentTest.php b/sites/all/libraries/spyc/tests/IndentTest.php new file mode 100755 index 0000000000..ee2322f672 --- /dev/null +++ b/sites/all/libraries/spyc/tests/IndentTest.php @@ -0,0 +1,65 @@ +Y = Spyc::YAMLLoad("indent_1.yaml"); + } + + public function testIndent_1() { + $this->assertEquals (array ('child_1' => 2, 'child_2' => 0, 'child_3' => 1), $this->Y['root']); + } + + public function testIndent_2() { + $this->assertEquals (array ('child_1' => 1, 'child_2' => 2), $this->Y['root2']); + } + + public function testIndent_3() { + $this->assertEquals (array (array ('resolutions' => array (1024 => 768, 1920 => 1200), 'producer' => 'Nec')), $this->Y['display']); + } + + public function testIndent_4() { + $this->assertEquals (array ( + array ('resolutions' => array (1024 => 768)), + array ('resolutions' => array (1920 => 1200)), + ), $this->Y['displays']); + } + + public function testIndent_5() { + $this->assertEquals (array (array ( + 'row' => 0, + 'col' => 0, + 'headsets_affected' => array ( + array ( + 'ports' => array (0), + 'side' => 'left', + ) + ), + 'switch_function' => array ( + 'ics_ptt' => true + ) + )), $this->Y['nested_hashes_and_seqs']); + } + + public function testIndent_6() { + $this->assertEquals (array ( + 'h' => array ( + array ('a' => 'b', 'a1' => 'b1'), + array ('c' => 'd') + ) + ), $this->Y['easier_nest']); + } + + public function testIndent_space() { + $this->assertEquals ("By four\n spaces", $this->Y['one_space']); + } + + public function testListAndComment() { + $this->assertEquals (array ('one', 'two', 'three'), $this->Y['list_and_comment']); + } + +} diff --git a/sites/all/libraries/spyc/tests/ParseTest.php b/sites/all/libraries/spyc/tests/ParseTest.php new file mode 100755 index 0000000000..71196af4e9 --- /dev/null +++ b/sites/all/libraries/spyc/tests/ParseTest.php @@ -0,0 +1,401 @@ +yaml = spyc_load_file('../spyc.yaml'); + } + + public function testMergeHashKeys() { + $Expected = array ( + array ('step' => array('instrument' => 'Lasik 2000', 'pulseEnergy' => 5.4, 'pulseDuration' => 12, 'repetition' => 1000, 'spotSize' => '1mm')), + array ('step' => array('instrument' => 'Lasik 2000', 'pulseEnergy' => 5.4, 'pulseDuration' => 12, 'repetition' => 1000, 'spotSize' => '2mm')), + ); + $Actual = spyc_load_file ('indent_1.yaml'); + $this->assertEquals ($Expected, $Actual['steps']); + } + + public function testDeathMasks() { + $Expected = array ('sad' => 2, 'magnificent' => 4); + $Actual = spyc_load_file ('indent_1.yaml'); + $this->assertEquals ($Expected, $Actual['death masks are']); + } + + public function testDevDb() { + $Expected = array ('adapter' => 'mysql', 'host' => 'localhost', 'database' => 'rails_dev'); + $Actual = spyc_load_file ('indent_1.yaml'); + $this->assertEquals ($Expected, $Actual['development']); + } + + public function testNumericKey() { + $this->assertEquals ("Ooo, a numeric key!", $this->yaml[1040]); + } + + public function testMappingsString() { + $this->assertEquals ("Anyone's name, really.", $this->yaml['String']); + } + + public function testMappingsInt() { + $this->assertSame (13, $this->yaml['Int']); + } + + public function testMappingsHex() { + $this->assertSame (243, $this->yaml['Hex']); + $this->assertSame ('f0xf3', $this->yaml['BadHex']); + } + + public function testMappingsBooleanTrue() { + $this->assertSame (true, $this->yaml['True']); + } + + public function testMappingsBooleanFalse() { + $this->assertSame (false, $this->yaml['False']); + } + + public function testMappingsZero() { + $this->assertSame (0, $this->yaml['Zero']); + } + + public function testMappingsNull() { + $this->assertSame (null, $this->yaml['Null']); + } + + public function testMappingsNotNull() { + $this->assertSame ('null', $this->yaml['NotNull']); + } + + public function testMappingsFloat() { + $this->assertSame (5.34, $this->yaml['Float']); + } + + public function testMappingsNegative() { + $this->assertSame (-90, $this->yaml['Negative']); + } + + public function testMappingsSmallFloat() { + $this->assertSame (0.7, $this->yaml['SmallFloat']); + } + + public function testNewline() { + $this->assertSame ('\n', $this->yaml['NewLine']); + } + + public function testQuotedNewline() { + $this->assertSame ("\n", $this->yaml['QuotedNewLine']); + } + + public function testSeq0() { + $this->assertEquals ("PHP Class", $this->yaml[0]); + } + + public function testSeq1() { + $this->assertEquals ("Basic YAML Loader", $this->yaml[1]); + } + + public function testSeq2() { + $this->assertEquals ("Very Basic YAML Dumper", $this->yaml[2]); + } + + public function testSeq3() { + $this->assertEquals (array("YAML is so easy to learn.", + "Your config files will never be the same."), $this->yaml[3]); + } + + public function testSeqMap() { + $this->assertEquals (array("cpu" => "1.5ghz", "ram" => "1 gig", + "os" => "os x 10.4.1"), $this->yaml[4]); + } + + public function testMappedSequence() { + $this->assertEquals (array("yaml.org", "php.net"), $this->yaml['domains']); + } + + public function testAnotherSequence() { + $this->assertEquals (array("program" => "Adium", "platform" => "OS X", + "type" => "Chat Client"), $this->yaml[5]); + } + + public function testFoldedBlock() { + $this->assertEquals ("There isn't any time for your tricks!\nDo you understand?", $this->yaml['no time']); + } + + public function testLiteralAsMapped() { + $this->assertEquals ("There is nothing but time\nfor your tricks.", $this->yaml['some time']); + } + + public function testCrazy() { + $this->assertEquals (array( array("name" => "spartan", "notes" => + array( "Needs to be backed up", + "Needs to be normalized" ), + "type" => "mysql" )), $this->yaml['databases']); + } + + public function testColons() { + $this->assertEquals ("like", $this->yaml["if: you'd"]); + } + + public function testInline() { + $this->assertEquals (array("One", "Two", "Three", "Four"), $this->yaml[6]); + } + + public function testNestedInline() { + $this->assertEquals (array("One", array("Two", "And", "Three"), "Four", "Five"), $this->yaml[7]); + } + + public function testNestedNestedInline() { + $this->assertEquals (array( "This", array("Is", "Getting", array("Ridiculous", "Guys")), + "Seriously", array("Show", "Mercy")), $this->yaml[8]); + } + + public function testInlineMappings() { + $this->assertEquals (array("name" => "chris", "age" => "young", "brand" => "lucky strike"), $this->yaml[9]); + } + + public function testNestedInlineMappings() { + $this->assertEquals (array("name" => "mark", "age" => "older than chris", + "brand" => array("marlboro", "lucky strike")), $this->yaml[10]); + } + + public function testReferences() { + $this->assertEquals (array('Perl', 'Python', 'PHP', 'Ruby'), $this->yaml['dynamic languages']); + } + + public function testReferences2() { + $this->assertEquals (array('C/C++', 'Java'), $this->yaml['compiled languages']); + } + + public function testReferences3() { + $this->assertEquals (array( + array('Perl', 'Python', 'PHP', 'Ruby'), + array('C/C++', 'Java') + ), $this->yaml['all languages']); + } + + public function testEscapedQuotes() { + $this->assertEquals ("you know, this shouldn't work. but it does.", $this->yaml[11]); + } + + public function testEscapedQuotes_2() { + $this->assertEquals ( "that's my value.", $this->yaml[12]); + } + + public function testEscapedQuotes_3() { + $this->assertEquals ("again, that's my value.", $this->yaml[13]); + } + + public function testQuotes() { + $this->assertEquals ("here's to \"quotes\", boss.", $this->yaml[14]); + } + + public function testQuoteSequence() { + $this->assertEquals ( array( 'name' => "Foo, Bar's", 'age' => 20), $this->yaml[15]); + } + + public function testShortSequence() { + $this->assertEquals (array( 0 => "a", 1 => array (0 => 1, 1 => 2), 2 => "b"), $this->yaml[16]); + } + + public function testQuotedNewlines() { + $this->assertEquals ("First line\nSecond line\nThird line", $this->yaml[17]); + } + + public function testHash_1() { + $this->assertEquals ("Hash", $this->yaml['hash_1']); + } + + public function testHash_2() { + $this->assertEquals ('Hash #and a comment', $this->yaml['hash_2']); + } + + public function testHash_3() { + $this->assertEquals ('Hash (#) can appear in key too', $this->yaml['hash#3']); + } + + public function testEndloop() { + $this->assertEquals ("Does this line in the end indeed make Spyc go to an infinite loop?", $this->yaml['endloop']); + } + + public function testReallyLargeNumber() { + $this->assertEquals ('115792089237316195423570985008687907853269984665640564039457584007913129639936', $this->yaml['a_really_large_number']); + } + + public function testFloatWithZeros() { + $this->assertSame ('1.0', $this->yaml['float_test']); + } + + public function testFloatWithQuotes() { + $this->assertSame ('1.0', $this->yaml['float_test_with_quotes']); + } + + public function testFloatInverse() { + $this->assertEquals ('001', $this->yaml['float_inverse_test']); + } + + public function testIntArray() { + $this->assertEquals (array (1, 2, 3), $this->yaml['int array']); + } + + public function testArrayOnSeveralLines() { + $this->assertEquals (array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19), $this->yaml['array on several lines']); + } + + public function testArrayWithCommas() { + $this->assertEquals(array (0, 1), $this->yaml['array with commas']); + } + + public function testmoreLessKey() { + $this->assertEquals ('', $this->yaml['morelesskey']); + } + + public function testArrayOfZero() { + $this->assertSame (array(0), $this->yaml['array_of_zero']); + } + + public function testSophisticatedArrayOfZero() { + $this->assertSame (array('rx' => array ('tx' => array (0))), $this->yaml['sophisticated_array_of_zero']); + } + + public function testSwitches() { + $this->assertEquals (array (array ('row' => 0, 'col' => 0, 'func' => array ('tx' => array(0, 1)))), $this->yaml['switches']); + } + + public function testEmptySequence() { + $this->assertSame (array(), $this->yaml['empty_sequence']); + } + + public function testEmptyHash() { + $this->assertSame (array(), $this->yaml['empty_hash']); + } + + public function testEmptykey() { + $this->assertSame (array('' => array ('key' => 'value')), $this->yaml['empty_key']); + } + + public function testMultilines() { + $this->assertSame (array(array('type' => 'SomeItem', 'values' => array ('blah', 'blah', 'blah', 'blah'), 'ints' => array(2, 54, 12, 2143))), $this->yaml['multiline_items']); + } + + public function testManyNewlines() { + $this->assertSame ('A quick +fox + + +jumped +over + + + + + +a lazy + + + +dog', $this->yaml['many_lines']); + } + + public function testWerte() { + $this->assertSame (array ('1' => 'nummer 1', '0' => 'Stunde 0'), $this->yaml['werte']); + } + + /* public function testNoIndent() { + $this->assertSame (array( + array ('record1'=>'value1'), + array ('record2'=>'value2') + ) + , $this->yaml['noindent_records']); + } */ + + public function testColonsInKeys() { + $this->assertSame (array (1000), $this->yaml['a:1']); + } + + public function testColonsInKeys2() { + $this->assertSame (array (2000), $this->yaml['a:2']); + } + + public function testUnquotedColonsInKeys() { + $this->assertSame (array (3000), $this->yaml['a:3']); + } + + public function testComplicatedKeyWithColon() { + $this->assertSame(array("a:b:''test'" => 'value'), $this->yaml['complex_unquoted_key']); + } + + public function testKeysInMappedValueException() { + $this->setExpectedException('Exception'); + Spyc::YAMLLoad('x: y: z:'); + } + + public function testKeysInValueException() { + $this->setExpectedException('Exception'); + Spyc::YAMLLoad('x: y: z'); + } + + public function testSpecialCharacters() { + $this->assertSame ('[{]]{{]]', $this->yaml['special_characters']); + } + + public function testAngleQuotes() { + $Quotes = Spyc::YAMLLoad('quotes.yaml'); + $this->assertEquals (array ('html_tags' => array ('
      ', '

      '), 'html_content' => array ('

      hello world

      ', 'hello
      world'), 'text_content' => array ('hello world')), + $Quotes); + } + + public function testFailingColons() { + $Failing = Spyc::YAMLLoad('failing1.yaml'); + $this->assertSame (array ('MyObject' => array ('Prop1' => array ('key1:val1'))), + $Failing); + } + + public function testQuotesWithComments() { + $Expected = 'bar'; + $Actual = spyc_load_file ('comments.yaml'); + $this->assertEquals ($Expected, $Actual['foo']); + } + + public function testArrayWithComments() { + $Expected = array ('x', 'y', 'z'); + $Actual = spyc_load_file ('comments.yaml'); + $this->assertEquals ($Expected, $Actual['arr']); + } + + public function testAfterArrayWithKittens() { + $Expected = 'kittens'; + $Actual = spyc_load_file ('comments.yaml'); + $this->assertEquals ($Expected, $Actual['bar']); + } + + // Plain characters http://www.yaml.org/spec/1.2/spec.html#id2789510 + public function testKai() { + $Expected = array('-example' => 'value'); + $Actual = spyc_load_file ('indent_1.yaml'); + $this->assertEquals ($Expected, $Actual['kai']); + } + + public function testKaiList() { + $Expected = array ('-item', '-item', '-item'); + $Actual = spyc_load_file ('indent_1.yaml'); + $this->assertEquals ($Expected, $Actual['kai_list_of_items']); + } + + public function testDifferentQuoteTypes() { + $expected = array ('Something', "", "", "Something else"); + $this->assertSame ($expected, $this->yaml['invoice']); + } + + public function testDifferentQuoteTypes2() { + $expected = array ('Something', "Nothing", "Anything", "Thing"); + $this->assertSame ($expected, $this->yaml['quotes']); + } + + // Separation spaces http://www.yaml.org/spec/1.2/spec.html#id2778394 + public function testMultipleArrays() { + $expected = array(array(array('x'))); + $this->assertSame($expected, Spyc::YAMLLoad("- - - x")); + } +} diff --git a/sites/all/libraries/spyc/tests/RoundTripTest.php b/sites/all/libraries/spyc/tests/RoundTripTest.php new file mode 100755 index 0000000000..448fd48d6e --- /dev/null +++ b/sites/all/libraries/spyc/tests/RoundTripTest.php @@ -0,0 +1,78 @@ + $a))); } + + +class RoundTripTest extends PHPUnit_Framework_TestCase { + + protected function setUp() { + } + + public function testNull() { + $this->assertEquals (array ('x' => null), roundTrip (null)); + } + + public function testY() { + $this->assertEquals (array ('x' => 'y'), roundTrip ('y')); + } + + public function testExclam() { + $this->assertEquals (array ('x' => '!yeah'), roundTrip ('!yeah')); + } + + public function test5() { + $this->assertEquals (array ('x' => '5'), roundTrip ('5')); + } + + public function testSpaces() { + $this->assertEquals (array ('x' => 'x '), roundTrip ('x ')); + } + + public function testApostrophes() { + $this->assertEquals (array ('x' => "'biz'"), roundTrip ("'biz'")); + } + + public function testNewLines() { + $this->assertEquals (array ('x' => "\n"), roundTrip ("\n")); + } + + public function testHashes() { + $this->assertEquals (array ('x' => array ("#color" => '#fff')), roundTrip (array ("#color" => '#fff'))); + } + + public function testPreserveString() { + $result1 = roundTrip ('0'); + $result2 = roundTrip ('true'); + $this->assertTrue (is_string ($result1['x'])); + $this->assertTrue (is_string ($result2['x'])); + } + + public function testPreserveBool() { + $result = roundTrip (true); + $this->assertTrue (is_bool ($result['x'])); + } + + public function testPreserveInteger() { + $result = roundTrip (0); + $this->assertTrue (is_int ($result['x'])); + } + + public function testWordWrap() { + $this->assertEquals (array ('x' => "aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), roundTrip ("aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")); + } + + public function testABCD() { + $this->assertEquals (array ('a', 'b', 'c', 'd'), Spyc::YAMLLoad(Spyc::YAMLDump(array('a', 'b', 'c', 'd')))); + } + + public function testABCD2() { + $a = array('a', 'b', 'c', 'd'); // Create a simple list + $b = Spyc::YAMLDump($a); // Dump the list as YAML + $c = Spyc::YAMLLoad($b); // Load the dumped YAML + $d = Spyc::YAMLDump($c); // Re-dump the data + $this->assertSame($b, $d); + } + +} diff --git a/sites/all/libraries/spyc/tests/comments.yaml b/sites/all/libraries/spyc/tests/comments.yaml new file mode 100755 index 0000000000..c05012f3d1 --- /dev/null +++ b/sites/all/libraries/spyc/tests/comments.yaml @@ -0,0 +1,3 @@ +foo: 'bar' #Comment +arr: ['x', 'y', 'z'] # Comment here +bar: kittens \ No newline at end of file diff --git a/sites/all/libraries/spyc/tests/failing1.yaml b/sites/all/libraries/spyc/tests/failing1.yaml new file mode 100755 index 0000000000..6906a51c16 --- /dev/null +++ b/sites/all/libraries/spyc/tests/failing1.yaml @@ -0,0 +1,2 @@ +MyObject: + Prop1: {key1:val1} \ No newline at end of file diff --git a/sites/all/libraries/spyc/tests/indent_1.yaml b/sites/all/libraries/spyc/tests/indent_1.yaml new file mode 100755 index 0000000000..26dbf34268 --- /dev/null +++ b/sites/all/libraries/spyc/tests/indent_1.yaml @@ -0,0 +1,65 @@ +root: + child_1: 2 + + child_2: 0 + child_3: 1 + +root2: + child_1: 1 +# A comment + child_2: 2 + +displays: + - resolutions: + 1024: 768 + - resolutions: + 1920: 1200 + +display: + - resolutions: + 1024: 768 + 1920: 1200 + producer: "Nec" + +nested_hashes_and_seqs: + - { row: 0, col: 0, headsets_affected: [{ports: [0], side: left}], switch_function: {ics_ptt: true} } + +easier_nest: { h: [{a: b, a1: b1}, {c: d}] } + +one_space: | + By four + spaces + +steps: + - step: &id001 + instrument: Lasik 2000 + pulseEnergy: 5.4 + pulseDuration: 12 + repetition: 1000 + spotSize: 1mm + - step: + <<: *id001 + spotSize: 2mm + +death masks are: + sad: 2 + <<: {magnificent: 4} + +login: &login + adapter: mysql + host: localhost + +development: + database: rails_dev + <<: *login + +"key": "value:" +colon_only: ":" + +list_and_comment: [one, two, three] # comment +kai: + -example: value +kai_list_of_items: + - -item + - '-item' + -item \ No newline at end of file diff --git a/sites/all/libraries/spyc/tests/quotes.yaml b/sites/all/libraries/spyc/tests/quotes.yaml new file mode 100755 index 0000000000..2ceea86aae --- /dev/null +++ b/sites/all/libraries/spyc/tests/quotes.yaml @@ -0,0 +1,8 @@ +html_tags: + -
      + -

      +html_content: + -

      hello world

      + - hello
      world +text_content: + - hello world \ No newline at end of file From a3f381b90c7ed59d35672df770e94076ab5ebe57 Mon Sep 17 00:00:00 2001 From: Willy Karam Date: Sat, 7 Mar 2015 23:00:43 -0500 Subject: [PATCH 6/9] Adding Sldr library --- sites/all/libraries/sidr/README.md | 4 ++++ sites/all/libraries/sidr/component.json | 19 +++++++++++++++++++ sites/all/libraries/sidr/jquery.sidr.min.js | 4 ++++ .../sidr/stylesheets/jquery.sidr.dark.css | 1 + .../sidr/stylesheets/jquery.sidr.light.css | 1 + 5 files changed, 29 insertions(+) create mode 100755 sites/all/libraries/sidr/README.md create mode 100755 sites/all/libraries/sidr/component.json create mode 100755 sites/all/libraries/sidr/jquery.sidr.min.js create mode 100755 sites/all/libraries/sidr/stylesheets/jquery.sidr.dark.css create mode 100755 sites/all/libraries/sidr/stylesheets/jquery.sidr.light.css diff --git a/sites/all/libraries/sidr/README.md b/sites/all/libraries/sidr/README.md new file mode 100755 index 0000000000..978b9ab7bc --- /dev/null +++ b/sites/all/libraries/sidr/README.md @@ -0,0 +1,4 @@ +Sidr +============ + +This is the Bower package for the Sidr jQuery Plugin. For a further description, documentation and others visit: [http://www.berriart.com/sidr](http://www.berriart.com/sidr) diff --git a/sites/all/libraries/sidr/component.json b/sites/all/libraries/sidr/component.json new file mode 100755 index 0000000000..e8936a4224 --- /dev/null +++ b/sites/all/libraries/sidr/component.json @@ -0,0 +1,19 @@ +{ + "name": "sidr", + "description": "jQuery plugin for creating side menus and the easiest way for doing your menu responsive", + "version": "1.2.1", + "homepage": "http://www.berriart.com/sidr/", + "author": { + "name": "Alberto Varela", + "site": "http://albertovarelasanchez.com/" + }, + "main": ["./jquery.sidr.min.js", "./stylesheets/jquery.sidr.dark.css"], + "keywords": [ "jquery", "plugin", "responsive" ], + "dependencies": { + "jquery": ">=1.4.3" + }, + "licenses": [ { + "type": "MIT", + "url": "https://github.com/artberri/sidr/blob/master/LICENSE-MIT" + } ] +} \ No newline at end of file diff --git a/sites/all/libraries/sidr/jquery.sidr.min.js b/sites/all/libraries/sidr/jquery.sidr.min.js new file mode 100755 index 0000000000..c0e3deb49d --- /dev/null +++ b/sites/all/libraries/sidr/jquery.sidr.min.js @@ -0,0 +1,4 @@ +/*! Sidr - v1.2.1 - 2013-11-06 + * https://github.com/artberri/sidr + * Copyright (c) 2013 Alberto Varela; Licensed MIT */ +(function(e){var t=!1,i=!1,n={isUrl:function(e){var t=RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i");return t.test(e)?!0:!1},loadContent:function(e,t){e.html(t)},addPrefix:function(e){var t=e.attr("id"),i=e.attr("class");"string"==typeof t&&""!==t&&e.attr("id",t.replace(/([A-Za-z0-9_.\-]+)/g,"sidr-id-$1")),"string"==typeof i&&""!==i&&"sidr-inner"!==i&&e.attr("class",i.replace(/([A-Za-z0-9_.\-]+)/g,"sidr-class-$1")),e.removeAttr("style")},execute:function(n,s,a){"function"==typeof s?(a=s,s="sidr"):s||(s="sidr");var r,d,l,c=e("#"+s),u=e(c.data("body")),f=e("html"),p=c.outerWidth(!0),g=c.data("speed"),h=c.data("side"),m=c.data("displace"),v=c.data("onOpen"),y=c.data("onClose"),x="sidr"===s?"sidr-open":"sidr-open "+s+"-open";if("open"===n||"toggle"===n&&!c.is(":visible")){if(c.is(":visible")||t)return;if(i!==!1)return o.close(i,function(){o.open(s)}),void 0;t=!0,"left"===h?(r={left:p+"px"},d={left:"0px"}):(r={right:p+"px"},d={right:"0px"}),u.is("body")&&(l=f.scrollTop(),f.css("overflow-x","hidden").scrollTop(l)),m?u.addClass("sidr-animating").css({width:u.width(),position:"absolute"}).animate(r,g,function(){e(this).addClass(x)}):setTimeout(function(){e(this).addClass(x)},g),c.css("display","block").animate(d,g,function(){t=!1,i=s,"function"==typeof a&&a(s),u.removeClass("sidr-animating")}),v()}else{if(!c.is(":visible")||t)return;t=!0,"left"===h?(r={left:0},d={left:"-"+p+"px"}):(r={right:0},d={right:"-"+p+"px"}),u.is("body")&&(l=f.scrollTop(),f.removeAttr("style").scrollTop(l)),u.addClass("sidr-animating").animate(r,g).removeClass(x),c.animate(d,g,function(){c.removeAttr("style").hide(),u.removeAttr("style"),e("html").removeAttr("style"),t=!1,i=!1,"function"==typeof a&&a(s),u.removeClass("sidr-animating")}),y()}}},o={open:function(e,t){n.execute("open",e,t)},close:function(e,t){n.execute("close",e,t)},toggle:function(e,t){n.execute("toggle",e,t)},toogle:function(e,t){n.execute("toggle",e,t)}};e.sidr=function(t){return o[t]?o[t].apply(this,Array.prototype.slice.call(arguments,1)):"function"!=typeof t&&"string"!=typeof t&&t?(e.error("Method "+t+" does not exist on jQuery.sidr"),void 0):o.toggle.apply(this,arguments)},e.fn.sidr=function(t){var i=e.extend({name:"sidr",speed:200,side:"left",source:null,renaming:!0,body:"body",displace:!0,onOpen:function(){},onClose:function(){}},t),s=i.name,a=e("#"+s);if(0===a.length&&(a=e("
      ").attr("id",s).appendTo(e("body"))),a.addClass("sidr").addClass(i.side).data({speed:i.speed,side:i.side,body:i.body,displace:i.displace,onOpen:i.onOpen,onClose:i.onClose}),"function"==typeof i.source){var r=i.source(s);n.loadContent(a,r)}else if("string"==typeof i.source&&n.isUrl(i.source))e.get(i.source,function(e){n.loadContent(a,e)});else if("string"==typeof i.source){var d="",l=i.source.split(",");if(e.each(l,function(t,i){d+='
      '+e(i).html()+"
      "}),i.renaming){var c=e("
      ").html(d);c.find("*").each(function(t,i){var o=e(i);n.addPrefix(o)}),d=c.html()}n.loadContent(a,d)}else null!==i.source&&e.error("Invalid Sidr Source");return this.each(function(){var t=e(this),i=t.data("sidr");i||(t.data("sidr",s),"ontouchstart"in document.documentElement?(t.bind("touchstart",function(e){e.originalEvent.touches[0],this.touched=e.timeStamp}),t.bind("touchend",function(e){var t=Math.abs(e.timeStamp-this.touched);200>t&&(e.preventDefault(),o.toggle(s))})):t.click(function(e){e.preventDefault(),o.toggle(s)}))})}})(jQuery); \ No newline at end of file diff --git a/sites/all/libraries/sidr/stylesheets/jquery.sidr.dark.css b/sites/all/libraries/sidr/stylesheets/jquery.sidr.dark.css new file mode 100755 index 0000000000..cb3f183459 --- /dev/null +++ b/sites/all/libraries/sidr/stylesheets/jquery.sidr.dark.css @@ -0,0 +1 @@ +.sidr{display:none;position:absolute;position:fixed;top:0;height:100%;z-index:999999;width:260px;overflow-x:none;overflow-y:auto;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-size:15px;background:#333;color:#fff;-webkit-box-shadow:inset 0 0 5px 5px #222;-moz-box-shadow:inset 0 0 5px 5px #222;box-shadow:inset 0 0 5px 5px #222}.sidr .sidr-inner{padding:0 0 15px}.sidr .sidr-inner>p{margin-left:15px;margin-right:15px}.sidr.right{left:auto;right:-260px}.sidr.left{left:-260px;right:auto}.sidr h1,.sidr h2,.sidr h3,.sidr h4,.sidr h5,.sidr h6{font-size:11px;font-weight:normal;padding:0 15px;margin:0 0 5px;color:#fff;line-height:24px;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4d4d4d), color-stop(100%, #1a1a1a));background-image:-webkit-linear-gradient(#4d4d4d,#1a1a1a);background-image:-moz-linear-gradient(#4d4d4d,#1a1a1a);background-image:-o-linear-gradient(#4d4d4d,#1a1a1a);background-image:linear-gradient(#4d4d4d,#1a1a1a);-webkit-box-shadow:0 5px 5px 3px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 5px 3px rgba(0,0,0,0.2);box-shadow:0 5px 5px 3px rgba(0,0,0,0.2)}.sidr p{font-size:13px;margin:0 0 12px}.sidr p a{color:rgba(255,255,255,0.9)}.sidr>p{margin-left:15px;margin-right:15px}.sidr ul{display:block;margin:0 0 15px;padding:0;border-top:1px solid #1a1a1a;border-bottom:1px solid #4d4d4d}.sidr ul li{display:block;margin:0;line-height:48px;border-top:1px solid #4d4d4d;border-bottom:1px solid #1a1a1a}.sidr ul li:hover,.sidr ul li.active,.sidr ul li.sidr-class-active{border-top:none;line-height:49px}.sidr ul li:hover>a,.sidr ul li:hover>span,.sidr ul li.active>a,.sidr ul li.active>span,.sidr ul li.sidr-class-active>a,.sidr ul li.sidr-class-active>span{-webkit-box-shadow:inset 0 0 15px 3px #222;-moz-box-shadow:inset 0 0 15px 3px #222;box-shadow:inset 0 0 15px 3px #222}.sidr ul li a,.sidr ul li span{padding:0 15px;display:block;text-decoration:none;color:#fff}.sidr ul li ul{border-bottom:none;margin:0}.sidr ul li ul li{line-height:40px;font-size:13px}.sidr ul li ul li:last-child{border-bottom:none}.sidr ul li ul li:hover,.sidr ul li ul li.active,.sidr ul li ul li.sidr-class-active{border-top:none;line-height:41px}.sidr ul li ul li:hover>a,.sidr ul li ul li:hover>span,.sidr ul li ul li.active>a,.sidr ul li ul li.active>span,.sidr ul li ul li.sidr-class-active>a,.sidr ul li ul li.sidr-class-active>span{-webkit-box-shadow:inset 0 0 15px 3px #222;-moz-box-shadow:inset 0 0 15px 3px #222;box-shadow:inset 0 0 15px 3px #222}.sidr ul li ul li a,.sidr ul li ul li span{color:rgba(255,255,255,0.8);padding-left:30px}.sidr form{margin:0 15px}.sidr label{font-size:13px}.sidr input[type="text"],.sidr input[type="password"],.sidr input[type="date"],.sidr input[type="datetime"],.sidr input[type="email"],.sidr input[type="number"],.sidr input[type="search"],.sidr input[type="tel"],.sidr input[type="time"],.sidr input[type="url"],.sidr textarea,.sidr select{width:100%;font-size:13px;padding:5px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 0 10px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;border:none;background:rgba(0,0,0,0.1);color:rgba(255,255,255,0.6);display:block;clear:both}.sidr input[type=checkbox]{width:auto;display:inline;clear:none}.sidr input[type=button],.sidr input[type=submit]{color:#333;background:#fff}.sidr input[type=button]:hover,.sidr input[type=submit]:hover{background:rgba(255,255,255,0.9)} diff --git a/sites/all/libraries/sidr/stylesheets/jquery.sidr.light.css b/sites/all/libraries/sidr/stylesheets/jquery.sidr.light.css new file mode 100755 index 0000000000..50d0685c7a --- /dev/null +++ b/sites/all/libraries/sidr/stylesheets/jquery.sidr.light.css @@ -0,0 +1 @@ +.sidr{display:none;position:absolute;position:fixed;top:0;height:100%;z-index:999999;width:260px;overflow-x:none;overflow-y:auto;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-size:15px;background:#f8f8f8;color:#333;-webkit-box-shadow:inset 0 0 5px 5px #ebebeb;-moz-box-shadow:inset 0 0 5px 5px #ebebeb;box-shadow:inset 0 0 5px 5px #ebebeb}.sidr .sidr-inner{padding:0 0 15px}.sidr .sidr-inner>p{margin-left:15px;margin-right:15px}.sidr.right{left:auto;right:-260px}.sidr.left{left:-260px;right:auto}.sidr h1,.sidr h2,.sidr h3,.sidr h4,.sidr h5,.sidr h6{font-size:11px;font-weight:normal;padding:0 15px;margin:0 0 5px;color:#333;line-height:24px;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #dfdfdf));background-image:-webkit-linear-gradient(#ffffff,#dfdfdf);background-image:-moz-linear-gradient(#ffffff,#dfdfdf);background-image:-o-linear-gradient(#ffffff,#dfdfdf);background-image:linear-gradient(#ffffff,#dfdfdf);-webkit-box-shadow:0 5px 5px 3px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 5px 3px rgba(0,0,0,0.2);box-shadow:0 5px 5px 3px rgba(0,0,0,0.2)}.sidr p{font-size:13px;margin:0 0 12px}.sidr p a{color:rgba(51,51,51,0.9)}.sidr>p{margin-left:15px;margin-right:15px}.sidr ul{display:block;margin:0 0 15px;padding:0;border-top:1px solid #dfdfdf;border-bottom:1px solid #fff}.sidr ul li{display:block;margin:0;line-height:48px;border-top:1px solid #fff;border-bottom:1px solid #dfdfdf}.sidr ul li:hover,.sidr ul li.active,.sidr ul li.sidr-class-active{border-top:none;line-height:49px}.sidr ul li:hover>a,.sidr ul li:hover>span,.sidr ul li.active>a,.sidr ul li.active>span,.sidr ul li.sidr-class-active>a,.sidr ul li.sidr-class-active>span{-webkit-box-shadow:inset 0 0 15px 3px #ebebeb;-moz-box-shadow:inset 0 0 15px 3px #ebebeb;box-shadow:inset 0 0 15px 3px #ebebeb}.sidr ul li a,.sidr ul li span{padding:0 15px;display:block;text-decoration:none;color:#333}.sidr ul li ul{border-bottom:none;margin:0}.sidr ul li ul li{line-height:40px;font-size:13px}.sidr ul li ul li:last-child{border-bottom:none}.sidr ul li ul li:hover,.sidr ul li ul li.active,.sidr ul li ul li.sidr-class-active{border-top:none;line-height:41px}.sidr ul li ul li:hover>a,.sidr ul li ul li:hover>span,.sidr ul li ul li.active>a,.sidr ul li ul li.active>span,.sidr ul li ul li.sidr-class-active>a,.sidr ul li ul li.sidr-class-active>span{-webkit-box-shadow:inset 0 0 15px 3px #ebebeb;-moz-box-shadow:inset 0 0 15px 3px #ebebeb;box-shadow:inset 0 0 15px 3px #ebebeb}.sidr ul li ul li a,.sidr ul li ul li span{color:rgba(51,51,51,0.8);padding-left:30px}.sidr form{margin:0 15px}.sidr label{font-size:13px}.sidr input[type="text"],.sidr input[type="password"],.sidr input[type="date"],.sidr input[type="datetime"],.sidr input[type="email"],.sidr input[type="number"],.sidr input[type="search"],.sidr input[type="tel"],.sidr input[type="time"],.sidr input[type="url"],.sidr textarea,.sidr select{width:100%;font-size:13px;padding:5px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 0 10px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;border:none;background:rgba(0,0,0,0.1);color:rgba(51,51,51,0.6);display:block;clear:both}.sidr input[type=checkbox]{width:auto;display:inline;clear:none}.sidr input[type=button],.sidr input[type=submit]{color:#f8f8f8;background:#333}.sidr input[type=button]:hover,.sidr input[type=submit]:hover{background:rgba(51,51,51,0.9)} From 0b36b7263447bfc35622a1f5fb5eeee6d016d767 Mon Sep 17 00:00:00 2001 From: Willy Karam Date: Sat, 7 Mar 2015 23:01:16 -0500 Subject: [PATCH 7/9] Adding JPlayer library --- sites/all/libraries/jplayer/jquery.jplayer.js | 3506 +++++++++++++++++ .../libraries/jplayer/jquery.jplayer.min.js | 3 + .../all/libraries/jplayer/jquery.jplayer.swf | Bin 0 -> 13714 bytes 3 files changed, 3509 insertions(+) create mode 100755 sites/all/libraries/jplayer/jquery.jplayer.js create mode 100755 sites/all/libraries/jplayer/jquery.jplayer.min.js create mode 100755 sites/all/libraries/jplayer/jquery.jplayer.swf diff --git a/sites/all/libraries/jplayer/jquery.jplayer.js b/sites/all/libraries/jplayer/jquery.jplayer.js new file mode 100755 index 0000000000..842f31b63d --- /dev/null +++ b/sites/all/libraries/jplayer/jquery.jplayer.js @@ -0,0 +1,3506 @@ +/* + * jPlayer Plugin for jQuery JavaScript Library + * http://www.jplayer.org + * + * Copyright (c) 2009 - 2014 Happyworm Ltd + * Licensed under the MIT license. + * http://opensource.org/licenses/MIT + * + * Author: Mark J Panaghiston + * Version: 2.9.2 + * Date: 14th December 2014 + */ + +/* Support for Zepto 1.0 compiled with optional data module. + * For AMD or NODE/CommonJS support, you will need to manually switch the related 2 lines in the code below. + * Search terms: "jQuery Switch" and "Zepto Switch" + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); // jQuery Switch + // define(['zepto'], factory); // Zepto Switch + } else if (typeof exports === 'object') { + // Node/CommonJS + factory(require('jquery')); // jQuery Switch + //factory(require('zepto')); // Zepto Switch + } else { + // Browser globals + if(root.jQuery) { // Use jQuery if available + factory(root.jQuery); + } else { // Otherwise, use Zepto + factory(root.Zepto); + } + } +}(this, function ($, undefined) { + + // Adapted from jquery.ui.widget.js (1.8.7): $.widget.bridge - Tweaked $.data(this,XYZ) to $(this).data(XYZ) for Zepto + $.fn.jPlayer = function( options ) { + var name = "jPlayer"; + var isMethodCall = typeof options === "string", + args = Array.prototype.slice.call( arguments, 1 ), + returnValue = this; + + // allow multiple hashes to be passed on init + options = !isMethodCall && args.length ? + $.extend.apply( null, [ true, options ].concat(args) ) : + options; + + // prevent calls to internal methods + if ( isMethodCall && options.charAt( 0 ) === "_" ) { + return returnValue; + } + + if ( isMethodCall ) { + this.each(function() { + var instance = $(this).data( name ), + methodValue = instance && $.isFunction( instance[options] ) ? + instance[ options ].apply( instance, args ) : + instance; + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue; + return false; + } + }); + } else { + this.each(function() { + var instance = $(this).data( name ); + if ( instance ) { + // instance.option( options || {} )._init(); // Orig jquery.ui.widget.js code: Not recommend for jPlayer. ie., Applying new options to an existing instance (via the jPlayer constructor) and performing the _init(). The _init() is what concerns me. It would leave a lot of event handlers acting on jPlayer instance and the interface. + instance.option( options || {} ); // The new constructor only changes the options. Changing options only has basic support atm. + } else { + $(this).data( name, new $.jPlayer( options, this ) ); + } + }); + } + + return returnValue; + }; + + $.jPlayer = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this.element = $(element); + this.options = $.extend(true, {}, + this.options, + options + ); + var self = this; + this.element.bind( "remove.jPlayer", function() { + self.destroy(); + }); + this._init(); + } + }; + // End of: (Adapted from jquery.ui.widget.js (1.8.7)) + + // Zepto is missing one of the animation methods. + if(typeof $.fn.stop !== 'function') { + $.fn.stop = function() {}; + } + + // Emulated HTML5 methods and properties + $.jPlayer.emulateMethods = "load play pause"; + $.jPlayer.emulateStatus = "src readyState networkState currentTime duration paused ended playbackRate"; + $.jPlayer.emulateOptions = "muted volume"; + + // Reserved event names generated by jPlayer that are not part of the HTML5 Media element spec + $.jPlayer.reservedEvent = "ready flashreset resize repeat error warning"; + + // Events generated by jPlayer + $.jPlayer.event = {}; + $.each( + [ + 'ready', + 'setmedia', // Fires when the media is set + 'flashreset', // Similar to the ready event if the Flash solution is set to display:none and then shown again or if it's reloaded for another reason by the browser. For example, using CSS position:fixed on Firefox for the full screen feature. + 'resize', // Occurs when the size changes through a full/restore screen operation or if the size/sizeFull options are changed. + 'repeat', // Occurs when the repeat status changes. Usually through clicks on the repeat button of the interface. + 'click', // Occurs when the user clicks on one of the following: poster image, html video, flash video. + 'error', // Event error code in event.jPlayer.error.type. See $.jPlayer.error + 'warning', // Event warning code in event.jPlayer.warning.type. See $.jPlayer.warning + + // Other events match HTML5 spec. + 'loadstart', + 'progress', + 'suspend', + 'abort', + 'emptied', + 'stalled', + 'play', + 'pause', + 'loadedmetadata', + 'loadeddata', + 'waiting', + 'playing', + 'canplay', + 'canplaythrough', + 'seeking', + 'seeked', + 'timeupdate', + 'ended', + 'ratechange', + 'durationchange', + 'volumechange' + ], + function() { + $.jPlayer.event[ this ] = 'jPlayer_' + this; + } + ); + + $.jPlayer.htmlEvent = [ // These HTML events are bubbled through to the jPlayer event, without any internal action. + "loadstart", + // "progress", // jPlayer uses internally before bubbling. + // "suspend", // jPlayer uses internally before bubbling. + "abort", + // "error", // jPlayer uses internally before bubbling. + "emptied", + "stalled", + // "play", // jPlayer uses internally before bubbling. + // "pause", // jPlayer uses internally before bubbling. + "loadedmetadata", + // "loadeddata", // jPlayer uses internally before bubbling. + // "waiting", // jPlayer uses internally before bubbling. + // "playing", // jPlayer uses internally before bubbling. + "canplay", + "canplaythrough" + // "seeking", // jPlayer uses internally before bubbling. + // "seeked", // jPlayer uses internally before bubbling. + // "timeupdate", // jPlayer uses internally before bubbling. + // "ended", // jPlayer uses internally before bubbling. + // "ratechange" // jPlayer uses internally before bubbling. + // "durationchange" // jPlayer uses internally before bubbling. + // "volumechange" // jPlayer uses internally before bubbling. + ]; + + $.jPlayer.pause = function() { + $.jPlayer.prototype.destroyRemoved(); + $.each($.jPlayer.prototype.instances, function(i, element) { + if(element.data("jPlayer").status.srcSet) { // Check that media is set otherwise would cause error event. + element.jPlayer("pause"); + } + }); + }; + + // Default for jPlayer option.timeFormat + $.jPlayer.timeFormat = { + showHour: false, + showMin: true, + showSec: true, + padHour: false, + padMin: true, + padSec: true, + sepHour: ":", + sepMin: ":", + sepSec: "" + }; + var ConvertTime = function() { + this.init(); + }; + ConvertTime.prototype = { + init: function() { + this.options = { + timeFormat: $.jPlayer.timeFormat + }; + }, + time: function(s) { // function used on jPlayer.prototype._convertTime to enable per instance options. + s = (s && typeof s === 'number') ? s : 0; + + var myTime = new Date(s * 1000), + hour = myTime.getUTCHours(), + min = this.options.timeFormat.showHour ? myTime.getUTCMinutes() : myTime.getUTCMinutes() + hour * 60, + sec = this.options.timeFormat.showMin ? myTime.getUTCSeconds() : myTime.getUTCSeconds() + min * 60, + strHour = (this.options.timeFormat.padHour && hour < 10) ? "0" + hour : hour, + strMin = (this.options.timeFormat.padMin && min < 10) ? "0" + min : min, + strSec = (this.options.timeFormat.padSec && sec < 10) ? "0" + sec : sec, + strTime = ""; + + strTime += this.options.timeFormat.showHour ? strHour + this.options.timeFormat.sepHour : ""; + strTime += this.options.timeFormat.showMin ? strMin + this.options.timeFormat.sepMin : ""; + strTime += this.options.timeFormat.showSec ? strSec + this.options.timeFormat.sepSec : ""; + + return strTime; + } + }; + var myConvertTime = new ConvertTime(); + $.jPlayer.convertTime = function(s) { + return myConvertTime.time(s); + }; + + // Adapting jQuery 1.4.4 code for jQuery.browser. Required since jQuery 1.3.2 does not detect Chrome as webkit. + $.jPlayer.uaBrowser = function( userAgent ) { + var ua = userAgent.toLowerCase(); + + // Useragent RegExp + var rwebkit = /(webkit)[ \/]([\w.]+)/; + var ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/; + var rmsie = /(msie) ([\w.]+)/; + var rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/; + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }; + + // Platform sniffer for detecting mobile devices + $.jPlayer.uaPlatform = function( userAgent ) { + var ua = userAgent.toLowerCase(); + + // Useragent RegExp + var rplatform = /(ipad|iphone|ipod|android|blackberry|playbook|windows ce|webos)/; + var rtablet = /(ipad|playbook)/; + var randroid = /(android)/; + var rmobile = /(mobile)/; + + var platform = rplatform.exec( ua ) || []; + var tablet = rtablet.exec( ua ) || + !rmobile.exec( ua ) && randroid.exec( ua ) || + []; + + if(platform[1]) { + platform[1] = platform[1].replace(/\s/g, "_"); // Change whitespace to underscore. Enables dot notation. + } + + return { platform: platform[1] || "", tablet: tablet[1] || "" }; + }; + + $.jPlayer.browser = { + }; + $.jPlayer.platform = { + }; + + var browserMatch = $.jPlayer.uaBrowser(navigator.userAgent); + if ( browserMatch.browser ) { + $.jPlayer.browser[ browserMatch.browser ] = true; + $.jPlayer.browser.version = browserMatch.version; + } + var platformMatch = $.jPlayer.uaPlatform(navigator.userAgent); + if ( platformMatch.platform ) { + $.jPlayer.platform[ platformMatch.platform ] = true; + $.jPlayer.platform.mobile = !platformMatch.tablet; + $.jPlayer.platform.tablet = !!platformMatch.tablet; + } + + // Internet Explorer (IE) Browser Document Mode Sniffer. Based on code at: + // http://msdn.microsoft.com/en-us/library/cc288325%28v=vs.85%29.aspx#GetMode + $.jPlayer.getDocMode = function() { + var docMode; + if ($.jPlayer.browser.msie) { + if (document.documentMode) { // IE8 or later + docMode = document.documentMode; + } else { // IE 5-7 + docMode = 5; // Assume quirks mode unless proven otherwise + if (document.compatMode) { + if (document.compatMode === "CSS1Compat") { + docMode = 7; // standards mode + } + } + } + } + return docMode; + }; + $.jPlayer.browser.documentMode = $.jPlayer.getDocMode(); + + $.jPlayer.nativeFeatures = { + init: function() { + + /* Fullscreen function naming influenced by W3C naming. + * No support for: Mozilla Proposal: https://wiki.mozilla.org/Gecko:FullScreenAPI + */ + + var d = document, + v = d.createElement('video'), + spec = { + // http://www.w3.org/TR/fullscreen/ + w3c: [ + 'fullscreenEnabled', + 'fullscreenElement', + 'requestFullscreen', + 'exitFullscreen', + 'fullscreenchange', + 'fullscreenerror' + ], + // https://developer.mozilla.org/en-US/docs/DOM/Using_fullscreen_mode + moz: [ + 'mozFullScreenEnabled', + 'mozFullScreenElement', + 'mozRequestFullScreen', + 'mozCancelFullScreen', + 'mozfullscreenchange', + 'mozfullscreenerror' + ], + // http://developer.apple.com/library/safari/#documentation/WebKit/Reference/ElementClassRef/Element/Element.html + // http://developer.apple.com/library/safari/#documentation/UserExperience/Reference/DocumentAdditionsReference/DocumentAdditions/DocumentAdditions.html + webkit: [ + '', + 'webkitCurrentFullScreenElement', + 'webkitRequestFullScreen', + 'webkitCancelFullScreen', + 'webkitfullscreenchange', + '' + ], + // http://developer.apple.com/library/safari/#documentation/AudioVideo/Reference/HTMLVideoElementClassReference/HTMLVideoElement/HTMLVideoElement.html + // https://developer.apple.com/library/safari/samplecode/HTML5VideoEventFlow/Listings/events_js.html#//apple_ref/doc/uid/DTS40010085-events_js-DontLinkElementID_5 + // Events: 'webkitbeginfullscreen' and 'webkitendfullscreen' + webkitVideo: [ + 'webkitSupportsFullscreen', + 'webkitDisplayingFullscreen', + 'webkitEnterFullscreen', + 'webkitExitFullscreen', + '', + '' + ], + ms: [ + '', + 'msFullscreenElement', + 'msRequestFullscreen', + 'msExitFullscreen', + 'MSFullscreenChange', + 'MSFullscreenError' + ] + }, + specOrder = [ + 'w3c', + 'moz', + 'webkit', + 'webkitVideo', + 'ms' + ], + fs, i, il; + + this.fullscreen = fs = { + support: { + w3c: !!d[spec.w3c[0]], + moz: !!d[spec.moz[0]], + webkit: typeof d[spec.webkit[3]] === 'function', + webkitVideo: typeof v[spec.webkitVideo[2]] === 'function', + ms: typeof v[spec.ms[2]] === 'function' + }, + used: {} + }; + + // Store the name of the spec being used and as a handy boolean. + for(i = 0, il = specOrder.length; i < il; i++) { + var n = specOrder[i]; + if(fs.support[n]) { + fs.spec = n; + fs.used[n] = true; + break; + } + } + + if(fs.spec) { + var s = spec[fs.spec]; + fs.api = { + fullscreenEnabled: true, + fullscreenElement: function(elem) { + elem = elem ? elem : d; // Video element required for webkitVideo + return elem[s[1]]; + }, + requestFullscreen: function(elem) { + return elem[s[2]](); // Chrome and Opera want parameter (Element.ALLOW_KEYBOARD_INPUT) but Safari fails if flag used. + }, + exitFullscreen: function(elem) { + elem = elem ? elem : d; // Video element required for webkitVideo + return elem[s[3]](); + } + }; + fs.event = { + fullscreenchange: s[4], + fullscreenerror: s[5] + }; + } else { + fs.api = { + fullscreenEnabled: false, + fullscreenElement: function() { + return null; + }, + requestFullscreen: function() {}, + exitFullscreen: function() {} + }; + fs.event = {}; + } + } + }; + $.jPlayer.nativeFeatures.init(); + + // The keyboard control system. + + // The current jPlayer instance in focus. + $.jPlayer.focus = null; + + // The list of element node names to ignore with key controls. + $.jPlayer.keyIgnoreElementNames = "A INPUT TEXTAREA SELECT BUTTON"; + + // The function that deals with key presses. + var keyBindings = function(event) { + var f = $.jPlayer.focus, + ignoreKey; + + // A jPlayer instance must be in focus. ie., keyEnabled and the last one played. + if(f) { + // What generated the key press? + $.each( $.jPlayer.keyIgnoreElementNames.split(/\s+/g), function(i, name) { + // The strings should already be uppercase. + if(event.target.nodeName.toUpperCase() === name.toUpperCase()) { + ignoreKey = true; + return false; // exit each. + } + }); + if(!ignoreKey) { + // See if the key pressed matches any of the bindings. + $.each(f.options.keyBindings, function(action, binding) { + // The binding could be a null when the default has been disabled. ie., 1st clause in if() + if( + (binding && $.isFunction(binding.fn)) && + ((typeof binding.key === 'number' && event.which === binding.key) || + (typeof binding.key === 'string' && event.key === binding.key)) + ) { + event.preventDefault(); // Key being used by jPlayer, so prevent default operation. + binding.fn(f); + return false; // exit each. + } + }); + } + } + }; + + $.jPlayer.keys = function(en) { + var event = "keydown.jPlayer"; + // Remove any binding, just in case enabled more than once. + $(document.documentElement).unbind(event); + if(en) { + $(document.documentElement).bind(event, keyBindings); + } + }; + + // Enable the global key control handler ready for any jPlayer instance with the keyEnabled option enabled. + $.jPlayer.keys(true); + + $.jPlayer.prototype = { + count: 0, // Static Variable: Change it via prototype. + version: { // Static Object + script: "2.9.2", + needFlash: "2.9.0", + flash: "unknown" + }, + options: { // Instanced in $.jPlayer() constructor + swfPath: "js", // Path to jquery.jplayer.swf. Can be relative, absolute or server root relative. + solution: "html, flash", // Valid solutions: html, flash, aurora. Order defines priority. 1st is highest, + supplied: "mp3", // Defines which formats jPlayer will try and support and the priority by the order. 1st is highest, + auroraFormats: "wav", // List the aurora.js codecs being loaded externally. Its core supports "wav". Specify format in jPlayer context. EG., The aac.js codec gives the "m4a" format. + preload: 'metadata', // HTML5 Spec values: none, metadata, auto. + volume: 0.8, // The volume. Number 0 to 1. + muted: false, + remainingDuration: false, // When true, the remaining time is shown in the duration GUI element. + toggleDuration: false, // When true, clicks on the duration toggle between the duration and remaining display. + captureDuration: true, // When true, clicks on the duration are captured and no longer propagate up the DOM. + playbackRate: 1, + defaultPlaybackRate: 1, + minPlaybackRate: 0.5, + maxPlaybackRate: 4, + wmode: "opaque", // Valid wmode: window, transparent, opaque, direct, gpu. + backgroundColor: "#000000", // To define the jPlayer div and Flash background color. + cssSelectorAncestor: "#jp_container_1", + cssSelector: { // * denotes properties that should only be required when video media type required. _cssSelector() would require changes to enable splitting these into Audio and Video defaults. + videoPlay: ".jp-video-play", // * + play: ".jp-play", + pause: ".jp-pause", + stop: ".jp-stop", + seekBar: ".jp-seek-bar", + playBar: ".jp-play-bar", + mute: ".jp-mute", + unmute: ".jp-unmute", + volumeBar: ".jp-volume-bar", + volumeBarValue: ".jp-volume-bar-value", + volumeMax: ".jp-volume-max", + playbackRateBar: ".jp-playback-rate-bar", + playbackRateBarValue: ".jp-playback-rate-bar-value", + currentTime: ".jp-current-time", + duration: ".jp-duration", + title: ".jp-title", + fullScreen: ".jp-full-screen", // * + restoreScreen: ".jp-restore-screen", // * + repeat: ".jp-repeat", + repeatOff: ".jp-repeat-off", + gui: ".jp-gui", // The interface used with autohide feature. + noSolution: ".jp-no-solution" // For error feedback when jPlayer cannot find a solution. + }, + stateClass: { // Classes added to the cssSelectorAncestor to indicate the state. + playing: "jp-state-playing", + seeking: "jp-state-seeking", + muted: "jp-state-muted", + looped: "jp-state-looped", + fullScreen: "jp-state-full-screen", + noVolume: "jp-state-no-volume" + }, + useStateClassSkin: false, // A state class skin relies on the state classes to change the visual appearance. The single control toggles the effect, for example: play then pause, mute then unmute. + autoBlur: true, // GUI control handlers will drop focus after clicks. + smoothPlayBar: false, // Smooths the play bar transitions, which affects clicks and short media with big changes per second. + fullScreen: false, // Native Full Screen + fullWindow: false, + autohide: { + restored: false, // Controls the interface autohide feature. + full: true, // Controls the interface autohide feature. + fadeIn: 200, // Milliseconds. The period of the fadeIn anim. + fadeOut: 600, // Milliseconds. The period of the fadeOut anim. + hold: 1000 // Milliseconds. The period of the pause before autohide beings. + }, + loop: false, + repeat: function(event) { // The default jPlayer repeat event handler + if(event.jPlayer.options.loop) { + $(this).unbind(".jPlayerRepeat").bind($.jPlayer.event.ended + ".jPlayer.jPlayerRepeat", function() { + $(this).jPlayer("play"); + }); + } else { + $(this).unbind(".jPlayerRepeat"); + } + }, + nativeVideoControls: { + // Works well on standard browsers. + // Phone and tablet browsers can have problems with the controls disappearing. + }, + noFullWindow: { + msie: /msie [0-6]\./, + ipad: /ipad.*?os [0-4]\./, + iphone: /iphone/, + ipod: /ipod/, + android_pad: /android [0-3]\.(?!.*?mobile)/, + android_phone: /(?=.*android)(?!.*chrome)(?=.*mobile)/, + blackberry: /blackberry/, + windows_ce: /windows ce/, + iemobile: /iemobile/, + webos: /webos/ + }, + noVolume: { + ipad: /ipad/, + iphone: /iphone/, + ipod: /ipod/, + android_pad: /android(?!.*?mobile)/, + android_phone: /android.*?mobile/, + blackberry: /blackberry/, + windows_ce: /windows ce/, + iemobile: /iemobile/, + webos: /webos/, + playbook: /playbook/ + }, + timeFormat: { + // Specific time format for this instance. The supported options are defined in $.jPlayer.timeFormat + // For the undefined options we use the default from $.jPlayer.timeFormat + }, + keyEnabled: false, // Enables keyboard controls. + audioFullScreen: false, // Enables keyboard controls to enter full screen with audio media. + keyBindings: { // The key control object, defining the key codes and the functions to execute. + // The parameter, f = $.jPlayer.focus, will be checked truethy before attempting to call any of these functions. + // Properties may be added to this object, in key/fn pairs, to enable other key controls. EG, for the playlist add-on. + play: { + key: 80, // p + fn: function(f) { + if(f.status.paused) { + f.play(); + } else { + f.pause(); + } + } + }, + fullScreen: { + key: 70, // f + fn: function(f) { + if(f.status.video || f.options.audioFullScreen) { + f._setOption("fullScreen", !f.options.fullScreen); + } + } + }, + muted: { + key: 77, // m + fn: function(f) { + f._muted(!f.options.muted); + } + }, + volumeUp: { + key: 190, // . + fn: function(f) { + f.volume(f.options.volume + 0.1); + } + }, + volumeDown: { + key: 188, // , + fn: function(f) { + f.volume(f.options.volume - 0.1); + } + }, + loop: { + key: 76, // l + fn: function(f) { + f._loop(!f.options.loop); + } + } + }, + verticalVolume: false, // Calculate volume from the bottom of the volume bar. Default is from the left. Also volume affects either width or height. + verticalPlaybackRate: false, + globalVolume: false, // Set to make volume and muted changes affect all jPlayer instances with this option enabled + idPrefix: "jp", // Prefix for the ids of html elements created by jPlayer. For flash, this must not include characters: . - + * / \ + noConflict: "jQuery", + emulateHtml: false, // Emulates the HTML5 Media element on the jPlayer element. + consoleAlerts: true, // Alerts are sent to the console.log() instead of alert(). + errorAlerts: false, + warningAlerts: false + }, + optionsAudio: { + size: { + width: "0px", + height: "0px", + cssClass: "" + }, + sizeFull: { + width: "0px", + height: "0px", + cssClass: "" + } + }, + optionsVideo: { + size: { + width: "480px", + height: "270px", + cssClass: "jp-video-270p" + }, + sizeFull: { + width: "100%", + height: "100%", + cssClass: "jp-video-full" + } + }, + instances: {}, // Static Object + status: { // Instanced in _init() + src: "", + media: {}, + paused: true, + format: {}, + formatType: "", + waitForPlay: true, // Same as waitForLoad except in case where preloading. + waitForLoad: true, + srcSet: false, + video: false, // True if playing a video + seekPercent: 0, + currentPercentRelative: 0, + currentPercentAbsolute: 0, + currentTime: 0, + duration: 0, + remaining: 0, + videoWidth: 0, // Intrinsic width of the video in pixels. + videoHeight: 0, // Intrinsic height of the video in pixels. + readyState: 0, + networkState: 0, + playbackRate: 1, // Warning - Now both an option and a status property + ended: 0 + +/* Persistant status properties created dynamically at _init(): + width + height + cssClass + nativeVideoControls + noFullWindow + noVolume + playbackRateEnabled // Warning - Technically, we can have both Flash and HTML, so this might not be correct if the Flash is active. That is a niche case. +*/ + }, + + internal: { // Instanced in _init() + ready: false + // instance: undefined + // domNode: undefined + // htmlDlyCmdId: undefined + // autohideId: undefined + // mouse: undefined + // cmdsIgnored + }, + solution: { // Static Object: Defines the solutions built in jPlayer. + html: true, + aurora: true, + flash: true + }, + // 'MPEG-4 support' : canPlayType('video/mp4; codecs="mp4v.20.8"') + format: { // Static Object + mp3: { + codec: 'audio/mpeg', + flashCanPlay: true, + media: 'audio' + }, + m4a: { // AAC / MP4 + codec: 'audio/mp4; codecs="mp4a.40.2"', + flashCanPlay: true, + media: 'audio' + }, + m3u8a: { // AAC / MP4 / Apple HLS + codec: 'application/vnd.apple.mpegurl; codecs="mp4a.40.2"', + flashCanPlay: false, + media: 'audio' + }, + m3ua: { // M3U + codec: 'audio/mpegurl', + flashCanPlay: false, + media: 'audio' + }, + oga: { // OGG + codec: 'audio/ogg; codecs="vorbis, opus"', + flashCanPlay: false, + media: 'audio' + }, + flac: { // FLAC + codec: 'audio/x-flac', + flashCanPlay: false, + media: 'audio' + }, + wav: { // PCM + codec: 'audio/wav; codecs="1"', + flashCanPlay: false, + media: 'audio' + }, + webma: { // WEBM + codec: 'audio/webm; codecs="vorbis"', + flashCanPlay: false, + media: 'audio' + }, + fla: { // FLV / F4A + codec: 'audio/x-flv', + flashCanPlay: true, + media: 'audio' + }, + rtmpa: { // RTMP AUDIO + codec: 'audio/rtmp; codecs="rtmp"', + flashCanPlay: true, + media: 'audio' + }, + m4v: { // H.264 / MP4 + codec: 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"', + flashCanPlay: true, + media: 'video' + }, + m3u8v: { // H.264 / AAC / MP4 / Apple HLS + codec: 'application/vnd.apple.mpegurl; codecs="avc1.42E01E, mp4a.40.2"', + flashCanPlay: false, + media: 'video' + }, + m3uv: { // M3U + codec: 'audio/mpegurl', + flashCanPlay: false, + media: 'video' + }, + ogv: { // OGG + codec: 'video/ogg; codecs="theora, vorbis"', + flashCanPlay: false, + media: 'video' + }, + webmv: { // WEBM + codec: 'video/webm; codecs="vorbis, vp8"', + flashCanPlay: false, + media: 'video' + }, + flv: { // FLV / F4V + codec: 'video/x-flv', + flashCanPlay: true, + media: 'video' + }, + rtmpv: { // RTMP VIDEO + codec: 'video/rtmp; codecs="rtmp"', + flashCanPlay: true, + media: 'video' + } + }, + _init: function() { + var self = this; + + this.element.empty(); + + this.status = $.extend({}, this.status); // Copy static to unique instance. + this.internal = $.extend({}, this.internal); // Copy static to unique instance. + + // Initialize the time format + this.options.timeFormat = $.extend({}, $.jPlayer.timeFormat, this.options.timeFormat); + + // On iOS, assume commands will be ignored before user initiates them. + this.internal.cmdsIgnored = $.jPlayer.platform.ipad || $.jPlayer.platform.iphone || $.jPlayer.platform.ipod; + + this.internal.domNode = this.element.get(0); + + // Add key bindings focus to 1st jPlayer instanced with key control enabled. + if(this.options.keyEnabled && !$.jPlayer.focus) { + $.jPlayer.focus = this; + } + + // A fix for Android where older (2.3) and even some 4.x devices fail to work when changing the *audio* SRC and then playing immediately. + this.androidFix = { + setMedia: false, // True when media set + play: false, // True when a progress event will instruct the media to play + pause: false, // True when a progress event will instruct the media to pause at a time. + time: NaN // The play(time) parameter + }; + if($.jPlayer.platform.android) { + this.options.preload = this.options.preload !== 'auto' ? 'metadata' : 'auto'; // Default to metadata, but allow auto. + } + + this.formats = []; // Array based on supplied string option. Order defines priority. + this.solutions = []; // Array based on solution string option. Order defines priority. + this.require = {}; // Which media types are required: video, audio. + + this.htmlElement = {}; // DOM elements created by jPlayer + this.html = {}; // In _init()'s this.desired code and setmedia(): Accessed via this[solution], where solution from this.solutions array. + this.html.audio = {}; + this.html.video = {}; + this.aurora = {}; // In _init()'s this.desired code and setmedia(): Accessed via this[solution], where solution from this.solutions array. + this.aurora.formats = []; + this.aurora.properties = []; + this.flash = {}; // In _init()'s this.desired code and setmedia(): Accessed via this[solution], where solution from this.solutions array. + + this.css = {}; + this.css.cs = {}; // Holds the css selector strings + this.css.jq = {}; // Holds jQuery selectors. ie., $(css.cs.method) + + this.ancestorJq = []; // Holds jQuery selector of cssSelectorAncestor. Init would use $() instead of [], but it is only 1.4+ + + this.options.volume = this._limitValue(this.options.volume, 0, 1); // Limit volume value's bounds. + + // Create the formats array, with prority based on the order of the supplied formats string + $.each(this.options.supplied.toLowerCase().split(","), function(index1, value1) { + var format = value1.replace(/^\s+|\s+$/g, ""); //trim + if(self.format[format]) { // Check format is valid. + var dupFound = false; + $.each(self.formats, function(index2, value2) { // Check for duplicates + if(format === value2) { + dupFound = true; + return false; + } + }); + if(!dupFound) { + self.formats.push(format); + } + } + }); + + // Create the solutions array, with prority based on the order of the solution string + $.each(this.options.solution.toLowerCase().split(","), function(index1, value1) { + var solution = value1.replace(/^\s+|\s+$/g, ""); //trim + if(self.solution[solution]) { // Check solution is valid. + var dupFound = false; + $.each(self.solutions, function(index2, value2) { // Check for duplicates + if(solution === value2) { + dupFound = true; + return false; + } + }); + if(!dupFound) { + self.solutions.push(solution); + } + } + }); + + // Create Aurora.js formats array + $.each(this.options.auroraFormats.toLowerCase().split(","), function(index1, value1) { + var format = value1.replace(/^\s+|\s+$/g, ""); //trim + if(self.format[format]) { // Check format is valid. + var dupFound = false; + $.each(self.aurora.formats, function(index2, value2) { // Check for duplicates + if(format === value2) { + dupFound = true; + return false; + } + }); + if(!dupFound) { + self.aurora.formats.push(format); + } + } + }); + + this.internal.instance = "jp_" + this.count; + this.instances[this.internal.instance] = this.element; + + // Check the jPlayer div has an id and create one if required. Important for Flash to know the unique id for comms. + if(!this.element.attr("id")) { + this.element.attr("id", this.options.idPrefix + "_jplayer_" + this.count); + } + + this.internal.self = $.extend({}, { + id: this.element.attr("id"), + jq: this.element + }); + this.internal.audio = $.extend({}, { + id: this.options.idPrefix + "_audio_" + this.count, + jq: undefined + }); + this.internal.video = $.extend({}, { + id: this.options.idPrefix + "_video_" + this.count, + jq: undefined + }); + this.internal.flash = $.extend({}, { + id: this.options.idPrefix + "_flash_" + this.count, + jq: undefined, + swf: this.options.swfPath + (this.options.swfPath.toLowerCase().slice(-4) !== ".swf" ? (this.options.swfPath && this.options.swfPath.slice(-1) !== "/" ? "/" : "") + "jquery.jplayer.swf" : "") + }); + this.internal.poster = $.extend({}, { + id: this.options.idPrefix + "_poster_" + this.count, + jq: undefined + }); + + // Register listeners defined in the constructor + $.each($.jPlayer.event, function(eventName,eventType) { + if(self.options[eventName] !== undefined) { + self.element.bind(eventType + ".jPlayer", self.options[eventName]); // With .jPlayer namespace. + self.options[eventName] = undefined; // Destroy the handler pointer copy on the options. Reason, events can be added/removed in other ways so this could be obsolete and misleading. + } + }); + + // Determine if we require solutions for audio, video or both media types. + this.require.audio = false; + this.require.video = false; + $.each(this.formats, function(priority, format) { + self.require[self.format[format].media] = true; + }); + + // Now required types are known, finish the options default settings. + if(this.require.video) { + this.options = $.extend(true, {}, + this.optionsVideo, + this.options + ); + } else { + this.options = $.extend(true, {}, + this.optionsAudio, + this.options + ); + } + this._setSize(); // update status and jPlayer element size + + // Determine the status for Blocklisted options. + this.status.nativeVideoControls = this._uaBlocklist(this.options.nativeVideoControls); + this.status.noFullWindow = this._uaBlocklist(this.options.noFullWindow); + this.status.noVolume = this._uaBlocklist(this.options.noVolume); + + // Create event handlers if native fullscreen is supported + if($.jPlayer.nativeFeatures.fullscreen.api.fullscreenEnabled) { + this._fullscreenAddEventListeners(); + } + + // The native controls are only for video and are disabled when audio is also used. + this._restrictNativeVideoControls(); + + // Create the poster image. + this.htmlElement.poster = document.createElement('img'); + this.htmlElement.poster.id = this.internal.poster.id; + this.htmlElement.poster.onload = function() { // Note that this did not work on Firefox 3.6: poster.addEventListener("onload", function() {}, false); Did not investigate x-browser. + if(!self.status.video || self.status.waitForPlay) { + self.internal.poster.jq.show(); + } + }; + this.element.append(this.htmlElement.poster); + this.internal.poster.jq = $("#" + this.internal.poster.id); + this.internal.poster.jq.css({'width': this.status.width, 'height': this.status.height}); + this.internal.poster.jq.hide(); + this.internal.poster.jq.bind("click.jPlayer", function() { + self._trigger($.jPlayer.event.click); + }); + + // Generate the required media elements + this.html.audio.available = false; + if(this.require.audio) { // If a supplied format is audio + this.htmlElement.audio = document.createElement('audio'); + this.htmlElement.audio.id = this.internal.audio.id; + this.html.audio.available = !!this.htmlElement.audio.canPlayType && this._testCanPlayType(this.htmlElement.audio); // Test is for IE9 on Win Server 2008. + } + this.html.video.available = false; + if(this.require.video) { // If a supplied format is video + this.htmlElement.video = document.createElement('video'); + this.htmlElement.video.id = this.internal.video.id; + this.html.video.available = !!this.htmlElement.video.canPlayType && this._testCanPlayType(this.htmlElement.video); // Test is for IE9 on Win Server 2008. + } + + this.flash.available = this._checkForFlash(10.1); + + this.html.canPlay = {}; + this.aurora.canPlay = {}; + this.flash.canPlay = {}; + $.each(this.formats, function(priority, format) { + self.html.canPlay[format] = self.html[self.format[format].media].available && "" !== self.htmlElement[self.format[format].media].canPlayType(self.format[format].codec); + self.aurora.canPlay[format] = ($.inArray(format, self.aurora.formats) > -1); + self.flash.canPlay[format] = self.format[format].flashCanPlay && self.flash.available; + }); + this.html.desired = false; + this.aurora.desired = false; + this.flash.desired = false; + $.each(this.solutions, function(solutionPriority, solution) { + if(solutionPriority === 0) { + self[solution].desired = true; + } else { + var audioCanPlay = false; + var videoCanPlay = false; + $.each(self.formats, function(formatPriority, format) { + if(self[self.solutions[0]].canPlay[format]) { // The other solution can play + if(self.format[format].media === 'video') { + videoCanPlay = true; + } else { + audioCanPlay = true; + } + } + }); + self[solution].desired = (self.require.audio && !audioCanPlay) || (self.require.video && !videoCanPlay); + } + }); + // This is what jPlayer will support, based on solution and supplied. + this.html.support = {}; + this.aurora.support = {}; + this.flash.support = {}; + $.each(this.formats, function(priority, format) { + self.html.support[format] = self.html.canPlay[format] && self.html.desired; + self.aurora.support[format] = self.aurora.canPlay[format] && self.aurora.desired; + self.flash.support[format] = self.flash.canPlay[format] && self.flash.desired; + }); + // If jPlayer is supporting any format in a solution, then the solution is used. + this.html.used = false; + this.aurora.used = false; + this.flash.used = false; + $.each(this.solutions, function(solutionPriority, solution) { + $.each(self.formats, function(formatPriority, format) { + if(self[solution].support[format]) { + self[solution].used = true; + return false; + } + }); + }); + + // Init solution active state and the event gates to false. + this._resetActive(); + this._resetGate(); + + // Set up the css selectors for the control and feedback entities. + this._cssSelectorAncestor(this.options.cssSelectorAncestor); + + // If neither html nor aurora nor flash are being used by this browser, then media playback is not possible. Trigger an error event. + if(!(this.html.used || this.aurora.used || this.flash.used)) { + this._error( { + type: $.jPlayer.error.NO_SOLUTION, + context: "{solution:'" + this.options.solution + "', supplied:'" + this.options.supplied + "'}", + message: $.jPlayer.errorMsg.NO_SOLUTION, + hint: $.jPlayer.errorHint.NO_SOLUTION + }); + if(this.css.jq.noSolution.length) { + this.css.jq.noSolution.show(); + } + } else { + if(this.css.jq.noSolution.length) { + this.css.jq.noSolution.hide(); + } + } + + // Add the flash solution if it is being used. + if(this.flash.used) { + var htmlObj, + flashVars = 'jQuery=' + encodeURI(this.options.noConflict) + '&id=' + encodeURI(this.internal.self.id) + '&vol=' + this.options.volume + '&muted=' + this.options.muted; + + // Code influenced by SWFObject 2.2: http://code.google.com/p/swfobject/ + // Non IE browsers have an initial Flash size of 1 by 1 otherwise the wmode affected the Flash ready event. + + if($.jPlayer.browser.msie && (Number($.jPlayer.browser.version) < 9 || $.jPlayer.browser.documentMode < 9)) { + var objStr = ''; + + var paramStr = [ + '', + '', + '', + '', + '' + ]; + + htmlObj = document.createElement(objStr); + for(var i=0; i < paramStr.length; i++) { + htmlObj.appendChild(document.createElement(paramStr[i])); + } + } else { + var createParam = function(el, n, v) { + var p = document.createElement("param"); + p.setAttribute("name", n); + p.setAttribute("value", v); + el.appendChild(p); + }; + + htmlObj = document.createElement("object"); + htmlObj.setAttribute("id", this.internal.flash.id); + htmlObj.setAttribute("name", this.internal.flash.id); + htmlObj.setAttribute("data", this.internal.flash.swf); + htmlObj.setAttribute("type", "application/x-shockwave-flash"); + htmlObj.setAttribute("width", "1"); // Non-zero + htmlObj.setAttribute("height", "1"); // Non-zero + htmlObj.setAttribute("tabindex", "-1"); + createParam(htmlObj, "flashvars", flashVars); + createParam(htmlObj, "allowscriptaccess", "always"); + createParam(htmlObj, "bgcolor", this.options.backgroundColor); + createParam(htmlObj, "wmode", this.options.wmode); + } + + this.element.append(htmlObj); + this.internal.flash.jq = $(htmlObj); + } + + // Setup playbackRate ability before using _addHtmlEventListeners() + if(this.html.used && !this.flash.used) { // If only HTML + // Using the audio element capabilities for playbackRate. ie., Assuming video element is the same. + this.status.playbackRateEnabled = this._testPlaybackRate('audio'); + } else { + this.status.playbackRateEnabled = false; + } + + this._updatePlaybackRate(); + + // Add the HTML solution if being used. + if(this.html.used) { + + // The HTML Audio handlers + if(this.html.audio.available) { + this._addHtmlEventListeners(this.htmlElement.audio, this.html.audio); + this.element.append(this.htmlElement.audio); + this.internal.audio.jq = $("#" + this.internal.audio.id); + } + + // The HTML Video handlers + if(this.html.video.available) { + this._addHtmlEventListeners(this.htmlElement.video, this.html.video); + this.element.append(this.htmlElement.video); + this.internal.video.jq = $("#" + this.internal.video.id); + if(this.status.nativeVideoControls) { + this.internal.video.jq.css({'width': this.status.width, 'height': this.status.height}); + } else { + this.internal.video.jq.css({'width':'0px', 'height':'0px'}); // Using size 0x0 since a .hide() causes issues in iOS + } + this.internal.video.jq.bind("click.jPlayer", function() { + self._trigger($.jPlayer.event.click); + }); + } + } + + // Add the Aurora.js solution if being used. + if(this.aurora.used) { + // Aurora.js player need to be created for each media, see setMedia function. + } + + // Create the bridge that emulates the HTML Media element on the jPlayer DIV + if( this.options.emulateHtml ) { + this._emulateHtmlBridge(); + } + + if((this.html.used || this.aurora.used) && !this.flash.used) { // If only HTML, then emulate flash ready() call after 100ms. + setTimeout( function() { + self.internal.ready = true; + self.version.flash = "n/a"; + self._trigger($.jPlayer.event.repeat); // Trigger the repeat event so its handler can initialize itself with the loop option. + self._trigger($.jPlayer.event.ready); + }, 100); + } + + // Initialize the interface components with the options. + this._updateNativeVideoControls(); + // The other controls are now setup in _cssSelectorAncestor() + if(this.css.jq.videoPlay.length) { + this.css.jq.videoPlay.hide(); + } + + $.jPlayer.prototype.count++; // Change static variable via prototype. + }, + destroy: function() { + // MJP: The background change remains. Would need to store the original to restore it correctly. + // MJP: The jPlayer element's size change remains. + + // Clear the media to reset the GUI and stop any downloads. Streams on some browsers had persited. (Chrome) + this.clearMedia(); + // Remove the size/sizeFull cssClass from the cssSelectorAncestor + this._removeUiClass(); + // Remove the times from the GUI + if(this.css.jq.currentTime.length) { + this.css.jq.currentTime.text(""); + } + if(this.css.jq.duration.length) { + this.css.jq.duration.text(""); + } + // Remove any bindings from the interface controls. + $.each(this.css.jq, function(fn, jq) { + // Check selector is valid before trying to execute method. + if(jq.length) { + jq.unbind(".jPlayer"); + } + }); + // Remove the click handlers for $.jPlayer.event.click + this.internal.poster.jq.unbind(".jPlayer"); + if(this.internal.video.jq) { + this.internal.video.jq.unbind(".jPlayer"); + } + // Remove the fullscreen event handlers + this._fullscreenRemoveEventListeners(); + // Remove key bindings + if(this === $.jPlayer.focus) { + $.jPlayer.focus = null; + } + // Destroy the HTML bridge. + if(this.options.emulateHtml) { + this._destroyHtmlBridge(); + } + this.element.removeData("jPlayer"); // Remove jPlayer data + this.element.unbind(".jPlayer"); // Remove all event handlers created by the jPlayer constructor + this.element.empty(); // Remove the inserted child elements + + delete this.instances[this.internal.instance]; // Clear the instance on the static instance object + }, + destroyRemoved: function() { // Destroy any instances that have gone away. + var self = this; + $.each(this.instances, function(i, element) { + if(self.element !== element) { // Do not destroy this instance. + if(!element.data("jPlayer")) { // Check that element is a real jPlayer. + element.jPlayer("destroy"); + delete self.instances[i]; + } + } + }); + }, + enable: function() { // Plan to implement + // options.disabled = false + }, + disable: function () { // Plan to implement + // options.disabled = true + }, + _testCanPlayType: function(elem) { + // IE9 on Win Server 2008 did not implement canPlayType(), but it has the property. + try { + elem.canPlayType(this.format.mp3.codec); // The type is irrelevant. + return true; + } catch(err) { + return false; + } + }, + _testPlaybackRate: function(type) { + // type: String 'audio' or 'video' + var el, rate = 0.5; + type = typeof type === 'string' ? type : 'audio'; + el = document.createElement(type); + // Wrapping in a try/catch, just in case older HTML5 browsers throw and error. + try { + if('playbackRate' in el) { + el.playbackRate = rate; + return el.playbackRate === rate; + } else { + return false; + } + } catch(err) { + return false; + } + }, + _uaBlocklist: function(list) { + // list : object with properties that are all regular expressions. Property names are irrelevant. + // Returns true if the user agent is matched in list. + var ua = navigator.userAgent.toLowerCase(), + block = false; + + $.each(list, function(p, re) { + if(re && re.test(ua)) { + block = true; + return false; // exit $.each. + } + }); + return block; + }, + _restrictNativeVideoControls: function() { + // Fallback to noFullWindow when nativeVideoControls is true and audio media is being used. Affects when both media types are used. + if(this.require.audio) { + if(this.status.nativeVideoControls) { + this.status.nativeVideoControls = false; + this.status.noFullWindow = true; + } + } + }, + _updateNativeVideoControls: function() { + if(this.html.video.available && this.html.used) { + // Turn the HTML Video controls on/off + this.htmlElement.video.controls = this.status.nativeVideoControls; + // Show/hide the jPlayer GUI. + this._updateAutohide(); + // For when option changed. The poster image is not updated, as it is dealt with in setMedia(). Acceptable degradation since seriously doubt these options will change on the fly. Can again review later. + if(this.status.nativeVideoControls && this.require.video) { + this.internal.poster.jq.hide(); + this.internal.video.jq.css({'width': this.status.width, 'height': this.status.height}); + } else if(this.status.waitForPlay && this.status.video) { + this.internal.poster.jq.show(); + this.internal.video.jq.css({'width': '0px', 'height': '0px'}); + } + } + }, + _addHtmlEventListeners: function(mediaElement, entity) { + var self = this; + mediaElement.preload = this.options.preload; + mediaElement.muted = this.options.muted; + mediaElement.volume = this.options.volume; + + if(this.status.playbackRateEnabled) { + mediaElement.defaultPlaybackRate = this.options.defaultPlaybackRate; + mediaElement.playbackRate = this.options.playbackRate; + } + + // Create the event listeners + // Only want the active entity to affect jPlayer and bubble events. + // Using entity.gate so that object is referenced and gate property always current + + mediaElement.addEventListener("progress", function() { + if(entity.gate) { + if(self.internal.cmdsIgnored && this.readyState > 0) { // Detect iOS executed the command + self.internal.cmdsIgnored = false; + } + self._getHtmlStatus(mediaElement); + self._updateInterface(); + self._trigger($.jPlayer.event.progress); + } + }, false); + mediaElement.addEventListener("loadeddata", function() { + if(entity.gate) { + self.androidFix.setMedia = false; // Disable the fix after the first progress event. + if(self.androidFix.play) { // Play Android audio - performing the fix. + self.androidFix.play = false; + self.play(self.androidFix.time); + } + if(self.androidFix.pause) { // Pause Android audio at time - performing the fix. + self.androidFix.pause = false; + self.pause(self.androidFix.time); + } + self._trigger($.jPlayer.event.loadeddata); + } + }, false); + mediaElement.addEventListener("timeupdate", function() { + if(entity.gate) { + self._getHtmlStatus(mediaElement); + self._updateInterface(); + self._trigger($.jPlayer.event.timeupdate); + } + }, false); + mediaElement.addEventListener("durationchange", function() { + if(entity.gate) { + self._getHtmlStatus(mediaElement); + self._updateInterface(); + self._trigger($.jPlayer.event.durationchange); + } + }, false); + mediaElement.addEventListener("play", function() { + if(entity.gate) { + self._updateButtons(true); + self._html_checkWaitForPlay(); // So the native controls update this variable and puts the hidden interface in the correct state. Affects toggling native controls. + self._trigger($.jPlayer.event.play); + } + }, false); + mediaElement.addEventListener("playing", function() { + if(entity.gate) { + self._updateButtons(true); + self._seeked(); + self._trigger($.jPlayer.event.playing); + } + }, false); + mediaElement.addEventListener("pause", function() { + if(entity.gate) { + self._updateButtons(false); + self._trigger($.jPlayer.event.pause); + } + }, false); + mediaElement.addEventListener("waiting", function() { + if(entity.gate) { + self._seeking(); + self._trigger($.jPlayer.event.waiting); + } + }, false); + mediaElement.addEventListener("seeking", function() { + if(entity.gate) { + self._seeking(); + self._trigger($.jPlayer.event.seeking); + } + }, false); + mediaElement.addEventListener("seeked", function() { + if(entity.gate) { + self._seeked(); + self._trigger($.jPlayer.event.seeked); + } + }, false); + mediaElement.addEventListener("volumechange", function() { + if(entity.gate) { + // Read the values back from the element as the Blackberry PlayBook shares the volume with the physical buttons master volume control. + // However, when tested 6th July 2011, those buttons do not generate an event. The physical play/pause button does though. + self.options.volume = mediaElement.volume; + self.options.muted = mediaElement.muted; + self._updateMute(); + self._updateVolume(); + self._trigger($.jPlayer.event.volumechange); + } + }, false); + mediaElement.addEventListener("ratechange", function() { + if(entity.gate) { + self.options.defaultPlaybackRate = mediaElement.defaultPlaybackRate; + self.options.playbackRate = mediaElement.playbackRate; + self._updatePlaybackRate(); + self._trigger($.jPlayer.event.ratechange); + } + }, false); + mediaElement.addEventListener("suspend", function() { // Seems to be the only way of capturing that the iOS4 browser did not actually play the media from the page code. ie., It needs a user gesture. + if(entity.gate) { + self._seeked(); + self._trigger($.jPlayer.event.suspend); + } + }, false); + mediaElement.addEventListener("ended", function() { + if(entity.gate) { + // Order of the next few commands are important. Change the time and then pause. + // Solves a bug in Firefox, where issuing pause 1st causes the media to play from the start. ie., The pause is ignored. + if(!$.jPlayer.browser.webkit) { // Chrome crashes if you do this in conjunction with a setMedia command in an ended event handler. ie., The playlist demo. + self.htmlElement.media.currentTime = 0; // Safari does not care about this command. ie., It works with or without this line. (Both Safari and Chrome are Webkit.) + } + self.htmlElement.media.pause(); // Pause otherwise a click on the progress bar will play from that point, when it shouldn't, since it stopped playback. + self._updateButtons(false); + self._getHtmlStatus(mediaElement, true); // With override true. Otherwise Chrome leaves progress at full. + self._updateInterface(); + self._trigger($.jPlayer.event.ended); + } + }, false); + mediaElement.addEventListener("error", function() { + if(entity.gate) { + self._updateButtons(false); + self._seeked(); + if(self.status.srcSet) { // Deals with case of clearMedia() causing an error event. + clearTimeout(self.internal.htmlDlyCmdId); // Clears any delayed commands used in the HTML solution. + self.status.waitForLoad = true; // Allows the load operation to try again. + self.status.waitForPlay = true; // Reset since a play was captured. + if(self.status.video && !self.status.nativeVideoControls) { + self.internal.video.jq.css({'width':'0px', 'height':'0px'}); + } + if(self._validString(self.status.media.poster) && !self.status.nativeVideoControls) { + self.internal.poster.jq.show(); + } + if(self.css.jq.videoPlay.length) { + self.css.jq.videoPlay.show(); + } + self._error( { + type: $.jPlayer.error.URL, + context: self.status.src, // this.src shows absolute urls. Want context to show the url given. + message: $.jPlayer.errorMsg.URL, + hint: $.jPlayer.errorHint.URL + }); + } + } + }, false); + // Create all the other event listeners that bubble up to a jPlayer event from html, without being used by jPlayer. + $.each($.jPlayer.htmlEvent, function(i, eventType) { + mediaElement.addEventListener(this, function() { + if(entity.gate) { + self._trigger($.jPlayer.event[eventType]); + } + }, false); + }); + }, + _addAuroraEventListeners : function(player, entity) { + var self = this; + //player.preload = this.options.preload; + //player.muted = this.options.muted; + player.volume = this.options.volume * 100; + + // Create the event listeners + // Only want the active entity to affect jPlayer and bubble events. + // Using entity.gate so that object is referenced and gate property always current + + player.on("progress", function() { + if(entity.gate) { + if(self.internal.cmdsIgnored && this.readyState > 0) { // Detect iOS executed the command + self.internal.cmdsIgnored = false; + } + self._getAuroraStatus(player); + self._updateInterface(); + self._trigger($.jPlayer.event.progress); + // Progress with song duration, we estimate timeupdate need to be triggered too. + if (player.duration > 0) { + self._trigger($.jPlayer.event.timeupdate); + } + } + }, false); + player.on("ready", function() { + if(entity.gate) { + self._trigger($.jPlayer.event.loadeddata); + } + }, false); + player.on("duration", function() { + if(entity.gate) { + self._getAuroraStatus(player); + self._updateInterface(); + self._trigger($.jPlayer.event.durationchange); + } + }, false); + player.on("end", function() { + if(entity.gate) { + // Order of the next few commands are important. Change the time and then pause. + self._updateButtons(false); + self._getAuroraStatus(player, true); + self._updateInterface(); + self._trigger($.jPlayer.event.ended); + } + }, false); + player.on("error", function() { + if(entity.gate) { + self._updateButtons(false); + self._seeked(); + if(self.status.srcSet) { // Deals with case of clearMedia() causing an error event. + self.status.waitForLoad = true; // Allows the load operation to try again. + self.status.waitForPlay = true; // Reset since a play was captured. + if(self.status.video && !self.status.nativeVideoControls) { + self.internal.video.jq.css({'width':'0px', 'height':'0px'}); + } + if(self._validString(self.status.media.poster) && !self.status.nativeVideoControls) { + self.internal.poster.jq.show(); + } + if(self.css.jq.videoPlay.length) { + self.css.jq.videoPlay.show(); + } + self._error( { + type: $.jPlayer.error.URL, + context: self.status.src, // this.src shows absolute urls. Want context to show the url given. + message: $.jPlayer.errorMsg.URL, + hint: $.jPlayer.errorHint.URL + }); + } + } + }, false); + }, + _getHtmlStatus: function(media, override) { + var ct = 0, cpa = 0, sp = 0, cpr = 0; + + // Fixes the duration bug in iOS, where the durationchange event occurs when media.duration is not always correct. + // Fixes the initial duration bug in BB OS7, where the media.duration is infinity and displays as NaN:NaN due to Date() using inifity. + if(isFinite(media.duration)) { + this.status.duration = media.duration; + } + + ct = media.currentTime; + cpa = (this.status.duration > 0) ? 100 * ct / this.status.duration : 0; + if((typeof media.seekable === "object") && (media.seekable.length > 0)) { + sp = (this.status.duration > 0) ? 100 * media.seekable.end(media.seekable.length-1) / this.status.duration : 100; + cpr = (this.status.duration > 0) ? 100 * media.currentTime / media.seekable.end(media.seekable.length-1) : 0; // Duration conditional for iOS duration bug. ie., seekable.end is a NaN in that case. + } else { + sp = 100; + cpr = cpa; + } + + if(override) { + ct = 0; + cpr = 0; + cpa = 0; + } + + this.status.seekPercent = sp; + this.status.currentPercentRelative = cpr; + this.status.currentPercentAbsolute = cpa; + this.status.currentTime = ct; + + this.status.remaining = this.status.duration - this.status.currentTime; + + this.status.videoWidth = media.videoWidth; + this.status.videoHeight = media.videoHeight; + + this.status.readyState = media.readyState; + this.status.networkState = media.networkState; + this.status.playbackRate = media.playbackRate; + this.status.ended = media.ended; + }, + _getAuroraStatus: function(player, override) { + var ct = 0, cpa = 0, sp = 0, cpr = 0; + + this.status.duration = player.duration / 1000; + + ct = player.currentTime / 1000; + cpa = (this.status.duration > 0) ? 100 * ct / this.status.duration : 0; + if(player.buffered > 0) { + sp = (this.status.duration > 0) ? (player.buffered * this.status.duration) / this.status.duration : 100; + cpr = (this.status.duration > 0) ? ct / (player.buffered * this.status.duration) : 0; + } else { + sp = 100; + cpr = cpa; + } + + if(override) { + ct = 0; + cpr = 0; + cpa = 0; + } + + this.status.seekPercent = sp; + this.status.currentPercentRelative = cpr; + this.status.currentPercentAbsolute = cpa; + this.status.currentTime = ct; + + this.status.remaining = this.status.duration - this.status.currentTime; + + this.status.readyState = 4; // status.readyState; + this.status.networkState = 0; // status.networkState; + this.status.playbackRate = 1; // status.playbackRate; + this.status.ended = false; // status.ended; + }, + _resetStatus: function() { + this.status = $.extend({}, this.status, $.jPlayer.prototype.status); // Maintains the status properties that persist through a reset. + }, + _trigger: function(eventType, error, warning) { // eventType always valid as called using $.jPlayer.event.eventType + var event = $.Event(eventType); + event.jPlayer = {}; + event.jPlayer.version = $.extend({}, this.version); + event.jPlayer.options = $.extend(true, {}, this.options); // Deep copy + event.jPlayer.status = $.extend(true, {}, this.status); // Deep copy + event.jPlayer.html = $.extend(true, {}, this.html); // Deep copy + event.jPlayer.aurora = $.extend(true, {}, this.aurora); // Deep copy + event.jPlayer.flash = $.extend(true, {}, this.flash); // Deep copy + if(error) { + event.jPlayer.error = $.extend({}, error); + } + if(warning) { + event.jPlayer.warning = $.extend({}, warning); + } + this.element.trigger(event); + }, + jPlayerFlashEvent: function(eventType, status) { // Called from Flash + if(eventType === $.jPlayer.event.ready) { + if(!this.internal.ready) { + this.internal.ready = true; + this.internal.flash.jq.css({'width':'0px', 'height':'0px'}); // Once Flash generates the ready event, minimise to zero as it is not affected by wmode anymore. + + this.version.flash = status.version; + if(this.version.needFlash !== this.version.flash) { + this._error( { + type: $.jPlayer.error.VERSION, + context: this.version.flash, + message: $.jPlayer.errorMsg.VERSION + this.version.flash, + hint: $.jPlayer.errorHint.VERSION + }); + } + this._trigger($.jPlayer.event.repeat); // Trigger the repeat event so its handler can initialize itself with the loop option. + this._trigger(eventType); + } else { + // This condition occurs if the Flash is hidden and then shown again. + // Firefox also reloads the Flash if the CSS position changes. position:fixed is used for full screen. + + // Only do this if the Flash is the solution being used at the moment. Affects Media players where both solution may be being used. + if(this.flash.gate) { + + // Send the current status to the Flash now that it is ready (available) again. + if(this.status.srcSet) { + + // Need to read original status before issuing the setMedia command. + var currentTime = this.status.currentTime, + paused = this.status.paused; + + this.setMedia(this.status.media); + this.volumeWorker(this.options.volume); + if(currentTime > 0) { + if(paused) { + this.pause(currentTime); + } else { + this.play(currentTime); + } + } + } + this._trigger($.jPlayer.event.flashreset); + } + } + } + if(this.flash.gate) { + switch(eventType) { + case $.jPlayer.event.progress: + this._getFlashStatus(status); + this._updateInterface(); + this._trigger(eventType); + break; + case $.jPlayer.event.timeupdate: + this._getFlashStatus(status); + this._updateInterface(); + this._trigger(eventType); + break; + case $.jPlayer.event.play: + this._seeked(); + this._updateButtons(true); + this._trigger(eventType); + break; + case $.jPlayer.event.pause: + this._updateButtons(false); + this._trigger(eventType); + break; + case $.jPlayer.event.ended: + this._updateButtons(false); + this._trigger(eventType); + break; + case $.jPlayer.event.click: + this._trigger(eventType); // This could be dealt with by the default + break; + case $.jPlayer.event.error: + this.status.waitForLoad = true; // Allows the load operation to try again. + this.status.waitForPlay = true; // Reset since a play was captured. + if(this.status.video) { + this.internal.flash.jq.css({'width':'0px', 'height':'0px'}); + } + if(this._validString(this.status.media.poster)) { + this.internal.poster.jq.show(); + } + if(this.css.jq.videoPlay.length && this.status.video) { + this.css.jq.videoPlay.show(); + } + if(this.status.video) { // Set up for another try. Execute before error event. + this._flash_setVideo(this.status.media); + } else { + this._flash_setAudio(this.status.media); + } + this._updateButtons(false); + this._error( { + type: $.jPlayer.error.URL, + context:status.src, + message: $.jPlayer.errorMsg.URL, + hint: $.jPlayer.errorHint.URL + }); + break; + case $.jPlayer.event.seeking: + this._seeking(); + this._trigger(eventType); + break; + case $.jPlayer.event.seeked: + this._seeked(); + this._trigger(eventType); + break; + case $.jPlayer.event.ready: + // The ready event is handled outside the switch statement. + // Captured here otherwise 2 ready events would be generated if the ready event handler used setMedia. + break; + default: + this._trigger(eventType); + } + } + return false; + }, + _getFlashStatus: function(status) { + this.status.seekPercent = status.seekPercent; + this.status.currentPercentRelative = status.currentPercentRelative; + this.status.currentPercentAbsolute = status.currentPercentAbsolute; + this.status.currentTime = status.currentTime; + this.status.duration = status.duration; + this.status.remaining = status.duration - status.currentTime; + + this.status.videoWidth = status.videoWidth; + this.status.videoHeight = status.videoHeight; + + // The Flash does not generate this information in this release + this.status.readyState = 4; // status.readyState; + this.status.networkState = 0; // status.networkState; + this.status.playbackRate = 1; // status.playbackRate; + this.status.ended = false; // status.ended; + }, + _updateButtons: function(playing) { + if(playing === undefined) { + playing = !this.status.paused; + } else { + this.status.paused = !playing; + } + // Apply the state classes. (For the useStateClassSkin:true option) + if(playing) { + this.addStateClass('playing'); + } else { + this.removeStateClass('playing'); + } + if(!this.status.noFullWindow && this.options.fullWindow) { + this.addStateClass('fullScreen'); + } else { + this.removeStateClass('fullScreen'); + } + if(this.options.loop) { + this.addStateClass('looped'); + } else { + this.removeStateClass('looped'); + } + // Toggle the GUI element pairs. (For the useStateClassSkin:false option) + if(this.css.jq.play.length && this.css.jq.pause.length) { + if(playing) { + this.css.jq.play.hide(); + this.css.jq.pause.show(); + } else { + this.css.jq.play.show(); + this.css.jq.pause.hide(); + } + } + if(this.css.jq.restoreScreen.length && this.css.jq.fullScreen.length) { + if(this.status.noFullWindow) { + this.css.jq.fullScreen.hide(); + this.css.jq.restoreScreen.hide(); + } else if(this.options.fullWindow) { + this.css.jq.fullScreen.hide(); + this.css.jq.restoreScreen.show(); + } else { + this.css.jq.fullScreen.show(); + this.css.jq.restoreScreen.hide(); + } + } + if(this.css.jq.repeat.length && this.css.jq.repeatOff.length) { + if(this.options.loop) { + this.css.jq.repeat.hide(); + this.css.jq.repeatOff.show(); + } else { + this.css.jq.repeat.show(); + this.css.jq.repeatOff.hide(); + } + } + }, + _updateInterface: function() { + if(this.css.jq.seekBar.length) { + this.css.jq.seekBar.width(this.status.seekPercent+"%"); + } + if(this.css.jq.playBar.length) { + if(this.options.smoothPlayBar) { + this.css.jq.playBar.stop().animate({ + width: this.status.currentPercentAbsolute+"%" + }, 250, "linear"); + } else { + this.css.jq.playBar.width(this.status.currentPercentRelative+"%"); + } + } + var currentTimeText = ''; + if(this.css.jq.currentTime.length) { + currentTimeText = this._convertTime(this.status.currentTime); + if(currentTimeText !== this.css.jq.currentTime.text()) { + this.css.jq.currentTime.text(this._convertTime(this.status.currentTime)); + } + } + var durationText = '', + duration = this.status.duration, + remaining = this.status.remaining; + if(this.css.jq.duration.length) { + if(typeof this.status.media.duration === 'string') { + durationText = this.status.media.duration; + } else { + if(typeof this.status.media.duration === 'number') { + duration = this.status.media.duration; + remaining = duration - this.status.currentTime; + } + if(this.options.remainingDuration) { + durationText = (remaining > 0 ? '-' : '') + this._convertTime(remaining); + } else { + durationText = this._convertTime(duration); + } + } + if(durationText !== this.css.jq.duration.text()) { + this.css.jq.duration.text(durationText); + } + } + }, + _convertTime: ConvertTime.prototype.time, + _seeking: function() { + if(this.css.jq.seekBar.length) { + this.css.jq.seekBar.addClass("jp-seeking-bg"); + } + this.addStateClass('seeking'); + }, + _seeked: function() { + if(this.css.jq.seekBar.length) { + this.css.jq.seekBar.removeClass("jp-seeking-bg"); + } + this.removeStateClass('seeking'); + }, + _resetGate: function() { + this.html.audio.gate = false; + this.html.video.gate = false; + this.aurora.gate = false; + this.flash.gate = false; + }, + _resetActive: function() { + this.html.active = false; + this.aurora.active = false; + this.flash.active = false; + }, + _escapeHtml: function(s) { + return s.split('&').join('&').split('<').join('<').split('>').join('>').split('"').join('"'); + }, + _qualifyURL: function(url) { + var el = document.createElement('div'); + el.innerHTML= 'x'; + return el.firstChild.href; + }, + _absoluteMediaUrls: function(media) { + var self = this; + $.each(media, function(type, url) { + if(url && self.format[type] && url.substr(0, 5) !== "data:") { + media[type] = self._qualifyURL(url); + } + }); + return media; + }, + addStateClass: function(state) { + if(this.ancestorJq.length) { + this.ancestorJq.addClass(this.options.stateClass[state]); + } + }, + removeStateClass: function(state) { + if(this.ancestorJq.length) { + this.ancestorJq.removeClass(this.options.stateClass[state]); + } + }, + setMedia: function(media) { + + /* media[format] = String: URL of format. Must contain all of the supplied option's video or audio formats. + * media.poster = String: Video poster URL. + * media.track = Array: Of objects defining the track element: kind, src, srclang, label, def. + * media.stream = Boolean: * NOT IMPLEMENTED * Designating actual media streams. ie., "false/undefined" for files. Plan to refresh the flash every so often. + */ + + var self = this, + supported = false, + posterChanged = this.status.media.poster !== media.poster; // Compare before reset. Important for OSX Safari as this.htmlElement.poster.src is absolute, even if original poster URL was relative. + + this._resetMedia(); + this._resetGate(); + this._resetActive(); + + // Clear the Android Fix. + this.androidFix.setMedia = false; + this.androidFix.play = false; + this.androidFix.pause = false; + + // Convert all media URLs to absolute URLs. + media = this._absoluteMediaUrls(media); + + $.each(this.formats, function(formatPriority, format) { + var isVideo = self.format[format].media === 'video'; + $.each(self.solutions, function(solutionPriority, solution) { + if(self[solution].support[format] && self._validString(media[format])) { // Format supported in solution and url given for format. + var isHtml = solution === 'html'; + var isAurora = solution === 'aurora'; + + if(isVideo) { + if(isHtml) { + self.html.video.gate = true; + self._html_setVideo(media); + self.html.active = true; + } else { + self.flash.gate = true; + self._flash_setVideo(media); + self.flash.active = true; + } + if(self.css.jq.videoPlay.length) { + self.css.jq.videoPlay.show(); + } + self.status.video = true; + } else { + if(isHtml) { + self.html.audio.gate = true; + self._html_setAudio(media); + self.html.active = true; + + // Setup the Android Fix - Only for HTML audio. + if($.jPlayer.platform.android) { + self.androidFix.setMedia = true; + } + } else if(isAurora) { + self.aurora.gate = true; + self._aurora_setAudio(media); + self.aurora.active = true; + } else { + self.flash.gate = true; + self._flash_setAudio(media); + self.flash.active = true; + } + if(self.css.jq.videoPlay.length) { + self.css.jq.videoPlay.hide(); + } + self.status.video = false; + } + + supported = true; + return false; // Exit $.each + } + }); + if(supported) { + return false; // Exit $.each + } + }); + + if(supported) { + if(!(this.status.nativeVideoControls && this.html.video.gate)) { + // Set poster IMG if native video controls are not being used + // Note: With IE the IMG onload event occurs immediately when cached. + // Note: Poster hidden by default in _resetMedia() + if(this._validString(media.poster)) { + if(posterChanged) { // Since some browsers do not generate img onload event. + this.htmlElement.poster.src = media.poster; + } else { + this.internal.poster.jq.show(); + } + } + } + if(typeof media.title === 'string') { + if(this.css.jq.title.length) { + this.css.jq.title.html(media.title); + } + if(this.htmlElement.audio) { + this.htmlElement.audio.setAttribute('title', media.title); + } + if(this.htmlElement.video) { + this.htmlElement.video.setAttribute('title', media.title); + } + } + this.status.srcSet = true; + this.status.media = $.extend({}, media); + this._updateButtons(false); + this._updateInterface(); + this._trigger($.jPlayer.event.setmedia); + } else { // jPlayer cannot support any formats provided in this browser + // Send an error event + this._error( { + type: $.jPlayer.error.NO_SUPPORT, + context: "{supplied:'" + this.options.supplied + "'}", + message: $.jPlayer.errorMsg.NO_SUPPORT, + hint: $.jPlayer.errorHint.NO_SUPPORT + }); + } + }, + _resetMedia: function() { + this._resetStatus(); + this._updateButtons(false); + this._updateInterface(); + this._seeked(); + this.internal.poster.jq.hide(); + + clearTimeout(this.internal.htmlDlyCmdId); + + if(this.html.active) { + this._html_resetMedia(); + } else if(this.aurora.active) { + this._aurora_resetMedia(); + } else if(this.flash.active) { + this._flash_resetMedia(); + } + }, + clearMedia: function() { + this._resetMedia(); + + if(this.html.active) { + this._html_clearMedia(); + } else if(this.aurora.active) { + this._aurora_clearMedia(); + } else if(this.flash.active) { + this._flash_clearMedia(); + } + + this._resetGate(); + this._resetActive(); + }, + load: function() { + if(this.status.srcSet) { + if(this.html.active) { + this._html_load(); + } else if(this.aurora.active) { + this._aurora_load(); + } else if(this.flash.active) { + this._flash_load(); + } + } else { + this._urlNotSetError("load"); + } + }, + focus: function() { + if(this.options.keyEnabled) { + $.jPlayer.focus = this; + } + }, + play: function(time) { + var guiAction = typeof time === "object"; // Flags GUI click events so we know this was not a direct command, but an action taken by the user on the GUI. + if(guiAction && this.options.useStateClassSkin && !this.status.paused) { + this.pause(time); // The time would be the click event, but passing it over so info is not lost. + } else { + time = (typeof time === "number") ? time : NaN; // Remove jQuery event from click handler + if(this.status.srcSet) { + this.focus(); + if(this.html.active) { + this._html_play(time); + } else if(this.aurora.active) { + this._aurora_play(time); + } else if(this.flash.active) { + this._flash_play(time); + } + } else { + this._urlNotSetError("play"); + } + } + }, + videoPlay: function() { // Handles clicks on the play button over the video poster + this.play(); + }, + pause: function(time) { + time = (typeof time === "number") ? time : NaN; // Remove jQuery event from click handler + if(this.status.srcSet) { + if(this.html.active) { + this._html_pause(time); + } else if(this.aurora.active) { + this._aurora_pause(time); + } else if(this.flash.active) { + this._flash_pause(time); + } + } else { + this._urlNotSetError("pause"); + } + }, + tellOthers: function(command, conditions) { + var self = this, + hasConditions = typeof conditions === 'function', + args = Array.prototype.slice.call(arguments); // Convert arguments to an Array. + + if(typeof command !== 'string') { // Ignore, since no command. + return; // Return undefined to maintain chaining. + } + if(hasConditions) { + args.splice(1, 1); // Remove the conditions from the arguments + } + + $.jPlayer.prototype.destroyRemoved(); + $.each(this.instances, function() { + // Remember that "this" is the instance's "element" in the $.each() loop. + if(self.element !== this) { // Do not tell my instance. + if(!hasConditions || conditions.call(this.data("jPlayer"), self)) { + this.jPlayer.apply(this, args); + } + } + }); + }, + pauseOthers: function(time) { + this.tellOthers("pause", function() { + // In the conditions function, the "this" context is the other instance's jPlayer object. + return this.status.srcSet; + }, time); + }, + stop: function() { + if(this.status.srcSet) { + if(this.html.active) { + this._html_pause(0); + } else if(this.aurora.active) { + this._aurora_pause(0); + } else if(this.flash.active) { + this._flash_pause(0); + } + } else { + this._urlNotSetError("stop"); + } + }, + playHead: function(p) { + p = this._limitValue(p, 0, 100); + if(this.status.srcSet) { + if(this.html.active) { + this._html_playHead(p); + } else if(this.aurora.active) { + this._aurora_playHead(p); + } else if(this.flash.active) { + this._flash_playHead(p); + } + } else { + this._urlNotSetError("playHead"); + } + }, + _muted: function(muted) { + this.mutedWorker(muted); + if(this.options.globalVolume) { + this.tellOthers("mutedWorker", function() { + // Check the other instance has global volume enabled. + return this.options.globalVolume; + }, muted); + } + }, + mutedWorker: function(muted) { + this.options.muted = muted; + if(this.html.used) { + this._html_setProperty('muted', muted); + } + if(this.aurora.used) { + this._aurora_mute(muted); + } + if(this.flash.used) { + this._flash_mute(muted); + } + + // The HTML solution generates this event from the media element itself. + if(!this.html.video.gate && !this.html.audio.gate) { + this._updateMute(muted); + this._updateVolume(this.options.volume); + this._trigger($.jPlayer.event.volumechange); + } + }, + mute: function(mute) { // mute is either: undefined (true), an event object (true) or a boolean (muted). + var guiAction = typeof mute === "object"; // Flags GUI click events so we know this was not a direct command, but an action taken by the user on the GUI. + if(guiAction && this.options.useStateClassSkin && this.options.muted) { + this._muted(false); + } else { + mute = mute === undefined ? true : !!mute; + this._muted(mute); + } + }, + unmute: function(unmute) { // unmute is either: undefined (true), an event object (true) or a boolean (!muted). + unmute = unmute === undefined ? true : !!unmute; + this._muted(!unmute); + }, + _updateMute: function(mute) { + if(mute === undefined) { + mute = this.options.muted; + } + if(mute) { + this.addStateClass('muted'); + } else { + this.removeStateClass('muted'); + } + if(this.css.jq.mute.length && this.css.jq.unmute.length) { + if(this.status.noVolume) { + this.css.jq.mute.hide(); + this.css.jq.unmute.hide(); + } else if(mute) { + this.css.jq.mute.hide(); + this.css.jq.unmute.show(); + } else { + this.css.jq.mute.show(); + this.css.jq.unmute.hide(); + } + } + }, + volume: function(v) { + this.volumeWorker(v); + if(this.options.globalVolume) { + this.tellOthers("volumeWorker", function() { + // Check the other instance has global volume enabled. + return this.options.globalVolume; + }, v); + } + }, + volumeWorker: function(v) { + v = this._limitValue(v, 0, 1); + this.options.volume = v; + + if(this.html.used) { + this._html_setProperty('volume', v); + } + if(this.aurora.used) { + this._aurora_volume(v); + } + if(this.flash.used) { + this._flash_volume(v); + } + + // The HTML solution generates this event from the media element itself. + if(!this.html.video.gate && !this.html.audio.gate) { + this._updateVolume(v); + this._trigger($.jPlayer.event.volumechange); + } + }, + volumeBar: function(e) { // Handles clicks on the volumeBar + if(this.css.jq.volumeBar.length) { + // Using $(e.currentTarget) to enable multiple volume bars + var $bar = $(e.currentTarget), + offset = $bar.offset(), + x = e.pageX - offset.left, + w = $bar.width(), + y = $bar.height() - e.pageY + offset.top, + h = $bar.height(); + if(this.options.verticalVolume) { + this.volume(y/h); + } else { + this.volume(x/w); + } + } + if(this.options.muted) { + this._muted(false); + } + }, + _updateVolume: function(v) { + if(v === undefined) { + v = this.options.volume; + } + v = this.options.muted ? 0 : v; + + if(this.status.noVolume) { + this.addStateClass('noVolume'); + if(this.css.jq.volumeBar.length) { + this.css.jq.volumeBar.hide(); + } + if(this.css.jq.volumeBarValue.length) { + this.css.jq.volumeBarValue.hide(); + } + if(this.css.jq.volumeMax.length) { + this.css.jq.volumeMax.hide(); + } + } else { + this.removeStateClass('noVolume'); + if(this.css.jq.volumeBar.length) { + this.css.jq.volumeBar.show(); + } + if(this.css.jq.volumeBarValue.length) { + this.css.jq.volumeBarValue.show(); + this.css.jq.volumeBarValue[this.options.verticalVolume ? "height" : "width"]((v*100)+"%"); + } + if(this.css.jq.volumeMax.length) { + this.css.jq.volumeMax.show(); + } + } + }, + volumeMax: function() { // Handles clicks on the volume max + this.volume(1); + if(this.options.muted) { + this._muted(false); + } + }, + _cssSelectorAncestor: function(ancestor) { + var self = this; + this.options.cssSelectorAncestor = ancestor; + this._removeUiClass(); + this.ancestorJq = ancestor ? $(ancestor) : []; // Would use $() instead of [], but it is only 1.4+ + if(ancestor && this.ancestorJq.length !== 1) { // So empty strings do not generate the warning. + this._warning( { + type: $.jPlayer.warning.CSS_SELECTOR_COUNT, + context: ancestor, + message: $.jPlayer.warningMsg.CSS_SELECTOR_COUNT + this.ancestorJq.length + " found for cssSelectorAncestor.", + hint: $.jPlayer.warningHint.CSS_SELECTOR_COUNT + }); + } + this._addUiClass(); + $.each(this.options.cssSelector, function(fn, cssSel) { + self._cssSelector(fn, cssSel); + }); + + // Set the GUI to the current state. + this._updateInterface(); + this._updateButtons(); + this._updateAutohide(); + this._updateVolume(); + this._updateMute(); + }, + _cssSelector: function(fn, cssSel) { + var self = this; + if(typeof cssSel === 'string') { + if($.jPlayer.prototype.options.cssSelector[fn]) { + if(this.css.jq[fn] && this.css.jq[fn].length) { + this.css.jq[fn].unbind(".jPlayer"); + } + this.options.cssSelector[fn] = cssSel; + this.css.cs[fn] = this.options.cssSelectorAncestor + " " + cssSel; + + if(cssSel) { // Checks for empty string + this.css.jq[fn] = $(this.css.cs[fn]); + } else { + this.css.jq[fn] = []; // To comply with the css.jq[fn].length check before its use. As of jQuery 1.4 could have used $() for an empty set. + } + + if(this.css.jq[fn].length && this[fn]) { + var handler = function(e) { + e.preventDefault(); + self[fn](e); + if(self.options.autoBlur) { + $(this).blur(); + } else { + $(this).focus(); // Force focus for ARIA. + } + }; + this.css.jq[fn].bind("click.jPlayer", handler); // Using jPlayer namespace + } + + if(cssSel && this.css.jq[fn].length !== 1) { // So empty strings do not generate the warning. ie., they just remove the old one. + this._warning( { + type: $.jPlayer.warning.CSS_SELECTOR_COUNT, + context: this.css.cs[fn], + message: $.jPlayer.warningMsg.CSS_SELECTOR_COUNT + this.css.jq[fn].length + " found for " + fn + " method.", + hint: $.jPlayer.warningHint.CSS_SELECTOR_COUNT + }); + } + } else { + this._warning( { + type: $.jPlayer.warning.CSS_SELECTOR_METHOD, + context: fn, + message: $.jPlayer.warningMsg.CSS_SELECTOR_METHOD, + hint: $.jPlayer.warningHint.CSS_SELECTOR_METHOD + }); + } + } else { + this._warning( { + type: $.jPlayer.warning.CSS_SELECTOR_STRING, + context: cssSel, + message: $.jPlayer.warningMsg.CSS_SELECTOR_STRING, + hint: $.jPlayer.warningHint.CSS_SELECTOR_STRING + }); + } + }, + duration: function(e) { + if(this.options.toggleDuration) { + if(this.options.captureDuration) { + e.stopPropagation(); + } + this._setOption("remainingDuration", !this.options.remainingDuration); + } + }, + seekBar: function(e) { // Handles clicks on the seekBar + if(this.css.jq.seekBar.length) { + // Using $(e.currentTarget) to enable multiple seek bars + var $bar = $(e.currentTarget), + offset = $bar.offset(), + x = e.pageX - offset.left, + w = $bar.width(), + p = 100 * x / w; + this.playHead(p); + } + }, + playbackRate: function(pbr) { + this._setOption("playbackRate", pbr); + }, + playbackRateBar: function(e) { // Handles clicks on the playbackRateBar + if(this.css.jq.playbackRateBar.length) { + // Using $(e.currentTarget) to enable multiple playbackRate bars + var $bar = $(e.currentTarget), + offset = $bar.offset(), + x = e.pageX - offset.left, + w = $bar.width(), + y = $bar.height() - e.pageY + offset.top, + h = $bar.height(), + ratio, pbr; + if(this.options.verticalPlaybackRate) { + ratio = y/h; + } else { + ratio = x/w; + } + pbr = ratio * (this.options.maxPlaybackRate - this.options.minPlaybackRate) + this.options.minPlaybackRate; + this.playbackRate(pbr); + } + }, + _updatePlaybackRate: function() { + var pbr = this.options.playbackRate, + ratio = (pbr - this.options.minPlaybackRate) / (this.options.maxPlaybackRate - this.options.minPlaybackRate); + if(this.status.playbackRateEnabled) { + if(this.css.jq.playbackRateBar.length) { + this.css.jq.playbackRateBar.show(); + } + if(this.css.jq.playbackRateBarValue.length) { + this.css.jq.playbackRateBarValue.show(); + this.css.jq.playbackRateBarValue[this.options.verticalPlaybackRate ? "height" : "width"]((ratio*100)+"%"); + } + } else { + if(this.css.jq.playbackRateBar.length) { + this.css.jq.playbackRateBar.hide(); + } + if(this.css.jq.playbackRateBarValue.length) { + this.css.jq.playbackRateBarValue.hide(); + } + } + }, + repeat: function(event) { // Handle clicks on the repeat button + var guiAction = typeof event === "object"; // Flags GUI click events so we know this was not a direct command, but an action taken by the user on the GUI. + if(guiAction && this.options.useStateClassSkin && this.options.loop) { + this._loop(false); + } else { + this._loop(true); + } + }, + repeatOff: function() { // Handle clicks on the repeatOff button + this._loop(false); + }, + _loop: function(loop) { + if(this.options.loop !== loop) { + this.options.loop = loop; + this._updateButtons(); + this._trigger($.jPlayer.event.repeat); + } + }, + + // Options code adapted from ui.widget.js (1.8.7). Made changes so the key can use dot notation. To match previous getData solution in jPlayer 1. + option: function(key, value) { + var options = key; + + // Enables use: options(). Returns a copy of options object + if ( arguments.length === 0 ) { + return $.extend( true, {}, this.options ); + } + + if(typeof key === "string") { + var keys = key.split("."); + + // Enables use: options("someOption") Returns a copy of the option. Supports dot notation. + if(value === undefined) { + + var opt = $.extend(true, {}, this.options); + for(var i = 0; i < keys.length; i++) { + if(opt[keys[i]] !== undefined) { + opt = opt[keys[i]]; + } else { + this._warning( { + type: $.jPlayer.warning.OPTION_KEY, + context: key, + message: $.jPlayer.warningMsg.OPTION_KEY, + hint: $.jPlayer.warningHint.OPTION_KEY + }); + return undefined; + } + } + return opt; + } + + // Enables use: options("someOptionObject", someObject}). Creates: {someOptionObject:someObject} + // Enables use: options("someOption", someValue). Creates: {someOption:someValue} + // Enables use: options("someOptionObject.someOption", someValue). Creates: {someOptionObject:{someOption:someValue}} + + options = {}; + var opts = options; + + for(var j = 0; j < keys.length; j++) { + if(j < keys.length - 1) { + opts[keys[j]] = {}; + opts = opts[keys[j]]; + } else { + opts[keys[j]] = value; + } + } + } + + // Otherwise enables use: options(optionObject). Uses original object (the key) + + this._setOptions(options); + + return this; + }, + _setOptions: function(options) { + var self = this; + $.each(options, function(key, value) { // This supports the 2 level depth that the options of jPlayer has. Would review if we ever need more depth. + self._setOption(key, value); + }); + + return this; + }, + _setOption: function(key, value) { + var self = this; + + // The ability to set options is limited at this time. + + switch(key) { + case "volume" : + this.volume(value); + break; + case "muted" : + this._muted(value); + break; + case "globalVolume" : + this.options[key] = value; + break; + case "cssSelectorAncestor" : + this._cssSelectorAncestor(value); // Set and refresh all associations for the new ancestor. + break; + case "cssSelector" : + $.each(value, function(fn, cssSel) { + self._cssSelector(fn, cssSel); // NB: The option is set inside this function, after further validity checks. + }); + break; + case "playbackRate" : + this.options[key] = value = this._limitValue(value, this.options.minPlaybackRate, this.options.maxPlaybackRate); + if(this.html.used) { + this._html_setProperty('playbackRate', value); + } + this._updatePlaybackRate(); + break; + case "defaultPlaybackRate" : + this.options[key] = value = this._limitValue(value, this.options.minPlaybackRate, this.options.maxPlaybackRate); + if(this.html.used) { + this._html_setProperty('defaultPlaybackRate', value); + } + this._updatePlaybackRate(); + break; + case "minPlaybackRate" : + this.options[key] = value = this._limitValue(value, 0.1, this.options.maxPlaybackRate - 0.1); + this._updatePlaybackRate(); + break; + case "maxPlaybackRate" : + this.options[key] = value = this._limitValue(value, this.options.minPlaybackRate + 0.1, 16); + this._updatePlaybackRate(); + break; + case "fullScreen" : + if(this.options[key] !== value) { // if changed + var wkv = $.jPlayer.nativeFeatures.fullscreen.used.webkitVideo; + if(!wkv || wkv && !this.status.waitForPlay) { + if(!wkv) { // No sensible way to unset option on these devices. + this.options[key] = value; + } + if(value) { + this._requestFullscreen(); + } else { + this._exitFullscreen(); + } + if(!wkv) { + this._setOption("fullWindow", value); + } + } + } + break; + case "fullWindow" : + if(this.options[key] !== value) { // if changed + this._removeUiClass(); + this.options[key] = value; + this._refreshSize(); + } + break; + case "size" : + if(!this.options.fullWindow && this.options[key].cssClass !== value.cssClass) { + this._removeUiClass(); + } + this.options[key] = $.extend({}, this.options[key], value); // store a merged copy of it, incase not all properties changed. + this._refreshSize(); + break; + case "sizeFull" : + if(this.options.fullWindow && this.options[key].cssClass !== value.cssClass) { + this._removeUiClass(); + } + this.options[key] = $.extend({}, this.options[key], value); // store a merged copy of it, incase not all properties changed. + this._refreshSize(); + break; + case "autohide" : + this.options[key] = $.extend({}, this.options[key], value); // store a merged copy of it, incase not all properties changed. + this._updateAutohide(); + break; + case "loop" : + this._loop(value); + break; + case "remainingDuration" : + this.options[key] = value; + this._updateInterface(); + break; + case "toggleDuration" : + this.options[key] = value; + break; + case "nativeVideoControls" : + this.options[key] = $.extend({}, this.options[key], value); // store a merged copy of it, incase not all properties changed. + this.status.nativeVideoControls = this._uaBlocklist(this.options.nativeVideoControls); + this._restrictNativeVideoControls(); + this._updateNativeVideoControls(); + break; + case "noFullWindow" : + this.options[key] = $.extend({}, this.options[key], value); // store a merged copy of it, incase not all properties changed. + this.status.nativeVideoControls = this._uaBlocklist(this.options.nativeVideoControls); // Need to check again as noFullWindow can depend on this flag and the restrict() can override it. + this.status.noFullWindow = this._uaBlocklist(this.options.noFullWindow); + this._restrictNativeVideoControls(); + this._updateButtons(); + break; + case "noVolume" : + this.options[key] = $.extend({}, this.options[key], value); // store a merged copy of it, incase not all properties changed. + this.status.noVolume = this._uaBlocklist(this.options.noVolume); + this._updateVolume(); + this._updateMute(); + break; + case "emulateHtml" : + if(this.options[key] !== value) { // To avoid multiple event handlers being created, if true already. + this.options[key] = value; + if(value) { + this._emulateHtmlBridge(); + } else { + this._destroyHtmlBridge(); + } + } + break; + case "timeFormat" : + this.options[key] = $.extend({}, this.options[key], value); // store a merged copy of it, incase not all properties changed. + break; + case "keyEnabled" : + this.options[key] = value; + if(!value && this === $.jPlayer.focus) { + $.jPlayer.focus = null; + } + break; + case "keyBindings" : + this.options[key] = $.extend(true, {}, this.options[key], value); // store a merged DEEP copy of it, incase not all properties changed. + break; + case "audioFullScreen" : + this.options[key] = value; + break; + case "autoBlur" : + this.options[key] = value; + break; + } + + return this; + }, + // End of: (Options code adapted from ui.widget.js) + + _refreshSize: function() { + this._setSize(); // update status and jPlayer element size + this._addUiClass(); // update the ui class + this._updateSize(); // update internal sizes + this._updateButtons(); + this._updateAutohide(); + this._trigger($.jPlayer.event.resize); + }, + _setSize: function() { + // Determine the current size from the options + if(this.options.fullWindow) { + this.status.width = this.options.sizeFull.width; + this.status.height = this.options.sizeFull.height; + this.status.cssClass = this.options.sizeFull.cssClass; + } else { + this.status.width = this.options.size.width; + this.status.height = this.options.size.height; + this.status.cssClass = this.options.size.cssClass; + } + + // Set the size of the jPlayer area. + this.element.css({'width': this.status.width, 'height': this.status.height}); + }, + _addUiClass: function() { + if(this.ancestorJq.length) { + this.ancestorJq.addClass(this.status.cssClass); + } + }, + _removeUiClass: function() { + if(this.ancestorJq.length) { + this.ancestorJq.removeClass(this.status.cssClass); + } + }, + _updateSize: function() { + // The poster uses show/hide so can simply resize it. + this.internal.poster.jq.css({'width': this.status.width, 'height': this.status.height}); + + // Video html or flash resized if necessary at this time, or if native video controls being used. + if(!this.status.waitForPlay && this.html.active && this.status.video || this.html.video.available && this.html.used && this.status.nativeVideoControls) { + this.internal.video.jq.css({'width': this.status.width, 'height': this.status.height}); + } + else if(!this.status.waitForPlay && this.flash.active && this.status.video) { + this.internal.flash.jq.css({'width': this.status.width, 'height': this.status.height}); + } + }, + _updateAutohide: function() { + var self = this, + event = "mousemove.jPlayer", + namespace = ".jPlayerAutohide", + eventType = event + namespace, + handler = function(event) { + var moved = false, + deltaX, deltaY; + if(typeof self.internal.mouse !== "undefined") { + //get the change from last position to this position + deltaX = self.internal.mouse.x - event.pageX; + deltaY = self.internal.mouse.y - event.pageY; + moved = (Math.floor(deltaX) > 0) || (Math.floor(deltaY)>0); + } else { + moved = true; + } + // store current position for next method execution + self.internal.mouse = { + x : event.pageX, + y : event.pageY + }; + // if mouse has been actually moved, do the gui fadeIn/fadeOut + if (moved) { + self.css.jq.gui.fadeIn(self.options.autohide.fadeIn, function() { + clearTimeout(self.internal.autohideId); + self.internal.autohideId = setTimeout( function() { + self.css.jq.gui.fadeOut(self.options.autohide.fadeOut); + }, self.options.autohide.hold); + }); + } + }; + + if(this.css.jq.gui.length) { + + // End animations first so that its callback is executed now. + // Otherwise an in progress fadeIn animation still has the callback to fadeOut again. + this.css.jq.gui.stop(true, true); + + // Removes the fadeOut operation from the fadeIn callback. + clearTimeout(this.internal.autohideId); + // undefine mouse + delete this.internal.mouse; + + this.element.unbind(namespace); + this.css.jq.gui.unbind(namespace); + + if(!this.status.nativeVideoControls) { + if(this.options.fullWindow && this.options.autohide.full || !this.options.fullWindow && this.options.autohide.restored) { + this.element.bind(eventType, handler); + this.css.jq.gui.bind(eventType, handler); + this.css.jq.gui.hide(); + } else { + this.css.jq.gui.show(); + } + } else { + this.css.jq.gui.hide(); + } + } + }, + fullScreen: function(event) { + var guiAction = typeof event === "object"; // Flags GUI click events so we know this was not a direct command, but an action taken by the user on the GUI. + if(guiAction && this.options.useStateClassSkin && this.options.fullScreen) { + this._setOption("fullScreen", false); + } else { + this._setOption("fullScreen", true); + } + }, + restoreScreen: function() { + this._setOption("fullScreen", false); + }, + _fullscreenAddEventListeners: function() { + var self = this, + fs = $.jPlayer.nativeFeatures.fullscreen; + + if(fs.api.fullscreenEnabled) { + if(fs.event.fullscreenchange) { + // Create the event handler function and store it for removal. + if(typeof this.internal.fullscreenchangeHandler !== 'function') { + this.internal.fullscreenchangeHandler = function() { + self._fullscreenchange(); + }; + } + document.addEventListener(fs.event.fullscreenchange, this.internal.fullscreenchangeHandler, false); + } + // No point creating handler for fullscreenerror. + // Either logic avoids fullscreen occurring (w3c/moz), or their is no event on the browser (webkit). + } + }, + _fullscreenRemoveEventListeners: function() { + var fs = $.jPlayer.nativeFeatures.fullscreen; + if(this.internal.fullscreenchangeHandler) { + document.removeEventListener(fs.event.fullscreenchange, this.internal.fullscreenchangeHandler, false); + } + }, + _fullscreenchange: function() { + // If nothing is fullscreen, then we cannot be in fullscreen mode. + if(this.options.fullScreen && !$.jPlayer.nativeFeatures.fullscreen.api.fullscreenElement()) { + this._setOption("fullScreen", false); + } + }, + _requestFullscreen: function() { + // Either the container or the jPlayer div + var e = this.ancestorJq.length ? this.ancestorJq[0] : this.element[0], + fs = $.jPlayer.nativeFeatures.fullscreen; + + // This method needs the video element. For iOS and Android. + if(fs.used.webkitVideo) { + e = this.htmlElement.video; + } + + if(fs.api.fullscreenEnabled) { + fs.api.requestFullscreen(e); + } + }, + _exitFullscreen: function() { + + var fs = $.jPlayer.nativeFeatures.fullscreen, + e; + + // This method needs the video element. For iOS and Android. + if(fs.used.webkitVideo) { + e = this.htmlElement.video; + } + + if(fs.api.fullscreenEnabled) { + fs.api.exitFullscreen(e); + } + }, + _html_initMedia: function(media) { + // Remove any existing track elements + var $media = $(this.htmlElement.media).empty(); + + // Create any track elements given with the media, as an Array of track Objects. + $.each(media.track || [], function(i,v) { + var track = document.createElement('track'); + track.setAttribute("kind", v.kind ? v.kind : ""); + track.setAttribute("src", v.src ? v.src : ""); + track.setAttribute("srclang", v.srclang ? v.srclang : ""); + track.setAttribute("label", v.label ? v.label : ""); + if(v.def) { + track.setAttribute("default", v.def); + } + $media.append(track); + }); + + this.htmlElement.media.src = this.status.src; + + if(this.options.preload !== 'none') { + this._html_load(); // See function for comments + } + this._trigger($.jPlayer.event.timeupdate); // The flash generates this event for its solution. + }, + _html_setFormat: function(media) { + var self = this; + // Always finds a format due to checks in setMedia() + $.each(this.formats, function(priority, format) { + if(self.html.support[format] && media[format]) { + self.status.src = media[format]; + self.status.format[format] = true; + self.status.formatType = format; + return false; + } + }); + }, + _html_setAudio: function(media) { + this._html_setFormat(media); + this.htmlElement.media = this.htmlElement.audio; + this._html_initMedia(media); + }, + _html_setVideo: function(media) { + this._html_setFormat(media); + if(this.status.nativeVideoControls) { + this.htmlElement.video.poster = this._validString(media.poster) ? media.poster : ""; + } + this.htmlElement.media = this.htmlElement.video; + this._html_initMedia(media); + }, + _html_resetMedia: function() { + if(this.htmlElement.media) { + if(this.htmlElement.media.id === this.internal.video.id && !this.status.nativeVideoControls) { + this.internal.video.jq.css({'width':'0px', 'height':'0px'}); + } + this.htmlElement.media.pause(); + } + }, + _html_clearMedia: function() { + if(this.htmlElement.media) { + this.htmlElement.media.src = "about:blank"; + // The following load() is only required for Firefox 3.6 (PowerMacs). + // Recent HTMl5 browsers only require the src change. Due to changes in W3C spec and load() effect. + this.htmlElement.media.load(); // Stops an old, "in progress" download from continuing the download. Triggers the loadstart, error and emptied events, due to the empty src. Also an abort event if a download was in progress. + } + }, + _html_load: function() { + // This function remains to allow the early HTML5 browsers to work, such as Firefox 3.6 + // A change in the W3C spec for the media.load() command means that this is no longer necessary. + // This command should be removed and actually causes minor undesirable effects on some browsers. Such as loading the whole file and not only the metadata. + if(this.status.waitForLoad) { + this.status.waitForLoad = false; + this.htmlElement.media.load(); + } + clearTimeout(this.internal.htmlDlyCmdId); + }, + _html_play: function(time) { + var self = this, + media = this.htmlElement.media; + + this.androidFix.pause = false; // Cancel the pause fix. + + this._html_load(); // Loads if required and clears any delayed commands. + + // Setup the Android Fix. + if(this.androidFix.setMedia) { + this.androidFix.play = true; + this.androidFix.time = time; + + } else if(!isNaN(time)) { + + // Attempt to play it, since iOS has been ignoring commands + if(this.internal.cmdsIgnored) { + media.play(); + } + + try { + // !media.seekable is for old HTML5 browsers, like Firefox 3.6. + // Checking seekable.length is important for iOS6 to work with setMedia().play(time) + if(!media.seekable || typeof media.seekable === "object" && media.seekable.length > 0) { + media.currentTime = time; + media.play(); + } else { + throw 1; + } + } catch(err) { + this.internal.htmlDlyCmdId = setTimeout(function() { + self.play(time); + }, 250); + return; // Cancel execution and wait for the delayed command. + } + } else { + media.play(); + } + this._html_checkWaitForPlay(); + }, + _html_pause: function(time) { + var self = this, + media = this.htmlElement.media; + + this.androidFix.play = false; // Cancel the play fix. + + if(time > 0) { // We do not want the stop() command, which does pause(0), causing a load operation. + this._html_load(); // Loads if required and clears any delayed commands. + } else { + clearTimeout(this.internal.htmlDlyCmdId); + } + + // Order of these commands is important for Safari (Win) and IE9. Pause then change currentTime. + media.pause(); + + // Setup the Android Fix. + if(this.androidFix.setMedia) { + this.androidFix.pause = true; + this.androidFix.time = time; + + } else if(!isNaN(time)) { + try { + if(!media.seekable || typeof media.seekable === "object" && media.seekable.length > 0) { + media.currentTime = time; + } else { + throw 1; + } + } catch(err) { + this.internal.htmlDlyCmdId = setTimeout(function() { + self.pause(time); + }, 250); + return; // Cancel execution and wait for the delayed command. + } + } + if(time > 0) { // Avoids a setMedia() followed by stop() or pause(0) hiding the video play button. + this._html_checkWaitForPlay(); + } + }, + _html_playHead: function(percent) { + var self = this, + media = this.htmlElement.media; + + this._html_load(); // Loads if required and clears any delayed commands. + + // This playHead() method needs a refactor to apply the android fix. + + try { + if(typeof media.seekable === "object" && media.seekable.length > 0) { + media.currentTime = percent * media.seekable.end(media.seekable.length-1) / 100; + } else if(media.duration > 0 && !isNaN(media.duration)) { + media.currentTime = percent * media.duration / 100; + } else { + throw "e"; + } + } catch(err) { + this.internal.htmlDlyCmdId = setTimeout(function() { + self.playHead(percent); + }, 250); + return; // Cancel execution and wait for the delayed command. + } + if(!this.status.waitForLoad) { + this._html_checkWaitForPlay(); + } + }, + _html_checkWaitForPlay: function() { + if(this.status.waitForPlay) { + this.status.waitForPlay = false; + if(this.css.jq.videoPlay.length) { + this.css.jq.videoPlay.hide(); + } + if(this.status.video) { + this.internal.poster.jq.hide(); + this.internal.video.jq.css({'width': this.status.width, 'height': this.status.height}); + } + } + }, + _html_setProperty: function(property, value) { + if(this.html.audio.available) { + this.htmlElement.audio[property] = value; + } + if(this.html.video.available) { + this.htmlElement.video[property] = value; + } + }, + _aurora_setAudio: function(media) { + var self = this; + + // Always finds a format due to checks in setMedia() + $.each(this.formats, function(priority, format) { + if(self.aurora.support[format] && media[format]) { + self.status.src = media[format]; + self.status.format[format] = true; + self.status.formatType = format; + + return false; + } + }); + + this.aurora.player = new AV.Player.fromURL(this.status.src); + this._addAuroraEventListeners(this.aurora.player, this.aurora); + + if(this.options.preload === 'auto') { + this._aurora_load(); + this.status.waitForLoad = false; + } + }, + _aurora_resetMedia: function() { + if (this.aurora.player) { + this.aurora.player.stop(); + } + }, + _aurora_clearMedia: function() { + // Nothing to clear. + }, + _aurora_load: function() { + if(this.status.waitForLoad) { + this.status.waitForLoad = false; + this.aurora.player.preload(); + } + }, + _aurora_play: function(time) { + if (!this.status.waitForLoad) { + if (!isNaN(time)) { + this.aurora.player.seek(time); + } + } + if (!this.aurora.player.playing) { + this.aurora.player.play(); + } + this.status.waitForLoad = false; + this._aurora_checkWaitForPlay(); + + // No event from the player, update UI now. + this._updateButtons(true); + this._trigger($.jPlayer.event.play); + }, + _aurora_pause: function(time) { + if (!isNaN(time)) { + this.aurora.player.seek(time * 1000); + } + this.aurora.player.pause(); + + if(time > 0) { // Avoids a setMedia() followed by stop() or pause(0) hiding the video play button. + this._aurora_checkWaitForPlay(); + } + + // No event from the player, update UI now. + this._updateButtons(false); + this._trigger($.jPlayer.event.pause); + }, + _aurora_playHead: function(percent) { + if(this.aurora.player.duration > 0) { + // The seek() sould be in milliseconds, but the only codec that works with seek (aac.js) uses seconds. + this.aurora.player.seek(percent * this.aurora.player.duration / 100); // Using seconds + } + + if(!this.status.waitForLoad) { + this._aurora_checkWaitForPlay(); + } + }, + _aurora_checkWaitForPlay: function() { + if(this.status.waitForPlay) { + this.status.waitForPlay = false; + } + }, + _aurora_volume: function(v) { + this.aurora.player.volume = v * 100; + }, + _aurora_mute: function(m) { + if (m) { + this.aurora.properties.lastvolume = this.aurora.player.volume; + this.aurora.player.volume = 0; + } else { + this.aurora.player.volume = this.aurora.properties.lastvolume; + } + this.aurora.properties.muted = m; + }, + _flash_setAudio: function(media) { + var self = this; + try { + // Always finds a format due to checks in setMedia() + $.each(this.formats, function(priority, format) { + if(self.flash.support[format] && media[format]) { + switch (format) { + case "m4a" : + case "fla" : + self._getMovie().fl_setAudio_m4a(media[format]); + break; + case "mp3" : + self._getMovie().fl_setAudio_mp3(media[format]); + break; + case "rtmpa": + self._getMovie().fl_setAudio_rtmp(media[format]); + break; + } + self.status.src = media[format]; + self.status.format[format] = true; + self.status.formatType = format; + return false; + } + }); + + if(this.options.preload === 'auto') { + this._flash_load(); + this.status.waitForLoad = false; + } + } catch(err) { this._flashError(err); } + }, + _flash_setVideo: function(media) { + var self = this; + try { + // Always finds a format due to checks in setMedia() + $.each(this.formats, function(priority, format) { + if(self.flash.support[format] && media[format]) { + switch (format) { + case "m4v" : + case "flv" : + self._getMovie().fl_setVideo_m4v(media[format]); + break; + case "rtmpv": + self._getMovie().fl_setVideo_rtmp(media[format]); + break; + } + self.status.src = media[format]; + self.status.format[format] = true; + self.status.formatType = format; + return false; + } + }); + + if(this.options.preload === 'auto') { + this._flash_load(); + this.status.waitForLoad = false; + } + } catch(err) { this._flashError(err); } + }, + _flash_resetMedia: function() { + this.internal.flash.jq.css({'width':'0px', 'height':'0px'}); // Must do via CSS as setting attr() to zero causes a jQuery error in IE. + this._flash_pause(NaN); + }, + _flash_clearMedia: function() { + try { + this._getMovie().fl_clearMedia(); + } catch(err) { this._flashError(err); } + }, + _flash_load: function() { + try { + this._getMovie().fl_load(); + } catch(err) { this._flashError(err); } + this.status.waitForLoad = false; + }, + _flash_play: function(time) { + try { + this._getMovie().fl_play(time); + } catch(err) { this._flashError(err); } + this.status.waitForLoad = false; + this._flash_checkWaitForPlay(); + }, + _flash_pause: function(time) { + try { + this._getMovie().fl_pause(time); + } catch(err) { this._flashError(err); } + if(time > 0) { // Avoids a setMedia() followed by stop() or pause(0) hiding the video play button. + this.status.waitForLoad = false; + this._flash_checkWaitForPlay(); + } + }, + _flash_playHead: function(p) { + try { + this._getMovie().fl_play_head(p); + } catch(err) { this._flashError(err); } + if(!this.status.waitForLoad) { + this._flash_checkWaitForPlay(); + } + }, + _flash_checkWaitForPlay: function() { + if(this.status.waitForPlay) { + this.status.waitForPlay = false; + if(this.css.jq.videoPlay.length) { + this.css.jq.videoPlay.hide(); + } + if(this.status.video) { + this.internal.poster.jq.hide(); + this.internal.flash.jq.css({'width': this.status.width, 'height': this.status.height}); + } + } + }, + _flash_volume: function(v) { + try { + this._getMovie().fl_volume(v); + } catch(err) { this._flashError(err); } + }, + _flash_mute: function(m) { + try { + this._getMovie().fl_mute(m); + } catch(err) { this._flashError(err); } + }, + _getMovie: function() { + return document[this.internal.flash.id]; + }, + _getFlashPluginVersion: function() { + + // _getFlashPluginVersion() code influenced by: + // - FlashReplace 1.01: http://code.google.com/p/flashreplace/ + // - SWFObject 2.2: http://code.google.com/p/swfobject/ + + var version = 0, + flash; + if(window.ActiveXObject) { + try { + flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); + if (flash) { // flash will return null when ActiveX is disabled + var v = flash.GetVariable("$version"); + if(v) { + v = v.split(" ")[1].split(","); + version = parseInt(v[0], 10) + "." + parseInt(v[1], 10); + } + } + } catch(e) {} + } + else if(navigator.plugins && navigator.mimeTypes.length > 0) { + flash = navigator.plugins["Shockwave Flash"]; + if(flash) { + version = navigator.plugins["Shockwave Flash"].description.replace(/.*\s(\d+\.\d+).*/, "$1"); + } + } + return version * 1; // Converts to a number + }, + _checkForFlash: function (version) { + var flashOk = false; + if(this._getFlashPluginVersion() >= version) { + flashOk = true; + } + return flashOk; + }, + _validString: function(url) { + return (url && typeof url === "string"); // Empty strings return false + }, + _limitValue: function(value, min, max) { + return (value < min) ? min : ((value > max) ? max : value); + }, + _urlNotSetError: function(context) { + this._error( { + type: $.jPlayer.error.URL_NOT_SET, + context: context, + message: $.jPlayer.errorMsg.URL_NOT_SET, + hint: $.jPlayer.errorHint.URL_NOT_SET + }); + }, + _flashError: function(error) { + var errorType; + if(!this.internal.ready) { + errorType = "FLASH"; + } else { + errorType = "FLASH_DISABLED"; + } + this._error( { + type: $.jPlayer.error[errorType], + context: this.internal.flash.swf, + message: $.jPlayer.errorMsg[errorType] + error.message, + hint: $.jPlayer.errorHint[errorType] + }); + // Allow the audio player to recover if display:none and then shown again, or with position:fixed on Firefox. + // This really only affects audio in a media player, as an audio player could easily move the jPlayer element away from such issues. + this.internal.flash.jq.css({'width':'1px', 'height':'1px'}); + }, + _error: function(error) { + this._trigger($.jPlayer.event.error, error); + if(this.options.errorAlerts) { + this._alert("Error!" + (error.message ? "\n" + error.message : "") + (error.hint ? "\n" + error.hint : "") + "\nContext: " + error.context); + } + }, + _warning: function(warning) { + this._trigger($.jPlayer.event.warning, undefined, warning); + if(this.options.warningAlerts) { + this._alert("Warning!" + (warning.message ? "\n" + warning.message : "") + (warning.hint ? "\n" + warning.hint : "") + "\nContext: " + warning.context); + } + }, + _alert: function(message) { + var msg = "jPlayer " + this.version.script + " : id='" + this.internal.self.id +"' : " + message; + if(!this.options.consoleAlerts) { + alert(msg); + } else if(window.console && window.console.log) { + window.console.log(msg); + } + }, + _emulateHtmlBridge: function() { + var self = this; + + // Emulate methods on jPlayer's DOM element. + $.each( $.jPlayer.emulateMethods.split(/\s+/g), function(i, name) { + self.internal.domNode[name] = function(arg) { + self[name](arg); + }; + + }); + + // Bubble jPlayer events to its DOM element. + $.each($.jPlayer.event, function(eventName,eventType) { + var nativeEvent = true; + $.each( $.jPlayer.reservedEvent.split(/\s+/g), function(i, name) { + if(name === eventName) { + nativeEvent = false; + return false; + } + }); + if(nativeEvent) { + self.element.bind(eventType + ".jPlayer.jPlayerHtml", function() { // With .jPlayer & .jPlayerHtml namespaces. + self._emulateHtmlUpdate(); + var domEvent = document.createEvent("Event"); + domEvent.initEvent(eventName, false, true); + self.internal.domNode.dispatchEvent(domEvent); + }); + } + // The error event would require a special case + }); + + // IE9 has a readyState property on all elements. The document should have it, but all (except media) elements inherit it in IE9. This conflicts with Popcorn, which polls the readyState. + }, + _emulateHtmlUpdate: function() { + var self = this; + + $.each( $.jPlayer.emulateStatus.split(/\s+/g), function(i, name) { + self.internal.domNode[name] = self.status[name]; + }); + $.each( $.jPlayer.emulateOptions.split(/\s+/g), function(i, name) { + self.internal.domNode[name] = self.options[name]; + }); + }, + _destroyHtmlBridge: function() { + var self = this; + + // Bridge event handlers are also removed by destroy() through .jPlayer namespace. + this.element.unbind(".jPlayerHtml"); // Remove all event handlers created by the jPlayer bridge. So you can change the emulateHtml option. + + // Remove the methods and properties + var emulated = $.jPlayer.emulateMethods + " " + $.jPlayer.emulateStatus + " " + $.jPlayer.emulateOptions; + $.each( emulated.split(/\s+/g), function(i, name) { + delete self.internal.domNode[name]; + }); + } + }; + + $.jPlayer.error = { + FLASH: "e_flash", + FLASH_DISABLED: "e_flash_disabled", + NO_SOLUTION: "e_no_solution", + NO_SUPPORT: "e_no_support", + URL: "e_url", + URL_NOT_SET: "e_url_not_set", + VERSION: "e_version" + }; + + $.jPlayer.errorMsg = { + FLASH: "jPlayer's Flash fallback is not configured correctly, or a command was issued before the jPlayer Ready event. Details: ", // Used in: _flashError() + FLASH_DISABLED: "jPlayer's Flash fallback has been disabled by the browser due to the CSS rules you have used. Details: ", // Used in: _flashError() + NO_SOLUTION: "No solution can be found by jPlayer in this browser. Neither HTML nor Flash can be used.", // Used in: _init() + NO_SUPPORT: "It is not possible to play any media format provided in setMedia() on this browser using your current options.", // Used in: setMedia() + URL: "Media URL could not be loaded.", // Used in: jPlayerFlashEvent() and _addHtmlEventListeners() + URL_NOT_SET: "Attempt to issue media playback commands, while no media url is set.", // Used in: load(), play(), pause(), stop() and playHead() + VERSION: "jPlayer " + $.jPlayer.prototype.version.script + " needs Jplayer.swf version " + $.jPlayer.prototype.version.needFlash + " but found " // Used in: jPlayerReady() + }; + + $.jPlayer.errorHint = { + FLASH: "Check your swfPath option and that Jplayer.swf is there.", + FLASH_DISABLED: "Check that you have not display:none; the jPlayer entity or any ancestor.", + NO_SOLUTION: "Review the jPlayer options: support and supplied.", + NO_SUPPORT: "Video or audio formats defined in the supplied option are missing.", + URL: "Check media URL is valid.", + URL_NOT_SET: "Use setMedia() to set the media URL.", + VERSION: "Update jPlayer files." + }; + + $.jPlayer.warning = { + CSS_SELECTOR_COUNT: "e_css_selector_count", + CSS_SELECTOR_METHOD: "e_css_selector_method", + CSS_SELECTOR_STRING: "e_css_selector_string", + OPTION_KEY: "e_option_key" + }; + + $.jPlayer.warningMsg = { + CSS_SELECTOR_COUNT: "The number of css selectors found did not equal one: ", + CSS_SELECTOR_METHOD: "The methodName given in jPlayer('cssSelector') is not a valid jPlayer method.", + CSS_SELECTOR_STRING: "The methodCssSelector given in jPlayer('cssSelector') is not a String or is empty.", + OPTION_KEY: "The option requested in jPlayer('option') is undefined." + }; + + $.jPlayer.warningHint = { + CSS_SELECTOR_COUNT: "Check your css selector and the ancestor.", + CSS_SELECTOR_METHOD: "Check your method name.", + CSS_SELECTOR_STRING: "Check your css selector is a string.", + OPTION_KEY: "Check your option name." + }; +})); diff --git a/sites/all/libraries/jplayer/jquery.jplayer.min.js b/sites/all/libraries/jplayer/jquery.jplayer.min.js new file mode 100755 index 0000000000..99f64d71c5 --- /dev/null +++ b/sites/all/libraries/jplayer/jquery.jplayer.min.js @@ -0,0 +1,3 @@ +/*! jPlayer 2.9.2 for jQuery ~ (c) 2009-2014 Happyworm Ltd ~ MIT License */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):b("object"==typeof exports?require("jquery"):a.jQuery?a.jQuery:a.Zepto)}(this,function(a,b){a.fn.jPlayer=function(c){var d="jPlayer",e="string"==typeof c,f=Array.prototype.slice.call(arguments,1),g=this;return c=!e&&f.length?a.extend.apply(null,[!0,c].concat(f)):c,e&&"_"===c.charAt(0)?g:(this.each(e?function(){var e=a(this).data(d),h=e&&a.isFunction(e[c])?e[c].apply(e,f):e;return h!==e&&h!==b?(g=h,!1):void 0}:function(){var b=a(this).data(d);b?b.option(c||{}):a(this).data(d,new a.jPlayer(c,this))}),g)},a.jPlayer=function(b,c){if(arguments.length){this.element=a(c),this.options=a.extend(!0,{},this.options,b);var d=this;this.element.bind("remove.jPlayer",function(){d.destroy()}),this._init()}},"function"!=typeof a.fn.stop&&(a.fn.stop=function(){}),a.jPlayer.emulateMethods="load play pause",a.jPlayer.emulateStatus="src readyState networkState currentTime duration paused ended playbackRate",a.jPlayer.emulateOptions="muted volume",a.jPlayer.reservedEvent="ready flashreset resize repeat error warning",a.jPlayer.event={},a.each(["ready","setmedia","flashreset","resize","repeat","click","error","warning","loadstart","progress","suspend","abort","emptied","stalled","play","pause","loadedmetadata","loadeddata","waiting","playing","canplay","canplaythrough","seeking","seeked","timeupdate","ended","ratechange","durationchange","volumechange"],function(){a.jPlayer.event[this]="jPlayer_"+this}),a.jPlayer.htmlEvent=["loadstart","abort","emptied","stalled","loadedmetadata","canplay","canplaythrough"],a.jPlayer.pause=function(){a.jPlayer.prototype.destroyRemoved(),a.each(a.jPlayer.prototype.instances,function(a,b){b.data("jPlayer").status.srcSet&&b.jPlayer("pause")})},a.jPlayer.timeFormat={showHour:!1,showMin:!0,showSec:!0,padHour:!1,padMin:!0,padSec:!0,sepHour:":",sepMin:":",sepSec:""};var c=function(){this.init()};c.prototype={init:function(){this.options={timeFormat:a.jPlayer.timeFormat}},time:function(a){a=a&&"number"==typeof a?a:0;var b=new Date(1e3*a),c=b.getUTCHours(),d=this.options.timeFormat.showHour?b.getUTCMinutes():b.getUTCMinutes()+60*c,e=this.options.timeFormat.showMin?b.getUTCSeconds():b.getUTCSeconds()+60*d,f=this.options.timeFormat.padHour&&10>c?"0"+c:c,g=this.options.timeFormat.padMin&&10>d?"0"+d:d,h=this.options.timeFormat.padSec&&10>e?"0"+e:e,i="";return i+=this.options.timeFormat.showHour?f+this.options.timeFormat.sepHour:"",i+=this.options.timeFormat.showMin?g+this.options.timeFormat.sepMin:"",i+=this.options.timeFormat.showSec?h+this.options.timeFormat.sepSec:""}};var d=new c;a.jPlayer.convertTime=function(a){return d.time(a)},a.jPlayer.uaBrowser=function(a){var b=a.toLowerCase(),c=/(webkit)[ \/]([\w.]+)/,d=/(opera)(?:.*version)?[ \/]([\w.]+)/,e=/(msie) ([\w.]+)/,f=/(mozilla)(?:.*? rv:([\w.]+))?/,g=c.exec(b)||d.exec(b)||e.exec(b)||b.indexOf("compatible")<0&&f.exec(b)||[];return{browser:g[1]||"",version:g[2]||"0"}},a.jPlayer.uaPlatform=function(a){var b=a.toLowerCase(),c=/(ipad|iphone|ipod|android|blackberry|playbook|windows ce|webos)/,d=/(ipad|playbook)/,e=/(android)/,f=/(mobile)/,g=c.exec(b)||[],h=d.exec(b)||!f.exec(b)&&e.exec(b)||[];return g[1]&&(g[1]=g[1].replace(/\s/g,"_")),{platform:g[1]||"",tablet:h[1]||""}},a.jPlayer.browser={},a.jPlayer.platform={};var e=a.jPlayer.uaBrowser(navigator.userAgent);e.browser&&(a.jPlayer.browser[e.browser]=!0,a.jPlayer.browser.version=e.version);var f=a.jPlayer.uaPlatform(navigator.userAgent);f.platform&&(a.jPlayer.platform[f.platform]=!0,a.jPlayer.platform.mobile=!f.tablet,a.jPlayer.platform.tablet=!!f.tablet),a.jPlayer.getDocMode=function(){var b;return a.jPlayer.browser.msie&&(document.documentMode?b=document.documentMode:(b=5,document.compatMode&&"CSS1Compat"===document.compatMode&&(b=7))),b},a.jPlayer.browser.documentMode=a.jPlayer.getDocMode(),a.jPlayer.nativeFeatures={init:function(){var a,b,c,d=document,e=d.createElement("video"),f={w3c:["fullscreenEnabled","fullscreenElement","requestFullscreen","exitFullscreen","fullscreenchange","fullscreenerror"],moz:["mozFullScreenEnabled","mozFullScreenElement","mozRequestFullScreen","mozCancelFullScreen","mozfullscreenchange","mozfullscreenerror"],webkit:["","webkitCurrentFullScreenElement","webkitRequestFullScreen","webkitCancelFullScreen","webkitfullscreenchange",""],webkitVideo:["webkitSupportsFullscreen","webkitDisplayingFullscreen","webkitEnterFullscreen","webkitExitFullscreen","",""],ms:["","msFullscreenElement","msRequestFullscreen","msExitFullscreen","MSFullscreenChange","MSFullscreenError"]},g=["w3c","moz","webkit","webkitVideo","ms"];for(this.fullscreen=a={support:{w3c:!!d[f.w3c[0]],moz:!!d[f.moz[0]],webkit:"function"==typeof d[f.webkit[3]],webkitVideo:"function"==typeof e[f.webkitVideo[2]],ms:"function"==typeof e[f.ms[2]]},used:{}},b=0,c=g.length;c>b;b++){var h=g[b];if(a.support[h]){a.spec=h,a.used[h]=!0;break}}if(a.spec){var i=f[a.spec];a.api={fullscreenEnabled:!0,fullscreenElement:function(a){return a=a?a:d,a[i[1]]},requestFullscreen:function(a){return a[i[2]]()},exitFullscreen:function(a){return a=a?a:d,a[i[3]]()}},a.event={fullscreenchange:i[4],fullscreenerror:i[5]}}else a.api={fullscreenEnabled:!1,fullscreenElement:function(){return null},requestFullscreen:function(){},exitFullscreen:function(){}},a.event={}}},a.jPlayer.nativeFeatures.init(),a.jPlayer.focus=null,a.jPlayer.keyIgnoreElementNames="A INPUT TEXTAREA SELECT BUTTON";var g=function(b){var c,d=a.jPlayer.focus;d&&(a.each(a.jPlayer.keyIgnoreElementNames.split(/\s+/g),function(a,d){return b.target.nodeName.toUpperCase()===d.toUpperCase()?(c=!0,!1):void 0}),c||a.each(d.options.keyBindings,function(c,e){return e&&a.isFunction(e.fn)&&("number"==typeof e.key&&b.which===e.key||"string"==typeof e.key&&b.key===e.key)?(b.preventDefault(),e.fn(d),!1):void 0}))};a.jPlayer.keys=function(b){var c="keydown.jPlayer";a(document.documentElement).unbind(c),b&&a(document.documentElement).bind(c,g)},a.jPlayer.keys(!0),a.jPlayer.prototype={count:0,version:{script:"2.9.2",needFlash:"2.9.0",flash:"unknown"},options:{swfPath:"js",solution:"html, flash",supplied:"mp3",auroraFormats:"wav",preload:"metadata",volume:.8,muted:!1,remainingDuration:!1,toggleDuration:!1,captureDuration:!0,playbackRate:1,defaultPlaybackRate:1,minPlaybackRate:.5,maxPlaybackRate:4,wmode:"opaque",backgroundColor:"#000000",cssSelectorAncestor:"#jp_container_1",cssSelector:{videoPlay:".jp-video-play",play:".jp-play",pause:".jp-pause",stop:".jp-stop",seekBar:".jp-seek-bar",playBar:".jp-play-bar",mute:".jp-mute",unmute:".jp-unmute",volumeBar:".jp-volume-bar",volumeBarValue:".jp-volume-bar-value",volumeMax:".jp-volume-max",playbackRateBar:".jp-playback-rate-bar",playbackRateBarValue:".jp-playback-rate-bar-value",currentTime:".jp-current-time",duration:".jp-duration",title:".jp-title",fullScreen:".jp-full-screen",restoreScreen:".jp-restore-screen",repeat:".jp-repeat",repeatOff:".jp-repeat-off",gui:".jp-gui",noSolution:".jp-no-solution"},stateClass:{playing:"jp-state-playing",seeking:"jp-state-seeking",muted:"jp-state-muted",looped:"jp-state-looped",fullScreen:"jp-state-full-screen",noVolume:"jp-state-no-volume"},useStateClassSkin:!1,autoBlur:!0,smoothPlayBar:!1,fullScreen:!1,fullWindow:!1,autohide:{restored:!1,full:!0,fadeIn:200,fadeOut:600,hold:1e3},loop:!1,repeat:function(b){b.jPlayer.options.loop?a(this).unbind(".jPlayerRepeat").bind(a.jPlayer.event.ended+".jPlayer.jPlayerRepeat",function(){a(this).jPlayer("play")}):a(this).unbind(".jPlayerRepeat")},nativeVideoControls:{},noFullWindow:{msie:/msie [0-6]\./,ipad:/ipad.*?os [0-4]\./,iphone:/iphone/,ipod:/ipod/,android_pad:/android [0-3]\.(?!.*?mobile)/,android_phone:/(?=.*android)(?!.*chrome)(?=.*mobile)/,blackberry:/blackberry/,windows_ce:/windows ce/,iemobile:/iemobile/,webos:/webos/},noVolume:{ipad:/ipad/,iphone:/iphone/,ipod:/ipod/,android_pad:/android(?!.*?mobile)/,android_phone:/android.*?mobile/,blackberry:/blackberry/,windows_ce:/windows ce/,iemobile:/iemobile/,webos:/webos/,playbook:/playbook/},timeFormat:{},keyEnabled:!1,audioFullScreen:!1,keyBindings:{play:{key:80,fn:function(a){a.status.paused?a.play():a.pause()}},fullScreen:{key:70,fn:function(a){(a.status.video||a.options.audioFullScreen)&&a._setOption("fullScreen",!a.options.fullScreen)}},muted:{key:77,fn:function(a){a._muted(!a.options.muted)}},volumeUp:{key:190,fn:function(a){a.volume(a.options.volume+.1)}},volumeDown:{key:188,fn:function(a){a.volume(a.options.volume-.1)}},loop:{key:76,fn:function(a){a._loop(!a.options.loop)}}},verticalVolume:!1,verticalPlaybackRate:!1,globalVolume:!1,idPrefix:"jp",noConflict:"jQuery",emulateHtml:!1,consoleAlerts:!0,errorAlerts:!1,warningAlerts:!1},optionsAudio:{size:{width:"0px",height:"0px",cssClass:""},sizeFull:{width:"0px",height:"0px",cssClass:""}},optionsVideo:{size:{width:"480px",height:"270px",cssClass:"jp-video-270p"},sizeFull:{width:"100%",height:"100%",cssClass:"jp-video-full"}},instances:{},status:{src:"",media:{},paused:!0,format:{},formatType:"",waitForPlay:!0,waitForLoad:!0,srcSet:!1,video:!1,seekPercent:0,currentPercentRelative:0,currentPercentAbsolute:0,currentTime:0,duration:0,remaining:0,videoWidth:0,videoHeight:0,readyState:0,networkState:0,playbackRate:1,ended:0},internal:{ready:!1},solution:{html:!0,aurora:!0,flash:!0},format:{mp3:{codec:"audio/mpeg",flashCanPlay:!0,media:"audio"},m4a:{codec:'audio/mp4; codecs="mp4a.40.2"',flashCanPlay:!0,media:"audio"},m3u8a:{codec:'application/vnd.apple.mpegurl; codecs="mp4a.40.2"',flashCanPlay:!1,media:"audio"},m3ua:{codec:"audio/mpegurl",flashCanPlay:!1,media:"audio"},oga:{codec:'audio/ogg; codecs="vorbis, opus"',flashCanPlay:!1,media:"audio"},flac:{codec:"audio/x-flac",flashCanPlay:!1,media:"audio"},wav:{codec:'audio/wav; codecs="1"',flashCanPlay:!1,media:"audio"},webma:{codec:'audio/webm; codecs="vorbis"',flashCanPlay:!1,media:"audio"},fla:{codec:"audio/x-flv",flashCanPlay:!0,media:"audio"},rtmpa:{codec:'audio/rtmp; codecs="rtmp"',flashCanPlay:!0,media:"audio"},m4v:{codec:'video/mp4; codecs="avc1.42E01E, mp4a.40.2"',flashCanPlay:!0,media:"video"},m3u8v:{codec:'application/vnd.apple.mpegurl; codecs="avc1.42E01E, mp4a.40.2"',flashCanPlay:!1,media:"video"},m3uv:{codec:"audio/mpegurl",flashCanPlay:!1,media:"video"},ogv:{codec:'video/ogg; codecs="theora, vorbis"',flashCanPlay:!1,media:"video"},webmv:{codec:'video/webm; codecs="vorbis, vp8"',flashCanPlay:!1,media:"video"},flv:{codec:"video/x-flv",flashCanPlay:!0,media:"video"},rtmpv:{codec:'video/rtmp; codecs="rtmp"',flashCanPlay:!0,media:"video"}},_init:function(){var c=this;if(this.element.empty(),this.status=a.extend({},this.status),this.internal=a.extend({},this.internal),this.options.timeFormat=a.extend({},a.jPlayer.timeFormat,this.options.timeFormat),this.internal.cmdsIgnored=a.jPlayer.platform.ipad||a.jPlayer.platform.iphone||a.jPlayer.platform.ipod,this.internal.domNode=this.element.get(0),this.options.keyEnabled&&!a.jPlayer.focus&&(a.jPlayer.focus=this),this.androidFix={setMedia:!1,play:!1,pause:!1,time:0/0},a.jPlayer.platform.android&&(this.options.preload="auto"!==this.options.preload?"metadata":"auto"),this.formats=[],this.solutions=[],this.require={},this.htmlElement={},this.html={},this.html.audio={},this.html.video={},this.aurora={},this.aurora.formats=[],this.aurora.properties=[],this.flash={},this.css={},this.css.cs={},this.css.jq={},this.ancestorJq=[],this.options.volume=this._limitValue(this.options.volume,0,1),a.each(this.options.supplied.toLowerCase().split(","),function(b,d){var e=d.replace(/^\s+|\s+$/g,"");if(c.format[e]){var f=!1;a.each(c.formats,function(a,b){return e===b?(f=!0,!1):void 0}),f||c.formats.push(e)}}),a.each(this.options.solution.toLowerCase().split(","),function(b,d){var e=d.replace(/^\s+|\s+$/g,"");if(c.solution[e]){var f=!1;a.each(c.solutions,function(a,b){return e===b?(f=!0,!1):void 0}),f||c.solutions.push(e)}}),a.each(this.options.auroraFormats.toLowerCase().split(","),function(b,d){var e=d.replace(/^\s+|\s+$/g,"");if(c.format[e]){var f=!1;a.each(c.aurora.formats,function(a,b){return e===b?(f=!0,!1):void 0}),f||c.aurora.formats.push(e)}}),this.internal.instance="jp_"+this.count,this.instances[this.internal.instance]=this.element,this.element.attr("id")||this.element.attr("id",this.options.idPrefix+"_jplayer_"+this.count),this.internal.self=a.extend({},{id:this.element.attr("id"),jq:this.element}),this.internal.audio=a.extend({},{id:this.options.idPrefix+"_audio_"+this.count,jq:b}),this.internal.video=a.extend({},{id:this.options.idPrefix+"_video_"+this.count,jq:b}),this.internal.flash=a.extend({},{id:this.options.idPrefix+"_flash_"+this.count,jq:b,swf:this.options.swfPath+(".swf"!==this.options.swfPath.toLowerCase().slice(-4)?(this.options.swfPath&&"/"!==this.options.swfPath.slice(-1)?"/":"")+"jquery.jplayer.swf":"")}),this.internal.poster=a.extend({},{id:this.options.idPrefix+"_poster_"+this.count,jq:b}),a.each(a.jPlayer.event,function(a,d){c.options[a]!==b&&(c.element.bind(d+".jPlayer",c.options[a]),c.options[a]=b)}),this.require.audio=!1,this.require.video=!1,a.each(this.formats,function(a,b){c.require[c.format[b].media]=!0}),this.options=this.require.video?a.extend(!0,{},this.optionsVideo,this.options):a.extend(!0,{},this.optionsAudio,this.options),this._setSize(),this.status.nativeVideoControls=this._uaBlocklist(this.options.nativeVideoControls),this.status.noFullWindow=this._uaBlocklist(this.options.noFullWindow),this.status.noVolume=this._uaBlocklist(this.options.noVolume),a.jPlayer.nativeFeatures.fullscreen.api.fullscreenEnabled&&this._fullscreenAddEventListeners(),this._restrictNativeVideoControls(),this.htmlElement.poster=document.createElement("img"),this.htmlElement.poster.id=this.internal.poster.id,this.htmlElement.poster.onload=function(){(!c.status.video||c.status.waitForPlay)&&c.internal.poster.jq.show()},this.element.append(this.htmlElement.poster),this.internal.poster.jq=a("#"+this.internal.poster.id),this.internal.poster.jq.css({width:this.status.width,height:this.status.height}),this.internal.poster.jq.hide(),this.internal.poster.jq.bind("click.jPlayer",function(){c._trigger(a.jPlayer.event.click)}),this.html.audio.available=!1,this.require.audio&&(this.htmlElement.audio=document.createElement("audio"),this.htmlElement.audio.id=this.internal.audio.id,this.html.audio.available=!!this.htmlElement.audio.canPlayType&&this._testCanPlayType(this.htmlElement.audio)),this.html.video.available=!1,this.require.video&&(this.htmlElement.video=document.createElement("video"),this.htmlElement.video.id=this.internal.video.id,this.html.video.available=!!this.htmlElement.video.canPlayType&&this._testCanPlayType(this.htmlElement.video)),this.flash.available=this._checkForFlash(10.1),this.html.canPlay={},this.aurora.canPlay={},this.flash.canPlay={},a.each(this.formats,function(b,d){c.html.canPlay[d]=c.html[c.format[d].media].available&&""!==c.htmlElement[c.format[d].media].canPlayType(c.format[d].codec),c.aurora.canPlay[d]=a.inArray(d,c.aurora.formats)>-1,c.flash.canPlay[d]=c.format[d].flashCanPlay&&c.flash.available}),this.html.desired=!1,this.aurora.desired=!1,this.flash.desired=!1,a.each(this.solutions,function(b,d){if(0===b)c[d].desired=!0;else{var e=!1,f=!1;a.each(c.formats,function(a,b){c[c.solutions[0]].canPlay[b]&&("video"===c.format[b].media?f=!0:e=!0)}),c[d].desired=c.require.audio&&!e||c.require.video&&!f}}),this.html.support={},this.aurora.support={},this.flash.support={},a.each(this.formats,function(a,b){c.html.support[b]=c.html.canPlay[b]&&c.html.desired,c.aurora.support[b]=c.aurora.canPlay[b]&&c.aurora.desired,c.flash.support[b]=c.flash.canPlay[b]&&c.flash.desired}),this.html.used=!1,this.aurora.used=!1,this.flash.used=!1,a.each(this.solutions,function(b,d){a.each(c.formats,function(a,b){return c[d].support[b]?(c[d].used=!0,!1):void 0})}),this._resetActive(),this._resetGate(),this._cssSelectorAncestor(this.options.cssSelectorAncestor),this.html.used||this.aurora.used||this.flash.used?this.css.jq.noSolution.length&&this.css.jq.noSolution.hide():(this._error({type:a.jPlayer.error.NO_SOLUTION,context:"{solution:'"+this.options.solution+"', supplied:'"+this.options.supplied+"'}",message:a.jPlayer.errorMsg.NO_SOLUTION,hint:a.jPlayer.errorHint.NO_SOLUTION}),this.css.jq.noSolution.length&&this.css.jq.noSolution.show()),this.flash.used){var d,e="jQuery="+encodeURI(this.options.noConflict)+"&id="+encodeURI(this.internal.self.id)+"&vol="+this.options.volume+"&muted="+this.options.muted;if(a.jPlayer.browser.msie&&(Number(a.jPlayer.browser.version)<9||a.jPlayer.browser.documentMode<9)){var f='',g=['','','','',''];d=document.createElement(f);for(var h=0;h0&&(d.internal.cmdsIgnored=!1),d._getHtmlStatus(b),d._updateInterface(),d._trigger(a.jPlayer.event.progress))},!1),b.addEventListener("loadeddata",function(){c.gate&&(d.androidFix.setMedia=!1,d.androidFix.play&&(d.androidFix.play=!1,d.play(d.androidFix.time)),d.androidFix.pause&&(d.androidFix.pause=!1,d.pause(d.androidFix.time)),d._trigger(a.jPlayer.event.loadeddata))},!1),b.addEventListener("timeupdate",function(){c.gate&&(d._getHtmlStatus(b),d._updateInterface(),d._trigger(a.jPlayer.event.timeupdate))},!1),b.addEventListener("durationchange",function(){c.gate&&(d._getHtmlStatus(b),d._updateInterface(),d._trigger(a.jPlayer.event.durationchange))},!1),b.addEventListener("play",function(){c.gate&&(d._updateButtons(!0),d._html_checkWaitForPlay(),d._trigger(a.jPlayer.event.play))},!1),b.addEventListener("playing",function(){c.gate&&(d._updateButtons(!0),d._seeked(),d._trigger(a.jPlayer.event.playing))},!1),b.addEventListener("pause",function(){c.gate&&(d._updateButtons(!1),d._trigger(a.jPlayer.event.pause))},!1),b.addEventListener("waiting",function(){c.gate&&(d._seeking(),d._trigger(a.jPlayer.event.waiting))},!1),b.addEventListener("seeking",function(){c.gate&&(d._seeking(),d._trigger(a.jPlayer.event.seeking))},!1),b.addEventListener("seeked",function(){c.gate&&(d._seeked(),d._trigger(a.jPlayer.event.seeked))},!1),b.addEventListener("volumechange",function(){c.gate&&(d.options.volume=b.volume,d.options.muted=b.muted,d._updateMute(),d._updateVolume(),d._trigger(a.jPlayer.event.volumechange))},!1),b.addEventListener("ratechange",function(){c.gate&&(d.options.defaultPlaybackRate=b.defaultPlaybackRate,d.options.playbackRate=b.playbackRate,d._updatePlaybackRate(),d._trigger(a.jPlayer.event.ratechange))},!1),b.addEventListener("suspend",function(){c.gate&&(d._seeked(),d._trigger(a.jPlayer.event.suspend))},!1),b.addEventListener("ended",function(){c.gate&&(a.jPlayer.browser.webkit||(d.htmlElement.media.currentTime=0),d.htmlElement.media.pause(),d._updateButtons(!1),d._getHtmlStatus(b,!0),d._updateInterface(),d._trigger(a.jPlayer.event.ended))},!1),b.addEventListener("error",function(){c.gate&&(d._updateButtons(!1),d._seeked(),d.status.srcSet&&(clearTimeout(d.internal.htmlDlyCmdId),d.status.waitForLoad=!0,d.status.waitForPlay=!0,d.status.video&&!d.status.nativeVideoControls&&d.internal.video.jq.css({width:"0px",height:"0px"}),d._validString(d.status.media.poster)&&!d.status.nativeVideoControls&&d.internal.poster.jq.show(),d.css.jq.videoPlay.length&&d.css.jq.videoPlay.show(),d._error({type:a.jPlayer.error.URL,context:d.status.src,message:a.jPlayer.errorMsg.URL,hint:a.jPlayer.errorHint.URL})))},!1),a.each(a.jPlayer.htmlEvent,function(e,f){b.addEventListener(this,function(){c.gate&&d._trigger(a.jPlayer.event[f])},!1)})},_addAuroraEventListeners:function(b,c){var d=this;b.volume=100*this.options.volume,b.on("progress",function(){c.gate&&(d.internal.cmdsIgnored&&this.readyState>0&&(d.internal.cmdsIgnored=!1),d._getAuroraStatus(b),d._updateInterface(),d._trigger(a.jPlayer.event.progress),b.duration>0&&d._trigger(a.jPlayer.event.timeupdate))},!1),b.on("ready",function(){c.gate&&d._trigger(a.jPlayer.event.loadeddata)},!1),b.on("duration",function(){c.gate&&(d._getAuroraStatus(b),d._updateInterface(),d._trigger(a.jPlayer.event.durationchange))},!1),b.on("end",function(){c.gate&&(d._updateButtons(!1),d._getAuroraStatus(b,!0),d._updateInterface(),d._trigger(a.jPlayer.event.ended))},!1),b.on("error",function(){c.gate&&(d._updateButtons(!1),d._seeked(),d.status.srcSet&&(d.status.waitForLoad=!0,d.status.waitForPlay=!0,d.status.video&&!d.status.nativeVideoControls&&d.internal.video.jq.css({width:"0px",height:"0px"}),d._validString(d.status.media.poster)&&!d.status.nativeVideoControls&&d.internal.poster.jq.show(),d.css.jq.videoPlay.length&&d.css.jq.videoPlay.show(),d._error({type:a.jPlayer.error.URL,context:d.status.src,message:a.jPlayer.errorMsg.URL,hint:a.jPlayer.errorHint.URL})))},!1)},_getHtmlStatus:function(a,b){var c=0,d=0,e=0,f=0;isFinite(a.duration)&&(this.status.duration=a.duration),c=a.currentTime,d=this.status.duration>0?100*c/this.status.duration:0,"object"==typeof a.seekable&&a.seekable.length>0?(e=this.status.duration>0?100*a.seekable.end(a.seekable.length-1)/this.status.duration:100,f=this.status.duration>0?100*a.currentTime/a.seekable.end(a.seekable.length-1):0):(e=100,f=d),b&&(c=0,f=0,d=0),this.status.seekPercent=e,this.status.currentPercentRelative=f,this.status.currentPercentAbsolute=d,this.status.currentTime=c,this.status.remaining=this.status.duration-this.status.currentTime,this.status.videoWidth=a.videoWidth,this.status.videoHeight=a.videoHeight,this.status.readyState=a.readyState,this.status.networkState=a.networkState,this.status.playbackRate=a.playbackRate,this.status.ended=a.ended},_getAuroraStatus:function(a,b){var c=0,d=0,e=0,f=0;this.status.duration=a.duration/1e3,c=a.currentTime/1e3,d=this.status.duration>0?100*c/this.status.duration:0,a.buffered>0?(e=this.status.duration>0?a.buffered*this.status.duration/this.status.duration:100,f=this.status.duration>0?c/(a.buffered*this.status.duration):0):(e=100,f=d),b&&(c=0,f=0,d=0),this.status.seekPercent=e,this.status.currentPercentRelative=f,this.status.currentPercentAbsolute=d,this.status.currentTime=c,this.status.remaining=this.status.duration-this.status.currentTime,this.status.readyState=4,this.status.networkState=0,this.status.playbackRate=1,this.status.ended=!1},_resetStatus:function(){this.status=a.extend({},this.status,a.jPlayer.prototype.status)},_trigger:function(b,c,d){var e=a.Event(b);e.jPlayer={},e.jPlayer.version=a.extend({},this.version),e.jPlayer.options=a.extend(!0,{},this.options),e.jPlayer.status=a.extend(!0,{},this.status),e.jPlayer.html=a.extend(!0,{},this.html),e.jPlayer.aurora=a.extend(!0,{},this.aurora),e.jPlayer.flash=a.extend(!0,{},this.flash),c&&(e.jPlayer.error=a.extend({},c)),d&&(e.jPlayer.warning=a.extend({},d)),this.element.trigger(e)},jPlayerFlashEvent:function(b,c){if(b===a.jPlayer.event.ready)if(this.internal.ready){if(this.flash.gate){if(this.status.srcSet){var d=this.status.currentTime,e=this.status.paused;this.setMedia(this.status.media),this.volumeWorker(this.options.volume),d>0&&(e?this.pause(d):this.play(d))}this._trigger(a.jPlayer.event.flashreset)}}else this.internal.ready=!0,this.internal.flash.jq.css({width:"0px",height:"0px"}),this.version.flash=c.version,this.version.needFlash!==this.version.flash&&this._error({type:a.jPlayer.error.VERSION,context:this.version.flash,message:a.jPlayer.errorMsg.VERSION+this.version.flash,hint:a.jPlayer.errorHint.VERSION}),this._trigger(a.jPlayer.event.repeat),this._trigger(b);if(this.flash.gate)switch(b){case a.jPlayer.event.progress:this._getFlashStatus(c),this._updateInterface(),this._trigger(b);break;case a.jPlayer.event.timeupdate:this._getFlashStatus(c),this._updateInterface(),this._trigger(b);break;case a.jPlayer.event.play:this._seeked(),this._updateButtons(!0),this._trigger(b);break;case a.jPlayer.event.pause:this._updateButtons(!1),this._trigger(b);break;case a.jPlayer.event.ended:this._updateButtons(!1),this._trigger(b);break;case a.jPlayer.event.click:this._trigger(b);break;case a.jPlayer.event.error:this.status.waitForLoad=!0,this.status.waitForPlay=!0,this.status.video&&this.internal.flash.jq.css({width:"0px",height:"0px"}),this._validString(this.status.media.poster)&&this.internal.poster.jq.show(),this.css.jq.videoPlay.length&&this.status.video&&this.css.jq.videoPlay.show(),this.status.video?this._flash_setVideo(this.status.media):this._flash_setAudio(this.status.media),this._updateButtons(!1),this._error({type:a.jPlayer.error.URL,context:c.src,message:a.jPlayer.errorMsg.URL,hint:a.jPlayer.errorHint.URL});break;case a.jPlayer.event.seeking:this._seeking(),this._trigger(b);break;case a.jPlayer.event.seeked:this._seeked(),this._trigger(b);break;case a.jPlayer.event.ready:break;default:this._trigger(b)}return!1},_getFlashStatus:function(a){this.status.seekPercent=a.seekPercent,this.status.currentPercentRelative=a.currentPercentRelative,this.status.currentPercentAbsolute=a.currentPercentAbsolute,this.status.currentTime=a.currentTime,this.status.duration=a.duration,this.status.remaining=a.duration-a.currentTime,this.status.videoWidth=a.videoWidth,this.status.videoHeight=a.videoHeight,this.status.readyState=4,this.status.networkState=0,this.status.playbackRate=1,this.status.ended=!1},_updateButtons:function(a){a===b?a=!this.status.paused:this.status.paused=!a,a?this.addStateClass("playing"):this.removeStateClass("playing"),!this.status.noFullWindow&&this.options.fullWindow?this.addStateClass("fullScreen"):this.removeStateClass("fullScreen"),this.options.loop?this.addStateClass("looped"):this.removeStateClass("looped"),this.css.jq.play.length&&this.css.jq.pause.length&&(a?(this.css.jq.play.hide(),this.css.jq.pause.show()):(this.css.jq.play.show(),this.css.jq.pause.hide())),this.css.jq.restoreScreen.length&&this.css.jq.fullScreen.length&&(this.status.noFullWindow?(this.css.jq.fullScreen.hide(),this.css.jq.restoreScreen.hide()):this.options.fullWindow?(this.css.jq.fullScreen.hide(),this.css.jq.restoreScreen.show()):(this.css.jq.fullScreen.show(),this.css.jq.restoreScreen.hide())),this.css.jq.repeat.length&&this.css.jq.repeatOff.length&&(this.options.loop?(this.css.jq.repeat.hide(),this.css.jq.repeatOff.show()):(this.css.jq.repeat.show(),this.css.jq.repeatOff.hide()))},_updateInterface:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.width(this.status.seekPercent+"%"),this.css.jq.playBar.length&&(this.options.smoothPlayBar?this.css.jq.playBar.stop().animate({width:this.status.currentPercentAbsolute+"%"},250,"linear"):this.css.jq.playBar.width(this.status.currentPercentRelative+"%"));var a="";this.css.jq.currentTime.length&&(a=this._convertTime(this.status.currentTime),a!==this.css.jq.currentTime.text()&&this.css.jq.currentTime.text(this._convertTime(this.status.currentTime)));var b="",c=this.status.duration,d=this.status.remaining;this.css.jq.duration.length&&("string"==typeof this.status.media.duration?b=this.status.media.duration:("number"==typeof this.status.media.duration&&(c=this.status.media.duration,d=c-this.status.currentTime),b=this.options.remainingDuration?(d>0?"-":"")+this._convertTime(d):this._convertTime(c)),b!==this.css.jq.duration.text()&&this.css.jq.duration.text(b))},_convertTime:c.prototype.time,_seeking:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.addClass("jp-seeking-bg"),this.addStateClass("seeking")},_seeked:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.removeClass("jp-seeking-bg"),this.removeStateClass("seeking")},_resetGate:function(){this.html.audio.gate=!1,this.html.video.gate=!1,this.aurora.gate=!1,this.flash.gate=!1},_resetActive:function(){this.html.active=!1,this.aurora.active=!1,this.flash.active=!1},_escapeHtml:function(a){return a.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""")},_qualifyURL:function(a){var b=document.createElement("div"); +return b.innerHTML='x',b.firstChild.href},_absoluteMediaUrls:function(b){var c=this;return a.each(b,function(a,d){d&&c.format[a]&&"data:"!==d.substr(0,5)&&(b[a]=c._qualifyURL(d))}),b},addStateClass:function(a){this.ancestorJq.length&&this.ancestorJq.addClass(this.options.stateClass[a])},removeStateClass:function(a){this.ancestorJq.length&&this.ancestorJq.removeClass(this.options.stateClass[a])},setMedia:function(b){var c=this,d=!1,e=this.status.media.poster!==b.poster;this._resetMedia(),this._resetGate(),this._resetActive(),this.androidFix.setMedia=!1,this.androidFix.play=!1,this.androidFix.pause=!1,b=this._absoluteMediaUrls(b),a.each(this.formats,function(e,f){var g="video"===c.format[f].media;return a.each(c.solutions,function(e,h){if(c[h].support[f]&&c._validString(b[f])){var i="html"===h,j="aurora"===h;return g?(i?(c.html.video.gate=!0,c._html_setVideo(b),c.html.active=!0):(c.flash.gate=!0,c._flash_setVideo(b),c.flash.active=!0),c.css.jq.videoPlay.length&&c.css.jq.videoPlay.show(),c.status.video=!0):(i?(c.html.audio.gate=!0,c._html_setAudio(b),c.html.active=!0,a.jPlayer.platform.android&&(c.androidFix.setMedia=!0)):j?(c.aurora.gate=!0,c._aurora_setAudio(b),c.aurora.active=!0):(c.flash.gate=!0,c._flash_setAudio(b),c.flash.active=!0),c.css.jq.videoPlay.length&&c.css.jq.videoPlay.hide(),c.status.video=!1),d=!0,!1}}),d?!1:void 0}),d?(this.status.nativeVideoControls&&this.html.video.gate||this._validString(b.poster)&&(e?this.htmlElement.poster.src=b.poster:this.internal.poster.jq.show()),"string"==typeof b.title&&(this.css.jq.title.length&&this.css.jq.title.html(b.title),this.htmlElement.audio&&this.htmlElement.audio.setAttribute("title",b.title),this.htmlElement.video&&this.htmlElement.video.setAttribute("title",b.title)),this.status.srcSet=!0,this.status.media=a.extend({},b),this._updateButtons(!1),this._updateInterface(),this._trigger(a.jPlayer.event.setmedia)):this._error({type:a.jPlayer.error.NO_SUPPORT,context:"{supplied:'"+this.options.supplied+"'}",message:a.jPlayer.errorMsg.NO_SUPPORT,hint:a.jPlayer.errorHint.NO_SUPPORT})},_resetMedia:function(){this._resetStatus(),this._updateButtons(!1),this._updateInterface(),this._seeked(),this.internal.poster.jq.hide(),clearTimeout(this.internal.htmlDlyCmdId),this.html.active?this._html_resetMedia():this.aurora.active?this._aurora_resetMedia():this.flash.active&&this._flash_resetMedia()},clearMedia:function(){this._resetMedia(),this.html.active?this._html_clearMedia():this.aurora.active?this._aurora_clearMedia():this.flash.active&&this._flash_clearMedia(),this._resetGate(),this._resetActive()},load:function(){this.status.srcSet?this.html.active?this._html_load():this.aurora.active?this._aurora_load():this.flash.active&&this._flash_load():this._urlNotSetError("load")},focus:function(){this.options.keyEnabled&&(a.jPlayer.focus=this)},play:function(a){var b="object"==typeof a;b&&this.options.useStateClassSkin&&!this.status.paused?this.pause(a):(a="number"==typeof a?a:0/0,this.status.srcSet?(this.focus(),this.html.active?this._html_play(a):this.aurora.active?this._aurora_play(a):this.flash.active&&this._flash_play(a)):this._urlNotSetError("play"))},videoPlay:function(){this.play()},pause:function(a){a="number"==typeof a?a:0/0,this.status.srcSet?this.html.active?this._html_pause(a):this.aurora.active?this._aurora_pause(a):this.flash.active&&this._flash_pause(a):this._urlNotSetError("pause")},tellOthers:function(b,c){var d=this,e="function"==typeof c,f=Array.prototype.slice.call(arguments);"string"==typeof b&&(e&&f.splice(1,1),a.jPlayer.prototype.destroyRemoved(),a.each(this.instances,function(){d.element!==this&&(!e||c.call(this.data("jPlayer"),d))&&this.jPlayer.apply(this,f)}))},pauseOthers:function(a){this.tellOthers("pause",function(){return this.status.srcSet},a)},stop:function(){this.status.srcSet?this.html.active?this._html_pause(0):this.aurora.active?this._aurora_pause(0):this.flash.active&&this._flash_pause(0):this._urlNotSetError("stop")},playHead:function(a){a=this._limitValue(a,0,100),this.status.srcSet?this.html.active?this._html_playHead(a):this.aurora.active?this._aurora_playHead(a):this.flash.active&&this._flash_playHead(a):this._urlNotSetError("playHead")},_muted:function(a){this.mutedWorker(a),this.options.globalVolume&&this.tellOthers("mutedWorker",function(){return this.options.globalVolume},a)},mutedWorker:function(b){this.options.muted=b,this.html.used&&this._html_setProperty("muted",b),this.aurora.used&&this._aurora_mute(b),this.flash.used&&this._flash_mute(b),this.html.video.gate||this.html.audio.gate||(this._updateMute(b),this._updateVolume(this.options.volume),this._trigger(a.jPlayer.event.volumechange))},mute:function(a){var c="object"==typeof a;c&&this.options.useStateClassSkin&&this.options.muted?this._muted(!1):(a=a===b?!0:!!a,this._muted(a))},unmute:function(a){a=a===b?!0:!!a,this._muted(!a)},_updateMute:function(a){a===b&&(a=this.options.muted),a?this.addStateClass("muted"):this.removeStateClass("muted"),this.css.jq.mute.length&&this.css.jq.unmute.length&&(this.status.noVolume?(this.css.jq.mute.hide(),this.css.jq.unmute.hide()):a?(this.css.jq.mute.hide(),this.css.jq.unmute.show()):(this.css.jq.mute.show(),this.css.jq.unmute.hide()))},volume:function(a){this.volumeWorker(a),this.options.globalVolume&&this.tellOthers("volumeWorker",function(){return this.options.globalVolume},a)},volumeWorker:function(b){b=this._limitValue(b,0,1),this.options.volume=b,this.html.used&&this._html_setProperty("volume",b),this.aurora.used&&this._aurora_volume(b),this.flash.used&&this._flash_volume(b),this.html.video.gate||this.html.audio.gate||(this._updateVolume(b),this._trigger(a.jPlayer.event.volumechange))},volumeBar:function(b){if(this.css.jq.volumeBar.length){var c=a(b.currentTarget),d=c.offset(),e=b.pageX-d.left,f=c.width(),g=c.height()-b.pageY+d.top,h=c.height();this.volume(this.options.verticalVolume?g/h:e/f)}this.options.muted&&this._muted(!1)},_updateVolume:function(a){a===b&&(a=this.options.volume),a=this.options.muted?0:a,this.status.noVolume?(this.addStateClass("noVolume"),this.css.jq.volumeBar.length&&this.css.jq.volumeBar.hide(),this.css.jq.volumeBarValue.length&&this.css.jq.volumeBarValue.hide(),this.css.jq.volumeMax.length&&this.css.jq.volumeMax.hide()):(this.removeStateClass("noVolume"),this.css.jq.volumeBar.length&&this.css.jq.volumeBar.show(),this.css.jq.volumeBarValue.length&&(this.css.jq.volumeBarValue.show(),this.css.jq.volumeBarValue[this.options.verticalVolume?"height":"width"](100*a+"%")),this.css.jq.volumeMax.length&&this.css.jq.volumeMax.show())},volumeMax:function(){this.volume(1),this.options.muted&&this._muted(!1)},_cssSelectorAncestor:function(b){var c=this;this.options.cssSelectorAncestor=b,this._removeUiClass(),this.ancestorJq=b?a(b):[],b&&1!==this.ancestorJq.length&&this._warning({type:a.jPlayer.warning.CSS_SELECTOR_COUNT,context:b,message:a.jPlayer.warningMsg.CSS_SELECTOR_COUNT+this.ancestorJq.length+" found for cssSelectorAncestor.",hint:a.jPlayer.warningHint.CSS_SELECTOR_COUNT}),this._addUiClass(),a.each(this.options.cssSelector,function(a,b){c._cssSelector(a,b)}),this._updateInterface(),this._updateButtons(),this._updateAutohide(),this._updateVolume(),this._updateMute()},_cssSelector:function(b,c){var d=this;if("string"==typeof c)if(a.jPlayer.prototype.options.cssSelector[b]){if(this.css.jq[b]&&this.css.jq[b].length&&this.css.jq[b].unbind(".jPlayer"),this.options.cssSelector[b]=c,this.css.cs[b]=this.options.cssSelectorAncestor+" "+c,this.css.jq[b]=c?a(this.css.cs[b]):[],this.css.jq[b].length&&this[b]){var e=function(c){c.preventDefault(),d[b](c),d.options.autoBlur?a(this).blur():a(this).focus()};this.css.jq[b].bind("click.jPlayer",e)}c&&1!==this.css.jq[b].length&&this._warning({type:a.jPlayer.warning.CSS_SELECTOR_COUNT,context:this.css.cs[b],message:a.jPlayer.warningMsg.CSS_SELECTOR_COUNT+this.css.jq[b].length+" found for "+b+" method.",hint:a.jPlayer.warningHint.CSS_SELECTOR_COUNT})}else this._warning({type:a.jPlayer.warning.CSS_SELECTOR_METHOD,context:b,message:a.jPlayer.warningMsg.CSS_SELECTOR_METHOD,hint:a.jPlayer.warningHint.CSS_SELECTOR_METHOD});else this._warning({type:a.jPlayer.warning.CSS_SELECTOR_STRING,context:c,message:a.jPlayer.warningMsg.CSS_SELECTOR_STRING,hint:a.jPlayer.warningHint.CSS_SELECTOR_STRING})},duration:function(a){this.options.toggleDuration&&(this.options.captureDuration&&a.stopPropagation(),this._setOption("remainingDuration",!this.options.remainingDuration))},seekBar:function(b){if(this.css.jq.seekBar.length){var c=a(b.currentTarget),d=c.offset(),e=b.pageX-d.left,f=c.width(),g=100*e/f;this.playHead(g)}},playbackRate:function(a){this._setOption("playbackRate",a)},playbackRateBar:function(b){if(this.css.jq.playbackRateBar.length){var c,d,e=a(b.currentTarget),f=e.offset(),g=b.pageX-f.left,h=e.width(),i=e.height()-b.pageY+f.top,j=e.height();c=this.options.verticalPlaybackRate?i/j:g/h,d=c*(this.options.maxPlaybackRate-this.options.minPlaybackRate)+this.options.minPlaybackRate,this.playbackRate(d)}},_updatePlaybackRate:function(){var a=this.options.playbackRate,b=(a-this.options.minPlaybackRate)/(this.options.maxPlaybackRate-this.options.minPlaybackRate);this.status.playbackRateEnabled?(this.css.jq.playbackRateBar.length&&this.css.jq.playbackRateBar.show(),this.css.jq.playbackRateBarValue.length&&(this.css.jq.playbackRateBarValue.show(),this.css.jq.playbackRateBarValue[this.options.verticalPlaybackRate?"height":"width"](100*b+"%"))):(this.css.jq.playbackRateBar.length&&this.css.jq.playbackRateBar.hide(),this.css.jq.playbackRateBarValue.length&&this.css.jq.playbackRateBarValue.hide())},repeat:function(a){var b="object"==typeof a;this._loop(b&&this.options.useStateClassSkin&&this.options.loop?!1:!0)},repeatOff:function(){this._loop(!1)},_loop:function(b){this.options.loop!==b&&(this.options.loop=b,this._updateButtons(),this._trigger(a.jPlayer.event.repeat))},option:function(c,d){var e=c;if(0===arguments.length)return a.extend(!0,{},this.options);if("string"==typeof c){var f=c.split(".");if(d===b){for(var g=a.extend(!0,{},this.options),h=0;h0||Math.floor(d)>0):e=!0,a.internal.mouse={x:b.pageX,y:b.pageY},e&&a.css.jq.gui.fadeIn(a.options.autohide.fadeIn,function(){clearTimeout(a.internal.autohideId),a.internal.autohideId=setTimeout(function(){a.css.jq.gui.fadeOut(a.options.autohide.fadeOut)},a.options.autohide.hold)})};this.css.jq.gui.length&&(this.css.jq.gui.stop(!0,!0),clearTimeout(this.internal.autohideId),delete this.internal.mouse,this.element.unbind(c),this.css.jq.gui.unbind(c),this.status.nativeVideoControls?this.css.jq.gui.hide():this.options.fullWindow&&this.options.autohide.full||!this.options.fullWindow&&this.options.autohide.restored?(this.element.bind(d,e),this.css.jq.gui.bind(d,e),this.css.jq.gui.hide()):this.css.jq.gui.show())},fullScreen:function(a){var b="object"==typeof a;b&&this.options.useStateClassSkin&&this.options.fullScreen?this._setOption("fullScreen",!1):this._setOption("fullScreen",!0)},restoreScreen:function(){this._setOption("fullScreen",!1)},_fullscreenAddEventListeners:function(){var b=this,c=a.jPlayer.nativeFeatures.fullscreen;c.api.fullscreenEnabled&&c.event.fullscreenchange&&("function"!=typeof this.internal.fullscreenchangeHandler&&(this.internal.fullscreenchangeHandler=function(){b._fullscreenchange()}),document.addEventListener(c.event.fullscreenchange,this.internal.fullscreenchangeHandler,!1))},_fullscreenRemoveEventListeners:function(){var b=a.jPlayer.nativeFeatures.fullscreen;this.internal.fullscreenchangeHandler&&document.removeEventListener(b.event.fullscreenchange,this.internal.fullscreenchangeHandler,!1)},_fullscreenchange:function(){this.options.fullScreen&&!a.jPlayer.nativeFeatures.fullscreen.api.fullscreenElement()&&this._setOption("fullScreen",!1)},_requestFullscreen:function(){var b=this.ancestorJq.length?this.ancestorJq[0]:this.element[0],c=a.jPlayer.nativeFeatures.fullscreen;c.used.webkitVideo&&(b=this.htmlElement.video),c.api.fullscreenEnabled&&c.api.requestFullscreen(b)},_exitFullscreen:function(){var b,c=a.jPlayer.nativeFeatures.fullscreen;c.used.webkitVideo&&(b=this.htmlElement.video),c.api.fullscreenEnabled&&c.api.exitFullscreen(b)},_html_initMedia:function(b){var c=a(this.htmlElement.media).empty();a.each(b.track||[],function(a,b){var d=document.createElement("track");d.setAttribute("kind",b.kind?b.kind:""),d.setAttribute("src",b.src?b.src:""),d.setAttribute("srclang",b.srclang?b.srclang:""),d.setAttribute("label",b.label?b.label:""),b.def&&d.setAttribute("default",b.def),c.append(d)}),this.htmlElement.media.src=this.status.src,"none"!==this.options.preload&&this._html_load(),this._trigger(a.jPlayer.event.timeupdate)},_html_setFormat:function(b){var c=this;a.each(this.formats,function(a,d){return c.html.support[d]&&b[d]?(c.status.src=b[d],c.status.format[d]=!0,c.status.formatType=d,!1):void 0})},_html_setAudio:function(a){this._html_setFormat(a),this.htmlElement.media=this.htmlElement.audio,this._html_initMedia(a)},_html_setVideo:function(a){this._html_setFormat(a),this.status.nativeVideoControls&&(this.htmlElement.video.poster=this._validString(a.poster)?a.poster:""),this.htmlElement.media=this.htmlElement.video,this._html_initMedia(a)},_html_resetMedia:function(){this.htmlElement.media&&(this.htmlElement.media.id!==this.internal.video.id||this.status.nativeVideoControls||this.internal.video.jq.css({width:"0px",height:"0px"}),this.htmlElement.media.pause())},_html_clearMedia:function(){this.htmlElement.media&&(this.htmlElement.media.src="about:blank",this.htmlElement.media.load())},_html_load:function(){this.status.waitForLoad&&(this.status.waitForLoad=!1,this.htmlElement.media.load()),clearTimeout(this.internal.htmlDlyCmdId)},_html_play:function(a){var b=this,c=this.htmlElement.media;if(this.androidFix.pause=!1,this._html_load(),this.androidFix.setMedia)this.androidFix.play=!0,this.androidFix.time=a;else if(isNaN(a))c.play();else{this.internal.cmdsIgnored&&c.play();try{if(c.seekable&&!("object"==typeof c.seekable&&c.seekable.length>0))throw 1;c.currentTime=a,c.play()}catch(d){return void(this.internal.htmlDlyCmdId=setTimeout(function(){b.play(a)},250))}}this._html_checkWaitForPlay()},_html_pause:function(a){var b=this,c=this.htmlElement.media;if(this.androidFix.play=!1,a>0?this._html_load():clearTimeout(this.internal.htmlDlyCmdId),c.pause(),this.androidFix.setMedia)this.androidFix.pause=!0,this.androidFix.time=a;else if(!isNaN(a))try{if(c.seekable&&!("object"==typeof c.seekable&&c.seekable.length>0))throw 1;c.currentTime=a}catch(d){return void(this.internal.htmlDlyCmdId=setTimeout(function(){b.pause(a)},250))}a>0&&this._html_checkWaitForPlay()},_html_playHead:function(a){var b=this,c=this.htmlElement.media;this._html_load();try{if("object"==typeof c.seekable&&c.seekable.length>0)c.currentTime=a*c.seekable.end(c.seekable.length-1)/100;else{if(!(c.duration>0)||isNaN(c.duration))throw"e";c.currentTime=a*c.duration/100}}catch(d){return void(this.internal.htmlDlyCmdId=setTimeout(function(){b.playHead(a)},250))}this.status.waitForLoad||this._html_checkWaitForPlay()},_html_checkWaitForPlay:function(){this.status.waitForPlay&&(this.status.waitForPlay=!1,this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide(),this.status.video&&(this.internal.poster.jq.hide(),this.internal.video.jq.css({width:this.status.width,height:this.status.height})))},_html_setProperty:function(a,b){this.html.audio.available&&(this.htmlElement.audio[a]=b),this.html.video.available&&(this.htmlElement.video[a]=b)},_aurora_setAudio:function(b){var c=this;a.each(this.formats,function(a,d){return c.aurora.support[d]&&b[d]?(c.status.src=b[d],c.status.format[d]=!0,c.status.formatType=d,!1):void 0}),this.aurora.player=new AV.Player.fromURL(this.status.src),this._addAuroraEventListeners(this.aurora.player,this.aurora),"auto"===this.options.preload&&(this._aurora_load(),this.status.waitForLoad=!1)},_aurora_resetMedia:function(){this.aurora.player&&this.aurora.player.stop()},_aurora_clearMedia:function(){},_aurora_load:function(){this.status.waitForLoad&&(this.status.waitForLoad=!1,this.aurora.player.preload())},_aurora_play:function(b){this.status.waitForLoad||isNaN(b)||this.aurora.player.seek(b),this.aurora.player.playing||this.aurora.player.play(),this.status.waitForLoad=!1,this._aurora_checkWaitForPlay(),this._updateButtons(!0),this._trigger(a.jPlayer.event.play)},_aurora_pause:function(b){isNaN(b)||this.aurora.player.seek(1e3*b),this.aurora.player.pause(),b>0&&this._aurora_checkWaitForPlay(),this._updateButtons(!1),this._trigger(a.jPlayer.event.pause)},_aurora_playHead:function(a){this.aurora.player.duration>0&&this.aurora.player.seek(a*this.aurora.player.duration/100),this.status.waitForLoad||this._aurora_checkWaitForPlay()},_aurora_checkWaitForPlay:function(){this.status.waitForPlay&&(this.status.waitForPlay=!1)},_aurora_volume:function(a){this.aurora.player.volume=100*a},_aurora_mute:function(a){a?(this.aurora.properties.lastvolume=this.aurora.player.volume,this.aurora.player.volume=0):this.aurora.player.volume=this.aurora.properties.lastvolume,this.aurora.properties.muted=a},_flash_setAudio:function(b){var c=this;try{a.each(this.formats,function(a,d){if(c.flash.support[d]&&b[d]){switch(d){case"m4a":case"fla":c._getMovie().fl_setAudio_m4a(b[d]);break;case"mp3":c._getMovie().fl_setAudio_mp3(b[d]);break;case"rtmpa":c._getMovie().fl_setAudio_rtmp(b[d])}return c.status.src=b[d],c.status.format[d]=!0,c.status.formatType=d,!1}}),"auto"===this.options.preload&&(this._flash_load(),this.status.waitForLoad=!1)}catch(d){this._flashError(d)}},_flash_setVideo:function(b){var c=this;try{a.each(this.formats,function(a,d){if(c.flash.support[d]&&b[d]){switch(d){case"m4v":case"flv":c._getMovie().fl_setVideo_m4v(b[d]);break;case"rtmpv":c._getMovie().fl_setVideo_rtmp(b[d])}return c.status.src=b[d],c.status.format[d]=!0,c.status.formatType=d,!1}}),"auto"===this.options.preload&&(this._flash_load(),this.status.waitForLoad=!1)}catch(d){this._flashError(d)}},_flash_resetMedia:function(){this.internal.flash.jq.css({width:"0px",height:"0px"}),this._flash_pause(0/0)},_flash_clearMedia:function(){try{this._getMovie().fl_clearMedia()}catch(a){this._flashError(a)}},_flash_load:function(){try{this._getMovie().fl_load()}catch(a){this._flashError(a)}this.status.waitForLoad=!1},_flash_play:function(a){try{this._getMovie().fl_play(a)}catch(b){this._flashError(b)}this.status.waitForLoad=!1,this._flash_checkWaitForPlay()},_flash_pause:function(a){try{this._getMovie().fl_pause(a)}catch(b){this._flashError(b)}a>0&&(this.status.waitForLoad=!1,this._flash_checkWaitForPlay())},_flash_playHead:function(a){try{this._getMovie().fl_play_head(a)}catch(b){this._flashError(b)}this.status.waitForLoad||this._flash_checkWaitForPlay()},_flash_checkWaitForPlay:function(){this.status.waitForPlay&&(this.status.waitForPlay=!1,this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide(),this.status.video&&(this.internal.poster.jq.hide(),this.internal.flash.jq.css({width:this.status.width,height:this.status.height})))},_flash_volume:function(a){try{this._getMovie().fl_volume(a)}catch(b){this._flashError(b)}},_flash_mute:function(a){try{this._getMovie().fl_mute(a)}catch(b){this._flashError(b)}},_getMovie:function(){return document[this.internal.flash.id]},_getFlashPluginVersion:function(){var a,b=0;if(window.ActiveXObject)try{if(a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")){var c=a.GetVariable("$version");c&&(c=c.split(" ")[1].split(","),b=parseInt(c[0],10)+"."+parseInt(c[1],10))}}catch(d){}else navigator.plugins&&navigator.mimeTypes.length>0&&(a=navigator.plugins["Shockwave Flash"],a&&(b=navigator.plugins["Shockwave Flash"].description.replace(/.*\s(\d+\.\d+).*/,"$1")));return 1*b},_checkForFlash:function(a){var b=!1;return this._getFlashPluginVersion()>=a&&(b=!0),b},_validString:function(a){return a&&"string"==typeof a},_limitValue:function(a,b,c){return b>a?b:a>c?c:a},_urlNotSetError:function(b){this._error({type:a.jPlayer.error.URL_NOT_SET,context:b,message:a.jPlayer.errorMsg.URL_NOT_SET,hint:a.jPlayer.errorHint.URL_NOT_SET})},_flashError:function(b){var c;c=this.internal.ready?"FLASH_DISABLED":"FLASH",this._error({type:a.jPlayer.error[c],context:this.internal.flash.swf,message:a.jPlayer.errorMsg[c]+b.message,hint:a.jPlayer.errorHint[c]}),this.internal.flash.jq.css({width:"1px",height:"1px"})},_error:function(b){this._trigger(a.jPlayer.event.error,b),this.options.errorAlerts&&this._alert("Error!"+(b.message?"\n"+b.message:"")+(b.hint?"\n"+b.hint:"")+"\nContext: "+b.context)},_warning:function(c){this._trigger(a.jPlayer.event.warning,b,c),this.options.warningAlerts&&this._alert("Warning!"+(c.message?"\n"+c.message:"")+(c.hint?"\n"+c.hint:"")+"\nContext: "+c.context)},_alert:function(a){var b="jPlayer "+this.version.script+" : id='"+this.internal.self.id+"' : "+a;this.options.consoleAlerts?window.console&&window.console.log&&window.console.log(b):alert(b)},_emulateHtmlBridge:function(){var b=this;a.each(a.jPlayer.emulateMethods.split(/\s+/g),function(a,c){b.internal.domNode[c]=function(a){b[c](a)}}),a.each(a.jPlayer.event,function(c,d){var e=!0;a.each(a.jPlayer.reservedEvent.split(/\s+/g),function(a,b){return b===c?(e=!1,!1):void 0}),e&&b.element.bind(d+".jPlayer.jPlayerHtml",function(){b._emulateHtmlUpdate();var a=document.createEvent("Event");a.initEvent(c,!1,!0),b.internal.domNode.dispatchEvent(a)})})},_emulateHtmlUpdate:function(){var b=this;a.each(a.jPlayer.emulateStatus.split(/\s+/g),function(a,c){b.internal.domNode[c]=b.status[c]}),a.each(a.jPlayer.emulateOptions.split(/\s+/g),function(a,c){b.internal.domNode[c]=b.options[c]})},_destroyHtmlBridge:function(){var b=this;this.element.unbind(".jPlayerHtml");var c=a.jPlayer.emulateMethods+" "+a.jPlayer.emulateStatus+" "+a.jPlayer.emulateOptions;a.each(c.split(/\s+/g),function(a,c){delete b.internal.domNode[c]})}},a.jPlayer.error={FLASH:"e_flash",FLASH_DISABLED:"e_flash_disabled",NO_SOLUTION:"e_no_solution",NO_SUPPORT:"e_no_support",URL:"e_url",URL_NOT_SET:"e_url_not_set",VERSION:"e_version"},a.jPlayer.errorMsg={FLASH:"jPlayer's Flash fallback is not configured correctly, or a command was issued before the jPlayer Ready event. Details: ",FLASH_DISABLED:"jPlayer's Flash fallback has been disabled by the browser due to the CSS rules you have used. Details: ",NO_SOLUTION:"No solution can be found by jPlayer in this browser. Neither HTML nor Flash can be used.",NO_SUPPORT:"It is not possible to play any media format provided in setMedia() on this browser using your current options.",URL:"Media URL could not be loaded.",URL_NOT_SET:"Attempt to issue media playback commands, while no media url is set.",VERSION:"jPlayer "+a.jPlayer.prototype.version.script+" needs Jplayer.swf version "+a.jPlayer.prototype.version.needFlash+" but found "},a.jPlayer.errorHint={FLASH:"Check your swfPath option and that Jplayer.swf is there.",FLASH_DISABLED:"Check that you have not display:none; the jPlayer entity or any ancestor.",NO_SOLUTION:"Review the jPlayer options: support and supplied.",NO_SUPPORT:"Video or audio formats defined in the supplied option are missing.",URL:"Check media URL is valid.",URL_NOT_SET:"Use setMedia() to set the media URL.",VERSION:"Update jPlayer files."},a.jPlayer.warning={CSS_SELECTOR_COUNT:"e_css_selector_count",CSS_SELECTOR_METHOD:"e_css_selector_method",CSS_SELECTOR_STRING:"e_css_selector_string",OPTION_KEY:"e_option_key"},a.jPlayer.warningMsg={CSS_SELECTOR_COUNT:"The number of css selectors found did not equal one: ",CSS_SELECTOR_METHOD:"The methodName given in jPlayer('cssSelector') is not a valid jPlayer method.",CSS_SELECTOR_STRING:"The methodCssSelector given in jPlayer('cssSelector') is not a String or is empty.",OPTION_KEY:"The option requested in jPlayer('option') is undefined."},a.jPlayer.warningHint={CSS_SELECTOR_COUNT:"Check your css selector and the ancestor.",CSS_SELECTOR_METHOD:"Check your method name.",CSS_SELECTOR_STRING:"Check your css selector is a string.",OPTION_KEY:"Check your option name."}}); \ No newline at end of file diff --git a/sites/all/libraries/jplayer/jquery.jplayer.swf b/sites/all/libraries/jplayer/jquery.jplayer.swf new file mode 100755 index 0000000000000000000000000000000000000000..340f7f98d0d363bafa787e2bcc7422e15fb7f41c GIT binary patch literal 13714 zcmZ{JV{9f2&~3Z5ZQHhO+qP|cYukEi+uGXR@~OGCecvzl-$imV{C6gqN#=-YsUfa9 zf`E8$wgtfW>y6(1Yz3rfMqN!zg}8B}?ENLDRt!duApxaoidHa%*aH34Mxc{HkFvp< zk{4EbgeVhC4nB-$3E29s;eJWdP2KIKHkw-c+9n&ZK*LYV4eUeYDhJL@L(PgcEfk#O2iy& z3+q_1kYMcFE5~Xn$==SB&4Wt|Y0mUXark^3z@+!Gk}7R$O9!o9wxhblhz!39Kf8x7 z3%fcPj_WBl-WKC*&F{t}q({|Hy6*98XURU8xHdmUpuo*o}EHc@Ak-&tqY zQKbKV_QaA|RgcO@5zMb!EKn{=lP z#auZl!)`V$PZcFiWg4ZAwOK%~a7qTTFkq(^yKH7Rgj= zie)l!b|2SPI&>z*i&#f#$`3J$p=tDBfHKHv8QXRHGl_5~PMk`&`>76InkMv?i)a^}heVtZB=p%n~- z-`C19+E_(n2O*48GS;3`V9d>=`3op85Z%Ub1agN>--H|e6+#%at5@3fTALy?f5c$d z-TA1JVB?myW{}E%h0h~AdX9=lABa=q2+)<8N#JU($FkW;s34F3MeVa>pPTx|%*!51 zQ#@aQ!te1?a15(z@_u2iDteoA?DPDK8en(!+S%7`rm#CGJ|C0e9psehm@GifP*cY3 zt0|oO7pjRg`Vu;sWBE?{p8q#n+JX%8`kHtVm&~bGbnRU6**ZRNi%^<84;JVAa_op| z<5xt0`|G5Ea@<1~9;vKsEj11-!_avt$sbol9n9YV_&*60(hShp!U61^C=XPnaqup1l=Jn6eR)hM2m|5xCmreOp!BnfCdd z@vR<814k-o$CDx0k80r#V($)so;3(_#UN3`9t!IDYbA1Kl&Zm0DU0P3WqazXb~c@U zBfc^+kVtB-1`UA3($piHHZAtLU7{G_VKeyt%c!4;Pl9FXk^EFO<+jJDNL`DkAJ6cj zxGF2H^}^duG-|-@TZp0lG>jH2hIE%23}1le^vb4LHBlulyrc_sAF+Cl+RT&dW3&>~#c-*1-~Ka8q5olfBKTLy46l%{p^b6Vy&0gYyxRj8It7hUf=%qE7lPlLW!?haY z4DHXQV)HD@wPe_h9`{R6S%N&&D_IHsW^OL@2psg6vjdy4ejO7oW;%J6wC1T)$pU)! zb_uj%MlaV1UU7N72nNb^=D>l2^fmJ#NBByCNk=**OTGI;pFpSH?;1G>&L=a{;2y&mQ*L2F26c zhZ>nLZw934B4etOrm20^w=uF+V-42|fszCmxvds@WX%f!gMlkH3}(lmcAI|V)|tsa zLHMTatRi?n>%!i_x^f2>QU2X>tp%39X@&Syz9h6MRo+Gp^d}PpIQO^I{A76{d0sS% z^>&Unw_G|%4T9aix-N&IK5elVIea;nwx{&8YaScP#M2Mh9#0RpdMBLgZ7XfQageGp zOT=>bWUcIZnp!DDq4-Imn-Cstbr5X{u-6xhoZuN>eKg^}q zX`3g2NB~+SPTTaaXhZ3;mCC}?hWzCv-K}j~Zp|gSRLEn_O?vC+LXcg(ZArAlx!KvJ z=0*zdB2&u zs`Bye6kUvo?&4K?JD+Yux}(-c!xvQ7rxv^1%Cs6JNZ+c-N|L8Kx7;r{r7S*M=@xZz zlyQRWOg)30=!h1aIYpCzoxGIc3uP_GQTI-I{a}psV@>(p)RXKZh6WhZNj<`yfi9Gs zMX%@WO#s?G*`6{IM3Yy~gKt&~@>SzTYep9b4p#7*Z}{T7`A=`e!;^{>wnJNwlHGZh z8kgNZ48en*qO-J7FIYu8AuE*@@zi+}UQdC7=TO4I^vNH;UyHl@&D#rfUy(_YZn79u zxV|GURF3}mncPIFntzSFD$634GK`5abBJzWH*!A-7+UO3S9ww(Cu#In#!7bjo;80$ z6MQ_L>efJtp)PJn-a3*tGspmhf)1O>YJ4B1ELk(qYVd}oqk9;Z2lx!@!-1~vLoE0Z zZl#dCOElPqxJ$SRUj-s#7=jEd6S;{OV9=amFi%O-;#1k*JzJmK!1k1kq#N>f))M0-Filu!bnxDBJ&9td9};5R_G1wM8gU{=LWT zvdr&XN8}|Gh$eFEc8x(?=4W2G&NtZU{#{(qqW|Y7jPApGYVoop#9yl z;o3e-gFzDjcgcEgA{}~S@|TnqZw&{U@m$f`MFxHsU6JwL>A_qINq@o`zPV#z&(ww; z=PEA3o@$NZLc4QtHy`>@qGYJ7lx>CJN`e@@#f#$Cbk5}bA5W6d^mg4A4Z*h(-~ z16UsgEfgWWvwPY_j~4v*e+YkMFCRnIow zv!5-#?miAEzp7BG%6HW@p3+$c;P0sHcv?efD*^sRSvNqWMpB6i+(s*O(-Yj&D<2Yc zVU>3XVLreIFjn3rZ04#ju>K?@+384^WR!~$Vn@y?q=kBRMMdfN{DN(BJ2oP#u4^5y zi9NQwT>?GL-)BhXl0fu0HYBs{wJ$N?bFl5@yl-QPFv(p~yOS+m^=7ET2p~z2RHo%e z17)I*UY??9z`eO1^SF{gYH<1IEy0}rJ0DxuL`kw_A01YrMTSbZ z<-$a4uE2DeMWcJYn9~+$RV)@1UU`SH?@`LBbh5ykAEVgL-(>lpt~Y4iCTVRBT5b>l z1JS*r>LJ6CF4BS?7DHvrj2(B^+y;#g<%_R2aXKtGS=Z|>t58x*Wyo9^MNI4hYPjOG z0*i2)VeML2aB^4uY7TkzWz)Ijl|uZ!@@}p^)QgkE5H@Z*Zq=oX`S!bc^gVo{E(Ms7e6yK`2i#6ZYB2OHOlUrOko}eK9P9Yh&&n>wCe^&uZwV@b4NY zG2$C_xjIaj05;w=6PZd!;=MC7$f=h??KSe&*LI1!J7N3Fq9YWjINy|Pc%6ZM?Ic8H ziCbQ=8}8bkJ}=7#TRd$60f#R;MLh12+vKHD>LUzQ^-&|J7dh-P@y&6rakPXS)%L9# zI2J7b@58!-`6k_5_@cmkIHI`8k~85m72M4&P;w4{6gj;usO zWu|M&&hUh4R6%9BT;7TWmcWids6lkVTB6BATVhqKRWc66hL?-qnuPX1Fkx(yy*dv` zK?|yCBO&+7H!h0Cp_tYhAA-|inf5mNMQ|%uLczE+D$|8$QLo67REKkm|CSMz$2?Fb z@fVdxNvIN)M>}99LBu+MCIP_RfsrJjA5fD7QvX>LU4eFqLmr1^5&NAjicj_DPILv9 zMeg^8=nP7U;%{FPMP$=@WCT%mSeFvyhwv;W@l@nM5=>~V7HV6J`iPP<^L<_k^n6@EU_o-f+7nX9)01bb4y-Oy`JjI(q$`VGNY|O6PnMeYtQtN_~Oh zRXTl_{R^~uwg@^BeVKh(7_9+k28?=(PzEgf2xBW4&vxTe==HA9FYU$$aJ@-zJqT?C z?P>8vUP{?DFivI@0ixFU2`*3|d?$!AiE%P@*KZgPxEP0$GJ`bt-zjy%?Vya1;u4cM zCFar8(a|Y{Dob>-2PI`nX?ZlVs3qony86F5(MxZH19A3T(;9>WDeh}Pw7}{?_2D`Z z-5dFW51xYYK)661A-8{ZVmRaNc@7c;=LhqFdVyX;Zi97VITPuSho=HRVMzfai?l6=#wl#qGuq*_oZ}C>)4- zi@s;WNcjo=<~C6%^-a2GrJvRp{%J8t7pw)^0BQ);3+j!Q1ZfTu7HkmQ0pbMa3HA&U zi1-SzM=;0)I`Hc=2kyoxISBd{`j&5SJnIqymFyk}_5S zJ)d&_RDZQXZPr@K34HgdGIty=3!%xDn`ctp5+zqAjqEYAVM&nhRfdU zgcImC=wFylG-s?m$3cN$KhT$|gs{Q2FKR&$Z{%C#$RKSG{_2uX?md{n)ZhvbrJ4k* z-`_D8-k?^Dei*kov{SnvWuX5<{T0>(P=ny6ruq~Ztw)|y6EEj4!hOwg%A*=kJCGo;9YjkHeJE_*@|g4xoZ-kLSywr+hpoH{wz ze#Fry`HewqhSO>HQh6?tHWv>zi)vp`v#D*kWOn`VG8ecMv<}kj4ur|i*kpDGse=LV z$xylEyjC!o2McLkMyVxVh?EE|Ql2+j@(TUgvb6@0w-viKR`bp?-n|Nuqza^>TQcdQ zD_`_YC*dU*vXoI|X^>y%;liQF((4Muk;KW&5|+NHBoty?p&DIk0I$hM$Lw9QWj_nwLiwA_b1>EbWdPEm_tXe$fH)v= z>X9W|ka3yH{Jl)RFr}{`quU$OKmUzB<&RPld7)T}FQLqjQZhXTVw9eaiBCv!iecI* z@dpl{GS4LixmBVUuWUMzQrdf9cJi>1N!gv&Lrj2z?VU$5`jn zcCfl_d6?yn&;gSGv+kOkZ`SOweX^HjEzrTkL%A{N!1&D&M&(F%pfkqls>fn9x}Ux! z`-(fq>9)n(pD-fU(e(y7$9UAP+Mhh4*WvSOIoIyID^ctUifKV0(g zX>~zHJ&D+dN6>iK=Si6K&Dg2DvRZafU+~ClXC2#)jp?CZ62zg`{cXI#ZsA*bY(+cs zY~jsI)Lvdjgwb7cc$VxzrIG81uR5z%#vQ+%ICIZ!S*#MLT}GHXpzFG!yoO@)J-3}( zif!26x9b9qV;YTPA>H0S@jHW6+{g3#qakh2Ebm8`E78U5GW)~52+TmaA888i`K2L= zO9DnL960m6@ftds1|8tp^IiE~1m?UT9W&jyhrNtvbiVWT6%S#7Fz$%OXUP5WPi6$v z+jIP#s&we0TVo!&xZ_O|f7^Q&tZRQ5Z+AEeTkq&q8EuYnXW?=(B`Bpg!DSue{!Id(2zb`LnJwur_dDW#AzHtVgs&JyACM;| zrO_%cO_YQD=1QE~LY#-U1!=;H3JN8`Wp7F}pdZ#EF03g&wsa50se>09r%RjsK7~ty zJvIMP>XI1wViN8z3zl{GjxH~?URsP@y^Sp*tVUql{9&sf4CMJma0=A%&FRrn!9Smx z2sy8w7zz#p!MMiyPgxM@P5iAvtcls$yGg7%Et}tILY>@ACG7q}Eo<3vV<5;qCTV$6 zP)gnZ;vUzP2>u+G;POH;xVz4>DggNxir3PG?Alpv^5P_I^X+eLi_T@!#y^=2d+uBT zzTBOh*--ER{C|a0Nd!lQk{co4BiL&Vo1G(XY_)~r_o!N!12ZEHx1#Ag0OUn4cV7R_ z9}Rolv_yrdAmcQvvJolV;~e)_=u&@qUj7~GdHJYB)~WG|5h=XmP4~_*>Ur6yM3$+R z<$bgG`#g8=NR@iID65NOcki+W!i+nHy7Jm@?~|Z-y+%SfQh6&Q-yE+UN8PE*?H;#r zbEJbD8C=~TNG*T+Q$!_#=l~^4kA(w5&SB2}3w0ToH;8710+mlV+pj)|6M$MOfgKn`X zl+zynthXSkTKQKaE*(GPfWTVzqTI|`xutt5&W^q0dd_0(?3pKY!)U~v;S8E2A$G`s_h^tLbss|BQtkZ z*HP21OQ-JGvMuBPOzPbX=scQ6W^~5>zsRN(hJtbKK;OIia{}H1LX`!|AIeLDGuBJAjdnOe3y*G;Kn)p*#=1D zV>uWUy5F3n=Ehqm0Wf3xUe-R|ZoN^$SEzQj?y7uIY4)Oc`rbbKax}SV+QiPL{jtgG z4l;3P!d?2Bmwb77UhPx8`7U4V^M<|&V(A`e@F3C~^y?b>FpA%$5c3VPc>Lb;^Zl7U z6NqDra>I9&2Lhwb+2>>7nmyQNm@(EDWT&?}eFQjtj%1F65weMs!`RF4r6I*KT^Vnp zTW^S5&)$h>)zyS1Fjjokw@HuHKa}!KbP{vT52y|z-wpDL7jN}TgRW{8^_mxd>z6hx zPP`y+anuIsapKCT^5)?N)Fh%aPFp8%Y#%Nq$5>*?P)3MvfKN5PtE@bzU%VNJ%x~$8 zu_=01E4Lc@3W}Uu!|GJ{?CS=I_=wiW-60WIlqZbM5995|QyZuACc)e!PygKtqe&%< zd&I8faJ<9P-Zi7f1Jl_CL7M20Ouw$X!OVaG4*A=y%D*zUk9grN@MYfwnj^6R!zKtV z`lFHr#{7|p{lZ0>x!wsS?_BC$p<|Sofu$1#=KZ-@V?8&P2JUdNBqyy-`MlWQJl;kP zi13j?A;XZgyaP^AcvZJ_U9}?C=InJn$!mQwJ3p>ALTx z>-H9JvuzxbGs(wtK}THjRxJ|-W<~+=WW5Wa3lt=s>XzfPmaLuF!4%v#c_kK$CH0&u zF?dJgaZ7vJuJhL}=@tSLdt~ikV>(5gzOcJ>o*XeZ2j3ZO&WYt@LI^Gy_?* zx1b+3CASZ8m=23>5ZY+z&~dU<6hm~%*K|4SR&q)R)Y&t(@aGn}Yatf}Tj1i^@-f+` z-F4d_4{IA^aPRk!p5sV%;P4-7CP-kI?hPtAVON9j-4bbQX_zX9ppRRPqyQCd0fSq* z{{Q`|F;BLt--VLa|9Gn%bGjXaSMz6_6ddvBGx8qxXcGt%21csob$0l4w|blQSL3k1tt$|3iBq-RmjoM-WmLo`)O+x<>~^*&V~%ixG5rD?hspL)&WMp%fE85 zH!$Ola%y6QTDuo6G0U}1vF?fgGk91KKDNDWFjEs0ijR*%?`c-f7Qxt$)W0+=Rk}e#tyfF;7-vniD@#EU1azc&I3Cdn1jNLYRu>JU zFQmT2b1$g7wd$qMLf%P%ZMK%dahGT@16cdWtAvmzD#6+H_e_@3p_RNEsKfE!N?oLd z$bfu+{H}n{X0br+_S~{zN+M&0^Wj0t?G4L&BD*E7OMgIQFGJ!ts85ghmM&|fsx)Ko z#1H%kd@O4S-|zIP!F>8FBpRwlGt1SVAVXHP{!A5dTB@+K&wv>@p!uc|;We{%T>>4LL9&IG`93+exJSr2 zV`63Zi4GLI<2@FV$oMst(z z6H#skSjzb3>I3RDg1@`PWxz~q_Fh;Nu#tfQIf6*()~_P%>OE`s`8UbcnF2P@oq|@V zLQ=>hhCFf>d)L3Z^zBdleESX3t9CrydWewMJ#7Z$poLQG7@68-U)}0qJXBr@HE9`` z0G&w8)SbubyaJh1T8KeNlY7*$*Y~JiFK27+$v$I5y6ysKR+71Oej9t3ZVja}NER#8 zf5}_<+yTl)Vx@CQrE5RoGzGSkfFB++vU-L*5Ho4EA(xOo;87x(HF4q>He7uwR~KNU z=kL;vgVC-07gpX?*1x99&8}32C;0{Q;D>7RAj9+A&^hETiQyNvE7cI{>+%WV(^_gN zx%F`j(kLQg6I?WDJ!a(B^a85>aY_GX#jW%)Py969)S6xWMq6Lm87~HxOZ!1&Iumop zfdrrgl104k$h%-99aY=_+^?W9C&vUtH7G+ zkjI!uK5#mYph&LERw*QppbNv&(|2LOHIeZ`mV(L5;NW36C_t z-WRm=I?imi8YZqKGguyK6+OL8JmqLH?Sp$zVn)opt}7CkO$a3Ao!l{kskA(Il`&}R zi09S9KmM{K3f?e6SgQl=5*5eFvrw{XIkx%LzKDqc<7ED8ku!J3B{mw@+{rdJ-KmIQ z?GU;EI{d8*?(|8Y-(U6a0RygLdnTyr-GSMt-r?s*$HYRm#B{;@fHs|KaKegNKYoLP z3hOOfCq1wKR>G&&`OGxID)x7bT^Zi#_3AaYYAimZly6zYT!&ivm z?S+TqPFKDHPP4Jz=1z%c zqLHPpaHS@St!Hcd1JPGo<5^agmSUi6c<`1dY+r;=M)Xn+n|>=K1rdcd``Tk{ntZ6& zmgt;-ugsK(4wc*^kkTo#8qYJ0%{(~kkLMJW-I=4!n`eBIfXJ&EXD-Q;9faAxUjZ`; zC$(l)tS{ycF%{Oa=|@P6Wr=K8XG@Um{7I?S7EqYp#9a`GE+RP(2sJYZQLn@d?pOU$ z`Fn(8$X*Dnut3e0+m7v*EM8GU=u^N*uJ#@uqYssR%OA&d1-JCf+{JjyNBZb`lL9nr zg=CJI+t!zTV*TkO08(MZ_c#4|S%mDy{uQcO-$&)K{_n~mb<;a(SWQ4n%9ET z5BiH1dhYvBN}W5oWF3qmgz*OMk_42pGmK51ZekS2XefYng5m6Sfm*Lc}z8~M>l$@ za9%zJWjcH@`t5pc#P&}cJ{UaD-89Q`UQSseOn8w9cE0 z)kb%muzjmeE|b7`Xow7DTE>r6Qh)@1>F!S=N*y=ZK7N-;-_=x(@6I7(3#7jm3j50@ zlxg)PXuSW3#767SKB_sPID|9)chB{wDodEohz&k+X3e%?z+ekefw^GBW(n_e=Vew zKFQ>oM&9}(`r9G%LDorzNQt(t%=~D*$6mU1gZif+RYhWN6gaGB-E}Xxs_hLHPRt&y zwTj(0{c$!R-4T5&%9kUj1ByZs9-*!(3DVjyHujaRDj1ZE!8WDGsKX*k&HZ~;-W8g+ z)c>_8`Xw0SRRZHEd)Ok-ajlW&N{d$GOaFG{az9MnF#7ri~OqMYp1#6-pD_!Qi#LRdR8? zK>qN!WKt4PEv#gA$y!BImlBE~e{Ha%cbNsdQ~JvNAFRE|rVX6E#&Qp7jdleXp*G$@ zTnQh~#>UpJM~?>;;Wr@ZWplOGwPIZ6MaY3ifVV96gfw07N$DAV+A^ilJGa{{3iDgm ze`l+?QNy5v@8wsUR8WZO^1XFu*eVh;rcPgCqZSc)%kr)1v2qw+JamL&M0o+&vEV%- z*4x+704lw&jo9u4cm9%}19w0TZUqdiO@McR>QAQpPA(Z)nsI-^e}b`>vfp>>)dUun z+R-zADpBP#e5l;K0J^yN+~R7pl@_l*9h`nG=|BWTdyS3L(YE_m;*i#1B2LV{8&=Oq zW^m@T`^(+7!4lG}!Hr>81}ugb<*`MG+^Ty7?gn^NDRpyp*KuZ%TLtbD?5fi2dc~He z>7rKCSUU2TPuAKC3niZt;aG#qD#H$du3QeYX!&XSho_sUF!nl@gQxJ#2>u%QBY0CY zNLt?Lc_9?Hq_aeHNR0l2xY`Ln@v{wt6OPk2-_fGyDY^wU?(uvrtm?GEJ9njFSj}fJ zjTY3Nw0V^J)!Hww(F*4y)By74+?G0X#_$9T1mV{D<{eMkQX4~)pZk4Ov)QHLZn6an zF3!tew6|f5Vmq8!vn233-;V~Lc?1694NC|sxIHg6ME4^VpQ!R&Y!?GQQ9NB$-7nns zA`R4_T{SRZ-ZB)sQ5#r_d;UQu;X=2kZ`da8lbGS$B{gUNyb+XkR}oiJxg~DOu;D=z z7k;b1k)Ih=B$EUWl}eSwvb(C_-xNi3gU#T)kKy zYTW<|ivp^?z!}1eQuu?hF&U9C{sUr)PVnqw@{nQtZ+uf7mjX}{uBm5 zBT^Tj3#6p-y9C~$2%G0UW|aP`3-2|R-!eK%K>DB3dJfD5yWU#;y6YELPTx~nh+irObh^k71aH9#AXIPs{GEl9aMZt)&2Us$Gy{3c3q&(4yzw{4o&~)H=zEBrtV?I>DQZlUc`jtCB|f;swg*l77dB6H)PC`ue8frgn_cOge2~SO z>wL&wf8zgS`FjBaVU0gd+X?w&ceUoc{8_pj`_Zf@wCGdda$`-7S%cz62? zKKd<_pLzqpUIL~`@w`9Ywlgh~AACL}uk}XB@O(Zfuk}XAa=kw+ul2^sa(zA^wmU+k z827HQT!E5=T}d5Ae*$uSj!1X=BR&|9k{Nmf=w2N5lk0i|@Ln7alO1}$Os}`*$gm!s zueQBt675f~GM#}I{H`!g18E=id&zP>ABfjIF;bql&(obZxP)DC9Y%8j>vt2!yUHtOL<=CKVLSVk3` zuykpj?F0zUGpz`ff)!5X7aw64AEg%``cDGm{_`WH>JYm5U>4euct$A%uYT1K?TpML zU2j@{h}5`0k9He=H(>UXo)Ezqu?Z0L8@{@~N)9dWPaD5k0Qg)67V^1~Wk=S-Zsqcs zk96)h4i}v>4S%{tq%Xs{;D@h=tt99V_#e!+E+G;f8t{;e=x_wSW@iMx-r_0-P<|e! zfw@Oy7DwMkqi3myD_?=G{$4^iAvM|ARPH`k{!&IDV) z+&#h=_1(XxxqI_Zv<{n3arFxYp;AMpR|>aRKaaV4TM$m6cz+k9hP+-LsJ#X8-f3U2 z0}Ua#SVQbCO&m4n3pL(IJ;QkSK2$jZ`SVfT1(PFe8f-rT*K5e1dW4GBAk4lg ze$=hvIvY;;Xs*1N$Ak0YW%>GF5S)1W_9>pYdhz6)yxm}T53dTi~{efda z2Ap;t<}D*F8>P(~790Pn?Vowyw%el@U7Y_cyl`4OCbfgax&A0QduBIAMS8^ZCa(u!rliFv| zS`H}V`Y!auL2y2>l()XE`UY9qWc}`=qpGfcNPYl$(!z!H`46n(+h02E${}rFZC! zzmo>g%l7bN2G=KX68B`fx<4HgNDEh)F#$y%(2V+~&3p1KG~IK_YdvD>Ag5HL{0>|T z^8IS}qs&7T-9{^Sx@UQ)YcCtQ5$W%!>F1yh9E4QSpZG#@=IpEsdLd384muyM=uvV~U;K!kZ!K6zEj9(lnp&QYOX`A=E5^og{OYK|h5U9u-7B04%A9&o zXSjG>N4~hd-6;xm0LW62J1YfFFi(Z}DR@^g|%cOof`4iC{{NJrGnKN&{ zYwnMfsuiOPOM&*@nLl*gR zze?&Lr_TH$oN_~4UlxU#IF-|X=>R>!+B)~CNT8Qh>=<*JC#|O}I}&%&W;b&NrX>fa z9g~BY-WdHxy*3nmj-^mwP&2RWq7|I!YOa?0MhQ0%Jcd|Gd+F Kh=yOW5&svT>H|gq literal 0 HcmV?d00001 From b1c499cb7011cb40acb5db214e553bf92de6ec68 Mon Sep 17 00:00:00 2001 From: Willy Karam Date: Sat, 7 Mar 2015 23:01:55 -0500 Subject: [PATCH 8/9] Adding CKEditor library --- sites/all/libraries/ckeditor/CHANGES.md | 720 ++++++++++ sites/all/libraries/ckeditor/LICENSE.md | 1264 +++++++++++++++++ sites/all/libraries/ckeditor/README.md | 39 + .../all/libraries/ckeditor/adapters/jquery.js | 10 + sites/all/libraries/ckeditor/build-config.js | 157 ++ sites/all/libraries/ckeditor/ckeditor.js | 946 ++++++++++++ sites/all/libraries/ckeditor/config.js | 38 + sites/all/libraries/ckeditor/contents.css | 134 ++ sites/all/libraries/ckeditor/lang/af.js | 5 + sites/all/libraries/ckeditor/lang/ar.js | 5 + sites/all/libraries/ckeditor/lang/bg.js | 5 + sites/all/libraries/ckeditor/lang/bn.js | 5 + sites/all/libraries/ckeditor/lang/bs.js | 5 + sites/all/libraries/ckeditor/lang/ca.js | 5 + sites/all/libraries/ckeditor/lang/cs.js | 5 + sites/all/libraries/ckeditor/lang/cy.js | 5 + sites/all/libraries/ckeditor/lang/da.js | 5 + sites/all/libraries/ckeditor/lang/de.js | 5 + sites/all/libraries/ckeditor/lang/el.js | 5 + sites/all/libraries/ckeditor/lang/en-au.js | 5 + sites/all/libraries/ckeditor/lang/en-ca.js | 5 + sites/all/libraries/ckeditor/lang/en-gb.js | 5 + sites/all/libraries/ckeditor/lang/en.js | 5 + sites/all/libraries/ckeditor/lang/eo.js | 5 + sites/all/libraries/ckeditor/lang/es.js | 5 + sites/all/libraries/ckeditor/lang/et.js | 5 + sites/all/libraries/ckeditor/lang/eu.js | 5 + sites/all/libraries/ckeditor/lang/fa.js | 5 + sites/all/libraries/ckeditor/lang/fi.js | 5 + sites/all/libraries/ckeditor/lang/fo.js | 5 + sites/all/libraries/ckeditor/lang/fr-ca.js | 5 + sites/all/libraries/ckeditor/lang/fr.js | 5 + sites/all/libraries/ckeditor/lang/gl.js | 5 + sites/all/libraries/ckeditor/lang/gu.js | 5 + sites/all/libraries/ckeditor/lang/he.js | 5 + sites/all/libraries/ckeditor/lang/hi.js | 5 + sites/all/libraries/ckeditor/lang/hr.js | 5 + sites/all/libraries/ckeditor/lang/hu.js | 5 + sites/all/libraries/ckeditor/lang/id.js | 5 + sites/all/libraries/ckeditor/lang/is.js | 5 + sites/all/libraries/ckeditor/lang/it.js | 5 + sites/all/libraries/ckeditor/lang/ja.js | 5 + sites/all/libraries/ckeditor/lang/ka.js | 5 + sites/all/libraries/ckeditor/lang/km.js | 5 + sites/all/libraries/ckeditor/lang/ko.js | 5 + sites/all/libraries/ckeditor/lang/ku.js | 5 + sites/all/libraries/ckeditor/lang/lt.js | 5 + sites/all/libraries/ckeditor/lang/lv.js | 5 + sites/all/libraries/ckeditor/lang/mk.js | 5 + sites/all/libraries/ckeditor/lang/mn.js | 5 + sites/all/libraries/ckeditor/lang/ms.js | 5 + sites/all/libraries/ckeditor/lang/nb.js | 5 + sites/all/libraries/ckeditor/lang/nl.js | 5 + sites/all/libraries/ckeditor/lang/no.js | 5 + sites/all/libraries/ckeditor/lang/pl.js | 5 + sites/all/libraries/ckeditor/lang/pt-br.js | 5 + sites/all/libraries/ckeditor/lang/pt.js | 5 + sites/all/libraries/ckeditor/lang/ro.js | 5 + sites/all/libraries/ckeditor/lang/ru.js | 5 + sites/all/libraries/ckeditor/lang/si.js | 5 + sites/all/libraries/ckeditor/lang/sk.js | 5 + sites/all/libraries/ckeditor/lang/sl.js | 5 + sites/all/libraries/ckeditor/lang/sq.js | 5 + sites/all/libraries/ckeditor/lang/sr-latn.js | 5 + sites/all/libraries/ckeditor/lang/sr.js | 5 + sites/all/libraries/ckeditor/lang/sv.js | 5 + sites/all/libraries/ckeditor/lang/th.js | 5 + sites/all/libraries/ckeditor/lang/tr.js | 5 + sites/all/libraries/ckeditor/lang/tt.js | 5 + sites/all/libraries/ckeditor/lang/ug.js | 5 + sites/all/libraries/ckeditor/lang/uk.js | 5 + sites/all/libraries/ckeditor/lang/vi.js | 5 + sites/all/libraries/ckeditor/lang/zh-cn.js | 5 + sites/all/libraries/ckeditor/lang/zh.js | 5 + .../plugins/a11yhelp/dialogs/a11yhelp.js | 10 + .../dialogs/lang/_translationstatus.txt | 25 + .../plugins/a11yhelp/dialogs/lang/af.js | 11 + .../plugins/a11yhelp/dialogs/lang/ar.js | 11 + .../plugins/a11yhelp/dialogs/lang/bg.js | 11 + .../plugins/a11yhelp/dialogs/lang/ca.js | 13 + .../plugins/a11yhelp/dialogs/lang/cs.js | 13 + .../plugins/a11yhelp/dialogs/lang/cy.js | 11 + .../plugins/a11yhelp/dialogs/lang/da.js | 11 + .../plugins/a11yhelp/dialogs/lang/de.js | 13 + .../plugins/a11yhelp/dialogs/lang/el.js | 13 + .../plugins/a11yhelp/dialogs/lang/en-gb.js | 11 + .../plugins/a11yhelp/dialogs/lang/en.js | 11 + .../plugins/a11yhelp/dialogs/lang/eo.js | 13 + .../plugins/a11yhelp/dialogs/lang/es.js | 12 + .../plugins/a11yhelp/dialogs/lang/et.js | 11 + .../plugins/a11yhelp/dialogs/lang/fa.js | 11 + .../plugins/a11yhelp/dialogs/lang/fi.js | 12 + .../plugins/a11yhelp/dialogs/lang/fr-ca.js | 12 + .../plugins/a11yhelp/dialogs/lang/fr.js | 13 + .../plugins/a11yhelp/dialogs/lang/gl.js | 12 + .../plugins/a11yhelp/dialogs/lang/gu.js | 11 + .../plugins/a11yhelp/dialogs/lang/he.js | 11 + .../plugins/a11yhelp/dialogs/lang/hi.js | 11 + .../plugins/a11yhelp/dialogs/lang/hr.js | 11 + .../plugins/a11yhelp/dialogs/lang/hu.js | 13 + .../plugins/a11yhelp/dialogs/lang/id.js | 11 + .../plugins/a11yhelp/dialogs/lang/it.js | 13 + .../plugins/a11yhelp/dialogs/lang/ja.js | 9 + .../plugins/a11yhelp/dialogs/lang/km.js | 11 + .../plugins/a11yhelp/dialogs/lang/ko.js | 11 + .../plugins/a11yhelp/dialogs/lang/ku.js | 12 + .../plugins/a11yhelp/dialogs/lang/lt.js | 11 + .../plugins/a11yhelp/dialogs/lang/lv.js | 13 + .../plugins/a11yhelp/dialogs/lang/mk.js | 11 + .../plugins/a11yhelp/dialogs/lang/mn.js | 11 + .../plugins/a11yhelp/dialogs/lang/nb.js | 12 + .../plugins/a11yhelp/dialogs/lang/nl.js | 12 + .../plugins/a11yhelp/dialogs/lang/no.js | 11 + .../plugins/a11yhelp/dialogs/lang/pl.js | 13 + .../plugins/a11yhelp/dialogs/lang/pt-br.js | 12 + .../plugins/a11yhelp/dialogs/lang/pt.js | 12 + .../plugins/a11yhelp/dialogs/lang/ro.js | 12 + .../plugins/a11yhelp/dialogs/lang/ru.js | 11 + .../plugins/a11yhelp/dialogs/lang/si.js | 10 + .../plugins/a11yhelp/dialogs/lang/sk.js | 12 + .../plugins/a11yhelp/dialogs/lang/sl.js | 12 + .../plugins/a11yhelp/dialogs/lang/sq.js | 11 + .../plugins/a11yhelp/dialogs/lang/sr-latn.js | 11 + .../plugins/a11yhelp/dialogs/lang/sr.js | 11 + .../plugins/a11yhelp/dialogs/lang/sv.js | 12 + .../plugins/a11yhelp/dialogs/lang/th.js | 11 + .../plugins/a11yhelp/dialogs/lang/tr.js | 12 + .../plugins/a11yhelp/dialogs/lang/tt.js | 11 + .../plugins/a11yhelp/dialogs/lang/ug.js | 11 + .../plugins/a11yhelp/dialogs/lang/uk.js | 12 + .../plugins/a11yhelp/dialogs/lang/vi.js | 11 + .../plugins/a11yhelp/dialogs/lang/zh-cn.js | 9 + .../plugins/a11yhelp/dialogs/lang/zh.js | 9 + .../ckeditor/plugins/about/dialogs/about.js | 7 + .../about/dialogs/hidpi/logo_ckeditor.png | Bin 0 -> 13339 bytes .../plugins/about/dialogs/logo_ckeditor.png | Bin 0 -> 6757 bytes .../plugins/clipboard/dialogs/paste.js | 11 + .../plugins/codemirror/css/codemirror.min.css | 1 + .../plugins/codemirror/icons/autocomplete.png | Bin 0 -> 255 bytes .../plugins/codemirror/icons/autoformat.png | Bin 0 -> 210 bytes .../codemirror/icons/commentselectedrange.png | Bin 0 -> 160 bytes .../plugins/codemirror/icons/searchcode.png | Bin 0 -> 408 bytes .../icons/uncommentselectedrange.png | Bin 0 -> 285 bytes .../plugins/codemirror/js/beautify.min.js | 1 + .../codemirror/js/codemirror.addons.min.js | 1 + .../js/codemirror.addons.search.min.js | 1 + .../plugins/codemirror/js/codemirror.min.js | 1 + .../codemirror/js/codemirror.min.js.map | 8 + .../js/codemirror.mode.bbcode.min.js | 1 + .../js/codemirror.mode.bbcodemixed.min.js | 1 + .../js/codemirror.mode.htmlmixed.min.js | 1 + .../js/codemirror.mode.javascript.min.js | 1 + .../codemirror/js/codemirror.mode.php.min.js | 1 + .../ckeditor/plugins/codemirror/lang/af.js | 12 + .../ckeditor/plugins/codemirror/lang/ar.js | 12 + .../ckeditor/plugins/codemirror/lang/bg.js | 12 + .../ckeditor/plugins/codemirror/lang/bn.js | 12 + .../ckeditor/plugins/codemirror/lang/bs.js | 12 + .../ckeditor/plugins/codemirror/lang/ca.js | 12 + .../ckeditor/plugins/codemirror/lang/cs.js | 12 + .../ckeditor/plugins/codemirror/lang/cy.js | 12 + .../ckeditor/plugins/codemirror/lang/da.js | 12 + .../ckeditor/plugins/codemirror/lang/de.js | 12 + .../ckeditor/plugins/codemirror/lang/el.js | 12 + .../ckeditor/plugins/codemirror/lang/en-au.js | 12 + .../ckeditor/plugins/codemirror/lang/en-ca.js | 12 + .../ckeditor/plugins/codemirror/lang/en-gb.js | 12 + .../ckeditor/plugins/codemirror/lang/en.js | 12 + .../ckeditor/plugins/codemirror/lang/eo.js | 12 + .../ckeditor/plugins/codemirror/lang/es.js | 12 + .../ckeditor/plugins/codemirror/lang/et.js | 12 + .../ckeditor/plugins/codemirror/lang/eu.js | 12 + .../ckeditor/plugins/codemirror/lang/fa.js | 12 + .../ckeditor/plugins/codemirror/lang/fi.js | 12 + .../ckeditor/plugins/codemirror/lang/fo.js | 12 + .../ckeditor/plugins/codemirror/lang/fr-ca.js | 12 + .../ckeditor/plugins/codemirror/lang/fr.js | 12 + .../ckeditor/plugins/codemirror/lang/gl.js | 12 + .../ckeditor/plugins/codemirror/lang/gu.js | 12 + .../ckeditor/plugins/codemirror/lang/he.js | 12 + .../ckeditor/plugins/codemirror/lang/hi.js | 12 + .../ckeditor/plugins/codemirror/lang/hr.js | 12 + .../ckeditor/plugins/codemirror/lang/hu.js | 12 + .../ckeditor/plugins/codemirror/lang/is.js | 12 + .../ckeditor/plugins/codemirror/lang/it.js | 12 + .../ckeditor/plugins/codemirror/lang/ja.js | 12 + .../ckeditor/plugins/codemirror/lang/ka.js | 12 + .../ckeditor/plugins/codemirror/lang/km.js | 12 + .../ckeditor/plugins/codemirror/lang/ko.js | 12 + .../ckeditor/plugins/codemirror/lang/ku.js | 12 + .../ckeditor/plugins/codemirror/lang/lt.js | 12 + .../ckeditor/plugins/codemirror/lang/lv.js | 12 + .../ckeditor/plugins/codemirror/lang/mk.js | 12 + .../ckeditor/plugins/codemirror/lang/mn.js | 12 + .../ckeditor/plugins/codemirror/lang/ms.js | 12 + .../ckeditor/plugins/codemirror/lang/nb.js | 12 + .../ckeditor/plugins/codemirror/lang/nl.js | 12 + .../ckeditor/plugins/codemirror/lang/no.js | 12 + .../ckeditor/plugins/codemirror/lang/pl.js | 12 + .../ckeditor/plugins/codemirror/lang/pt-br.js | 12 + .../ckeditor/plugins/codemirror/lang/pt.js | 12 + .../ckeditor/plugins/codemirror/lang/ro.js | 12 + .../ckeditor/plugins/codemirror/lang/ru.js | 12 + .../ckeditor/plugins/codemirror/lang/sk.js | 12 + .../ckeditor/plugins/codemirror/lang/sl.js | 12 + .../plugins/codemirror/lang/sr-latn.js | 12 + .../ckeditor/plugins/codemirror/lang/sr.js | 12 + .../ckeditor/plugins/codemirror/lang/sv.js | 12 + .../ckeditor/plugins/codemirror/lang/th.js | 12 + .../ckeditor/plugins/codemirror/lang/tr.js | 12 + .../ckeditor/plugins/codemirror/lang/ug.js | 12 + .../ckeditor/plugins/codemirror/lang/uk.js | 12 + .../ckeditor/plugins/codemirror/lang/vi.js | 12 + .../ckeditor/plugins/codemirror/lang/zh-cn.js | 12 + .../ckeditor/plugins/codemirror/lang/zh.js | 12 + .../ckeditor/plugins/codemirror/plugin.js | 1136 +++++++++++++++ .../plugins/codemirror/theme/3024-day.css | 38 + .../plugins/codemirror/theme/3024-night.css | 37 + .../codemirror/theme/ambiance-mobile.css | 5 + .../plugins/codemirror/theme/ambiance.css | 77 + .../plugins/codemirror/theme/base16-dark.css | 36 + .../plugins/codemirror/theme/base16-light.css | 36 + .../plugins/codemirror/theme/blackboard.css | 30 + .../plugins/codemirror/theme/cobalt.css | 23 + .../plugins/codemirror/theme/eclipse.css | 23 + .../plugins/codemirror/theme/elegant.css | 13 + .../plugins/codemirror/theme/erlang-dark.css | 32 + .../plugins/codemirror/theme/lesser-dark.css | 45 + .../ckeditor/plugins/codemirror/theme/mbo.css | 35 + .../plugins/codemirror/theme/mdn-like.css | 44 + .../plugins/codemirror/theme/midnight.css | 45 + .../plugins/codemirror/theme/monokai.css | 31 + .../plugins/codemirror/theme/neat.css | 12 + .../ckeditor/plugins/codemirror/theme/neo.css | 43 + .../plugins/codemirror/theme/night.css | 26 + .../plugins/codemirror/theme/paraiso-dark.css | 36 + .../codemirror/theme/paraiso-light.css | 36 + .../codemirror/theme/pastel-on-dark.css | 50 + .../plugins/codemirror/theme/rubyblue.css | 23 + .../plugins/codemirror/theme/solarized.css | 165 +++ .../plugins/codemirror/theme/the-matrix.css | 28 + .../theme/tomorrow-night-eighties.css | 36 + .../plugins/codemirror/theme/twilight.css | 30 + .../plugins/codemirror/theme/vibrant-ink.css | 32 + .../plugins/codemirror/theme/xq-dark.css | 51 + .../plugins/codemirror/theme/xq-light.css | 43 + .../plugins/dialog/dialogDefinition.js | 4 + .../all/libraries/ckeditor/plugins/icons.png | Bin 0 -> 10227 bytes .../ckeditor/plugins/icons_hidpi.png | Bin 0 -> 34465 bytes .../ckeditor/plugins/image/dialogs/image.js | 43 + .../ckeditor/plugins/image/images/noimage.png | Bin 0 -> 2115 bytes .../ckeditor/plugins/link/dialogs/anchor.js | 7 + .../ckeditor/plugins/link/dialogs/link.js | 26 + .../ckeditor/plugins/link/images/anchor.png | Bin 0 -> 589 bytes .../plugins/link/images/hidpi/anchor.png | Bin 0 -> 1379 bytes .../magicline/images/hidpi/icon-rtl.png | Bin 0 -> 176 bytes .../plugins/magicline/images/hidpi/icon.png | Bin 0 -> 199 bytes .../plugins/magicline/images/icon-rtl.png | Bin 0 -> 138 bytes .../plugins/magicline/images/icon.png | Bin 0 -> 133 bytes .../plugins/pastefromword/filter/default.js | 31 + .../ckeditor/plugins/scayt/LICENSE.md | 28 + .../ckeditor/plugins/scayt/README.md | 25 + .../ckeditor/plugins/scayt/dialogs/options.js | 17 + .../plugins/scayt/dialogs/toolbar.css | 71 + .../dialogs/lang/_translationstatus.txt | 20 + .../plugins/specialchar/dialogs/lang/af.js | 13 + .../plugins/specialchar/dialogs/lang/ar.js | 13 + .../plugins/specialchar/dialogs/lang/bg.js | 13 + .../plugins/specialchar/dialogs/lang/ca.js | 14 + .../plugins/specialchar/dialogs/lang/cs.js | 13 + .../plugins/specialchar/dialogs/lang/cy.js | 14 + .../plugins/specialchar/dialogs/lang/da.js | 13 + .../plugins/specialchar/dialogs/lang/de.js | 13 + .../plugins/specialchar/dialogs/lang/el.js | 13 + .../plugins/specialchar/dialogs/lang/en-gb.js | 13 + .../plugins/specialchar/dialogs/lang/en.js | 13 + .../plugins/specialchar/dialogs/lang/eo.js | 12 + .../plugins/specialchar/dialogs/lang/es.js | 13 + .../plugins/specialchar/dialogs/lang/et.js | 13 + .../plugins/specialchar/dialogs/lang/fa.js | 12 + .../plugins/specialchar/dialogs/lang/fi.js | 13 + .../plugins/specialchar/dialogs/lang/fr-ca.js | 10 + .../plugins/specialchar/dialogs/lang/fr.js | 11 + .../plugins/specialchar/dialogs/lang/gl.js | 13 + .../plugins/specialchar/dialogs/lang/he.js | 12 + .../plugins/specialchar/dialogs/lang/hr.js | 13 + .../plugins/specialchar/dialogs/lang/hu.js | 12 + .../plugins/specialchar/dialogs/lang/id.js | 13 + .../plugins/specialchar/dialogs/lang/it.js | 14 + .../plugins/specialchar/dialogs/lang/ja.js | 9 + .../plugins/specialchar/dialogs/lang/km.js | 13 + .../plugins/specialchar/dialogs/lang/ku.js | 13 + .../plugins/specialchar/dialogs/lang/lt.js | 13 + .../plugins/specialchar/dialogs/lang/lv.js | 13 + .../plugins/specialchar/dialogs/lang/nb.js | 11 + .../plugins/specialchar/dialogs/lang/nl.js | 13 + .../plugins/specialchar/dialogs/lang/no.js | 11 + .../plugins/specialchar/dialogs/lang/pl.js | 12 + .../plugins/specialchar/dialogs/lang/pt-br.js | 11 + .../plugins/specialchar/dialogs/lang/pt.js | 13 + .../plugins/specialchar/dialogs/lang/ru.js | 13 + .../plugins/specialchar/dialogs/lang/si.js | 13 + .../plugins/specialchar/dialogs/lang/sk.js | 13 + .../plugins/specialchar/dialogs/lang/sl.js | 12 + .../plugins/specialchar/dialogs/lang/sq.js | 13 + .../plugins/specialchar/dialogs/lang/sv.js | 11 + .../plugins/specialchar/dialogs/lang/th.js | 13 + .../plugins/specialchar/dialogs/lang/tr.js | 12 + .../plugins/specialchar/dialogs/lang/tt.js | 13 + .../plugins/specialchar/dialogs/lang/ug.js | 13 + .../plugins/specialchar/dialogs/lang/uk.js | 12 + .../plugins/specialchar/dialogs/lang/vi.js | 14 + .../plugins/specialchar/dialogs/lang/zh-cn.js | 9 + .../plugins/specialchar/dialogs/lang/zh.js | 12 + .../specialchar/dialogs/specialchar.js | 14 + .../ckeditor/plugins/table/dialogs/table.js | 21 + .../plugins/tabletools/dialogs/tableCell.js | 17 + .../libraries/ckeditor/plugins/wsc/LICENSE.md | 28 + .../libraries/ckeditor/plugins/wsc/README.md | 25 + .../ckeditor/plugins/wsc/dialogs/ciframe.html | 66 + .../plugins/wsc/dialogs/tmpFrameset.html | 52 + .../ckeditor/plugins/wsc/dialogs/wsc.css | 82 ++ .../ckeditor/plugins/wsc/dialogs/wsc.js | 74 + .../ckeditor/plugins/wsc/dialogs/wsc_ie.js | 11 + .../all/libraries/ckeditor/samples/ajax.html | 82 ++ sites/all/libraries/ckeditor/samples/api.html | 207 +++ .../libraries/ckeditor/samples/appendto.html | 56 + .../samples/assets/inlineall/logo.png | Bin 0 -> 4283 bytes .../assets/outputxhtml/outputxhtml.css | 204 +++ .../ckeditor/samples/assets/posteddata.php | 59 + .../ckeditor/samples/assets/sample.jpg | Bin 0 -> 14449 bytes .../samples/assets/uilanguages/languages.js | 7 + .../ckeditor/samples/datafiltering.html | 401 ++++++ .../ckeditor/samples/divreplace.html | 141 ++ .../all/libraries/ckeditor/samples/index.html | 128 ++ .../libraries/ckeditor/samples/inlineall.html | 311 ++++ .../ckeditor/samples/inlinebycode.html | 121 ++ .../ckeditor/samples/inlinetextarea.html | 110 ++ .../libraries/ckeditor/samples/jquery.html | 100 ++ .../plugins/dialog/assets/my_dialog.js | 48 + .../samples/plugins/dialog/dialog.html | 187 +++ .../samples/plugins/enterkey/enterkey.html | 103 ++ .../assets/outputforflash/outputforflash.fla | Bin 0 -> 85504 bytes .../assets/outputforflash/outputforflash.swf | Bin 0 -> 15571 bytes .../assets/outputforflash/swfobject.js | 18 + .../plugins/htmlwriter/outputforflash.html | 280 ++++ .../plugins/htmlwriter/outputhtml.html | 221 +++ .../samples/plugins/magicline/magicline.html | 206 +++ .../samples/plugins/toolbar/toolbar.html | 232 +++ .../samples/plugins/wysiwygarea/fullpage.html | 77 + .../libraries/ckeditor/samples/readonly.html | 73 + .../ckeditor/samples/replacebyclass.html | 57 + .../ckeditor/samples/replacebycode.html | 56 + .../all/libraries/ckeditor/samples/sample.css | 365 +++++ .../all/libraries/ckeditor/samples/sample.js | 50 + .../ckeditor/samples/sample_posteddata.php | 16 + .../libraries/ckeditor/samples/tabindex.html | 75 + .../libraries/ckeditor/samples/uicolor.html | 69 + .../ckeditor/samples/uilanguages.html | 119 ++ .../ckeditor/samples/xhtmlstyle.html | 231 +++ .../libraries/ckeditor/skins/moono/dialog.css | 5 + .../ckeditor/skins/moono/dialog_ie.css | 5 + .../ckeditor/skins/moono/dialog_ie7.css | 5 + .../ckeditor/skins/moono/dialog_ie8.css | 5 + .../ckeditor/skins/moono/dialog_iequirks.css | 5 + .../libraries/ckeditor/skins/moono/editor.css | 5 + .../ckeditor/skins/moono/editor_gecko.css | 5 + .../ckeditor/skins/moono/editor_ie.css | 5 + .../ckeditor/skins/moono/editor_ie7.css | 5 + .../ckeditor/skins/moono/editor_ie8.css | 5 + .../ckeditor/skins/moono/editor_iequirks.css | 5 + .../libraries/ckeditor/skins/moono/icons.png | Bin 0 -> 10227 bytes .../ckeditor/skins/moono/icons_hidpi.png | Bin 0 -> 34465 bytes .../ckeditor/skins/moono/images/arrow.png | Bin 0 -> 191 bytes .../ckeditor/skins/moono/images/close.png | Bin 0 -> 468 bytes .../skins/moono/images/hidpi/close.png | Bin 0 -> 1271 bytes .../skins/moono/images/hidpi/lock-open.png | Bin 0 -> 1329 bytes .../skins/moono/images/hidpi/lock.png | Bin 0 -> 1299 bytes .../skins/moono/images/hidpi/refresh.png | Bin 0 -> 1842 bytes .../ckeditor/skins/moono/images/lock-open.png | Bin 0 -> 349 bytes .../ckeditor/skins/moono/images/lock.png | Bin 0 -> 475 bytes .../ckeditor/skins/moono/images/refresh.png | Bin 0 -> 422 bytes .../libraries/ckeditor/skins/moono/readme.md | 51 + sites/all/libraries/ckeditor/styles.js | 111 ++ 384 files changed, 13305 insertions(+) create mode 100644 sites/all/libraries/ckeditor/CHANGES.md create mode 100644 sites/all/libraries/ckeditor/LICENSE.md create mode 100644 sites/all/libraries/ckeditor/README.md create mode 100644 sites/all/libraries/ckeditor/adapters/jquery.js create mode 100644 sites/all/libraries/ckeditor/build-config.js create mode 100644 sites/all/libraries/ckeditor/ckeditor.js create mode 100644 sites/all/libraries/ckeditor/config.js create mode 100644 sites/all/libraries/ckeditor/contents.css create mode 100644 sites/all/libraries/ckeditor/lang/af.js create mode 100644 sites/all/libraries/ckeditor/lang/ar.js create mode 100644 sites/all/libraries/ckeditor/lang/bg.js create mode 100644 sites/all/libraries/ckeditor/lang/bn.js create mode 100644 sites/all/libraries/ckeditor/lang/bs.js create mode 100644 sites/all/libraries/ckeditor/lang/ca.js create mode 100644 sites/all/libraries/ckeditor/lang/cs.js create mode 100644 sites/all/libraries/ckeditor/lang/cy.js create mode 100644 sites/all/libraries/ckeditor/lang/da.js create mode 100644 sites/all/libraries/ckeditor/lang/de.js create mode 100644 sites/all/libraries/ckeditor/lang/el.js create mode 100644 sites/all/libraries/ckeditor/lang/en-au.js create mode 100644 sites/all/libraries/ckeditor/lang/en-ca.js create mode 100644 sites/all/libraries/ckeditor/lang/en-gb.js create mode 100644 sites/all/libraries/ckeditor/lang/en.js create mode 100644 sites/all/libraries/ckeditor/lang/eo.js create mode 100644 sites/all/libraries/ckeditor/lang/es.js create mode 100644 sites/all/libraries/ckeditor/lang/et.js create mode 100644 sites/all/libraries/ckeditor/lang/eu.js create mode 100644 sites/all/libraries/ckeditor/lang/fa.js create mode 100644 sites/all/libraries/ckeditor/lang/fi.js create mode 100644 sites/all/libraries/ckeditor/lang/fo.js create mode 100644 sites/all/libraries/ckeditor/lang/fr-ca.js create mode 100644 sites/all/libraries/ckeditor/lang/fr.js create mode 100644 sites/all/libraries/ckeditor/lang/gl.js create mode 100644 sites/all/libraries/ckeditor/lang/gu.js create mode 100644 sites/all/libraries/ckeditor/lang/he.js create mode 100644 sites/all/libraries/ckeditor/lang/hi.js create mode 100644 sites/all/libraries/ckeditor/lang/hr.js create mode 100644 sites/all/libraries/ckeditor/lang/hu.js create mode 100644 sites/all/libraries/ckeditor/lang/id.js create mode 100644 sites/all/libraries/ckeditor/lang/is.js create mode 100644 sites/all/libraries/ckeditor/lang/it.js create mode 100644 sites/all/libraries/ckeditor/lang/ja.js create mode 100644 sites/all/libraries/ckeditor/lang/ka.js create mode 100644 sites/all/libraries/ckeditor/lang/km.js create mode 100644 sites/all/libraries/ckeditor/lang/ko.js create mode 100644 sites/all/libraries/ckeditor/lang/ku.js create mode 100644 sites/all/libraries/ckeditor/lang/lt.js create mode 100644 sites/all/libraries/ckeditor/lang/lv.js create mode 100644 sites/all/libraries/ckeditor/lang/mk.js create mode 100644 sites/all/libraries/ckeditor/lang/mn.js create mode 100644 sites/all/libraries/ckeditor/lang/ms.js create mode 100644 sites/all/libraries/ckeditor/lang/nb.js create mode 100644 sites/all/libraries/ckeditor/lang/nl.js create mode 100644 sites/all/libraries/ckeditor/lang/no.js create mode 100644 sites/all/libraries/ckeditor/lang/pl.js create mode 100644 sites/all/libraries/ckeditor/lang/pt-br.js create mode 100644 sites/all/libraries/ckeditor/lang/pt.js create mode 100644 sites/all/libraries/ckeditor/lang/ro.js create mode 100644 sites/all/libraries/ckeditor/lang/ru.js create mode 100644 sites/all/libraries/ckeditor/lang/si.js create mode 100644 sites/all/libraries/ckeditor/lang/sk.js create mode 100644 sites/all/libraries/ckeditor/lang/sl.js create mode 100644 sites/all/libraries/ckeditor/lang/sq.js create mode 100644 sites/all/libraries/ckeditor/lang/sr-latn.js create mode 100644 sites/all/libraries/ckeditor/lang/sr.js create mode 100644 sites/all/libraries/ckeditor/lang/sv.js create mode 100644 sites/all/libraries/ckeditor/lang/th.js create mode 100644 sites/all/libraries/ckeditor/lang/tr.js create mode 100644 sites/all/libraries/ckeditor/lang/tt.js create mode 100644 sites/all/libraries/ckeditor/lang/ug.js create mode 100644 sites/all/libraries/ckeditor/lang/uk.js create mode 100644 sites/all/libraries/ckeditor/lang/vi.js create mode 100644 sites/all/libraries/ckeditor/lang/zh-cn.js create mode 100644 sites/all/libraries/ckeditor/lang/zh.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/af.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/da.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/de.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/el.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/en.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/es.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/et.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/he.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/id.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/it.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/km.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/no.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/si.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/th.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js create mode 100644 sites/all/libraries/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js create mode 100644 sites/all/libraries/ckeditor/plugins/about/dialogs/about.js create mode 100644 sites/all/libraries/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png create mode 100644 sites/all/libraries/ckeditor/plugins/about/dialogs/logo_ckeditor.png create mode 100644 sites/all/libraries/ckeditor/plugins/clipboard/dialogs/paste.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/css/codemirror.min.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/icons/autocomplete.png create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/icons/autoformat.png create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/icons/commentselectedrange.png create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/icons/searchcode.png create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/icons/uncommentselectedrange.png create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/js/beautify.min.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/js/codemirror.addons.min.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/js/codemirror.addons.search.min.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/js/codemirror.min.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/js/codemirror.min.js.map create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/js/codemirror.mode.bbcode.min.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/js/codemirror.mode.bbcodemixed.min.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/js/codemirror.mode.htmlmixed.min.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/js/codemirror.mode.javascript.min.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/js/codemirror.mode.php.min.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/af.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/ar.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/bg.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/bn.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/bs.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/ca.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/cs.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/cy.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/da.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/de.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/el.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/en-au.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/en-ca.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/en-gb.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/en.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/eo.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/es.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/et.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/eu.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/fa.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/fi.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/fo.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/fr-ca.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/fr.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/gl.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/gu.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/he.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/hi.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/hr.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/hu.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/is.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/it.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/ja.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/ka.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/km.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/ko.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/ku.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/lt.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/lv.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/mk.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/mn.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/ms.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/nb.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/nl.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/no.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/pl.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/pt-br.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/pt.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/ro.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/ru.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/sk.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/sl.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/sr-latn.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/sr.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/sv.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/th.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/tr.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/ug.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/uk.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/vi.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/zh-cn.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/lang/zh.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/plugin.js create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/3024-day.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/3024-night.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/ambiance-mobile.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/ambiance.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/base16-dark.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/base16-light.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/blackboard.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/cobalt.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/eclipse.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/elegant.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/erlang-dark.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/lesser-dark.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/mbo.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/mdn-like.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/midnight.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/monokai.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/neat.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/neo.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/night.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/paraiso-dark.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/paraiso-light.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/pastel-on-dark.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/rubyblue.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/solarized.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/the-matrix.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/tomorrow-night-eighties.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/twilight.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/vibrant-ink.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/xq-dark.css create mode 100755 sites/all/libraries/ckeditor/plugins/codemirror/theme/xq-light.css create mode 100644 sites/all/libraries/ckeditor/plugins/dialog/dialogDefinition.js create mode 100644 sites/all/libraries/ckeditor/plugins/icons.png create mode 100644 sites/all/libraries/ckeditor/plugins/icons_hidpi.png create mode 100644 sites/all/libraries/ckeditor/plugins/image/dialogs/image.js create mode 100644 sites/all/libraries/ckeditor/plugins/image/images/noimage.png create mode 100644 sites/all/libraries/ckeditor/plugins/link/dialogs/anchor.js create mode 100644 sites/all/libraries/ckeditor/plugins/link/dialogs/link.js create mode 100644 sites/all/libraries/ckeditor/plugins/link/images/anchor.png create mode 100644 sites/all/libraries/ckeditor/plugins/link/images/hidpi/anchor.png create mode 100644 sites/all/libraries/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png create mode 100644 sites/all/libraries/ckeditor/plugins/magicline/images/hidpi/icon.png create mode 100644 sites/all/libraries/ckeditor/plugins/magicline/images/icon-rtl.png create mode 100644 sites/all/libraries/ckeditor/plugins/magicline/images/icon.png create mode 100644 sites/all/libraries/ckeditor/plugins/pastefromword/filter/default.js create mode 100644 sites/all/libraries/ckeditor/plugins/scayt/LICENSE.md create mode 100644 sites/all/libraries/ckeditor/plugins/scayt/README.md create mode 100644 sites/all/libraries/ckeditor/plugins/scayt/dialogs/options.js create mode 100644 sites/all/libraries/ckeditor/plugins/scayt/dialogs/toolbar.css create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/af.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/ar.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/bg.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/ca.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/cs.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/cy.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/da.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/de.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/el.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/en.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/eo.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/es.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/et.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/fa.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/fi.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/fr.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/gl.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/he.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/hr.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/hu.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/id.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/it.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/ja.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/km.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/ku.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/lt.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/lv.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/nb.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/nl.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/no.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/pl.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/pt.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/ru.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/si.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/sk.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/sl.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/sq.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/sv.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/th.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/tr.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/tt.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/ug.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/uk.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/vi.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/lang/zh.js create mode 100644 sites/all/libraries/ckeditor/plugins/specialchar/dialogs/specialchar.js create mode 100644 sites/all/libraries/ckeditor/plugins/table/dialogs/table.js create mode 100644 sites/all/libraries/ckeditor/plugins/tabletools/dialogs/tableCell.js create mode 100644 sites/all/libraries/ckeditor/plugins/wsc/LICENSE.md create mode 100644 sites/all/libraries/ckeditor/plugins/wsc/README.md create mode 100644 sites/all/libraries/ckeditor/plugins/wsc/dialogs/ciframe.html create mode 100644 sites/all/libraries/ckeditor/plugins/wsc/dialogs/tmpFrameset.html create mode 100644 sites/all/libraries/ckeditor/plugins/wsc/dialogs/wsc.css create mode 100644 sites/all/libraries/ckeditor/plugins/wsc/dialogs/wsc.js create mode 100644 sites/all/libraries/ckeditor/plugins/wsc/dialogs/wsc_ie.js create mode 100644 sites/all/libraries/ckeditor/samples/ajax.html create mode 100644 sites/all/libraries/ckeditor/samples/api.html create mode 100644 sites/all/libraries/ckeditor/samples/appendto.html create mode 100644 sites/all/libraries/ckeditor/samples/assets/inlineall/logo.png create mode 100644 sites/all/libraries/ckeditor/samples/assets/outputxhtml/outputxhtml.css create mode 100644 sites/all/libraries/ckeditor/samples/assets/posteddata.php create mode 100644 sites/all/libraries/ckeditor/samples/assets/sample.jpg create mode 100644 sites/all/libraries/ckeditor/samples/assets/uilanguages/languages.js create mode 100644 sites/all/libraries/ckeditor/samples/datafiltering.html create mode 100644 sites/all/libraries/ckeditor/samples/divreplace.html create mode 100644 sites/all/libraries/ckeditor/samples/index.html create mode 100644 sites/all/libraries/ckeditor/samples/inlineall.html create mode 100644 sites/all/libraries/ckeditor/samples/inlinebycode.html create mode 100644 sites/all/libraries/ckeditor/samples/inlinetextarea.html create mode 100644 sites/all/libraries/ckeditor/samples/jquery.html create mode 100644 sites/all/libraries/ckeditor/samples/plugins/dialog/assets/my_dialog.js create mode 100644 sites/all/libraries/ckeditor/samples/plugins/dialog/dialog.html create mode 100644 sites/all/libraries/ckeditor/samples/plugins/enterkey/enterkey.html create mode 100644 sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla create mode 100644 sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf create mode 100644 sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js create mode 100644 sites/all/libraries/ckeditor/samples/plugins/htmlwriter/outputforflash.html create mode 100644 sites/all/libraries/ckeditor/samples/plugins/htmlwriter/outputhtml.html create mode 100644 sites/all/libraries/ckeditor/samples/plugins/magicline/magicline.html create mode 100644 sites/all/libraries/ckeditor/samples/plugins/toolbar/toolbar.html create mode 100644 sites/all/libraries/ckeditor/samples/plugins/wysiwygarea/fullpage.html create mode 100644 sites/all/libraries/ckeditor/samples/readonly.html create mode 100644 sites/all/libraries/ckeditor/samples/replacebyclass.html create mode 100644 sites/all/libraries/ckeditor/samples/replacebycode.html create mode 100644 sites/all/libraries/ckeditor/samples/sample.css create mode 100644 sites/all/libraries/ckeditor/samples/sample.js create mode 100644 sites/all/libraries/ckeditor/samples/sample_posteddata.php create mode 100644 sites/all/libraries/ckeditor/samples/tabindex.html create mode 100644 sites/all/libraries/ckeditor/samples/uicolor.html create mode 100644 sites/all/libraries/ckeditor/samples/uilanguages.html create mode 100644 sites/all/libraries/ckeditor/samples/xhtmlstyle.html create mode 100644 sites/all/libraries/ckeditor/skins/moono/dialog.css create mode 100644 sites/all/libraries/ckeditor/skins/moono/dialog_ie.css create mode 100644 sites/all/libraries/ckeditor/skins/moono/dialog_ie7.css create mode 100644 sites/all/libraries/ckeditor/skins/moono/dialog_ie8.css create mode 100644 sites/all/libraries/ckeditor/skins/moono/dialog_iequirks.css create mode 100644 sites/all/libraries/ckeditor/skins/moono/editor.css create mode 100644 sites/all/libraries/ckeditor/skins/moono/editor_gecko.css create mode 100644 sites/all/libraries/ckeditor/skins/moono/editor_ie.css create mode 100644 sites/all/libraries/ckeditor/skins/moono/editor_ie7.css create mode 100644 sites/all/libraries/ckeditor/skins/moono/editor_ie8.css create mode 100644 sites/all/libraries/ckeditor/skins/moono/editor_iequirks.css create mode 100644 sites/all/libraries/ckeditor/skins/moono/icons.png create mode 100644 sites/all/libraries/ckeditor/skins/moono/icons_hidpi.png create mode 100644 sites/all/libraries/ckeditor/skins/moono/images/arrow.png create mode 100644 sites/all/libraries/ckeditor/skins/moono/images/close.png create mode 100644 sites/all/libraries/ckeditor/skins/moono/images/hidpi/close.png create mode 100644 sites/all/libraries/ckeditor/skins/moono/images/hidpi/lock-open.png create mode 100644 sites/all/libraries/ckeditor/skins/moono/images/hidpi/lock.png create mode 100644 sites/all/libraries/ckeditor/skins/moono/images/hidpi/refresh.png create mode 100644 sites/all/libraries/ckeditor/skins/moono/images/lock-open.png create mode 100644 sites/all/libraries/ckeditor/skins/moono/images/lock.png create mode 100644 sites/all/libraries/ckeditor/skins/moono/images/refresh.png create mode 100644 sites/all/libraries/ckeditor/skins/moono/readme.md create mode 100644 sites/all/libraries/ckeditor/styles.js diff --git a/sites/all/libraries/ckeditor/CHANGES.md b/sites/all/libraries/ckeditor/CHANGES.md new file mode 100644 index 0000000000..d927d93e7f --- /dev/null +++ b/sites/all/libraries/ckeditor/CHANGES.md @@ -0,0 +1,720 @@ +CKEditor 4 Changelog +==================== + +## CKEditor 4.4.7 + +Fixed Issues: + +* [#12825](http://dev.ckeditor.com/ticket/12825): Fixed: Preventing the [Table Resize](http://ckeditor.com/addon/tableresize) plugin from operating on elements outside the editor. Thanks to [Paul Martin](https://github.com/Paul-Martin)! +* [#12157](http://dev.ckeditor.com/ticket/12157): Fixed: Lost text formatting on pressing *Tab* when the [`config.tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces) configuration option value was greater than zero. +* [#12777](http://dev.ckeditor.com/ticket/12777): Fixed: The `table-layout` CSS property should be reset by skins. Thanks to [vita10gy](https://github.com/vita10gy)! +* [#12812](http://dev.ckeditor.com/ticket/12812): Fixed: An uncaught security exception is thrown when [Line Utilities](http://ckeditor.com/addon/lineutils) are used in an inline editor loaded in a cross-domain `iframe`. Thanks to [Vitaliy Zurian](https://github.com/thecatontheflat)! +* [#12735](http://dev.ckeditor.com/ticket/12735): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) should only apply when outputting data. +* [#10032](http://dev.ckeditor.com/ticket/10032): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) filter is executed for every paste after using the button. +* [#12597](http://dev.ckeditor.com/ticket/12597): [Blink/Webkit] Fixed: Multi-byte Japanese characters entry not working properly after *Shift+Enter*. +* [#12387](http://dev.ckeditor.com/ticket/12387): Fixed: An error is thrown if a skin does not have the [`chameleon`](http://docs.ckeditor.com/#!/api/CKEDITOR.skin-method-chameleon) property defined and [`config.uiColor`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-uiColor) is defined. +* [#12747](http://dev.ckeditor.com/ticket/12747): [IE8-10] Fixed: Opening a drop-down for a specific selection when the editor is maximized results in incorrect drop-down panel position. +* [#12850](http://dev.ckeditor.com/ticket/12850): [IEQM] Fixed: An error is thrown after focusing the editor. + +## CKEditor 4.4.6 + +**Security Updates:** + +* Fixed XSS vulnerability in the HTML parser reported by [Maco Cortes](https://www.facebook.com/Maaacoooo). + + Issue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode. + +**An upgrade is highly recommended!** + +New Features: + +* [#12501](http://dev.ckeditor.com/ticket/12501): Allowed dashes in element names in the [string format of allowed content rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules-section-string-format). +* [#12550](http://dev.ckeditor.com/ticket/12550): Added the `
      ` element to the [`CKEDITOR.dtd`](http://docs.ckeditor.com/#!/api/CKEDITOR.dtd). + +Fixed Issues: + +* [#12506](http://dev.ckeditor.com/ticket/12506): [Safari] Fixed: Cannot paste into inline editor if the page has `user-select: none` style. Thanks to [shaohua](https://github.com/shaohua)! +* [#12683](http://dev.ckeditor.com/ticket/12683): Fixed: [Filter](http://docs.ckeditor.com/#!/guide/dev_acf) fails to remove custom tags. Thanks to [timselier](https://github.com/timselier)! +* [#12489](http://dev.ckeditor.com/ticket/12489) and [#12491](http://dev.ckeditor.com/ticket/12491): Fixed: Various issues related to restoring the selection after performing operations on filler character. See the [fixed cases](http://dev.ckeditor.com/ticket/12491#comment:4). +* [#12621](http://dev.ckeditor.com/ticket/12621): Fixed: Cannot remove inline styles (bold, italic, etc.) in empty lines. +* [#12630](http://dev.ckeditor.com/ticket/12630): [Chrome] Fixed: Selection is placed outside the paragraph when the [New Page](http://ckeditor.com/addon/newpage) button is clicked. This patch significantly simplified the way how the initial selection (a selection after the content of the editable is overwritten) is being fixed. That might have fixed many related scenarios in all browsers. +* [#11647](http://dev.ckeditor.com/ticket/11647): Fixed: The [`editor.blur`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-blur) event is not fired on first blur after initializing the inline editor on an already focused element. +* [#12601](http://dev.ckeditor.com/ticket/12601): Fixed: [Strikethrough](http://ckeditor.com/addon/basicstyles) button tooltip spelling. +* [#12546](http://dev.ckeditor.com/ticket/12546): Fixed: The Preview tab in the [Document Properties](http://ckeditor.com/addon/docprops) dialog window is always disabled. +* [#12300](http://dev.ckeditor.com/ticket/12300): Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event fired on first navigation key press after typing. +* [#12141](http://dev.ckeditor.com/ticket/12141): Fixed: List items are lost when indenting a list item with content wrapped with a block element. +* [#12515](http://dev.ckeditor.com/ticket/12515): Fixed: Cursor is in the wrong position when undoing after adding an image and typing some text. +* [#12484](http://dev.ckeditor.com/ticket/12484): [Blink/Webkit] Fixed: DOM is changed outside the editor area in a certain case. +* [#12688](http://dev.ckeditor.com/ticket/12688): Improved the tests of the [styles system](http://docs.ckeditor.com/#!/api/CKEDITOR.style) and fixed two minor issues. +* [#12403](http://dev.ckeditor.com/ticket/12403): Fixed: Changing the [font](http://ckeditor.com/addon/font) style should not lead to nesting it in the previous style element. +* [#12609](http://dev.ckeditor.com/ticket/12609): Fixed: Incorrect `config.magicline_putEverywhere` name used for a [Magic Line](http://ckeditor.com/addon/magicline) all-encompassing [`config.magicline_everywhere`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-magicline_everywhere) configuration option. + + +## CKEditor 4.4.5 + +New Features: + +* [#12279](http://dev.ckeditor.com/ticket/12279): Added a possibility to pass a custom evaluator to [`node.getAscendant()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.node-method-getAscendant). + +Fixed Issues: + +* [#12423](http://dev.ckeditor.com/ticket/12423): [Safari7.1+] Fixed: *Enter* key moved cursor to a strange position. +* [#12381](http://dev.ckeditor.com/ticket/12381): [iOS] Fixed: Selection issue. Thanks to [Remiremi](https://github.com/Remiremi)! +* [#10804](http://dev.ckeditor.com/ticket/10804): Fixed: `CKEDITOR_GETURL` is not used with some plugins where it should be used. Thanks to [Thomas Andraschko](https://github.com/tandraschko)! +* [#9137](http://dev.ckeditor.com/ticket/9137): Fixed: The `` tag is not created when `` has an attribute. Thanks to [naoki.fujikawa](https://github.com/naoki-fujikawa)! +* [#12377](http://dev.ckeditor.com/ticket/12377): Fixed: Errors thrown in the [Image](http://ckeditor.com/addon/image) plugin when removing preview from the dialog window definition. Thanks to [Axinet](https://github.com/Axinet)! +* [#12162](http://dev.ckeditor.com/ticket/12162): Fixed: Auto paragraphing and *Enter* key in nested editables. +* [#12315](http://dev.ckeditor.com/ticket/12315): Fixed: Marked [`config.autoParagraph`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoParagraph) as deprecated. +* [#12113](http://dev.ckeditor.com/ticket/12113): Fixed: A [code snippet](http://ckeditor.com/addon/codesnippet) should be presented in the [elements path](http://ckeditor.com/addon/elementspath) as "code snippet" (translatable). +* [#12311](http://dev.ckeditor.com/ticket/12311): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) should also remove `` elements. +* [#12261](http://dev.ckeditor.com/ticket/12261): Fixed: Filter has to be destroyed and removed from [`CKEDITOR.filter.instances`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-static-property-instances) on editor destroy. +* [#12398](http://dev.ckeditor.com/ticket/12398): Fixed: [Maximize](http://ckeditor.com/addon/maximize) does not work on an instance without a [title](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). +* [#12097](http://dev.ckeditor.com/ticket/12097): Fixed: JAWS not reading the number of options correctly in the [Text Color and Background Color](http://ckeditor.com/addon/colorbutton) button menu. +* [#12411](http://dev.ckeditor.com/ticket/12411): Fixed: [Page Break](http://ckeditor.com/addon/pagebreak) used directly in the editable breaks the editor. +* [#12354](http://dev.ckeditor.com/ticket/12354): Fixed: Various issues in undo manager when holding keys. +* [#12324](http://dev.ckeditor.com/ticket/12324): [IE8] Fixed: Undo steps are not recorded when changing the caret position by clicking below the body. +* [#12332](http://dev.ckeditor.com/ticket/12332): Fixed: Lowered DOM events listeners' priorities in undo manager in order to avoid ambiguity. +* [#12402](http://dev.ckeditor.com/ticket/12402): [Blink] Fixed: Workaround for Blink bug with `document.title` which breaks updating title in the full HTML mode. +* [#12338](http://dev.ckeditor.com/ticket/12338): Fixed: The CKEditor package contains unoptimized images. + + +## CKEditor 4.4.4 + +Fixed Issues: + +* [#12268](http://dev.ckeditor.com/ticket/12268): Cleanup of [UI Color](http://ckeditor.com/addon/uicolor) YUI styles. Thanks to [CasherWest](https://github.com/CasherWest)! +* [#12263](http://dev.ckeditor.com/ticket/12263): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) filter does not properly normalize semicolons style text. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! +* [#12243](http://dev.ckeditor.com/ticket/12243): Fixed: Text formatting lost when pasting from Word. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! +* [#111739](http://dev.ckeditor.com/ticket/11739): Fixed: `keypress` listeners should not be used in the undo manager. A complete rewrite of keyboard handling in the undo manager was made. Numerous smaller issues were fixed, among others: + * [#10926](http://dev.ckeditor.com/ticket/10926): [Chrome@Android] Fixed: Typing does not record snapshots and does not fire the [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. + * [#11611](http://dev.ckeditor.com/ticket/11611): [Firefox] Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event is fired when pressing Arrow keys. + * [#12219](http://dev.ckeditor.com/ticket/12219): [Safari] Fixed: Some modifications of the [`UndoManager.locked`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-property-locked) property violate strict mode in the [Undo](http://ckeditor.com/addon/undo) plugin. +* [#10916](http://dev.ckeditor.com/ticket/10916): Fixed: [Magic Line](http://ckeditor.com/addon/magicline) icon in Right-To-Left environments. +* [#11970](http://dev.ckeditor.com/ticket/11970): [IE] Fixed: CKEditor `paste` event is not fired when pasting with *Shift+Ins*. +* [#12111](http://dev.ckeditor.com/ticket/12111): Fixed: Linked image attributes are not read when opening the image dialog window by doubleclicking. +* [#10030](http://dev.ckeditor.com/ticket/10030): [IE] Fixed: Prevented "Unspecified Error" thrown in various cases when IE8-9 does not allow access to `document.activeElement`. +* [#12273](http://dev.ckeditor.com/ticket/12273): Fixed: Applying block style in a description list breaks it. +* [#12218](http://dev.ckeditor.com/ticket/12218): Fixed: Minor syntax issue in CSS files. +* [#12178](http://dev.ckeditor.com/ticket/12178): [Blink/WebKit] Fixed: Iterator does not return the block if the selection is located at the end of it. +* [#12185](http://dev.ckeditor.com/ticket/12185): [IE9QM] Fixed: Error thrown when moving the mouse over focused editor's scrollbar. +* [#12215](http://dev.ckeditor.com/ticket/12215): Fixed: Basepath resolution does not recognize semicolon as a query separator. +* [#12135](http://dev.ckeditor.com/ticket/12135): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) does not work on widgets. +* [#12298](http://dev.ckeditor.com/ticket/12298): [IE11] Fixed: Clicking below `` in Compatibility Mode will no longer reset selection to the first line. +* [#12204](http://dev.ckeditor.com/ticket/12204): Fixed: Editor's voice label is not affected by [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). +* [#11915](http://dev.ckeditor.com/ticket/11915): Fixed: With [SCAYT](http://ckeditor.com/addon/scayt) enabled, cursor moves to the beginning of the first highlighted, misspelled word after typing or pasting into the editor. +* [SCAYT](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/69): Fixed: Error thrown in the console after enabling [SCAYT](http://ckeditor.com/addon/scayt) and trying to add a new image. + + +Other Changes: + +* [#12296](http://dev.ckeditor.com/ticket/12296): Merged `benderjs-ckeditor` into the main CKEditor repository. + +## CKEditor 4.4.3 + +**Security Updates:** + +* Fixed XSS vulnerability in the Preview plugin reported by Mario Heiderich of [Cure53](https://cure53.de/). + +**An upgrade is highly recommended!** + +New Features: + +* [#12164](http://dev.ckeditor.com/ticket/12164): Added the "Justify" option to the "Horizontal Alignment" drop-down in the Table Cell Properties dialog window. + +Fixed Issues: + +* [#12110](http://dev.ckeditor.com/ticket/12110): Fixed: Editor crash after deleting a table. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! +* [#11897](http://dev.ckeditor.com/ticket/11897): Fixed: *Enter* key used in an empty list item creates a new line instead of breaking the list. Thanks to [noam-si](https://github.com/noam-si)! +* [#12140](http://dev.ckeditor.com/ticket/12140): Fixed: Double-clicking linked widgets opens two dialog windows. +* [#12132](http://dev.ckeditor.com/ticket/12132): Fixed: Image is inserted with `width` and `height` styles even when they are not allowed. +* [#9317](http://dev.ckeditor.com/ticket/9317): [IE] Fixed: [`config.disableObjectResizing`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-disableObjectResizing) does not work on IE. **Note**: We were not able to fix this issue on IE11+ because necessary events stopped working. See a [last resort workaround](http://dev.ckeditor.com/ticket/9317#comment:16) and make sure to [support our complaint to Microsoft](https://connect.microsoft.com/IE/feedback/details/742593/please-respect-execcommand-enableobjectresizing-in-contenteditable-elements). +* [#9638](http://dev.ckeditor.com/ticket/9638): Fixed: There should be no information about accessibility help available under the *Alt+0* keyboard shortcut if the [Accessibility Help](http://ckeditor.com/addon/a11yhelp) plugin is not available. +* [#8117](http://dev.ckeditor.com/ticket/8117) and [#9186](http://dev.ckeditor.com/ticket/9186): Fixed: In HTML5 `` tags should be allowed everywhere, including inside the `` element. +* [#10422](http://dev.ckeditor.com/ticket/10422): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) not working properly if a function is specified. + +## CKEditor 4.4.2 + +Important Notes: + +* The CKEditor testing environment is now publicly available. Read more about how to set up the environment and execute tests in the [CKEditor Testing Environment](http://docs.ckeditor.com/#!/guide/dev_tests) guide. + Please note that the [`tests/`](https://github.com/ckeditor/ckeditor-dev/tree/master/tests) directory which contains editor tests is not available in release packages. It can only be found in the development version of CKEditor on [GitHub](https://github.com/ckeditor/ckeditor-dev/). + +New Features: + +* [#11909](http://dev.ckeditor.com/ticket/11909): Introduced a parameter to prevent the [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) method from recording undo snapshots. + +Fixed Issues: + +* [#11757](http://dev.ckeditor.com/ticket/11757): Fixed: Imperfections in the [Moono](http://ckeditor.com/addon/moono) skin. Thanks to [danyaPostfactum](https://github.com/danyaPostfactum)! +* [#10091](http://dev.ckeditor.com/ticket/10091): Blockquote should be treated like an object by the styles system. Thanks to [dan-james-deeson](https://github.com/dan-james-deeson)! +* [#11478](http://dev.ckeditor.com/ticket/11478): Fixed: Issue with passing jQuery objects to [adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) configuration. +* [#10867](http://dev.ckeditor.com/ticket/10867): Fixed: Issue with setting encoded URI as image link. +* [#11983](http://dev.ckeditor.com/ticket/11983): Fixed: Clicking a nested widget does not focus it. Additionally, performance of the [`widget.repository.getByElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-getByElement) method was improved. +* [#12000](http://dev.ckeditor.com/ticket/12000): Fixed: Nested widgets should be initialized on [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) and [`nestedEditable.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.nestedEditable-method-setData). +* [#12022](http://dev.ckeditor.com/ticket/12022): Fixed: Outer widget's drag handler is not created at all if it has any nested widgets inside. +* [#11960](http://dev.ckeditor.com/ticket/11960): [Blink/WebKit] Fixed: The caret should be scrolled into view on *Backspace* and *Delete* (covers only the merging blocks case). +* [#11306](http://dev.ckeditor.com/ticket/11306): [OSX][Blink/WebKit] Fixed: No widget entries in the context menu on widget right-click. +* [#11957](http://dev.ckeditor.com/ticket/11957): Fixed: Alignment labels in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window are not translated. +* [#11980](http://dev.ckeditor.com/ticket/11980): [Blink/WebKit] Fixed: `` elements created when joining adjacent elements (non-collapsed selection). +* [#12009](http://dev.ckeditor.com/ticket/12009): [Nested widgets] Integration with the [Magic Line](http://ckeditor.com/addon/magicline) plugin. +* [#11387](http://dev.ckeditor.com/ticket/11387): Fixed: `role="radiogroup"` should be applied only to radio inputs' container. +* [#7975](http://dev.ckeditor.com/ticket/7975): [IE8] Fixed: Errors when trying to select an empty table cell. +* [#11947](http://dev.ckeditor.com/ticket/11947): [Firefox+IE11] Fixed: *Shift+Enter* in lists produces two line breaks. +* [#11972](http://dev.ckeditor.com/ticket/11972): Fixed: Feature detection in the [`element.setText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-setText) method should not trigger the layout engine. +* [#7634](http://dev.ckeditor.com/ticket/7634): Fixed: The [Flash Dialog](http://ckeditor.com/addon/flash) plugin omits the `allowFullScreen` parameter in the editor data if set to `true`. +* [#11910](http://dev.ckeditor.com/ticket/11910): Fixed: [Enhanced Image](http://ckeditor.com/addon/image2) does not take [`config.baseHref`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-baseHref) into account when updating image dimensions. +* [#11753](http://dev.ckeditor.com/ticket/11753): Fixed: Wrong [`checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method value after focusing or blurring a widget. +* [#11830](http://dev.ckeditor.com/ticket/11830): Fixed: Impossible to pass some arguments to [CKBuilder](https://github.com/ckeditor/ckbuilder) when using the `/dev/builder/build.sh` script. +* [#11945](http://dev.ckeditor.com/ticket/11945): Fixed: [Form Elements](http://ckeditor.com/addon/forms) plugin should not change a core method. +* [#11384](http://dev.ckeditor.com/ticket/11384): [IE9+] Fixed: `IndexSizeError` thrown when pasting into a non-empty selection anchored in one text node. + +## CKEditor 4.4.1 + +New Features: + +* [#9661](http://dev.ckeditor.com/ticket/9661): Added the option to [configure](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-linkJavaScriptLinksAllowed) anchor tags with JavaScript code in the `href` attribute. + +Fixed Issues: + +* [#11861](http://dev.ckeditor.com/ticket/11861): [Webkit/Blink] Fixed: Span elements created while joining adjacent elements. **Note:** This patch only covers cases when *Backspace* or *Delete* is pressed on a collapsed (empty) selection. The remaining case, with a non-empty selection, will be fixed in the next release. +* [#10714](http://dev.ckeditor.com/ticket/10714): [iOS] Fixed: Selection and drop-downs are broken if a touch event listener is used due to a [Webkit bug](https://bugs.webkit.org/show_bug.cgi?id=128924). Thanks to [Arty Gus](https://github.com/artygus)! +* [#11911](http://dev.ckeditor.com/ticket/11911): Fixed setting the `dir` attribute for a preloaded language in [CKEDITOR.lang](http://docs.ckeditor.com/#!/api/CKEDITOR.lang). Thanks to [Akash Mohapatra](https://github.com/akashmohapatra)! +* [#11926](http://dev.ckeditor.com/ticket/11926): Fixed: [Code Snippet](http://ckeditor.com/addon/codesnippet) does not decode HTML entities when loading code from the `` element. +* [#11223](http://dev.ckeditor.com/ticket/11223): Fixed: Issue when [Protected Source](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-protectedSource) was not working in the `` element. +* [#11859](http://dev.ckeditor.com/ticket/11859): Fixed: Removed the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin dependency from the [Code Snippet](http://ckeditor.com/addon/codesnippet) sample. +* [#11754](http://dev.ckeditor.com/ticket/11754): [Chrome] Fixed: Infinite loop when content includes not closed attributes. +* [#11848](http://dev.ckeditor.com/ticket/11848): [IE] Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) throwing an exception when there was no selection in the editor. +* [#11801](http://dev.ckeditor.com/ticket/11801): Fixed: Editor anchors unavailable when linking the [Enhanced Image](http://ckeditor.com/addon/image2) widget. +* [#11626](http://dev.ckeditor.com/ticket/11626): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) sets invalid column width. +* [#11872](http://dev.ckeditor.com/ticket/11872): Made [`element.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-addClass) chainable symmetrically to [`element.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-removeClass). +* [#11813](http://dev.ckeditor.com/ticket/11813): Fixed: Link lost while pasting a captioned image and restoring an undo snapshot ([Enhanced Image](http://ckeditor.com/addon/image2)). +* [#11814](http://dev.ckeditor.com/ticket/11814): Fixed: _Link_ and _Unlink_ entries persistently displayed in the [Enhanced Image](http://ckeditor.com/addon/image2) context menu. +* [#11839](http://dev.ckeditor.com/ticket/11839): [IE9] Fixed: The caret jumps out of the editable area when resizing the editor in the source mode. +* [#11822](http://dev.ckeditor.com/ticket/11822): [Webkit] Fixed: Editing anchors by double-click is broken in some cases. +* [#11823](http://dev.ckeditor.com/ticket/11823): [IE8] Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) throws an error over scrollbar. +* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: It is not possible to change the language back to _Not set_ in the [Code Snippet](http://ckeditor.com/addon/codesnippet) dialog window. +* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: [Filter](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied inside elements with the `contenteditable` attribute set to `true`. +* [#11798](http://dev.ckeditor.com/ticket/11798): Fixed: Inserting a non-editable element inside a table cell breaks the table. +* [#11793](http://dev.ckeditor.com/ticket/11793): Fixed: Drop-down is not "on" when clicking it while the editor is blurred. +* [#11850](http://dev.ckeditor.com/ticket/11850): Fixed: Fake objects with the `contenteditable` attribute set to `false` are not downcasted properly. +* [#11811](http://dev.ckeditor.com/ticket/11811): Fixed: Widget's data is not encoded correctly when passed to an attribute. +* [#11777](http://dev.ckeditor.com/ticket/11777): Fixed encoding ampersand in the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin. +* [#11880](http://dev.ckeditor.com/ticket/11880): [IE8-9] Fixed: Linked image has a default thick border. + +Other Changes: + +* [#11807](http://dev.ckeditor.com/ticket/11807): Updated jQuery version used in the sample to 1.11.0 and tested CKEditor jQuery Adapter with version 1.11.0 and 2.1.0. +* [#9504](http://dev.ckeditor.com/ticket/9504): Stopped using deprecated `attribute.specified` in all browsers except Internet Explorer. +* [#11809](http://dev.ckeditor.com/ticket/11809): Changed tab size in `<pre>` to 4 spaces. + +## CKEditor 4.4 + +**Important Notes:** + +* Marked the [`editor.beforePaste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-beforePaste) event as deprecated. +* The default class of captioned images has changed to `image` (was: `caption`). Please note that once edited in CKEditor 4.4+, all existing images of the `caption` class (`<figure class="caption">`) will be [filtered out](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) unless the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option is set to `caption`. For backward compatibility (i.e. when upgrading), it is highly recommended to use this setting, which also helps prevent CSS conflicts, etc. This does not apply to new CKEditor integrations. +* Widgets without defined buttons are no longer registered automatically to the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). Before CKEditor 4.4 widgets were registered to the ACF which was an incorrect behavior ([#11567](http://dev.ckeditor.com/ticket/11567)). This change should not have any impact on standard scenarios, but if your button does not execute the widget command, you need to set [`allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-allowedContent) and [`requiredContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-requiredContent) properties for it manually, because the editor will not be able to find them. +* The [Show Borders](http://ckeditor.com/addon/showborders) plugin was added to the Standard installation package in order to ensure that unstyled tables are still visible for the user ([#11665](http://dev.ckeditor.com/ticket/11665)). +* Since CKEditor 4.4 the editor instance should be passed to [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) methods to ensure full compatibility with other features (e.g. applying styles to widgets requires that). We ensured backward compatibility though, so the [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) will work even when the editor instance is not provided. + +New Features: + +* [#11297](http://dev.ckeditor.com/ticket/11297): Styles can now be applied to widgets. The definition of a style which can be applied to a specific widget must contain two additional properties — `type` and `widget`. Read more in the [Widget Styles](http://docs.ckeditor.com/#!/guide/dev_styles-section-widget-styles) section of the "Syles Drop-down" guide. Note that by default, widgets support only classes and no other attributes or styles. Related changes and features: + * Introduced the [`CKEDITOR.style.addCustomHandler()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-static-method-addCustomHandler) method for registering custom style handlers. + * The [`CKEDITOR.style.apply()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-apply) and [`CKEDITOR.style.remove()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-remove) methods are now called with an editor instance instead of the document so they can be reused by the [`CKEDITOR.editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) and [`CKEDITOR.editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) methods. Backward compatibility was preserved, but from CKEditor 4.4 it is highly recommended to pass an editor instead of a document to these methods. + * Many new methods and properties were introduced in the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) to make the handling of styles by widgets fully customizable. See: [`widget.definition.styleableElements`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleableElements), [`widget.definition.styleToAllowedContentRule`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleToAllowedContentRules), [`widget.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-addClass), [`widget.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeClass), [`widget.getClasses()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-getClasses), [`widget.hasClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-hasClass), [`widget.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-applyStyle), [`widget.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeStyle), [`widget.checkStyleActive()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-checkStyleActive). + * Integration with the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) required an introduction of the [`CKEDITOR.style.toAllowedContent()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-toAllowedContentRules) method which can be implemented by the custom style handler and if exists, it is used by the [`CKEDITOR.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter) to translate a style to [allowed content rules](http://docs.ckeditor.com/#!/api/CKEDITOR.filter.allowedContentRules). +* [#11300](http://dev.ckeditor.com/ticket/11300): Various changes in the [Enhanced Image](http://ckeditor.com/addon/image2) plugin: + * Introduced the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option to configure the class of captioned images. + * Introduced the [`config.image2_alignClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_alignClasses) option to configure the way images are aligned with CSS classes. + If this setting is defined, the editor produces classes instead of inline styles for aligned images. + * Default image caption can be translated (customized) with the `editor.lang.image2.captionPlaceholder` string. +* [#11341](http://dev.ckeditor.com/ticket/11341): [Enhanced Image](http://ckeditor.com/addon/image2) plugin: It is now possible to add a link to any image type. +* [#10202](http://dev.ckeditor.com/ticket/10202): Introduced wildcard support in the [Allowed Content Rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) format. +* [#10276](http://dev.ckeditor.com/ticket/10276): Introduced blacklisting in the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). +* [#10480](http://dev.ckeditor.com/ticket/10480): Introduced code snippets with code highlighting. There are two versions available so far — the default [Code Snippet](http://ckeditor.com/addon/codesnippet) which uses the [highlight.js](http://highlightjs.org) library and the [Code Snippet GeSHi](http://ckeditor.com/addon/codesnippetgeshi) which uses the [GeSHi](http://qbnz.com/highlighter/) library. +* [#11737](http://dev.ckeditor.com/ticket/11737): Introduced an option to prevent [filtering](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) of an element that matches custom criteria (see [`filter.addElementCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-method-addElementCallback)). +* [#11532](http://dev.ckeditor.com/ticket/11532): Introduced the [`editor.addContentsCss()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addContentsCss) method that can be used for [adding custom CSS files](http://docs.ckeditor.com/#!/guide/plugin_sdk_styles). +* [#11536](http://dev.ckeditor.com/ticket/11536): Added the [`CKEDITOR.tools.htmlDecode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlDecode) method for decoding HTML entities. +* [#11225](http://dev.ckeditor.com/ticket/11225): Introduced the [`CKEDITOR.tools.transparentImageData`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-property-transparentImageData) property which contains transparent image data to be used in CSS or as image source. + +Other Changes: + +* [#11377](http://dev.ckeditor.com/ticket/11377): Unified internal representation of empty anchors using the [fake objects](http://ckeditor.com/addon/fakeobjects). +* [#11422](http://dev.ckeditor.com/ticket/11422): Removed Firefox 3.x, Internet Explorer 6 and Opera 12.x leftovers in code. +* [#5217](http://dev.ckeditor.com/ticket/5217): Setting data (including switching between modes) creates a new undo snapshot. Besides that: + * Introduced the [`editable.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-property-status) property. + * Introduced a new `forceUpdate` option for the [`editor.lockSnapshot`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-lockSnapshot) event. + * Fixed: Selection not being unlocked in inline editor after setting data ([#11500](http://dev.ckeditor.com/ticket/11500)). +* The [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin was updated to the latest version. + +Fixed Issues: + +* [#10190](http://dev.ckeditor.com/ticket/10190): Fixed: Removing block style with [`editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) should result in a paragraph and not a div. +* [#11727](http://dev.ckeditor.com/ticket/11727): Fixed: The editor tries to select a non-editable image which was clicked. + +## CKEditor 4.3.5 + +New Features: + +* Added new translation: Tatar. + +Fixed Issues: + +* [#11677](http://dev.ckeditor.com/ticket/11677): Fixed: Undo/Redo keystrokes are blocked in the source mode. +* [#11717](http://dev.ckeditor.com/ticket/11717): [Document Properties](http://ckeditor.com/addon/docprops) plugin requires the [Color Dialog](http://ckeditor.com/addon/colordialog) plugin to work. + +## CKEditor 4.3.4 + +Fixed Issues: + +* [#11597](http://dev.ckeditor.com/ticket/11597): [IE11] Fixed: Error thrown when trying to open the [preview](http://ckeditor.com/addon/preview) using the keyboard. +* [#11544](http://dev.ckeditor.com/ticket/11544): [Placeholders](http://ckeditor.com/addon/placeholder) will no longer be upcasted in parents not accepting `<span>` elements. +* [#8663](http://dev.ckeditor.com/ticket/8663): Fixed [`element.renameNode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-renameNode) not clearing the [`element.getName()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-getName) cache. +* [#11574](http://dev.ckeditor.com/ticket/11574): Fixed: *Backspace* destroying the DOM structure if an inline editable is placed in a list item. +* [#11603](http://dev.ckeditor.com/ticket/11603): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) attaches to tables outside the editable. +* [#9205](http://dev.ckeditor.com/ticket/9205), [#7805](http://dev.ckeditor.com/ticket/7805), [#8216](http://dev.ckeditor.com/ticket/8216): Fixed: `{cke_protected_1}` appearing in data in various cases where HTML comments are placed next to `"` or `'`. +* [#11635](http://dev.ckeditor.com/ticket/11635): Fixed: Some attributes are not protected before the content is passed through the fix bin. +* [#11660](http://dev.ckeditor.com/ticket/11660): [IE] Fixed: Table content is lost when some extra markup is inside the table. +* [#11641](http://dev.ckeditor.com/ticket/11641): Fixed: Switching between modes in the classic editor removes content styles for the inline editor. +* [#11568](http://dev.ckeditor.com/ticket/11568): Fixed: [Styles](http://ckeditor.com/addon/stylescombo) drop-down list is not enabled on selection change. + +## CKEditor 4.3.3 + +Fixed Issues: + +* [#11500](http://dev.ckeditor.com/ticket/11500): [Webkit/Blink] Fixed: Selection lost when setting data in another inline editor. Additionally, [`selection.removeAllRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-removeAllRanges) is now scoped to selection's [root](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-property-root). +* [#11104](http://dev.ckeditor.com/ticket/11104): [IE] Fixed: Various issues with scrolling and selection when focusing widgets. +* [#11487](http://dev.ckeditor.com/ticket/11487): Moving mouse over the [Enhanced Image](http://ckeditor.com/addon/image2) widget will no longer change the value returned by the [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method. +* [#8673](http://dev.ckeditor.com/ticket/8673): [WebKit] Fixed: Cannot select and remove the [Page Break](http://ckeditor.com/addon/pagebreak). +* [#11413](http://dev.ckeditor.com/ticket/11413): Fixed: Incorrect [`editor.execCommand()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand) behavior. +* [#11438](http://dev.ckeditor.com/ticket/11438): Splitting table cells vertically is no longer changing table structure. +* [#8899](http://dev.ckeditor.com/ticket/8899): Fixed: Links in the [About CKEditor](http://ckeditor.com/addon/about) dialog window now open in a new browser window or tab. +* [#11490](http://dev.ckeditor.com/ticket/11490): Fixed: [Menu button](http://ckeditor.com/addon/menubutton) panel not showing in the source mode. +* [#11417](http://dev.ckeditor.com/ticket/11417): The [`widget.doubleclick`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-event-doubleclick) event is not canceled anymore after editing was triggered. +* [#11253](http://dev.ckeditor.com/ticket/11253): [IE] Fixed: Clipped upload button in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. +* [#11359](http://dev.ckeditor.com/ticket/11359): Standardized the way anchors are discovered by the [Link](http://ckeditor.com/addon/link) plugin. +* [#11058](http://dev.ckeditor.com/ticket/11058): [IE8] Fixed: Error when deleting a table row. +* [#11508](http://dev.ckeditor.com/ticket/11508): Fixed: [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) discovering protected attributes within other attributes' values. +* [#11533](http://dev.ckeditor.com/ticket/11533): Widgets: Avoid recurring upcasts if the DOM structure was modified during an upcast. +* [#11400](http://dev.ckeditor.com/ticket/11400): Fixed: The [`domObject.removeAllListeners()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.domObject-method-removeAllListeners) method does not remove custom listeners completely. +* [#11493](http://dev.ckeditor.com/ticket/11493): Fixed: The [`selection.getRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-getRanges) method does not override cached ranges when used with the `onlyEditables` argument. +* [#11390](http://dev.ckeditor.com/ticket/11390): [IE] All [XML](http://ckeditor.com/addon/xml) plugin [methods](http://docs.ckeditor.com/#!/api/CKEDITOR.xml) now work in IE10+. +* [#11542](http://dev.ckeditor.com/ticket/11542): [IE11] Fixed: Blurry toolbar icons when Right-to-Left UI language is set. +* [#11504](http://dev.ckeditor.com/ticket/11504): Fixed: When [`config.fullPage`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fullPage) is set to `true`, entities are not encoded in editor output. +* [#11004](http://dev.ckeditor.com/ticket/11004): Integrated [Enhanced Image](http://ckeditor.com/addon/image2) dialog window with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). +* [#11439](http://dev.ckeditor.com/ticket/11439): Fixed: Properties get cloned in the Cell Properties dialog window if multiple cells are selected. + +## CKEditor 4.3.2 + +Fixed Issues: + +* [#11331](http://dev.ckeditor.com/ticket/11331): A menu button will have a changed label when selected instead of using the `aria-pressed` attribute. +* [#11177](http://dev.ckeditor.com/ticket/11177): Widget drag handler improvements: + * [#11176](http://dev.ckeditor.com/ticket/11176): Fixed: Initial position is not updated when the widget data object is empty. + * [#11001](http://dev.ckeditor.com/ticket/11001): Fixed: Multiple synchronous layout recalculations are caused by initial drag handler positioning causing performance issues. + * [#11161](http://dev.ckeditor.com/ticket/11161): Fixed: Drag handler is not repositioned in various situations. + * [#11281](http://dev.ckeditor.com/ticket/11281): Fixed: Drag handler and mask are duplicated after widget reinitialization. +* [#11207](http://dev.ckeditor.com/ticket/11207): [Firefox] Fixed: Misplaced [Enhanced Image](http://ckeditor.com/addon/image2) resizer in the inline editor. +* [#11102](http://dev.ckeditor.com/ticket/11102): `CKEDITOR.template` improvements: + * [#11102](http://dev.ckeditor.com/ticket/11102): Added newline character support. + * [#11216](http://dev.ckeditor.com/ticket/11216): Added "\\'" substring support. +* [#11121](http://dev.ckeditor.com/ticket/11121): [Firefox] Fixed: High Contrast mode is enabled when the editor is loaded in a hidden iframe. +* [#11350](http://dev.ckeditor.com/ticket/11350): The default value of [`config.contentsCss`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-contentsCss) is affected by [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl). +* [#11097](http://dev.ckeditor.com/ticket/11097): Improved the [Autogrow](http://ckeditor.com/addon/autogrow) plugin performance when dealing with very big tables. +* [#11290](http://dev.ckeditor.com/ticket/11290): Removed redundant code in the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin. +* [#11133](http://dev.ckeditor.com/ticket/11133): [Page Break](http://ckeditor.com/addon/pagebreak) becomes editable if pasted. +* [#11126](http://dev.ckeditor.com/ticket/11126): Fixed: Native Undo executed once the bottom of the snapshot stack is reached. +* [#11131](http://dev.ckeditor.com/ticket/11131): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Error thrown when switching to source mode if the selection was in widget's nested editable. +* [#11139](http://dev.ckeditor.com/ticket/11139): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Elements Path is not cleared after switching to source mode. +* [#10778](http://dev.ckeditor.com/ticket/10778): Fixed a bug with range enlargement. The range no longer expands to visible whitespace. +* [#11146](http://dev.ckeditor.com/ticket/11146): [IE] Fixed: Preview window switches Internet Explorer to Quirks Mode. +* [#10762](http://dev.ckeditor.com/ticket/10762): [IE] Fixed: JavaScript code displayed in preview window's URL bar. +* [#11186](http://dev.ckeditor.com/ticket/11186): Introduced the [`widgets.repository.addUpcastCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-addUpcastCallback) method that allows to block upcasting given element to a widget. +* [#11307](http://dev.ckeditor.com/ticket/11307): Fixed: Paste as Plain Text conflict with the [MooTools](http://mootools.net) library. +* [#11140](http://dev.ckeditor.com/ticket/11140): [IE11] Fixed: Anchors are not draggable. +* [#11379](http://dev.ckeditor.com/ticket/11379): Changed default contents `line-height` to unitless values to avoid huge text overlapping (like in [#9696](http://dev.ckeditor.com/ticket/9696)). +* [#10787](http://dev.ckeditor.com/ticket/10787): [Firefox] Fixed: Broken replacement of text while pasting into `div`-based editor. +* [#10884](http://dev.ckeditor.com/ticket/10884): Widgets integration with the [Show Blocks](http://ckeditor.com/addon/showblocks) plugin. +* [#11021](http://dev.ckeditor.com/ticket/11021): Fixed: An error thrown when selecting entire editable contents while fake selection is on. +* [#11086](http://dev.ckeditor.com/ticket/11086): [IE8] Re-enable inline widgets drag&drop in Internet Explorer 8. +* [#11372](http://dev.ckeditor.com/ticket/11372): Widgets: Special characters encoded twice in nested editables. +* [#10068](http://dev.ckeditor.com/ticket/10068): Fixed: Support for protocol-relative URLs. +* [#11283](http://dev.ckeditor.com/ticket/11283): [Enhanced Image](http://ckeditor.com/addon/image2): A `<div>` element with `text-align: center` and an image inside is not recognised correctly. +* [#11196](http://dev.ckeditor.com/ticket/11196): [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp): Allowed additional keyboard button labels to be translated in the dialog window. + +## CKEditor 4.3.1 + +**Important Notes:** + +* To match the naming convention, the `language` button is now `Language` ([#11201](http://dev.ckeditor.com/ticket/11201)). +* [Enhanced Image](http://ckeditor.com/addon/image2) button, context menu, command, and icon names match those of the [Image](http://ckeditor.com/addon/image) plugin ([#11222](http://dev.ckeditor.com/ticket/11222)). + +Fixed Issues: + +* [#11244](http://dev.ckeditor.com/ticket/11244): Changed: The [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method now fires the [`widget.repository.checkWidgets`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-event-checkWidgets) event, so from CKEditor 4.3.1 it is preferred to use the method rather than fire the event. +* [#11171](http://dev.ckeditor.com/ticket/11171): Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) and [`editor.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText) methods do not call the [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method. +* [#11085](http://dev.ckeditor.com/ticket/11085): [IE8] Replaced preview generated by the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget with a placeholder. +* [#11044](http://dev.ckeditor.com/ticket/11044): Enhanced WAI-ARIA support for the [Language](http://ckeditor.com/addon/language) plugin drop-down menu. +* [#11075](http://dev.ckeditor.com/ticket/11075): With drop-down menu button focused, pressing the *Down Arrow* key will now open the menu and focus its first option. +* [#11165](http://dev.ckeditor.com/ticket/11165): Fixed: The [File Browser](http://ckeditor.com/addon/filebrowser) plugin cannot be removed from the editor. +* [#11159](http://dev.ckeditor.com/ticket/11159): [IE9-10] [Enhanced Image](http://ckeditor.com/addon/image2): Fixed buggy discovery of image dimensions. +* [#11101](http://dev.ckeditor.com/ticket/11101): Drop-down lists no longer break when given double quotes. +* [#11077](http://dev.ckeditor.com/ticket/11077): [Enhanced Image](http://ckeditor.com/addon/image2): Empty undo step recorded when resizing the image. +* [#10853](http://dev.ckeditor.com/ticket/10853): [Enhanced Image](http://ckeditor.com/addon/image2): Widget has paragraph wrapper when de-captioning unaligned image. +* [#11198](http://dev.ckeditor.com/ticket/11198): Widgets: Drag handler is not fully visible when an inline widget is in a heading. +* [#11132](http://dev.ckeditor.com/ticket/11132): [Firefox] Fixed: Caret is lost after drag and drop of an inline widget. +* [#11182](http://dev.ckeditor.com/ticket/11182): [IE10-11] Fixed: Editor crashes (IE11) or works with minor issues (IE10) if a page is loaded in Quirks Mode. See [`env.quirks`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-quirks) for more details. +* [#11204](http://dev.ckeditor.com/ticket/11204): Added `figure` and `figcaption` styles to the `contents.css` file so [Enhanced Image](http://ckeditor.com/addon/image2) looks nicer. +* [#11202](http://dev.ckeditor.com/ticket/11202): Fixed: No newline in [BBCode](http://ckeditor.com/addon/bbcode) mode. +* [#10890](http://dev.ckeditor.com/ticket/10890): Fixed: Error thrown when pressing the *Delete* key in a list item. +* [#10055](http://dev.ckeditor.com/ticket/10055): [IE8-10] Fixed: *Delete* pressed on a selected image causes the browser to go back. +* [#11183](http://dev.ckeditor.com/ticket/11183): Fixed: Inserting a horizontal rule or a table in multiple row selection causes a browser crash. Additionally, the [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) method does not insert the element into every range of a selection any more. +* [#11042](http://dev.ckeditor.com/ticket/11042): Fixed: Selection made on an element containing a non-editable element was not auto faked. +* [#11125](http://dev.ckeditor.com/ticket/11125): Fixed: Keyboard navigation through menu and drop-down items will now cycle. +* [#11011](http://dev.ckeditor.com/ticket/11011): Fixed: The [`editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) method removes attributes from nested elements. +* [#11179](http://dev.ckeditor.com/ticket/11179): Fixed: [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy) does not cleanup content generated by the [Table Resize](http://ckeditor.com/addon/tableresize) plugin for inline editors. +* [#11237](http://dev.ckeditor.com/ticket/11237): Fixed: Table border attribute value is deleted when pasting content from Microsoft Word. +* [#11250](http://dev.ckeditor.com/ticket/11250): Fixed: HTML entities inside the `<textarea>` element are not encoded. +* [#11260](http://dev.ckeditor.com/ticket/11260): Fixed: Initially disabled buttons are not read by JAWS as disabled. +* [#11200](http://dev.ckeditor.com/ticket/11200): Added [Clipboard](http://ckeditor.com/addon/clipboard) plugin as a dependency for [Widget](http://ckeditor.com/addon/widget) to fix drag and drop. + +## CKEditor 4.3 + +New Features: + +* [#10612](http://dev.ckeditor.com/ticket/10612): Internet Explorer 11 support. +* [#10869](http://dev.ckeditor.com/ticket/10869): Widgets: Added better integration with the [Elements Path](http://ckeditor.com/addon/elementspath) plugin. +* [#10886](http://dev.ckeditor.com/ticket/10886): Widgets: Added tooltip to the drag handle. +* [#10933](http://dev.ckeditor.com/ticket/10933): Widgets: Introduced drag and drop of block widgets with the [Line Utilities](http://ckeditor.com/addon/lineutils) plugin. +* [#10936](http://dev.ckeditor.com/ticket/10936): Widget System changes for easier integration with other dialog systems. +* [#10895](http://dev.ckeditor.com/ticket/10895): [Enhanced Image](http://ckeditor.com/addon/image2): Added file browser integration. +* [#11002](http://dev.ckeditor.com/ticket/11002): Added the [`draggable`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-draggable) option to disable drag and drop support for widgets. +* [#10937](http://dev.ckeditor.com/ticket/10937): [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget improvements: + * loading indicator ([#10948](http://dev.ckeditor.com/ticket/10948)), + * applying paragraph changes (like font color change) to iframe ([#10841](http://dev.ckeditor.com/ticket/10841)), + * Firefox and IE9 clipboard fixes ([#10857](http://dev.ckeditor.com/ticket/10857)), + * fixing same origin policy issue ([#10840](http://dev.ckeditor.com/ticket/10840)), + * fixing undo bugs ([#10842](http://dev.ckeditor.com/ticket/10842), [#10930](http://dev.ckeditor.com/ticket/10930)), + * fixing other minor bugs. +* [#10862](http://dev.ckeditor.com/ticket/10862): [Placeholder](http://ckeditor.com/addon/placeholder) plugin was rewritten as a widget. +* [#10822](http://dev.ckeditor.com/ticket/10822): Added styles system integration with non-editable elements (for example widgets) and their nested editables. Styles cannot change non-editable content and are applied in nested editable only if allowed by its type and content filter. +* [#10856](http://dev.ckeditor.com/ticket/10856): Menu buttons will now toggle the visibility of their panels when clicked multiple times. [Language](http://ckeditor.com/addon/language) plugin fixes: Added active language highlighting, added an option to remove the language. +* [#10028](http://dev.ckeditor.com/ticket/10028): New [`config.dialog_noConfirmCancel`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-dialog_noConfirmCancel) configuration option that eliminates the need to confirm closing of a dialog window when the user changed any of its fields. +* [#10848](http://dev.ckeditor.com/ticket/10848): Integrate remaining plugins ([Styles](http://ckeditor.com/addon/stylescombo), [Format](http://ckeditor.com/addon/format), [Font](http://ckeditor.com/addon/font), [Color Button](http://ckeditor.com/addon/colorbutton), [Language](http://ckeditor.com/addon/language) and [Indent](http://ckeditor.com/addon/indent)) with [active filter](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter). +* [#10855](http://dev.ckeditor.com/ticket/10855): Change the extension of emoticons in the [BBCode](http://ckeditor.com/addon/bbcode) sample from GIF to PNG. + +Fixed Issues: + +* [#10831](http://dev.ckeditor.com/ticket/10831): [Enhanced Image](http://ckeditor.com/addon/image2): Merged `image2inline` and `image2block` into one `image2` widget. +* [#10835](http://dev.ckeditor.com/ticket/10835): [Enhanced Image](http://ckeditor.com/addon/image2): Improved visibility of the resize handle. +* [#10836](http://dev.ckeditor.com/ticket/10836): [Enhanced Image](http://ckeditor.com/addon/image2): Preserve custom mouse cursor while resizing the image. +* [#10939](http://dev.ckeditor.com/ticket/10939): [Firefox] [Enhanced Image](http://ckeditor.com/addon/image2): hovering the image causes it to change. +* [#10866](http://dev.ckeditor.com/ticket/10866): Fixed: Broken *Tab* key navigation in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. +* [#10833](http://dev.ckeditor.com/ticket/10833): Fixed: *Lock ratio* option should be on by default in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. +* [#10881](http://dev.ckeditor.com/ticket/10881): Various improvements to *Enter* key behavior in nested editables. +* [#10879](http://dev.ckeditor.com/ticket/10879): [Remove Format](http://ckeditor.com/addon/removeformat) should not leak from a nested editable. +* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [WebSpellChecker](http://ckeditor.com/addon/wsc) fails to apply changes if a nested editable was focused. +* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [SCAYT](http://ckeditor.com/addon/wsc) blocks typing in nested editables. +* [#11079](http://dev.ckeditor.com/ticket/11079): Add button icons to the [Placeholder](http://ckeditor.com/addon/placeholder) sample. +* [#10870](http://dev.ckeditor.com/ticket/10870): The `paste` command is no longer being disabled when the clipboard is empty. +* [#10854](http://dev.ckeditor.com/ticket/10854): Fixed: Firefox prepends `<br>` to `<body>`, so it is stripped by the HTML data processor. +* [#10823](http://dev.ckeditor.com/ticket/10823): Fixed: [Link](http://ckeditor.com/addon/link) plugin does not work with non-editable content. +* [#10828](http://dev.ckeditor.com/ticket/10828): [Magic Line](http://ckeditor.com/addon/magicline) integration with the Widget System. +* [#10865](http://dev.ckeditor.com/ticket/10865): Improved hiding copybin, so copying widgets works smoothly. +* [#11066](http://dev.ckeditor.com/ticket/11066): Widget's private parts use CSS reset. +* [#11027](http://dev.ckeditor.com/ticket/11027): Fixed: Block commands break on widgets; added the [`contentDomInvalidated`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDomInvalidated) event. +* [#10430](http://dev.ckeditor.com/ticket/10430): Resolve dependence of the [Image](http://ckeditor.com/addon/image) plugin on the [Form Elements](http://ckeditor.com/addon/forms) plugin. +* [#10911](http://dev.ckeditor.com/ticket/10911): Fixed: Browser *Alt* hotkeys will no longer be blocked while a widget is focused. +* [#11082](http://dev.ckeditor.com/ticket/11082): Fixed: Selected widget is not copied or cut when using toolbar buttons or context menu. +* [#11083](http://dev.ckeditor.com/ticket/11083): Fixed list and div element application to block widgets. +* [#10887](http://dev.ckeditor.com/ticket/10887): Internet Explorer 8 compatibility issues related to the Widget System. +* [#11074](http://dev.ckeditor.com/ticket/11074): Temporarily disabled inline widget drag and drop, because of seriously buggy native `range#moveToPoint` method. +* [#11098](http://dev.ckeditor.com/ticket/11098): Fixed: Wrong selection position after undoing widget drag and drop. +* [#11110](http://dev.ckeditor.com/ticket/11110): Fixed: IFrame and Flash objects are being incorrectly pasted in certain conditions. +* [#11129](http://dev.ckeditor.com/ticket/11129): Page break is lost when loading data. +* [#11123](http://dev.ckeditor.com/ticket/11123): [Firefox] Widget is destroyed after being dragged outside of `<body>`. +* [#11124](http://dev.ckeditor.com/ticket/11124): Fixed the [Elements Path](http://ckeditor.com/addon/elementspath) in an editor using the [Div Editing Area](http://ckeditor.com/addon/divarea). + +## CKEditor 4.3 Beta + +New Features: + +* [#9764](http://dev.ckeditor.com/ticket/9764): Widget System. + * [Widget plugin](http://ckeditor.com/addon/widget) introducing the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget). + * New [`editor.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) and [`editor.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-shiftEnterMode) properties – normalized versions of [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) and [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). + * Dynamic editor settings. Starting from CKEditor 4.3 Beta, *Enter* mode values and [content filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) instances may be changed dynamically (for example when the caret was placed in an element in which editor features should be adjusted). When you are implementing a new editor feature, you should base its behavior on [dynamic](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) or [static](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) *Enter* mode values depending on whether this feature works in selection context or globally on editor content. + * Dynamic *Enter* mode values – [`editor.setActiveEnterMode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveEnterMode) method, [`editor.activeEnterModeChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeEnterModeChange) event, and two properties: [`editor.activeEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) and [`editor.activeShiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeShiftEnterMode). + * Dynamic content filter instances – [`editor.setActiveFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveFilter) method, [`editor.activeFilterChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeFilterChange) event, and [`editor.activeFilter`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter) property. + * "Fake" selection was introduced. It makes it possible to virtually select any element when the real selection remains hidden. See the [`selection.fake()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-fake) method. + * Default [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied to non-editable elements (elements with `contenteditable` attribute set to `false` and their descendants) anymore. To add a rule which will be applied to all elements you need to pass an additional argument to the [`filter.addRules()`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter-method-addRules) method. + * Dozens of new methods were introduced – most interesting ones: + * [`document.find()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-find), + * [`document.findOne()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-findOne), + * [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange), + * [`range.moveToClosestEditablePosition()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-moveToClosestEditablePosition), + * New methods for [`htmlParser.node`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.node) and [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element). +* [#10659](http://dev.ckeditor.com/ticket/10659): New [Enhanced Image](http://ckeditor.com/addon/image2) plugin that introduces a widget with integrated image captions, an option to center images, and dynamic "click and drag" resizing. +* [#10664](http://dev.ckeditor.com/ticket/10664): New [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin that introduces the MathJax widget. +* [#7987](https://dev.ckeditor.com/ticket/7987): New [Language](http://ckeditor.com/addon/language) plugin that implements Language toolbar button to support [WCAG 3.1.2 Language of Parts](http://www.w3.org/TR/UNDERSTANDING-WCAG20/meaning-other-lang-id.html). +* [#10708](http://dev.ckeditor.com/ticket/10708): New [smileys](http://ckeditor.com/addon/smiley). + +## CKEditor 4.2.3 + +Fixed Issues: + +* [#10994](http://dev.ckeditor.com/ticket/10994): Fixed: Loading external jQuery library when opening the [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) sample directly from file. +* [#10975](http://dev.ckeditor.com/ticket/10975): [IE] Fixed: Error thrown while opening the color palette. +* [#9929](http://dev.ckeditor.com/ticket/9929): [Blink/WebKit] Fixed: A non-breaking space is created once a character is deleted and a regular space is typed. +* [#10963](http://dev.ckeditor.com/ticket/10963): Fixed: JAWS issue with the keyboard shortcut for [Magic Line](http://ckeditor.com/addon/magicline). +* [#11096](http://dev.ckeditor.com/ticket/11096): Fixed: TypeError: Object has no method 'is'. + +## CKEditor 4.2.2 + +Fixed Issues: + +* [#9314](http://dev.ckeditor.com/ticket/9314): Fixed: Incorrect error message on closing a dialog window without saving changs. +* [#10308](http://dev.ckeditor.com/ticket/10308): [IE10] Fixed: Unspecified error when deleting a row. +* [#10945](http://dev.ckeditor.com/ticket/10945): [Chrome] Fixed: Clicking with a mouse inside the editor does not show the caret. +* [#10912](http://dev.ckeditor.com/ticket/10912): Prevent default action when content of a non-editable link is clicked. +* [#10913](http://dev.ckeditor.com/ticket/10913): Fixed [`CKEDITOR.plugins.addExternal()`](http://docs.ckeditor.com/#!/api/CKEDITOR.resourceManager-method-addExternal) not handling paths including file name specified. +* [#10666](http://dev.ckeditor.com/ticket/10666): Fixed [`CKEDITOR.tools.isArray()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-isArray) not working cross frame. +* [#10910](http://dev.ckeditor.com/ticket/10910): [IE9] Fixed JavaScript error thrown in Compatibility Mode when clicking and/or typing in the editing area. +* [#10868](http://dev.ckeditor.com/ticket/10868): [IE8] Prevent the browser from crashing when applying the Inline Quotation style. +* [#10915](http://dev.ckeditor.com/ticket/10915): Fixed: Invalid CSS filter in the Kama skin. +* [#10914](http://dev.ckeditor.com/ticket/10914): Plugins [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock) are now included in the build configuration. +* [#10812](http://dev.ckeditor.com/ticket/10812): Fixed [`range.createBookmark2()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-createBookmark2) incorrectly normalizing offsets. This bug was causing many issues: [#10850](http://dev.ckeditor.com/ticket/10850), [#10842](http://dev.ckeditor.com/ticket/10842). +* [#10951](http://dev.ckeditor.com/ticket/10951): Reviewed and optimized focus handling on panels (combo, menu buttons, color buttons, and context menu) to enhance accessibility. Fixed [#10705](http://dev.ckeditor.com/ticket/10705), [#10706](http://dev.ckeditor.com/ticket/10706) and [#10707](http://dev.ckeditor.com/ticket/10707). +* [#10704](http://dev.ckeditor.com/ticket/10704): Fixed a JAWS issue with the Select Color dialog window title not being announced. +* [#10753](http://dev.ckeditor.com/ticket/10753): The floating toolbar in inline instances now has a dedicated accessibility label. + +## CKEditor 4.2.1 + +Fixed Issues: + +* [#10301](http://dev.ckeditor.com/ticket/10301): [IE9-10] Undo fails after 3+ consecutive paste actions with a JavaScript error. +* [#10689](http://dev.ckeditor.com/ticket/10689): Save toolbar button saves only the first editor instance. +* [#10368](http://dev.ckeditor.com/ticket/10368): Move language reading direction definition (`dir`) from main language file to core. +* [#9330](http://dev.ckeditor.com/ticket/9330): Fixed pasting anchors from MS Word. +* [#8103](http://dev.ckeditor.com/ticket/8103): Fixed pasting nested lists from MS Word. +* [#9958](http://dev.ckeditor.com/ticket/9958): [IE9] Pressing the "OK" button will trigger the `onbeforeunload` event in the popup dialog. +* [#10662](http://dev.ckeditor.com/ticket/10662): Fixed styles from the Styles drop-down list not registering to the ACF in case when the [Shared Spaces plugin](http://ckeditor.com/addon/sharedspace) is used. +* [#9654](http://dev.ckeditor.com/ticket/9654): Problems with Internet Explorer 10 Quirks Mode. +* [#9816](http://dev.ckeditor.com/ticket/9816): Floating toolbar does not reposition vertically in several cases. +* [#10646](http://dev.ckeditor.com/ticket/10646): Removing a selected sublist or nested table with *Backspace/Delete* removes the parent element. +* [#10623](http://dev.ckeditor.com/ticket/10623): [WebKit] Page is scrolled when opening a drop-down list. +* [#10004](http://dev.ckeditor.com/ticket/10004): [ChromeVox] Button names are not announced. +* [#10731](http://dev.ckeditor.com/ticket/10731): [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin breaks cloning of editor configuration. +* It is now possible to set per instance [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin configuration instead of setting the configuration globally. + +## CKEditor 4.2 + +**Important Notes:** + +* Dropped compatibility support for Internet Explorer 7 and Firefox 3.6. + +* Both the Basic and the Standard distribution packages will not contain the new [Indent Block](http://ckeditor.com/addon/indentblock) plugin. Because of this the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) might remove block indentations from existing contents. If you want to prevent this, either [add an appropriate ACF rule to your filter](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) or create a custom build based on the Basic/Standard package and add the Indent Block plugin in [CKBuilder](http://ckeditor.com/builder). + +New Features: + +* [#10027](http://dev.ckeditor.com/ticket/10027): Separated list and block indentation into two plugins: [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock). +* [#8244](http://dev.ckeditor.com/ticket/8244): Use *(Shift+)Tab* to indent and outdent lists. +* [#10281](http://dev.ckeditor.com/ticket/10281): The [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) is now available. Several jQuery-related issues fixed: [#8261](http://dev.ckeditor.com/ticket/8261), [#9077](http://dev.ckeditor.com/ticket/9077), [#8710](http://dev.ckeditor.com/ticket/8710), [#8530](http://dev.ckeditor.com/ticket/8530), [#9019](http://dev.ckeditor.com/ticket/9019), [#6181](http://dev.ckeditor.com/ticket/6181), [#7876](http://dev.ckeditor.com/ticket/7876), [#6906](http://dev.ckeditor.com/ticket/6906). +* [#10042](http://dev.ckeditor.com/ticket/10042): Introduced [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title) setting to change the human-readable title of the editor. +* [#9794](http://dev.ckeditor.com/ticket/9794): Added [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. +* [#9923](http://dev.ckeditor.com/ticket/9923): HiDPI support in the editor UI. HiDPI icons for [Moono skin](http://ckeditor.com/addon/moono) added. +* [#8031](http://dev.ckeditor.com/ticket/8031): Handle `required` attributes on `<textarea>` elements — introduced [`editor.required`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-required) event. +* [#10280](http://dev.ckeditor.com/ticket/10280): Ability to replace `<textarea>` elements with the inline editor. + +Fixed Issues: + +* [#10599](http://dev.ckeditor.com/ticket/10599): [Indent](http://ckeditor.com/addon/indent) plugin is no longer required by the [List](http://ckeditor.com/addon/list) plugin. +* [#10370](http://dev.ckeditor.com/ticket/10370): Inconsistency in data events between framed and inline editors. +* [#10438](http://dev.ckeditor.com/ticket/10438): [FF, IE] No selection is done on an editable element on executing [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData). + +## CKEditor 4.1.3 + +New Features: + +* Added new translation: Indonesian. + +Fixed Issues: + +* [#10644](http://dev.ckeditor.com/ticket/10644): Fixed a critical bug when pasting plain text in Blink-based browsers. +* [#5189](http://dev.ckeditor.com/ticket/5189): [Find/Replace](http://ckeditor.com/addon/find) dialog window: rename "Cancel" button to "Close". +* [#10562](http://dev.ckeditor.com/ticket/10562): [Housekeeping] Unified CSS gradient filter formats in the [Moono](http://ckeditor.com/addon/moono) skin. +* [#10537](http://dev.ckeditor.com/ticket/10537): Advanced Content Filter should register a default rule for [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). +* [#10610](http://dev.ckeditor.com/ticket/10610): [`CKEDITOR.dialog.addIframe()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-static-method-addIframe) incorrectly sets the iframe size in dialog windows. + +## CKEditor 4.1.2 + +New Features: + +* Added new translation: Sinhala. + +Fixed Issues: + +* [#10339](http://dev.ckeditor.com/ticket/10339): Fixed: Error thrown when inserted data was totally stripped out after filtering and processing. +* [#10298](http://dev.ckeditor.com/ticket/10298): Fixed: Data processor breaks attributes containing protected parts. +* [#10367](http://dev.ckeditor.com/ticket/10367): Fixed: [`editable.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertText) loses characters when `RegExp` replace controls are being inserted. +* [#10165](http://dev.ckeditor.com/ticket/10165): [IE] Access denied error when `document.domain` has been altered. +* [#9761](http://dev.ckeditor.com/ticket/9761): Update the *Backspace* key state in [`keystrokeHandler.blockedKeystrokes`](http://docs.ckeditor.com/#!/api/CKEDITOR.keystrokeHandler-property-blockedKeystrokes) when calling [`editor.setReadOnly()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly). +* [#6504](http://dev.ckeditor.com/ticket/6504): Fixed: Race condition while loading several [`config.customConfig`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-customConfig) files. +* [#10146](http://dev.ckeditor.com/ticket/10146): [Firefox] Empty lines are being removed while [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) is [`CKEDITOR.ENTER_BR`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-ENTER_BR). +* [#10360](http://dev.ckeditor.com/ticket/10360): Fixed: ARIA `role="application"` should not be used for dialog windows. +* [#10361](http://dev.ckeditor.com/ticket/10361): Fixed: ARIA `role="application"` should not be used for floating panels. +* [#10510](http://dev.ckeditor.com/ticket/10510): Introduced unique voice labels to differentiate between different editor instances. +* [#9945](http://dev.ckeditor.com/ticket/9945): [iOS] Scrolling not possible on iPad. +* [#10389](http://dev.ckeditor.com/ticket/10389): Fixed: Invalid HTML in the "Text and Table" template. +* [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin user interface was changed to match CKEditor 4 style. + +## CKEditor 4.1.1 + +New Features: + +* Added new translation: Albanian. + +Fixed Issues: + +* [#10172](http://dev.ckeditor.com/ticket/10172): Pressing *Delete* or *Backspace* in an empty table cell moves the cursor to the next/previous cell. +* [#10219](http://dev.ckeditor.com/ticket/10219): Error thrown when destroying an editor instance in parallel with a `mouseup` event. +* [#10265](http://dev.ckeditor.com/ticket/10265): Wrong loop type in the [File Browser](http://ckeditor.com/addon/filebrowser) plugin. +* [#10249](http://dev.ckeditor.com/ticket/10249): Wrong undo/redo states at start. +* [#10268](http://dev.ckeditor.com/ticket/10268): [Show Blocks](http://ckeditor.com/addon/showblocks) does not recover after switching to Source view. +* [#9995](http://dev.ckeditor.com/ticket/9995): HTML code in the `<textarea>` should not be modified by the [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor). +* [#10320](http://dev.ckeditor.com/ticket/10320): [Justify](http://ckeditor.com/addon/justify) plugin should add elements to Advanced Content Filter based on current [Enter mode](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode). +* [#10260](http://dev.ckeditor.com/ticket/10260): Fixed: Advanced Content Filter blocks [`tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces). Unified `data-cke-*` attributes filtering. +* [#10315](http://dev.ckeditor.com/ticket/10315): [WebKit] [Undo manager](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager) should not record snapshots after a filling character was added/removed. +* [#10291](http://dev.ckeditor.com/ticket/10291): [WebKit] Space after a filling character should be secured. +* [#10330](http://dev.ckeditor.com/ticket/10330): [WebKit] The filling character is not removed on `keydown` in specific cases. +* [#10285](http://dev.ckeditor.com/ticket/10285): Fixed: Styled text pasted from MS Word causes an infinite loop. +* [#10131](http://dev.ckeditor.com/ticket/10131): Fixed: [`undoManager.update()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-method-update) does not refresh the command state. +* [#10337](http://dev.ckeditor.com/ticket/10337): Fixed: Unable to remove `<s>` using [Remove Format](http://ckeditor.com/addon/removeformat). + +## CKEditor 4.1 + +Fixed Issues: + +* [#10192](http://dev.ckeditor.com/ticket/10192): Closing lists with the *Enter* key does not work with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) in several cases. +* [#10191](http://dev.ckeditor.com/ticket/10191): Fixed allowed content rules unification, so the [`filter.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-property-allowedContent) property always contains rules in the same format. +* [#10224](http://dev.ckeditor.com/ticket/10224): Advanced Content Filter does not remove non-empty `<a>` elements anymore. +* Minor issues in plugin integration with Advanced Content Filter: + * [#10166](http://dev.ckeditor.com/ticket/10166): Added transformation from the `align` attribute to `float` style to preserve backward compatibility after the introduction of Advanced Content Filter. + * [#10195](http://dev.ckeditor.com/ticket/10195): [Image](http://ckeditor.com/addon/image) plugin no longer registers rules for links to Advanced Content Filter. + * [#10213](http://dev.ckeditor.com/ticket/10213): [Justify](http://ckeditor.com/addon/justify) plugin is now correctly registering rules to Advanced Content Filter when [`config.justifyClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-justifyClasses) is defined. + +## CKEditor 4.1 RC + +New Features: + +* [#9829](http://dev.ckeditor.com/ticket/9829): Advanced Content Filter - data and features activation based on editor configuration. + + Brand new data filtering system that works in 2 modes: + + * Based on loaded features (toolbar items, plugins) - the data will be filtered according to what the editor in its + current configuration can handle. + * Based on [`config.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent) rules - the data + will be filtered and the editor features (toolbar items, commands, keystrokes) will be enabled if they are allowed. + + See the `datafiltering.html` sample, [guides](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) and [`CKEDITOR.filter` API documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.filter). +* [#9387](http://dev.ckeditor.com/ticket/9387): Reintroduced [Shared Spaces](http://ckeditor.com/addon/sharedspace) - the ability to display toolbar and bottom editor space in selected locations and to share them by different editor instances. +* [#9907](http://dev.ckeditor.com/ticket/9907): Added the [`contentPreview`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-contentPreview) event for preview data manipulation. +* [#9713](http://dev.ckeditor.com/ticket/9713): Introduced the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin that brings raw HTML editing for inline editor instances. +* Included in [#9829](http://dev.ckeditor.com/ticket/9829): Introduced new events, [`toHtml`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml) and [`toDataFormat`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toDataFormat), allowing for better integration with data processing. +* [#9981](http://dev.ckeditor.com/ticket/9981): Added ability to filter [`htmlParser.fragment`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.fragment), [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element) etc. by many [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter)s before writing structure to an HTML string. +* Included in [#10103](http://dev.ckeditor.com/ticket/10103): + * Introduced the [`editor.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-status) property to make it easier to check the current status of the editor. + * Default [`command`](http://docs.ckeditor.com/#!/api/CKEDITOR.command) state is now [`CKEDITOR.TRISTATE_DISABLE`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-TRISTATE_DISABLED). It will be activated on [`editor.instanceReady`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-instanceReady) or immediately after being added if the editor is already initialized. +* [#9796](http://dev.ckeditor.com/ticket/9796): Introduced `<s>` as a default tag for strikethrough, which replaces obsolete `<strike>` in HTML5. + +## CKEditor 4.0.3 + +Fixed Issues: + +* [#10196](http://dev.ckeditor.com/ticket/10196): Fixed context menus not opening with keyboard shortcuts when [Autogrow](http://ckeditor.com/addon/autogrow) is enabled. +* [#10212](http://dev.ckeditor.com/ticket/10212): [IE7-10] Undo command throws errors after multiple switches between Source and WYSIWYG view. +* [#10219](http://dev.ckeditor.com/ticket/10219): [Inline editor] Error thrown after calling [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy). + +## CKEditor 4.0.2 + +Fixed Issues: + +* [#9779](http://dev.ckeditor.com/ticket/9779): Fixed overriding [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl) with `CKEDITOR_GETURL`. +* [#9772](http://dev.ckeditor.com/ticket/9772): Custom buttons in the dialog window footer have different look and size ([Moono](http://ckeditor.com/addon/moono), [Kama](http://ckeditor.com/addon/kama) skins). +* [#9029](http://dev.ckeditor.com/ticket/9029): Custom styles added with the [`stylesSet.add()`](http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet-method-add) are displayed in the wrong order. +* [#9887](http://dev.ckeditor.com/ticket/9887): Disable [Magic Line](http://ckeditor.com/addon/magicline) when [`editor.readOnly`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) is set. +* [#9882](http://dev.ckeditor.com/ticket/9882): Fixed empty document title on [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) if set via the Document Properties dialog window. +* [#9773](http://dev.ckeditor.com/ticket/9773): Fixed rendering problems with selection fields in the Kama skin. +* [#9851](http://dev.ckeditor.com/ticket/9851): The [`selectionChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-selectionChange) event is not fired when mouse selection ended outside editable. +* [#9903](http://dev.ckeditor.com/ticket/9903): [Inline editor] Bad positioning of floating space with page horizontal scroll. +* [#9872](http://dev.ckeditor.com/ticket/9872): [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) returns `true` when called onload. Removed the obsolete `editor.mayBeDirty` flag. +* [#9893](http://dev.ckeditor.com/ticket/9893): [IE] Fixed broken toolbar when editing mixed direction content in Quirks mode. +* [#9845](http://dev.ckeditor.com/ticket/9845): Fixed TAB navigation in the [Link](http://ckeditor.com/addon/link) dialog window when the Anchor option is used and no anchors are available. +* [#9883](http://dev.ckeditor.com/ticket/9883): Maximizing was making the entire page editable with [divarea](http://ckeditor.com/addon/divarea)-based editors. +* [#9940](http://dev.ckeditor.com/ticket/9940): [Firefox] Navigating back to a page with the editor was making the entire page editable. +* [#9966](http://dev.ckeditor.com/ticket/9966): Fixed: Unable to type square brackets with French keyboard layout. Changed [Magic Line](http://ckeditor.com/addon/magicline) keystrokes. +* [#9507](http://dev.ckeditor.com/ticket/9507): [Firefox] Selection is moved before editable position when the editor is focused for the first time. +* [#9947](http://dev.ckeditor.com/ticket/9947): [WebKit] Editor overflows parent container in some edge cases. +* [#10105](http://dev.ckeditor.com/ticket/10105): Fixed: Broken [sourcearea](http://ckeditor.com/addon/sourcearea) view when an RTL language is set. +* [#10123](http://dev.ckeditor.com/ticket/10123): [WebKit] Fixed: Several dialog windows have broken layout since the latest WebKit release. +* [#10152](http://dev.ckeditor.com/ticket/10152): Fixed: Invalid ARIA property used on menu items. + +## CKEditor 4.0.1.1 + +Fixed Issues: + +* Security update: Added protection against XSS attack and possible path disclosure in the PHP sample. + +## CKEditor 4.0.1 + +Fixed Issues: + +* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in the new [Moono skin](http://ckeditor.com/addon/moono). +* Accessibility issues (mainly in inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844). +* [Magic Line](http://ckeditor.com/addon/magicline) plugin: + * [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic Line. + * [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic Line support for forms. + * [#9573](http://dev.ckeditor.com/ticket/9573): Magic Line does not disappear on `mouseout` in a specific case. +* [#9754](http://dev.ckeditor.com/ticket/9754): [WebKit] Cutting & pasting simple unformatted text generates an inline wrapper in WebKit browsers. +* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS Word. +* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging. +* Context menu: + * [#9712](http://dev.ckeditor.com/ticket/9712): Opening the context menu destroys editor focus. + * [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over the floating toolbar. + * [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates a JavaScript error in inline mode when the editor is attached to a header element. +* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing the window. +* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div-based editor puts the editing area under the bottom UI space. +* [#9528](http://dev.ckeditor.com/ticket/9528): Host page `box-sizing` style should not influence the editor UI elements. +* [#9503](http://dev.ckeditor.com/ticket/9503): [Form Elements](http://ckeditor.com/addon/forms) plugin adds context menu listeners only on supported input types. Added support for `tel`, `email`, `search` and `url` input types. +* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in a narrow window. +* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog window does not populate width correctly. +* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in a nested table removes the outer table cell. +* [#9815](http://dev.ckeditor.com/ticket/9815): Cannot edit dialog window fields in an editor initialized in the jQuery UI modal dialog. +* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialog windows do not show completely in a small window. +* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a `<div>` element stay permanently even after the user exits editing the `<div>`. +* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing the Format drop-down list by clicking its button. +* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when the `border-width` style is specified. +* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read-only mode. +* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected images. +* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>` elements. +* [#9709](http://dev.ckeditor.com/ticket/9709): [Paste from Word](http://ckeditor.com/addon/pastefromword) should not depend on configuration from other styles. +* [#9726](http://dev.ckeditor.com/ticket/9726): Removed [Color Dialog](http://ckeditor.com/addon/colordialog) plugin dependency from [Table Tools](http://ckeditor.com/addon/tabletools). +* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly in the [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp) dialog window. +* [#9771](http://dev.ckeditor.com/ticket/9771): [WebKit & Opera] Fixed scrolling issues when pasting. +* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] `onChange` is not fired for checkboxes in dialogs. +* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When opening a toolbar menu for the first time and pressing the *Down Arrow* key, focus goes to the next toolbar button instead of the menu options. +* [#9847](http://dev.ckeditor.com/ticket/9847): [Elements Path](http://ckeditor.com/addon/elementspath) should not be initialized in the inline editor. +* [#9853](http://dev.ckeditor.com/ticket/9853): [`editor.addRemoveFormatFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addRemoveFormatFilter) is exposed before it really works. +* [#8893](http://dev.ckeditor.com/ticket/8893): Value of the [`pasteFromWordCleanupFile`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordCleanupFile) configuration option is now taken from the instance configuration. +* [#9693](http://dev.ckeditor.com/ticket/9693): Removed "Live Preview" checkbox from UI color picker. + + +## CKEditor 4.0 + +The first stable release of the new CKEditor 4 code line. + +The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever +possible. The list of relevant changes can be found in the [API Changes page of +the CKEditor 4 documentation][1]. + +[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes" diff --git a/sites/all/libraries/ckeditor/LICENSE.md b/sites/all/libraries/ckeditor/LICENSE.md new file mode 100644 index 0000000000..aad56b7e1e --- /dev/null +++ b/sites/all/libraries/ckeditor/LICENSE.md @@ -0,0 +1,1264 @@ +Software License Agreement +========================== + +CKEditor - The text editor for Internet - http://ckeditor.com +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your +choice: + + - GNU General Public License Version 2 or later (the "GPL") + http://www.gnu.org/licenses/gpl.html + (See Appendix A) + + - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + http://www.gnu.org/licenses/lgpl.html + (See Appendix B) + + - Mozilla Public License Version 1.1 or later (the "MPL") + http://www.mozilla.org/MPL/MPL-1.1.html + (See Appendix C) + +You are not required to, but if you want to explicitly declare the +license you have chosen to be bound to when using, reproducing, +modifying and distributing this software, just include a text file +titled "legal.txt" in your version of this software, indicating your +license choice. In any case, your choice will not restrict any +recipient of your version of this software to use, reproduce, modify +and distribute this software under any of the above licenses. + +Sources of Intellectual Property Included in CKEditor +----------------------------------------------------- + +Where not otherwise indicated, all CKEditor content is authored by +CKSource engineers and consists of CKSource-owned intellectual +property. In some specific instances, CKEditor will incorporate work +done by developers outside of CKSource with their express permission. + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand +and product names are trademarks, registered trademarks or service +marks of their respective holders. + +--- + +Appendix A: The GPL License +--------------------------- + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software-to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix B: The LGPL License +---------------------------- + +GNU LESSER GENERAL PUBLIC LICENSE +Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software-to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages-typically libraries-of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + +GNU LESSER GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + +NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix C: The MPL License +--------------------------- + +MOZILLA PUBLIC LICENSE +Version 1.1 + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] diff --git a/sites/all/libraries/ckeditor/README.md b/sites/all/libraries/ckeditor/README.md new file mode 100644 index 0000000000..c5a55cd88f --- /dev/null +++ b/sites/all/libraries/ckeditor/README.md @@ -0,0 +1,39 @@ +CKEditor 4 +========== + +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +http://ckeditor.com - See LICENSE.md for license information. + +CKEditor is a text editor to be used inside web pages. It's not a replacement +for desktop text editors like Word or OpenOffice, but a component to be used as +part of web applications and websites. + +## Documentation + +The full editor documentation is available online at the following address: +http://docs.ckeditor.com + +## Installation + +Installing CKEditor is an easy task. Just follow these simple steps: + + 1. **Download** the latest version from the CKEditor website: + http://ckeditor.com. You should have already completed this step, but be + sure you have the very latest version. + 2. **Extract** (decompress) the downloaded file into the root of your website. + +**Note:** CKEditor is by default installed in the `ckeditor` folder. You can +place the files in whichever you want though. + +## Checking Your Installation + +The editor comes with a few sample pages that can be used to verify that +installation proceeded properly. Take a look at the `samples` directory. + +To test your installation, just call the following page at your website: + + http://<your site>/<CKEditor installation path>/samples/index.html + +For example: + + http://www.example.com/ckeditor/samples/index.html diff --git a/sites/all/libraries/ckeditor/adapters/jquery.js b/sites/all/libraries/ckeditor/adapters/jquery.js new file mode 100644 index 0000000000..704635fb43 --- /dev/null +++ b/sites/all/libraries/ckeditor/adapters/jquery.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(a){CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;"undefined"!=typeof a&&(a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a},ckeditor:function(g,d){if(!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");if(!a.isFunction(g))var k=d,d=g,g=k;var i=[],d=d||{};this.each(function(){var b= +a(this),c=b.data("ckeditorInstance"),f=b.data("_ckeditorInstanceLock"),h=this,j=new a.Deferred;i.push(j.promise());if(c&&!f)g&&g.apply(c,[this]),j.resolve();else if(f)c.once("instanceReady",function(){setTimeout(function(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),j.resolve()):setTimeout(arguments.callee,100)},0)},null,null,9999);else{if(d.autoUpdateElement||"undefined"==typeof d.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)d.autoUpdateElementJquery=!0;d.autoUpdateElement=!1;b.data("_ckeditorInstanceLock", +!0);c=a(this).is("textarea")?CKEDITOR.replace(h,d):CKEDITOR.inline(h,d);b.data("ckeditorInstance",c);c.on("instanceReady",function(d){var e=d.editor;setTimeout(function(){if(e.element){d.removeListener();e.on("dataReady",function(){b.trigger("dataReady.ckeditor",[e])});e.on("setData",function(a){b.trigger("setData.ckeditor",[e,a.data])});e.on("getData",function(a){b.trigger("getData.ckeditor",[e,a.data])},999);e.on("destroy",function(){b.trigger("destroy.ckeditor",[e])});e.on("save",function(){a(h.form).submit(); +return!1},null,null,20);if(e.config.autoUpdateElementJquery&&b.is("textarea")&&a(h.form).length){var c=function(){b.ckeditor(function(){e.updateElement()})};a(h.form).submit(c);a(h.form).bind("form-pre-serialize",c);b.bind("destroy.ckeditor",function(){a(h.form).unbind("submit",c);a(h.form).unbind("form-pre-serialize",c)})}e.on("destroy",function(){b.removeData("ckeditorInstance")});b.removeData("_ckeditorInstanceLock");b.trigger("instanceReady.ckeditor",[e]);g&&g.apply(e,[h]);j.resolve()}else setTimeout(arguments.callee, +100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,i).then(function(){f.resolve()});this.editor=this.eq(0).data("ckeditorInstance");return this}}),CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(d){if(arguments.length){var k=this,i=[],f=this.each(function(){var b=a(this),c=b.data("ckeditorInstance");if(b.is("textarea")&&c){var f=new a.Deferred;c.setData(d,function(){f.resolve()});i.push(f.promise()); +return!0}return g.call(b,d)});if(i.length){var b=new a.Deferred;a.when.apply(this,i).done(function(){b.resolveWith(k)});return b.promise()}return f}var f=a(this).eq(0),c=f.data("ckeditorInstance");return f.is("textarea")&&c?c.getData():g.call(f)}})))})(window.jQuery); \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/build-config.js b/sites/all/libraries/ckeditor/build-config.js new file mode 100644 index 0000000000..105dfec1c4 --- /dev/null +++ b/sites/all/libraries/ckeditor/build-config.js @@ -0,0 +1,157 @@ +/** + * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +/** + * This file was added automatically by CKEditor builder. + * You may re-use it at any time to build CKEditor again. + * + * If you would like to build CKEditor online again + * (for example to upgrade), visit one the following links: + * + * (1) http://ckeditor.com/builder + * Visit online builder to build CKEditor from scratch. + * + * (2) http://ckeditor.com/builder/e41bccb8290b6d530f8478ddafe95c48 + * Visit online builder to build CKEditor, starting with the same setup as before. + * + * (3) http://ckeditor.com/builder/download/e41bccb8290b6d530f8478ddafe95c48 + * Straight download link to the latest version of CKEditor (Optimized) with the same setup as before. + * + * NOTE: + * This file is not used by CKEditor, you may remove it. + * Changing this file will not change your CKEditor configuration. + */ + +var CKBUILDER_CONFIG = { + skin: 'moono', + preset: 'standard', + ignore: [ + '.bender', + 'bender.js', + 'bender-err.log', + 'bender-out.log', + 'dev', + '.DS_Store', + '.editorconfig', + '.gitattributes', + '.gitignore', + 'gruntfile.js', + '.idea', + '.jscsrc', + '.jshintignore', + '.jshintrc', + '.mailmap', + 'node_modules', + 'package.json', + 'README.md', + 'tests' + ], + plugins : { + 'a11yhelp' : 1, + 'about' : 1, + 'basicstyles' : 1, + 'blockquote' : 1, + 'clipboard' : 1, + 'contextmenu' : 1, + 'elementspath' : 1, + 'enterkey' : 1, + 'entities' : 1, + 'filebrowser' : 1, + 'floatingspace' : 1, + 'format' : 1, + 'horizontalrule' : 1, + 'htmlwriter' : 1, + 'image' : 1, + 'indentlist' : 1, + 'link' : 1, + 'list' : 1, + 'magicline' : 1, + 'maximize' : 1, + 'pastefromword' : 1, + 'pastetext' : 1, + 'removeformat' : 1, + 'resize' : 1, + 'scayt' : 1, + 'showborders' : 1, + 'sourcearea' : 1, + 'specialchar' : 1, + 'stylescombo' : 1, + 'tab' : 1, + 'table' : 1, + 'tabletools' : 1, + 'toolbar' : 1, + 'undo' : 1, + 'wsc' : 1, + 'wysiwygarea' : 1 + }, + languages : { + 'af' : 1, + 'ar' : 1, + 'bg' : 1, + 'bn' : 1, + 'bs' : 1, + 'ca' : 1, + 'cs' : 1, + 'cy' : 1, + 'da' : 1, + 'de' : 1, + 'el' : 1, + 'en' : 1, + 'en-au' : 1, + 'en-ca' : 1, + 'en-gb' : 1, + 'eo' : 1, + 'es' : 1, + 'et' : 1, + 'eu' : 1, + 'fa' : 1, + 'fi' : 1, + 'fo' : 1, + 'fr' : 1, + 'fr-ca' : 1, + 'gl' : 1, + 'gu' : 1, + 'he' : 1, + 'hi' : 1, + 'hr' : 1, + 'hu' : 1, + 'id' : 1, + 'is' : 1, + 'it' : 1, + 'ja' : 1, + 'ka' : 1, + 'km' : 1, + 'ko' : 1, + 'ku' : 1, + 'lt' : 1, + 'lv' : 1, + 'mk' : 1, + 'mn' : 1, + 'ms' : 1, + 'nb' : 1, + 'nl' : 1, + 'no' : 1, + 'pl' : 1, + 'pt' : 1, + 'pt-br' : 1, + 'ro' : 1, + 'ru' : 1, + 'si' : 1, + 'sk' : 1, + 'sl' : 1, + 'sq' : 1, + 'sr' : 1, + 'sr-latn' : 1, + 'sv' : 1, + 'th' : 1, + 'tr' : 1, + 'tt' : 1, + 'ug' : 1, + 'uk' : 1, + 'vi' : 1, + 'zh' : 1, + 'zh-cn' : 1 + } +}; \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/ckeditor.js b/sites/all/libraries/ckeditor/ckeditor.js new file mode 100644 index 0000000000..9ab3617ece --- /dev/null +++ b/sites/all/libraries/ckeditor/ckeditor.js @@ -0,0 +1,946 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,f={timestamp:"F0RD",version:"4.4.7",revision:"3a35b3d",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var e=window.CKEDITOR_BASEPATH||"";if(!e)for(var d=document.getElementsByTagName("script"),c=0;c<d.length;c++){var b=d[c].src.match(a);if(b){e=b[1];break}}-1==e.indexOf(":/")&&"//"!=e.slice(0,2)&&(e=0===e.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+ +e:location.href.match(/^[^\?]*\/(?:)/)[0]+e);if(!e)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return e}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);this.timestamp&&("/"!=a.charAt(a.length-1)&&!/[&?]t=/.test(a))&&(a+=(0<=a.indexOf("?")?"&":"?")+"t="+this.timestamp);return a},domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded", +a,!1),d()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),d())}catch(c){}}function d(){for(var a;a=c.shift();)a()}var c=[];return function(d){function b(){try{document.documentElement.doScroll("left")}catch(m){setTimeout(b,1);return}a()}c.push(d);"complete"===document.readyState&&setTimeout(a,1);if(1==c.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange", +a);window.attachEvent("onload",a);d=!1;try{d=!window.frameElement}catch(f){}document.documentElement.doScroll&&d&&b()}}}()},b=window.CKEDITOR_GETURL;if(b){var c=f.getUrl;f.getUrl=function(a){return b.call(f,a)||c.call(f,a)}}return f}()); +CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(a){var f=CKEDITOR.event.prototype,b;for(b in f)a[b]==null&&(a[b]=f[b])},CKEDITOR.event.prototype=function(){function a(a){var e=f(this);return e[a]||(e[a]=new b(a))}var f=function(a){a=a.getPrivate&&a.getPrivate()||a._||(a._={});return a.events||(a.events={})},b=function(a){this.name=a;this.listeners=[]};b.prototype={getListenerIndex:function(a){for(var e=0,d=this.listeners;e<d.length;e++)if(d[e].fn==a)return e;return-1}}; +return{define:function(b,e){var d=a.call(this,b);CKEDITOR.tools.extend(d,e,true)},on:function(b,e,d,f,k){function j(a,m,y,s){a={name:b,sender:this,editor:a,data:m,listenerData:f,stop:y,cancel:s,removeListener:g};return e.call(d,a)===false?false:a.data}function g(){y.removeListener(b,e)}var m=a.call(this,b);if(m.getListenerIndex(e)<0){m=m.listeners;d||(d=this);isNaN(k)&&(k=10);var y=this;j.fn=e;j.priority=k;for(var s=m.length-1;s>=0;s--)if(m[s].priority<=k){m.splice(s+1,0,j);return{removeListener:g}}m.unshift(j)}return{removeListener:g}}, +once:function(){var a=Array.prototype.slice.call(arguments),e=a[1];a[1]=function(a){a.removeListener();return e.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,e=function(){a=1},d=0,b=function(){d=1};return function(k,j,g){var m=f(this)[k],k=a,y=d;a=d=0;if(m){var s=m.listeners;if(s.length)for(var s=s.slice(0),w,q=0;q<s.length;q++){if(m.errorProof)try{w= +s[q].call(this,g,j,e,b)}catch(t){}else w=s[q].call(this,g,j,e,b);w===false?d=1:typeof w!="undefined"&&(j=w);if(a||d)break}}j=d?false:typeof j=="undefined"?true:j;a=k;d=y;return j}}(),fireOnce:function(a,e,d){e=this.fire(a,e,d);delete f(this)[a];return e},removeListener:function(a,e){var d=f(this)[a];if(d){var b=d.getListenerIndex(e);b>=0&&d.listeners.splice(b,1)}},removeAllListeners:function(){var a=f(this),e;for(e in a)delete a[e]},hasListeners:function(a){return(a=f(this)[a])&&a.listeners.length> +0}}}());CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(a,f){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fire.call(this,a,f,this)},CKEDITOR.editor.prototype.fireOnce=function(a,f){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fireOnce.call(this,a,f,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)); +CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),f={ie:a.indexOf("trident/")>-1,webkit:a.indexOf(" applewebkit/")>-1,air:a.indexOf(" adobeair/")>-1,mac:a.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat"&&(!document.documentMode||document.documentMode<10),mobile:a.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return false;var a=document.domain,d=window.location.hostname;return a!=d&&a!="["+d+"]"},secure:location.protocol== +"https:"};f.gecko=navigator.product=="Gecko"&&!f.webkit&&!f.ie;if(f.webkit)a.indexOf("chrome")>-1?f.chrome=true:f.safari=true;var b=0;if(f.ie){b=f.quirks||!document.documentMode?parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode;f.ie9Compat=b==9;f.ie8Compat=b==8;f.ie7Compat=b==7;f.ie6Compat=b<7||f.quirks}if(f.gecko){var c=a.match(/rv:([\d\.]+)/);if(c){c=c[1].split(".");b=c[0]*1E4+(c[1]||0)*100+(c[2]||0)*1}}f.air&&(b=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));f.webkit&&(b=parseFloat(a.match(/ applewebkit\/(\d+)/)[1])); +f.version=b;f.isCompatible=f.iOS&&b>=534||!f.mobile&&(f.ie&&b>6||f.gecko&&b>=2E4||f.air&&b>=1||f.webkit&&b>=522||false);f.hidpi=window.devicePixelRatio>=2;f.needsBrFiller=f.gecko||f.webkit||f.ie&&b>10;f.needsNbspFiller=f.ie&&b<11;f.cssClass="cke_browser_"+(f.ie?"ie":f.gecko?"gecko":f.webkit?"webkit":"unknown");if(f.quirks)f.cssClass=f.cssClass+" cke_browser_quirks";if(f.ie)f.cssClass=f.cssClass+(" cke_browser_ie"+(f.quirks?"6 cke_browser_iequirks":f.version));if(f.air)f.cssClass=f.cssClass+" cke_browser_air"; +if(f.iOS)f.cssClass=f.cssClass+" cke_browser_ios";if(f.hidpi)f.cssClass=f.cssClass+" cke_hidpi";return f}()); +"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready")CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement("script");a.type="text/javascript";a.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a= +CKEDITOR.loadFullCore,f=CKEDITOR.loadFullCoreTimeout;if(a){CKEDITOR.status="basic_ready";a&&a._load?a():f&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},f*1E3)}})})();CKEDITOR.status="basic_loaded"}();CKEDITOR.dom={}; +(function(){var a=[],f=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,c=/>/g,e=/</g,d=/"/g,h=/&/g,k=/>/g,j=/</g,g=/"/g;CKEDITOR.on("reset",function(){a=[]});CKEDITOR.tools={arrayCompare:function(a,e){if(!a&&!e)return true;if(!a||!e||a.length!=e.length)return false;for(var d=0;d<a.length;d++)if(a[d]!=e[d])return false;return true},clone:function(a){var e;if(a&&a instanceof Array){e=[];for(var d=0;d<a.length;d++)e[d]=CKEDITOR.tools.clone(a[d]); +return e}if(a===null||typeof a!="object"||a instanceof String||a instanceof Number||a instanceof Boolean||a instanceof Date||a instanceof RegExp||a.nodeType||a.window===a)return a;e=new a.constructor;for(d in a)e[d]=CKEDITOR.tools.clone(a[d]);return e},capitalize:function(a,e){return a.charAt(0).toUpperCase()+(e?a.slice(1):a.slice(1).toLowerCase())},extend:function(a){var e=arguments.length,d,b;if(typeof(d=arguments[e-1])=="boolean")e--;else if(typeof(d=arguments[e-2])=="boolean"){b=arguments[e-1]; +e=e-2}for(var c=1;c<e;c++){var f=arguments[c],i;for(i in f)if(d===true||a[i]==null)if(!b||i in b)a[i]=f[i]}return a},prototypedCopy:function(a){var e=function(){};e.prototype=a;return new e},copy:function(a){var e={},d;for(d in a)e[d]=a[d];return e},isArray:function(a){return Object.prototype.toString.call(a)=="[object Array]"},isEmpty:function(a){for(var e in a)if(a.hasOwnProperty(e))return false;return true},cssVendorPrefix:function(a,e,d){if(d)return f+a+":"+e+";"+a+":"+e;d={};d[a]=e;d[f+a]=e; +return d},cssStyleToDomStyle:function(){var a=document.createElement("div").style,e=typeof a.cssFloat!="undefined"?"cssFloat":typeof a.styleFloat!="undefined"?"styleFloat":"float";return function(a){return a=="float"?e:a.replace(/-./g,function(a){return a.substr(1).toUpperCase()})}}(),buildStyleHtml:function(a){for(var a=[].concat(a),e,d=[],b=0;b<a.length;b++)if(e=a[b])/@import|[{}]/.test(e)?d.push("<style>"+e+"</style>"):d.push('<link type="text/css" rel=stylesheet href="'+e+'">');return d.join("")}, +htmlEncode:function(a){return(""+a).replace(b,"&").replace(c,">").replace(e,"<")},htmlDecode:function(a){return a.replace(h,"&").replace(k,">").replace(j,"<")},htmlEncodeAttr:function(a){return a.replace(d,""").replace(e,"<").replace(c,">")},htmlDecodeAttr:function(a){return a.replace(g,'"').replace(j,"<").replace(k,">")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},override:function(a,e){var d=e(a);d.prototype= +a.prototype;return d},setTimeout:function(a,e,d,b,c){c||(c=window);d||(d=c);return c.setTimeout(function(){b?a.apply(d,[].concat(b)):a.apply(d)},e||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(e){return e.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(e){return e.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(e){return e.replace(a,"")}}(),indexOf:function(a,e){if(typeof e=="function")for(var d=0,b=a.length;d<b;d++){if(e(a[d]))return d}else{if(a.indexOf)return a.indexOf(e); +d=0;for(b=a.length;d<b;d++)if(a[d]===e)return d}return-1},search:function(a,e){var d=CKEDITOR.tools.indexOf(a,e);return d>=0?a[d]:null},bind:function(a,e){return function(){return a.apply(e,arguments)}},createClass:function(a){var e=a.$,d=a.base,b=a.privates||a._,c=a.proto,a=a.statics;!e&&(e=function(){d&&this.base.apply(this,arguments)});if(b)var f=e,e=function(){var a=this._||(this._={}),e;for(e in b){var d=b[e];a[e]=typeof d=="function"?CKEDITOR.tools.bind(d,this):d}f.apply(this,arguments)};if(d){e.prototype= +this.prototypedCopy(d.prototype);e.prototype.constructor=e;e.base=d;e.baseProto=d.prototype;e.prototype.base=function(){this.base=d.prototype.base;d.apply(this,arguments);this.base=arguments.callee}}c&&this.extend(e.prototype,c,true);a&&this.extend(e,a,true);return e},addFunction:function(e,d){return a.push(function(){return e.apply(d||this,arguments)})-1},removeFunction:function(e){a[e]=null},callFunction:function(e){var d=a[e];return d&&d.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a= +/^-?\d+\.?\d*px$/,e;return function(d){e=CKEDITOR.tools.trim(d+"")+"px";return a.test(e)?e:d||""}}(),convertToPx:function(){var a;return function(e){if(!a){a=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(a)}if(!/%$/.test(e)){a.setStyle("width",e);return a.$.clientWidth}return e}}(),repeat:function(a,e){return Array(e+1).join(a)},tryThese:function(){for(var a, +e=0,d=arguments.length;e<d;e++){var b=arguments[e];try{a=b();break}catch(c){}}return a},genKey:function(){return Array.prototype.slice.call(arguments).join("-")},defer:function(a){return function(){var e=arguments,d=this;window.setTimeout(function(){a.apply(d,e)},0)}},normalizeCssText:function(a,e){var d=[],b,c=CKEDITOR.tools.parseCssText(a,true,e);for(b in c)d.push(b+":"+c[b]);d.sort();return d.length?d.join(";")+";":""},convertRgbToHex:function(a){return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi, +function(a,e,d,b){a=[e,d,b];for(e=0;e<3;e++)a[e]=("0"+parseInt(a[e],10).toString(16)).slice(-2);return"#"+a.join("")})},parseCssText:function(a,e,d){var b={};if(d){d=new CKEDITOR.dom.element("span");d.setAttribute("style",a);a=CKEDITOR.tools.convertRgbToHex(d.getAttribute("style")||"")}if(!a||a==";")return b;a.replace(/"/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,d,m){if(e){d=d.toLowerCase();d=="font-family"&&(m=m.toLowerCase().replace(/["']/g,"").replace(/\s*,\s*/g,",")); +m=CKEDITOR.tools.trim(m)}b[d]=m});return b},writeCssText:function(a,e){var d,b=[];for(d in a)b.push(d+":"+a[d]);e&&b.sort();return b.join("; ")},objectCompare:function(a,e,d){var b;if(!a&&!e)return true;if(!a||!e)return false;for(b in a)if(a[b]!=e[b])return false;if(!d)for(b in e)if(a[b]!=e[b])return false;return true},objectKeys:function(a){var e=[],d;for(d in a)e.push(d);return e},convertArrayToObject:function(a,e){var d={};arguments.length==1&&(e=true);for(var b=0,c=a.length;b<c;++b)d[a[b]]=e; +return d},fixDomain:function(){for(var a;;)try{a=window.parent.document.domain;break}catch(e){a=a?a.replace(/.+?(?:\.|$)/,""):document.domain;if(!a)break;document.domain=a}return!!a},eventsBuffer:function(a,e){function d(){c=(new Date).getTime();b=false;e()}var b,c=0;return{input:function(){if(!b){var e=(new Date).getTime()-c;e<a?b=setTimeout(d,a-e):d()}},reset:function(){b&&clearTimeout(b);b=c=0}}},enableHtml5Elements:function(a,e){for(var d=["abbr","article","aside","audio","bdi","canvas","data", +"datalist","details","figcaption","figure","footer","header","hgroup","mark","meter","nav","output","progress","section","summary","time","video"],b=d.length,c;b--;){c=a.createElement(d[b]);e&&a.appendChild(c)}},checkIfAnyArrayItemMatches:function(a,e){for(var d=0,b=a.length;d<b;++d)if(a[d].match(e))return true;return false},checkIfAnyObjectPropertyMatches:function(a,e){for(var d in a)if(d.match(e))return true;return false},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="}})(); +CKEDITOR.dtd=function(){var a=CKEDITOR.tools.extend,f=function(a,e){for(var d=CKEDITOR.tools.clone(a),b=1;b<arguments.length;b++){var e=arguments[b],c;for(c in e)delete d[c]}return d},b={},c={},e={address:1,article:1,aside:1,blockquote:1,details:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,main:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},d={command:1,link:1,meta:1,noscript:1,script:1,style:1},h={},k={"#":1},j={center:1,dir:1,noframes:1}; +a(b,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1,q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,"var":1,video:1,wbr:1},k,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});a(c,e,b,j);f={a:f(b,{a:1,button:1}),abbr:b,address:c, +area:h,article:c,aside:c,audio:a({source:1,track:1},c),b:b,base:h,bdi:b,bdo:b,blockquote:c,body:c,br:h,button:f(b,{a:1,button:1}),canvas:b,caption:c,cite:b,code:b,col:h,colgroup:{col:1},command:h,datalist:a({option:1},b),dd:c,del:b,details:a({summary:1},c),dfn:b,div:c,dl:{dt:1,dd:1},dt:c,em:b,embed:h,fieldset:a({legend:1},c),figcaption:c,figure:a({figcaption:1},c),footer:c,form:c,h1:b,h2:b,h3:b,h4:b,h5:b,h6:b,head:a({title:1,base:1},d),header:c,hgroup:{h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},hr:h,html:a({head:1, +body:1},c,d),i:b,iframe:k,img:h,input:h,ins:b,kbd:b,keygen:h,label:b,legend:b,li:c,link:h,main:c,map:c,mark:b,menu:a({li:1},c),meta:h,meter:f(b,{meter:1}),nav:c,noscript:a({link:1,meta:1,style:1},b),object:a({param:1},b),ol:{li:1},optgroup:{option:1},option:k,output:b,p:b,param:h,pre:b,progress:f(b,{progress:1}),q:b,rp:b,rt:b,ruby:a({rp:1,rt:1},b),s:b,samp:b,script:k,section:c,select:{optgroup:1,option:1},small:b,source:h,span:b,strong:b,style:k,sub:b,summary:b,sup:b,table:{caption:1,colgroup:1,thead:1, +tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:c,textarea:k,tfoot:{tr:1},th:c,thead:{tr:1},time:f(b,{time:1}),title:k,tr:{th:1,td:1},track:h,u:b,ul:{li:1},"var":b,video:a({source:1,track:1},c),wbr:h,acronym:b,applet:a({param:1},c),basefont:h,big:b,center:c,dialog:h,dir:{li:1},font:b,isindex:h,noframes:c,strike:b,tt:b};a(f,{$block:a({audio:1,dd:1,dt:1,figcaption:1,li:1,video:1},e,j),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1,div:1,dl:1,fieldset:1,figcaption:1,figure:1,footer:1, +form:1,header:1,hgroup:1,main:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,figcaption:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,main:1,nav:1,p:1,pre:1,section:1},$empty:{area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1},$inline:b,$list:{dl:1,ol:1, +ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:a({body:1,head:1,html:1},f.head),$nonEditable:{applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1},$object:{applet:1,audio:1,button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1},$removeEmpty:{abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,s:1,samp:1,small:1,span:1,strike:1,strong:1, +sub:1,sup:1,time:1,tt:1,u:1,"var":1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},$transparent:{a:1,audio:1,canvas:1,del:1,ins:1,map:1,noscript:1,object:1,video:1},$intermediate:{caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}});return f}();CKEDITOR.dom.event=function(a){this.$=a}; +CKEDITOR.dom.event.prototype={getKey:function(){return this.$.keyCode||this.$.which},getKeystroke:function(){var a=this.getKey();if(this.$.ctrlKey||this.$.metaKey)a=a+CKEDITOR.CTRL;this.$.shiftKey&&(a=a+CKEDITOR.SHIFT);this.$.altKey&&(a=a+CKEDITOR.ALT);return a},preventDefault:function(a){var f=this.$;f.preventDefault?f.preventDefault():f.returnValue=false;a&&this.stopPropagation()},stopPropagation:function(){var a=this.$;a.stopPropagation?a.stopPropagation():a.cancelBubble=true},getTarget:function(){var a= +this.$.target||this.$.srcElement;return a?new CKEDITOR.dom.node(a):null},getPhase:function(){return this.$.eventPhase||2},getPageOffset:function(){var a=this.getTarget().getDocument().$;return{x:this.$.pageX||this.$.clientX+(a.documentElement.scrollLeft||a.body.scrollLeft),y:this.$.pageY||this.$.clientY+(a.documentElement.scrollTop||a.body.scrollTop)}}};CKEDITOR.CTRL=1114112;CKEDITOR.SHIFT=2228224;CKEDITOR.ALT=4456448;CKEDITOR.EVENT_PHASE_CAPTURING=1;CKEDITOR.EVENT_PHASE_AT_TARGET=2; +CKEDITOR.EVENT_PHASE_BUBBLING=3;CKEDITOR.dom.domObject=function(a){if(a)this.$=a}; +CKEDITOR.dom.domObject.prototype=function(){var a=function(a,b){return function(c){typeof CKEDITOR!="undefined"&&a.fire(b,new CKEDITOR.dom.event(c))}};return{getPrivate:function(){var a;if(!(a=this.getCustomData("_")))this.setCustomData("_",a={});return a},on:function(f){var b=this.getCustomData("_cke_nativeListeners");if(!b){b={};this.setCustomData("_cke_nativeListeners",b)}if(!b[f]){b=b[f]=a(this,f);this.$.addEventListener?this.$.addEventListener(f,b,!!CKEDITOR.event.useCapture):this.$.attachEvent&& +this.$.attachEvent("on"+f,b)}return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(a){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(a)){var b=this.getCustomData("_cke_nativeListeners"),c=b&&b[a];if(c){this.$.removeEventListener?this.$.removeEventListener(a,c,false):this.$.detachEvent&&this.$.detachEvent("on"+a,c);delete b[a]}}},removeAllListeners:function(){var a=this.getCustomData("_cke_nativeListeners"),b;for(b in a){var c=a[b];this.$.detachEvent? +this.$.detachEvent("on"+b,c):this.$.removeEventListener&&this.$.removeEventListener(b,c,false);delete a[b]}CKEDITOR.event.prototype.removeAllListeners.call(this)}}}(); +(function(a){var f={};CKEDITOR.on("reset",function(){f={}});a.equals=function(a){try{return a&&a.$===this.$}catch(c){return false}};a.setCustomData=function(a,c){var e=this.getUniqueId();(f[e]||(f[e]={}))[a]=c;return this};a.getCustomData=function(a){var c=this.$["data-cke-expando"];return(c=c&&f[c])&&a in c?c[a]:null};a.removeCustomData=function(a){var c=this.$["data-cke-expando"],c=c&&f[c],e,d;if(c){e=c[a];d=a in c;delete c[a]}return d?e:null};a.clearCustomData=function(){this.removeAllListeners(); +var a=this.$["data-cke-expando"];a&&delete f[a]};a.getUniqueId=function(){return this.$["data-cke-expando"]||(this.$["data-cke-expando"]=CKEDITOR.tools.getNextNumber())};CKEDITOR.event.implementOn(a)})(CKEDITOR.dom.domObject.prototype); +CKEDITOR.dom.node=function(a){return a?new CKEDITOR.dom[a.nodeType==CKEDITOR.NODE_DOCUMENT?"document":a.nodeType==CKEDITOR.NODE_ELEMENT?"element":a.nodeType==CKEDITOR.NODE_TEXT?"text":a.nodeType==CKEDITOR.NODE_COMMENT?"comment":a.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT?"documentFragment":"domObject"](a):this};CKEDITOR.dom.node.prototype=new CKEDITOR.dom.domObject;CKEDITOR.NODE_ELEMENT=1;CKEDITOR.NODE_DOCUMENT=9;CKEDITOR.NODE_TEXT=3;CKEDITOR.NODE_COMMENT=8;CKEDITOR.NODE_DOCUMENT_FRAGMENT=11; +CKEDITOR.POSITION_IDENTICAL=0;CKEDITOR.POSITION_DISCONNECTED=1;CKEDITOR.POSITION_FOLLOWING=2;CKEDITOR.POSITION_PRECEDING=4;CKEDITOR.POSITION_IS_CONTAINED=8;CKEDITOR.POSITION_CONTAINS=16; +CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype,{appendTo:function(a,f){a.append(this,f);return a},clone:function(a,f){var b=this.$.cloneNode(a),c=function(e){e["data-cke-expando"]&&(e["data-cke-expando"]=false);if(e.nodeType==CKEDITOR.NODE_ELEMENT){f||e.removeAttribute("id",false);if(a)for(var e=e.childNodes,d=0;d<e.length;d++)c(e[d])}};c(b);return new CKEDITOR.dom.node(b)},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(a){a.$.parentNode.insertBefore(this.$, +a.$.nextSibling);return a},insertBefore:function(a){a.$.parentNode.insertBefore(this.$,a.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var f=[],b=this.getDocument().$.documentElement,c=this.$;c&&c!=b;){var e=c.parentNode;e&&f.unshift(this.getIndex.call({$:c},a));c=e}return f},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){function f(a,e){var b= +e?a.nextSibling:a.previousSibling;return!b||b.nodeType!=CKEDITOR.NODE_TEXT?null:b.nodeValue?b:f(b,e)}var b=this.$,c=-1,e;if(!this.$.parentNode||a&&b.nodeType==CKEDITOR.NODE_TEXT&&!b.nodeValue&&!f(b)&&!f(b,true))return-1;do if(!a||!(b!=this.$&&b.nodeType==CKEDITOR.NODE_TEXT&&(e||!b.nodeValue))){c++;e=b.nodeType==CKEDITOR.NODE_TEXT}while(b=b.previousSibling);return c},getNextSourceNode:function(a,f,b){if(b&&!b.call)var c=b,b=function(a){return!a.equals(c)};var a=!a&&this.getFirst&&this.getFirst(),e; +if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getNext()}for(;!a&&(e=(e||this).getParent());){if(b&&b(e,true)===false)return null;a=e.getNext()}return!a||b&&b(a)===false?null:f&&f!=a.type?a.getNextSourceNode(false,f,b):a},getPreviousSourceNode:function(a,f,b){if(b&&!b.call)var c=b,b=function(a){return!a.equals(c)};var a=!a&&this.getLast&&this.getLast(),e;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getPrevious()}for(;!a&& +(e=(e||this).getParent());){if(b&&b(e,true)===false)return null;a=e.getPrevious()}return!a||b&&b(a)===false?null:f&&a.type!=f?a.getPreviousSourceNode(false,f,b):a},getPrevious:function(a){var f=this.$,b;do b=(f=f.previousSibling)&&f.nodeType!=10&&new CKEDITOR.dom.node(f);while(b&&a&&!a(b));return b},getNext:function(a){var f=this.$,b;do b=(f=f.nextSibling)&&new CKEDITOR.dom.node(f);while(b&&a&&!a(b));return b},getParent:function(a){var f=this.$.parentNode;return f&&(f.nodeType==CKEDITOR.NODE_ELEMENT|| +a&&f.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)?new CKEDITOR.dom.node(f):null},getParents:function(a){var f=this,b=[];do b[a?"push":"unshift"](f);while(f=f.getParent());return b},getCommonAncestor:function(a){if(a.equals(this))return this;if(a.contains&&a.contains(this))return a;var f=this.contains?this:this.getParent();do if(f.contains(a))return f;while(f=f.getParent());return null},getPosition:function(a){var f=this.$,b=a.$;if(f.compareDocumentPosition)return f.compareDocumentPosition(b);if(f== +b)return CKEDITOR.POSITION_IDENTICAL;if(this.type==CKEDITOR.NODE_ELEMENT&&a.type==CKEDITOR.NODE_ELEMENT){if(f.contains){if(f.contains(b))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(b.contains(f))return CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in f)return f.sourceIndex<0||b.sourceIndex<0?CKEDITOR.POSITION_DISCONNECTED:f.sourceIndex<b.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}for(var f=this.getAddress(),a=a.getAddress(), +b=Math.min(f.length,a.length),c=0;c<=b-1;c++)if(f[c]!=a[c]){if(c<b)return f[c]<a[c]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;break}return f.length<a.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING},getAscendant:function(a,f){var b=this.$,c,e;if(!f)b=b.parentNode;if(typeof a=="function"){e=true;c=a}else{e=false;c=function(e){e=typeof e.nodeName=="string"?e.nodeName.toLowerCase():"";return typeof a=="string"?e== +a:e in a}}for(;b;){if(c(e?new CKEDITOR.dom.node(b):b))return new CKEDITOR.dom.node(b);try{b=b.parentNode}catch(d){b=null}}return null},hasAscendant:function(a,f){var b=this.$;if(!f)b=b.parentNode;for(;b;){if(b.nodeName&&b.nodeName.toLowerCase()==a)return true;b=b.parentNode}return false},move:function(a,f){a.append(this.remove(),f)},remove:function(a){var f=this.$,b=f.parentNode;if(b){if(a)for(;a=f.firstChild;)b.insertBefore(f.removeChild(a),f);b.removeChild(f)}return this},replace:function(a){this.insertBefore(a); +a.remove()},trim:function(){this.ltrim();this.rtrim()},ltrim:function(){for(var a;this.getFirst&&(a=this.getFirst());){if(a.type==CKEDITOR.NODE_TEXT){var f=CKEDITOR.tools.ltrim(a.getText()),b=a.getLength();if(f){if(f.length<b){a.split(b-f.length);this.$.removeChild(this.$.firstChild)}}else{a.remove();continue}}break}},rtrim:function(){for(var a;this.getLast&&(a=this.getLast());){if(a.type==CKEDITOR.NODE_TEXT){var f=CKEDITOR.tools.rtrim(a.getText()),b=a.getLength();if(f){if(f.length<b){a.split(f.length); +this.$.lastChild.parentNode.removeChild(this.$.lastChild)}}else{a.remove();continue}}break}if(CKEDITOR.env.needsBrFiller)(a=this.$.lastChild)&&(a.type==1&&a.nodeName.toLowerCase()=="br")&&a.parentNode.removeChild(a)},isReadOnly:function(){var a=this;this.type!=CKEDITOR.NODE_ELEMENT&&(a=this.getParent());if(a&&typeof a.$.isContentEditable!="undefined")return!(a.$.isContentEditable||a.data("cke-editable"));for(;a;){if(a.data("cke-editable"))break;if(a.getAttribute("contentEditable")=="false")return true; +if(a.getAttribute("contentEditable")=="true")break;a=a.getParent()}return!a}});CKEDITOR.dom.window=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.window.prototype=new CKEDITOR.dom.domObject; +CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.focus()},getViewPaneSize:function(){var a=this.$.document,f=a.compatMode=="CSS1Compat";return{width:(f?a.documentElement.clientWidth:a.body.clientWidth)||0,height:(f?a.documentElement.clientHeight:a.body.clientHeight)||0}},getScrollPosition:function(){var a=this.$;if("pageXOffset"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};a=a.document;return{x:a.documentElement.scrollLeft||a.body.scrollLeft||0,y:a.documentElement.scrollTop|| +a.body.scrollTop||0}},getFrame:function(){var a=this.$.frameElement;return a?new CKEDITOR.dom.element.get(a):null}});CKEDITOR.dom.document=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject; +CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(a){if(this.$.createStyleSheet)this.$.createStyleSheet(a);else{var f=new CKEDITOR.dom.element("link");f.setAttributes({rel:"stylesheet",type:"text/css",href:a});this.getHead().append(f)}},appendStyleText:function(a){if(this.$.createStyleSheet){var f=this.$.createStyleSheet("");f.cssText=a}else{var b=new CKEDITOR.dom.element("style",this);b.append(new CKEDITOR.dom.text(a,this));this.getHead().append(b)}return f|| +b.$.sheet},createElement:function(a,f){var b=new CKEDITOR.dom.element(a,this);if(f){f.attributes&&b.setAttributes(f.attributes);f.styles&&b.setStyles(f.styles)}return b},createText:function(a){return new CKEDITOR.dom.text(a,this)},focus:function(){this.getWindow().focus()},getActive:function(){var a;try{a=this.$.activeElement}catch(f){return null}return new CKEDITOR.dom.element(a)},getById:function(a){return(a=this.$.getElementById(a))?new CKEDITOR.dom.element(a):null},getByAddress:function(a,f){for(var b= +this.$.documentElement,c=0;b&&c<a.length;c++){var e=a[c];if(f)for(var d=-1,h=0;h<b.childNodes.length;h++){var k=b.childNodes[h];if(!(f===true&&k.nodeType==3&&k.previousSibling&&k.previousSibling.nodeType==3)){d++;if(d==e){b=k;break}}}else b=b.childNodes[e]}return b?new CKEDITOR.dom.node(b):null},getElementsByTag:function(a,f){!(CKEDITOR.env.ie&&document.documentMode<=8)&&f&&(a=f+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0]; +return a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),true)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i,'$&\n<script data-cke-temp="1">('+ +CKEDITOR.tools.fixDomain+")();<\/script>"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a=this.getCustomData("html5ShivFrag");if(!a){a=this.$.createDocumentFragment();CKEDITOR.tools.enableHtml5Elements(a,true);this.setCustomData("html5ShivFrag",a)}return a}});CKEDITOR.dom.nodeList=function(a){this.$=a}; +CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){if(a<0||a>=this.$.length)return null;return(a=this.$[a])?new CKEDITOR.dom.node(a):null}};CKEDITOR.dom.element=function(a,f){typeof a=="string"&&(a=(f?f.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.element.get=function(a){return(a=typeof a=="string"?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))}; +CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(a,f){var b=new CKEDITOR.dom.element("div",f);b.setHtml(a);return b.getFirst().remove()}; +CKEDITOR.dom.element.setMarker=function(a,f,b,c){var e=f.getCustomData("list_marker_id")||f.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),d=f.getCustomData("list_marker_names")||f.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[e]=f;d[b]=1;return f.setCustomData(b,c)};CKEDITOR.dom.element.clearAllMarkers=function(a){for(var f in a)CKEDITOR.dom.element.clearMarkers(a,a[f],1)}; +CKEDITOR.dom.element.clearMarkers=function(a,f,b){var c=f.getCustomData("list_marker_names"),e=f.getCustomData("list_marker_id"),d;for(d in c)f.removeCustomData(d);f.removeCustomData("list_marker_names");if(b){f.removeCustomData("list_marker_id");delete a[e]}}; +(function(){function a(a){var d=true;if(!a.$.id){a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber();d=false}return function(){d||a.removeAttribute("id")}}function f(a,d){return"#"+a.$.id+" "+d.split(/,\s*/).join(", #"+a.$.id+" ")}function b(a){for(var d=0,b=0,f=c[a].length;b<f;b++)d=d+(parseInt(this.getComputedStyle(c[a][b])||0,10)||0);return d}CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:function(a){var d=this.$.className;d&&(RegExp("(?:^|\\s)"+a+"(?:\\s|$)", +"").test(d)||(d=d+(" "+a)));this.$.className=d||a;return this},removeClass:function(a){var d=this.getAttribute("class");if(d){a=RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","i");if(a.test(d))(d=d.replace(a,"").replace(/^\s+/,""))?this.setAttribute("class",d):this.removeAttribute("class")}return this},hasClass:function(a){return RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","").test(this.getAttribute("class"))},append:function(a,d){typeof a=="string"&&(a=this.getDocument().createElement(a));d?this.$.insertBefore(a.$,this.$.firstChild): +this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var d=new CKEDITOR.dom.element("div",this.getDocument());d.setHtml(a);d.moveChildren(this)}else this.setHtml(a)},appendText:function(a){this.$.text!=null?this.$.text=this.$.text+a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();if(!a||!a.is||!a.is("br")){a=this.getDocument().createElement("br"); +CKEDITOR.env.gecko&&a.setAttribute("type","_moz");this.append(a)}}},breakParent:function(a){var d=new CKEDITOR.dom.range(this.getDocument());d.setStartAfter(this);d.setEndAfter(a);a=d.extractContents();d.insertNode(this.remove());a.insertAfterNode(this)},contains:CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a){var d=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?d.contains(a.getParent().$):d!=a.$&&d.contains(a.$)}:function(a){return!!(this.$.compareDocumentPosition(a.$)&16)},focus:function(){function a(){try{this.$.focus()}catch(e){}} +return function(d){d?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(true));return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({},this.$.getBoundingClientRect());!a.width&&(a.width=a.right-a.left);!a.height&& +(a.height=a.bottom-a.top);return a},setHtml:CKEDITOR.env.ie&&CKEDITOR.env.version<9?function(a){try{var d=this.$;if(this.getParent())return d.innerHTML=a;var b=this.getDocument()._getHtml5ShivFrag();b.appendChild(d);d.innerHTML=a;b.removeChild(d);return a}catch(c){this.$.innerHTML="";d=new CKEDITOR.dom.element("body",this.getDocument());d.$.innerHTML=a;for(d=d.getChildren();d.count();)this.append(d.getItem(0));return a}}:function(a){return this.$.innerHTML=a},setText:function(){var a=document.createElement("p"); +a.innerHTML="x";a=a.textContent;return function(d){this.$[a?"textContent":"innerText"]=d}}(),getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":a=this.$.getAttribute(a,2);a!==0&&this.$.tabIndex===0&&(a=null);return a;case "checked":a=this.$.attributes.getNamedItem(a); +return(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(a,2)}:a}(),getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:CKEDITOR.env.ie?function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]}: +function(a){var d=this.getWindow().$.getComputedStyle(this.$,null);return d?d.getPropertyValue(a):""},getDtd:function(){var a=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,getTabIndex:CKEDITOR.env.ie?function(){var a=this.$.tabIndex;a===0&&(!CKEDITOR.dtd.$tabIndex[this.getName()]&&parseInt(this.getAttribute("tabindex"),10)!==0)&&(a=-1);return a}:CKEDITOR.env.webkit?function(){var a=this.$.tabIndex;if(a===void 0){a= +parseInt(this.getAttribute("tabindex"),10);isNaN(a)&&(a=-1)}return a}:function(){return this.$.tabIndex},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id||null},getNameAtt:function(){return this.$.name||null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&document.documentMode<=8){var d=this.$.scopeName;d!="HTML"&&(a=d.toLowerCase()+":"+a)}this.getName=function(){return a}; +return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var d=this.$.firstChild;(d=d&&new CKEDITOR.dom.node(d))&&(a&&!a(d))&&(d=d.getNext(a));return d},getLast:function(a){var d=this.$.lastChild;(d=d&&new CKEDITOR.dom.node(d))&&(a&&!a(d))&&(d=d.getPrevious(a));return d},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},is:function(){var a=this.getName();if(typeof arguments[0]=="object")return!!arguments[0][a];for(var d=0;d<arguments.length;d++)if(arguments[d]== +a)return true;return false},isEditable:function(a){var d=this.getName();if(this.isReadOnly()||this.getComputedStyle("display")=="none"||this.getComputedStyle("visibility")=="hidden"||CKEDITOR.dtd.$nonEditable[d]||CKEDITOR.dtd.$empty[d]||this.is("a")&&(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount())return false;if(a!==false){a=CKEDITOR.dtd[d]||CKEDITOR.dtd.span;return!(!a||!a["#"])}return true},isIdentical:function(a){var d=this.clone(0,1),a=a.clone(0,1);d.removeAttributes(["_moz_dirty", +"data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(d.$.isEqualNode){d.$.style.cssText=CKEDITOR.tools.normalizeCssText(d.$.style.cssText);a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText);return d.$.isEqualNode(a.$)}d=d.getOuterHtml();a=a.getOuterHtml();if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&this.is("a")){var b=this.getParent();if(b.type==CKEDITOR.NODE_ELEMENT){b= +b.clone();b.setHtml(d);d=b.getHtml();b.setHtml(a);a=b.getHtml()}}return d==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&this.getComputedStyle("visibility")!="hidden",d,b;if(a&&CKEDITOR.env.webkit){d=this.getWindow();if(!d.equals(CKEDITOR.document.getWindow())&&(b=d.$.frameElement))a=(new CKEDITOR.dom.element(b)).isVisible()}return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return false;for(var a=this.getChildren(),d=0,b=a.count();d< +b;d++){var c=a.getItem(d);if(!(c.type==CKEDITOR.NODE_ELEMENT&&c.data("cke-bookmark"))&&(c.type==CKEDITOR.NODE_ELEMENT&&!c.isEmptyInlineRemoveable()||c.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(c.getText())))return false}return true},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var a=this.$.attributes,d=0;d<a.length;d++){var b=a[d];switch(b.nodeName){case "class":if(this.getAttribute("class"))return true;case "data-cke-expando":continue;default:if(b.specified)return true}}return false}: +function(){var a=this.$.attributes,d=a.length,b={"data-cke-expando":1,_moz_dirty:1};return d>0&&(d>2||!b[a[0].nodeName]||d==2&&!b[a[1].nodeName])},hasAttribute:function(){function a(d){var e=this.$.attributes.getNamedItem(d);if(this.getName()=="input")switch(d){case "class":return this.$.className.length>0;case "checked":return!!this.$.checked;case "value":d=this.getAttribute("type");return d=="checkbox"||d=="radio"?this.$.value!="on":!!this.$.value}return!e?false:e.specified}return CKEDITOR.env.ie? +CKEDITOR.env.version<8?function(d){return d=="name"?!!this.$.name:a.call(this,d)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,d){var b=this.$,a=a.$;if(b!=a){var c;if(d)for(;c=b.lastChild;)a.insertBefore(b.removeChild(c),a.firstChild);else for(;c=b.firstChild;)a.appendChild(b.removeChild(c))}},mergeSiblings:function(){function a(d,b,e){if(b&&b.type==CKEDITOR.NODE_ELEMENT){for(var c=[];b.data("cke-bookmark")||b.isEmptyInlineRemoveable();){c.push(b); +b=e?b.getNext():b.getPrevious();if(!b||b.type!=CKEDITOR.NODE_ELEMENT)return}if(d.isIdentical(b)){for(var f=e?d.getLast():d.getFirst();c.length;)c.shift().move(d,!e);b.moveChildren(d,!e);b.remove();f&&f.type==CKEDITOR.NODE_ELEMENT&&f.mergeSiblings()}}}return function(d){if(d===false||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a")){a(this,this.getNext(),true);a(this,this.getPrevious())}}}(),show:function(){this.setStyles({display:"",visibility:""})},setAttribute:function(){var a=function(a, +b){this.$.setAttribute(a,b);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(d,b){d=="class"?this.$.className=b:d=="style"?this.$.style.cssText=b:d=="tabindex"?this.$.tabIndex=b:d=="checked"?this.$.checked=b:d=="contenteditable"?a.call(this,"contentEditable",b):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(d,b){if(d=="src"&&b.match(/^http:\/\//))try{a.apply(this,arguments)}catch(c){}else a.apply(this,arguments); +return this}:a}(),setAttributes:function(a){for(var d in a)this.setAttribute(d,a[d]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){a=="class"?a="className":a=="tabindex"?a="tabIndex":a=="contenteditable"&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var b=0;b< +a.length;b++)this.removeAttribute(a[b]);else for(b in a)a.hasOwnProperty(b)&&this.removeAttribute(b)},removeStyle:function(a){var b=this.$.style;if(!b.removeProperty&&(a=="border"||a=="margin"||a=="padding")){var c=["top","left","right","bottom"],f;a=="border"&&(f=["color","style","width"]);for(var b=[],j=0;j<c.length;j++)if(f)for(var g=0;g<f.length;g++)b.push([a,c[j],f[g]].join("-"));else b.push([a,c[j]].join("-"));for(a=0;a<b.length;a++)this.removeStyle(b[a])}else{b.removeProperty?b.removeProperty(a): +b.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a));this.$.style.cssText||this.removeAttribute("style")}},setStyle:function(a,b){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=b;return this},setStyles:function(a){for(var b in a)this.setStyle(b,a[b]);return this},setOpacity:function(a){if(CKEDITOR.env.ie&&CKEDITOR.env.version<9){a=Math.round(a*100);this.setStyle("filter",a>=100?"":"progid:DXImageTransform.Microsoft.Alpha(opacity="+a+")")}else this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", +"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,b=this.getElementsByTag("*"),c=0,f=b.count();c<f;c++){a=b.getItem(c);a.setAttribute("unselectable","on")}}},getPositionedAncestor:function(){for(var a=this;a.getName()!="html";){if(a.getComputedStyle("position")!="static")return a;a=a.getParent()}return null},getDocumentPosition:function(a){var b=0,c=0,f=this.getDocument(),j=f.getBody(),g=CKEDITOR.env.quirks;if(document.documentElement.getBoundingClientRect){var m=this.$.getBoundingClientRect(), +y=f.$.documentElement,s=y.clientTop||j.$.clientTop||0,w=y.clientLeft||j.$.clientLeft||0,q=true;if(CKEDITOR.env.ie){q=f.getDocumentElement().contains(this);f=f.getBody().contains(this);q=g&&f||!g&&q}if(q){if(CKEDITOR.env.webkit){b=j.$.scrollLeft||y.scrollLeft;c=j.$.scrollTop||y.scrollTop}else{c=g?j.$:y;b=c.scrollLeft;c=c.scrollTop}b=m.left+b-w;c=m.top+c-s}}else{s=this;for(w=null;s&&!(s.getName()=="body"||s.getName()=="html");){b=b+(s.$.offsetLeft-s.$.scrollLeft);c=c+(s.$.offsetTop-s.$.scrollTop);if(!s.equals(this)){b= +b+(s.$.clientLeft||0);c=c+(s.$.clientTop||0)}for(;w&&!w.equals(s);){b=b-w.$.scrollLeft;c=c-w.$.scrollTop;w=w.getParent()}w=s;s=(m=s.$.offsetParent)?new CKEDITOR.dom.element(m):null}}if(a){m=this.getWindow();s=a.getWindow();if(!m.equals(s)&&m.$.frameElement){a=(new CKEDITOR.dom.element(m.$.frameElement)).getDocumentPosition(a);b=b+a.x;c=c+a.y}}if(!document.documentElement.getBoundingClientRect&&CKEDITOR.env.gecko&&!g){b=b+(this.$.clientLeft?1:0);c=c+(this.$.clientTop?1:0)}return{x:b,y:c}},scrollIntoView:function(a){var b= +this.getParent();if(b){do{(b.$.clientWidth&&b.$.clientWidth<b.$.scrollWidth||b.$.clientHeight&&b.$.clientHeight<b.$.scrollHeight)&&!b.is("body")&&this.scrollIntoParent(b,a,1);if(b.is("html")){var c=b.getWindow();try{var f=c.$.frameElement;f&&(b=new CKEDITOR.dom.element(f))}catch(j){}}}while(b=b.getParent())}},scrollIntoParent:function(a,b,c){var f,j,g,m;function y(b,d){if(/body|html/.test(a.getName()))a.getWindow().$.scrollBy(b,d);else{a.$.scrollLeft=a.$.scrollLeft+b;a.$.scrollTop=a.$.scrollTop+d}} +function s(a,b){var d={x:0,y:0};if(!a.is(q?"body":"html")){var c=a.$.getBoundingClientRect();d.x=c.left;d.y=c.top}c=a.getWindow();if(!c.equals(b)){c=s(CKEDITOR.dom.element.get(c.$.frameElement),b);d.x=d.x+c.x;d.y=d.y+c.y}return d}function w(a,b){return parseInt(a.getComputedStyle("margin-"+b)||0,10)||0}!a&&(a=this.getWindow());g=a.getDocument();var q=g.$.compatMode=="BackCompat";a instanceof CKEDITOR.dom.window&&(a=q?g.getBody():g.getDocumentElement());g=a.getWindow();j=s(this,g);var t=s(a,g),i=this.$.offsetHeight; +f=this.$.offsetWidth;var A=a.$.clientHeight,u=a.$.clientWidth;g=j.x-w(this,"left")-t.x||0;m=j.y-w(this,"top")-t.y||0;f=j.x+f+w(this,"right")-(t.x+u)||0;j=j.y+i+w(this,"bottom")-(t.y+A)||0;if(m<0||j>0)y(0,b===true?m:b===false?j:m<0?m:j);if(c&&(g<0||f>0))y(g<0?g:f,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+"_off");this.removeClass(b+"_disabled");c&&this.setAttribute("aria-pressed",true);c&&this.removeAttribute("aria-disabled"); +break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");c&&this.setAttribute("aria-disabled",true);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off");this.removeClass(b+"_on");this.removeClass(b+"_disabled");c&&this.removeAttribute("aria-pressed");c&&this.removeAttribute("aria-disabled")}},getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)}, +copyAttributes:function(a,b){for(var c=this.$.attributes,b=b||{},f=0;f<c.length;f++){var j=c[f],g=j.nodeName.toLowerCase(),m;if(!(g in b))if(g=="checked"&&(m=this.getAttribute(g)))a.setAttribute(g,m);else if(!CKEDITOR.env.ie||this.hasAttribute(g)){m=this.getAttribute(g);if(m===null)m=j.nodeValue;a.setAttribute(g,m)}}if(this.$.style.cssText!=="")a.$.style.cssText=this.$.style.cssText},renameNode:function(a){if(this.getName()!=a){var b=this.getDocument(),a=new CKEDITOR.dom.element(a,b);this.copyAttributes(a); +this.moveChildren(a);this.getParent()&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$;delete this.getName}},getChild:function(){function a(b,c){var e=b.childNodes;if(c>=0&&c<e.length)return e[c]}return function(b){var c=this.$;if(b.slice)for(;b.length>0&&c;)c=a(c,b.shift());else c=a(c,b);return c?new CKEDITOR.dom.node(c):null}}(),getChildCount:function(){return this.$.childNodes.length},disableContextMenu:function(){this.on("contextmenu",function(a){a.data.getTarget().hasClass("cke_enable_context_menu")|| +a.data.preventDefault()})},getDirection:function(a){return a?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir||"ltr":this.getStyle("direction")||this.getAttribute("dir")},data:function(a,b){a="data-"+a;if(b===void 0)return this.getAttribute(a);b===false?this.removeAttribute(a):this.setAttribute(a,b);return null},getEditor:function(){var a=CKEDITOR.instances,b,c;for(b in a){c=a[b];if(c.element.equals(this)&&c.elementMode!= +CKEDITOR.ELEMENT_MODE_APPENDTO)return c}return null},find:function(b){var c=a(this),b=new CKEDITOR.dom.nodeList(this.$.querySelectorAll(f(this,b)));c();return b},findOne:function(b){var c=a(this),b=this.$.querySelector(f(this,b));c();return b?new CKEDITOR.dom.element(b):null},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var f=a(this);if(f!==false)for(var c=this.getChildren(),j=0;j<c.count();j++){f=c.getItem(j);f.type==CKEDITOR.NODE_ELEMENT?f.forEach(a,b):(!b||f.type==b)&&a(f)}}});var c={width:["border-left-width", +"border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};CKEDITOR.dom.element.prototype.setSize=function(a,c,f){if(typeof c=="number"){if(f&&(!CKEDITOR.env.ie||!CKEDITOR.env.quirks))c=c-b.call(this,a);this.setStyle(a,c+"px")}};CKEDITOR.dom.element.prototype.getSize=function(a,c){var f=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;c&&(f=f-b.call(this,a));return f}})(); +CKEDITOR.dom.documentFragment=function(a){a=a||CKEDITOR.document;this.$=a.type==CKEDITOR.NODE_DOCUMENT?a.$.createDocumentFragment():a}; +CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(a){a=a.$;a.parentNode.insertBefore(this.$,a.nextSibling)}},!0,{append:1,appendBogus:1,getFirst:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1}); +(function(){function a(a,b){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed){this.end();return null}c.optimize()}var d,e=c.startContainer;d=c.endContainer;var m=c.startOffset,f=c.endOffset,h,o=this.guard,l=this.type,p=a?"getPreviousSourceNode":"getNextSourceNode";if(!a&&!this._.guardLTR){var r=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),n=d.type==CKEDITOR.NODE_ELEMENT?d.getChild(f):d.getNext();this._.guardLTR=function(a,b){return(!b||!r.equals(a))&&(!n|| +!a.equals(n))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}if(a&&!this._.guardRTL){var g=e.type==CKEDITOR.NODE_ELEMENT?e:e.getParent(),C=e.type==CKEDITOR.NODE_ELEMENT?m?e.getChild(m-1):null:e.getPrevious();this._.guardRTL=function(a,b){return(!b||!g.equals(a))&&(!C||!a.equals(C))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}var j=a?this._.guardRTL:this._.guardLTR;h=o?function(a,b){return j(a,b)===false?false:o(a,b)}:j;if(this.current)d=this.current[p](false,l,h);else{if(a)d.type== +CKEDITOR.NODE_ELEMENT&&(d=f>0?d.getChild(f-1):h(d,true)===false?null:d.getPreviousSourceNode(true,l,h));else{d=e;if(d.type==CKEDITOR.NODE_ELEMENT&&!(d=d.getChild(m)))d=h(e,true)===false?null:e.getNextSourceNode(true,l,h)}d&&h(d)===false&&(d=null)}for(;d&&!this._.end;){this.current=d;if(!this.evaluator||this.evaluator(d)!==false){if(!b)return d}else if(b&&this.evaluator)return false;d=d[p](false,l,h)}this.end();return this.current=null}function f(b){for(var c,d=null;c=a.call(this,b);)d=c;return d} +function b(a){if(g(a))return false;if(a.type==CKEDITOR.NODE_TEXT)return true;if(a.type==CKEDITOR.NODE_ELEMENT){if(a.is(CKEDITOR.dtd.$inline)||a.is("hr")||a.getAttribute("contenteditable")=="false")return true;var b;if(b=!CKEDITOR.env.needsBrFiller)if(b=a.is(m))a:{b=0;for(var c=a.getChildCount();b<c;++b)if(!g(a.getChild(b))){b=false;break a}b=true}if(b)return true}return false}CKEDITOR.dom.walker=CKEDITOR.tools.createClass({$:function(a){this.range=a;this._={}},proto:{end:function(){this._.end=1}, +next:function(){return a.call(this)},previous:function(){return a.call(this,1)},checkForward:function(){return a.call(this,0,1)!==false},checkBackward:function(){return a.call(this,1,1)!==false},lastForward:function(){return f.call(this)},lastBackward:function(){return f.call(this,1)},reset:function(){delete this.current;this._={}}}});var c={block:1,"list-item":1,table:1,"table-row-group":1,"table-header-group":1,"table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1, +"table-caption":1},e={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(a){return this.getComputedStyle("float")=="none"&&!(this.getComputedStyle("position")in e)&&c[this.getComputedStyle("display")]?true:!!(this.is(CKEDITOR.dtd.$block)||a&&this.is(a))};CKEDITOR.dom.walker.blockBoundary=function(a){return function(b){return!(b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary(a))}};CKEDITOR.dom.walker.listItemBoundary=function(){return this.blockBoundary({br:1})};CKEDITOR.dom.walker.bookmark= +function(a,b){function c(a){return a&&a.getName&&a.getName()=="span"&&a.data("cke-bookmark")}return function(d){var e,m;e=d&&d.type!=CKEDITOR.NODE_ELEMENT&&(m=d.getParent())&&c(m);e=a?e:e||c(d);return!!(b^e)}};CKEDITOR.dom.walker.whitespaces=function(a){return function(b){var c;b&&b.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(b.getText())||CKEDITOR.env.webkit&&b.getText()=="​");return!!(a^c)}};CKEDITOR.dom.walker.invisible=function(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.env.webkit? +1:0;return function(d){if(b(d))d=1;else{d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());d=d.$.offsetWidth<=c}return!!(a^d)}};CKEDITOR.dom.walker.nodeType=function(a,b){return function(c){return!!(b^c.type==a)}};CKEDITOR.dom.walker.bogus=function(a){function b(a){return!h(a)&&!k(a)}return function(c){var e=CKEDITOR.env.needsBrFiller?c.is&&c.is("br"):c.getText&&d.test(c.getText());if(e){e=c.getParent();c=c.getNext(b);e=e.isBlockBoundary()&&(!c||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary())}return!!(a^ +e)}};CKEDITOR.dom.walker.temp=function(a){return function(b){b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b=b&&b.hasAttribute("data-cke-temp");return!!(a^b)}};var d=/^[\t\r\n ]*(?: |\xa0)$/,h=CKEDITOR.dom.walker.whitespaces(),k=CKEDITOR.dom.walker.bookmark(),j=CKEDITOR.dom.walker.temp();CKEDITOR.dom.walker.ignored=function(a){return function(b){b=h(b)||k(b)||j(b);return!!(a^b)}};var g=CKEDITOR.dom.walker.ignored(),m=function(a){var b={},c;for(c in a)CKEDITOR.dtd[c]["#"]&&(b[c]=1);return b}(CKEDITOR.dtd.$block); +CKEDITOR.dom.walker.editable=function(a){return function(c){return!!(a^b(c))}};CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(k(a)||h(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$inline)&&!a.is(CKEDITOR.dtd.$empty));return a&&(CKEDITOR.env.needsBrFiller?a.is&&a.is("br"):a.getText&&d.test(a.getText()))?a:false}})(); +CKEDITOR.dom.range=function(a){this.endOffset=this.endContainer=this.startOffset=this.startContainer=null;this.collapsed=true;var f=a instanceof CKEDITOR.dom.document;this.document=f?a:a.getDocument();this.root=f?a.getBody():a}; +(function(){function a(){var a=false,b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(true),e=CKEDITOR.dom.walker.bogus();return function(f){if(c(f)||b(f))return true;if(e(f)&&!a)return a=true;return f.type==CKEDITOR.NODE_TEXT&&(f.hasAscendant("pre")||CKEDITOR.tools.trim(f.getText()).length)||f.type==CKEDITOR.NODE_ELEMENT&&!f.is(d)?false:true}}function f(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?true:!a&&h(d)|| +d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}}function b(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&g(a)&&(b=a);return j(a)&&!(h(a)&&a.equals(b))})}}var c=function(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset},e=function(a,b,c,d){a.optimizeBookmark();var e=a.startContainer,f=a.endContainer,i=a.startOffset,A=a.endOffset,h,o;if(f.type==CKEDITOR.NODE_TEXT)f=f.split(A); +else if(f.getChildCount()>0)if(A>=f.getChildCount()){f=f.append(a.document.createText(""));o=true}else f=f.getChild(A);if(e.type==CKEDITOR.NODE_TEXT){e.split(i);e.equals(f)&&(f=e.getNext())}else if(i)if(i>=e.getChildCount()){e=e.append(a.document.createText(""));h=true}else e=e.getChild(i).getPrevious();else{e=e.append(a.document.createText(""),1);h=true}var i=e.getParents(),A=f.getParents(),l,p,r;for(l=0;l<i.length;l++){p=i[l];r=A[l];if(!p.equals(r))break}for(var n=c,g,C,j,F=l;F<i.length;F++){g= +i[F];n&&!g.equals(e)&&(C=n.append(g.clone()));for(g=g.getNext();g;){if(g.equals(A[F])||g.equals(f))break;j=g.getNext();if(b==2)n.append(g.clone(true));else{g.remove();b==1&&n.append(g)}g=j}n&&(n=C)}n=c;for(c=l;c<A.length;c++){g=A[c];b>0&&!g.equals(f)&&(C=n.append(g.clone()));if(!i[c]||g.$.parentNode!=i[c].$.parentNode)for(g=g.getPrevious();g;){if(g.equals(i[c])||g.equals(e))break;j=g.getPrevious();if(b==2)n.$.insertBefore(g.$.cloneNode(true),n.$.firstChild);else{g.remove();b==1&&n.$.insertBefore(g.$, +n.$.firstChild)}g=j}n&&(n=C)}if(b==2){p=a.startContainer;if(p.type==CKEDITOR.NODE_TEXT){p.$.data=p.$.data+p.$.nextSibling.data;p.$.parentNode.removeChild(p.$.nextSibling)}a=a.endContainer;if(a.type==CKEDITOR.NODE_TEXT&&a.$.nextSibling){a.$.data=a.$.data+a.$.nextSibling.data;a.$.parentNode.removeChild(a.$.nextSibling)}}else{if(p&&r&&(e.$.parentNode!=p.$.parentNode||f.$.parentNode!=r.$.parentNode)){b=r.getIndex();h&&r.$.parentNode==e.$.parentNode&&b--;if(d&&p.type==CKEDITOR.NODE_ELEMENT){d=CKEDITOR.dom.element.createFromHtml('<span data-cke-bookmark="1" style="display:none"> </span>', +a.document);d.insertAfter(p);p.mergeSiblings(false);a.moveToBookmark({startNode:d})}else a.setStart(r.getParent(),b)}a.collapse(true)}h&&e.remove();o&&f.$.parentNode&&f.remove()},d={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},h=CKEDITOR.dom.walker.bogus(),k=/^[\t\r\n ]*(?: |\xa0)$/,j=CKEDITOR.dom.walker.editable(),g=CKEDITOR.dom.walker.ignored(true);CKEDITOR.dom.range.prototype= +{clone:function(){var a=new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer);a.startOffset=this.startOffset;a._setEndContainer(this.endContainer);a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){if(a){this._setEndContainer(this.startContainer);this.endOffset=this.startOffset}else{this._setStartContainer(this.endContainer);this.startOffset=this.endOffset}this.collapsed=true},cloneContents:function(){var a=new CKEDITOR.dom.documentFragment(this.document); +this.collapsed||e(this,2,a);return a},deleteContents:function(a){this.collapsed||e(this,0,null,a)},extractContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||e(this,1,b,a);return b},createBookmark:function(a){var b,c,d,e,f=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml(" ");if(a){d="cke_bm_"+CKEDITOR.tools.getNextNumber();b.setAttribute("id",d+(f?"C":"S"))}if(!f){c=b.clone();c.setHtml(" "); +a&&c.setAttribute("id",d+"E");e=this.clone();e.collapse();e.insertNode(c)}e=this.clone();e.collapse(true);e.insertNode(b);if(c){this.setStartAfter(b);this.setEndBefore(c)}else this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(f?"C":"S"):b,endNode:a?d+"E":c,serializable:a,collapsed:f}},createBookmark2:function(){function a(c){var d=c.container,e=c.offset,f;f=d;var m=e;f=f.type!=CKEDITOR.NODE_ELEMENT||m===0||m==f.getChildCount()?0:f.getChild(m-1).type==CKEDITOR.NODE_TEXT&&f.getChild(m).type== +CKEDITOR.NODE_TEXT;if(f){d=d.getChild(e-1);e=d.getLength()}d.type==CKEDITOR.NODE_ELEMENT&&e>1&&(e=d.getChild(e-1).getIndex(true)+1);if(d.type==CKEDITOR.NODE_TEXT){f=d;for(m=0;(f=f.getPrevious())&&f.type==CKEDITOR.NODE_TEXT;)m=m+f.getLength();f=m;if(d.getText())e=e+f;else{m=d.getPrevious(b);if(f){e=f;d=m?m.getNext():d.getParent().getFirst()}else{d=d.getParent();e=m?m.getIndex(true)+1:0}}}c.container=d;c.offset=e}var b=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT,true);return function(b){var c=this.collapsed, +d={container:this.startContainer,offset:this.startOffset},e={container:this.endContainer,offset:this.endOffset};if(b){a(d);c||a(e)}return{start:d.container.getAddress(b),end:c?null:e.container.getAddress(b),startOffset:d.offset,endOffset:e.offset,normalized:b,collapsed:c,is2:true}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,d=a.end&&this.document.getByAddress(a.end,a.normalized),a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a): +this.collapse(true)}else{b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode;a=c?this.document.getById(a.endNode):a.endNode;this.setStartBefore(b);b.remove();if(a){this.setEndBefore(a);a.remove()}else this.collapse(true)}},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,e;if(a.type==CKEDITOR.NODE_ELEMENT){e=a.getChildCount();if(e>c)a=a.getChild(c);else if(e<1)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild; +a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}}if(b.type==CKEDITOR.NODE_ELEMENT){e=b.getChildCount();if(e>d)b=b.getChild(d).getPreviousSourceNode(true);else if(e<1)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b=b.lastChild;b=new CKEDITOR.dom.node(b)}}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer,d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset- +1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a):this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&(a.is("span")&&a.data("cke-bookmark"))&& +this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&(b.is&&b.is("span")&&b.data("cke-bookmark"))&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var c=this.startContainer,d=this.startOffset,e=this.collapsed;if((!a||e)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength()){d=c.getIndex()+1;c=c.getParent()}else{var f=c.split(d),d=c.getIndex()+1,c=c.getParent();if(this.startContainer.equals(this.endContainer))this.setEnd(f,this.endOffset-this.startOffset);else if(c.equals(this.endContainer))this.endOffset= +this.endOffset+1}else{d=c.getIndex();c=c.getParent()}this.setStart(c,d);if(e){this.collapse(true);return}}c=this.endContainer;d=this.endOffset;if(!b&&!e&&c&&c.type==CKEDITOR.NODE_TEXT){if(d){d>=c.getLength()||c.split(d);d=c.getIndex()+1}else d=c.getIndex();c=c.getParent();this.setEnd(c,d)}},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var e=1;case CKEDITOR.ENLARGE_ELEMENT:if(this.collapsed)break; +var f=this.getCommonAncestor(),i=this.root,h,g,o,l,p,r=false,n,j;n=this.startContainer;var C=this.startOffset;if(n.type==CKEDITOR.NODE_TEXT){if(C){n=!CKEDITOR.tools.trim(n.substring(0,C)).length&&n;r=!!n}if(n&&!(l=n.getPrevious()))o=n.getParent()}else{C&&(l=n.getChild(C-1)||n.getLast());l||(o=n)}for(o=c(o);o||l;){if(o&&!l){!p&&o.equals(f)&&(p=true);if(e?o.isBlockBoundary():!i.contains(o))break;if(!r||o.getComputedStyle("display")!="inline"){r=false;p?h=o:this.setStartBefore(o)}l=o.getPrevious()}for(;l;){n= +false;if(l.type==CKEDITOR.NODE_COMMENT)l=l.getPrevious();else{if(l.type==CKEDITOR.NODE_TEXT){j=l.getText();d.test(j)&&(l=null);n=/[\s\ufeff]$/.test(j)}else if((l.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||b&&l.is("br"))&&!l.data("cke-bookmark"))if(r&&CKEDITOR.dtd.$removeEmpty[l.getName()]){j=l.getText();if(d.test(j))l=null;else for(var C=l.$.getElementsByTagName("*"),k=0,F;F=C[k++];)if(!CKEDITOR.dtd.$removeEmpty[F.nodeName.toLowerCase()]){l=null;break}l&&(n=!!j.length)}else l=null;n&&(r?p?h=o:o&&this.setStartBefore(o): +r=true);if(l){n=l.getPrevious();if(!o&&!n){o=l;l=null;break}l=n}else o=null}}o&&(o=c(o.getParent()))}n=this.endContainer;C=this.endOffset;o=l=null;p=r=false;var K=function(a,b){var c=new CKEDITOR.dom.range(i);c.setStart(a,b);c.setEndAt(i,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),e;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};e=c.next();){if(e.type!=CKEDITOR.NODE_TEXT)return false;j=e!=a?e.getText():e.substring(b);if(d.test(j))return false}return true}; +if(n.type==CKEDITOR.NODE_TEXT)if(CKEDITOR.tools.trim(n.substring(C)).length)r=true;else{r=!n.getLength();if(C==n.getLength()){if(!(l=n.getNext()))o=n.getParent()}else K(n,C)&&(o=n.getParent())}else(l=n.getChild(C))||(o=n);for(;o||l;){if(o&&!l){!p&&o.equals(f)&&(p=true);if(e?o.isBlockBoundary():!i.contains(o))break;if(!r||o.getComputedStyle("display")!="inline"){r=false;p?g=o:o&&this.setEndAfter(o)}l=o.getNext()}for(;l;){n=false;if(l.type==CKEDITOR.NODE_TEXT){j=l.getText();K(l,0)||(l=null);n=/^[\s\ufeff]/.test(j)}else if(l.type== +CKEDITOR.NODE_ELEMENT){if((l.$.offsetWidth>0||b&&l.is("br"))&&!l.data("cke-bookmark"))if(r&&CKEDITOR.dtd.$removeEmpty[l.getName()]){j=l.getText();if(d.test(j))l=null;else{C=l.$.getElementsByTagName("*");for(k=0;F=C[k++];)if(!CKEDITOR.dtd.$removeEmpty[F.nodeName.toLowerCase()]){l=null;break}}l&&(n=!!j.length)}else l=null}else n=1;n&&r&&(p?g=o:this.setEndAfter(o));if(l){n=l.getNext();if(!o&&!n){o=l;l=null;break}l=n}else o=null}o&&(o=c(o.getParent()))}if(h&&g){f=h.contains(g)?g:h;this.setStartBefore(f); +this.setEndAfter(f)}break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:o=new CKEDITOR.dom.range(this.root);i=this.root;o.setStartAt(i,CKEDITOR.POSITION_AFTER_START);o.setEnd(this.startContainer,this.startOffset);o=new CKEDITOR.dom.walker(o);var I,v,G=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),z=null,B=function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&a.getAttribute("contenteditable")=="false")if(z){if(z.equals(a)){z=null;return}}else z= +a;else if(z)return;var b=G(a);b||(I=a);return b},e=function(a){var b=B(a);!b&&(a.is&&a.is("br"))&&(v=a);return b};o.guard=B;o=o.lastBackward();I=I||i;this.setStartAt(I,!I.is("br")&&(!o&&this.checkStartOfBlock()||o&&I.contains(o))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){o=this.clone();o=new CKEDITOR.dom.walker(o);var x=CKEDITOR.dom.walker.whitespaces(),E=CKEDITOR.dom.walker.bookmark();o.evaluator=function(a){return!x(a)&&!E(a)};if((o=o.previous())&& +o.type==CKEDITOR.NODE_ELEMENT&&o.is("br"))break}o=this.clone();o.collapse();o.setEndAt(i,CKEDITOR.POSITION_BEFORE_END);o=new CKEDITOR.dom.walker(o);o.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?e:B;I=z=v=null;o=o.lastForward();I=I||i;this.setEndAt(I,!o&&this.checkEndOfBlock()||o&&I.contains(o)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);v&&this.setEndAfter(v)}},shrink:function(a,b,c){if(!this.collapsed){var a=a||CKEDITOR.SHRINK_TEXT,d=this.clone(),e=this.startContainer,f=this.endContainer, +i=this.startOffset,h=this.endOffset,g=1,o=1;if(e&&e.type==CKEDITOR.NODE_TEXT)if(i)if(i>=e.getLength())d.setStartAfter(e);else{d.setStartBefore(e);g=0}else d.setStartBefore(e);if(f&&f.type==CKEDITOR.NODE_TEXT)if(h)if(h>=f.getLength())d.setEndAfter(f);else{d.setEndAfter(f);o=0}else d.setEndBefore(f);var d=new CKEDITOR.dom.walker(d),l=CKEDITOR.dom.walker.bookmark();d.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var p;d.guard=function(b,d){if(l(b))return true; +if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||d&&b.equals(p)||c===false&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return false;!d&&b.type==CKEDITOR.NODE_ELEMENT&&(p=b);return true};if(g)(e=d[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(e,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);if(o){d.reset();(d=d[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(d, +b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END)}return!(!g&&!o)}},insertNode:function(a){this.optimizeBookmark();this.trim(false,true);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(true)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer, +a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex();a=a.getParent()}this._setStartContainer(a);this.startOffset=b;if(!this.endContainer){this._setEndContainer(a);this.endOffset=b}c(this)},setEnd:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex()+1;a=a.getParent()}this._setEndContainer(a); +this.endOffset=b;if(!this.startContainer){this._setStartContainer(a);this.startOffset=b}c(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setStart(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type== +CKEDITOR.NODE_TEXT?this.setStart(a,a.getLength()):this.setStart(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(a)}c(this)},setEndAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setEnd(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setEnd(a,a.getLength()):this.setEnd(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(a);break; +case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(a)}c(this)},fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);d.trim();d.appendBogus();this.insertNode(d);this.moveToBookmark(c);return d},splitBlock:function(a){var b=new CKEDITOR.dom.elementPath(this.startContainer,this.root),c=new CKEDITOR.dom.elementPath(this.endContainer,this.root),d=b.block,e=c.block,f=null;if(!b.blockLimit.equals(c.blockLimit))return null; +if(a!="br"){if(!d){d=this.fixBlock(true,a);e=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block}e||(e=this.fixBlock(false,a))}a=d&&this.checkStartOfBlock();b=e&&this.checkEndOfBlock();this.deleteContents();if(d&&d.equals(e))if(b){f=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(e,CKEDITOR.POSITION_AFTER_END);e=null}else if(a){f=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START);d=null}else{e= +this.splitElement(d);d.is("ul","ol")||d.appendBogus()}return{previousBlock:d,nextBlock:e,wasStartOfBlock:a,wasEndOfBlock:b,elementPath:f}},splitElement:function(a){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var b=this.extractContents(),c=a.clone(false);b.appendTo(c);c.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return c},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return b(a)||(c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable())|| +d.is("table")&&a.is("caption")?false:true}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(false);return function(b){for(var c=this.createBookmark(),d=this[b?"endPath":"startPath"](),e=d.block||d.blockLimit,f;e&&!e.equals(d.root)&&!e.getFirst(a(e));){f=e.getParent();this[b?"setEndAt":"setStartAt"](e,CKEDITOR.POSITION_AFTER_END);e.remove(1);e=f}this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer, +this.root)},checkBoundaryOfElement:function(a,b){var c=b==CKEDITOR.START,d=this.clone();d.collapse(c);d[c?"setStartAt":"setEndAt"](a,c?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);d=new CKEDITOR.dom.walker(d);d.evaluator=f(c);return d[c?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var b=this.startContainer,c=this.startOffset;if(CKEDITOR.env.ie&&c&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.ltrim(b.substring(0,c));k.test(b)&&this.trim(0,1)}this.trim();b=new CKEDITOR.dom.elementPath(this.startContainer, +this.root);c=this.clone();c.collapse(true);c.setStartAt(b.block||b.blockLimit,CKEDITOR.POSITION_AFTER_START);b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkBackward()},checkEndOfBlock:function(){var b=this.endContainer,c=this.endOffset;if(CKEDITOR.env.ie&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.rtrim(b.substring(c));k.test(b)&&this.trim(1,0)}this.trim();b=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(false);c.setEndAt(b.block||b.blockLimit,CKEDITOR.POSITION_BEFORE_END); +b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type== +CKEDITOR.NODE_ELEMENT){if(b.getAttribute("contentEditable")=="false"&&!b.data("cke-editable"))return 0;if(b.is("html")||b.getAttribute("contentEditable")=="true"&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(false)){this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);return true}for(var c= +0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&&this.checkEndOfBlock()&&k.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable()){this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START);c=1}else if(b&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START); +else if(a.getAttribute("contenteditable")=="false"&&a.is(CKEDITOR.dtd.$block)){this.setStartBefore(a);this.setEndAfter(a);return true}var d=a,e=c,f=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(false)&&(f=d[b?"getLast":"getFirst"](g));!e&&!f&&(f=d[b?"getPrevious":"getNext"](g));a=f}return!!c},moveToClosestEditablePosition:function(a,b){var c=new CKEDITOR.dom.range(this.root),d=0,e,f=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];c.moveToPosition(a,f[b?0:1]);if(a.is(CKEDITOR.dtd.$block)){if(e= +c[b?"getNextEditableNode":"getPreviousEditableNode"]()){d=1;if(e.type==CKEDITOR.NODE_ELEMENT&&e.is(CKEDITOR.dtd.$block)&&e.getAttribute("contenteditable")=="false"){c.setStartAt(e,CKEDITOR.POSITION_BEFORE_START);c.setEndAt(e,CKEDITOR.POSITION_AFTER_END)}else c.moveToPosition(e,f[b?1:0])}}else d=1;d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,true)},getEnclosedNode:function(){var a= +this.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(false,true),c=CKEDITOR.dom.walker.whitespaces(true);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a= +this.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:b(),getPreviousEditableNode:b(1),scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("<span> </span>",this.document),b,c,d,e=this.clone();e.optimize();if(d=e.startContainer.type==CKEDITOR.NODE_TEXT){c=e.startContainer.getText();b=e.startContainer.split(e.startOffset);a.insertAfter(e.startContainer)}else e.insertNode(a);a.scrollIntoView();if(d){e.startContainer.setText(c); +b.remove()}a.remove()},_setStartContainer:function(a){this.startContainer=a},_setEndContainer:function(a){this.endContainer=a}}})();CKEDITOR.POSITION_AFTER_START=1;CKEDITOR.POSITION_BEFORE_END=2;CKEDITOR.POSITION_BEFORE_START=3;CKEDITOR.POSITION_AFTER_END=4;CKEDITOR.ENLARGE_ELEMENT=1;CKEDITOR.ENLARGE_BLOCK_CONTENTS=2;CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3;CKEDITOR.ENLARGE_INLINE=4;CKEDITOR.START=1;CKEDITOR.END=2;CKEDITOR.SHRINK_ELEMENT=1;CKEDITOR.SHRINK_TEXT=2;"use strict"; +(function(){function a(a){if(!(arguments.length<1)){this.range=a;this.forceBrBreak=0;this.enlargeBr=1;this.enforceRealBlocks=0;this._||(this._={})}}function f(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")=="true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function b(a,c,d,e){a:{e==null&&(e=f(d));for(var h;h=e.shift();)if(h.getDtd().p){e={element:h,remaining:e};break a}e=null}if(!e)return 0;if((h=CKEDITOR.filter.instances[e.element.data("cke-filter")])&& +!h.check(c))return b(a,c,d,e.remaining);c=new CKEDITOR.dom.range(e.element);c.selectNodeContents(e.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=h;a._.nestedEditable={element:e.element,container:d,remaining:e.remaining,iterator:c};return 1}function c(a,b,c){if(!b)return false;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,c?CKEDITOR.START:CKEDITOR.END)}var e=/^[\r\n\t ]+$/,d=CKEDITOR.dom.walker.bookmark(false,true), +h=CKEDITOR.dom.walker.whitespaces(true),k=function(a){return d(a)&&h(a)},j={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var f,h,s,w,q,a=a||"p";if(this._.nestedEditable){if(f=this._.nestedEditable.iterator.getNextParagraph(a)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return f}this.activeFilter=this.filter;if(b(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return this._.nestedEditable.iterator.getNextParagraph(a)}this._.nestedEditable= +null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var t=this.range.clone();h=t.startPath();var i=t.endPath(),A=!t.collapsed&&c(t,h.block),u=!t.collapsed&&c(t,i.block,1);t.shrink(CKEDITOR.SHRINK_ELEMENT,true);A&&t.setStartAt(h.block,CKEDITOR.POSITION_BEFORE_END);u&&t.setEndAt(i.block,CKEDITOR.POSITION_AFTER_START);h=t.endContainer.hasAscendant("pre",true)||t.startContainer.hasAscendant("pre",true);t.enlarge(this.forceBrBreak&&!h||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS: +CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(!t.collapsed){h=new CKEDITOR.dom.walker(t.clone());i=CKEDITOR.dom.walker.bookmark(true,true);h.evaluator=i;this._.nextNode=h.next();h=new CKEDITOR.dom.walker(t.clone());h.evaluator=i;h=h.previous();this._.lastNode=h.getNextSourceNode(true,null,t.root);if(this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()){i=this.range.clone();i.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END); +if(i.checkEndOfBlock()){i=new CKEDITOR.dom.elementPath(i.endContainer,i.root);this._.lastNode=(i.block||i.blockLimit).getNextSourceNode(true)}}if(!this._.lastNode||!t.root.contains(this._.lastNode)){this._.lastNode=this._.docEndMarker=t.document.createText("");this._.lastNode.insertAfter(h)}t=null}this._.started=1;h=t}i=this._.nextNode;t=this._.lastNode;for(this._.nextNode=null;i;){var A=0,u=i.hasAscendant("pre"),o=i.type!=CKEDITOR.NODE_ELEMENT,l=0;if(o)i.type==CKEDITOR.NODE_TEXT&&e.test(i.getText())&& +(o=0);else{var p=i.getName();if(CKEDITOR.dtd.$block[p]&&i.getAttribute("contenteditable")=="false"){f=i;b(this,a,f);break}else if(i.isBlockBoundary(this.forceBrBreak&&!u&&{br:1})){if(p=="br")o=1;else if(!h&&!i.getChildCount()&&p!="hr"){f=i;s=i.equals(t);break}if(h){h.setEndAt(i,CKEDITOR.POSITION_BEFORE_START);if(p!="br")this._.nextNode=i}A=1}else{if(i.getFirst()){if(!h){h=this.range.clone();h.setStartAt(i,CKEDITOR.POSITION_BEFORE_START)}i=i.getFirst();continue}o=1}}if(o&&!h){h=this.range.clone(); +h.setStartAt(i,CKEDITOR.POSITION_BEFORE_START)}s=(!A||o)&&i.equals(t);if(h&&!A)for(;!i.getNext(k)&&!s;){p=i.getParent();if(p.isBlockBoundary(this.forceBrBreak&&!u&&{br:1})){A=1;o=0;s||p.equals(t);h.setEndAt(p,CKEDITOR.POSITION_BEFORE_END);break}i=p;o=1;s=i.equals(t);l=1}o&&h.setEndAt(i,CKEDITOR.POSITION_AFTER_END);i=this._getNextSourceNode(i,l,t);if((s=!i)||A&&h)break}if(!f){if(!h){this._.docEndMarker&&this._.docEndMarker.remove();return this._.nextNode=null}f=new CKEDITOR.dom.elementPath(h.startContainer, +h.root);i=f.blockLimit;A={div:1,th:1,td:1};f=f.block;if(!f&&i&&!this.enforceRealBlocks&&A[i.getName()]&&h.checkStartOfBlock()&&h.checkEndOfBlock()&&!i.equals(h.root))f=i;else if(!f||this.enforceRealBlocks&&f.is(j)){f=this.range.document.createElement(a);h.extractContents().appendTo(f);f.trim();h.insertNode(f);w=q=true}else if(f.getName()!="li"){if(!h.checkStartOfBlock()||!h.checkEndOfBlock()){f=f.clone(false);h.extractContents().appendTo(f);f.trim();q=h.splitBlock();w=!q.wasStartOfBlock;q=!q.wasEndOfBlock; +h.insertNode(f)}}else if(!s)this._.nextNode=f.equals(t)?null:this._getNextSourceNode(h.getBoundaryNodes().endNode,1,t)}if(w)(w=f.getPrevious())&&w.type==CKEDITOR.NODE_ELEMENT&&(w.getName()=="br"?w.remove():w.getLast()&&w.getLast().$.nodeName.toLowerCase()=="br"&&w.getLast().remove());if(q)(w=f.getLast())&&w.type==CKEDITOR.NODE_ELEMENT&&w.getName()=="br"&&(!CKEDITOR.env.needsBrFiller||w.getPrevious(d)||w.getNext(d))&&w.remove();if(!this._.nextNode)this._.nextNode=s||f.equals(t)||!t?null:this._getNextSourceNode(f, +1,t);return f},_getNextSourceNode:function(a,b,c){function e(a){return!(a.equals(c)||a.equals(f))}for(var f=this.range.root,a=a.getNextSourceNode(b,null,e);!d(a);)a=a.getNextSourceNode(b,null,e);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})(); +CKEDITOR.command=function(a,f){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return false;this.editorFocus&&a.focus();return this.fire("exec")===false?true:f.exec.call(this,a,b)!==false};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return true;if(this.context&&!b.isContextFor(this.context)){this.disable();return true}if(!this.checkAllowed(true)){this.disable();return true}this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&& +this.disable();return this.fire("refresh",{editor:a,path:b})===false?true:f.refresh&&f.refresh.apply(this,arguments)!==false};var b;this.checkAllowed=function(c){return!c&&typeof b=="boolean"?b:b=a.activeFilter.checkFeature(this)};CKEDITOR.tools.extend(this,f,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!f.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)}; +CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(!this.preserveState||typeof this.previousState=="undefined"?CKEDITOR.TRISTATE_OFF:this.previousState)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return false;this.previousState=this.state;this.state=a;this.fire("state");return true},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF? +this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3; +CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"<!DOCTYPE html>",bodyId:"",bodyClass:"",fullPage:!1,height:200,extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]}; +(function(){function a(a,b,c,d,e){var f,p,a=[];for(f in b){p=b[f];p=typeof p=="boolean"?{}:typeof p=="function"?{match:p}:K(p);if(f.charAt(0)!="$")p.elements=f;if(c)p.featureName=c.toLowerCase();var i=p;i.elements=h(i.elements,/\s+/)||null;i.propertiesOnly=i.propertiesOnly||i.elements===true;var l=/\s*,\s*/,r=void 0;for(r in z){i[r]=h(i[r],l)||null;var x=i,n=B[r],v=h(i[B[r]],l),q=i[r],E=[],g=true,o=void 0;v?g=false:v={};for(o in q)if(o.charAt(0)=="!"){o=o.slice(1);E.push(o);v[o]=true;g=false}for(;o= +E.pop();){q[o]=q["!"+o];delete q["!"+o]}x[n]=(g?false:v)||null}i.match=i.match||null;d.push(p);a.push(p)}for(var b=e.elements,e=e.generic,C,c=0,d=a.length;c<d;++c){f=K(a[c]);p=f.classes===true||f.styles===true||f.attributes===true;i=f;r=n=l=void 0;for(l in z)i[l]=A(i[l]);x=true;for(r in B){l=B[r];n=i[l];v=[];q=void 0;for(q in n)q.indexOf("*")>-1?v.push(RegExp("^"+q.replace(/\*/g,".*")+"$")):v.push(q);n=v;if(n.length){i[l]=n;x=false}}i.nothingRequired=x;i.noProperties=!(i.attributes||i.classes||i.styles); +if(f.elements===true||f.elements===null)e[p?"unshift":"push"](f);else{i=f.elements;delete f.elements;for(C in i)if(b[C])b[C][p?"unshift":"push"](f);else b[C]=[f]}}}function f(a,c,d,e){if(!a.match||a.match(c))if(e||k(a,c)){if(!a.propertiesOnly)d.valid=true;if(!d.allAttributes)d.allAttributes=b(a.attributes,c.attributes,d.validAttributes);if(!d.allStyles)d.allStyles=b(a.styles,c.styles,d.validStyles);if(!d.allClasses){a=a.classes;c=c.classes;e=d.validClasses;if(a)if(a===true)a=true;else{for(var f=0, +p=c.length,i;f<p;++f){i=c[f];e[i]||(e[i]=a(i))}a=false}else a=false;d.allClasses=a}}}function b(a,b,c){if(!a)return false;if(a===true)return true;for(var d in b)c[d]||(c[d]=a(d));return false}function c(a,b,c){if(!a.match||a.match(b)){if(a.noProperties)return false;c.hadInvalidAttribute=e(a.attributes,b.attributes)||c.hadInvalidAttribute;c.hadInvalidStyle=e(a.styles,b.styles)||c.hadInvalidStyle;a=a.classes;b=b.classes;if(a){for(var d=false,f=a===true,p=b.length;p--;)if(f||a(b[p])){b.splice(p,1);d= +true}a=d}else a=false;c.hadInvalidClass=a||c.hadInvalidClass}}function e(a,b){if(!a)return false;var c=false,d=a===true,e;for(e in b)if(d||a(e)){delete b[e];c=true}return c}function d(a,b,c){if(a.disabled||a.customConfig&&!c||!b)return false;a._.cachedChecks={};return true}function h(a,b){if(!a)return false;if(a===true)return a;if(typeof a=="string"){a=I(a);return a=="*"?true:CKEDITOR.tools.convertArrayToObject(a.split(b))}if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a): +false;var c={},d=0,e;for(e in a){c[e]=a[e];d++}return d?c:false}function k(a,b){if(a.nothingRequired)return true;var c,d,e,f;if(e=a.requiredClasses){f=b.classes;for(c=0;c<e.length;++c){d=e[c];if(typeof d=="string"){if(CKEDITOR.tools.indexOf(f,d)==-1)return false}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(f,d))return false}}return j(b.styles,a.requiredStyles)&&j(b.attributes,a.requiredAttributes)}function j(a,b){if(!b)return true;for(var c=0,d;c<b.length;++c){d=b[c];if(typeof d=="string"){if(!(d in +a))return false}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,d))return false}return true}function g(a){if(!a)return{};for(var a=a.split(/\s*,\s*/).sort(),b={};a.length;)b[a.shift()]=v;return b}function m(a){for(var b,c,d,e,f={},p=1,a=I(a);b=a.match(x);){if(c=b[2]){d=y(c,"styles");e=y(c,"attrs");c=y(c,"classes")}else d=e=c=null;f["$"+p++]={elements:b[1],classes:c,styles:d,attributes:e};a=a.slice(b[0].length)}return f}function y(a,b){var c=a.match(E[b]);return c?I(c[1]):null}function s(a){var b= +a.styleBackup=a.attributes.style,c=a.classBackup=a.attributes["class"];if(!a.styles)a.styles=CKEDITOR.tools.parseCssText(b||"",1);if(!a.classes)a.classes=c?c.split(/\s+/):[]}function w(a,b,d,e){var l=0,r;if(e.toHtml)b.name=b.name.replace($,"$1");if(e.doCallbacks&&a.elementCallbacks){a:for(var x=a.elementCallbacks,h=0,n=x.length,v;h<n;++h)if(v=x[h](b)){r=v;break a}if(r)return r}if(e.doTransform)if(r=a._.transformations[b.name]){s(b);for(x=0;x<r.length;++x)p(a,b,r[x]);t(b)}if(e.doFilter){a:{x=b.name; +h=a._;a=h.allowedRules.elements[x];r=h.allowedRules.generic;x=h.disallowedRules.elements[x];h=h.disallowedRules.generic;n=e.skipRequired;v={valid:false,validAttributes:{},validClasses:{},validStyles:{},allAttributes:false,allClasses:false,allStyles:false,hadInvalidAttribute:false,hadInvalidClass:false,hadInvalidStyle:false};var q,z;if(!a&&!r)a=null;else{s(b);if(x){q=0;for(z=x.length;q<z;++q)if(c(x[q],b,v)===false){a=null;break a}}if(h){q=0;for(z=h.length;q<z;++q)c(h[q],b,v)}if(a){q=0;for(z=a.length;q< +z;++q)f(a[q],b,v,n)}if(r){q=0;for(z=r.length;q<z;++q)f(r[q],b,v,n)}a=v}}if(!a){d.push(b);return F}if(!a.valid){d.push(b);return F}z=a.validAttributes;var E=a.validStyles;r=a.validClasses;var x=b.attributes,A=b.styles,h=b.classes,n=b.classBackup,o=b.styleBackup,g,B,C=[];v=[];var j=/^data-cke-/;q=false;delete x.style;delete x["class"];delete b.classBackup;delete b.styleBackup;if(!a.allAttributes)for(g in x)if(!z[g])if(j.test(g)){if(g!=(B=g.replace(/^data-cke-saved-/,""))&&!z[B]){delete x[g];q=true}}else{delete x[g]; +q=true}if(!a.allStyles||a.hadInvalidStyle){for(g in A)a.allStyles||E[g]?C.push(g+":"+A[g]):q=true;if(C.length)x.style=C.sort().join("; ")}else if(o)x.style=o;if(!a.allClasses||a.hadInvalidClass){for(g=0;g<h.length;++g)(a.allClasses||r[h[g]])&&v.push(h[g]);v.length&&(x["class"]=v.sort().join(" "));n&&v.length<n.split(/\s+/).length&&(q=true)}else n&&(x["class"]=n);q&&(l=F);if(!e.skipFinalValidation&&!i(b)){d.push(b);return F}}if(e.toHtml)b.name=b.name.replace(aa,"cke:$1");return l}function q(a){var b= +[],c;for(c in a)c.indexOf("*")>-1&&b.push(c.replace(/\*/g,".*"));return b.length?RegExp("^(?:"+b.join("|")+")$"):null}function t(a){var b=a.attributes,c;delete b.style;delete b["class"];if(c=CKEDITOR.tools.writeCssText(a.styles,true))b.style=c;a.classes.length&&(b["class"]=a.classes.sort().join(" "))}function i(a){switch(a.name){case "a":if(!a.children.length&&!a.attributes.name)return false;break;case "img":if(!a.attributes.src)return false}return true}function A(a){if(!a)return false;if(a===true)return true; +var b=q(a);return function(c){return c in a||b&&c.match(b)}}function u(){return new CKEDITOR.htmlParser.element("br")}function o(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.name=="br"||L.$block[a.name])}function l(a,b,c){var d=a.name;if(L.$empty[d]||!a.children.length)if(d=="hr"&&b=="br")a.replaceWith(u());else{a.parent&&c.push({check:"it",el:a.parent});a.remove()}else if(L.$block[d]||d=="tr")if(b=="br"){if(a.previous&&!o(a.previous)){b=u();b.insertBefore(a)}if(a.next&&!o(a.next)){b=u();b.insertAfter(a)}a.replaceWithChildren()}else{var d= +a.children,e;b:{e=L[b];for(var f=0,p=d.length,i;f<p;++f){i=d[f];if(i.type==CKEDITOR.NODE_ELEMENT&&!e[i.name]){e=false;break b}}e=true}if(e){a.name=b;a.attributes={};c.push({check:"parent-down",el:a})}else{e=a.parent;for(var f=e.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||e.name=="body",l,r,p=d.length;p>0;){i=d[--p];if(f&&(i.type==CKEDITOR.NODE_TEXT||i.type==CKEDITOR.NODE_ELEMENT&&L.$inline[i.name])){if(!l){l=new CKEDITOR.htmlParser.element(b);l.insertAfter(a);c.push({check:"parent-down",el:l})}l.add(i, +0)}else{l=null;r=L[e.name]||L.span;i.insertAfter(a);e.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(i.type==CKEDITOR.NODE_ELEMENT&&!r[i.name])&&c.push({check:"el-up",el:i})}}a.remove()}}else if(d=="style")a.remove();else{a.parent&&c.push({check:"it",el:a.parent});a.replaceWithChildren()}}function p(a,b,c){var d,e;for(d=0;d<c.length;++d){e=c[d];if((!e.check||a.check(e.check,false))&&(!e.left||e.left(b))){e.right(b,ba);break}}}function r(a,b){var c=b.getDefinition(),d=c.attributes,e=c.styles,f,p,i,l;if(a.name!= +c.element)return false;for(f in d)if(f=="class"){c=d[f].split(/\s+/);for(i=a.classes.join("|");l=c.pop();)if(i.indexOf(l)==-1)return false}else if(a.attributes[f]!=d[f])return false;for(p in e)if(a.styles[p]!=e[p])return false;return true}function n(a,b){var c,d;if(typeof a=="string")c=a;else if(a instanceof CKEDITOR.style)d=a;else{c=a[0];d=a[1]}return[{element:c,left:d,right:function(a,c){c.transform(a,b)}}]}function P(a){return function(b){return r(b,a)}}function C(a){return function(b,c){c[a](b)}} +var L=CKEDITOR.dtd,F=1,K=CKEDITOR.tools.copy,I=CKEDITOR.tools.trim,v="cke-test",G=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=false;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{},generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{}};CKEDITOR.filter.instances[this.id]=this;if(a instanceof CKEDITOR.editor){a= +this.editor=a;this.customConfig=true;var b=a.config.allowedContent;if(b===true)this.disabled=true;else{if(!b)this.customConfig=false;this.allow(b,"config",1);this.allow(a.config.extraAllowedContent,"extra",1);this.allow(G[a.enterMode]+" "+G[a.shiftEnterMode],"default",1);this.disallow(a.config.disallowedContent)}}else{this.customConfig=false;this.allow(a,"default",1)}};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(b,c,e){if(!d(this,b,e))return false;var f,p;if(typeof b=="string")b= +m(b);else if(b instanceof CKEDITOR.style){if(b.toAllowedContentRules)return this.allow(b.toAllowedContentRules(this.editor),c,e);f=b.getDefinition();b={};e=f.attributes;b[f.element]=f={styles:f.styles,requiredStyles:f.styles&&CKEDITOR.tools.objectKeys(f.styles)};if(e){e=K(e);f.classes=e["class"]?e["class"].split(/\s+/):null;f.requiredClasses=f.classes;delete e["class"];f.attributes=e;f.requiredAttributes=e&&CKEDITOR.tools.objectKeys(e)}}else if(CKEDITOR.tools.isArray(b)){for(f=0;f<b.length;++f)p= +this.allow(b[f],c,e);return p}a(this,b,c,this.allowedContent,this._.allowedRules);return true},applyTo:function(a,b,c,d){if(this.disabled)return false;var e=this,f=[],p=this.editor&&this.editor.config.protectedSource,r,x=false,h={doFilter:!c,doTransform:true,doCallbacks:true,toHtml:b};a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if(a.attributes["data-cke-filter"]=="off")return false;if(!b||!(a.name=="span"&&~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-"))){r=w(e, +a,f,h);if(r&F)x=true;else if(r&2)return false}}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var c;a:{var d=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));c=[];var i,l,n;if(p)for(l=0;l<p.length;++l)if((n=d.match(p[l]))&&n[0].length==d.length){c=true;break a}d=CKEDITOR.htmlParser.fragment.fromHtml(d);d.children.length==1&&(i=d.children[0]).type==CKEDITOR.NODE_ELEMENT&&w(e,i,c,h);c=!c.length}c||f.push(a)}},null,true);f.length&&(x=true);for(var n, +a=[],d=G[d||(this.editor?this.editor.enterMode:CKEDITOR.ENTER_P)],q;c=f.pop();)c.type==CKEDITOR.NODE_ELEMENT?l(c,d,a):c.remove();for(;n=a.pop();){c=n.el;if(c.parent){q=L[c.parent.name]||L.span;switch(n.check){case "it":L.$removeEmpty[c.name]&&!c.children.length?l(c,d,a):i(c)||l(c,d,a);break;case "el-up":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!q[c.name]&&l(c,d,a);break;case "parent-down":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!q[c.name]&&l(c.parent,d,a)}}}return x},checkFeature:function(a){if(this.disabled|| +!a)return true;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=true},disallow:function(b){if(!d(this,b,true))return false;typeof b=="string"&&(b=m(b));a(this,b,null,this.disallowedContent,this._.disallowedRules);return true},addContentForms:function(a){if(!this.disabled&&a){var b,c,d=[],e;for(b=0;b<a.length&&!e;++b){c=a[b];if((typeof c=="string"||c instanceof CKEDITOR.style)&&this.check(c))e=c}if(e){for(b=0;b<a.length;++b)d.push(n(a[b], +e));this.addTransformations(d)}}},addElementCallback:function(a){if(!this.elementCallbacks)this.elementCallbacks=[];this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return true;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)?this.check(a.requiredContent):true},addTransformations:function(a){var b, +c;if(!this.disabled&&a){var d=this._.transformations,e;for(e=0;e<a.length;++e){b=a[e];var f=void 0,p=void 0,i=void 0,l=void 0,r=void 0,x=void 0;c=[];for(p=0;p<b.length;++p){i=b[p];if(typeof i=="string"){i=i.split(/\s*:\s*/);l=i[0];r=null;x=i[1]}else{l=i.check;r=i.left;x=i.right}if(!f){f=i;f=f.element?f.element:l?l.match(/^([a-z0-9]+)/i)[0]:f.left.getDefinition().element}r instanceof CKEDITOR.style&&(r=P(r));c.push({check:l==f?null:l,left:r,right:typeof x=="string"?C(x):x})}b=f;d[b]||(d[b]=[]);d[b].push(c)}}}, +check:function(a,b,c){if(this.disabled)return true;if(CKEDITOR.tools.isArray(a)){for(var d=a.length;d--;)if(this.check(a[d],b,c))return true;return false}var e,f;if(typeof a=="string"){f=a+"<"+(b===false?"0":"1")+(c?"1":"0")+">";if(f in this._.cachedChecks)return this._.cachedChecks[f];d=m(a).$1;e=d.styles;var i=d.classes;d.name=d.elements;d.classes=i=i?i.split(/\s*,\s*/):[];d.styles=g(e);d.attributes=g(d.attributes);d.children=[];i.length&&(d.attributes["class"]=i.join(" "));if(e)d.attributes.style= +CKEDITOR.tools.writeCssText(d.styles);e=d}else{d=a.getDefinition();e=d.styles;i=d.attributes||{};if(e){e=K(e);i.style=CKEDITOR.tools.writeCssText(e,true)}else e={};e={name:d.element,attributes:i,classes:i["class"]?i["class"].split(/\s+/):[],styles:e,children:[]}}var i=CKEDITOR.tools.clone(e),l=[],r;if(b!==false&&(r=this._.transformations[e.name])){for(d=0;d<r.length;++d)p(this,e,r[d]);t(e)}w(this,i,l,{doFilter:true,doTransform:b!==false,skipRequired:!c,skipFinalValidation:!c});b=l.length>0?false: +CKEDITOR.tools.objectCompare(e.attributes,i.attributes,true)?true:false;typeof a=="string"&&(this._.cachedChecks[f]=b);return b},getAllowedEnterMode:function(){var a=["p","div","br"],b={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(c,d){var e=a.slice(),f;if(this.check(G[c]))return c;for(d||(e=e.reverse());f=e.pop();)if(this.check(f))return b[f];return CKEDITOR.ENTER_BR}}(),destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent; +delete this.disallowedContent}};var z={styles:1,attributes:1,classes:1},B={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},x=/^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,E={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},$=/^cke:(object|embed|param)$/,aa=/^(object|embed|param)$/,ba=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a, +"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a,b,c){c=c||b;if(!(c in a.styles)){var d=a.attributes[b];if(d){/^\d+$/.test(d)&&(d=d+"px");a.styles[c]=d}}delete a.attributes[b]},lengthToAttribute:function(a,b,c){c=c||b;if(!(c in a.attributes)){var d=a.styles[b],e=d&&d.match(/^(\d+)(?:\.\d*)?px$/);e?a.attributes[c]=e[1]:d==v&&(a.attributes[c]=v)}delete a.styles[b]},alignmentToStyle:function(a){if(!("float"in a.styles)){var b= +a.attributes.align;if(b=="left"||b=="right")a.styles["float"]=b}delete a.attributes.align},alignmentToAttribute:function(a){if(!("align"in a.attributes)){var b=a.styles["float"];if(b=="left"||b=="right")a.attributes.align=b}delete a.styles["float"]},matchesStyle:r,transform:function(a,b){if(typeof b=="string")a.name=b;else{var c=b.getDefinition(),d=c.styles,e=c.attributes,f,i,p,l;a.name=c.element;for(f in e)if(f=="class"){c=a.classes.join("|");for(p=e[f].split(/\s+/);l=p.pop();)c.indexOf(l)==-1&& +a.classes.push(l)}else a.attributes[f]=e[f];for(i in d)a.styles[i]=d[i]}}}})(); +(function(){CKEDITOR.focusManager=function(a){if(a.focusManager)return a.focusManager;this.hasFocus=false;this.currentActive=null;this._={editor:a};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(a){this._.timer&&clearTimeout(this._.timer);if(a)this.currentActive=a;if(!this.hasFocus&&!this._.locked){(a=CKEDITOR.currentInstance)&&a.focusManager.blur(1);this.hasFocus=true;(a=this._.editor.container)&&a.addClass("cke_focus");this._.editor.fire("focus")}}, +lock:function(){this._.locked=1},unlock:function(){delete this._.locked},blur:function(a){function f(){if(this.hasFocus){this.hasFocus=false;var a=this._.editor.container;a&&a.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var b=CKEDITOR.focusManager._.blurDelay;a||!b?f.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer;f.call(this)},b,this)}},add:function(a,f){var b=a.getCustomData("focusmanager");if(!b|| +b!=this){b&&b.remove(a);var b="focus",c="blur";if(f)if(CKEDITOR.env.ie){b="focusin";c="focusout"}else CKEDITOR.event.useCapture=1;var e={blur:function(){a.equals(this.currentActive)&&this.blur()},focus:function(){this.focus(a)}};a.on(b,e.focus,this);a.on(c,e.blur,this);if(f)CKEDITOR.event.useCapture=0;a.setCustomData("focusmanager",this);a.setCustomData("focusmanager_handlers",e)}},remove:function(a){a.removeCustomData("focusmanager");var f=a.removeCustomData("focusmanager_handlers");a.removeListener("blur", +f.blur);a.removeListener("focus",f.focus)}}})();CKEDITOR.keystrokeHandler=function(a){if(a.keystrokeHandler)return a.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:a};return this}; +(function(){var a,f=function(b){var b=b.data,e=b.getKeystroke(),d=this.keystrokes[e],f=this._.editor;a=f.fire("key",{keyCode:e,domEvent:b})===false;if(!a){d&&(a=f.execCommand(d,{from:"keystrokeHandler"})!==false);a||(a=!!this.blockedKeystrokes[e])}a&&b.preventDefault(true);return!a},b=function(b){if(a){a=false;b.data.preventDefault(true)}};CKEDITOR.keystrokeHandler.prototype={attach:function(a){a.on("keydown",f,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac)a.on("keypress",b,this)}}})(); +(function(){CKEDITOR.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(a,f,b){if(!a||!CKEDITOR.lang.languages[a])a=this.detect(f, +a);var c=this,f=function(){c[a].dir=c.rtl[a]?"rtl":"ltr";b(a,c[a])};this[a]?f():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+a+".js"),f,this)},detect:function(a,f){var b=this.languages,f=f||navigator.userLanguage||navigator.language||a,c=f.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),e=c[1],c=c[2];b[e+"-"+c]?e=e+"-"+c:b[e]||(e=null);CKEDITOR.lang.detect=e?function(){return e}:function(a){return a};return e||a}}})(); +CKEDITOR.scriptLoader=function(){var a={},f={};return{load:function(b,c,e,d){var h=typeof b=="string";h&&(b=[b]);e||(e=CKEDITOR);var k=b.length,j=[],g=[],m=function(a){c&&(h?c.call(e,a):c.call(e,j,g))};if(k===0)m(true);else{var y=function(a,b){(b?j:g).push(a);if(--k<=0){d&&CKEDITOR.document.getDocumentElement().removeStyle("cursor");m(b)}},s=function(b,c){a[b]=1;var d=f[b];delete f[b];for(var e=0;e<d.length;e++)d[e](b,c)},w=function(b){if(a[b])y(b,true);else{var d=f[b]||(f[b]=[]);d.push(y);if(!(d.length> +1)){var e=new CKEDITOR.dom.element("script");e.setAttributes({type:"text/javascript",src:b});if(c)if(CKEDITOR.env.ie&&CKEDITOR.env.version<11)e.$.onreadystatechange=function(){if(e.$.readyState=="loaded"||e.$.readyState=="complete"){e.$.onreadystatechange=null;s(b,true)}};else{e.$.onload=function(){setTimeout(function(){s(b,true)},0)};e.$.onerror=function(){s(b,false)}}e.appendTo(CKEDITOR.document.getHead())}}};d&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var q=0;q<k;q++)w(b[q])}}, +queue:function(){function a(){var b;(b=c[0])&&this.load(b.scriptUrl,b.callback,CKEDITOR,0)}var c=[];return function(e,d){var f=this;c.push({scriptUrl:e,callback:function(){d&&d.apply(this,arguments);c.shift();a.call(f)}});c.length==1&&a.call(this)}}()}}();CKEDITOR.resourceManager=function(a,f){this.basePath=a;this.fileName=f;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}}; +CKEDITOR.resourceManager.prototype={add:function(a,f){if(this.registered[a])throw'[CKEDITOR.resourceManager.add] The resource name "'+a+'" is already registered.';var b=this.registered[a]=f||{};b.name=a;b.path=this.getPath(a);CKEDITOR.fire(a+CKEDITOR.tools.capitalize(this.fileName)+"Ready",b);return this.get(a)},get:function(a){return this.registered[a]||null},getPath:function(a){var f=this.externals[a];return CKEDITOR.getUrl(f&&f.dir||this.basePath+a+"/")},getFilePath:function(a){var f=this.externals[a]; +return CKEDITOR.getUrl(this.getPath(a)+(f?f.file:this.fileName+".js"))},addExternal:function(a,f,b){for(var a=a.split(","),c=0;c<a.length;c++){var e=a[c];b||(f=f.replace(/[^\/]+$/,function(a){b=a;return""}));this.externals[e]={dir:f,file:b||this.fileName+".js"}}},load:function(a,f,b){CKEDITOR.tools.isArray(a)||(a=a?[a]:[]);for(var c=this.loaded,e=this.registered,d=[],h={},k={},j=0;j<a.length;j++){var g=a[j];if(g)if(!c[g]&&!e[g]){var m=this.getFilePath(g);d.push(m);m in h||(h[m]=[]);h[m].push(g)}else k[g]= +this.get(g)}CKEDITOR.scriptLoader.load(d,function(a,d){if(d.length)throw'[CKEDITOR.resourceManager.load] Resource name "'+h[d[0]].join(",")+'" was not found at "'+d[0]+'".';for(var e=0;e<a.length;e++)for(var q=h[a[e]],g=0;g<q.length;g++){var i=q[g];k[i]=this.get(i);c[i]=1}f.call(b,k)},this)}};CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin"); +CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(a){var f={};return function(b,c,e){var d={},h=function(b){a.call(this,b,function(a){CKEDITOR.tools.extend(d,a);var b=[],m;for(m in a){var k=a[m],s=k&&k.requires;if(!f[m]){if(k.icons)for(var w=k.icons.split(","),q=w.length;q--;)CKEDITOR.skin.addIcon(w[q],k.path+"icons/"+(CKEDITOR.env.hidpi&&k.hidpi?"hidpi/":"")+w[q]+".png");f[m]=1}if(s){s.split&&(s=s.split(","));for(k=0;k<s.length;k++)d[s[k]]||b.push(s[k])}}if(b.length)h.call(this, +b);else{for(m in d){k=d[m];if(k.onLoad&&!k.onLoad._called){k.onLoad()===false&&delete d[m];k.onLoad._called=1}}c&&c.call(e||window,d)}},this)};h.call(this,b)}});CKEDITOR.plugins.setLang=function(a,f,b){var c=this.get(a),a=c.langEntries||(c.langEntries={}),c=c.lang||(c.lang=[]);c.split&&(c=c.split(","));CKEDITOR.tools.indexOf(c,f)==-1&&c.push(f);a[f]=b};CKEDITOR.ui=function(a){if(a.ui)return a.ui;this.items={};this.instances={};this.editor=a;this._={handlers:{}};return this}; +CKEDITOR.ui.prototype={add:function(a,f,b){b.name=a.toLowerCase();var c=this.items[a]={type:f,command:b.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(c,b)},get:function(a){return this.instances[a]},create:function(a){var f=this.items[a],b=f&&this._.handlers[f.type],c=f&&f.command&&this.editor.getCommand(f.command),b=b&&b.create.apply(this,f.args);this.instances[a]=b;c&&c.uiItems.push(b);if(b&&!b.type)b.type=f.type;return b},addHandler:function(a,f){this._.handlers[a]= +f},space:function(a){return CKEDITOR.document.getById(this.spaceId(a))},spaceId:function(a){return this.editor.id+"_"+a}};CKEDITOR.event.implementOn(CKEDITOR.ui); +(function(){function a(a,c,d){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);if(c!==void 0){if(c instanceof CKEDITOR.dom.element){if(!d)throw Error("One of the element modes must be specified.");}else throw Error("Expect element of type CKEDITOR.dom.element.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&d==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(!(d==CKEDITOR.ELEMENT_MODE_INLINE?c.is(CKEDITOR.dtd.$editable)||c.is("textarea"):d==CKEDITOR.ELEMENT_MODE_REPLACE? +!c.is(CKEDITOR.dtd.$nonBodyContent):1))throw Error('The specified element mode is not supported on element: "'+c.getName()+'".');this.element=c;this.elementMode=d;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(c.getId()||c.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};this.templates={};this.name=this.name||f();this.id=CKEDITOR.tools.getNextId();this.status="unloaded";this.config=CKEDITOR.tools.prototypedCopy(CKEDITOR.config);this.ui=new CKEDITOR.ui(this); +this.focusManager=new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on("readOnly",b);this.on("selectionChange",function(a){e(this,a.data.path)});this.on("activeFilterChange",function(){e(this,this.elementPath(),true)});this.on("mode",b);this.on("instanceReady",function(){this.config.startupFocus&&this.focus()});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){h(this,a)},0,this)}function f(){do var a="editor"+ +++s;while(CKEDITOR.instances[a]);return a}function b(){var a=this.commands,b;for(b in a)c(this,a[b])}function c(a,b){b[b.startDisabled?"disable":a.readOnly&&!b.readOnly?"disable":b.modes[a.mode]?"enable":"disable"]()}function e(a,b,c){if(b){var d,e,f=a.commands;for(e in f){d=f[e];(c||d.contextSensitive)&&d.refresh(a,b)}}}function d(a){var b=a.config.customConfig;if(!b)return false;var b=CKEDITOR.getUrl(b),c=w[b]||(w[b]={});if(c.fn){c.fn.call(a,a.config);(CKEDITOR.getUrl(a.config.customConfig)==b|| +!d(a))&&a.fireOnce("customConfigLoaded")}else CKEDITOR.scriptLoader.queue(b,function(){c.fn=CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};d(a)});return true}function h(a,b){a.on("customConfigLoaded",function(){if(b){if(b.on)for(var c in b.on)a.on(c,b.on[c]);CKEDITOR.tools.extend(a.config,b,true);delete a.config.on}c=a.config;a.readOnly=!(!c.readOnly&&!(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.is("textarea")?a.element.hasAttribute("disabled"):a.element.isReadOnly():a.elementMode== +CKEDITOR.ELEMENT_MODE_REPLACE&&a.element.hasAttribute("disabled")));a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(a.element.is("textarea")||CKEDITOR.dtd[a.element.getName()].p):false;a.tabIndex=c.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:c.enterMode;a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:c.shiftEnterMode;if(c.skin)CKEDITOR.skinName=c.skin;a.fireOnce("configLoaded");a.dataProcessor= +new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);k(a)});if(b&&b.customConfig!=null)a.config.customConfig=b.customConfig;d(a)||a.fireOnce("customConfigLoaded")}function k(a){CKEDITOR.skin.loadPart("editor",function(){j(a)})}function j(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(b,c){var d=a.config.title;a.langCode=b;a.lang=CKEDITOR.tools.prototypedCopy(c);a.title=typeof d=="string"||d===false?d:[a.lang.editor,a.name].join(", ");if(!a.config.contentsLangDirection)a.config.contentsLangDirection= +a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir;a.fire("langLoaded");g(a)})}function g(a){a.getStylesSet(function(b){a.once("loaded",function(){a.fire("stylesSet",{styles:b})},null,null,1);m(a)})}function m(a){var b=a.config,c=b.plugins,d=b.extraPlugins,e=b.removePlugins;if(d)var f=RegExp("(?:^|,)(?:"+d.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(f,""),c=c+(","+d);if(e)var l=RegExp("(?:^|,)(?:"+e.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(l,"");CKEDITOR.env.air&& +(c=c+",adobeair");CKEDITOR.plugins.load(c.split(","),function(c){var d=[],e=[],f=[];a.plugins=c;for(var i in c){var h=c[i],g=h.lang,o=null,A=h.requires,v;CKEDITOR.tools.isArray(A)&&(A=A.join(","));if(A&&(v=A.match(l)))for(;A=v.pop();)CKEDITOR.tools.setTimeout(function(a,b){throw Error('Plugin "'+a.replace(",","")+'" cannot be removed from the plugins list, because it\'s required by "'+b+'" plugin.');},0,null,[A,i]);if(g&&!a.lang[i]){g.split&&(g=g.split(","));if(CKEDITOR.tools.indexOf(g,a.langCode)>= +0)o=a.langCode;else{o=a.langCode.replace(/-.*/,"");o=o!=a.langCode&&CKEDITOR.tools.indexOf(g,o)>=0?o:CKEDITOR.tools.indexOf(g,"en")>=0?"en":g[0]}if(!h.langEntries||!h.langEntries[o])f.push(CKEDITOR.getUrl(h.path+"lang/"+o+".js"));else{a.lang[i]=h.langEntries[o];o=null}}e.push(o);d.push(h)}CKEDITOR.scriptLoader.load(f,function(){for(var c=["beforeInit","init","afterInit"],f=0;f<c.length;f++)for(var p=0;p<d.length;p++){var i=d[p];f===0&&(e[p]&&i.lang&&i.langEntries)&&(a.lang[i.name]=i.langEntries[e[p]]); +if(i[c[f]])i[c[f]](a)}a.fireOnce("pluginsLoaded");b.keystrokes&&a.setKeystroke(a.config.keystrokes);for(p=0;p<a.config.blockedKeystrokes.length;p++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[p]]=1;a.status="loaded";a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)})})}function y(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")?a.setValue(b): +a.setHtml(b);return true}return false}a.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=a;var s=0,w={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addCommand:function(a,b){b.name=a.toLowerCase();var d=new CKEDITOR.command(this,b);this.mode&&c(this,d);return this.commands[a]=d},_attachToForm:function(){function a(d){b.updateElement();b._.required&&(!c.getValue()&&b.fire("required")===false)&&d.data.preventDefault()}var b=this,c=b.element,d=new CKEDITOR.dom.element(c.$.form);if(c.is("textarea")&& +d){d.on("submit",a);if(d.$.submit&&d.$.submit.call&&d.$.submit.apply)d.$.submit=CKEDITOR.tools.override(d.$.submit,function(b){return function(){a();b.apply?b.apply(this):b()}});b.on("destroy",function(){d.removeListener("submit",a)})}},destroy:function(a){this.fire("beforeDestroy");!a&&y.call(this);this.editable(null);this.filter.destroy();delete this.filter;delete this.activeFilter;this.status="destroyed";this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed", +null,this)},elementPath:function(a){if(!a){a=this.getSelection();if(!a)return null;a=a.getStartElement()}return a?new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,b){var c=this.getCommand(a),d={name:a,commandData:b,command:c};if(c&&c.state!=CKEDITOR.TRISTATE_DISABLED&&this.fire("beforeCommandExec",d)!==false){d.returnValue=c.exec(d.commandData);if(!c.async&&this.fire("afterCommandExec", +d)!==false)return d.returnValue}return false},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var b=this._.data;if(typeof b!="string")b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is("textarea")?b.getValue():b.getHtml():"";b={dataValue:b};!a&&this.fire("getData",b);return b.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");if(typeof a!="string"){var b=this.element;b&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&& +(a=b.is("textarea")?b.getValue():b.getHtml())}return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)},setData:function(a,b,c){var d=true,e=b;if(b&&typeof b=="object"){c=b.internal;e=b.callback;d=!b.noSnapshot}!c&&d&&this.fire("saveSnapshot");if(e||!c)this.once("dataReady",function(a){!c&&d&&this.fire("saveSnapshot");e&&e.call(a.editor)});a={dataValue:a};!c&&this.fire("setData",a);this._.data=a.dataValue;!c&&this.fire("afterSetData",a)},setReadOnly:function(a){a=a==null||a;if(this.readOnly!= +a){this.readOnly=a;this.keystrokeHandler.blockedKeystrokes[8]=+a;this.editable().setReadOnly(a);this.fire("readOnly")}},insertHtml:function(a,b){this.fire("insertHtml",{dataValue:a,mode:b})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",a)},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return this.status=="ready"&&this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return y.call(this)}, +setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],c,d,e=b.length;e--;){c=b[e];d=0;if(CKEDITOR.tools.isArray(c)){d=c[1];c=c[0]}d?a[c]=d:delete a[c]}},addFeature:function(a){return this.filter.addFeature(a)},setActiveFilter:function(a){if(!a)a=this.filter;if(this.activeFilter!==a){this.activeFilter=a;this.fire("activeFilterChange");a===this.filter?this.setActiveEnterMode(null,null):this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode), +a.getAllowedEnterMode(this.shiftEnterMode,true))}},setActiveEnterMode:function(a,b){a=a?this.blockless?CKEDITOR.ENTER_BR:a:this.enterMode;b=b?this.blockless?CKEDITOR.ENTER_BR:b:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=b){this.activeEnterMode=a;this.activeShiftEnterMode=b;this.fire("activeEnterModeChange")}}})})();CKEDITOR.ELEMENT_MODE_NONE=0;CKEDITOR.ELEMENT_MODE_REPLACE=1;CKEDITOR.ELEMENT_MODE_APPENDTO=2;CKEDITOR.ELEMENT_MODE_INLINE=3; +CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:/<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--\>)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}}; +(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,f={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,e,d=0,h;c=this._.htmlPartsRegex.exec(b);){e=c.index;if(e>d){d=b.substring(d,e);if(h)h.push(d);else this.onText(d)}d= +this._.htmlPartsRegex.lastIndex;if(e=c[1]){e=e.toLowerCase();if(h&&CKEDITOR.dtd.$cdata[e]){this.onCDATA(h.join(""));h=null}if(!h){this.onTagClose(e);continue}}if(h)h.push(c[0]);else if(e=c[3]){e=e.toLowerCase();if(!/="/.test(e)){var k={},j,g=c[4];c=!!c[5];if(g)for(;j=a.exec(g);){var m=j[1].toLowerCase();j=j[2]||j[3]||j[4]||"";k[m]=!j&&f[m]?m:CKEDITOR.tools.htmlDecodeAttr(j)}this.onTagOpen(e,k,c);!h&&CKEDITOR.dtd.$cdata[e]&&(h=[])}}else if(e=c[2])this.onComment(e)}if(b.length>d)this.onText(b.substring(d, +b.length))}}})(); +CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push("<",a)},openTagClose:function(a,f){f?this._.output.push(" />"):this._.output.push(">")},attribute:function(a,f){typeof f=="string"&&(f=CKEDITOR.tools.htmlEncodeAttr(f));this._.output.push(" ",a,'="',f,'"')},closeTag:function(a){this._.output.push("</",a,">")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push("<\!--",a,"--\>")},write:function(a){this._.output.push(a)}, +reset:function(){this._.output=[];this._.indent=false},getHtml:function(a){var f=this._.output.join("");a&&this.reset();return f}}});"use strict"; +(function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var a=this.parent.children,f=CKEDITOR.tools.indexOf(a,this),b=this.previous,c=this.next;b&&(b.next=c);c&&(c.previous=b);a.splice(f,1);this.parent=null},replaceWith:function(a){var f=this.parent.children,b=CKEDITOR.tools.indexOf(f,this),c=a.previous=this.previous,e=a.next=this.next;c&&(c.next=a);e&&(e.previous=a);f[b]=a;a.parent=this.parent;this.parent=null},insertAfter:function(a){var f=a.parent.children, +b=CKEDITOR.tools.indexOf(f,a),c=a.next;f.splice(b+1,0,this);this.next=a.next;this.previous=a;a.next=this;c&&(c.previous=this);this.parent=a.parent},insertBefore:function(a){var f=a.parent.children,b=CKEDITOR.tools.indexOf(f,a);f.splice(b,0,this);this.next=a;(this.previous=a.previous)&&(a.previous.next=this);a.previous=this;this.parent=a.parent},getAscendant:function(a){var f=typeof a=="function"?a:typeof a=="string"?function(b){return b.name==a}:function(b){return b.name in a},b=this.parent;for(;b&& +b.type==CKEDITOR.NODE_ELEMENT;){if(f(b))return b;b=b.parent}return null},wrapWith:function(a){this.replaceWith(a);a.add(this);return a},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this)},getFilterContext:function(a){return a||{}}}})();"use strict";CKEDITOR.htmlParser.comment=function(a){this.value=a;this._={isBlockLike:false}}; +CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(a,f){var b=this.value;if(!(b=a.onComment(f,b,this))){this.remove();return false}if(typeof b!="string"){this.replaceWith(b);return false}this.value=b;return true},writeHtml:function(a,f){f&&this.filter(f);a.comment(this.value)}});"use strict"; +(function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:false}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,f){if(!(this.value=a.onText(f,this.value,this))){this.remove();return false}},writeHtml:function(a,f){f&&this.filter(f);a.text(this.value)}})})();"use strict"; +(function(){CKEDITOR.htmlParser.cdata=function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})})();"use strict";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false}}; +(function(){function a(a){return a.attributes["data-cke-survive"]?false:a.name=="a"&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var f=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},c=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),e={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml= +function(d,h,k){function j(a){var b;if(i.length>0)for(var c=0;c<i.length;c++){var d=i[c],e=d.name,f=CKEDITOR.dtd[e],l=u.name&&CKEDITOR.dtd[u.name];if((!l||l[e])&&(!a||!f||f[a]||!CKEDITOR.dtd[a])){if(!b){g();b=1}d=d.clone();d.parent=u;u=d;i.splice(c,1);c--}else if(e==u.name){y(u,u.parent,1);c--}}}function g(){for(;A.length;)y(A.shift(),u)}function m(a){if(a._.isBlockLike&&a.name!="pre"&&a.name!="textarea"){var b=a.children.length,c=a.children[b-1],d;if(c&&c.type==CKEDITOR.NODE_TEXT)(d=CKEDITOR.tools.rtrim(c.value))? +c.value=d:a.children.length=b-1}}function y(b,c,d){var c=c||u||t,e=u;if(b.previous===void 0){if(s(c,b)){u=c;q.onTagOpen(k,{});b.returnPoint=c=u}m(b);(!a(b)||b.children.length)&&c.add(b);b.name=="pre"&&(l=false);b.name=="textarea"&&(o=false)}if(b.returnPoint){u=b.returnPoint;delete b.returnPoint}else u=d?c:e}function s(a,b){if((a==t||a.name=="body")&&k&&(!a.name||CKEDITOR.dtd[a.name][k])){var c,d;return(c=b.attributes&&(d=b.attributes["data-cke-real-element-type"])?d:b.name)&&c in CKEDITOR.dtd.$inline&& +!(c in CKEDITOR.dtd.head)&&!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function w(a,b){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==b||a=="dt"&&b=="dd"||a=="dd"&&b=="dt":false}var q=new CKEDITOR.htmlParser,t=h instanceof CKEDITOR.htmlParser.element?h:typeof h=="string"?new CKEDITOR.htmlParser.element(h):new CKEDITOR.htmlParser.fragment,i=[],A=[],u=t,o=t.name=="textarea",l=t.name=="pre";q.onTagOpen=function(d,e,h,m){e=new CKEDITOR.htmlParser.element(d,e);if(e.isUnknown&&h)e.isEmpty= +true;e.isOptionalClose=m;if(a(e))i.push(e);else{if(d=="pre")l=true;else{if(d=="br"&&l){u.add(new CKEDITOR.htmlParser.text("\n"));return}d=="textarea"&&(o=true)}if(d=="br")A.push(e);else{for(;;){m=(h=u.name)?CKEDITOR.dtd[h]||(u._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!e.isUnknown&&!u.isUnknown&&!m[d])if(u.isOptionalClose)q.onTagClose(h);else if(d in b&&h in b){h=u.children;(h=h[h.length-1])&&h.name=="li"||y(h=new CKEDITOR.htmlParser.element("li"),u);!e.returnPoint&&(e.returnPoint=u); +u=h}else if(d in CKEDITOR.dtd.$listItem&&!w(d,h))q.onTagOpen(d=="li"?"ul":"dl",{},0,1);else if(h in f&&!w(d,h)){!e.returnPoint&&(e.returnPoint=u);u=u.parent}else{h in CKEDITOR.dtd.$inline&&i.unshift(u);if(u.parent)y(u,u.parent,1);else{e.isOrphan=1;break}}else break}j(d);g();e.parent=u;e.isEmpty?y(e):u=e}}};q.onTagClose=function(a){for(var b=i.length-1;b>=0;b--)if(a==i[b].name){i.splice(b,1);return}for(var c=[],d=[],e=u;e!=t&&e.name!=a;){e._.isBlockLike||d.unshift(e);c.push(e);e=e.returnPoint||e.parent}if(e!= +t){for(b=0;b<c.length;b++){var f=c[b];y(f,f.parent)}u=e;e._.isBlockLike&&g();y(e,e.parent);if(e==u)u=u.parent;i=i.concat(d)}a=="body"&&(k=false)};q.onText=function(a){if((!u._.hasInlineStarted||A.length)&&!l&&!o){a=CKEDITOR.tools.ltrim(a);if(a.length===0)return}var b=u.name,d=b?CKEDITOR.dtd[b]||(u._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!o&&!d["#"]&&b in f){q.onTagOpen(e[b]||"");q.onText(a)}else{g();j();!l&&!o&&(a=a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));a=new CKEDITOR.htmlParser.text(a); +if(s(u,a))this.onTagOpen(k,{},0,1);u.add(a)}};q.onCDATA=function(a){u.add(new CKEDITOR.htmlParser.cdata(a))};q.onComment=function(a){g();j();u.add(new CKEDITOR.htmlParser.comment(a))};q.parse(d);for(g();u!=t;)y(u,u.parent,1);m(t);return t};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,b){isNaN(b)&&(b=this.children.length);var c=b>0?this.children[b-1]:null;if(c){if(a._.isBlockLike&&c.type==CKEDITOR.NODE_TEXT){c.value=CKEDITOR.tools.rtrim(c.value);if(c.value.length=== +0){this.children.pop();this.add(a);return}}c.next=a}a.previous=c;a.parent=this;this.children.splice(b,0,a);if(!this._.hasInlineStarted)this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT||a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike},filter:function(a,b){b=this.getFilterContext(b);a.onRoot(b,this);this.filterChildren(a,false,b)},filterChildren:function(a,b,c){if(this.childrenFilteredBy!=a.id){c=this.getFilterContext(c);if(b&&!this.parent)a.onRoot(c,this);this.childrenFilteredBy=a.id;for(b=0;b<this.children.length;b++)this.children[b].filter(a, +c)===false&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,b,c){var e=this.getFilterContext();if(c&&!this.parent&&b)b.onRoot(e,this);b&&this.filterChildren(b,false,e);b=0;c=this.children;for(e=c.length;b<e;b++)c[b].writeHtml(a)},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var e=a(this);if(e!==false)for(var c=this.children,f=0;f<c.length;f++){e=c[f];e.type==CKEDITOR.NODE_ELEMENT?e.forEach(a,b):(!b||e.type==b)&&a(e)}},getFilterContext:function(a){return a|| +{}}}})();"use strict"; +(function(){function a(){this.rules=[]}function f(b,c,e,d){var f,k;for(f in c){(k=b[f])||(k=b[f]=new a);k.add(c[f],e,d)}}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(b){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new a;this.attributeNameRules=new a;this.elementsRules={};this.attributesRules={};this.textRules=new a;this.commentRules=new a;this.rootRules=new a;b&&this.addRules(b,10)},proto:{addRules:function(a,c){var e;if(typeof c=="number")e=c;else if(c&&"priority"in +c)e=c.priority;typeof e!="number"&&(e=10);typeof c!="object"&&(c={});a.elementNames&&this.elementNameRules.addMany(a.elementNames,e,c);a.attributeNames&&this.attributeNameRules.addMany(a.attributeNames,e,c);a.elements&&f(this.elementsRules,a.elements,e,c);a.attributes&&f(this.attributesRules,a.attributes,e,c);a.text&&this.textRules.add(a.text,e,c);a.comment&&this.commentRules.add(a.comment,e,c);a.root&&this.rootRules.add(a.root,e,c)},applyTo:function(a){a.filter(this)},onElementName:function(a,c){return this.elementNameRules.execOnName(a, +c)},onAttributeName:function(a,c){return this.attributeNameRules.execOnName(a,c)},onText:function(a,c,e){return this.textRules.exec(a,c,e)},onComment:function(a,c,e){return this.commentRules.exec(a,c,e)},onRoot:function(a,c){return this.rootRules.exec(a,c)},onElement:function(a,c){for(var e=[this.elementsRules["^"],this.elementsRules[c.name],this.elementsRules.$],d,f=0;f<3;f++)if(d=e[f]){d=d.exec(a,c,this);if(d===false)return null;if(d&&d!=c)return this.onNode(a,d);if(c.parent&&!c.name)break}return c}, +onNode:function(a,c){var e=c.type;return e==CKEDITOR.NODE_ELEMENT?this.onElement(a,c):e==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a,c.value)):e==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,c.value)):null},onAttribute:function(a,c,e,d){return(e=this.attributesRules[e])?e.exec(a,d,c,this):d}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,c,e){this.rules.splice(this.findIndex(c),0,{value:a,priority:c,options:e})},addMany:function(a, +c,e){for(var d=[this.findIndex(c),0],f=0,k=a.length;f<k;f++)d.push({value:a[f],priority:c,options:e});this.rules.splice.apply(this.rules,d)},findIndex:function(a){for(var c=this.rules,e=c.length-1;e>=0&&a<c[e].priority;)e--;return e+1},exec:function(a,c){var e=c instanceof CKEDITOR.htmlParser.node||c instanceof CKEDITOR.htmlParser.fragment,d=Array.prototype.slice.call(arguments,1),f=this.rules,k=f.length,j,g,m,y;for(y=0;y<k;y++){if(e){j=c.type;g=c.name}m=f[y];if(!(a.nonEditable&&!m.options.applyToAll|| +a.nestedEditable&&m.options.excludeNestedEditable)){m=m.value.apply(null,d);if(m===false||e&&m&&(m.name!=g||m.type!=j))return m;m!=null&&(d[0]=c=m)}}return c},execOnName:function(a,c){for(var e=0,d=this.rules,f=d.length,k;c&&e<f;e++){k=d[e];!(a.nonEditable&&!k.options.applyToAll||a.nestedEditable&&k.options.excludeNestedEditable)&&(c=c.replace(k.value[0],k.value[1]))}return c}}})(); +(function(){function a(a,f){function p(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function r(a,e){return function(f){if(f.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var i=[],l=b(f),x,r;if(l)for(v(l,1)&&i.push(l);l;){if(d(l)&&(x=c(l))&&v(x))if((r=c(x))&&!d(r))i.push(x);else{p(g).insertAfter(x);x.remove()}l=l.previous}for(l=0;l<i.length;l++)i[l].remove();if(i=!a||(typeof e=="function"?e(f):e)!==false)if(!g&&!CKEDITOR.env.needsBrFiller&& +f.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)i=false;else if(!g&&!CKEDITOR.env.needsBrFiller&&(document.documentMode>7||f.name in CKEDITOR.dtd.tr||f.name in CKEDITOR.dtd.$listItem))i=false;else{i=b(f);i=!i||f.name=="form"&&i.name=="input"}i&&f.add(p(a))}}}function v(a,b){if((!g||CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&a.name=="br"&&!a.attributes["data-cke-eol"])return true;var c;if(a.type==CKEDITOR.NODE_TEXT&&(c=a.value.match(i))){if(c.index){(new CKEDITOR.htmlParser.text(a.value.substring(0, +c.index))).insertBefore(a);a.value=c[0]}if(!CKEDITOR.env.needsBrFiller&&g&&(!b||a.parent.name in z))return true;if(!g)if((c=a.previous)&&c.name=="br"||!c||d(c))return true}return false}var n={elements:{}},g=f=="html",z=CKEDITOR.tools.extend({},l),o;for(o in z)"#"in u[o]||delete z[o];for(o in z)n.elements[o]=r(g,a.config.fillEmptyBlocks);n.root=r(g,false);n.elements.br=function(a){return function(b){if(b.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var f=b.attributes;if("data-cke-bogus"in f||"data-cke-eol"in +f)delete f["data-cke-bogus"];else{for(f=b.next;f&&e(f);)f=f.next;var i=c(b);!f&&d(b.parent)?h(b.parent,p(a)):d(f)&&(i&&!d(i))&&p(a).insertBefore(f)}}}}(g);return n}function f(a,b){return a!=CKEDITOR.ENTER_BR&&b!==false?a==CKEDITOR.ENTER_DIV?"div":"p":false}function b(a){for(a=a.children[a.children.length-1];a&&e(a);)a=a.previous;return a}function c(a){for(a=a.previous;a&&e(a);)a=a.previous;return a}function e(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&& +a.attributes["data-cke-bookmark"]}function d(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in l||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function h(a,b){var c=a.children[a.children.length-1];a.children.push(b);b.parent=a;if(c){c.next=b;b.previous=c}}function k(a){a=a.attributes;a.contenteditable!="false"&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function j(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}} +function g(a){return a.replace(C,function(a,b,c){return"<"+b+c.replace(L,function(a,b){return F.test(b)&&c.indexOf("data-cke-saved-"+b)==-1?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+">"})}function m(a,b){return a.replace(b,function(a,b,c){a.indexOf("<textarea")===0&&(a=b+w(c).replace(/</g,"<").replace(/>/g,">")+"</textarea>");return"<cke:encoded>"+encodeURIComponent(a)+"</cke:encoded>"})}function y(a){return a.replace(v,function(a,b){return decodeURIComponent(b)})}function s(a){return a.replace(/<\!--(?!{cke_protected})[\s\S]+?--\>/g, +function(a){return"<\!--"+A+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\>"})}function w(a){return a.replace(/<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)})}function q(a,b){var c=b._.dataStore;return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function t(a,b){for(var c=[],d=b.config.protectedSource,e=b._.dataStore||(b._.dataStore= +{id:1}),f=/<\!--\{cke_temp(comment)?\}(\d*?)--\>/g,d=[/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(d),a=a.replace(/<\!--[\s\S]*?--\>/g,function(a){return"<\!--{cke_tempcomment}"+(c.push(a)-1)+"--\>"}),i=0;i<d.length;i++)a=a.replace(d[i],function(a){a=a.replace(f,function(a,b,d){return c[d]});return/cke_temp(comment)?/.test(a)?a:"<\!--{cke_temp}"+(c.push(a)-1)+"--\>"});a=a.replace(f,function(a,b,d){return"<\!--"+A+(b?"{C}":"")+encodeURIComponent(c[d]).replace(/--/g, +"%2D%2D")+"--\>"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=>]+))+\s*>/g,function(a){return a.replace(/<\!--\{cke_protected\}([^>]*)--\>/g,function(a,b){e[e.id]=decodeURIComponent(b);return"{cke_protected_"+e.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,c,d,e){return"<"+c+d+">"+q(w(e),b)+"</"+c+">"})}CKEDITOR.htmlDataProcessor=function(b){var c,d,e=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter; +this.htmlFilter=d=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(p);c.addRules(r,{applyToAll:true});c.addRules(a(b,"data"),{applyToAll:true});d.addRules(n);d.addRules(P,{applyToAll:true});d.addRules(a(b,"html"),{applyToAll:true});b.on("toHtml",function(a){var a=a.data,c=a.dataValue,d,c=t(c,b),c=m(c,I),c=g(c),c=m(c,K),c=c.replace(G,"$1cke:$2"),c=c.replace(B,"<cke:$1$2></cke:$1>"),c=c.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi, +"$1data-cke-"+CKEDITOR.rnd+"-$2");d=a.context||b.editable().getName();var e;if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&d=="pre"){d="div";c="<pre>"+c+"</pre>";e=1}d=b.document.createElement(d);d.setHtml("a"+c);c=d.getHtml().substr(1);c=c.replace(RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");e&&(c=c.replace(/^<pre>|<\/pre>$/gi,""));c=c.replace(z,"$1$2");c=y(c);c=w(c);d=a.fixForBody===false?false:f(a.enterMode,b.config.autoParagraph);c=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,d);if(d){e=c; +if(!e.children.length&&CKEDITOR.dtd[e.name][d]){d=new CKEDITOR.htmlParser.element(d);e.add(d)}}a.dataValue=c},null,null,5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,true,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(e.dataFilter,true)},null,null,10);b.on("toHtml",function(a){var a=a.data,b=a.dataValue,c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(true);a.dataValue= +s(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^<br *\/?>/i,""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,f(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(e.htmlFilter,true)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,false,true)},null,null,11);b.on("toDataFormat",function(a){var c= +a.data.dataValue,d=e.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(true);c=w(c);c=q(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,c,d){var e=this.editor,f,i,l;if(b&&typeof b=="object"){f=b.context;c=b.fixForBody;d=b.dontFilter;i=b.filter;l=b.enterMode}else f=b;!f&&f!==null&&(f=e.editable().getName());return e.fire("toHtml",{dataValue:a,context:f,fixForBody:c,dontFilter:d,filter:i||e.filter,enterMode:l||e.enterMode}).dataValue},toDataFormat:function(a, +b){var c,d,e;if(b){c=b.context;d=b.filter;e=b.enterMode}!c&&c!==null&&(c=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:d||this.editor.filter,context:c,enterMode:e||this.editor.enterMode}).dataValue}};var i=/(?: |\xa0)$/,A="{cke_protected}",u=CKEDITOR.dtd,o=["caption","colgroup","col","thead","tfoot","tbody"],l=CKEDITOR.tools.extend({},u.$blockLimit,u.$block),p={elements:{input:k,textarea:k}},r={attributeNames:[[/^on/,"data-cke-pa-on"],[/^data-cke-expando$/, +""]]},n={elements:{embed:function(a){var b=a.parent;if(b&&b.name=="object"){var c=b.attributes.width,b=b.attributes.height;if(c)a.attributes.width=c;if(b)a.attributes.height=b}},a:function(a){if(!a.children.length&&!a.attributes.name&&!a.attributes["data-cke-saved-name"])return false}}},P={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return false; +for(var c=["name","href","src"],d,e=0;e<c.length;e++){d="data-cke-saved-"+c[e];d in b&&delete b[c[e]]}}return a},table:function(a){a.children.slice(0).sort(function(a,b){var c,d;if(a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type){c=CKEDITOR.tools.indexOf(o,a.name);d=CKEDITOR.tools.indexOf(o,b.name)}if(!(c>-1&&d>-1&&c!=d)){c=a.parent?a.getIndex():-1;d=b.parent?b.getIndex():-1}return c>d?1:-1})},param:function(a){a.children=[];a.isEmpty=true;return a},span:function(a){a.attributes["class"]=="Apple-style-span"&& +delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var b=a.children[0];if(b&&b.value)b.value=CKEDITOR.tools.trim(b.value);if(!a.attributes.type)a.attributes.type="text/css"},title:function(a){var b=a.children[0];!b&&h(a,b=new CKEDITOR.htmlParser.text);b.value=a.attributes["data-cke-title"]||""},input:j,textarea:j},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g, +""))||false}}};if(CKEDITOR.env.ie)P.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})};var C=/<(a|area|img|input|source)\b([^>]*)>/gi,L=/([\w-]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,F=/^(href|src|name)$/i,K=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,I=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,v=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,G=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi, +z=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,B=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi})();"use strict"; +CKEDITOR.htmlParser.element=function(a,f){this.name=a;this.attributes=f||{};this.children=[];var b=a||"",c=b.match(/^cke:(.*)/);c&&(b=c[1]);b=!(!CKEDITOR.dtd.$nonBodyContent[b]&&!CKEDITOR.dtd.$block[b]&&!CKEDITOR.dtd.$listItem[b]&&!CKEDITOR.dtd.$tableContent[b]&&!(CKEDITOR.dtd.$nonEditable[b]||b=="br"));this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}}; +CKEDITOR.htmlParser.cssStyle=function(a){var f={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,e){c=="font-family"&&(e=e.replace(/["']/g,""));f[c.toLowerCase()]=e});return{rules:f,populate:function(a){var c=this.toString();if(c)a instanceof CKEDITOR.dom.element?a.setAttribute("style",c):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=c:a.style=c},toString:function(){var a=[],c; +for(c in f)f[c]&&a.push(c,":",f[c],";");return a.join("")}}}; +(function(){function a(a){return function(b){return b.type==CKEDITOR.NODE_ELEMENT&&(typeof a=="string"?b.name==a:b.name in a)}}var f=function(a,b){a=a[0];b=b[0];return a<b?-1:a>b?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var d=this,f,k,b=d.getFilterContext(b);if(b.off)return true; +if(!d.parent)a.onRoot(b,d);for(;;){f=d.name;if(!(k=a.onElementName(b,f))){this.remove();return false}d.name=k;if(!(d=a.onElement(b,d))){this.remove();return false}if(d!==this){this.replaceWith(d);return false}if(d.name==f)break;if(d.type!=CKEDITOR.NODE_ELEMENT){this.replaceWith(d);return false}if(!d.name){this.replaceWithChildren();return false}}f=d.attributes;var j,g;for(j in f){g=j;for(k=f[j];;)if(g=a.onAttributeName(b,j))if(g!=j){delete f[j];j=g}else break;else{delete f[j];break}g&&((k=a.onAttribute(b, +d,g,k))===false?delete f[g]:f[g]=k)}d.isEmpty||this.filterChildren(a,false,b);return true},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var d=this.name,h=[],k=this.attributes,j,g;a.openTag(d,k);for(j in k)h.push([j,k[j]]);a.sortAttributes&&h.sort(f);j=0;for(g=h.length;j<g;j++){k=h[j];a.attribute(k[0],k[1])}a.openTagClose(d,this.isEmpty);this.writeChildrenHtml(a);this.isEmpty||a.closeTag(d)},writeChildrenHtml:b.writeChildrenHtml,replaceWithChildren:function(){for(var a= +this.children,b=a.length;b;)a[--b].insertAfter(this);this.remove()},forEach:b.forEach,getFirst:function(b){if(!b)return this.children.length?this.children[0]:null;typeof b!="function"&&(b=a(b));for(var e=0,d=this.children.length;e<d;++e)if(b(this.children[e]))return this.children[e];return null},getHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml(a);return a.getHtml()},setHtml:function(a){for(var a=this.children=CKEDITOR.htmlParser.fragment.fromHtml(a).children,b=0, +d=a.length;b<d;++b)a[b].parent=this},getOuterHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeHtml(a);return a.getHtml()},split:function(a){for(var b=this.children.splice(a,this.children.length-a),d=this.clone(),f=0;f<b.length;++f)b[f].parent=d;d.children=b;if(b[0])b[0].previous=null;if(a>0)this.children[a-1].next=null;this.parent.add(d,this.getIndex()+1);return d},addClass:function(a){if(!this.hasClass(a)){var b=this.attributes["class"]||"";this.attributes["class"]=b+(b?" ":"")+ +a}},removeClass:function(a){var b=this.attributes["class"];if(b)(b=CKEDITOR.tools.trim(b.replace(RegExp("(?:\\s+|^)"+a+"(?:\\s+|$)")," ")))?this.attributes["class"]=b:delete this.attributes["class"]},hasClass:function(a){var b=this.attributes["class"];return!b?false:RegExp("(?:^|\\s)"+a+"(?=\\s|$)").test(b)},getFilterContext:function(a){var b=[];a||(a={off:false,nonEditable:false,nestedEditable:false});!a.off&&this.attributes["data-cke-processor"]=="off"&&b.push("off",true);!a.nonEditable&&this.attributes.contenteditable== +"false"?b.push("nonEditable",true):a.nonEditable&&(!a.nestedEditable&&this.attributes.contenteditable=="true")&&b.push("nestedEditable",true);if(b.length)for(var a=CKEDITOR.tools.copy(a),d=0;d<b.length;d=d+2)a[b[d]]=b[d+1];return a}},true)})(); +(function(){var a={},f=/{([^}]+)}/g,b=/([\\'])/g,c=/\n/g,e=/\r/g;CKEDITOR.template=function(d){if(a[d])this.output=a[d];else{var h=d.replace(b,"\\$1").replace(c,"\\n").replace(e,"\\r").replace(f,function(a,b){return"',data['"+b+"']==undefined?'{"+b+"}':data['"+b+"'],'"});this.output=a[d]=Function("data","buffer","return buffer?buffer.push('"+h+"'):['"+h+"'].join('');")}}})();delete CKEDITOR.loadFullCore;CKEDITOR.instances={};CKEDITOR.document=new CKEDITOR.dom.document(document); +CKEDITOR.add=function(a){CKEDITOR.instances[a.name]=a;a.on("focus",function(){if(CKEDITOR.currentInstance!=a){CKEDITOR.currentInstance=a;CKEDITOR.fire("currentInstance")}});a.on("blur",function(){if(CKEDITOR.currentInstance==a){CKEDITOR.currentInstance=null;CKEDITOR.fire("currentInstance")}});CKEDITOR.fire("instance",null,a)};CKEDITOR.remove=function(a){delete CKEDITOR.instances[a.name]}; +(function(){var a={};CKEDITOR.addTemplate=function(f,b){var c=a[f];if(c)return c;c={name:f,source:b};CKEDITOR.fire("template",c);return a[f]=new CKEDITOR.template(c.source)};CKEDITOR.getTemplate=function(f){return a[f]}})();(function(){var a=[];CKEDITOR.addCss=function(f){a.push(f)};CKEDITOR.getCss=function(){return a.join("\n")}})();CKEDITOR.on("instanceDestroyed",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire("reset")});CKEDITOR.TRISTATE_ON=1;CKEDITOR.TRISTATE_OFF=2; +CKEDITOR.TRISTATE_DISABLED=0; +(function(){CKEDITOR.inline=function(a,f){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var b=new CKEDITOR.editor(f,a,CKEDITOR.ELEMENT_MODE_INLINE),c=a.is("textarea")?a:null;if(c){b.setData(c.getValue(),null,true);a=CKEDITOR.dom.element.createFromHtml('<div contenteditable="'+!!b.readOnly+'" class="cke_textarea_inline">'+c.getValue()+"</div>",CKEDITOR.document); +a.insertAfter(c);c.hide();c.$.form&&b._attachToForm()}else b.setData(a.getHtml(),null,true);b.on("loaded",function(){b.fire("uiReady");b.editable(a);b.container=a;b.setData(b.getData(1));b.resetDirty();b.fire("contentDom");b.mode="wysiwyg";b.fire("mode");b.status="ready";b.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,b)},null,null,1E4);b.on("destroy",function(){if(c){b.container.clearCustomData();b.container.remove();c.show()}b.element.clearCustomData();delete b.element});return b}; +CKEDITOR.inlineAll=function(){var a,f,b;for(b in CKEDITOR.dtd.$editable)for(var c=CKEDITOR.document.getElementsByTag(b),e=0,d=c.count();e<d;e++){a=c.getItem(e);if(a.getAttribute("contenteditable")=="true"){f={element:a,config:{}};CKEDITOR.fire("inline",f)!==false&&CKEDITOR.inline(a,f.config)}}};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})})();CKEDITOR.replaceClass="ckeditor"; +(function(){function a(a,e,d,h){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var k=new CKEDITOR.editor(e,a,h);if(h==CKEDITOR.ELEMENT_MODE_REPLACE){a.setStyle("visibility","hidden");k._.required=a.hasAttribute("required");a.removeAttribute("required")}d&&k.setData(d,null,true);k.on("loaded",function(){b(k);h==CKEDITOR.ELEMENT_MODE_REPLACE&&(k.config.autoUpdateElement&& +a.$.form)&&k._attachToForm();k.setMode(k.config.startupMode,function(){k.resetDirty();k.status="ready";k.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,k)})});k.on("destroy",f);return k}function f(){var a=this.container,b=this.element;if(a){a.clearCustomData();a.remove()}if(b){b.clearCustomData();if(this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE){b.show();this._.required&&b.setAttribute("required","required")}delete this.element}}function b(a){var b=a.name,d=a.element,f=a.elementMode, +k=a.fire("uiSpace",{space:"top",html:""}).html,j=a.fire("uiSpace",{space:"bottom",html:""}).html,g=new CKEDITOR.template('<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" lang="{langCode}" role="application"'+(a.title?' aria-labelledby="cke_{name}_arialbl"':"")+">"+(a.title?'<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>':"")+'<{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>'), +b=CKEDITOR.dom.element.createFromHtml(g.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:a.title,topHtml:k?'<span id="'+a.ui.spaceId("top")+'" class="cke_top cke_reset_all" role="presentation" style="height:auto">'+k+"</span>":"",contentId:a.ui.spaceId("contents"),bottomHtml:j?'<span id="'+a.ui.spaceId("bottom")+'" class="cke_bottom cke_reset_all" role="presentation">'+j+"</span>":"",outerEl:CKEDITOR.env.ie?"span":"div"}));if(f==CKEDITOR.ELEMENT_MODE_REPLACE){d.hide();b.insertAfter(d)}else d.append(b); +a.container=b;k&&a.ui.space("top").unselectable();j&&a.ui.space("bottom").unselectable();d=a.config.width;f=a.config.height;d&&b.setStyle("width",CKEDITOR.tools.cssLength(d));f&&a.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(f));b.disableContextMenu();CKEDITOR.env.webkit&&b.on("focus",function(){a.focus()});a.fireOnce("uiReady")}CKEDITOR.replace=function(b,e){return a(b,e,null,CKEDITOR.ELEMENT_MODE_REPLACE)};CKEDITOR.appendTo=function(b,e,d){return a(b,e,d,CKEDITOR.ELEMENT_MODE_APPENDTO)}; +CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName("textarea"),b=0;b<a.length;b++){var d=null,f=a[b];if(f.name||f.id){if(typeof arguments[0]=="string"){if(!RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)").test(f.className))continue}else if(typeof arguments[0]=="function"){d={};if(arguments[0](f,d)===false)continue}this.replace(f,d)}}};CKEDITOR.editor.prototype.addMode=function(a,b){(this._.modes||(this._.modes={}))[a]=b};CKEDITOR.editor.prototype.setMode=function(a,b){var d=this,f= +this._.modes;if(!(a==d.mode||!f||!f[a])){d.fire("beforeSetMode",a);if(d.mode){var k=d.checkDirty(),f=d._.previousModeData,j,g=0;d.fire("beforeModeUnload");d.editable(0);d._.previousMode=d.mode;d._.previousModeData=j=d.getData(1);if(d.mode=="source"&&f==j){d.fire("lockSnapshot",{forceUpdate:true});g=1}d.ui.space("contents").setHtml("");d.mode=""}else d._.previousModeData=d.getData(1);this._.modes[a](function(){d.mode=a;k!==void 0&&!k&&d.resetDirty();g?d.fire("unlockSnapshot"):a=="wysiwyg"&&d.fire("saveSnapshot"); +setTimeout(function(){d.fire("mode");b&&b.call(d)},0)})}};CKEDITOR.editor.prototype.resize=function(a,b,d,f){var k=this.container,j=this.ui.space("contents"),g=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement,f=f?this.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}):k;f.setSize("width",a,true);g&&(g.style.width="1%");j.setStyle("height",Math.max(b-(d?0:(f.$.offsetHeight||0)-(j.$.clientHeight||0)),0)+"px");g&&(g.style.width= +"100%");this.fire("resize")};CKEDITOR.editor.prototype.getResizable=function(a){return a?this.ui.space("contents"):this.container};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})})();CKEDITOR.config.startupMode="wysiwyg"; +(function(){function a(a){var b=a.editor,d=a.data.path,e=d.blockLimit,l=a.data.selection,p=l.getRanges()[0],r;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(l=f(l,d)){l.appendBogus();r=CKEDITOR.env.ie}if(h(b,d.block,e)&&p.collapsed&&!p.getCommonAncestor().isReadOnly()){d=p.clone();d.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);e=new CKEDITOR.dom.walker(d);e.guard=function(a){return!c(a)||a.type==CKEDITOR.NODE_COMMENT||a.isReadOnly()};if(!e.checkForward()||d.checkStartOfBlock()&& +d.checkEndOfBlock()){b=p.fixBlock(true,b.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p");if(!CKEDITOR.env.needsBrFiller)(b=b.getFirst(c))&&(b.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(b.getText()).match(/^(?: |\xa0)$/))&&b.remove();r=1;a.cancel()}}r&&p.select()}function f(a,b){if(a.isFake)return 0;var d=b.block||b.blockLimit,e=d&&d.getLast(c);if(d&&d.isBlockBoundary()&&(!e||!(e.type==CKEDITOR.NODE_ELEMENT&&e.isBlockBoundary()))&&!d.is("pre")&&!d.getBogus())return d}function b(a){var b=a.data.getTarget(); +if(b.is("input")){b=b.getAttribute("type");(b=="submit"||b=="reset")&&a.data.preventDefault()}}function c(a){return s(a)&&w(a)}function e(a,b){return function(c){var d=CKEDITOR.dom.element.get(c.data.$.toElement||c.data.$.fromElement||c.data.$.relatedTarget);(!d||!b.equals(d)&&!b.contains(d))&&a.call(this,c)}}function d(a){function b(a){return function(b,e){e&&(b.type==CKEDITOR.NODE_ELEMENT&&b.is(f))&&(d=b);if(!e&&c(b)&&(!a||!m(b)))return false}}var d,e=a.getRanges()[0],a=a.root,f={table:1,ul:1,ol:1, +dl:1};if(e.startPath().contains(f)){var p=e.clone();p.collapse(1);p.setStartAt(a,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(p);a.guard=b();a.checkBackward();if(d){p=e.clone();p.collapse();p.setEndAt(d,CKEDITOR.POSITION_AFTER_END);a=new CKEDITOR.dom.walker(p);a.guard=b(true);d=false;a.checkForward();return d}}return null}function h(a,b,c){return a.config.autoParagraph!==false&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&a.editable().equals(c)&&!b||b&&b.getAttribute("contenteditable")=="true"} +function k(a){a.editor.focus();a.editor.fire("saveSnapshot")}function j(a){var b=a.editor;b.getSelection().scrollIntoView();setTimeout(function(){b.fire("saveSnapshot")},0)}function g(a,b,c){for(var d=a.getCommonAncestor(b),b=a=c?b:a;(a=a.getParent())&&!d.equals(a)&&a.getChildCount()==1;)b=a;b.remove()}CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,b){this.base(b.$||b);this.editor=a;this.status="unloaded";this.hasFocus=false;this.setup()},proto:{focus:function(){var a; +if(CKEDITOR.env.webkit&&!this.hasFocus){a=this.editor._.previousActive||this.getDocument().getActive();if(this.contains(a)){a.focus();return}}try{this.$[CKEDITOR.env.ie&&this.getDocument().equals(CKEDITOR.document)?"setActive":"focus"]()}catch(b){if(!CKEDITOR.env.ie)throw b;}if(CKEDITOR.env.safari&&!this.isInline()){a=CKEDITOR.document.getActive();a.equals(this.getWindow().getFrame())||this.getWindow().focus()}},on:function(a,b){var c=Array.prototype.slice.call(arguments,0);if(CKEDITOR.env.ie&&/^focus|blur$/.exec(a)){a= +a=="focus"?"focusin":"focusout";b=e(b,this);c[0]=a;c[1]=b}return CKEDITOR.dom.element.prototype.on.apply(this,c)},attachListener:function(a){!this._.listeners&&(this._.listeners=[]);var b=Array.prototype.slice.call(arguments,1),b=a.on.apply(a,b);this._.listeners.push(b);return b},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(b){}},restoreAttrs:function(){var a=this._.attrChanges,b,c;for(c in a)if(a.hasOwnProperty(c)){b=a[c];b!==null?this.setAttribute(c, +b):this.removeAttribute(c)}},attachClass:function(a){var b=this.getCustomData("classes");if(!this.hasClass(a)){!b&&(b=[]);b.push(a);this.setCustomData("classes",b);this.addClass(a)}},changeAttr:function(a,b){var c=this.getAttribute(a);if(b!==c){!this._.attrChanges&&(this._.attrChanges={});a in this._.attrChanges||(this._.attrChanges[a]=c);this.setAttribute(a,b)}},insertHtml:function(a,b){k(this);q(this,b||"html",a)},insertText:function(a){k(this);var b=this.editor,c=b.getSelection().getStartElement().hasAscendant("pre", +true)?CKEDITOR.ENTER_BR:b.activeEnterMode,b=c==CKEDITOR.ENTER_BR,d=CKEDITOR.tools,a=d.htmlEncode(a.replace(/\r\n/g,"\n")),a=a.replace(/\t/g,"    "),c=c==CKEDITOR.ENTER_P?"p":"div";if(!b){var e=/\n{2}/g;if(e.test(a))var f="<"+c+">",r="</"+c+">",a=f+a.replace(e,function(){return r+f})+r}a=a.replace(/\n/g,"<br>");b||(a=a.replace(RegExp("<br>(?=</"+c+">)"),function(a){return d.repeat(a,2)}));a=a.replace(/^ | $/g," ");a=a.replace(/(>|\s) /g,function(a,b){return b+" "}).replace(/ (?=<)/g, +" ");q(this,"text",a)},insertElement:function(a,b){b?this.insertElementIntoRange(a,b):this.insertElementIntoSelection(a)},insertElementIntoRange:function(a,b){var c=this.editor,d=c.config.enterMode,e=a.getName(),f=CKEDITOR.dtd.$block[e];if(b.checkReadOnly())return false;b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})&&t(b);var r,n;if(f)for(;(r=b.getCommonAncestor(0,1))&&(n=CKEDITOR.dtd[r.getName()])&&(!n||!n[e]);)if(r.getName()in +CKEDITOR.dtd.span)b.splitElement(r);else if(b.checkStartOfBlock()&&b.checkEndOfBlock()){b.setStartBefore(r);b.collapse(true);r.remove()}else b.splitBlock(d==CKEDITOR.ENTER_DIV?"div":"p",c.editable());b.insertNode(a);return true},insertElementIntoSelection:function(a){k(this);var b=this.editor,d=b.activeEnterMode,b=b.getSelection(),e=b.getRanges()[0],f=a.getName(),f=CKEDITOR.dtd.$block[f];if(this.insertElementIntoRange(a,e)){e.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);if(f)if((f=a.getNext(function(a){return c(a)&& +!m(a)}))&&f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block))f.getDtd()["#"]?e.moveToElementEditStart(f):e.moveToElementEditEnd(a);else if(!f&&d!=CKEDITOR.ENTER_BR){f=e.fixBlock(true,d==CKEDITOR.ENTER_DIV?"div":"p");e.moveToElementEditStart(f)}}b.selectRanges([e]);j(this)},setData:function(a,b){b||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);this.fixInitialSelection();if(this.status=="unloaded")this.status="ready";this.editor.fire("dataReady")},getData:function(a){var b=this.getHtml(); +a||(b=this.editor.dataProcessor.toDataFormat(b));return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable");this.status="detached";var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},fixInitialSelection:function(){function a(){var b=c.getDocument().$,d=b.getSelection(),e;if(d.anchorNode&&d.anchorNode==c.$)e=true;else if(CKEDITOR.env.webkit){var f= +c.getDocument().getActive();f&&(f.equals(c)&&!d.anchorNode)&&(e=true)}if(e){e=new CKEDITOR.dom.range(c);e.moveToElementEditStart(c);b=b.createRange();b.setStart(e.startContainer.$,e.startOffset);b.collapse(true);d.removeAllRanges();d.addRange(b)}}function b(){var a=c.getDocument().$,d=a.selection,e=c.getDocument().getActive();if(d.type=="None"&&e.equals(c)){d=new CKEDITOR.dom.range(c);a=a.body.createTextRange();d.moveToElementEditStart(c);d=d.startContainer;d.type!=CKEDITOR.NODE_ELEMENT&&(d=d.getParent()); +a.moveToElementText(d.$);a.collapse(true);a.select()}}var c=this;if(CKEDITOR.env.ie&&(CKEDITOR.env.version<9||CKEDITOR.env.quirks)){if(this.hasFocus){this.focus();b()}}else if(this.hasFocus){this.focus();a()}else this.once("focus",function(){a()},null,null,-999)},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||a.config.ignoreEmptyParagraph!==false&&(b=b.replace(y,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a, +"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,"beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&b.type=="Control"||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode)},this);this.attachListener(a,"insertElement",function(a){this.insertElement(a.data)}, +this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");this.attachClass(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"cke_editable_inline":a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE||a.elementMode==CKEDITOR.ELEMENT_MODE_APPENDTO?"cke_editable_themed":"");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur", +function(){this.hasFocus=false},null,null,-1);this.on("focus",function(){this.hasFocus=true},null,null,-1);a.focusManager.add(this);if(this.equals(CKEDITOR.document.getActive())){this.hasFocus=true;a.once("contentDom",function(){a.focusManager.focus(this)},this)}this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var e=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker);var f=a.config.contentsLangDirection; +this.getDirection(1)!=f&&this.changeAttr("dir",f);var h=CKEDITOR.getCss();if(h){f=e.getHead();if(!f.getCustomData("stylesheet")){h=e.appendStyleText(h);h=new CKEDITOR.dom.element(h.ownerNode||h.owningElement);f.setCustomData("stylesheet",h);h.data("cke-temp",1)}}f=e.getCustomData("stylesheet_ref")||0;e.setCustomData("stylesheet_ref",f+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){var a=a.data,b=(new CKEDITOR.dom.elementPath(a.getTarget(), +this)).contains("a");b&&(a.$.button!=2&&b.isReadOnly())&&a.preventDefault()});var l={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return true;var c=b.data.domEvent.getKey(),e;if(c in l){var b=a.getSelection(),f,h=b.getRanges()[0],g=h.startPath(),o,m,j,c=c==8;if(CKEDITOR.env.ie&&CKEDITOR.env.version<11&&(f=b.getSelectedElement())||(f=d(b))){a.fire("saveSnapshot");h.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START);f.remove();h.select();a.fire("saveSnapshot");e=1}else if(h.collapsed)if((o= +g.block)&&(j=o[c?"getPrevious":"getNext"](s))&&j.type==CKEDITOR.NODE_ELEMENT&&j.is("table")&&h[c?"checkStartOfBlock":"checkEndOfBlock"]()){a.fire("saveSnapshot");h[c?"checkEndOfBlock":"checkStartOfBlock"]()&&o.remove();h["moveToElementEdit"+(c?"End":"Start")](j);h.select();a.fire("saveSnapshot");e=1}else if(g.blockLimit&&g.blockLimit.is("td")&&(m=g.blockLimit.getAscendant("table"))&&h.checkBoundaryOfElement(m,c?CKEDITOR.START:CKEDITOR.END)&&(j=m[c?"getPrevious":"getNext"](s))){a.fire("saveSnapshot"); +h["moveToElementEdit"+(c?"End":"Start")](j);h.checkStartOfBlock()&&h.checkEndOfBlock()?j.remove():h.select();a.fire("saveSnapshot");e=1}else if((m=g.contains(["td","th","caption"]))&&h.checkBoundaryOfElement(m,c?CKEDITOR.START:CKEDITOR.END))e=1}return!e});a.blockless&&(CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)&&this.attachListener(this,"keyup",function(b){if(b.data.getKeystroke()in l&&!this.getFirst(c)){this.appendBogus();b=a.createRange();b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START);b.select()}}); +this.attachListener(this,"dblclick",function(b){if(a.readOnly)return false;b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",b);CKEDITOR.env.ie||this.attachListener(this,"mousedown",function(b){var c=b.data.getTarget();if(c.is("img","hr","input","textarea","select")&&!c.isReadOnly()){a.getSelection().selectElement(c);c.is("input","textarea","select")&&b.data.preventDefault()}});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(b.data.$.button== +2){b=b.data.getTarget();if(!b.getOuterHtml().replace(y,"")){var c=a.createRange();c.moveToElementEditStart(b);c.select(true)}}});if(CKEDITOR.env.webkit){this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()});this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()})}CKEDITOR.env.webkit&&this.attachListener(a,"key",function(b){b=b.data.domEvent.getKey();if(b in l){var c=b==8,d=a.getSelection().getRanges()[0], +b=d.startPath();if(d.collapsed){var e;a:{var f=b.block;if(f)if(d[c?"checkStartOfBlock":"checkEndOfBlock"]())if(!d.moveToClosestEditablePosition(f,!c)||!d.collapsed)e=false;else{if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var h=d.startContainer.getChild(d.startOffset-(c?1:0));if(h&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("hr")){a.fire("saveSnapshot");h.remove();e=true;break a}}if((d=d.startPath().block)&&(!d||!d.contains(f))){a.fire("saveSnapshot");var j;(j=(c?d:f).getBogus())&&j.remove();e=a.getSelection(); +j=e.createBookmarks();(c?f:d).moveChildren(c?d:f,false);b.lastElement.mergeSiblings();g(f,d,!c);e.selectBookmarks(j);e=true}}else e=false;else e=false}if(!e)return}else{c=d;e=b.block;j=c.endPath().block;if(!e||!j||e.equals(j))b=false;else{a.fire("saveSnapshot");(f=e.getBogus())&&f.remove();c.deleteContents();if(j.getParent()){j.moveChildren(e,false);b.lastElement.mergeSiblings();g(e,j,true)}c=a.getSelection().getRanges()[0];c.collapse(1);c.select();b=true}if(!b)return}a.getSelection().scrollIntoView(); +a.fire("saveSnapshot");return false}},this,null,100)}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());if(!this.is("textarea")){a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");if(--c)a.setCustomData("stylesheet_ref",c);else{a.removeCustomData("stylesheet_ref");b.removeCustomData("stylesheet").remove()}}}this.editor.fire("contentDomUnload"); +delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;if(arguments.length)b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null);return b};var m=CKEDITOR.dom.walker.bogus(),y=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi,s=CKEDITOR.dom.walker.whitespaces(true),w=CKEDITOR.dom.walker.bookmark(false,true);CKEDITOR.on("instanceLoaded", +function(b){var c=b.editor;c.on("insertElement",function(a){a=a.data;if(a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))){a.getAttribute("contentEditable")!="false"&&a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1");a.setAttribute("contentEditable",false)}});c.on("selectionChange",function(b){if(!c.readOnly){var d=c.getSelection();if(d&&!d.isLocked){d=c.checkDirty();c.fire("lockSnapshot");a(b);c.fire("unlockSnapshot");!d&&c.resetDirty()}}})});CKEDITOR.on("instanceCreated", +function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);c&&a.changeAttr("title",c);var d=b.fire("ariaEditorHelpLabel",{}).label;if(d)if(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents")){var e=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml('<span id="'+e+'" class="cke_voice_label">'+d+"</span>");c.append(d);a.changeAttr("aria-describedby",e)}}})}); +CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");var q=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var e,f,l,p,h=[],g=d.range.startContainer;e=d.range.startPath();for(var g=r[g.getName()],n=0,j=c.getChildren(),m=j.count(),o=-1,C=-1,k=0,q=e.contains(r.$list);n<m;++n){e=j.getItem(n);if(a(e)){l=e.getName();if(q&&l in CKEDITOR.dtd.$list)h=h.concat(b(e,d));else{p=!!g[l];if(l=="br"&&e.data("cke-eol")&& +(!n||n==m-1)){k=(f=n?h[n-1].node:j.getItem(n+1))&&(!a(f)||!f.is("br"));f=f&&a(f)&&r.$block[f.getName()]}o==-1&&!p&&(o=n);p||(C=n);h.push({isElement:1,isLineBreak:k,isBlock:e.isBlockBoundary(),hasBlockSibling:f,node:e,name:l,allowed:p});f=k=0}}else h.push({isElement:0,node:e,allowed:1})}if(o>-1)h[o].firstNotAllowed=1;if(C>-1)h[C].lastNotAllowed=1;return h}function d(b,c){var e=[],f=b.getChildren(),l=f.count(),p,h=0,g=r[c],n=!b.is(r.$inline)||b.is("br");for(n&&e.push(" ");h<l;h++){p=f.getItem(h);a(p)&& +!p.is(g)?e=e.concat(d(p,c)):e.push(p)}n&&e.push(" ");return e}function e(b){return b&&a(b)&&(b.is(r.$removeEmpty)||b.is("a")&&!b.isBlockBoundary())}function f(b,c,d,e){var p=b.clone(),h,r;p.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);if((h=(new CKEDITOR.dom.walker(p)).next())&&a(h)&&g[h.getName()]&&(r=h.getPrevious())&&a(r)&&!r.getParent().equals(b.startContainer)&&d.contains(r)&&e.contains(h)&&h.isIdentical(r)){h.moveChildren(r);h.remove();f(b,c,d,e)}}function p(b,c){function d(b,c){if(c.isBlock&&c.isElement&& +!c.node.is("br")&&a(b)&&b.is("br")){b.remove();return 1}}var e=c.endContainer.getChild(c.endOffset),f=c.endContainer.getChild(c.endOffset-1);e&&d(e,b[b.length-1]);if(f&&d(f,b[0])){c.setEnd(c.endContainer,c.endOffset-1);c.collapse()}}var r=CKEDITOR.dtd,g={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},m={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},C=CKEDITOR.tools.extend({},r.$inline);delete C.br;return function(g,n,k){var q=g.editor,v=q.getSelection().getRanges()[0], +G=false;if(n=="unfiltered_html"){n="html";G=true}if(!v.checkReadOnly()){var z=(new CKEDITOR.dom.elementPath(v.startContainer,v.root)).blockLimit||v.root,n={type:n,dontFilter:G,editable:g,editor:q,range:v,blockLimit:z,mergeCandidates:[],zombies:[]},q=n.range,G=n.mergeCandidates,B,x,E,s;if(n.type=="text"&&q.shrink(CKEDITOR.SHRINK_ELEMENT,true,false)){B=CKEDITOR.dom.element.createFromHtml("<span> </span>",q.document);q.insertNode(B);q.setStartAfter(B)}x=new CKEDITOR.dom.elementPath(q.startContainer); +n.endPath=E=new CKEDITOR.dom.elementPath(q.endContainer);if(!q.collapsed){var z=E.block||E.blockLimit,w=q.getCommonAncestor();z&&(!z.equals(w)&&!z.contains(w)&&q.checkEndOfBlock())&&n.zombies.push(z);q.deleteContents()}for(;(s=a(q.startContainer)&&q.startContainer.getChild(q.startOffset-1))&&a(s)&&s.isBlockBoundary()&&x.contains(s);)q.moveToPosition(s,CKEDITOR.POSITION_BEFORE_END);f(q,n.blockLimit,x,E);if(B){q.setEndBefore(B);q.collapse();B.remove()}B=q.startPath();if(z=B.contains(e,false,1)){q.splitElement(z); +n.inlineStylesRoot=z;n.inlineStylesPeak=B.lastElement}B=q.createBookmark();(z=B.startNode.getPrevious(c))&&a(z)&&e(z)&&G.push(z);(z=B.startNode.getNext(c))&&a(z)&&e(z)&&G.push(z);for(z=B.startNode;(z=z.getParent())&&e(z);)G.push(z);q.moveToBookmark(B);if(B=k){B=n.range;if(n.type=="text"&&n.inlineStylesRoot){s=n.inlineStylesPeak;q=s.getDocument().createText("{cke-peak}");for(G=n.inlineStylesRoot.getParent();!s.equals(G);){q=q.appendTo(s.clone());s=s.getParent()}k=q.getOuterHtml().split("{cke-peak}").join(k)}s= +n.blockLimit.getName();if(/^\s+|\s+$/.test(k)&&"span"in CKEDITOR.dtd[s])var y='<span data-cke-marker="1"> </span>',k=y+k+y;k=n.editor.dataProcessor.toHtml(k,{context:null,fixForBody:false,dontFilter:n.dontFilter,filter:n.editor.activeFilter,enterMode:n.editor.activeEnterMode});s=B.document.createElement("body");s.setHtml(k);if(y){s.getFirst().remove();s.getLast().remove()}if((y=B.startPath().block)&&!(y.getChildCount()==1&&y.getBogus()))a:{var t;if(s.getChildCount()==1&&a(t=s.getFirst())&&t.is(m)){y= +t.getElementsByTag("*");B=0;for(G=y.count();B<G;B++){q=y.getItem(B);if(!q.is(C))break a}t.moveChildren(t.getParent(1));t.remove()}}n.dataWrapper=s;B=k}if(B){t=n.range;var y=t.document,D,k=n.blockLimit;B=0;var J;s=[];var H,Q,G=q=0,M,S;x=t.startContainer;var z=n.endPath.elements[0],T;E=z.getPosition(x);w=!!z.getCommonAncestor(x)&&E!=CKEDITOR.POSITION_IDENTICAL&&!(E&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);x=b(n.dataWrapper,n);for(p(x,t);B<x.length;B++){E=x[B];if(D=E.isLineBreak){D= +t;M=k;var O=void 0,V=void 0;if(E.hasBlockSibling)D=1;else{O=D.startContainer.getAscendant(r.$block,1);if(!O||!O.is({div:1,p:1}))D=0;else{V=O.getPosition(M);if(V==CKEDITOR.POSITION_IDENTICAL||V==CKEDITOR.POSITION_CONTAINS)D=0;else{M=D.splitElement(O);D.moveToPosition(M,CKEDITOR.POSITION_AFTER_START);D=1}}}}if(D)G=B>0;else{D=t.startPath();if(!E.isBlock&&h(n.editor,D.block,D.blockLimit)&&(Q=n.editor.activeEnterMode!=CKEDITOR.ENTER_BR&&n.editor.config.autoParagraph!==false?n.editor.activeEnterMode==CKEDITOR.ENTER_DIV? +"div":"p":false)){Q=y.createElement(Q);Q.appendBogus();t.insertNode(Q);CKEDITOR.env.needsBrFiller&&(J=Q.getBogus())&&J.remove();t.moveToPosition(Q,CKEDITOR.POSITION_BEFORE_END)}if((D=t.startPath().block)&&!D.equals(H)){if(J=D.getBogus()){J.remove();s.push(D)}H=D}E.firstNotAllowed&&(q=1);if(q&&E.isElement){D=t.startContainer;for(M=null;D&&!r[D.getName()][E.name];){if(D.equals(k)){D=null;break}M=D;D=D.getParent()}if(D){if(M){S=t.splitElement(M);n.zombies.push(S);n.zombies.push(M)}}else{M=k.getName(); +T=!B;D=B==x.length-1;M=d(E.node,M);for(var O=[],V=M.length,W=0,Y=void 0,Z=0,U=-1;W<V;W++){Y=M[W];if(Y==" "){if(!Z&&(!T||W)){O.push(new CKEDITOR.dom.text(" "));U=O.length}Z=1}else{O.push(Y);Z=0}}D&&U==O.length&&O.pop();T=O}}if(T){for(;D=T.pop();)t.insertNode(D);T=0}else t.insertNode(E.node);if(E.lastNotAllowed&&B<x.length-1){(S=w?z:S)&&t.setEndAt(S,CKEDITOR.POSITION_AFTER_START);q=0}t.collapse()}}n.dontMoveCaret=G;n.bogusNeededBlocks=s}J=n.range;var N;S=n.bogusNeededBlocks;for(T=J.createBookmark();H= +n.zombies.pop();)if(H.getParent()){Q=J.clone();Q.moveToElementEditStart(H);Q.removeEmptyBlocksAtEnd()}if(S)for(;H=S.pop();)CKEDITOR.env.needsBrFiller?H.appendBogus():H.append(J.document.createText(" "));for(;H=n.mergeCandidates.pop();)H.mergeSiblings();J.moveToBookmark(T);if(!n.dontMoveCaret){for(H=a(J.startContainer)&&J.startContainer.getChild(J.startOffset-1);H&&a(H)&&!H.is(r.$empty);){if(H.isBlockBoundary())J.moveToPosition(H,CKEDITOR.POSITION_BEFORE_END);else{if(e(H)&&H.getHtml().match(/(\s| )$/g)){N= +null;break}N=J.clone();N.moveToPosition(H,CKEDITOR.POSITION_BEFORE_END)}H=H.getLast(c)}N&&J.moveToRange(N)}v.select();j(g)}}}(),t=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return false;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return b}function b(a,c,d){c=a.getDocument().createElement(c);a.append(c,d);return c}function c(a){var b=a.count(),d;for(b;b-- >0;){d=a.getItem(b); +if(!CKEDITOR.tools.trim(d.getHtml())){d.appendBogus();CKEDITOR.env.ie&&(CKEDITOR.env.version<9&&d.getChildCount())&&d.getFirst().remove()}}}return function(d){var e=d.startContainer,f=e.getAscendant("table",1),h=false;c(f.getElementsByTag("td"));c(f.getElementsByTag("th"));f=d.clone();f.setStart(e,0);f=a(f).lastBackward();if(!f){f=d.clone();f.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);f=a(f).lastForward();h=true}f||(f=e);if(f.is("table")){d.setStartAt(f,CKEDITOR.POSITION_BEFORE_START);d.collapse(true); +f.remove()}else{f.is({tbody:1,thead:1,tfoot:1})&&(f=b(f,"tr",h));f.is("tr")&&(f=b(f,f.getParent().is("thead")?"th":"td",h));(e=f.getBogus())&&e.remove();d.moveToPosition(f,h?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END)}}}()})(); +(function(){function a(){var a=this._.fakeSelection,b;if(a){b=this.getSelection(1);if(!b||!b.isHidden()){a.reset();a=0}}if(!a){a=b||this.getSelection(1);if(!a||a.getType()==CKEDITOR.SELECTION_NONE)return}this.fire("selectionCheck",a);b=this.elementPath();if(!b.compare(this._.selectionPreviousPath)){if(CKEDITOR.env.webkit)this._.previousActive=this.document.getActive();this._.selectionPreviousPath=b;this.fire("selectionChange",{selection:a,path:b})}}function f(){q=true;if(!w){b.call(this);w=CKEDITOR.tools.setTimeout(b, +200,this)}}function b(){w=null;if(q){CKEDITOR.tools.setTimeout(a,0,this);q=false}}function c(a){return t(a)||a.type==CKEDITOR.NODE_ELEMENT&&!a.is(CKEDITOR.dtd.$empty)?true:false}function e(a){function b(c,d){return!c||c.type==CKEDITOR.NODE_TEXT?false:a.clone()["moveToElementEdit"+(d?"End":"Start")](c)}if(!(a.root instanceof CKEDITOR.editable))return false;var d=a.startContainer,e=a.getPreviousNode(c,null,d),f=a.getNextNode(c,null,d);return b(e)||b(f,1)||!e&&!f&&!(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()&& +d.getBogus())?true:false}function d(a){return a.getCustomData("cke-fillingChar")}function h(a,b){var c=a&&a.removeCustomData("cke-fillingChar");if(c){if(b!==false){var d,e=a.getDocument().getSelection().getNative(),f=e&&e.type!="None"&&e.getRangeAt(0);if(c.getLength()>1&&f&&f.intersectsNode(c.$)){d=j(e);f=e.focusNode==c.$&&e.focusOffset>0;e.anchorNode==c.$&&e.anchorOffset>0&&d[0].offset--;f&&d[1].offset--}}c.setText(k(c.getText()));d&&g(a.getDocument().$,d)}}function k(a){return a.replace(/\u200B( )?/g, +function(a){return a[1]?" ":""})}function j(a){return[{node:a.anchorNode,offset:a.anchorOffset},{node:a.focusNode,offset:a.focusOffset}]}function g(a,b){var c=a.getSelection(),d=a.createRange();d.setStart(b[0].node,b[0].offset);d.collapse(true);c.removeAllRanges();c.addRange(d);c.extend(b[1].node,b[1].offset)}function m(a){var b=CKEDITOR.dom.element.createFromHtml('<div data-cke-hidden-sel="1" data-cke-temp="1" style="'+(CKEDITOR.env.ie?"display:none":"position:fixed;top:0;left:-1000px")+'"> </div>', +a.document);a.fire("lockSnapshot");a.editable().append(b);var c=a.getSelection(1),d=a.createRange(),e=c.root.on("selectionchange",function(a){a.cancel()},null,null,0);d.setStartAt(b,CKEDITOR.POSITION_AFTER_START);d.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);c.selectRanges([d]);e.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=b}function y(a){var b={37:1,39:1,8:1,46:1};return function(c){var d=c.data.getKeystroke();if(b[d]){var e=a.getSelection().getRanges(),f=e[0];if(e.length== +1&&f.collapsed)if((d=f[d<38?"getPreviousEditableNode":"getNextEditableNode"]())&&d.type==CKEDITOR.NODE_ELEMENT&&d.getAttribute("contenteditable")=="false"){a.getSelection().fake(d);c.data.preventDefault();c.cancel()}}}}function s(a){for(var b=0;b<a.length;b++){var c=a[b];c.getCommonAncestor().isReadOnly()&&a.splice(b,1);if(!c.collapsed){if(c.startContainer.isReadOnly())for(var d=c.startContainer,e;d;){if((e=d.type==CKEDITOR.NODE_ELEMENT)&&d.is("body")||!d.isReadOnly())break;e&&d.getAttribute("contentEditable")== +"false"&&c.setStartAfter(d);d=d.getParent()}d=c.startContainer;e=c.endContainer;var f=c.startOffset,h=c.endOffset,g=c.clone();d&&d.type==CKEDITOR.NODE_TEXT&&(f>=d.getLength()?g.setStartAfter(d):g.setStartBefore(d));e&&e.type==CKEDITOR.NODE_TEXT&&(h?g.setEndAfter(e):g.setEndBefore(e));d=new CKEDITOR.dom.walker(g);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.isReadOnly()){var e=c.clone();c.setEndBefore(d);c.collapsed&&a.splice(b--,1);if(!(d.getPosition(g.endContainer)&CKEDITOR.POSITION_CONTAINS)){e.setStartAfter(d); +e.collapsed||a.splice(b+1,0,e)}return true}return false};d.next()}}return a}var w,q,t=CKEDITOR.dom.walker.invisible(1),i=function(){function a(b){return function(a){var c=a.editor.createRange();c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]);return false}}function b(a){return function(b){var c=b.editor,d=c.createRange(),e;if(!(e=d.moveToClosestEditablePosition(b.selected,a)))e=d.moveToClosestEditablePosition(b.selected,!a);e&&c.getSelection().selectRanges([d]); +c.fire("saveSnapshot");b.selected.remove();if(!e){d.moveToElementEditablePosition(c.editable());c.getSelection().selectRanges([d])}c.fire("saveSnapshot");return false}}var c=a(),d=a(1);return{37:c,38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(b){function c(){var a=d.getSelection();a&&a.removeAllRanges()}var d=b.editor;d.on("contentDom",function(){function b(){z=new CKEDITOR.dom.selection(d.getSelection());z.lock()}function c(){l.removeListener("mouseup",c);i.removeListener("mouseup", +c);var a=CKEDITOR.document.$.selection,b=a.createRange();a.type!="None"&&b.parentElement().ownerDocument==e.$&&b.select()}var e=d.document,l=CKEDITOR.document,g=d.editable(),p=e.getBody(),i=e.getDocumentElement(),v=g.isInline(),j,z;CKEDITOR.env.gecko&&g.attachListener(g,"focus",function(a){a.removeListener();if(j!==0)if((a=d.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==g.$){a=d.createRange();a.moveToElementEditStart(g);a.select()}},null,null,-2);g.attachListener(g,CKEDITOR.env.webkit? +"DOMFocusIn":"focus",function(){j&&CKEDITOR.env.webkit&&(j=d._.previousActive&&d._.previousActive.equals(e.getActive()));d.unlockSelection(j);j=0},null,null,-1);g.attachListener(g,"mousedown",function(){j=0});if(CKEDITOR.env.ie||v){A?g.attachListener(g,"beforedeactivate",b,null,null,-1):g.attachListener(d,"selectionCheck",b,null,null,-1);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusOut":"blur",function(){d.lockSelection(z);j=1},null,null,-1);g.attachListener(g,"mousedown",function(){j=0})}if(CKEDITOR.env.ie&& +!v){var B;g.attachListener(g,"mousedown",function(a){if(a.data.$.button==2){a=d.document.getSelection();if(!a||a.getType()==CKEDITOR.SELECTION_NONE)B=d.window.getScrollPosition()}});g.attachListener(g,"mouseup",function(a){if(a.data.$.button==2&&B){d.document.$.documentElement.scrollLeft=B.x;d.document.$.documentElement.scrollTop=B.y}B=null});if(e.$.compatMode!="BackCompat"){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)i.on("mousedown",function(a){function b(a){a=a.data.$;if(d){var c=p.$.createTextRange(); +try{c.moveToPoint(a.clientX,a.clientY)}catch(e){}d.setEndPoint(f.compareEndPoints("StartToStart",c)<0?"EndToEnd":"StartToStart",c);d.select()}}function c(){i.removeListener("mousemove",b);l.removeListener("mouseup",c);i.removeListener("mouseup",c);d.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<i.$.clientHeight&&a.$.x<i.$.clientWidth){var d=p.$.createTextRange();try{d.moveToPoint(a.$.clientX,a.$.clientY)}catch(e){}var f=d.duplicate();i.on("mousemove",b);l.on("mouseup",c);i.on("mouseup",c)}}); +if(CKEDITOR.env.version>7&&CKEDITOR.env.version<11)i.on("mousedown",function(a){if(a.data.getTarget().is("html")){l.on("mouseup",c);i.on("mouseup",c)}})}}g.attachListener(g,"selectionchange",a,d);g.attachListener(g,"keyup",f,d);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){d.forceNextSelectionCheck();d.selectionChange(1)});if(v&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var x;g.attachListener(g,"mousedown",function(){x=1});g.attachListener(e.getDocumentElement(),"mouseup", +function(){x&&f.call(d);x=0})}else g.attachListener(CKEDITOR.env.ie?g:e.getDocumentElement(),"mouseup",f,d);CKEDITOR.env.webkit&&g.attachListener(e,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:h(g)}},null,null,-1);g.attachListener(g,"keydown",y(d),null,null,-1)});d.on("setData",function(){d.unlockSelection();CKEDITOR.env.webkit&&c()});d.on("contentDomUnload",function(){d.unlockSelection()});if(CKEDITOR.env.ie9Compat)d.on("beforeDestroy", +c,null,null,9);d.on("dataReady",function(){delete d._.fakeSelection;delete d._.hiddenSelectionContainer;d.selectionChange(1)});d.on("loadSnapshot",function(){var a=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),b=d.editable().getLast(a);if(b&&b.hasAttribute("data-cke-hidden-sel")){b.remove();if(CKEDITOR.env.gecko)(a=d.editable().getFirst(a))&&(a.is("br")&&a.getAttribute("_moz_editor_bogus_node"))&&a.remove()}},null,null,100);d.on("key",function(a){if(d.mode=="wysiwyg"){var b=d.getSelection(); +if(b.isFake){var c=i[a.data.keyCode];if(c)return c({editor:d,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});CKEDITOR.on("instanceReady",function(a){function b(){var a=e.editable();if(a)if(a=d(a)){var c=e.document.$.getSelection();if(c.type!="None"&&(c.anchorNode==a.$||c.focusNode==a.$))i=j(c);f=a.getText();a.setText(k(f))}}function c(){var a=e.editable();if(a)if(a=d(a)){a.setText(f);if(i){g(e.document.$,i);i=null}}}var e=a.editor,f,i;if(CKEDITOR.env.webkit){e.on("selectionChange", +function(){var a=e.editable(),b=d(a);b&&(b.getCustomData("ready")?h(a):b.setCustomData("ready",1))},null,null,-1);e.on("beforeSetMode",function(){h(e.editable())},null,null,-1);e.on("beforeUndoImage",b);e.on("afterUndoImage",c);e.on("beforeGetData",b,null,null,0);e.on("getData",c)}});CKEDITOR.editor.prototype.selectionChange=function(b){(b?a:f).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){if((this._.savedSelection||this._.fakeSelection)&&!a)return this._.savedSelection||this._.fakeSelection; +return(a=this.editable())&&this.mode=="wysiwyg"?new CKEDITOR.dom.selection(a):null};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);if(a.getType()!=CKEDITOR.SELECTION_NONE){!a.isLocked&&a.lock();this._.savedSelection=a;return true}return false};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;if(b){b.unlock(a);delete this._.savedSelection;return true}return false};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath}; +CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;var A=typeof window.getSelection!="function",u=1;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection)var b= +a,a=a.root;var c=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:u++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=c?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b){CKEDITOR.tools.extend(this._.cache,b._.cache);this.isFake=b.isFake;this.isLocked=b.isLocked;return this}var a=this.getNative(),d,e;if(a)if(a.getRangeAt)d=(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(f){}d=e&&CKEDITOR.dom.element.get(e.item&& +e.item(0)||e.parentElement())}if(!d||!(d.type==CKEDITOR.NODE_ELEMENT||d.type==CKEDITOR.NODE_TEXT)||!this.root.equals(d)&&!this.root.contains(d)){this._.cache.type=CKEDITOR.SELECTION_NONE;this._.cache.startElement=null;this._.cache.selectedElement=null;this._.cache.selectedText="";this._.cache.ranges=new CKEDITOR.dom.rangeList}return this};var o={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.dom.selection.prototype= +{getNative:function(){return this._.cache.nativeSel!==void 0?this._.cache.nativeSel:this._.cache.nativeSel=A?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:A?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;if(d=="Text")b=CKEDITOR.SELECTION_TEXT;if(d=="Control")b=CKEDITOR.SELECTION_ELEMENT;if(c.createRange().parentElement())b=CKEDITOR.SELECTION_TEXT}catch(e){}return a.type=b}:function(){var a=this._.cache; +if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(c.rangeCount==1){var c=c.getRangeAt(0),d=c.startContainer;if(d==c.endContainer&&d.nodeType==1&&c.endOffset-c.startOffset==1&&o[d.childNodes[c.startOffset].nodeName.toLowerCase()])b=CKEDITOR.SELECTION_ELEMENT}return a.type=b},getRanges:function(){var a=A?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c); +var d=b.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var e=d.children,f,g,h=b.duplicate(),v=0,l=e.length-1,i=-1,j,x;v<=l;){i=Math.floor((v+l)/2);f=e[i];h.moveToElementText(f);j=h.compareEndPoints("StartToStart",b);if(j>0)l=i-1;else if(j<0)v=i+1;else return{container:d,offset:a(f)}}if(i==-1||i==e.length-1&&j<0){h.moveToElementText(d);h.setEndPoint("StartToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;e=d.childNodes;if(!h){f=e[e.length-1];return f.nodeType!=CKEDITOR.NODE_TEXT? +{container:d,offset:e.length}:{container:f,offset:f.nodeValue.length}}for(d=e.length;h>0&&d>0;){g=e[--d];if(g.nodeType==CKEDITOR.NODE_TEXT){x=g;h=h-g.nodeValue.length}}return{container:x,offset:-h}}h.collapse(j>0?true:false);h.setEndPoint(j>0?"StartToStart":"EndToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;if(!h)return{container:d,offset:a(f)+(j>0?0:1)};for(;h>0;)try{g=f[j>0?"previousSibling":"nextSibling"];if(g.nodeType==CKEDITOR.NODE_TEXT){h=h-g.nodeValue.length;x=g}f=g}catch(m){return{container:d, +offset:a(f)}}return{container:x,offset:j>0?-h:x.nodeValue.length+h}};return function(){var a=this.getNative(),c=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT){a=new CKEDITOR.dom.range(this.root);d=b(c,true);a.setStart(new CKEDITOR.dom.node(d.container),d.offset);d=b(c);a.setEnd(new CKEDITOR.dom.node(d.container),d.offset);a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse();return[a]}if(d== +CKEDITOR.SELECTION_ELEMENT){for(var d=[],e=0;e<c.length;e++){for(var f=c.item(e),h=f.parentNode,g=0,a=new CKEDITOR.dom.range(this.root);g<h.childNodes.length&&h.childNodes[g]!=f;g++);a.setStart(new CKEDITOR.dom.node(h),g);a.setEnd(new CKEDITOR.dom.node(h),g+1);d.push(a)}return d}return[]}}():function(){var a=[],b,c=this.getNative();if(!c)return a;for(var d=0;d<c.rangeCount;d++){var e=c.getRangeAt(d);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(e.startContainer),e.startOffset); +b.setEnd(new CKEDITOR.dom.node(e.endContainer),e.endOffset);a.push(b)}return a};return function(b){var c=this._.cache,d=c.ranges;if(!d)c.ranges=d=new CKEDITOR.dom.rangeList(a.call(this));return!b?d:s(new CKEDITOR.dom.rangeList(d.slice()))}}(),getStartElement:function(){var a=this._.cache;if(a.startElement!==void 0)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var c=this.getRanges()[0];if(c){if(c.collapsed){b= +c.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent())}else{for(c.optimize();;){b=c.startContainer;if(c.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary())c.setStartAfter(b);else break}b=c.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent();b=b.getChild(c.startOffset);if(!b||b.type!=CKEDITOR.NODE_ELEMENT)b=c.startContainer;else for(c=b.getFirst();c&&c.type==CKEDITOR.NODE_ELEMENT;){b=c;c=c.getFirst()}}b=b.$}}return a.startElement=b?new CKEDITOR.dom.element(b): +null},getSelectedElement:function(){var a=this._.cache;if(a.selectedElement!==void 0)return a.selectedElement;var b=this,c=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},function(){for(var a=b.getRanges()[0].clone(),c,d,e=2;e&&(!(c=a.getEnclosedNode())||!(c.type==CKEDITOR.NODE_ELEMENT&&o[c.getName()]&&(d=c)));e--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d&&d.$});return a.selectedElement=c?new CKEDITOR.dom.element(c):null},getSelectedText:function(){var a=this._.cache; +if(a.selectedText!==void 0)return a.selectedText;var b=this.getNative(),b=A?b.type=="Control"?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked=1},unlock:function(a){if(this.isLocked){if(a)var b=this.getSelectedElement(),c=!b&&this.getRanges(),d=this.isFake;this.isLocked=0;this.reset();if(a)(a=b||c[0]&&c[0].getCommonAncestor())&&a.getAscendant("body", +1)&&(d?this.fake(b):b?this.selectElement(b):this.selectRanges(c))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection&&this.rev==a._.fakeSelection.rev){delete a._.fakeSelection;var b=a._.hiddenSelectionContainer;if(b){var c=a.checkDirty();a.fire("lockSnapshot");b.remove();a.fire("unlockSnapshot");!c&&a.resetDirty()}delete a._.hiddenSelectionContainer}this.rev=u++},selectElement:function(a){var b=new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a); +this.selectRanges([b])},selectRanges:function(a){var b=this.root.editor,b=b&&b._.hiddenSelectionContainer;this.reset();if(b)for(var b=this.root,c,d=0;d<a.length;++d){c=a[d];if(c.endContainer.equals(b))c.endOffset=Math.min(c.endOffset,b.getChildCount())}if(a.length)if(this.isLocked){var f=CKEDITOR.document.getActive();this.unlock();this.selectRanges(a);this.lock();f&&!f.equals(this.root)&&f.focus()}else{var g;a:{var i,j;if(a.length==1&&!(j=a[0]).collapsed&&(g=j.getEnclosedNode())&&g.type==CKEDITOR.NODE_ELEMENT){j= +j.clone();j.shrink(CKEDITOR.SHRINK_ELEMENT,true);if((i=j.getEnclosedNode())&&i.type==CKEDITOR.NODE_ELEMENT)g=i;if(g.getAttribute("contenteditable")=="false")break a}g=void 0}if(g)this.fake(g);else{if(A){j=CKEDITOR.dom.walker.whitespaces(true);i=/\ufeff|\u00a0/;b={table:1,tbody:1,tr:1};if(a.length>1){g=a[a.length-1];a[0].setEnd(g.endContainer,g.endOffset)}g=a[0];var a=g.collapsed,m,k,v;if((c=g.getEnclosedNode())&&c.type==CKEDITOR.NODE_ELEMENT&&c.getName()in o&&(!c.is("a")||!c.getText()))try{v=c.$.createControlRange(); +v.addElement(c.$);v.select();return}catch(q){}if(g.startContainer.type==CKEDITOR.NODE_ELEMENT&&g.startContainer.getName()in b||g.endContainer.type==CKEDITOR.NODE_ELEMENT&&g.endContainer.getName()in b){g.shrink(CKEDITOR.NODE_ELEMENT,true);a=g.collapsed}v=g.createBookmark();b=v.startNode;if(!a)f=v.endNode;v=g.document.$.body.createTextRange();v.moveToElementText(b.$);v.moveStart("character",1);if(f){i=g.document.$.body.createTextRange();i.moveToElementText(f.$);v.setEndPoint("EndToEnd",i);v.moveEnd("character", +-1)}else{m=b.getNext(j);k=b.hasAscendant("pre");m=!(m&&m.getText&&m.getText().match(i))&&(k||!b.hasPrevious()||b.getPrevious().is&&b.getPrevious().is("br"));k=g.document.createElement("span");k.setHtml("");k.insertBefore(b);m&&g.document.createText("").insertBefore(b)}g.setStartBefore(b);b.remove();if(a){if(m){v.moveStart("character",-1);v.select();g.document.$.selection.clear()}else v.select();g.moveToPosition(k,CKEDITOR.POSITION_BEFORE_START);k.remove()}else{g.setEndBefore(f);f.remove(); +v.select()}}else{f=this.getNative();if(!f)return;this.removeAllRanges();for(v=0;v<a.length;v++){if(v<a.length-1){m=a[v];k=a[v+1];i=m.clone();i.setStart(m.endContainer,m.endOffset);i.setEnd(k.startContainer,k.startOffset);if(!i.collapsed){i.shrink(CKEDITOR.NODE_ELEMENT,true);g=i.getCommonAncestor();i=i.getEnclosedNode();if(g.isReadOnly()||i&&i.isReadOnly()){k.setStart(m.startContainer,m.startOffset);a.splice(v--,1);continue}}}g=a[v];k=this.document.$.createRange();if(g.collapsed&&CKEDITOR.env.webkit&& +e(g)){m=this.root;h(m,false);i=m.getDocument().createText("​");m.setCustomData("cke-fillingChar",i);g.insertNode(i);if((m=i.getNext())&&!i.getPrevious()&&m.type==CKEDITOR.NODE_ELEMENT&&m.getName()=="br"){h(this.root);g.moveToPosition(m,CKEDITOR.POSITION_BEFORE_START)}else g.moveToPosition(i,CKEDITOR.POSITION_AFTER_END)}k.setStart(g.startContainer.$,g.startOffset);try{k.setEnd(g.endContainer.$,g.endOffset)}catch(z){if(z.toString().indexOf("NS_ERROR_ILLEGAL_VALUE")>=0){g.collapse(1);k.setEnd(g.endContainer.$, +g.endOffset)}else throw z;}f.addRange(k)}}this.reset();this.root.fire("selectionchange")}}},fake:function(a){var b=this.root.editor;this.reset();m(b);var c=this._.cache,d=new CKEDITOR.dom.range(this.root);d.setStartBefore(a);d.setEndAfter(a);c.ranges=new CKEDITOR.dom.rangeList(d);c.selectedElement=c.startElement=a;c.type=CKEDITOR.SELECTION_ELEMENT;c.selectedText=c.nativeSel=null;this.isFake=1;this.rev=u++;b._.fakeSelection=this;this.root.fire("selectionchange")},isHidden:function(){var a=this.getCommonAncestor(); +a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(a){for(var b=[],c=0;c<a.length;c++){var d=new CKEDITOR.dom.range(this.root);d.moveToBookmark(a[c]);b.push(d)}a.isFake?this.fake(b[0].getEnclosedNode()):this.selectRanges(b);return this}, +getCommonAncestor:function(){var a=this.getRanges();return!a.length?null:a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer)},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative();try{a&&a[A?"empty":"removeAllRanges"]()}catch(b){}this.reset()}}}})();"use strict";CKEDITOR.STYLE_BLOCK=1;CKEDITOR.STYLE_INLINE=2;CKEDITOR.STYLE_OBJECT=3; +(function(){function a(a,b){for(var c,d;a=a.getParent();){if(a.equals(b))break;if(a.getAttribute("data-nostyle"))c=a;else if(!d){var e=a.getAttribute("contentEditable");e=="false"?c=a:e=="true"&&(d=1)}}return c}function f(b){var d=b.document;if(b.collapsed){d=i(this,d);b.insertNode(d);b.moveToPosition(d,CKEDITOR.POSITION_BEFORE_END)}else{var e=this.element,g=this._.definition,h,j=g.ignoreReadonly,m=j||g.includeReadonly;m==null&&(m=b.root.getCustomData("cke_includeReadonly"));var k=CKEDITOR.dtd[e]; +if(!k){h=true;k=CKEDITOR.dtd.span}b.enlarge(CKEDITOR.ENLARGE_INLINE,1);b.trim();var l=b.createBookmark(),q=l.startNode,o=l.endNode,n=q,p;if(!j){var s=b.getCommonAncestor(),j=a(q,s),s=a(o,s);j&&(n=j.getNextSourceNode(true));s&&(o=s)}for(n.getPosition(o)==CKEDITOR.POSITION_FOLLOWING&&(n=0);n;){j=false;if(n.equals(o)){n=null;j=true}else{var r=n.type==CKEDITOR.NODE_ELEMENT?n.getName():null,s=r&&n.getAttribute("contentEditable")=="false",t=r&&n.getAttribute("data-nostyle");if(r&&n.data("cke-bookmark")){n= +n.getNextSourceNode(true);continue}if(s&&m&&CKEDITOR.dtd.$block[r])for(var y=n,u=c(y),A=void 0,C=u.length,F=0,y=C&&new CKEDITOR.dom.range(y.getDocument());F<C;++F){var A=u[F],P=CKEDITOR.filter.instances[A.data("cke-filter")];if(P?P.check(this):1){y.selectNodeContents(A);f.call(this,y)}}u=r?!k[r]||t?0:s&&!m?0:(n.getPosition(o)|K)==K&&(!g.childRule||g.childRule(n)):1;if(u)if((u=n.getParent())&&((u.getDtd()||CKEDITOR.dtd.span)[e]||h)&&(!g.parentRule||g.parentRule(u))){if(!p&&(!r||!CKEDITOR.dtd.$removeEmpty[r]|| +(n.getPosition(o)|K)==K)){p=b.clone();p.setStartBefore(n)}r=n.type;if(r==CKEDITOR.NODE_TEXT||s||r==CKEDITOR.NODE_ELEMENT&&!n.getChildCount()){for(var r=n,U;(j=!r.getNext(L))&&(U=r.getParent(),k[U.getName()])&&(U.getPosition(q)|I)==I&&(!g.childRule||g.childRule(U));)r=U;p.setEndAfter(r)}}else j=true;else j=true;n=n.getNextSourceNode(t||s)}if(j&&p&&!p.collapsed){for(var j=i(this,d),s=j.hasAttributes(),t=p.getCommonAncestor(),r={},u={},A={},C={},N,R,X;j&&t;){if(t.getName()==e){for(N in g.attributes)if(!C[N]&& +(X=t.getAttribute(R)))j.getAttribute(N)==X?u[N]=1:C[N]=1;for(R in g.styles)if(!A[R]&&(X=t.getStyle(R)))j.getStyle(R)==X?r[R]=1:A[R]=1}t=t.getParent()}for(N in u)j.removeAttribute(N);for(R in r)j.removeStyle(R);s&&!j.hasAttributes()&&(j=null);if(j){p.extractContents().appendTo(j);p.insertNode(j);w.call(this,j);j.mergeSiblings();CKEDITOR.env.ie||j.$.normalize()}else{j=new CKEDITOR.dom.element("span");p.extractContents().appendTo(j);p.insertNode(j);w.call(this,j);j.remove(true)}p=null}}b.moveToBookmark(l); +b.shrink(CKEDITOR.SHRINK_TEXT);b.shrink(CKEDITOR.NODE_ELEMENT,true)}}function b(a){function b(){for(var a=new CKEDITOR.dom.elementPath(d.getParent()),c=new CKEDITOR.dom.elementPath(j.getParent()),e=null,f=null,g=0;g<a.elements.length;g++){var h=a.elements[g];if(h==a.block||h==a.blockLimit)break;m.checkElementRemovable(h,true)&&(e=h)}for(g=0;g<c.elements.length;g++){h=c.elements[g];if(h==c.block||h==c.blockLimit)break;m.checkElementRemovable(h,true)&&(f=h)}f&&j.breakParent(f);e&&d.breakParent(e)}a.enlarge(CKEDITOR.ENLARGE_INLINE, +1);var c=a.createBookmark(),d=c.startNode;if(a.collapsed){for(var e=new CKEDITOR.dom.elementPath(d.getParent(),a.root),f,g=0,h;g<e.elements.length&&(h=e.elements[g]);g++){if(h==e.block||h==e.blockLimit)break;if(this.checkElementRemovable(h)){var i;if(a.collapsed&&(a.checkBoundaryOfElement(h,CKEDITOR.END)||(i=a.checkBoundaryOfElement(h,CKEDITOR.START)))){f=h;f.match=i?"start":"end"}else{h.mergeSiblings();h.is(this.element)?s.call(this,h):q(h,o(this)[h.getName()])}}}if(f){h=d;for(g=0;;g++){i=e.elements[g]; +if(i.equals(f))break;else if(i.match)continue;else i=i.clone();i.append(h);h=i}h[f.match=="start"?"insertBefore":"insertAfter"](f)}}else{var j=c.endNode,m=this;b();for(e=d;!e.equals(j);){f=e.getNextSourceNode();if(e.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(e)){e.getName()==this.element?s.call(this,e):q(e,o(this)[e.getName()]);if(f.type==CKEDITOR.NODE_ELEMENT&&f.contains(d)){b();f=d.getNext()}}e=f}}a.moveToBookmark(c);a.shrink(CKEDITOR.NODE_ELEMENT,true)}function c(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")== +"true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function e(a){var b=a.getEnclosedNode()||a.getCommonAncestor(false,true);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&A(a,this)}function d(a){var b=a.getCommonAncestor(true,true);if(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1)){var b=this._.definition,c=b.attributes;if(c)for(var d in c)a.removeAttribute(d,c[d]);if(b.styles)for(var e in b.styles)b.styles.hasOwnProperty(e)&& +a.removeStyle(e)}}function h(a){var b=a.createBookmark(true),c=a.createIterator();c.enforceRealBlocks=true;if(this._.enterMode)c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e=a.document,f;d=c.getNextParagraph();)if(!d.isReadOnly()&&(c.activeFilter?c.activeFilter.check(this):1)){f=i(this,e,d);j(d,f)}a.moveToBookmark(b)}function k(a){var b=a.createBookmark(1),c=a.createIterator();c.enforceRealBlocks=true;c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e;d=c.getNextParagraph();)if(this.checkElementRemovable(d))if(d.is("pre")){(e= +this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))&&d.copyAttributes(e);j(d,e)}else s.call(this,d);a.moveToBookmark(b)}function j(a,b){var c=!b;if(c){b=a.getDocument().createElement("div");a.copyAttributes(b)}var d=b&&b.is("pre"),e=a.is("pre"),f=!d&&e;if(d&&!e){e=b;(f=a.getBogus())&&f.remove();f=a.getHtml();f=m(f,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");f=f.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");f=f.replace(/([ \t\n\r]+| )/g, +" ");f=f.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var h=a.getDocument().createElement("div");h.append(e);e.$.outerHTML="<pre>"+f+"</pre>";e.copyAttributes(h.getFirst());e=h.getFirst().remove()}else e.setHtml(f);b=e}else f?b=y(c?[a.getHtml()]:g(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,i;if((i=c.getPrevious(F))&&i.type==CKEDITOR.NODE_ELEMENT&&i.is("pre")){d=m(i.getHtml(),/\n$/,"")+"\n\n"+m(c.getHtml(),/^\n/,"");CKEDITOR.env.ie?c.$.outerHTML="<pre>"+d+"</pre>":c.setHtml(d);i.remove()}}else c&& +t(b)}function g(a){var b=[];m(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"</pre>"+c+"<pre>"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function m(a,b,c){var d="",e="",a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function y(a,b){var c;a.length>1&&(c=new CKEDITOR.dom.documentFragment(b.getDocument())); +for(var d=0;d<a.length;d++){var e=a[d],e=e.replace(/(\r\n|\r)/g,"\n"),e=m(e,/^[ \t]*\n/,""),e=m(e,/\n$/,""),e=m(e,/^[ \t]+|[ \t]+$/g,function(a,b){return a.length==1?" ":b?" "+CKEDITOR.tools.repeat(" ",a.length-1):CKEDITOR.tools.repeat(" ",a.length-1)+" "}),e=e.replace(/\n/g,"<br>"),e=e.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat(" ",a.length-1)+" "});if(c){var f=b.clone();f.setHtml(e);c.append(f)}else b.setHtml(e)}return c||b}function s(a,b){var c=this._.definition, +d=c.attributes,c=c.styles,e=o(this)[a.getName()],f=CKEDITOR.tools.isEmpty(d)&&CKEDITOR.tools.isEmpty(c),g;for(g in d)if(!((g=="class"||this._.definition.fullMatch)&&a.getAttribute(g)!=l(g,d[g]))&&!(b&&g.slice(0,5)=="data-")){f=a.hasAttribute(g);a.removeAttribute(g)}for(var h in c)if(!(this._.definition.fullMatch&&a.getStyle(h)!=l(h,c[h],true))){f=f||!!a.getStyle(h);a.removeStyle(h)}q(a,e,r[a.getName()]);f&&(this._.definition.alwaysRemoveElement?t(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode== +CKEDITOR.ENTER_BR&&!a.hasAttributes()?t(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function w(a){for(var b=o(this),c=a.getElementsByTag(this.element),d,e=c.count();--e>=0;){d=c.getItem(e);d.isReadOnly()||s.call(this,d,true)}for(var f in b)if(f!=this.element){c=a.getElementsByTag(f);for(e=c.count()-1;e>=0;e--){d=c.getItem(e);d.isReadOnly()||q(d,b[f])}}}function q(a,b,c){if(b=b&&b.attributes)for(var d=0;d<b.length;d++){var e=b[d][0],f;if(f=a.getAttribute(e)){var g=b[d][1];(g===null|| +g.test&&g.test(f)||typeof g=="string"&&f==g)&&a.removeAttribute(e)}}c||t(a)}function t(a,b){if(!a.hasAttributes()||b)if(CKEDITOR.dtd.$block[a.getName()]){var c=a.getPrevious(F),d=a.getNext(F);c&&(c.type==CKEDITOR.NODE_TEXT||!c.isBlockBoundary({br:1}))&&a.append("br",1);d&&(d.type==CKEDITOR.NODE_TEXT||!d.isBlockBoundary({br:1}))&&a.append("br");a.remove(true)}else{c=a.getFirst();d=a.getLast();a.remove(true);if(c){c.type==CKEDITOR.NODE_ELEMENT&&c.mergeSiblings();d&&(!c.equals(d)&&d.type==CKEDITOR.NODE_ELEMENT)&& +d.mergeSiblings()}}}function i(a,b,c){var d;d=a.element;d=="*"&&(d="span");d=new CKEDITOR.dom.element(d,b);c&&c.copyAttributes(d);d=A(d,a);b.getCustomData("doc_processing_style")&&d.hasAttribute("id")?d.removeAttribute("id"):b.setCustomData("doc_processing_style",1);return d}function A(a,b){var c=b._.definition,d=c.attributes,c=CKEDITOR.style.getStyleText(c);if(d)for(var e in d)a.setAttribute(e,d[e]);c&&a.setAttribute("style",c);return a}function u(a,b){for(var c in a)a[c]=a[c].replace(C,function(a, +c){return b[c]})}function o(a){if(a._.overrides)return a._.overrides;var b=a._.overrides={},c=a._.definition.overrides;if(c){CKEDITOR.tools.isArray(c)||(c=[c]);for(var d=0;d<c.length;d++){var e=c[d],f,g;if(typeof e=="string")f=e.toLowerCase();else{f=e.element?e.element.toLowerCase():a.element;g=e.attributes}e=b[f]||(b[f]={});if(g){var e=e.attributes=e.attributes||[],h;for(h in g)e.push([h.toLowerCase(),g[h]])}}}return b}function l(a,b,c){var d=new CKEDITOR.dom.element("span");d[c?"setStyle":"setAttribute"](a, +b);return d[c?"getStyle":"getAttribute"](a)}function p(a,b,c){for(var d=a.document,e=a.getRanges(),b=b?this.removeFromRange:this.applyToRange,f,g=e.createIterator();f=g.getNextRange();)b.call(this,f,c);a.selectRanges(e);d.removeCustomData("doc_processing_style")}var r={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},n= +{a:1,blockquote:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},P=/\s*(?:;\s*|$)/,C=/#\((.+?)\)/g,L=CKEDITOR.dom.walker.bookmark(0,1),F=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,b){if(typeof a.type=="string")return new CKEDITOR.style.customHandlers[a.type](a);var c=a.attributes;if(c&&c.style){a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(c.style));delete c.style}if(b){a=CKEDITOR.tools.clone(a);u(a.attributes, +b);u(a.styles,b)}c=this.element=a.element?typeof a.element=="string"?a.element.toLowerCase():a.element:"*";this.type=a.type||(r[c]?CKEDITOR.STYLE_BLOCK:n[c]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);if(typeof this.element=="object")this.type=CKEDITOR.STYLE_OBJECT;this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof CKEDITOR.dom.document)return p.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode; +p.call(this,a.getSelection(),0,a);this._.enterMode=b}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return p.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode;p.call(this,a.getSelection(),1,a);this._.enterMode=b}},applyToRange:function(a){this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?f:this.type==CKEDITOR.STYLE_BLOCK?h:this.type==CKEDITOR.STYLE_OBJECT?e:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange= +this.type==CKEDITOR.STYLE_INLINE?b:this.type==CKEDITOR.STYLE_BLOCK?k:this.type==CKEDITOR.STYLE_OBJECT?d:null;return this.removeFromRange(a)},applyToObject:function(a){A(a,this)},checkActive:function(a,b){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,true,b);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var c=a.elements,d=0,e;d<c.length;d++){e=c[d];if(!(this.type==CKEDITOR.STYLE_INLINE&&(e==a.block||e==a.blockLimit))){if(this.type== +CKEDITOR.STYLE_OBJECT){var f=e.getName();if(!(typeof this.element=="string"?f==this.element:f in this.element))continue}if(this.checkElementRemovable(e,true,b))return true}}}return false},checkApplicable:function(a,b,c){b&&b instanceof CKEDITOR.filter&&(c=b);if(c&&!c.check(this))return false;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return true},checkElementMatch:function(a,b){var c=this._.definition; +if(!a||!c.ignoreReadonly&&a.isReadOnly())return false;var d=a.getName();if(typeof this.element=="string"?d==this.element:d in this.element){if(!b&&!a.hasAttributes())return true;if(d=c._AC)c=d;else{var d={},e=0,f=c.attributes;if(f)for(var g in f){e++;d[g]=f[g]}if(g=CKEDITOR.style.getStyleText(c)){d.style||e++;d.style=g}d._length=e;c=c._AC=d}if(c._length){for(var h in c)if(h!="_length"){e=a.getAttribute(h)||"";if(h=="style")a:{d=c[h];typeof d=="string"&&(d=CKEDITOR.tools.parseCssText(d));typeof e== +"string"&&(e=CKEDITOR.tools.parseCssText(e,true));g=void 0;for(g in d)if(!(g in e&&(e[g]==d[g]||d[g]=="inherit"||e[g]=="inherit"))){d=false;break a}d=true}else d=c[h]==e;if(d){if(!b)return true}else if(b)return false}if(b)return true}else return true}return false},checkElementRemovable:function(a,b,c){if(this.checkElementMatch(a,b,c))return true;if(b=o(this)[a.getName()]){var d;if(!(b=b.attributes))return true;for(c=0;c<b.length;c++){d=b[c][0];if(d=a.getAttribute(d)){var e=b[c][1];if(e===null)return true; +if(typeof e=="string"){if(d==e)return true}else if(e.test(d))return true}}}return false},buildPreview:function(a){var b=this._.definition,c=[],d=b.element;d=="bdo"&&(d="span");var c=["<",d],e=b.attributes;if(e)for(var f in e)c.push(" ",f,'="',e[f],'"');(e=CKEDITOR.style.getStyleText(b))&&c.push(' style="',e,'"');c.push(">",a||b.name,"</",d,">");return c.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b;var b=a.styles,c= +a.attributes&&a.attributes.style||"",d="";c.length&&(c=c.replace(P,";"));for(var e in b){var f=b[e],g=(e+":"+f).replace(P,";");f=="inherit"?d=d+g:c=c+g}c.length&&(c=CKEDITOR.tools.normalizeCssText(c,true));return a._ST=c+d};CKEDITOR.style.customHandlers={};CKEDITOR.style.addCustomHandler=function(a){var b=function(a){this._={definition:a};this.setup&&this.setup(a)};b.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT},a,true); +return this.customHandlers[a.type]=b};var K=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,I=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED})();CKEDITOR.styleCommand=function(a,f){this.requiredContent=this.allowedContent=this.style=a;CKEDITOR.tools.extend(this,f,true)}; +CKEDITOR.styleCommand.prototype.exec=function(a){a.focus();this.state==CKEDITOR.TRISTATE_OFF?a.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&a.removeStyle(this.style)};CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet");CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet);CKEDITOR.loadStylesSet=function(a,f,b){CKEDITOR.stylesSet.addExternal(a,f,"");CKEDITOR.stylesSet.load(a,b)}; +CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(a,f){var b=this._.styleStateChangeCallbacks;if(!b){b=this._.styleStateChangeCallbacks=[];this.on("selectionChange",function(a){for(var e=0;e<b.length;e++){var d=b[e],f=d.style.checkActive(a.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;d.fn.call(this,f)}})}b.push({style:a,fn:f})},applyStyle:function(a){a.apply(this)},removeStyle:function(a){a.remove(this)},getStylesSet:function(a){if(this._.stylesDefinitions)a(this._.stylesDefinitions); +else{var f=this,b=f.config.stylesCombo_stylesSet||f.config.stylesSet;if(b===false)a(null);else if(b instanceof Array){f._.stylesDefinitions=b;a(b)}else{b||(b="default");var b=b.split(":"),c=b[0];CKEDITOR.stylesSet.addExternal(c,b[1]?b.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(c,function(b){f._.stylesDefinitions=b[c];a(f._.stylesDefinitions)})}}}}); +CKEDITOR.dom.comment=function(a,f){typeof a=="string"&&(a=(f?f.$:document).createComment(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"<\!--"+this.$.nodeValue+"--\>"}});"use strict"; +(function(){var a={},f={},b;for(b in CKEDITOR.dtd.$blockLimit)b in CKEDITOR.dtd.$list||(a[b]=1);for(b in CKEDITOR.dtd.$block)b in CKEDITOR.dtd.$blockLimit||b in CKEDITOR.dtd.$empty||(f[b]=1);CKEDITOR.dom.elementPath=function(b,e){var d=null,h=null,k=[],j=b,g,e=e||b.getDocument().getBody();do if(j.type==CKEDITOR.NODE_ELEMENT){k.push(j);if(!this.lastElement){this.lastElement=j;if(j.is(CKEDITOR.dtd.$object)||j.getAttribute("contenteditable")=="false")continue}if(j.equals(e))break;if(!h){g=j.getName(); +j.getAttribute("contenteditable")=="true"?h=j:!d&&f[g]&&(d=j);if(a[g]){var m;if(m=!d){if(g=g=="div"){a:{g=j.getChildren();m=0;for(var y=g.count();m<y;m++){var s=g.getItem(m);if(s.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[s.getName()]){g=true;break a}}g=false}g=!g}m=g}m?d=j:h=j}}}while(j=j.getParent());h||(h=e);this.block=d;this.blockLimit=h;this.root=e;this.elements=k}})(); +CKEDITOR.dom.elementPath.prototype={compare:function(a){var f=this.elements,a=a&&a.elements;if(!a||f.length!=a.length)return false;for(var b=0;b<f.length;b++)if(!f[b].equals(a[b]))return false;return true},contains:function(a,f,b){var c;typeof a=="string"&&(c=function(b){return b.getName()==a});a instanceof CKEDITOR.dom.element?c=function(b){return b.equals(a)}:CKEDITOR.tools.isArray(a)?c=function(b){return CKEDITOR.tools.indexOf(a,b.getName())>-1}:typeof a=="function"?c=a:typeof a=="object"&&(c= +function(b){return b.getName()in a});var e=this.elements,d=e.length;f&&d--;if(b){e=Array.prototype.slice.call(e,0);e.reverse()}for(f=0;f<d;f++)if(c(e[f]))return e[f];return null},isContextFor:function(a){var f;if(a in CKEDITOR.dtd.$block){f=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit;return!!f.getDtd()[a]}return true},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}}; +CKEDITOR.dom.text=function(a,f){typeof a=="string"&&(a=(f?f.$:document).createTextNode(a));this.$=a};CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node; +CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(a){this.$.nodeValue=a},split:function(a){var f=this.$.parentNode,b=f.childNodes.length,c=this.getLength(),e=this.getDocument(),d=new CKEDITOR.dom.text(this.$.splitText(a),e);if(f.childNodes.length==b)if(a>=c){d=e.createText("");d.insertAfter(this)}else{a=e.createText("");a.insertAfter(d);a.remove()}return d},substring:function(a, +f){return typeof f!="number"?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,f)}}); +(function(){function a(a,c,e){var d=a.serializable,f=c[e?"endContainer":"startContainer"],k=e?"endOffset":"startOffset",j=d?c.document.getById(a.startNode):a.startNode,a=d?c.document.getById(a.endNode):a.endNode;if(f.equals(j.getPrevious())){c.startOffset=c.startOffset-f.getLength()-a.getPrevious().getLength();f=a.getNext()}else if(f.equals(a.getPrevious())){c.startOffset=c.startOffset-f.getLength();f=a.getNext()}f.equals(j.getParent())&&c[k]++;f.equals(a.getParent())&&c[k]++;c[e?"endContainer":"startContainer"]= +f;return c}CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,f)};var f={createIterator:function(){var a=this,c=CKEDITOR.dom.walker.bookmark(),e=[],d;return{getNextRange:function(f){d=d===void 0?0:d+1;var k=a[d];if(k&&a.length>1){if(!d)for(var j=a.length-1;j>=0;j--)e.unshift(a[j].createBookmark(true));if(f)for(var g=0;a[d+g+1];){for(var m=k.document,f=0,j=m.getById(e[g].endNode),m=m.getById(e[g+ +1].startNode);;){j=j.getNextSourceNode(false);if(m.equals(j))f=1;else if(c(j)||j.type==CKEDITOR.NODE_ELEMENT&&j.isBlockBoundary())continue;break}if(!f)break;g++}for(k.moveToBookmark(e.shift());g--;){j=a[++d];j.moveToBookmark(e.shift());k.setEnd(j.endContainer,j.endOffset)}}return k}}},createBookmarks:function(b){for(var c=[],e,d=0;d<this.length;d++){c.push(e=this[d].createBookmark(b,true));for(var f=d+1;f<this.length;f++){this[f]=a(e,this[f]);this[f]=a(e,this[f],true)}}return c},createBookmarks2:function(a){for(var c= +[],e=0;e<this.length;e++)c.push(this[e].createBookmark2(a));return c},moveToBookmarks:function(a){for(var c=0;c<this.length;c++)this[c].moveToBookmark(a[c])}}})(); +(function(){function a(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function f(b){var c=CKEDITOR.skin["ua_"+b],d=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,b){return a>b?-1:1}),e=0,f;e<c.length;e++){f=c[e];if(d.ie&&(f.replace(/^ie/,"")==d.version||d.quirks&&f=="iequirks"))f="ie";if(d[f]){b=b+("_"+c[e]);break}}return CKEDITOR.getUrl(a()+b+".css")}function b(a,b){if(!d[a]){CKEDITOR.document.appendStyleSheet(f(a));d[a]=1}b&&b()} +function c(a){var b=a.getById(h);if(!b){b=a.getHead().append("style");b.setAttribute("id",h);b.setAttribute("type","text/css")}return b}function e(a,b,c){var d,e,f;if(CKEDITOR.env.webkit){b=b.split("}").slice(0,-1);for(e=0;e<b.length;e++)b[e]=b[e].split("{")}for(var h=0;h<a.length;h++)if(CKEDITOR.env.webkit)for(e=0;e<b.length;e++){f=b[e][1];for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);a[h].$.sheet.addRule(b[e][0],f)}else{f=b;for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);CKEDITOR.env.ie&& +CKEDITOR.env.version<11?a[h].$.styleSheet.cssText=a[h].$.styleSheet.cssText+f:a[h].$.innerHTML=a[h].$.innerHTML+f}}var d={};CKEDITOR.skin={path:a,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+"skin.js"),function(){b(c,d)}):b(c,d)},getPath:function(a){return CKEDITOR.getUrl(f(a))},icons:{},addIcon:function(a,b,c,d){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0,bgsize:d||"16px"})},getIconStyle:function(a, +b,c,d,e){var f;if(a){a=a.toLowerCase();b&&(f=this.icons[a+"-rtl"]);f||(f=this.icons[a])}a=c||f&&f.path||"";d=d||f&&f.offset;e=e||f&&f.bgsize||"16px";return a&&"background-image:url("+CKEDITOR.getUrl(a)+");background-position:0 "+d+"px;background-size:"+e+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=c(CKEDITOR.document);return(this.setUiColor=function(a){this.uiColor=a;var c=CKEDITOR.skin.chameleon,d="",f="";if(typeof c== +"function"){d=c(this,"editor");f=c(this,"panel")}a=[[j,a]];e([b],d,a);e(k,f,a)}).call(this,a)}});var h="cke_ui_color",k=[],j=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor,a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=c(a);k.push(a);var d=b.getUiColor();d&&e([a],CKEDITOR.skin.chameleon(b,"panel"),[[j,d]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&& +b.setUiColor(b.config.uiColor)}})})(); +(function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=false;else{var a=CKEDITOR.dom.element.createFromHtml('<div style="width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"></div>',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var f=a.getComputedStyle("border-top-color"),b=a.getComputedStyle("border-right-color");CKEDITOR.env.hc=!!(f&&f==b)}catch(c){CKEDITOR.env.hc=false}a.remove()}if(CKEDITOR.env.hc)CKEDITOR.env.cssClass=CKEDITOR.env.cssClass+" cke_hc"; +CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending){delete CKEDITOR._.pending;for(f=0;f<a.length;f++){CKEDITOR.editor.prototype.constructor.apply(a[f][0],a[f][1]);CKEDITOR.add(a[f][0])}}})();/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.skin.name="moono";CKEDITOR.skin.ua_editor="ie,iequirks,ie7,ie8,gecko";CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8"; +CKEDITOR.skin.chameleon=function(){var b=function(){return function(b,e){for(var a=b.match(/[^#]./g),c=0;3>c;c++){var f=a,h=c,d;d=parseInt(a[c],16);d=("0"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);f[h]=d}return"#"+a.join("")}}(),c=function(){var b=new CKEDITOR.template("background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');");return function(c, +a){return b.output({from:c,to:a})}}(),f={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "), +panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")}; +return function(g,e){var a=g.uiColor,a={id:"."+g.id,defaultBorder:b(a,-0.1),defaultGradient:c(b(a,0.9),a),lightGradient:c(b(a,1),b(a,0.7)),mediumGradient:c(b(a,0.8),b(a,0.5)),ckeButtonOn:c(b(a,0.6),b(a,0.7)),ckeResizer:b(a,-0.4),ckeToolbarSeparator:b(a,0.5),ckeColorauto:b(a,0.8),dialogBody:b(a,0.7),dialogTabSelected:c("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-0.6),elementsPathBg:a,menubuttonIcon:b(a,0.5),menubuttonIconHover:b(a,0.3)};return f[e].output(a).replace(/\[/g, +"{").replace(/\]/g,"}")}}();CKEDITOR.plugins.add("dialogui",{onLoad:function(){var h=function(b){this._||(this._={});this._["default"]=this._.initValue=b["default"]||"";this._.required=b.required||!1;for(var a=[this._],d=1;d<arguments.length;d++)a.push(arguments[d]);a.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,a);return this._},r={build:function(b,a,d){return new CKEDITOR.ui.dialog.textInput(b,a,d)}},l={build:function(b,a,d){return new CKEDITOR.ui.dialog[a.type](b,a,d)}},n={isChanged:function(){return this.getValue()!= +this.getInitValue()},reset:function(b){this.setValue(this.getInitValue(),b)},setInitValue:function(){this._.initValue=this.getValue()},resetInitValue:function(){this._.initValue=this._["default"]},getInitValue:function(){return this._.initValue}},o=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(b,a){this._.domOnChangeRegistered||(b.on("load",function(){this.getInputElement().on("change",function(){b.parts.dialog.isVisible()&&this.fire("change",{value:this.getValue()})}, +this)},this),this._.domOnChangeRegistered=!0);this.on("change",a)}},!0),s=/^on([A-Z]\w+)/,p=function(b){for(var a in b)(s.test(a)||"title"==a||"type"==a)&&delete b[a];return b};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(b,a,d,f){if(!(4>arguments.length)){var c=h.call(this,a);c.labelId=CKEDITOR.tools.getNextId()+"_label";this._.children=[];var e={role:a.role||"presentation"};a.includeLabel&&(e["aria-labelledby"]=c.labelId);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"div",null, +e,function(){var e=[],g=a.required?" cke_required":"";if(a.labelLayout!="horizontal")e.push('<label class="cke_dialog_ui_labeled_label'+g+'" ',' id="'+c.labelId+'"',c.inputId?' for="'+c.inputId+'"':"",(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",a.label,"</label>",'<div class="cke_dialog_ui_labeled_content"',a.controlStyle?' style="'+a.controlStyle+'"':"",' role="presentation">',f.call(this,b,a),"</div>");else{g={type:"hbox",widths:a.widths,padding:0,children:[{type:"html",html:'<label class="cke_dialog_ui_labeled_label'+ +g+'" id="'+c.labelId+'" for="'+c.inputId+'"'+(a.labelStyle?' style="'+a.labelStyle+'"':"")+">"+CKEDITOR.tools.htmlEncode(a.label)+"</span>"},{type:"html",html:'<span class="cke_dialog_ui_labeled_content"'+(a.controlStyle?' style="'+a.controlStyle+'"':"")+">"+f.call(this,b,a)+"</span>"}]};CKEDITOR.dialog._.uiElementBuilders.hbox.build(b,g,e)}return e.join("")})}},textInput:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",c={"class":"cke_dialog_ui_input_"+ +a.type,id:f,type:a.type};a.validate&&(this.validate=a.validate);a.maxLength&&(c.maxlength=a.maxLength);a.size&&(c.size=a.size);a.inputStyle&&(c.style=a.inputStyle);var e=this,k=!1;b.on("load",function(){e.getInputElement().on("keydown",function(a){a.data.getKeystroke()==13&&(k=true)});e.getInputElement().on("keyup",function(a){if(a.data.getKeystroke()==13&&k){b.getButton("ok")&&setTimeout(function(){b.getButton("ok").click()},0);k=false}},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this, +b,a,d,function(){var b=['<div class="cke_dialog_ui_input_',a.type,'" role="presentation"'];a.width&&b.push('style="width:'+a.width+'" ');b.push("><input ");c["aria-labelledby"]=this._.labelId;this._.required&&(c["aria-required"]=this._.required);for(var e in c)b.push(e+'="'+c[e]+'" ');b.push(" /></div>");return b.join("")})}},textarea:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this,c=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",e={};a.validate&&(this.validate=a.validate); +e.rows=a.rows||5;e.cols=a.cols||20;e["class"]="cke_dialog_ui_input_textarea "+(a["class"]||"");"undefined"!=typeof a.inputStyle&&(e.style=a.inputStyle);a.dir&&(e.dir=a.dir);CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){e["aria-labelledby"]=this._.labelId;this._.required&&(e["aria-required"]=this._.required);var a=['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea id="',c,'" '],b;for(b in e)a.push(b+'="'+CKEDITOR.tools.htmlEncode(e[b])+'" ');a.push(">",CKEDITOR.tools.htmlEncode(f._["default"]), +"</textarea></div>");return a.join("")})}},checkbox:function(b,a,d){if(!(3>arguments.length)){var f=h.call(this,a,{"default":!!a["default"]});a.validate&&(this.validate=a.validate);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"span",null,null,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},true),e=[],d=CKEDITOR.tools.getNextId()+"_label",g={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":d};p(c);if(a["default"])g.checked= +"checked";if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;f.checkbox=new CKEDITOR.ui.dialog.uiElement(b,c,e,"input",null,g);e.push(' <label id="',d,'" for="',g.id,'"'+(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",CKEDITOR.tools.htmlEncode(a.label),"</label>");return e.join("")})}},radio:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);this._["default"]||(this._["default"]=this._.initValue=a.items[0][1]);a.validate&&(this.validate=a.valdiate);var f=[],c=this;a.role="radiogroup"; +a.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){for(var e=[],d=[],g=(a.id?a.id:CKEDITOR.tools.getNextId())+"_radio",i=0;i<a.items.length;i++){var j=a.items[i],h=j[2]!==void 0?j[2]:j[0],l=j[1]!==void 0?j[1]:j[0],m=CKEDITOR.tools.getNextId()+"_radio_input",n=m+"_label",m=CKEDITOR.tools.extend({},a,{id:m,title:null,type:null},true),h=CKEDITOR.tools.extend({},m,{title:h},true),o={type:"radio","class":"cke_dialog_ui_radio_input",name:g,value:l,"aria-labelledby":n},q=[];if(c._["default"]== +l)o.checked="checked";p(m);p(h);if(typeof m.inputStyle!="undefined")m.style=m.inputStyle;m.keyboardFocusable=true;f.push(new CKEDITOR.ui.dialog.uiElement(b,m,q,"input",null,o));q.push(" ");new CKEDITOR.ui.dialog.uiElement(b,h,q,"label",null,{id:n,"for":o.id},j[0]);e.push(q.join(""))}new CKEDITOR.ui.dialog.hbox(b,f,e,d);return d.join("")});this._.children=f}},button:function(b,a,d){if(arguments.length){"function"==typeof a&&(a=a(b.getParentEditor()));h.call(this,a,{disabled:a.disabled||!1});CKEDITOR.event.implementOn(this); +var f=this;b.on("load",function(){var a=this.getElement();(function(){a.on("click",function(a){f.click();a.data.preventDefault()});a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(f.click(),a.data.preventDefault())})})();a.unselectable()},this);var c=CKEDITOR.tools.extend({},a);delete c.style;var e=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,b,c,d,"a",null,{style:a.style,href:"javascript:void(0)",title:a.label,hidefocus:"true","class":a["class"],role:"button", +"aria-labelledby":e},'<span id="'+e+'" class="cke_dialog_ui_button">'+CKEDITOR.tools.htmlEncode(a.label)+"</span>")}},select:function(b,a,d){if(!(3>arguments.length)){var f=h.call(this,a);a.validate&&(this.validate=a.validate);f.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_select":CKEDITOR.tools.getNextId()+"_select"},true),e=[],d=[],g={id:f.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId}; +e.push('<div class="cke_dialog_ui_input_',a.type,'" role="presentation"');a.width&&e.push('style="width:'+a.width+'" ');e.push(">");if(a.size!==void 0)g.size=a.size;if(a.multiple!==void 0)g.multiple=a.multiple;p(c);for(var i=0,j;i<a.items.length&&(j=a.items[i]);i++)d.push('<option value="',CKEDITOR.tools.htmlEncode(j[1]!==void 0?j[1]:j[0]).replace(/"/g,"""),'" /> ',CKEDITOR.tools.htmlEncode(j[0]));if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;f.select=new CKEDITOR.ui.dialog.uiElement(b, +c,e,"select",null,g,d.join(""));e.push("</div>");return e.join("")})}},file:function(b,a,d){if(!(3>arguments.length)){void 0===a["default"]&&(a["default"]="");var f=CKEDITOR.tools.extend(h.call(this,a),{definition:a,buttons:[]});a.validate&&(this.validate=a.validate);b.on("load",function(){CKEDITOR.document.getById(f.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){f.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var b=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" role="presentation" id="', +f.frameId,'" title="',a.label,'" src="javascript:void('];b.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");b.push(')"></iframe>');return b.join("")})}},fileButton:function(b,a,d){var f=this;if(!(3>arguments.length)){h.call(this,a);a.validate&&(this.validate=a.validate);var c=CKEDITOR.tools.extend({},a),e=c.onClick;c.className=(c.className?c.className+" ":"")+"cke_dialog_ui_button";c.onClick=function(c){var d= +a["for"];if(!e||e.call(this,c)!==false){b.getContentElement(d[0],d[1]).submit();this.disable()}};b.on("load",function(){b.getContentElement(a["for"][0],a["for"][1])._.buttons.push(f)});CKEDITOR.ui.dialog.button.call(this,b,c,d)}},html:function(){var b=/^\s*<[\w:]+\s+([^>]*)?>/,a=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,d=/\/$/;return function(f,c,e){if(!(3>arguments.length)){var k=[],g=c.html;"<"!=g.charAt(0)&&(g="<span>"+g+"</span>");var i=c.focus;if(i){var j=this.focus;this.focus=function(){("function"== +typeof i?i:j).call(this);this.fire("focus")};c.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this,f,c,k,"span",null,null,"");k=k.join("").match(b);g=g.match(a)||["","",""];d.test(g[1])&&(g[1]=g[1].slice(0,-1),g[2]="/"+g[2]);e.push([g[1]," ",k[1]||"",g[2]].join(""))}}}(),fieldset:function(b,a,d,f,c){var e=c.label;this._={children:a};CKEDITOR.ui.dialog.uiElement.call(this,b,c,f,"fieldset",null,null,function(){var a=[];e&&a.push("<legend"+ +(c.labelStyle?' style="'+c.labelStyle+'"':"")+">"+e+"</legend>");for(var b=0;b<d.length;b++)a.push(d[b]);return a.join("")})}},!0);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(b){var a=CKEDITOR.document.getById(this._.labelId);1>a.getChildCount()?(new CKEDITOR.dom.text(b,CKEDITOR.document)).appendTo(a):a.getChild(0).$.nodeValue=b;return this},getLabel:function(){var b= +CKEDITOR.document.getById(this._.labelId);return!b||1>b.getChildCount()?"":b.getChild(0).getText()},eventProcessors:o},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return!this._.disabled?this.fire("click",{dialog:this._.dialog}):!1},enable:function(){this._.disabled=!1;var b=this.getElement();b&&b.removeClass("cke_disabled")},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()}, +isEnabled:function(){return!this._.disabled},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(b,a){this.on("click",function(){a.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)}, +focus:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&a.$.focus()},0)},select:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&(a.$.focus(),a.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(b){!b&&(b="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype= +CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()},add:function(b,a,d){var f=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),c=this.getInputElement().$;f.$.text=b;f.$.value=void 0===a||null===a?b:a;void 0===d||null===d?CKEDITOR.env.ie?c.add(f.$):c.add(f.$,null):c.add(f.$,d);return this},remove:function(b){this.getInputElement().$.remove(b);return this},clear:function(){for(var b=this.getInputElement().$;0< +b.length;)b.remove(0);return this},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(b,a){this.getInputElement().$.checked=b;!a&&this.fire("change",{value:b})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(b,a){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return o.onChange.apply(this, +arguments);b.on("load",function(){var a=this._.checkbox.getElement();a.on("propertychange",function(b){b=b.data.$;"checked"==b.propertyName&&this.fire("change",{value:a.$.checked})},this)},this);this.on("change",a);return null}},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(b,a){for(var d=this._.children,f,c=0;c<d.length&&(f=d[c]);c++)f.getElement().$.checked=f.getValue()==b;!a&&this.fire("change",{value:b})}, +getValue:function(){for(var b=this._.children,a=0;a<b.length;a++)if(b[a].getElement().$.checked)return b[a].getValue();return null},accessKeyUp:function(){var b=this._.children,a;for(a=0;a<b.length;a++)if(b[a].getElement().$.checked){b[a].getElement().focus();return}b[0].getElement().focus()},eventProcessors:{onChange:function(b,a){if(CKEDITOR.env.ie)b.on("load",function(){for(var a=this._.children,b=this,c=0;c<a.length;c++)a[c].getElement().on("propertychange",function(a){a=a.data.$;"checked"==a.propertyName&& +this.$.checked&&b.fire("change",{value:this.getAttribute("value")})})},this),this.on("change",a);else return o.onChange.apply(this,arguments);return null}}},n,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,n,{getInputElement:function(){var b=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<b.$.forms.length?new CKEDITOR.dom.element(b.$.forms[0].elements[0]):this.getElement()},submit:function(){this.getInputElement().getParent().$.submit(); +return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(b){var a=/^on([A-Z]\w+)/,d,f=function(a,b,c,d){a.on("formLoaded",function(){a.getInputElement().on(c,d,a)})},c;for(c in b)if(d=c.match(a))this.eventProcessors[c]?this.eventProcessors[c].call(this,this._.dialog,b[c]):f(this,this._.dialog,d[1].toLowerCase(),b[c]);return this},reset:function(){function b(){d.$.open();var b="";f.size&&(b=f.size-(CKEDITOR.env.ie?7:0));var h=a.frameId+"_input"; +d.$.write(['<html dir="'+g+'" lang="'+i+'"><head><title>','
      + +

      + diff --git a/sites/all/libraries/ckeditor/plugins/wsc/dialogs/tmpFrameset.html b/sites/all/libraries/ckeditor/plugins/wsc/dialogs/tmpFrameset.html new file mode 100644 index 0000000000..61203e0373 --- /dev/null +++ b/sites/all/libraries/ckeditor/plugins/wsc/dialogs/tmpFrameset.html @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + diff --git a/sites/all/libraries/ckeditor/plugins/wsc/dialogs/wsc.css b/sites/all/libraries/ckeditor/plugins/wsc/dialogs/wsc.css new file mode 100644 index 0000000000..da2f17438f --- /dev/null +++ b/sites/all/libraries/ckeditor/plugins/wsc/dialogs/wsc.css @@ -0,0 +1,82 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +html, body +{ + background-color: transparent; + margin: 0px; + padding: 0px; +} + +body +{ + padding: 10px; +} + +body, td, input, select, textarea +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; +} + +.midtext +{ + padding:0px; + margin:10px; +} + +.midtext p +{ + padding:0px; + margin:10px; +} + +.Button +{ + border: #737357 1px solid; + color: #3b3b1f; + background-color: #c7c78f; +} + +.PopupTabArea +{ + color: #737357; + background-color: #e3e3c7; +} + +.PopupTitleBorder +{ + border-bottom: #d5d59d 1px solid; +} +.PopupTabEmptyArea +{ + padding-left: 10px; + border-bottom: #d5d59d 1px solid; +} + +.PopupTab, .PopupTabSelected +{ + border-right: #d5d59d 1px solid; + border-top: #d5d59d 1px solid; + border-left: #d5d59d 1px solid; + padding: 3px 5px 3px 5px; + color: #737357; +} + +.PopupTab +{ + margin-top: 1px; + border-bottom: #d5d59d 1px solid; + cursor: pointer; +} + +.PopupTabSelected +{ + font-weight: bold; + cursor: default; + padding-top: 4px; + border-bottom: #f1f1e3 1px solid; + background-color: #f1f1e3; +} diff --git a/sites/all/libraries/ckeditor/plugins/wsc/dialogs/wsc.js b/sites/all/libraries/ckeditor/plugins/wsc/dialogs/wsc.js new file mode 100644 index 0000000000..b53a48cf47 --- /dev/null +++ b/sites/all/libraries/ckeditor/plugins/wsc/dialogs/wsc.js @@ -0,0 +1,74 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +(function(){function q(a){return a&&a.domId&&a.getInputElement().$?a.getInputElement():a&&a.$?a:!1}function z(a){if(!a)throw"Languages-by-groups list are required for construct selectbox";var c=[],d="",f;for(f in a)for(var g in a[f]){var h=a[f][g];"en_US"==h?d=h:c.push(h)}c.sort();d&&c.unshift(d);return{getCurrentLangGroup:function(c){a:{for(var d in a)for(var f in a[d])if(f.toUpperCase()===c.toUpperCase()){c=d;break a}c=""}return c},setLangList:function(){var c={},d;for(d in a)for(var f in a[d])c[a[d][f]]= +f;return c}()}}var e=function(){var a=function(a,b,f){var f=f||{},g=f.expires;if("number"==typeof g&&g){var h=new Date;h.setTime(h.getTime()+1E3*g);g=f.expires=h}g&&g.toUTCString&&(f.expires=g.toUTCString());var b=encodeURIComponent(b),a=a+"="+b,e;for(e in f)b=f[e],a+="; "+e,!0!==b&&(a+="="+b);document.cookie=a};return{postMessage:{init:function(a){window.addEventListener?window.addEventListener("message",a,!1):window.attachEvent("onmessage",a)},send:function(a){var b=Object.prototype.toString,f= +a.fn||null,g=a.id||"",e=a.target||window,i=a.message||{id:g};a.message&&"[object Object]"==b.call(a.message)&&(a.message.id||(a.message.id=g),i=a.message);a=window.JSON.stringify(i,f);e.postMessage(a,"*")},unbindHandler:function(a){window.removeEventListener?window.removeEventListener("message",a,!1):window.detachEvent("onmessage",a)}},hash:{create:function(){},parse:function(){}},cookie:{set:a,get:function(a){return(a=document.cookie.match(RegExp("(?:^|; )"+a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, +"\\$1")+"=([^;]*)")))?decodeURIComponent(a[1]):void 0},remove:function(c){a(c,"",{expires:-1})}},misc:{findFocusable:function(a){var b=null;a&&(b=a.find("a[href], area[href], input, select, textarea, button, *[tabindex], *[contenteditable]"));return b},isVisible:function(a){return!(0===a.offsetWidth||0==a.offsetHeight||"none"===(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(a,null).display:a.currentStyle?a.currentStyle.display:a.style.display))}, +hasClass:function(a,b){return!(!a.className||!a.className.match(RegExp("(\\s|^)"+b+"(\\s|$)")))}}}}(),a=a||{};a.TextAreaNumber=null;a.load=!0;a.cmd={SpellTab:"spell",Thesaurus:"thes",GrammTab:"grammar"};a.dialog=null;a.optionNode=null;a.selectNode=null;a.grammerSuggest=null;a.textNode={};a.iframeMain=null;a.dataTemp="";a.div_overlay=null;a.textNodeInfo={};a.selectNode={};a.selectNodeResponce={};a.langList=null;a.langSelectbox=null;a.banner="";a.show_grammar=null;a.div_overlay_no_check=null;a.targetFromFrame= +{};a.onLoadOverlay=null;a.LocalizationComing={};a.OverlayPlace=null;a.LocalizationButton={ChangeTo:{instance:null,text:"Change to"},ChangeAll:{instance:null,text:"Change All"},IgnoreWord:{instance:null,text:"Ignore word"},IgnoreAllWords:{instance:null,text:"Ignore all words"},Options:{instance:null,text:"Options",optionsDialog:{instance:null}},AddWord:{instance:null,text:"Add word"},FinishChecking:{instance:null,text:"Finish Checking"}};a.LocalizationLabel={ChangeTo:{instance:null,text:"Change to"}, +Suggestions:{instance:null,text:"Suggestions"}};var A=function(b){var c,d;for(d in b)c=b[d].instance.getElement().getFirst()||b[d].instance.getElement(),c.setText(a.LocalizationComing[d])},B=function(b){for(var c in b){if(!b[c].instance.setLabel)break;b[c].instance.setLabel(a.LocalizationComing[c])}},j,r;a.framesetHtml=function(b){return"'}; +a.setIframe=function(b,c){var d;d=a.framesetHtml(c);var f=a.iframeNumber+"_"+c;b.getElement().setHtml(d);d=document.getElementById(f);d=d.contentWindow?d.contentWindow:d.contentDocument.document?d.contentDocument.document:d.contentDocument;d.document.open();d.document.write('iframe
      + + + + +

      + CKEditor Samples » Create and Destroy Editor Instances for Ajax Applications +

      +
      +

      + This sample shows how to create and destroy CKEditor instances on the fly. After the removal of CKEditor the content created inside the editing + area will be displayed in a <div> element. +

      +

      + For details of how to create this setup check the source code of this sample page + for JavaScript code responsible for the creation and destruction of a CKEditor instance. +

      +
      +

      Click the buttons to create and remove a CKEditor instance.

      +

      + + +

      + +
      +
      + + + + diff --git a/sites/all/libraries/ckeditor/samples/api.html b/sites/all/libraries/ckeditor/samples/api.html new file mode 100644 index 0000000000..619867d566 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/api.html @@ -0,0 +1,207 @@ + + + + + + API Usage — CKEditor Sample + + + + + + +

      + CKEditor Samples » Using CKEditor JavaScript API +

      +
      +

      + This sample shows how to use the + CKEditor JavaScript API + to interact with the editor at runtime. +

      +

      + For details on how to create this setup check the source code of this sample page. +

      +
      + + +
      + +
      +
      + + + + +

      +

      + + +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/appendto.html b/sites/all/libraries/ckeditor/samples/appendto.html new file mode 100644 index 0000000000..59b0f81d6b --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/appendto.html @@ -0,0 +1,56 @@ + + + + + + Append To Page Element Using JavaScript Code — CKEditor Sample + + + + +

      + CKEditor Samples » Append To Page Element Using JavaScript Code +

      +
      +
      +

      + The CKEDITOR.appendTo() method serves to to place editors inside existing DOM elements. Unlike CKEDITOR.replace(), + a target container to be replaced is no longer necessary. A new editor + instance is inserted directly wherever it is desired. +

      +
      CKEDITOR.appendTo( 'container_id',
      +	{ /* Configuration options to be used. */ }
      +	'Editor content to be used.'
      +);
      +
      + +
      +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/assets/inlineall/logo.png b/sites/all/libraries/ckeditor/samples/assets/inlineall/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d5979e3451d76d72e8b9337ee208d7275abb15 GIT binary patch literal 4283 zcmV;s5Jc~ZP)w9gs(u{NOIseln@4dWe ze(%rsefPUB8UWC6asArF|0i&9u(`N6*j!v3Y%Z=|2D>lD?0g|oo87SDhHOjXEYx*| zdcCjj!M{wdJ_lQCw1v;h6XI^mwItu1V=>%x#sW8HTi}M%^)Sm&57+%t2iIoRrE##i zLLTfzg+lbgLLo7>z?LyT-wJc{tS~3H0dCG|04;(&8^Ml7u&+m`XPzQp*TPjNEHNBx zu8;!z{?fKcozbpeS|X%9Tr3E2#RA-4D8PcVR)|5cZ%3$aL8z77dIo}h4T3%GWL+W$ zo2yU3*4ZHZ8FOpgN^?`{Gv!St6g*{Wg2zf5;gOO?SX?B)!a^I&N3iE2)N>H(n-OX) zLOmOyjy8C@^|X`3v1>9o*jyJK>{T^wF|SrTl3%H6G3YCsVKwSSb2B`PP%lTQpFpS| zMW~5e--m7;i%{Q*ZhfnQTVIc0&m^%mf;}C>dV|%ef6wAb zd%Mm7>rk)Pw!&-GEugPzftM5zc6iL#2pERI0|@oP0xO8IHRIOmA&BVK z5Our;t~gc|$HC?bD%kG}5c!GFu_D>pp1RTM6gFF(kkrry@7K3MB0~LUtpom0(+a;s zs9Cpun!5E;bnAzTTyA|2y7jz#SHd_S6UTUj{yE(KEP}r%uc6be5$dZE>Zu6zmB*@K zN@jI32b(J>V8>&;{J!8!{-UuR{)*Znv_rDZ2?#fQU}=N(2)5|f2=!WonuH<5t)D}v zSC&z?MrfDNgz>2o0Y0p1hOg^dVKch>+A=%H#~UWQf?E@?s|*}$uAqROV09*cWAA_z zg!(gt`V)lu&(y6qFmC<(YL{ETj9|ZjZv7jYFg{b(2uTR=HaxDR?OYd#zpZz;6UN)K z>mjYdA-;YSy0+xjBGgB#;quHXm~f;zl7r0^Fxcx6$gdFW&xu>()gW!ZbhbPFVTRUJ&4aVOXn!JeGZfk>+%^e=G^&EUm#*-L_ zlZ5d~1Ur&~JsH8CbhvT_2b(Kkus=YUzo2gYF+SdeV1H=obn7<|;*ZdEe`s{VX#~0T z!hhT#o1EuiI|BYXI=E88_^QbjhTMm7HJdO#g!{}sRofYYP`93Zq!K0`Hm7p1xdH|| zvB4>Pj!=J!P?Lo5Pc&hC7opyO%4NcfhI1F-FgozZ`1-SD-Iw>s4C6ff+jRZ{oW%>` zGYnV$g4%-d_ot|3xIal4BN?dCtzp7pvx$Sv6)@PV>mA8b!nlbhjPKEekwEQ0hu+=P z4sRor&zF;!TD`odG{dOFZI$TkO5^!LtA|@pI$Qx04w+%xp~`3uHdjDkFRyKl+h}bA zrScvbX&8d6rU|3Gy!T*{0QVx;ccc625c02RB}ACZYaIWGI#QDm%`@P6Rfd&M=bl z-s7|%gt+yhLYwH;Bw;+&(gEM$1ws-=5?2$rNqJA!58_T3Gwn_=W2nQrHGvx4nt%-) zY_5R8US8FjC@=55TGax(5NdP#dC{#&KgcqsAB64RyA8qq62lMzGl{Jq!?@Z`lE&7K zF8v@Y_5R7e!Q|Jnz-~jTHYgWP5MDTu6M=R zFPYJ;nS^n%LO;lBbcRt1K~@&o#OJRgz+Gk-F=1SEx=!5wj!|HscDeP~3F*#7M zZ=E}jl@67FvY|kxEV?a0b_`KE-6vgP8>0eD>tIv8x)>O3!Z!vBy^@EVQ^_Li8NC_ib-jn)4$O3{G{7c5Va=W{G?|4(YSP{AL zRIR%oge~upP~-?ErzBw%V{3HlvBa%2O5xH2MnjOmCO{h%VD3(_K7ySjgE~Um)`wuH z)7O$@`;vW9E;86rvj5Jl^mD|bY`qG0d{t{2Nf=*a`awu}?-Yg;2N6)ot;G9n3x-mRJuvy@2)RDC^ zD5L1>>3)Kpz#M0!@261!Ti1)=D1jYC;nv7pTmq{voEw;n&L&-ay$be{@)kYYy(g9T z{%&o9`i=|kgi$K*c`Wy$3kXQ}9vL5E=pvQ(QfplB-hr^oYu5Tg7x*jl>OI_g^Z_G+ zT>_(iDp}zx*eanxN)KTK3weqUV0R03AA_x=Py##sqJaHKbz3BHX+7-+AqnG(vL;xA zkdpBVK4;5&YRkR$3r?_~y8t&~Qb-cU8!!wZ&-da5;_e5b<-O^d72 z3-Du{jnI;&0)le&rR6BI5KrTxhT5wG$&rTwL3mF$-# z`wUUCzvAOw2U}-qN+k)Syu7#H-VT|~9im&`Ny~e;$XA>*%e_cH2pNkJaw%cVZRrq` zMbZz#miLHTlQH|K*$uVm*69T7A_&`480{n2@hY)$u)vO$C7Rmqjt>y*Brg)q_#lJr z%{i5-EiBk6%)Z7xt%``N%}q^l&z0H5eh{|2x1rJ%CzJBt9bT+B*W%*}=Xp4a7lf2B z61VPJ-YbJ82G=a)%lY-5Zk=8PBli^|*adnY!QRSLCp19@JGPtZNwC3AQE_J$BqOuE zC$PNIYfEl=q4;jQAeG?D_s6o&6w3 z$+Wri9LzXgEhdb&oU9hX{=T-EDeslS&iWQ;>^M&o#!j~$v9|!hJ_|mAZS=7c;w{+n ziJgRA1UriY66K}4X9WRlf6o~u1KSu<6EyB{#Ar`s`$44g-ZyovQ0O@4&HX{#HS2q` zU8`j_o9*s?kWDm^oPV;)oiM&x2 zp-7a18}_950KpFAobd{wNa%sRpje0@akac3WO<3JM*Sc@@9F*^>~gQKXd+46n#9)A zj+n(H^03h6F7HJjDRb4ojaGLEBDry^#xz87{ z{W)ip?3@zVu^|aI8HZj5dI;39y@or)LJW)~2UNf;7>Nc|vp zov3u(W2Dd`CX7=uO5l#nG8%$(x;24%@V|0l!1gn7K7g$YVCGRLt9W!brQRdlewO=s zD|u7{+uw8A7?49B?A!B&NCGw6y+;zp`)O0tqv+)F^4?U173b`7FXGl>_;J?ao?$#> zbBL0a_t+2w!Olgnb70W+GpRoIim(k(NnQXQ!NlkBJ~Tmf3%8$O>w2l&r=e8~W0207 z(#_0c=z%S|cAnLw)DJ?s_mV1_M7LH;7?qZLk@6myWn7+9>+T0}#nleQgmEb2)|c!+ zu(xHKg4Ep?rQpy>GC1RXY+F@@JH#evSSS;EX@VxS!A7W4mHI*cR@W-_S$7wL$ooOu z3kaBg5E6oru`0JlEn$Qq64X1+z`*TiK(jMH(vN=ZSU>u)wSFu#P=wpZer%=Q>0nK% z%bi*6ya_>=QV(6Q=j1iSDfNS_riq}3TPq}ta<`s(s2rX~wgJh&5|zkXc6J)(>P=%4Qf<+?ql?VB2W|b|PQ%$QAI7 z-?iEG2Bm(GbXyzjL&?i~w`SGAD@9hZW=(3>WRPme7Z_VVEymVHwSEwpTe}iQ3G4yH zt$#cXnlyu+gUuB%*yz^DN|P~96}WDAvlrn`#zgY#>K3srl?+!eNDHhfz@+n7g~|eg zuKgg22_xgy{n8AAW@}bB2b(KkuxFpK#HjUyJdtk|o1Dn~K{6YiVn4_NLv5G)gUA;U zNN%l~FfwjEkh*ohA5Uj!e)uJt-+qBBXum<@O+ScQ!szMNo(l-NEAOFG3kY=@LcKz& zgz)={a0M0Y>rU0B^)$n%THd28&XpDr$lV%~#f-r_a`c0CJ=K5`-O0@xi0GOJWe}NYw)HYgmvrD8KuJL{UvFmelqGu9Vm^~1aa^$lPf4-Uv;uJ z&YOM^jH?af4w@3XyP+fpn=7P#nK$Z0b+W?m#hB2klgIyTj*G~$g=;R-;9n+J(7+~R z(($_J$(c1VMBe;t9S581e*)}K8T`xS;$U-eu<7WB>W>M~pE}+anC&p$J!?Rgr!S^aCkimr(fGWO5jj2ug|Na9M&F#>C7+6%xil-Xx72Y%Z_B d=HmJ_=)X(C<$1VVe}Vu2002ovPDHLkV1n>sNh$yU literal 0 HcmV?d00001 diff --git a/sites/all/libraries/ckeditor/samples/assets/outputxhtml/outputxhtml.css b/sites/all/libraries/ckeditor/samples/assets/outputxhtml/outputxhtml.css new file mode 100644 index 0000000000..b60718a512 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/assets/outputxhtml/outputxhtml.css @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + * + * Styles used by the XHTML 1.1 sample page (xhtml.html). + */ + +/** + * Basic definitions for the editing area. + */ +body +{ + font-family: Arial, Verdana, sans-serif; + font-size: 80%; + color: #000000; + background-color: #ffffff; + padding: 5px; + margin: 0px; +} + +/** + * Core styles. + */ + +.Bold +{ + font-weight: bold; +} + +.Italic +{ + font-style: italic; +} + +.Underline +{ + text-decoration: underline; +} + +.StrikeThrough +{ + text-decoration: line-through; +} + +.Subscript +{ + vertical-align: sub; + font-size: smaller; +} + +.Superscript +{ + vertical-align: super; + font-size: smaller; +} + +/** + * Font faces. + */ + +.FontComic +{ + font-family: 'Comic Sans MS'; +} + +.FontCourier +{ + font-family: 'Courier New'; +} + +.FontTimes +{ + font-family: 'Times New Roman'; +} + +/** + * Font sizes. + */ + +.FontSmaller +{ + font-size: smaller; +} + +.FontLarger +{ + font-size: larger; +} + +.FontSmall +{ + font-size: 8pt; +} + +.FontBig +{ + font-size: 14pt; +} + +.FontDouble +{ + font-size: 200%; +} + +/** + * Font colors. + */ +.FontColor1 +{ + color: #ff9900; +} + +.FontColor2 +{ + color: #0066cc; +} + +.FontColor3 +{ + color: #ff0000; +} + +.FontColor1BG +{ + background-color: #ff9900; +} + +.FontColor2BG +{ + background-color: #0066cc; +} + +.FontColor3BG +{ + background-color: #ff0000; +} + +/** + * Indentation. + */ + +.Indent1 +{ + margin-left: 40px; +} + +.Indent2 +{ + margin-left: 80px; +} + +.Indent3 +{ + margin-left: 120px; +} + +/** + * Alignment. + */ + +.JustifyLeft +{ + text-align: left; +} + +.JustifyRight +{ + text-align: right; +} + +.JustifyCenter +{ + text-align: center; +} + +.JustifyFull +{ + text-align: justify; +} + +/** + * Other. + */ + +code +{ + font-family: courier, monospace; + background-color: #eeeeee; + padding-left: 1px; + padding-right: 1px; + border: #c0c0c0 1px solid; +} + +kbd +{ + padding: 0px 1px 0px 1px; + border-width: 1px 2px 2px 1px; + border-style: solid; +} + +blockquote +{ + color: #808080; +} diff --git a/sites/all/libraries/ckeditor/samples/assets/posteddata.php b/sites/all/libraries/ckeditor/samples/assets/posteddata.php new file mode 100644 index 0000000000..c277550e6b --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/assets/posteddata.php @@ -0,0 +1,59 @@ + + + + + + Sample — CKEditor + + + +

      + CKEditor — Posted Data +

      + + + + + + + + + $value ) + { + if ( ( !is_string($value) && !is_numeric($value) ) || !is_string($key) ) + continue; + + if ( get_magic_quotes_gpc() ) + $value = htmlspecialchars( stripslashes((string)$value) ); + else + $value = htmlspecialchars( (string)$value ); +?> + + + + + +
      Field NameValue
      + + + diff --git a/sites/all/libraries/ckeditor/samples/assets/sample.jpg b/sites/all/libraries/ckeditor/samples/assets/sample.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9498271c6032eafda487c0428ad5b26eff35985a GIT binary patch literal 14449 zcmb8VV{oJa^Tj){F|jjoHn#1JHny#et&MHlwl?0_+;C&tHg4X(ZrzW!zdlt{PtD9Z z{p-{Hx%9aOK$VvGE&%}hDmpMa0N`^KAPRtngo1{GgocKKhJk^Gg-3;lhl7L1Kt@4C z#m2zF!N$PC!Xu<0#=|Egz`_F2fygMSzR`TcC8lShr)Hv{{zmE}Ux>$ZA#B!AYa~k#`(ViZv)W+5Whg4-P=W_5JdQ+P9fY+yEOKO8v=2Eo^eS}jiM_vc#O;=KX`G1yXBAb$9 zg%!Ab{=)RRM$@iS3(QilcWdH635DhKkE10j=b|> z!US!=ZjvSASv0Ia=n@25@d+*v&5^Anni;=%5(7n2|0PiOVd#V__Mr6cmoQ zW3K4zx*#vlYJ?mT_tA(sbdg>qxbwtT`p(Fm zhFMQ#z2oRZ8r$ypo7+0AIGd~mrIz7o)@5;%+}H+>yC`b#b>+Cs&QE|1!6FZb&WiRP zUy&=&)iwLpm33#CeksQ*r!8=fY>DNb$^Ov(#gA#!GHr#tcNRgY?*uz-0e0Iad$xM< zyM}3~xun_r3#E3~_;_itDtt7Ws^(}frf{(qH%E_~n2jVU!;aA_`CW}Y;@E?%wsOQn zZw`g}GJR8Z)$NJ_D@wx&Nutd6-h=_ik_%QeMgdC|NE6oM2|V^uHK}%6NL3lb7w;3i(zpSeoPy-dFZ7gcQL#htEBSc$Xs`i zhk@Z+y}1WQft{%_nj}T8zDVh6?rTr-+UYyCyO`;O9WGehbCb%lz>;M~o{CBoui?ec zcl7MUqp+#whT$}ybSxGlr;A^sc_rrj|G*3RmkVc;Bt1xcu@apq?-1Qa7d$4hWxg@B zC0R~U;T$YAl_bRd#ZBhK)Jt5pa*#UBrrSOS`bhBXLaDIU%%!`A#SZLH@equ$on~Gv z@)2T;(+fG5Wrk{Sh3L!n*8J^qJ{KU{khz3onHRa*{4xVtQ~>yY3Jekq@=N?*1qKd) zfCQqULy?f8VvsSjKx2Yf$=QWPzU%?^%Td6fz@t%~a5$Ug0Cg`^Z!Hiq{627ZXR>Q+ z%A*PS?B(W1#O6xF%N$_5YOZv9AVbc(d%Qu7XIgxUs54{U6vLb5nG??ARYTpgG*&HuV!~D>4QPPv0r~ii2Ah4I6$uZh1T_4(*;wO zq9OZ5{mm_ATrkB(2nd+dN+CoLJb56Z_3{X5z)9+Rwy zxPv&M(28w*ZJ>$MwV1tD;nxss+~=gqFm9psJtT3^5-Jl9(GyEC;&&bhzDxRBRE9pN z(*fxhUB#b9mhSPoWeb;algLCJ?MjQ}5QP`~d291;0h%|kthG)=T?nti-vv~BX?PLy1y6m87Bi_Q&jh?_}tILdF0SIWh)PJoWU;YUgM-shhL?>>Z zaM(C!9GDtamj6??v8z zJ$QTqG}Qu^V>%`+Hu`@!(Z%4>#8h-DV;vSd`ns%jt`5%wD|LZjk;lF{@)=x5auMt;FHWizZ165cep25bhYD(47f#}PD$ChgoAKVne6^lBuzZlk# zd+cQghfcK>vCJyypB@C&kW7{zF1z+lkw)lh=U~Y`0Wdkbt@D;@h43?)hkAOh!f#2+ z=kuTu*VZ+y4q9iC4WZa>jee3{sh(moSa_-|giahJSj$5%Q0PIzmc zy|c89o>YcOF!eqm+K#g;xx-tH9O_EAvvq$Hij!3mf=Gl+hHr6o7yKM4Z8gWFrG5Tv zc9<>2Y8l>+{%GXdKTclm>n79&>PFh!^IIEhyr83ccbD1K?FjOfr`wjWS1hUmY) zww|@HjWurIwM<`1l5?97W;aPk7}CEQZ&aY{8X=2V(;FjkZaAmP$=A)%G~7)(ZiQ1nQ-p@(!%d_adNaw!{3k(7h;=c(8 z3>-)Tfr`c~j84j;2!a$b#2{l;@}If-FVp&>9YL_SUFg9VQ^~toih><3_GR&(Ue^TH zUK2!Q-4+Lq7)Gz8N17_~q|^n?g$)rr zKyA)$(n)Sbe#-R()!&F-k{+gi<4I7=8&Vv}Ek_eWw6K_%3u9Actd`Af2f}Mj&*}Kf zf)(L4Dey*ijs0in6Q*Wg(5OBNR_s<%=EjtaG-=r!JL5BtWItRBtgQ;6O$HxaNoD`! zKFtvQ{Sd)|y`*nnvFqs$_%SqoRZqymRCZ$~MUqveSeW30sH=&&pDKRV?8Tp7I!;$I zi(#|xfzKnB14HAEah9sWA^(cLZ1eceqM6kRoR3QFfPqmlf{&~BAKBBVL+NK&#v^}A z>;p9iG{`{Al`U)XkZ_C7QgD@ob-~G#8+(vPh!Qv1KKyjxeMlVtmd@6B&QP`>o{JnS z&3f5@8T_PJju-cW%kD^evd6Y_YHb_Pbc@#ze!UxG{dS?~2Kv zRz5o*UQ#j(ZH&ILC9(_fkeu{GG(ptz+?f3*oQLs`5-SGjfvGyS2VITh*K`u&b&|33 zIDMl98QGB1vSXrbzJ%4@qqd28D?#G-Pk`9n0yoC4nw97n+TQo9Itg#p@YZ%y#?*xB z1i5xG@+V%l?MY{gV^1YVlcM4o3Q^L37yQ~8N_ulK8JV?Df*r+IqqzO*gv?vpN=>Q> zDu0T(CBgCQU%&IU5R+rl!85SzO)Iu3=8`YdwA?r9K^}ccg8n~}_!0%gS3&)sBp^u8 zm{Cbtgwa8YkQgFlN`|bW4)Oo33Gn}D;?~zDX_ojzH@7XEU?#5A2TOl-ESUDS zyME6&-kc2Mcp3K__T%59CT_C$3`>%)E(jDc`(`)DYTB4S3Lnbc@hyvZw3oO%rpY^j zc1R#d{BJ{qIkO2j>C7Oj|4?W1kNL7uWGdr$GeJuu6HS|CyBqDdOw6bHhEX00UX}(W zhLJ}6yX>&owQ$p4Fg#}-@-~hXsV2oHp`y-)4?t%LG4Y49ZY)jCT7sjbkTW+k;=3sm z`n2RMdGJUMM|6Csg0{n*1GPH1QFlbPaEsGp5-Ibk)eUlIY=d)_bFPCQ;n8(ZJ*sO>?q%Mx^+YVN$^a z+3K)i;`nrCM=kQ>IihCc(W0SCBW{9PDZgdY#KjP24)ITb!jADu{nONit0rQF7RFJG zay{%HEYS|~kzY>uxZ$2l@lZqZ)OO-0GYLe6p)vAhktLLpgBx!=5&5+{E;FQI!}C<; zuTiP8AC$JM`1Ma>jE8--Kz)jfW!PVo%wf^6MWd`uCYwe+`SD@(*TxAJJO4}+86Bvu zLJ@FA5krHR$C|>qN=Ex5XZpel9Zkp@n7W4HX>WinReFAL3WZ1tt=9Bc4@p>VgdM4o z(!7yH)}PKxB*{xTPi!JgAKS&Nc*WQXUYRAzi2MpP;xKXp(uX5RCF~z#O63o-$+I09 zN8kBoqU#kX?H3l>jIYDN?kGn84GO(zVpJ0F9$LNTeBN>@Ktm1CYk!`{H`a27KVlG}TC!q9=A z8NrYKh|GY0PMGzFO&54MuNAp85Nn^hH#T1_ z05Aw}NN^~4NJyCflGfLZ4E&F@gcVUq(OC=~{2@VPtRhN|@x3#m`Sn*uPJ!D{7!*v( z2?hVd%+P}1w`U!{RwsyXb!|8Zgl-v1gBPvYa}itDD#5ETuf0>$b?PAmSuoFso|mGMyh$6NoQSkqew1bc zzAu3Yk$8X1072L7{+|HS2sMSRe4TsQrn6cIhxdPU+AghXL!cokm?*_t?U?bJDz^i_ z={B9;fnBHnIDBb8q_^x_uuyg-)TFd2!Z^H=wqv0@f38w19kg}B$0UCAn)DT7N=lDL zKSe~j5H77U6v7Z2x-u@9uy@c%Gp%W*o>tjE6xB6>7;o2X0~x+vIYvK;qnR64bN~{o zQ^k0aUM|j+YJ1l%dKvarv}OQIR6?!Y#O4!dRiVF-rz-$U?T^d9(ndNGB00~6a~5qc z)hDi9v7Lr*9tyt{cz5$Af(3lS(L~rT7Iz zk*kRVL^yIvtI1Y=UzRPL@Tv|Cn|J(~(=W6+BI-&qW9qs(-S6&Wy<7;f3mk{gV}(DD zq5_;VF$hdJN!BvI$FX11tih!7fp}+PEv(vTpc^6VLgDbMev}|^YRDTcSO4QW;I5Tf zaQr25V)}OtF>7yt^ihMCL8C9LKhYogS}t=~3nLV6WL-uoW(u8Cv3GrqCC+)BrO*mK zv%c9$ez4nAxZnbE-oq!<+$F9EBICxek7J_nO+<}To^b}7XYxnXw2E(dj=~y55w??9 zyBDuw-_H3a`WB35d3bcR(P&I*$a6FMf(jX=T$^&V$m$ASp$VPbor2ajZxtOq{d`4i zc+c$KN>di0+%g7_#K_M##Y&t?U;OV`WE-r?aR~uTp1GIf@73HAtR7w}z!^ zD16BtcAr|Xr{tNPb8F%9(F@%Qx~1eKfi-7-f)Z~w2rpokp^;W8R*KsXmzcPr-u}W7 zgtm7m%Zt>3&ZJ6bW@nGi5&vA1Pz5iye@^V!&H?sg^f*gNkV00OWddt^z3<>i)M@$_IUY_^I1KhCEcL>9TZuk%O_(C@ zqp}z^MdP1!c&#-7;cg;p{;v!%#B(sl5X)3fYvsz6hZxc+F}h=A%N@Ewl?54}0Ega9 z=QV~@dF3L?QHCd%3&k-0u3HyHomKR(r+gI8G>8E>!F0H0Y-Uzdq`&K|Zn~_cT*9LQ ziOj;R3`{5y?nH|6$slsJgWc7&bcrmfaQlajIl>St)qUAwDX>UYDbzENsQqEWPadTe zdG7~6g^NB_b$g%jUKYW#c+(2xMZ0u5k#)X*5sU^wF-%vk{HCLmT-J_4slsiv+rOi< zVJqb+LU=O*(*XpFcGd}R(QQL>y9Zyq^+Vd^@NS~pQ1`b!#`xK2&UZ}@> zzYm4SqpA&?EOsxl5o5fmHIan1DpQ`Dv|yDliMB~(lFo2_k>|{!ubJDj&@XDVLknq) zXcjBr;_{yn_Kk>KHGRt;H)bk`JUpf9YzHhw+s-f-ZBbL(0@nBU;rS=SG)Uab@BQ2y{I!++t>da2MLlm6u`;jJ&JqN>IGz7O4teQ(W}XLbIc)yX_~$16ni#_zS~8P}A5<{`#m}N>>y~>fXBI@OFWh zd;(Q{{WU!@`1~Orj8CpT7&YILMiaB8h3AWO_{4q9pJHc)tWNks3$zry%Zi#i!*QiI zM2uql1GYH(-a!Oy`|rOH-2Y66QFFUfC3AEra09Lp8F(Ean=;Ti-y|1381{RjZnX{+ zpfPo5M@Io9*%YbEv&u(@V;o4`8&>VXqY?s1|Nf!5t!ZE?W>?_m$-P$~{~#q!QoNV_ z2!mX4n)0m+hIL^O?=m>o4wyI7;FWnwew`z2+|j^a+f7iykwxB2^JhCVq-$=N)CWe# zJk)?J9Hb?L1pK~Ri&S@rKNsj5xcyoxFzj*pch50grv=$)I@Cx zmn^wx$#k{QAh^J9YvsYxED%!zfnH{5ca`NqVZuZtPBFAF73SO#@$u4;STKVtJ~1bdFndLN-X5SvvF(7Vuz(ope{w4A*S zl}vdSM1>)}MINGWHU-{CaQQ#c||V8q`|gBns}V_(_YHnu>zY~li2G!H2z zC8zYO-07YVL~8qU`_dmsTWeNhd)J8P_=IUvE(=+Sco5_QGw?^*{kF5}qaPIHCdoM# zDXE}Hwwqt+&0K4}%88es07_*jhI|cUN(2V!D|?xLO3s+E%|^NvZVb}hI}0wqp>gC8 zTQ0A0W!d?kf+}|zjd69ArA5l%YJtBs(Qi{vsA2Te{k-mE-W{QKXN_*msZC(Ynv2>I z@goWcz^n4!SE{%6lH!n_z5EQO2L_&Nub`4K<)!_9CU@_c;*=`DGHWi|Qsl(4mz71A zZ#p*T)A8}ix{meZM`X=Kl1^f?kb#}U3j$Tx=GG6?kG`3@|5e?cux;t6FEANN*v{-0 z8y-_s7JZUUBPlBW1dNKtA?`ool_&bF;XDN{4DC#`g>2b!6N8;e$8k(rsUUyUHLoza zm#I-7(xICOjn1_?Jd~X(JapGOo>aa|zNX3Y*bToHz~{~QA)$7B6Y=N;uL~mOZXg77 ztRkMDkIx#~DDV!@83OQH^_m}DN(U;6O(=2 zqxDlBe78e(Jr=Kn@YhJ`vrAFGnRxX?U$3#% z!Wsr{5vp&m6e~$@=l906d0z`*qL?tvt+U#0+Ki3Zo-?%OCxM2 zdP;;yq0i4MI>E=8F)k06;X33z3?T=oXvVQ8v{R`0LtJ~J-ox}OGeR6!4c0)Q=&R4C zZM!glM>@YrGZPpv8X>N@uff1Krwr@!JO>DMmWV4a=BA7N_?pWf@jKy3L(@HRr?t7$ z68x-_&F>lUG`_3fCvDkL+TjWKUae@rxTFE#jGrEv$T@XguFII4p-#+025k=X#bj*-}5U|zQw$+rc%br z@5X74nO6DI0Cg&#vVEpInQ+|gmIKAG7Dv}RItFk_D`#4c?a{yh2gt==ODU-$nUI@t z3yE1ypLU~DA1})(`AKPv)}_Ak(xVMLSQAurq)njkPx@H@-m%*Wx%Ku!jMH7OjCQr^ zM_*f}5`B}Mv?!ru<`p8di*djvad&}IcF#l1FP73RvVe!Kd_7g@mQR3D4OK2hx7f=t zoAdsUF;h4v9dXMbS1uYbwzSHy;>_E%-hNCb&+FW5bSrTu8Q4vIgXE;y+vX4WXZQ-ZD5S?v>4vMlc!#*1A;ioF|m#p4yVooFUB&z|Q` z0d`^Sb(8v8l1?z_yVE=7Hf-6sb@|v7Q5aJ{I0rPMNu8ZALKF!V; zmSX3QYo;r4l22t{pj@xIcObBzGNGOHvX&P$fju5LFPL&1{@8jt1jW;JpvnR_W%P=M zK(c@OtBgwdr9`1V?Rqx=ZIug>T|87ZGOEaCd3ap{xtLeMn)+XTPYE#>Ke+?Xw}uF(br5OKsC6Qc~dgPp!)X(agYiObr~rFkk5%n7GWV6QiGTU4q#{?Ht$>8l#8#rk7@((FOLw z{fT+|$p||Yp8(vSKdQPbbBn6Ar#=CIe{HGM^y@iOUh5K-a+Lx;^#T=8D$9b*@JU$w zJ1kfWF=Vu92!bTA3mSbOb0K?lIN# za8wYMt)N3AyR8#YW3mVJ3`L8umEqzoA-bdaQ7G&A*X1#iKT(b!hM%{MA@MN`@*nGPVcZo$B% zph(^A*fLsySgHGo0(ema`wU4OvswJIrLEk{zojwr-(mQ&05%g}D<{;tWEe zrcU4ykxt(7+`H#Q8XkE=#kbb8|PnASHkC~ zzlfyt&rpDQ%iCi(qpVa4CvDoi=v&BMQKN)!Hb zxH68VtNlw4bmh**%g>CfQ{KmjTDPuGKpmz=CLj!$^k-n3o={j>CJh6oc5_G5QwW4O z4`#%cOdpsgA;p2g({^{{c^^ry$l{>yt20q%-u`w0&C0|@I$(@@S7x>P8>F zf7?Ao1_tF1_l>8(T_b~8hLj57vSqhQQqk+_%|oor@$yx7Ka_3i*B(|Qaj+9EsAOG8 zEZFGK_>^ucQtyLQXCq7YOQ8g_S@~Sw_hySoKLxWK%m1&mAL-*1CpFb8?POPs;Nb6euu9AhlD<4jC9p!xsIU*rI9BP-&zh%wD3!v)eLAlQa@EOB>?C5{nIPL{{|D|Zf*pp2{i7HwK z15_5<>dq_Y8fL2eE9N={7c}Y)C~&I>x&pQ0AusYlmV!$m7_8U;q;XaP8cvJIr4)tz ztM@S^=WJ?vURlx-=nEuUo_mqiwD|8>k%g?JGAkIpz#8KMZn@alPN=EqkNn?Pr*}yc ztWc9!NUpsQH1nHueHZl`q!-HWnJ_SO%xk9Fh!cS5YG7pHB{09s`y3A}AA=(ql0s^C zH5?9PwL?=r0b#F}?}F4Cvp@g?Bn@LX|1mM?L+l>!;Ij`yHmefJipW%mI)k-}*7_W7 zI1aVW_;OhU9m^fABLjl)bxDSwppMV5KsJ?l38R4@kYQ}~8}I?`EHNWZ=thCNE#5c9_PHKp21jXq{>PBc8dP>x2k8LA{HUMP})(X@9hpkvOc>c z`~*0emFIC^p5{cq;DZ$xe<0_el7nT572s2_Xa=$S=o3e#5Yp;p`4(bjOJ7Ye9WXJw zf&WdpYxza&&K{K>fB*tNn}<7n;PEJ+^w<0Aus}S$*IKCP{CtT=S`VM$huaF1#@>wf z{6|oqrOXZUo6(?sb&mdxl1Ug%jr{Bm;qD}uPwUs_GWV=Bs&s?2nV7hXMzbgVXCPMq zlQ=9Aj<8GM0lO)Q0FjQcV?x@11{Dc?o3Oi11sUe;K^|@^-)-7IyOy1U;DGL~M}Py; z4k~UI(~{Z&s_81u+&NCH7G?JB)B6W$)|8oLDuM$$Q)T}&?+c=n@rO_g`++Hl=j;5# z6k_l_56gRUf(%nai+eyO+*&R+=8PJnP0fDIiO3}l8|_l5I=Csbl_~G~t#HSrurfBw z9dDpI%1P(py`ME{P%o?knR9b`U{vkSpGn2sz8}>z4}9$ue>l@#M2_W_GgtW?mZt zlO3fMTQ;P4dVhUI7Jyw`JAv$uj-1r)SDHV)&jASd(X(rfjBqSH-bRdMK7s;fyt^#X z{j{w~FnS&icdDJX(=OCvp3~ zqs^~l&i^-Xo4NX5BKtbO5=2$$+0d=*&f18J)zD53xi^e((NQ>h9aMeGqJck>Jts;H zq=kgBtsz?%;O)68-bn+F#^`*J6`qUj z_fTT+cNYK4-N+OklBRP1Wowz~+e~Us59s%;+~(f9jS*x^{9^~Sm9c=gze6F=ytRM3 zvt}PlTa;}&KbXmMFAt0gTUS%O**gK~E9phSNM}pLW;~o=9*5Y&TozAdTQ+mi#Onmr zR$qBb31l~HVcdQ3f*GCTd*I8+iMyzNB2l7;Zjb0VZcBRSHxVz!+jpZavbfwNlp*r! zv5szu*eQ)(VG%v{?hSQ$C%3|%dR)DTmk$G6%iinlv`Gua8v~EQiUn8VDAL_SHd9=; zXHF89s5iS}jN-91j&~vyA|CC-$o|kDjm93;;!i!aRP@ScF8=hcSi~h@R+(3V-Iol$ zh-klf`$&;786$@m6<3~($S7&>SN&O=;;`#)gNC-?4Y#kOB^+}a<73EY1#xSy>*E!p z{`sGhOd4RPIK^R$1^pWwET!fhe$wBt)h|Qf_ZJ|5kiy8Wjg8&Vrym*QJnY_3;;)YL z#y6kvpk!?#G_?YYiQBML?S@_}w(`~4s*O=Uq(mb0i}5dQZ{0Mt$hJ?i%dB$k$8ct{E4?!ID)x! zVq8OT#e9AXPm*ZrYZd~6*qw4A>fu>OA4~l)hf z-@1<{u^JI#@0xNzrArkPq!=iS6aD5)GSR-A#8!&e?d7}7GOGFmUq7n~y5D~W{oTno znp+)U)C-mpxno#>mc6aXOO1Y?*qTAOfoSi{;}%(>zQ`3N6ltWVVaVBWwnTuN1oEH%tEusfMK<{C;(+0 z)pZe@qI42k-fjR$3T{Tfx!WDPCHH%?cSdjKkbBn0%NV$0ohRG^Qj+nah20--*?pbt z$WH)b>j^AJ_bn>?0b5q10-SI&vX5cHwnBhBo2d%>fr|C}F4w@B1eDf|y>6QbT%PW+jpz-2!Tl zm-Gpwa74oxO&&h=g2)h3D!RT*T<_^yhmw)QL=IyhiG&IZ&i=WoY)Fif%TB3eQSC7H zP@2+;^^Q+~`yi@qh+XrW^(EZ^2Oi_{?r%Qh%%pM{$!MF0uf+*p;i3CcJ8sB#g=7`L zYPYz4VQ0AcOHD{0)IVhJ)@i|0YMn4Ko`jJU%ZfN<`Qf=CdT<0GjO#>Mvg!EEPEbc6 z8xpa{Q4zS!-SYr@+}2#*I!q^X@yUa;TsPNV8d1MKmwvlj7>TZj)%A%H2-aPG|HENL zlDdKbCE~&x*U@kB_^LnY#GDB>#Utz77Ot2O=y$?Ei0?TXJyc7ok~J#wMu}KzbOEkx z2Q3Rmq7&Gt&v_d=PZ?9Qvfb%A0qLKhzUs5K2rJWamf6=gmn2+%jB*M`isPrSJB&_) z`P&iyqkWVqf=V)``<9XmQ9`1NIOe&hG%RV^;`X`|XAC-3k81UK+=HJ5M1#lY*~?qx zz5BX)=axb|p~{Y;fD#C<5({L`Cb4Ri(0K@cYQ=^0Yk(5*sMgZG?G&Db0zjc#b3Mi+ zz>Izm?!1ja0 zKxTgYQw&PU_hjy(yV8K-P5(*vPp5%W@(@UN8L`Q)OK#-&{AL z7hjlCLr{d+V@hc~LL9gfk*oWNpd?qnuw%+|C(I9Dr@n*vX1f4tdw58tC{mG!4ZK3j zA^gyJtOy_u1zM(MpJP*;MXV6lE&$XMYWGXc={;`X)hH}0>t~e}E|ivz9!`ZDZ;?D7f@jC~-ksUNY!|%`0+V5q=x8A&yNPO~<&IG(0nNgP zus40v4c6L#Hw+%K_yqhr1%Y2K5it?`opqYtSk#V% zrpdxd$#Fd!fmxvWi>@{UMc+nA$9J&1r!I0Eh5xl%0Q*BEsn-St2!?g2n00I=iEE^u z4cR6M1mNY8=^OtTybdGD6Y7o54>Z>iZBVq;ACfa&jtgII)U{9b$hY8hFnFvwhKBjU z2vNTrw@#^2R^7hTU}sjp9aC}8O#Ua|leu7TeYwav=V7WIPuOVa>XyE)sAsnv`qpMk zcVPIsq!N2gzmr5mf#4;=)qzDHyab2$d%<5sa06$5vMI~@;C6P+@<1RTpWD)D2N%s|a5_J$Hs+%YuZ8(T1E zzXNKXKJ#C^#h13C_^hR{EXc(EPKm9mkp0X4OO&ILEG7lWpM3v@m_jZrw)!)zVxAp+ z4EnICyz9240qYyF*I7UrBgKaIH33mb+yQu%zUUx)>6XbciD^aX84Z(W_NGgCXcIcf zc(vAIOMeo38yq`B_yu(5*|W&~Tr+&hm~teZuuQigNZfEzy`=!}T?zSs;u!FydL`g? z&zhN?tMB6nv&T*#lJ){*N1B2Prq;ND!cCCJ*5ER!g+Cwy!Gz8X!NoOB-oJ3TFAFRG z9v)02QZ7FP7#8AR=MFJ7a|$ZX+bw!gBuCj-r6KIGC7HM9tsQT z@~?<;qe}7xz(%O+prbB8R*6e+@BkMA-(yZ3&Ie}5^|asqAuuEd-iHhQJ-f|7MHa&&=mPgn z2Lo|K0Ti$jl_T0r4$;femAc@m+{B;l@d88LwBcZTo$?*PnbDPtQkYgo~{-<%1ce>M(u1K{vqLtikMP7Thm zmW@P&!N(jMzH%>N^zmktV<FB+$aN_kei-v zp#nfw6p9UV-4A>XaM;NKC_mzRz7x1+3rDcVFt`GGFPG3b6+DVO=6T4Tau1+E@5kT> zLx{;_MD>YrA>gQHY_#^|SHyvFl)>UKRkgBU?gjMe!Ug`rVED3Os0<)J{~k#jB$dL+ i{?DJcwRs;7m5`Jp@uhhBy}MYI_#nJ#Z+o53<^Kl=6XBQu literal 0 HcmV?d00001 diff --git a/sites/all/libraries/ckeditor/samples/assets/uilanguages/languages.js b/sites/all/libraries/ckeditor/samples/assets/uilanguages/languages.js new file mode 100644 index 0000000000..df9c682dd7 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/assets/uilanguages/languages.js @@ -0,0 +1,7 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +var CKEDITOR_LANGS=function(){var c={af:"Afrikaans",ar:"Arabic",bg:"Bulgarian",bn:"Bengali/Bangla",bs:"Bosnian",ca:"Catalan",cs:"Czech",cy:"Welsh",da:"Danish",de:"German",el:"Greek",en:"English","en-au":"English (Australia)","en-ca":"English (Canadian)","en-gb":"English (United Kingdom)",eo:"Esperanto",es:"Spanish",et:"Estonian",eu:"Basque",fa:"Persian",fi:"Finnish",fo:"Faroese",fr:"French","fr-ca":"French (Canada)",gl:"Galician",gu:"Gujarati",he:"Hebrew",hi:"Hindi",hr:"Croatian",hu:"Hungarian",id:"Indonesian", +is:"Icelandic",it:"Italian",ja:"Japanese",ka:"Georgian",km:"Khmer",ko:"Korean",ku:"Kurdish",lt:"Lithuanian",lv:"Latvian",mk:"Macedonian",mn:"Mongolian",ms:"Malay",nb:"Norwegian Bokmal",nl:"Dutch",no:"Norwegian",pl:"Polish",pt:"Portuguese (Portugal)","pt-br":"Portuguese (Brazil)",ro:"Romanian",ru:"Russian",si:"Sinhala",sk:"Slovak",sq:"Albanian",sl:"Slovenian",sr:"Serbian (Cyrillic)","sr-latn":"Serbian (Latin)",sv:"Swedish",th:"Thai",tr:"Turkish",tt:"Tatar",ug:"Uighur",uk:"Ukrainian",vi:"Vietnamese", +zh:"Chinese Traditional","zh-cn":"Chinese Simplified"},b=[],a;for(a in CKEDITOR.lang.languages)b.push({code:a,name:c[a]||a});b.sort(function(a,b){return a.name + + + + + Data Filtering — CKEditor Sample + + + + + +

      + CKEditor Samples » Data Filtering and Features Activation +

      +
      +

      + This sample page demonstrates the idea of Advanced Content Filter + (ACF), a sophisticated + tool that takes control over what kind of data is accepted by the editor and what + kind of output is produced. +

      +

      When and what is being filtered?

      +

      + ACF controls + every single source of data that comes to the editor. + It process both HTML that is inserted manually (i.e. pasted by the user) + and programmatically like: +

      +
      +editor.setData( '<p>Hello world!</p>' );
      +
      +

      + ACF discards invalid, + useless HTML tags and attributes so the editor remains "clean" during + runtime. ACF behaviour + can be configured and adjusted for a particular case to prevent the + output HTML (i.e. in CMS systems) from being polluted. + + This kind of filtering is a first, client-side line of defense + against "tag soups", + the tool that precisely restricts which tags, attributes and styles + are allowed (desired). When properly configured, ACF + is an easy and fast way to produce a high-quality, intentionally filtered HTML. +

      + +

      How to configure or disable ACF?

      +

      + Advanced Content Filter is enabled by default, working in "automatic mode", yet + it provides a set of easy rules that allow adjusting filtering rules + and disabling the entire feature when necessary. The config property + responsible for this feature is config.allowedContent. +

      +

      + By "automatic mode" is meant that loaded plugins decide which kind + of content is enabled and which is not. For example, if the link + plugin is loaded it implies that <a> tag is + automatically allowed. Each plugin is given a set + of predefined ACF rules + that control the editor until + config.allowedContent + is defined manually. +

      +

      + Let's assume our intention is to restrict the editor to accept (produce) paragraphs + only: no attributes, no styles, no other tags. + With ACF + this is very simple. Basically set + config.allowedContent to 'p': +

      +
      +var editor = CKEDITOR.replace( textarea_id, {
      +	allowedContent: 'p'
      +} );
      +
      +

      + Now try to play with allowed content: +

      +
      +// Trying to insert disallowed tag and attribute.
      +editor.setData( '<p style="color: red">Hello <em>world</em>!</p>' );
      +alert( editor.getData() );
      +
      +// Filtered data is returned.
      +"<p>Hello world!</p>"
      +
      +

      + What happened? Since config.allowedContent: 'p' is set the editor assumes + that only plain <p> are accepted. Nothing more. This is why + style attribute and <em> tag are gone. The same + filtering would happen if we pasted disallowed HTML into this editor. +

      +

      + This is just a small sample of what ACF + can do. To know more, please refer to the sample section below and + the official Advanced Content Filter guide. +

      +

      + You may, of course, want CKEditor to avoid filtering of any kind. + To get rid of ACF, + basically set + config.allowedContent to true like this: +

      +
      +CKEDITOR.replace( textarea_id, {
      +	allowedContent: true
      +} );
      +
      + +

      Beyond data flow: Features activation

      +

      + ACF is far more than + I/O control: the entire + UI of the editor is adjusted to what + filters restrict. For example: if <a> tag is + disallowed + by ACF, + then accordingly link command, toolbar button and link dialog + are also disabled. Editor is smart: it knows which features must be + removed from the interface to match filtering rules. +

      +

      + CKEditor can be far more specific. If <a> tag is + allowed by filtering rules to be used but it is restricted + to have only one attribute (href) + config.allowedContent = 'a[!href]', then + "Target" tab of the link dialog is automatically disabled as target + attribute isn't included in ACF rules + for <a>. This behaviour applies to dialog fields, context + menus and toolbar buttons. +

      + +

      Sample configurations

      +

      + There are several editor instances below that present different + ACF setups. All of them, + except the last inline instance, share the same HTML content to visualize + how different filtering rules affect the same input data. +

      +
      + +
      + +
      +

      + This editor is using default configuration ("automatic mode"). It means that + + config.allowedContent is defined by loaded plugins. + Each plugin extends filtering rules to make it's own associated content + available for the user. +

      +
      + + + +
      + +
      + +
      + +
      +

      + This editor is using a custom configuration for + ACF: +

      +
      +CKEDITOR.replace( 'editor2', {
      +	allowedContent:
      +		'h1 h2 h3 p blockquote strong em;' +
      +		'a[!href];' +
      +		'img(left,right)[!src,alt,width,height];' +
      +		'table tr th td caption;' +
      +		'span{!font-family};' +'
      +		'span{!color};' +
      +		'span(!marker);' +
      +		'del ins'
      +} );
      +
      +

      + The following rules may require additional explanation: +

      +
        +
      • + h1 h2 h3 p blockquote strong em - These tags + are accepted by the editor. Any tag attributes will be discarded. +
      • +
      • + a[!href] - href attribute is obligatory + for <a> tag. Tags without this attribute + are disarded. No other attribute will be accepted. +
      • +
      • + img(left,right)[!src,alt,width,height] - src + attribute is obligatory for <img> tag. + alt, width, height + and class attributes are accepted but + class must be either class="left" + or class="right" +
      • +
      • + table tr th td caption - These tags + are accepted by the editor. Any tag attributes will be discarded. +
      • +
      • + span{!font-family}, span{!color}, + span(!marker) - <span> tags + will be accepted if either font-family or + color style is set or class="marker" + is present. +
      • +
      • + del ins - These tags + are accepted by the editor. Any tag attributes will be discarded. +
      • +
      +

      + Please note that UI of the + editor is different. It's a response to what happened to the filters. + Since text-align isn't allowed, the align toolbar is gone. + The same thing happened to subscript/superscript, strike, underline + (<u>, <sub>, <sup> + are disallowed by + config.allowedContent) and many other buttons. +

      +
      + + +
      + +
      + +
      + +
      +

      + This editor is using a custom configuration for + ACF. + Note that filters can be configured as an object literal + as an alternative to a string-based definition. +

      +
      +CKEDITOR.replace( 'editor3', {
      +	allowedContent: {
      +		'b i ul ol big small': true,
      +		'h1 h2 h3 p blockquote li': {
      +			styles: 'text-align'
      +		},
      +		a: { attributes: '!href,target' },
      +		img: {
      +			attributes: '!src,alt',
      +			styles: 'width,height',
      +			classes: 'left,right'
      +		}
      +	}
      +} );
      +
      +
      + + +
      + +
      + +
      + +
      +

      + This editor is using a custom set of plugins and buttons. +

      +
      +CKEDITOR.replace( 'editor4', {
      +	removePlugins: 'bidi,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley',
      +	removeButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image',
      +	format_tags: 'p;h1;h2;h3;pre;address'
      +} );
      +
      +

      + As you can see, removing plugins and buttons implies filtering. + Several tags are not allowed in the editor because there's no + plugin/button that is responsible for creating and editing this + kind of content (for example: the image is missing because + of removeButtons: 'Image'). The conclusion is that + ACF works "backwards" + as well: modifying UI + elements is changing allowed content rules. +

      +
      + + +
      + +
      + +
      + +
      +

      + This editor is built on editable <h1> element. + ACF takes care of + what can be included in <h1>. Note that there + are no block styles in Styles combo. Also why lists, indentation, + blockquote, div, form and other buttons are missing. +

      +

      + ACF makes sure that + no disallowed tags will come to <h1> so the final + markup is valid. If the user tried to paste some invalid HTML + into this editor (let's say a list), it would be automatically + converted into plain text. +

      +
      +

      + Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. +

      +
      + + + + diff --git a/sites/all/libraries/ckeditor/samples/divreplace.html b/sites/all/libraries/ckeditor/samples/divreplace.html new file mode 100644 index 0000000000..388f5a94de --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/divreplace.html @@ -0,0 +1,141 @@ + + + + + + Replace DIV — CKEditor Sample + + + + + + +

      + CKEditor Samples » Replace DIV with CKEditor on the Fly +

      +
      +

      + This sample shows how to automatically replace <div> elements + with a CKEditor instance on the fly, following user's doubleclick. The content + that was previously placed inside the <div> element will now + be moved into CKEditor editing area. +

      +

      + For details on how to create this setup check the source code of this sample page. +

      +
      +

      + Double-click any of the following <div> elements to transform them into + editor instances. +

      +
      +

      + Part 1 +

      +

      + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. +

      +
      +
      +

      + Part 2 +

      +

      + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. +

      +

      + Donec velit. Mauris massa. Vestibulum non nulla. Nam suscipit arcu nec elit. Phasellus + sollicitudin iaculis ante. Ut non mauris et sapien tincidunt adipiscing. Vestibulum + vitae leo. Suspendisse nec mi tristique nulla laoreet vulputate. +

      +
      +
      +

      + Part 3 +

      +

      + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. +

      +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/index.html b/sites/all/libraries/ckeditor/samples/index.html new file mode 100644 index 0000000000..f5a2e988dd --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/index.html @@ -0,0 +1,128 @@ + + + + + + CKEditor Samples + + + +

      + CKEditor Samples +

      +
      +
      +

      + Basic Samples +

      +
      +
      Replace textarea elements by class name
      +
      Automatic replacement of all textarea elements of a given class with a CKEditor instance.
      + +
      Replace textarea elements by code
      +
      Replacement of textarea elements with CKEditor instances by using a JavaScript call.
      + +
      Create editors with jQuery
      +
      Creating standard and inline CKEditor instances with jQuery adapter.
      +
      + +

      + Basic Customization +

      +
      +
      User Interface color
      +
      Changing CKEditor User Interface color and adding a toolbar button that lets the user set the UI color.
      + +
      User Interface languages
      +
      Changing CKEditor User Interface language and adding a drop-down list that lets the user choose the UI language.
      +
      + + +

      Plugins

      +
      +
      Magicline plugin
      +
      Using the Magicline plugin to access difficult focus spaces.
      + +
      Full page support
      +
      CKEditor inserted with a JavaScript call and used to edit the whole page from <html> to </html>.
      +
      +
      +
      +

      + Inline Editing +

      +
      +
      Massive inline editor creation
      +
      Turn all elements with contentEditable = true attribute into inline editors.
      + +
      Convert element into an inline editor by code
      +
      Conversion of DOM elements into inline CKEditor instances by using a JavaScript call.
      + +
      Replace textarea with inline editor New!
      +
      A form with a textarea that is replaced by an inline editor at runtime.
      + + +
      + +

      + Advanced Samples +

      +
      +
      Data filtering and features activation New!
      +
      Data filtering and automatic features activation basing on configuration.
      + +
      Replace DIV elements on the fly
      +
      Transforming a div element into an instance of CKEditor with a mouse click.
      + +
      Append editor instances
      +
      Appending editor instances to existing DOM elements.
      + +
      Create and destroy editor instances for Ajax applications
      +
      Creating and destroying CKEditor instances on the fly and saving the contents entered into the editor window.
      + +
      Basic usage of the API
      +
      Using the CKEditor JavaScript API to interact with the editor at runtime.
      + +
      XHTML-compliant style
      +
      Configuring CKEditor to produce XHTML 1.1 compliant attributes and styles.
      + +
      Read-only mode
      +
      Using the readOnly API to block introducing changes to the editor contents.
      + +
      "Tab" key-based navigation
      +
      Navigating among editor instances with tab key.
      + + + +
      Using the JavaScript API to customize dialog windows
      +
      Using the dialog windows API to customize dialog windows without changing the original editor code.
      + +
      Using the "Enter" key in CKEditor
      +
      Configuring the behavior of Enter and Shift+Enter keys.
      + +
      Output for Flash
      +
      Configuring CKEditor to produce HTML code that can be used with Adobe Flash.
      + +
      Output HTML
      +
      Configuring CKEditor to produce legacy HTML 4 code.
      + +
      Toolbar Configurations
      +
      Configuring CKEditor to display full or custom toolbar layout.
      + +
      +
      +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/inlineall.html b/sites/all/libraries/ckeditor/samples/inlineall.html new file mode 100644 index 0000000000..9f767edd43 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/inlineall.html @@ -0,0 +1,311 @@ + + + + + + Massive inline editing — CKEditor Sample + + + + + + +
      +

      CKEditor Samples » Massive inline editing

      +
      +

      This sample page demonstrates the inline editing feature - CKEditor instances will be created automatically from page elements with contentEditable attribute set to value true:

      +
      <div contenteditable="true" > ... </div>
      +

      Click inside of any element below to start editing.

      +
      +
      +
      + +
      +
      +
      +

      + Fusce vitae porttitor +

      +

      + + Lorem ipsum dolor sit amet dolor. Duis blandit vestibulum faucibus a, tortor. + +

      +

      + Proin nunc justo felis mollis tincidunt, risus risus pede, posuere cubilia Curae, Nullam euismod, enim. Etiam nibh ultricies dolor ac dignissim erat volutpat. Vivamus fermentum nisl nulla sem in metus. Maecenas wisi. Donec nec erat volutpat. +

      +
      +

      + Fusce vitae porttitor a, euismod convallis nisl, blandit risus tortor, pretium. + Vehicula vitae, imperdiet vel, ornare enim vel sodales rutrum +

      +
      +
      +

      + Libero nunc, rhoncus ante ipsum non ipsum. Nunc eleifend pede turpis id sollicitudin fringilla. Phasellus ultrices, velit ac arcu. +

      +
      +

      Pellentesque nunc. Donec suscipit erat. Pellentesque habitant morbi tristique ullamcorper.

      +

      Mauris mattis feugiat lectus nec mauris. Nullam vitae ante.

      +
      +
      +
      +
      +

      + Integer condimentum sit amet +

      +

      + Aenean nonummy a, mattis varius. Cras aliquet. + Praesent magna non mattis ac, rhoncus nunc, rhoncus eget, cursus pulvinar mollis.

      +

      Proin id nibh. Sed eu libero posuere sed, lectus. Phasellus dui gravida gravida feugiat mattis ac, felis.

      +

      Integer condimentum sit amet, tempor elit odio, a dolor non ante at sapien. Sed ac lectus. Nulla ligula quis eleifend mi, id leo velit pede cursus arcu id nulla ac lectus. Phasellus vestibulum. Nunc viverra enim quis diam.

      +
      +
      +

      + Praesent wisi accumsan sit amet nibh +

      +

      Donec ullamcorper, risus tortor, pretium porttitor. Morbi quam quis lectus non leo.

      +

      Integer faucibus scelerisque. Proin faucibus at, aliquet vulputate, odio at eros. Fusce gravida, erat vitae augue. Fusce urna fringilla gravida.

      +

      In hac habitasse platea dictumst. Praesent wisi accumsan sit amet nibh. Maecenas orci luctus a, lacinia quam sem, posuere commodo, odio condimentum tempor, pede semper risus. Suspendisse pede. In hac habitasse platea dictumst. Nam sed laoreet sit amet erat. Integer.

      +
      +
      +
      +
      +

      + CKEditor logo +

      +

      Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi.

      +

      + Nullam laoreet vel consectetuer tellus suscipit +

      +
        +
      • Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis.
      • +
      • Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi.
      • +
      • Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.
      • +
      +

      Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus.

      +

      Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis.

      +

      Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi. Sed in nonummy faucibus turpis. Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.

      +
      +
      +
      +
      + Tags of this article: +

      + inline, editing, floating, CKEditor +

      +
      +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/inlinebycode.html b/sites/all/libraries/ckeditor/samples/inlinebycode.html new file mode 100644 index 0000000000..d40edac5fb --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/inlinebycode.html @@ -0,0 +1,121 @@ + + + + + + Inline Editing by Code — CKEditor Sample + + + + + +

      + CKEditor Samples » Inline Editing by Code +

      +
      +

      + This sample shows how to create an inline editor instance of CKEditor. It is created + with a JavaScript call using the following code: +

      +
      +// This property tells CKEditor to not activate every element with contenteditable=true element.
      +CKEDITOR.disableAutoInline = true;
      +
      +var editor = CKEDITOR.inline( document.getElementById( 'editable' ) );
      +
      +

      + Note that editable in the code above is the id + attribute of the <div> element to be converted into an inline instance. +

      +
      +
      +

      Saturn V carrying Apollo 11 Apollo 11

      + +

      Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

      + +

      Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.

      + +

      Broadcasting and quotes

      + +

      Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

      + +
      +

      One small step for [a] man, one giant leap for mankind.

      +
      + +

      Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

      + +
      +

      [...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

      +
      + +

      Technical details

      + + + + + + + + + + + + + + + + + + + + + + + +
      Mission crew
      PositionAstronaut
      CommanderNeil A. Armstrong
      Command Module PilotMichael Collins
      Lunar Module PilotEdwin "Buzz" E. Aldrin, Jr.
      + +

      Launched by a Saturn V rocket from Kennedy Space Center in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of NASA's Apollo program. The Apollo spacecraft had three parts:

      + +
        +
      1. Command Module with a cabin for the three astronauts which was the only part which landed back on Earth
      2. +
      3. Service Module which supported the Command Module with propulsion, electrical power, oxygen and water
      4. +
      5. Lunar Module for landing on the Moon.
      6. +
      + +

      After being sent to the Moon by the Saturn V's upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the Sea of Tranquility. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the Pacific Ocean on July 24.

      + +
      +

      Source: Wikipedia.org

      +
      + + + + + diff --git a/sites/all/libraries/ckeditor/samples/inlinetextarea.html b/sites/all/libraries/ckeditor/samples/inlinetextarea.html new file mode 100644 index 0000000000..7fba43eaf4 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/inlinetextarea.html @@ -0,0 +1,110 @@ + + + + + + Replace Textarea with Inline Editor — CKEditor Sample + + + + + +

      + CKEditor Samples » Replace Textarea with Inline Editor +

      +
      +

      + You can also create an inline editor from a textarea + element. In this case the textarea will be replaced + by a div element with inline editing enabled. +

      +
      +// "article-body" is the name of a textarea element.
      +var editor = CKEDITOR.inline( 'article-body' );
      +
      +
      +
      +

      This is a sample form with some fields

      +

      + Title:
      +

      +

      + Article Body (Textarea converted to CKEditor):
      + +

      +

      + +

      +
      + + + + + diff --git a/sites/all/libraries/ckeditor/samples/jquery.html b/sites/all/libraries/ckeditor/samples/jquery.html new file mode 100644 index 0000000000..c34a64222b --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/jquery.html @@ -0,0 +1,100 @@ + + + + + + jQuery Adapter — CKEditor Sample + + + + + + + + +

      + CKEditor Samples » Create Editors with jQuery +

      +
      +
      +

      + This sample shows how to use the jQuery adapter. + Note that you have to include both CKEditor and jQuery scripts before including the adapter. +

      + +
      +<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
      +<script src="/ckeditor/ckeditor.js"></script>
      +<script src="/ckeditor/adapters/jquery.js"></script>
      +
      + +

      Then you can replace HTML elements with a CKEditor instance using the ckeditor() method.

      + +
      +$( document ).ready( function() {
      +	$( 'textarea#editor1' ).ckeditor();
      +} );
      +
      +
      + +

      Inline Example

      + +
      +

      Saturn V carrying Apollo 11Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

      +

      Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth. +

      Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

      +

      One small step for [a] man, one giant leap for mankind.

      Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

      [...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

      +
      + +
      + +

      Classic (iframe-based) Example

      + + + +

      + + + + + +

      +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/plugins/dialog/assets/my_dialog.js b/sites/all/libraries/ckeditor/samples/plugins/dialog/assets/my_dialog.js new file mode 100644 index 0000000000..54f747c21b --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/dialog/assets/my_dialog.js @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +CKEDITOR.dialog.add( 'myDialog', function() { + return { + title: 'My Dialog', + minWidth: 400, + minHeight: 200, + contents: [ + { + id: 'tab1', + label: 'First Tab', + title: 'First Tab', + elements: [ + { + id: 'input1', + type: 'text', + label: 'Text Field' + }, + { + id: 'select1', + type: 'select', + label: 'Select Field', + items: [ + [ 'option1', 'value1' ], + [ 'option2', 'value2' ] + ] + } + ] + }, + { + id: 'tab2', + label: 'Second Tab', + title: 'Second Tab', + elements: [ + { + id: 'button1', + type: 'button', + label: 'Button Field' + } + ] + } + ] + }; +} ); + diff --git a/sites/all/libraries/ckeditor/samples/plugins/dialog/dialog.html b/sites/all/libraries/ckeditor/samples/plugins/dialog/dialog.html new file mode 100644 index 0000000000..a88cbe276d --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/dialog/dialog.html @@ -0,0 +1,187 @@ + + + + + + Using API to Customize Dialog Windows — CKEditor Sample + + + + + + + + + +

      + CKEditor Samples » Using CKEditor Dialog API +

      +
      +

      + This sample shows how to use the + CKEditor Dialog API + to customize CKEditor dialog windows without changing the original editor code. + The following customizations are being done in the example below: +

      +

      + For details on how to create this setup check the source code of this sample page. +

      +
      +

      A custom dialog is added to the editors using the pluginsLoaded event, from an external dialog definition file:

      +
        +
      1. Creating a custom dialog window – "My Dialog" dialog window opened with the "My Dialog" toolbar button.
      2. +
      3. Creating a custom button – Add button to open the dialog with "My Dialog" toolbar button.
      4. +
      + + +

      The below editor modify the dialog definition of the above added dialog using the dialogDefinition event:

      +
        +
      1. Adding dialog tab – Add new tab "My Tab" to dialog window.
      2. +
      3. Removing a dialog window tab – Remove "Second Tab" page from the dialog window.
      4. +
      5. Adding dialog window fields – Add "My Custom Field" to the dialog window.
      6. +
      7. Removing dialog window field – Remove "Select Field" selection field from the dialog window.
      8. +
      9. Setting default values for dialog window fields – Set default value of "Text Field" text field.
      10. +
      11. Setup initial focus for dialog window – Put initial focus on "My Custom Field" text field.
      12. +
      + + + + + diff --git a/sites/all/libraries/ckeditor/samples/plugins/enterkey/enterkey.html b/sites/all/libraries/ckeditor/samples/plugins/enterkey/enterkey.html new file mode 100644 index 0000000000..595a1ad29f --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/enterkey/enterkey.html @@ -0,0 +1,103 @@ + + + + + + ENTER Key Configuration — CKEditor Sample + + + + + + + + +

      + CKEditor Samples » ENTER Key Configuration +

      +
      +

      + This sample shows how to configure the Enter and Shift+Enter keys + to perform actions specified in the + enterMode + and shiftEnterMode + parameters, respectively. + You can choose from the following options: +

      +
        +
      • ENTER_P – new <p> paragraphs are created;
      • +
      • ENTER_BR – lines are broken with <br> elements;
      • +
      • ENTER_DIV – new <div> blocks are created.
      • +
      +

      + The sample code below shows how to configure CKEditor to create a <div> block when Enter key is pressed. +

      +
      +CKEDITOR.replace( 'textarea_id', {
      +	enterMode: CKEDITOR.ENTER_DIV
      +});
      +

      + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

      +
      +
      + When Enter is pressed:
      + +
      +
      + When Shift+Enter is pressed:
      + +
      +
      +
      +

      +
      + +

      +

      + +

      +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla b/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla new file mode 100644 index 0000000000000000000000000000000000000000..27e68ccd1cb7192c8bda2418d198d90f1aff10a7 GIT binary patch literal 85504 zcmeHw2YggT*Z$pXLX+M*5u`~Agc2Y$>C%e=N(~_aDG4MXp+-@<6j3A)Kv5BuDu{@b zC|x6{DAId*Y0^6+|L2*xbNBAuWOu`>|IhFDWnpse%sF#r=FFKs_uOCh*OHPmYZ*-8K6tk2PRprjCG_WH{79A?ZYUi6>A(LS66mN!;9s=nuQk<%01ne) zSe0J?@@sxZeN#UozZlc)i(&h6O(@>6QKuF)<(E3G)v zXPdCYd7FMC&|c3g*>`eEzor(TRY&^#TT>Ev_{;Q}uKIZ(7wC%kJGq>s{5$KPGDxa% zbKTOT_7>lK^}{PogC`6Wsp$28{ln#zSpWVAjHS@<`@8BtE#)7EbZdu+|T||L>@O>OR{P^B}pp|7)&)rMFKIHwi8iqOv?0;poo{m<8?`xU6v5;IhNz zfWr`=<$@#K|BoNjsf6?@!&QL`fU62u4K5I_IviUqTTU&wAh_Cab>Qm41;f>Ys}I)z zt|1(Gz5v)5t_fUIICc%q;n;n(gnJRL6&z{X0Jeo|2iG3116)VAPH>&!UV?iWt_xgO zxNdN-z`Y9B9j*slPqkl^o?lm|zq(N|l;fBCP!2KO^ zZ)56zf*`e;qW7yM{vrvFKlDF_?o$UmMgRfzwVmGoc|-4shUu!GC)$4kuhJ&`C-{5f z`QM~(_nYqXv1k>VwuucKzwM|Xo6ScXY11-Y?U6Y;U(*BG-&#Fs^|hP{ewkWnvvc`Q zm^wXSp8t=r6S7qHpV7O0^Ir?iD|dQw(eb6G?@g{-v`q5j@S+`}Pgg7cUZoFx?9cb9 zSMgBW*qqsC1qbEKKXdQGYnT7L*I~fJ($`8iN`9`#g}lcuuKZ%8~xTmfH2ni2FaknOOYV^7l7H%xt-8)yzF#AIWm=(u%i-{jqh%(r;p7Vy@1bcyDfl z^}eSU+`cmBw{yRSS38|_^P{YXVqVDbSJ1Ohs?BV*`0B1tYpp(*r|YJPT_6A1;o_Qe z%c75TpVfYR!Y?JhTYUW1Ym0nCibP*|x9I5P#M`!r$BQG*9_aq<@Lsc@yHft$KHs(7 z-Me?y;z3uQDY`LoNp!~ieQOo?r26RVd*+udbnTs$>wH5lHQn{x@S-&;559i7)~%gG zj+W08)ppPQ<(;bC?Y(CD@m>{6-OIn{ozZQ7%-MUWf8@a&L09bcuVkx#C3F2v88#j| z+2rC^pZkA&=eK(+qqlCpJ8+_J?!(6ef`|A2u|nMID-S=HT1HXwQrP(Jl+1}^*WIu$^P*N?GL{#613*>d7q1$K5tlO?C?**T43^kTGkr3 zAJDgbpYVR1%-OWe!r!`2Ouu2~fM&z`4Av=RjL!W=M*DHrhw)rG3=jIi&Okh~k7U2b zU*qQ`Y*!r6_G$us7<9C(*EPRJn0XFBZ^%AQldTAh^hpZC#Lvgf98sTXhK{=xI^KTT zNK7Khq@UXHn>oF+6FpYCkL}9~jhkqp1IoNFWSU=4VPW)o=7w&H?(E^Sz z`VX1fJOD#ZB!-(|Vv!Jr3hJXpVQ8wX%beLAA}X#j22a+4Bc!E1wI7Bdtq+E{ei(+c z;a|$NRvBEQk=h`mKK;=#`D-QdPsR(=hJ#~YPz?~v27lzFAAC)~JsPf@;Glfvk)}=-!F^N?bbtx_|(Mgvi=U4!^jCQ4CG8liosegkw{o#M31b!Sn?Tfh$$6T)e zMpk^XcU`_}7y3^Lek1tHlgkr>$22QmC%V~R`|4J@r%gM%{gVmx3yuD;>yWj> zZ@u$fyZgJQWGGwbO1?jSKHKEt<3Dm;ynk-?CmCwZSb6E*^}}C|%RPDUf!ZT3CG5Gk zv`yEC;U|t>d7)e6=}n0Z#y=VURm3h+g>mFfmZf#(3RWga$Q_~Bl5NVyE=Zc`0S?Q zUEcQ%S+b;W$A}&qy7sKF#XtG&P0RlCX2sx`o*iR%oG4be>^^N;{<1!kW@?ju-*s5Fr;iH+MkG98!g+J)OYF>P~tF?;n9kgc9 zOD}Ey;Lo;q<}|!?y+DDVN{lT~I$u!ttVNS-L1Vr@zdbx#+cCFSFV6FsZCa-f7mOcp zq(Yvx)B4p9_{QhX-NldgX0F@q<*vC`cR9Va@_SoLR9W-m_CA|h9BbXyH~XhoGn}2? zc+K!5!@n5U@%E_h`Et(+kNv20!s##1Hi_Swsp!&%wUXz?XF3*~apQxk3-Xlk&3?^Z zc4_aU_ecC1bEred!lRGu?fG8Q<^glxDi&4c=67ZH?OD3NK%1@WZ%-)p^LuYqEqx{5 zMXlocwQCNRIrGc!89u)D#ngK@4=)>+d)5itcuL`e$fV%aK{h_h`q4qj#Kb zGGJ}}1}paLpZ4YAyqk-6dE0l)%zpWP{4(LxPYKUnegDLfyFczfxjlS#V7ASpAAeUO zwAjeMN_SuEd#wB19FuOm-{^XUMGuoQ9`egtWn%I1elfXrzFVbK*&nvNvAN{c#~b5< z-aByl=B<$9NlTtT{?ovZAGY)#zWbR~zE|=MD|z+(Z`W^rq3GP$jQiX5m{mLB*Lnp@ zwe385$Bs#7^7kra?-8FPDZ16YE44p5)1=6>nBRsC9x~=w@y%Z@ehztj*{5Z(W-}-J zJZA47lNvvMTx?@p{i25}+#a}~e*A({+X~rA?A@0zv~Ta`Rn`o?;9oWT;%kp0bDz4_ zXOwTvT36oJvcJ0G=lACh95$!O^u;e9x_9$Zmj;;w7M0zz>&40sA_tA`m;Xw>rA-S~ zm|s7>$^EZ)9lVk6o!Y%}3|euw$Lb$%Ek5?k9{WchUyTWRW9X8HUk_Ln@Z{_3%M*Ie zKJd%F6$iS-m#cK(>?gI7o-F=CWb|#{YJYY8_Q#t8zuf%7)|z939u(O6L5|opy$;>T zw=;g%p{n7-PDgH!-!o-;?TFe@9p>8iuj>-j?789>x2?HwDroGKcTd%=@@+vo+GorQ z)U_R#iVjGM8S&Dl5B_WhO@47z?R`DYZ;P{Sz1tvm+tFuEygF|1&iFj<%v(FGw}xGc+{?Vxh0!JhAr7XX72lkdq0eNe{7ZTCsV5aykOtp{p))S z?Y=eXxA7=Z=gU zJZ#C%_>1kv6x;a0t;m8=H7}g%pBNVvnsGvrxJA2fbUTA$Y<=rVn<5(vjF~bb@!R)u zOsX@g-k?$kE9B3=U_ze0_4mCSwzyd0pvOBWy;QnxNWf>|-AnA~T(0?!9_6}T>9BR& z*gTU0Us?a!;JZ&gODH+C#hA()&#gbQu1dZ6-}L|f^7fTIzx%Cu{r!)#-MqK+MB=i) z>W#{qeE!=L8|yU~yZx)z-@5x_>r&@im)M*CKZpKEc&~Pj@Pg3+SMzI7sG}vss8Hl_DdSn%bDlb4WGZ-YumT$ zm(>f}cD~{1x5qTi9(crm?#Qui?tQuPz*irI%pTq*e!-Y!`~36A-MRKf{f#%4oZdSo z|In7*AJ6Oh`-NNI249GHL(5d~_Y+f(*P6Mf$I^PQyjFb1!^q=rZvE`~=^O`&cH2Lx z(`(0K>ouQyD{|iXMxXUP7JF`6OrENZmfB9Xtb4xb>Mq3(pV@WkSlui;PBxj+bGX*^ zXoIhhuQ>B_{fVQKUjD3dk9@BN=lHb#njK$#)VpflqBr9j_~k!#{7&*S`KN6AYIVUQ zt2-6=>Gf?fLDOqT72n(A`oIR6x>v0?ed`}Rhn{KDqt%`AA#c{-9)7y_oX8nhzW!z3 z<42`>&+l4&Y*3HDo6FaCx;189mxL)N8#gHX;{Ne}wfnL`_(uy`H~zL+z0ZT9&wSDT zaPPR@bv8B)4SjCcyoXtDMy#$`uVS+%^ES13k~nmE&!{=C9-mib#E+eO|9Wv-?JPaV z6dRFv{n+(W4Qpk5wN}Gp!O@SZJ~Mj!wu1W?m8!7Mzvu4iWo~ti&GSdkL*pL48F1uG zlXFc5+}t-dCff&N|2nX*{mRdee{wwAr(;%E8`3rU^y=WfE3)SQeBhq&-v>S(F+b*= zdj}(G75lkrp`Y4bIriDiaj&l!SbV}ehr0Iqw$)D;66fFYU3@t#NBIkvHW!+ZA;M z6nU}UH^^o6UGHBTe)Yhy6^mk4Eb03DwJ*Cy*1fr)OX>WF=7#LP8Z+vheKk&Wc=Te$ zEj21v?eJ5stzqA`-#6!#V|89Gv#r*)d226ji>Y~{!TB=}f3vOr;HPf;%WnRDX3Xlv zwX|(@YR!({-TCmOIh8(M|FCbs{t@{ztVULLF23@9vl7=@&Un1zz4nh*otvEFQrk=I zH^2Pr$9ble$=>+f(W$+EeZ1)L-nQ9K)fg8(E^5ac7x!0<>2RXQPkw8A+|PQh*RUmr ziXZXc^;`CrW_9tb(%T+52h{(&;BH`)aeRI^VY5`@?nnf61N8yUfsEP z*)Mu6sCpsW^jiy)+in~mbMWS=+sC30{t)uY_XFNp)%EU=8Q%{7q~MKat!ni;-K6)> zZ>m3z?6Tq7l6mDLiWYeByE6IPlqk8lQQbQ4)x2G#!r~3Z+En~%(}RUSjh?tZBBWgR zin)7TDez#!rVBT=B=uakDP+x(I)|>tm0z>={M@OvF9*jrD7o{Sj8(S`J5W30m3)`Z z=bGF+u+r{3ed7N!vvz}sBUKyMESBY9g_+mxT)x(*NL0nPZw)Dfxzu-`HhQ@7tvW;h z{Ps?bgI`zJG3|ETz$0gOw!hJ0c|gX?t6~-g=gD5CYnP!N3RS!`uVKvIE1gzHoo>74 zv#!-2@ysJ7?6=9N|+2@0yio zK;757EgpC%;PTYHeq)0ET)uDp;YF{X^u3zznMpOv`b?|a=~CM)7wcZC`)-bHe|-GP zpE1>AW?yJqq)y)8i4&SWtUI}BRK@dG=G=<7)cru!p*bs8>G)@bmGM_IK3Z_U^!Qs_ zLS{e7@$#0Ee~zs+WKXVv#j}qIIxsG1b(anI>=#Z1XCD9Y!`wBtoc?NQm6Lz|wdKaF zPe0f{b8)uq@nr|y+qI<4=+d8^U9!Ah%-p+E_e|-ST%vB^<;@#Q#^3WFpKDs;-h!=y zuC895XWFLxm5UF|lYhcHP0N2X^^@B@TO}2~J}~fnB0IG46APZma)0@Xv2j^T%-B17 z__W&lCpA72cX9oyXMAqFKfGz_7ao7zYwRzD%T}&?cJ0pT6Nk)wc(LvqJBsDL^Zks- zGjG%h%lgNGY-P&Us`%BQppjWKPV3UKd4(<;Pks7D^ty)yChQ43dU?;_&w@)9j>6>O zY?EPqSJ(b(NY(I#rCN=z`D9ws{TJtUPkw33+xrfUp7HCdN`o65sba78)!@-P3YUF1 z&y>cW-y0X!ar?=)B9Cu7yEF1k<>fymUhvyi^4i-|cSWw=J)&FEiw7(B>$7Ib`e}y~ zzxepe!qe7tC|2jys1hjI(GSXhzvyyg-JR3xG(T{*$(_<0mls(bH2dU&^_L4?IMsE_ z_OHvf`tXBRtxL=}Tp@q<%l1hfN`(4MJF@>$aN)a)a-ZKc`KyrV$4RZX&z(_Y_{uij zy8d40+@ZizAsvQ(KkD3}+^6nG|GqPG&HU$X#h+>0DqzO=A8%glTqFO3|7_Z_c--hi z!9{1}!B{!&c=>_H8U~EsF}?P{P15S6ia4~3X)w2!P7TpzxVR2!(nI*RED0!sw!j^+(Ma9oMTjOxyQ75K6 zd#>T>iC3$B-eY^xhCUPb`IlH*DI|XI{ecgY`@MSZ!Ny~UYaCg&JLZ)S3e4T`*Gu;r zT)!IGGo;(ysVj?Yc&jlolrRZH+3!EMzSpn#(6wE*pWc4&`zaN^X?6C;h)@6e?!?Y! z>n^sR{ra=tT)f|5@cf%IUc2?)u4(ANt}h$2EuwqRnp;0T{rU1bXE(IJ+W+n!E2^9i zoYMT8YGEZNcPaZ#&+^57u3xt4%uUB`4y@aEZ;pc_T9j}5R+V4Z?ESWLVqE;e0fT28 z&D=J0%-c1e$#XT|oIIymRlk~VMxG~K#}w$={l@TN+vn}M@@msO4`%jlzCV1$ywK?r z??uNi+m|Wdw2IdzHa}3_x5~96^G_Vw?sw$5n)esJziM5@RRaz|5$crrW=*}pllJZ3 ze&UVKle^6b9#p@}Pd7)FUbB1b`X2XY|52~SUyTQ~zi?{9J9+j@sWqr}#eLxgGLM}y zzhK{I%a$3m_s@B^`rUo8eB0Y+a&|pBH}}v#qi;RgeCu$jHxmCE|LU3b->e_==GbBN zn~iuF`7ok>$sE_}J$t)!wZ9UZJbF-LIvCz9+ATcs!MmGtUq97VG{XxE2k*)CO_%=l zT3me)QsZ8mPDkpmN%&(`z2Y|pES(v<>+RKj=Z3V)yf<^-k{R}|9&z&fV+R+H?z`wn z(QZFY>bq~-n%YAPoT<=ubkmYmhAycRa_I29$<5llwsPI(S`}LPWPT?@w&6!!J@VVn zuP0>O`)!Wy7vgOtg8J^=wmyH*pS3^ustYu~@{N33H=n+Ds%w0v(QlvGK7I0oR(HdaWM5_rOM5@|M;g9IEi?pV=bockMl6dAt8AOyaMYuwKUFz0VSAxonJ;bowZ_<_uRCWyR&?H^ z#zn)L)Zbe1+r0-zpDq=$D%)q{dme)L&i>W+th2K9*7bdRmFYWUQ169-!=rkBeD2HrON#dj zs&VuD_Q(shJ1vcOc| zjthQnn|b-gwHHpEtug-5wBL6IUMSr(Td{n3etqsgTbh5g?%Mk|p36DI_jIXMQ(H}* zy7i4ikG59%VRn3%19M{4(Lm>(KEr=$(&Ox?-5qv!*N*1=HdnP;Q~NfYSLD~Bk-Lv( zt-W(^{Cn3DN6kDpuiK1?GPC2llYUhc2Sr9<8+QfR2{N{!t| zqdzY&tmv>_XUFY+GW*Qc#HgN^CnP4Xe*0XvYtM(S|211&Q0e;l7Hkh*b8UO+@ns)x z9y#)@oUip>QaSqOMH8 zBecQ&BPS!?+M4fN^BmK1Hp|xL@%ru0?V32X)wt0iu^Zp5GpA_NVlS?IE+SXp(k*4? z?jHR8SC>LV=FjWfWBs{$lZ-2~!)~{AN<4OdriH^L3xeokHH|TQltR`vsqU zd2+X~8CR?4**5>q{Nml_-pLz2XxiYLuP20G?^gW0zi*Y8+}EEw*)m~H!xbMSjMqvw zufAW?O0~xpZ3s3$xv|+Fr>Fz4_1hj>#1Ys;=Eg9$ZujZTI&*7}lh@{{a%%$4+)`yKDeww#=G9DWX%9vYqEqD;_HELrKjOb$(u{i1yUM<4eX|_Xl{bAwOIJxPown;0nVPfh!7E435V?JiAt|B>bh|o`Wk5R|c*u z98Z7B!|~WC5{~()1o(HK|C8_k)*od^*>jIS8g4k;2)NhbM#Awn*C@EraAV-c!i|F) z4;Ksfcbxz8Xo{zRlp%n}pD!rX`9JT!RD%y6^>hE}P`=RfJ^ zKk4T`>E}P`=RfJ^Kk4T`>E}P`=RfJ^Kk4T`>E}P`=RfJ^KWRAs5f}b>=D-W^DV)UE z0#Z2F>3|FW?#_sYi|g^Bc)cSU@7eL9KhKeP-U4p?$HR-hPKbe`$Zk}V2)1dtaJZbuS9r8HcsPvTGpGogcsm;X z7VE2;mg72~Om6|QDje?wwh`}EYYh=Oxg=SDgX7&m!GkF9a=al(UuSV2z#qM~9FZb$ zF3R)oaE-5D$(IKGLBm(t{BdugAN~!&lRWtk#c3*ES_?%8 zi58E`0LY2)vuW=FHC^uvYywBTa(EOSCaY49B%;SQFjyE5|4o>K37%pNpBLQ|Z!ySs z-Zky^?b}dak-=p3LOaZXuyhE&hnJ|gw5nDc>XyHZElkUcn-IA$2p7nUD-s!a#UU^H zwp%!9{<1pWFx-$q8S6co1Ax_` z6oKd_KEVBxc)$%=FeOn05GF__g2ZMZk?YA&w3WDH(jD*)n$q)t-BCL?5dRdQT@k>d z15kw!WHXS+hN9a5`Y_x}$%MSb0-it~DgoLRfy~n92(lSS#2*W$V`2Xy4)ADhP5TV6 z8nl3LEV??oB9K8-(G%JXB;qT&rJ#Qw%_JW1Q{0t2LS&< z27d!Qgo54xv?~JKWGSI(KOo3vAT{knmCmg)Ktee_LVl=6Dw9;IhnpfqR8rT3gQ+4^WPD-G+(1M0ILGN3z-u7C;~?iVkvA-P*j6kg<5mQIwtriB+92A6~EIUVyn6hxCKz<*RBXO?HW)A1RsS&@lQZi z;t=>8kjnsH0{j+GC2v;*kO@$$M0|y$tpr^}mx0`kUTqs-G;YyNrXMZCt_U>kB!XT9 z33>$`3B^;7Z4guxy-H!gDD+B7neB=I$_Z36RKLwYBL8na3#Q1_N2OrY1~4DWGZ;{1 z+pY-EDxQO#8}ZUKWcJkQrvO zG&zA8t(=tU@zI-^+1j*EGiX{uCh);8w~!I~S#&Ju8WQ+dWcDAL>kIDBq-|&9|276WA0$!}?N=phR|J~&ACe#$n}J09#bwby zB5*rkGc;)%+S-oHu(t(x8uegT1n8DQQVS)w8A!zMiTngc13{nK{6dAHX~6qgk_-5jP7JCU|+~? z6yO^uzsj~<5ul2InkBj>g~U*&9vgv2myDYB3kbph_e0o&0bhh{2IL=;vKdI2 zZBumlA-f?!hC|pvfJ%Msia^dNNMbXPkfV}Ug04HCLYLZtNF{4m1jr_I=tU73fkdyR(60bl0(v+AuoU139loK5+Z6$- z2|=Yrdr(NoQ$0QpWF{c%0_Fj11y}@7MYk&gOr?M-B={&KR7gE4e)B=Z_OTrBAu_M> zYgYuA`va9*@KHz<{e!Za_6O*X0-goT2BJHFDtWsifck;tGEg=HiKe0C_c7x6qJJ3; zxEi|Mkbd+#c0~ZaK+r@nbx=r59n_;AkX=!?zabG0y-F?ZiU1=cP;ZL*AQOrYrw7x5Jm z@x2*3TcTX*XC4Vu7$L(`9uI(wl}_vxD!Wr5*nk%bm2Ad#vefUI7BR-m3%1L10 zF#WtK(v8862*~=bG+Att1AhA7|Em&s%KcwyA+A&ZK9Mj8=R7UM=28xmZoh};skf7p zOW;(=4+9mv56Amse@Mg5mu6d3sDH-!N$_AS!`3T$8*H%pXfNl*pW<3Ztzy8*r1jh= z`%62gUC_R*u07BW+)Tcd6oB`O9%}(-IUx;btrfLt0mT)co?5_qwyuEH$;APg>IKX< zYJ*lmuBmsyub_`YID*h4Dy)Jg`EoOzd-#4-~qrffZR~DD+26DAm}WDYz7kX72WGV zGWWv)2kNjA<0}G*njzwoh)C=vsK=Bb^_<~^K8nB*gy;&Zpi+JXMJz^lG#EU3-_E(@ zbF}k&@c0+qkWp)>)eEzYLQ_ZM(*l+!=eObcKAx*eJ!E7wq5(F zN%G^Q>R7?A+mgH`iCx1F=m=(W_xxvA$ivjcUptF;7!T&vDrvWIL~}bQRcLNWLE@O zt|6$1h_8?!RgcwyTmbs=fciSZSIM7@b1n;;?*KhpD&&<+>?cpMd94{!^hT@gr< zYY4I#NW@oktw6sJ$ew_20*(Y6%=n4`yGaO|CgLk3;;Y9QK)wPbi`xcpCty>?R|J@| zBB+CiuaM|9)#F(p>j9Y+l|;p@r$f6Uz;FW+qL6$5Mn8;f*ti(3i>DnOiJr0#8Qu?^dKAHKBRRO#W@9NR|HtmC=vsS_=@fj z=x>64FJKPTG+_{+T@lEjMSO{>N4(*Bn4Mq>L8A!xebPE2W6DjDU5LgiFD8y2a3N8hT?OZ`0g>VERmclB? zYGf=0eH6kGgjnA9i|CXg9P|9=7yoxN^tP?{(E`SC_7boqsrM5c5o#YIwX1&6hgD9Ahap7|(sA)u=u@&@j#8E*IvJq&ZRwVtAhnC2mf<6l22*NU7 zVHGS0ZmeMieH6kGgm$H{R@en;GPZ&~iog+sp+yBMDg`Nz&bq7#eH20pm_fR%%~XuV zG!+!Gmb5BJk7cG}<Tf#pf5oLX;$hz}n;fudxGya*qnX6^tU1pGyZeu}_BV$*H|c?Co` zx6;XMMg#<^xGQwzV!-<#UkJ#w{1gG^lt%n7@N`-5BssHUGa`VeimRZ?mV!PCA@j*( zpy~{4ipLKD`vZOt$jSKy9r`H(>{cSECr~!+Ydj6Y6U3~O;e1qo0#Eg5M~#zLVZdm> z06QTYEKvDM;^ic>$5Mn8;Kd5;onv4vs13aojyCT5c5F|v| z3?$+!x(Pacd%!n9L|7TnPZ40=u9Mib;dtU~QIfH6uzapZ&;uElK~#qrz$Jjc>(I|Z z%cpyyP9yQO4^Nu*o=#>nA|O!3EssKwS4+UNIxNk6Dgrccoy4Y9#?w!NC&~Z9lTAcq z1PlfYAbB0N4z$8K7MeNRp}uvKdHCdqL4zp;8_NeH4LIS1KNU-ghC~!{g{D zyAW<8TrU%v!B>0egT8?C{ha7Q4&yHeP`2ud+DffrUhNln*JwxbVo7lr4n0J&mVka| zeqQZa^cWq9ss@^-TCtoWfdI%f34A&tu)r(HD{bI=O}nn0&5PdQ4ptL)@?u*8yS7^X zyxL79byKU(Zs%EaA2ssgPaYUBL3aZA;cHnS&W2dI#G#|MN$z=+#%6wI2;f=3Td0s6 zfTscPA`YRSBEZ-W6uSqTmJd%?@q__QC$||95UAq*qVw1cXh#}^Tx9qu0!=%jli0MM z@I>yCEGx)tMg%>Oamk}A;C?{1<~us{Q_Lkv8xcPd$Ub5$xJL_na5n+=5^(jPDs zkVPf~KScoL&`E4sUOWu|Qi@FWL@ELTM*+=tuV6LZub_`Y;QUob;o6XTRImzAQ@}+* zABAuPAuWYfu#z52K_7*{8cRnZE%jIoK}(Uw6A0;RKvo5zT@m2$9V8608Au37(Jj>J z2Li@|h*0!Uia^u8)JbgGbUeu(ie#?|o+<)Lq8?uZlJ~Jb0{j^8qz?TQ0pcP^_8c?t zv|DJ*DxJ(`L;z0}*M>rnS7E?afUK+pK)WK4hwLP=8A!xebPATy<0bHKHW)J__P8q%h@SHH6TPRz%NICkM%md8&G2&wj($QPg>VF6 z1W{Nkd<9O z;3s?)&`%LyS*(-TwD0jWO5~bkL-2%IlpX;*)g$2xK<)wz06e2ZKSdx(TZs5S02z!Y znGVTqMg#<^xU}*`Bqqv&H=)RsAc5ZgL{$}^JVGv zvCLFtO}~O776TkXrbk6Z*aS^SL6Jj8ETS+NC@dkz|J8uQ0C(%qPZ3B)J%F-_lj(2~ zf4xp-Ga`Vgii<^`;Dt?M0Z#%(BAQ(hU>Rq`S4eDBDzpkp39bYmh78rP?LmZViE#CqD^ zid!RxE6mCWn}}uL`XDi_36>hK<;CiyB=$T?<`hFa&rGm#=g!9=tYQvn3rU%PNDH`G za##z~4(AmgKkTEGE)bL)Y7>?j%V?ML;%M{|+%87IFt7c{70d1N;wbn^&T3I~Jmhtg42v3+a>Ji9PJpvwr zU}^z!syXDEux4j^zEGQ^KKSdx(2O|i(RY1gq822r z3PLRJ+dEEDC~SR(&e=&~r4||CZ-cqQMeJVW)qaC-w^lwNDY-I_G{scgNBfW{Y~^4( z;)|SGGd$+h?68{2zufW2j9rNm8U~%*n97&cZgGx}aw9RqrVtU|s3GJQW)r}zfG+^D z&$BB6N%A9tYz7hyL(y5`WIeuuK8gU6)KNHkR)H!=!D%3&5-8}S5RM?Et*}-&LyxVX zk0QWzT^)r>w<=HtEdXjQ()H$F>txuF)1R$5SE?_djeF~L3I%D8sI)1idc;9 z2tp%Q*fl!ULO^N+3tJGnZ&w89u5}XJB-WA0>s&l?MWi4#h<*iq6v7b%^-@?XRO+Un zk0NlWDvl~u@(QXX6!cLDN4Air!cqWQtaPd0Pa=`=^S&LUHvpoq-?M-WD-)TmV~m0<-%2^?HlIJ|M8u#T^ertl3>>-DkUkr!M^6+d1v=Pw)j zP0@AYnfEn|YFTe;S=+$gvHXr`D6WL?+vc?JJwzMXG?&-}VHDPc`jLaWpqMf{bm|w22RJXaPQ+4C9A#uMb1Q$M za+F8&=0l}Vx*Oz9nRA57LO9Yerw6K7>G-00uGWx4IGjI*9)5q-EG2#ga{#l-8??=1H0U`==%Fl=nYVd;cFZ8fOhMzyJS0Z+h1E{{x@y3&8)x%l)qUoNC)n z>9zN-u=6=Z47S+fau!5?coX#?x39gcXn+`jWc|kiz`01*8w&z?w5R3 z-0@%ast6N5Q(yRB8U+ySV(}La`)#UF40b&G;RZhr_}Non`#Akw`t*0{)8D1XZ6n;~ zYFP#y2|5$?3VZsy^f+zB$~gU9dc1g*{w_UQ2jBHif0rIJDw_I8f0v$yS7ODaM!jf{ z4P9>*MkBjYeDY^rwW%;dhC600<{1o-vC?s2WO|n# zyf?$*sTbKSM3e50&Y&zYw~!# zpPRzm@a+R@h>i_leg~2^BI{yvCY!z;s*1}!mwv!khTX_$>_iXJ6vkhxr}^UyzoZ^7 z4E7d>fRFnAr9bRZa$~s(V$8OaBxPV(76~VtX$D(8~x{pHb$=pBteJ{O~G20?oms56Z|+gMJPmQH(`b(m4+; zfaOq{S{@u92p}i*=>Q`irJcEX^BHJ0cso9tY<%!J$4jUU4%*Sk5zAc(ZPGE^BUOLr z^xS>wpf&Ov11>3kzB&zj8X+%{kYJybK7(zMrn~&`W7pBBoBp_t6oHQl^TXZz$o61S ztKw7FxvjPOl9&**1!XksG4Ql}po6-Im6{*C4nZA-mcrl&Y{Z z4|g@fk9UVcvi%v`UIT4R$mKa_4(>mbu0D-U36Fx@8lyymL`{hnC(BjFnWOjZz7x38 zygF;7C0ckBeqvnp0cqyy;MGy+Vn6g6!y$nI$gjaQpQ~0yKx>DKT4(EQjNH(?xzVE( zu*R@XfvJUzBU>XSd`Pq8u)|?QyiUv@vgb zBuD90ottI>*;5|jqM+IMtV~jJS!YRmlOFr}Fd-!_o`(y~Go_fKj(EeDvW(DPgFMwd zgCkg9(b|MGEn}a1&E-f(txaV-e%86%o-~a2$s&R;YPuz6a;#<13s}Z>PrMwn ztUxUY^L^7S%Thv5oXoj$?pZ~?Ty$2>+1OjEvN((f8>MmSU0b5p;_QJvPY7z8vpmOK z$B381+Cr#}Y#prok&arl%mO_1nH`{E+_qqC#t1Ie`L~>N{dwZTys_>EK%dBs{pA4k z6#wdqnH1Uju!rm@k|Mm^Or^FTf2b{=bu za|cRE^c|I)^~IZ7<$8u|HJaC!pNe4$Zu&gSY{1=2P~Ogp24ALO)TO0uxUWk&)-g{U zzr>s}S2gq}mC#DrTFf84p}xyC1=6zQ(|sx_&HyYr=Y3DidS=UWs^=2Ub>p5Jdn2j8 zoZ+#qjXJi>#9u^-x$;hJWzhtfmW-W|J1~Hzu9?oLhfZGtX4{{Sd`}58c^Te$Mq|UZBN^cb&dcbOF<1YJFjt*>d z)JIi%8PXDMrV&~u?-jE=attvflhZnGbOs0c(IU1xQ~g>>{d8^E`(B!JBvFHwvBsNp zxmI{xpG&&wF`k06T7RakFY+eOa$aZDi={QWZqeQfX6#omubywM&5`BUrl zo`!AbS!ccWo?mBZuG}F47jm-nSe`gJW_;Dq%gFhjXvcZ1x-VyFYGhVxeAbDex2%i2 zsnwy#x%WEH)!qn}(9&PIA0s@>wJo`JuM1ouagHg+MkNW;Y$8qEyx0S?%=f&n%O?8F z)McL}jU446;~?#2Xjv#q9${X;W~hpBM*Ty*SY`;G#<*0+EejuSG|92fOidr%Ye`yb z);+hh*Q_U5dBL%$wY^%`^X9b`->y-gW-%mY>4W5KAxw;nsqcY~fL06>>o2_>$lky* zkMlGOaIATlo2Q)>yROpNdk;xNAH!9v7}YJS4R3T%uADrKeF4t>ymx$4-h1$nlBF+l zH{(}3l1=rsPmD!7Qrh8g-vZ3NZi@42OCRn@|D`U5L(}Ar)&P-HLswkR3Y>Ml6UJN9 zUQJlq;IfqD67m?~gg97Np z{pDQGUS0II$VD1kS1NND%U-EBx~OJ&-jCXhA@&o>r(N?My}Acox6FCm>!zDknnkYe zX9KC$j%9x7Nw;~f!P62$n_c!KG$|NT|p&&niRBHI>HIDC?2qQMhG?nzEKV2mGtb<8nIk6#GQ3Bcj~5 zR%s}0LY<|u8{c0WDtAbqVm-)yi~E7jwP8wA>XoHe^rjzDYgj|qEG^d?9>z|moNriK zt-J9u)s}DRQQh}L9id5bP18?nF2)X?L~%F8=@ib=x4G|=Si2*w=dO0%m=IT}EG^AF zFFBqK5qmv6VU#&bVbznS9IDkgb)LJbVi$wGk%f!*YaPdJ5YeAyw~p?VvpQ2S^reFH zXymCEXeW9s&QiJSBd==mNwp(WTV+`+ZN(FJulZU|;5_m5*sn0JmYJA0Eys2D*^sMc zed%7qlrE{g1m@S}zJMivp7esJer!h(s2lFF3`UDE?RDm|YKI){c*4qENVP92G|6TB zVqE97P7o!S*UD4Qqp90mXQhw}ml0m3&kMbS5r=XxpWjltwV0Bnk23R?Gi2^6%d;fT zlX(}4dn`unSb9nK{Zp#FoFy0Txp+7Cbgw5~_LNV3)>#8P?A6R?ot6>F(+n5w_tkzKqH@a%k zHBWsN^C5TF3~l{e*2;4J=3xe6$*a4uUyWaK9%tm$vj6XngRC`DIOfdO7H^zUN-eO= zS>3ld=e;b`Y>WLsnmDCA12D>L8I9bx;gorC}-XiN44w#y64;ovk2ZClqWK# zJAG*!IUFa(a>c|uR>LSWI?IUeX%uqosGKbn!`9dxXzS>cEmHK%S>FAUC#>@P zmv<*QZkld?rLpYX_fm5tdH%~gW~^y35?b1ar~WXNKHufWk-0BRWu&x}!&5Kf+=FqY z9|pOg9PMi3m5~6r>X-@hsV+24hVWckhSbtSsv03R^^jUPeU&sac13WJ@$2fe6>;OZ znobj_$5IqBydp*!x@t(9Ps|NnRrrxZ%go7}u{|7mA7;!!O)Wi@wVb3!S{9x2CN0h* zJoKWLx^mYCvX2^$847RTH3Da90@oO(xr${i<&GQM7-w7DC*?~-oCB%3rP`GiI}MgK zhWmch!&<6h+Ex(k_2ro1X)VE4Cvt0%fH$?I*2QXFV$z9J?vqEM=j7QpQhkc_T=y5` zc>CX!fjca&=hAW)6}=IEvQO4uZg`9^*uvKuH;xz-F|0|yFkighV7yG@8=FRNAmg@& z9qxh}l$9VJX?Vkk4TV?6jia{*yt?S~ax6}bvaBrDdDWFbGN; z?-b`S!Fiox6(%@;Xvj+EY=};>GDJr&+fhoQOH7n+tI|lfkd;Mr#8Py!_~O;pxrR54 zSSq2!#?kwx;T4=INr_D+HWFT4bo73quz`Z}hlVr+=Q)N~aDLnH>YR-ROIEBSU3BzP zpGCT1g7XR$H%xG59Z6!rnRO(+I%nk-d1gCGNpu`oplbMC*L+=c5;_PhMJLLOUIgBG zhBu7fS%x=`-pPhHk=|ItD-xn4b$=`1m|SI`9JVVN$Q*xR&Zt=Nn*j7btJulGwVot1!sy*cu{gE z(OH_LGd50)R(~L_E;qxLl6r5Q{(knP~ZYDS<3(hCu)kR0ntRq33taDbxf-~EZ zj4L>^9Z9d?OwkFiMRaKD;GCLH#%Ua4b|Y>JmN!m}R=bfWQQkN)TJ1Ju$Q%ftPh8 zWhFRsZYE_VI5S-tS8!%RqD1f^E^A+SEhR#C1uW}G7oGCzqElYM8KTmOB`d)hGQso% z<|TaP41_k`Z4A_Zj%Q&8LWCkBIjO!;k7<0K>Ys^;!3Bdp-LgM(pEJ6OcJ5Ygv>~Po7!X%Xv-f*X8Gk0#$kwEJW&$(fgi&JUqJq> z90eWz2qeGj_ZMQkpmpjqqF<=vUiR$m)Wx$Zoh}Wb1YgZ2N4;emS zP^f?P+SUD|2Mq4lH)8mZX#aZtRjXC48Bjf_T8$clU;3Z_c?ozj{zOAjS%jm>$fkw~ zD{qZk$+&4ZaFs=vxXSWh8@b9N%v{M_@W!d*Zb(XIyeead`|mV$l_kXrRt--f%}o_c zP%cBYY#_>LJ_Pn)>`KK;qqVCyklLGY6X4#0dmC;d+$6Zka8ux>!cBvl4)+e+47iza zv*2dKy$d%7?mf8o;pW1905=Z~>q>1t+yc0GxP@?w;1S{%IkPgwygB&>i{(`X5dr}DL6bEy{2I_bk^NK$e(-h_}}YTdfEyxZ3kIlT^*EJ?qTL{pB3Dmys;j?7TVP=IbPUao&)K zJX=m zrfW+sFEhytW2qQEv*?$*YZAQB;KAscMN8aqb6nlBT(zK7(!j@It|bLN|Kld8Jn2&k zX0t3kj3*9W8S`?vFl=3J_+zV28f2hep$6z&E?n`|8@J}m$~d=e&%K1)YA|12<>fhf z0UJ4xy;hpJs=kM>Mx|=<&2nMN{be4dTW+tKTg(c$)BaShxLNAnn;y;e3Ju$->2*cR zOB>$slo!1`T-UPHiZ^^6FXW{#7N&CP%rNKWqKzCI+?wZfxp-{7CYz#Rv;W4FTB)?@ zze65!Zk390H;YzyYE_Pls4TBnM(HdUG~JKMDVoiBim|xAJ}+WB7h|cVMS7!A@+BMtM)%9G9Y9jLTW(l%6=5^W|dl&QeDAZJ~)+ zwDw26xLg_K2>KMST)Ms-<)I(8l--lQk(+wymb#?BLMKOB7j5#=oS9{e@g#po55?T1 zYFy1y6YfW7*$2oiR5e=bmv>ncmLATVzD16L#w^6rV|c?stu{Q=;8So`7j->ww!Bv2 zO`cu#&->ohFe~NqQg~<7bBczq()bFr^96mDo;B_;mf*o4mqi|)+DaOYi&^y56L4-n8qdG?wLJv_Z}j zR1d4xL)1nwrdu?_(@5YL(=F!1ETftyK8_K^#h{sGR_Q&bR7|Z|c8uKXY%1$KOG|Xm z!_%IVH?{9rX&5zS(REL~L8`q<8s*D5EML_0$|P7Cc{{WzRRd<0mg8RXUhH_KiJ$Xs zrfNf`S&F4Ubl?A&`@{?=_Jz#7RXOH8GVj$Ff7?NuN_SO7P#AFms8`zQy%)BSqtB zE+-q#I&U%4X6Z{k>AP&5shWthaC5Kg=AJplnW|;fa5n=~`|{Fg!Z4g?JMYVgS3NBn z;*CBUJ7G4#!J-}Ba8PSdqrZEKb!>lq575I1^S6uyaxC+{{TZgK(zr%-ysGP5D)pMN zG=!w`VLA(xGib}G;i;X<@huetW0sNG6EEv3UFFgA8n8RlXf7+!R1CJctSKlbwI}5; zYGLS=%WgudCgxJv)szMqQZ-@cvg;*JOl2yn?3`OVR5H6=oUo=+H0_mkBVsPSwe#L8Te2{wlNOU_mRXV~ zEv6BVP^_9#F}7w|vAEYlrEh9Sijo=x$F&s8B6{qfOz!?D8DL$tajb=R9#!_uM=fF0;%LJ#$re#W-HL zHMEw-(mPHh?DL`zTVj=P#S4?w?Rx=U;sBg`#P?k-W+oXx9- zBE*fcs(+19Ew$I9R#2vz@oX6EpEq@8Sy{N(*R-uH-01-|$}7WhmcGLsPqu*Jn6sv8 z+K#WR=&!oSHzwR0Fv}oc1Xu4+c=ifYC49NRphjY0s)XJE;T5Jz=xrgq!c+;py@eOo zhNZQJk@T7kn9(aZ^W}cQ*=)d!SixBuFr!y+mIln|6`WfjuHYPoH+)zkJy&J}W*`m| zd1gW)&tZbIG+;)o;7r30BF`|90agtaXD~J1h+?|B^$|@kzBATrzzoEiAm+>cy69+a zMH(<8R+uW02F&Ocrb?s%GkS%olCCNnfx-w1EdfYbIcLLczzlH%1?Tn#0pa-(tsJg!c<9bhv-O50}P_}%?8XsY&KvJS~{ zN&{xZ3eM7i8N6l#X7rj2n9-}7SD`I6dIe``z>HpzXV#Id1;Lq>vW&zQ(U}dHxnl9= zDl$ov60!}N449Evm{*Yo%;?pPfhl5Psze$vBUYFy>F*F7Inzjn;A}Qv24b@TGkSH- zhSo8zG+;)o;4BT8!5b#>EDe~^YcgO)ugQQJy*g(a*P&PBnRTR#jtNNvX24oRXEtEw ziq(Xv5{gdtS0)2yBo;Hqqyo!n|OqE1BL`S!FjdfjJ^$Vr2#V#qrJk*ghU%O8!#hQ zaFzzl=ruT})L_8}|235mo`jb{h-)@rMz0tLX?RJrGFlVSG-<$$STS0aGq7T`k_OC( z6{A&^YXR&dT~cm?Nz zhF5U*H@t!~6Ox+aEF2UbX|+!UYc^oU;_IW8-si-L(MlRHBUX%7(tsJgVziP5%;*)P z6~}#{8)gG$z$WUP^)_fWU`DLqEDe~^D>zF7X7mcq(tsJfW&>vQ>YVj-lT8N9h!vb! zMYQnXi(bK58Ze_*aFzzl;58dCqgQaIoh_+Xg0nPWMy$?R z&sDPEOeGYVOctCeI^nfyozWAf)SS%*%#e`TfEm4Fw2}tQ=oO=tG+;)rK3eJJjT7Ub zG++j-*?<|nCIe>l3eM7i8NGtDG+;)r;LPq=)`H;7N;ycunhluID>zF7X7mcq(tsJg zf-?mxWu{1RsbwcI%>}*C-LX zE8VMWo$?9=hFa-ZU3AJTSqaXpqw6pQkdYNb@uhB`OPGluJxV9zf;)eD%%`wmmX?^Z z_f-RZ8e($9V@}haTTxP%n5j!B1EnEG7uX*{LWJdAP+x=X!W#`*z7EcFn%+czApG$L>sJT+aOM3(DetV1-|*n ztJIwU+hUuuFW^A@t&KP(!M{E%V{!bh1IGhnZb$PQ3I4)A2+LekBIjEzD zE9xrX#Tbf9G}2&>8W}PCVRXF>rf>2~KFpCn%!O2j(GI#w$WZ_+ztF5m4g9SPR|DZS z;rP`Ie?Wc#I!LR6zqRl;5U>(VkOU!38Y1D}AkaDgD=Eq+!-64)P;67x!Pk$P;EIQH z2_=qs?vL_ELlSk6N)>#MjsGgcF<0FB4@YQK$dCV+n`-!54gV_X{3}6XF=D%q7ZWN8 zNtFU$O4^(|M}Bxb=K6A*zmeZQkU1}2L<^agwD2+WWF0!{jP>bSBGzbS)Uc|{%8)%T z3sgaFX|jc-tBi87POW)Xl9akq2U^COu8{1K+$U`45^P==Q^}M9c*HeD@O;H}2#{7+WNr|U(J}5`k?o!rs ztB(EC?IINV?%FCM(Y}U3108LgbX8D`G&;e4jvM$<2x04}3YdE9V9Yv@G~2{rQUCSv zHxmDN^`GA#;|t={`6{^1NQ;`z?NPpjL&>GY>EAA2**CO7Z|^E)@B5y?qDS(!uZx02 zd3i+kkj_20_i09oi%DfQ*fy%5V@2d#{Uc=8M4q2e+& zds#=X&T*ZWj`|s?QeM_{OCm4U7Lsym&L&q{BK`X4(b<<)7A-#%d8&;buNlhH6g_cG z*g)k7+eG|p2A$@p))@b)f#wDDij9P8gpj77s{uMkuc*qHQmW1xno@3gk%D#B2awWr z&g}q5?VreP%BgzJZ97qqa@NIB%4*)mIrr>k|B2jtmkZCOX@UGv_UxTvQqe6{XR7C> z#owWBX{|BX)1_V4Q`U6J+x$0Jlt8xlI?y7=i{15s>4Tnt$D-6$N6%oTOG#4ZG*pSq z960a(|D(5_Q+=BJzmC~0M>6*_qSR+0=3F^=Jxxy7w}wFrUl+Y#KlC;7l6W-oW?nU< zb@ph^p}RDmCeQpzJ$o$XG!*%);-X#jXo`)K#=-OSa~{LD-% z*HFx_Oi!)+)QZquNnBgmzdOWJE&jW6Z_ZtMNzBstcRZ)p$-ko>%(+Of6SFk_9na}? z^6#hzb1u^B#4L?}$8&m}{5$HwoQw22F-zm$@tj^K|BiYv=OVpM%+mOGJU?xnaA&~v z{F=K@^0fMO>~{0~nJ+1*pSYkQ?`UY)TF^9qT;9N;p}S9YRSht{)m5Xq^;=y*wQAO? fUadCXFyJq?Rl_m)a2qCv<0BFhk^c98u>}4fd_aIc;R45Ut z=++=<(5&IsK#}2m*1GRszw=zzd9HJw^Vf5(>+G&xy}j33pY>V8cd)0%{^v->5@V!fVLiHU zaMio-w`%UCr(LNu6r25ATSe(P({;k)*w@cqbb4eM&p0oM^`v~os8_g^lFwqh8IHWY zp)dTPCD_r_;S{-`cv-{3CuyPr*#Inj3YO-+4rN znOdk(Ct^e#MwHD$Eu2qmiiY)OzcdA{3nDT4{m$jr)~WMZsNA1NeU)Bbk#1OR>|K7L zhl?m{%8{UlN?1ba?@||)(mMG&wACz;$dLpjRw1S3RLPwq)Ybx-rI#WlzXyM$1z0Sf zarg7;G=reo58}_YCy4~jYf5BmzKfdgQp$sR`!3*mg|p`kzA(#EVCR3}m>rqQGae1~ zV*Vb+vwW~XR%5HDYWDR-8L3fFz4JFj8Ofh~9x3B?EKxTU!pyM0>~9-y9}Ij%N`ou~^tq?&oOBJ;06QUPxk!$D>Oyw%d=r}wo^paSk zA{4)IiE?*Z9g@=GA-T*VPH!3|a}oCltyxn>&8BVv4;`9Y7F>yhZ_}DjmCfw*ELYb{ zEj<+E0V{ZQFKbIYfj8cbUi<{y-MJJVw#p0}KaqOCe(< z#p0nkzDk_V)5o_JdJ9Y6L5!*m_nTqB6<3j9anR*eLGk8`)ArwEmzbD&BF+e+#TZJ~ zuM*8Tl&smZN>cEZXOU7SVvhtPZ=dRYCEkI0IZF}4%M;0zEF91Zow2XFqO%BXUMXav zwcmO9p;Dyf+>A`R=%o+lzeOyUTJ+nVBS%##^lQ`ldDMzfB+9p0b0%{dQC{iWkZCtx zop|0e&b$A%``RVS-lZ(#e8kwi4GGj6zY98B*Na4MbCG!FV(*V$bA8V^M=_kmsykuY zOqoa}U4L0zz z2eUg*tgu!+h(r#?Akm*pEh9HmB;-(uWVXF(r)b?wr=Nv`q!-c5XLGKso$ZN)tnlW4 zyLJI5v4Ium-648;?P6i?Dh1V5a8$lV0+q)1g39Wek;rEsB+@FCy;v$Yd$G`AI1o9A z;6w>_INy2HOHEQzuO~$BwFUDoltuPj zlF_Od)Ru@hNvq^HiJXLy7a_xEcgj0oSdE88<6QQ?MM}$e7E0v)=`~k$-JcuoA;vq# z=mf`BOC_h%Thdom^%>$^LA1ltglo5_Nh>px#etgqe8kw4<~P0w3$cwE&6agW*{Z-qH7r7e4|T5-h+&Q0C5^**B= zp9x!G0}|*pDhuj0Dn&DDxJZ)aaG&BO;d^H08nq?LrTgee%Ay&mtNe(6C}?k$c;Yb} zGquAZbggHq0*!-yqhdK8- zA3#V7CPH5SJ*O`tWLtRdjI4Y_6HTbg?NL%R?B^n>jpqv%`SeAVyh98l9^%?NyIUA7 z_gdxsC^;PoUmrY|=dcaJKIdvgZe4$``}y2b>9+@Xe&vYrK0xC5)kWMZ@r#>rzn1^> zJM>DT*y^7|0=f%D%kEyfchFUBNikx~N64`FvMWm~#a5ORD#j}c_NKAM5j8g9ECbRp zTFFH+k+1qYmg+V7HU=--VscI&Nv&X_aItmXd5k(V`}5$r#Uz~;u1|6$l1wymD%A3> z2;Is;RbtIZJ2paFJ2s4m{?KYhJiR;O8>(`gwWBr5t1^qrmmuv1Ph{eLvV3I0$s*+a zlg?=U?33(?tXnQCy>j}t!zCR_&4a1BPxUdYrXuS2Jw(?CH5K$ea9G&Cnc^LY1niY^ z{Y7`!plMmWTS}aEn%y`4Zf_i4p*Bx^t#0LWuXS;TLWto~goIeWxvX75%!53xo%07Y zF0=1d0vM*vGGeQvyq9^|jv8 zI|sZp;FM5{Xe*kB+De*jP*6h=+NE=~dFadwTGcb8b%BLC=;k$v5k3C1 z&kM40#hZ?PuSneNXseTaJ#?|RlI<=yPX&pX=H@PTc~w6_V0mqPewoocA+q zue#^X5;I_MXd4fr;Zv<{H}~(?>c4G#B^Z@=BHGrJH3g5uc~tcx(Y}}hR{baF1k;L(Hm%j>e#(JcKwuB!& zQDd}tbK&b_LvPdIEHZOmuwch4Df2DuLoFVyVVe!VM3*htC!4M);(k3!&u_-XrpmB~ zDeKMeX^6cXeYJg|-sLBMWh=Z{uWDB4lo|A)@fl(vd*p~*5f_D^m1q?TMPVo$tws?j z5=EhCv>wHv4JZ!9qm5`Y+~`Lw`Nj+uc98B~u)<`8$y@zYom3s9iRmDX*)7&BhW|~~ z;maXS>~$|dnnG|J{$KgCpJof0rT=sT3Qc+flcu*r z!@?1qkPedl?g^|N;S%iwEdAjNO#kUm{0&5J0y4)p6TOA#Y?=INqglHOF z2U(6v5VC*|hgE>G-`T+65hLQ;5yu|*?RyYmCh@sQ7y9)f^aUnO`2$OTl+bk1r5{d6 zk7TPyvc=j59GtBl$rk$?h~5Om*0S zaAe?C>q)Eiq}6(8I0&%oBXf=lwNAyNgis=hS7w&f>M6*Sk zh~7l>W>RxA(OW>fp)F9K3&i^eYhR$-G>u+?j*d$ZssOi5un9AP&0{orBPqpXflm0T z0>pJ1QN)Bja2RC*o5#3l2Mv#F2MtHwLBm0|}b zER;jq=8(2Iq-_pqn?qYNb)1HMK4A%A1z`&9FqCEh6Mkk9okN%pifd zRuHmK0qLuN^i@FmDjLC8XU za8hV|h?zy01N8h^Kr{=LkkS$;O{bO6q9zXjSyNd+=6DX_Vd57MeT?Xngk?Y$L_P^~ zm;uByfOS3)AG0S(CfKhar5Us`n$83th%>~xf{=wONDdXy;{h6+Q=xaPa|jOuqhNH{ zIY#tJ!ZILhDxX$Kn}AVQ!pI$%XvKiPr)k@e-96qfIT4m6x zA#w>}1z|lf3D&d*_GbxU1tFhSOA{T-pq-{&`jHRB{hlT}7CWV&zrl#Gt_R{AaGgdV z&fzr4;WWtsvz<68w6oAx79k%fI#vSIfl-{L@h9?Wbr7Kxh{sh2`7{ux5r|{fLCjVl zj)pa#b`J8%r`1EN2Er>qJob9hFJ?P&GHB;v)O?^Sj2-I=!g^p5%<2Ww?*&@SR6S^& zi3Z|i&@Ms_*}zO#N32T-D+ud>c-|Vwd}3A*T@Or}s-rbRv>%tSgzr6|w1IY& zM7|0;_6lgcB3Hq0C2S{72JITj^BT$X8p#torQqW{v91T=JaL^yAkOm|iFS=d!)zzc z30f=3vlX0r&^S-5TL{|-I|#c7Zxixq*J-S=MxZFHV;jk*jpWlt^1)6i_&6V|>w!2Q zT&EG31o^a)eA-ApnC-+#p|z7$!{mcb|5*p@o@^p)BkUmTBD_t=r`>?n&!=@j{8Au3 z3OY!S*l7gaJk<=uGl|&_#4FxO>!oD_W8fUuNv;u{v{rfr@%iwrB0h?{$mqJr=(@=0 zuu}>?9v#;8Ks-8JrxA!}y9?sC6Y^=dAWkDD951&?hPO$Ew@EAPG=h&ayiGF1YzN&v zsmP+zo5vJcGk{`rCf#^S9OySG0X#acNE{Z?%0#OG{U+JOQ6-KJp&s#>bV+(CRUBwM zB>}_{ux1ghOtcCRN06jPOsEpALwsGL^?=(Z#Ocz|N|BHSWKOF9hmj7@Z&DXHF{KAI zo?_Bvpj3=d9EdZQ0bhzxn)q^rEaE5=twP8qjvAp3adZipba{FgMI6YSmH;OFlp$J? zkVPD2px>kl5Z@bMtxBi^bbt)8qX&$bkf1BjSug_%5KWm-2Z%FQ1d0Kf)8as!xgzu> zO?(;R%Mr4OqfDp*jDR~CTwje)o%lM0dO+qhldeRlOya}3L40KrUm4m;gJw?45Xup< z2-SdolR7|Sm|I+jNmn7eLIqlhgFZSg4ID-?K)j~dR|ev-t3c*Dz;EC6h*o6bwoE!3 zR#Obff_=q?nv%d_Bn|AM$N-tsa>P*t;+UAqKpc||@tJg0&|*M53all8##1uHkpntR z$`h?X$Rbn$;ys3`Mkq#CgI40eZ4-*XhzS;zKyS=bk&YXQZ9cxAO<)XG2yIPS2|r0YT}F(BR> zm~7&x0Ucm1up>sF4-^OD9fB!C97Q0WF-#RgHlZreVNwf-S93lY7p}vk>%+`T0C6T* zD-g1Pev`^Xs{kV=)PY@;dBiaQvZf4y%xNQ_@stIyi(*F{dqPJ-dAb3_WCM+%z5&!X zAv7hv8POKNE{Y}5_QZD}+L2I#ZV0)l0P(##)@-^FnSW!5CP6nQ=M!Uy&jQ^%273hv zGYI+X0V5`$Z=fL%XN$E7(0Iy>(2CFo$eOYP`c2vsIuPHT(1TEdZbEju37lsXKo27p zaNC3m5NCx;4S>vPLqa1U?gcv*z+q%Zv^}9Cp%bAqp*wIGDbr11HrPOXPBR6^0ElB^ znh;tM+5&M*Q#iZY6YW8KNxB(0Y+%AqeIRq%0Ep)wYa>Dv;+PR_0USn_L|YNs5IPb% z5xNsf(9OwOn3J_IhnZy47eJmWbPM8GfFnj<2)#%E6MiZZtpda~7sC9g0`a&o^@wjk zXb5CY83B!_On`oqW50)VC$2 zwq);N-;k6V0dXeSu>j(Ig0(%NBcT%^lMcHc&VhC?=lVn&5}FXl0*L1y*RdgVAan#W zr`>?fWA4Q9AY{_*!50JKm{>~y@l4vou9hZ_JP@B}FjasFKh=Q7Q}cjb6n!AxvDh&r zG$D>Da2S~pZ9%jpp%rm#2qD=NU(s zZ3Cd+qzTY?$_mJwwjp#U^dMx@ouH;TeKFKj0OB(?rasVk%7FNWKzz=@bxeUc2dozY zab!#zLR%nn+JR_CLO0;iaSx)|^d%5Sh3-r;bS4?PKpaClrZLcX$`sf|F(X=n?n?HL zE7X^uyAkaMnn`zuItoC127@ykp{l56zWURmqKnV zAU*>ug*t5F=mPNyE``X3L>m#>5ZV(u5V{l6=#ngQX9$G*Kp@-)vY6AEM9Z>dS@_$q zIV}8b*c?{+&v4*2$_C&MY8DOq!t^<;<}nfA(Qzg);ineSI>evDngbDbihqS~uBga{ z3jh55p)NAQ;)xxNnrQkj%OH%^`}KHTHym)f4@t{@vp6FHiDU+kcn-Qr6OGkSP`Y{Tc&z zOH5ceygkCYTE^l=gt6S$N3V|uk7d7pL(KXOA@PyxqggRgtMpj-O_cv#t@$_{YuWm! zjksML%Q+ev8Z20#uM05LW7$SUu{e>dBjV#&oUpjC4V%J3(KIy{@}Z#^bW@mzgoY7A zID@RoWB3NnP{lo!d)&s}YnG7j%oQfPr91EM4@wS@q+2lWCSM#((q}$Q){+MI$32rNv!FqQ{Ypu?euYz!_%0zI_-VJaBSKB$@c0?J^~B3Y zK4}61R4^0{r|u4(7S|O(h>jTldfj6tQb3Bx2446$N{Od_rv}iXXfx=UbZf?OhJXNm zv14Bsd3|DUcjK~<=PH}muDT@i_M`jn$uvbB?M+_zL1N40#j)@l+D39TNlVGK$TTXY z^nu|V%0-uwfc~~AB+}=JXm^y>ob6PKKr<&Q(aa~;PLEbxJN-?)6^Xo#N1_XZhb}D) zZbstV7E0`gta2Yj9}xR-+?)M{2X7H@2W(KrAt`^kdW2>$e9#QZ=s&}x0=;vbx{-s0V)ctrMbWMI|8u+~`|Z(pBuBp&IB0x32j=NvvJ?+t18Rx_g*cO#!l z9+G;N=dHaVkZSa0^9dfS{G0ZnJ`d@Nl@|=*=~ekCnyId=73;-CLPMEoHzZQ&M7eLz z+gSmBQ&}o&GG%`kHvd?zYF~*M(WOY@te2Q!m4m}gq}*AFl8QBvb{Pv92iA&w3#?hc z-ai{Z0c#s`^8YKiMviOp=Z`%B3;YEd%y$JN?t6sdXvwaJ%^08kxq6PCXqNla3AgT2 z$dE0Pm_;v{aq!27GBqpL_)Rm;Sq;q`e7MX_>SdR9Z`ak!GCamIeI#3!d2gkUJ!1HA z5c_#`X-@u7{59i^PK@q-kpohT@)paq2geLZ@`S67nuM)*-s=kw%X?UqJmIhfF1SXDajnaJY5=yH(4OYIXu+q`F$aW&>W^9X+e&+?af zA;u%EoPpx9mfYOHAKnO^`a>&p6IcGe$(xl|cyR1&BahhA#z!{n?eh$VPM zDtVn-eBZ~}qxoeXJird*F@9+GKHYt}L$V~un8QO&L0XbHKL$2lqEYhE5@frF`ck|+qZG;iIK6*EZhG%Ac)eu^F{Bo0X;uy)VQMK-d+&EPApg3_aV9FC;?aCW zcUSot1f!62e8xHc?6_}3i)G1@y71J)4>)`Gv!5U-6($lhGxxk0i0Ixnl;G8KHd;0w z~7CmOM&;GD3E?tGG$Y>4qW$PwHBRPF483 zc~_OS$~{_wM5;@XInTYcc4jjrs0g`=?QyBSLJyf^J5?o1nUe3msAWd|gcz2kNc!#_ z=9}=;0|(SW>TDJxoQ-6+!1s(+i_dwN&_sB10oaNm;pS#Dk-UeN0 z-`_nKb|z=6Zv}oh?1Yx0W$>^p3?2wap>=TG`ukDvPVr>8jL`qX4aL829wy-;u4RXB zE!LXis|{8Ij8FJb8AoXzREx0L2A>Q0y-oHx|etG(!Dseq)X?QsX zQX!XkmfiZOQ1sv7I=>K-VxS0tfk6tdn}_Hk8FV}qHk1g8ghXtcgQ4b)RWSl~PWq2e z54v}m=_F7x@6ZjEZL(wA9ASd~zG5@};}x3*5fvWP+7?X2W4pME&q4-fGL z=nMe{T|j^#ASfsxB*GLC5f&DaoHbjNDI+N>D<2eWf>59J*`l3#p+UvlzPX<7N1vvud{&tJIMaP?a2^|tmK9i4ao z?7esY!Na~s&j(+;eD(Ux+jm2szkK~RGWz|;*f<^+1=0Q<7Vv*LE-@Gvl}@M81@X8j z)XjL{VswVGfq=NJmtaV&go@!VAxXQeU{tb+7tG#R#8ZVb4>qN(m+&|s;`LzL64#cEl<*vb6}%l$3TB;7 zjLplgb)Tv%ep>VGz^p5)GFk(d1CU%!5NtkPvIcISQ8Z~9ZW0`5GV@G6bWc$hK%H1U9M`pca!DyLEIcC|9+(ftCC zJa??!5+E>*HeLyv-2CADo^3tpR~BD;BR0CR{LjB4=f8hFH5jP=QNroUz&fd`?JAa^ z&+NY?#&8xaWqo`Ze{0nmp?KX5Pqu~|+EnJ5e%ZO*DC@`PJ)dSeo*dHfXmTDM%ldM# zEpf^3Da%Hrss?nAOAjlW1`}v04Lphm*^~^Mfsu2YO37Qs(&bMH zj|5o1f4P13?E7A=-o^E~{3|<$-+x;0sM~#El&jjychOZhM1@yc&-7K>?(D~`M z)zLpq<^`>Nmv4W2(2D1qxji!Yq0QS{>$WQ-+b;BXkvQP8d+^VWv*(ZP*!E%K!n?GJ zK$F5tX3_x(M-Su}aIM?oY|=N@_J>AChkn`hbKiNjX%z6Nc6c=Bk#6o(Ma_2JfJ~p# z!zaHrJhUtu_fae}{uj(KW28%s(_^n&oz@5>HMZfCkK8va+9^T{s&2QVzix}DXj-EXecOrBx%(+`H{Vv* zw?164c<11vpti?02UYd`0%~$4Zl3?4``X`W1@URg3TLz*MB~>b8!3xKalO#V_X<=&Ybi0 zgIUkv80wL0PA+B9$Cm`R&i?d3scg;HCwH`+vizIJs89MfITa<}7QAx3d~fCWkzm83X|%?=U>eyz9eZ$fWF+s}#~sV>%#3(c zX*jzsm1`8UW8>Iz_TxS6mlONezUG{IuyJyGduObw)PiNLi_Y!)wsTl7vTLO2;;33W}o>Rwx3)Q>#~YoK3mi(U7;BF>@MiSIGJywqj}O zL~Kb5+p4Nc^=w8_XZX$=p=l%Kix&MLqrL2g2BD`$FN4u`?Y+f3i}!1lpD%pB&Us`Jo3n3A%JQuXj~VpM zSrV;p-nM1r`t0Z1P2b&WD;RXwjXJO}`lW%}o(p{$OGe+X*e^+WyvFDq^KF3c$-GTx zb*~h;9b6!C=jv$GL4oZC_je&_1*EXM#$vt)E`tG>Z2#4>_cOV((v&)0E0+ z=!nuiab@^P&GzWvgARYp`04X?Wk%rT@vtT4R!Pf>huiYPG#;7!CKh?HZ{D4}Fy%x3 zf+rtu<4@(b_t@NST7JLy-X-g@TMgzV$2fcMK8<Fo#iRQ7YflXB zPgqB))#q(_W%KdU36%>ohYV+F|502nku!JjL)TExsQ}AdmHe;0_wQYDtX$LIRJT$4 zNbiWI~t`Iz4AHjVfS*c{+A38R39Bf{cpY zY>RYk9*QlPT9LHCSTB3BnCW$6wY3#;_+sys%|D&KWx&GWdF^5WUz zNeAN+cp1g)l<8MtZrVdCLd+wUDt6q>w6{!)pouVlmJ-<(}W|w*|g&`)9czZu9O|DwkJ)Y^U zIpg;J!q96SRCo878;l}ZPw8Dk!%Fqnd*n)gypnh7-TO$0z2?bwNs+G|%E zccOBd*Zf?+7G$*lU^oOcS_aU*e{($eIi~2|_FX6U%kDLfk=(>SqJQRtaB%Yy)47Qk zOY1iDjIv;2^5@43t<9jm+b?Ft-mAH+AY-u2`hI-ro=2bMB9>Yt1p1%#Zc%EpY`a#q ze0Pe?x&dyhgPiP>oXi_rVr|mv^j7K5A5^<{7$sIo6iQxRtLuyIj4HnM7;yETz5&egi}p!V~&a{=?>R-Def6J{i%^X^REn2K-N{pxD@Tm3$7K21G8 zzPA6`WZ_nQq5{n)1}ER({I09KiOJyXX$~# zJHLBW^j&Dnxo#=nCOUfjqg}!0&+oo}eZRcs!Pc$YV}<^DbpA%xxixdfva;mo8*1Jy z*^n$#J+xn5^8Kdv)0-+b_DA*BBnL=s$qYQYXLmRBjW9`uMEp2GPI>)t5%%R zJ+yw|fk}oVU(UV>;io);DD>W0tJ~Q^RQu`aJ{$NR1OAJ!0Qy^r=3g#EEUEO{Zf2o9 z7ExbM=M~ONMSBGV=+I8~%VOD`!Z?Ny+Wd3&+?};qMITkDXc+$vK8*n%O@u6CSRql7 xtD_gGM1_UNt5{jikFomaTNEL*A~t>MCVV*k_sOSXZM{{fd;5vc$G literal 0 HcmV?d00001 diff --git a/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js b/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js new file mode 100644 index 0000000000..95fdf0a7a6 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js @@ -0,0 +1,18 @@ +var swfobject=function(){function u(){if(!s){try{var a=d.getElementsByTagName("body")[0].appendChild(d.createElement("span"));a.parentNode.removeChild(a)}catch(b){return}s=!0;for(var a=x.length,c=0;cf){f++;setTimeout(arguments.callee,10);return}a.removeChild(b);c=null;D()})()}else D()}function D(){var a=p.length;if(0e.wk))t(c,!0),f&&(g.success=!0,g.ref=E(c),f(g));else if(p[b].expressInstall&&F()){g={};g.data=p[b].expressInstall;g.width=d.getAttribute("width")||"0";g.height=d.getAttribute("height")||"0";d.getAttribute("class")&&(g.styleclass=d.getAttribute("class"));d.getAttribute("align")&&(g.align=d.getAttribute("align"));for(var h={},d=d.getElementsByTagName("param"),j=d.length,k=0;ke.wk)}function G(a,b,c,f){A=!0;H=f||null;N={success:!1,id:c};var g=n(c);if(g){"OBJECT"==g.nodeName?(w=I(g),B=null):(w=g,B=c);a.id= +O;if(typeof a.width==i||!/%$/.test(a.width)&&310>parseInt(a.width,10))a.width="310";if(typeof a.height==i||!/%$/.test(a.height)&&137>parseInt(a.height,10))a.height="137";d.title=d.title.slice(0,47)+" - Flash Player Installation";f=e.ie&&e.win?"ActiveX":"PlugIn";f="MMredirectURL="+m.location.toString().replace(/&/g,"%26")+"&MMplayerType="+f+"&MMdoctitle="+d.title;b.flashvars=typeof b.flashvars!=i?b.flashvars+("&"+f):f;e.ie&&(e.win&&4!=g.readyState)&&(f=d.createElement("div"),c+="SWFObjectNew",f.setAttribute("id", +c),g.parentNode.insertBefore(f,g),g.style.display="none",function(){g.readyState==4?g.parentNode.removeChild(g):setTimeout(arguments.callee,10)}());J(a,b,c)}}function W(a){if(e.ie&&e.win&&4!=a.readyState){var b=d.createElement("div");a.parentNode.insertBefore(b,a);b.parentNode.replaceChild(I(a),b);a.style.display="none";(function(){4==a.readyState?a.parentNode.removeChild(a):setTimeout(arguments.callee,10)})()}else a.parentNode.replaceChild(I(a),a)}function I(a){var b=d.createElement("div");if(e.win&& +e.ie)b.innerHTML=a.innerHTML;else if(a=a.getElementsByTagName(r)[0])if(a=a.childNodes)for(var c=a.length,f=0;fe.wk)return f;if(g)if(typeof a.id==i&&(a.id=c),e.ie&&e.win){var o="",h;for(h in a)a[h]!=Object.prototype[h]&&("data"==h.toLowerCase()?b.movie=a[h]:"styleclass"==h.toLowerCase()?o+=' class="'+a[h]+'"':"classid"!=h.toLowerCase()&&(o+=" "+ +h+'="'+a[h]+'"'));h="";for(var j in b)b[j]!=Object.prototype[j]&&(h+='');g.outerHTML='"+h+"";C[C.length]=a.id;f=n(a.id)}else{j=d.createElement(r);j.setAttribute("type",y);for(var k in a)a[k]!=Object.prototype[k]&&("styleclass"==k.toLowerCase()?j.setAttribute("class",a[k]):"classid"!=k.toLowerCase()&&j.setAttribute(k,a[k]));for(o in b)b[o]!=Object.prototype[o]&&"movie"!=o.toLowerCase()&& +(a=j,h=o,k=b[o],c=d.createElement("param"),c.setAttribute("name",h),c.setAttribute("value",k),a.appendChild(c));g.parentNode.replaceChild(j,g);f=j}return f}function P(a){var b=n(a);b&&"OBJECT"==b.nodeName&&(e.ie&&e.win?(b.style.display="none",function(){if(4==b.readyState){var c=n(a);if(c){for(var f in c)"function"==typeof c[f]&&(c[f]=null);c.parentNode.removeChild(c)}}else setTimeout(arguments.callee,10)}()):b.parentNode.removeChild(b))}function n(a){var b=null;try{b=d.getElementById(a)}catch(c){}return b} +function U(a,b,c){a.attachEvent(b,c);v[v.length]=[a,b,c]}function z(a){var b=e.pv,a=a.split(".");a[0]=parseInt(a[0],10);a[1]=parseInt(a[1],10)||0;a[2]=parseInt(a[2],10)||0;return b[0]>a[0]||b[0]==a[0]&&b[1]>a[1]||b[0]==a[0]&&b[1]==a[1]&&b[2]>=a[2]?!0:!1}function Q(a,b,c,f){if(!e.ie||!e.mac){var g=d.getElementsByTagName("head")[0];if(g){c=c&&"string"==typeof c?c:"screen";f&&(K=l=null);if(!l||K!=c)f=d.createElement("style"),f.setAttribute("type","text/css"),f.setAttribute("media",c),l=g.appendChild(f), +e.ie&&(e.win&&typeof d.styleSheets!=i&&0\.;]/.exec(a)&&typeof encodeURIComponent!=i?encodeURIComponent(a):a}var i="undefined",r="object",y="application/x-shockwave-flash", +O="SWFObjectExprInst",m=window,d=document,q=navigator,T=!1,x=[function(){T?V():D()}],p=[],C=[],v=[],w,B,H,N,s=!1,A=!1,l,K,R=!0,e=function(){var a=typeof d.getElementById!=i&&typeof d.getElementsByTagName!=i&&typeof d.createElement!=i,b=q.userAgent.toLowerCase(),c=q.platform.toLowerCase(),f=c?/win/.test(c):/win/.test(b),c=c?/mac/.test(c):/mac/.test(b),b=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,g=!+"\v1",e=[0,0,0],h=null;if(typeof q.plugins!=i&&typeof q.plugins["Shockwave Flash"]== +r){if((h=q.plugins["Shockwave Flash"].description)&&!(typeof q.mimeTypes!=i&&q.mimeTypes[y]&&!q.mimeTypes[y].enabledPlugin))T=!0,g=!1,h=h.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),e[0]=parseInt(h.replace(/^(.*)\..*$/,"$1"),10),e[1]=parseInt(h.replace(/^.*\.(.*)\s.*$/,"$1"),10),e[2]=/[a-zA-Z]/.test(h)?parseInt(h.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}else if(typeof m.ActiveXObject!=i)try{var j=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");if(j&&(h=j.GetVariable("$version")))g=!0,h=h.split(" ")[1].split(","), +e=[parseInt(h[0],10),parseInt(h[1],10),parseInt(h[2],10)]}catch(k){}return{w3:a,pv:e,wk:b,ie:g,win:f,mac:c}}();(function(){e.w3&&((typeof d.readyState!=i&&"complete"==d.readyState||typeof d.readyState==i&&(d.getElementsByTagName("body")[0]||d.body))&&u(),s||(typeof d.addEventListener!=i&&d.addEventListener("DOMContentLoaded",u,!1),e.ie&&e.win&&(d.attachEvent("onreadystatechange",function(){"complete"==d.readyState&&(d.detachEvent("onreadystatechange",arguments.callee),u())}),m==top&&function(){if(!s){try{d.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee, +0);return}u()}}()),e.wk&&function(){s||(/loaded|complete/.test(d.readyState)?u():setTimeout(arguments.callee,0))}(),M(u)))})();(function(){e.ie&&e.win&&window.attachEvent("onunload",function(){for(var a=v.length,b=0;be.wk)&&a&&b&&c&&d&&g?(t(b,!1),L(function(){c+="";d+="";var e={};if(k&&typeof k===r)for(var l in k)e[l]=k[l];e.data=a;e.width=c;e.height=d;l={};if(j&&typeof j===r)for(var p in j)l[p]=j[p];if(h&&typeof h===r)for(var q in h)l.flashvars=typeof l.flashvars!=i?l.flashvars+("&"+q+"="+h[q]):q+"="+h[q];if(z(g))p=J(e,l,b),e.id== +b&&t(b,!0),n.success=!0,n.ref=p;else{if(o&&F()){e.data=o;G(e,l,b,m);return}t(b,!0)}m&&m(n)})):m&&m(n)},switchOffAutoHideShow:function(){R=!1},ua:e,getFlashPlayerVersion:function(){return{major:e.pv[0],minor:e.pv[1],release:e.pv[2]}},hasFlashPlayerVersion:z,createSWF:function(a,b,c){if(e.w3)return J(a,b,c)},showExpressInstall:function(a,b,c,d){e.w3&&F()&&G(a,b,c,d)},removeSWF:function(a){e.w3&&P(a)},createCSS:function(a,b,c,d){e.w3&&Q(a,b,c,d)},addDomLoadEvent:L,addLoadEvent:M,getQueryParamValue:function(a){var b= +d.location.search||d.location.hash;if(b){/\?/.test(b)&&(b=b.split("?")[1]);if(null==a)return S(b);for(var b=b.split("&"),c=0;c + + + + + Output for Flash — CKEditor Sample + + + + + + + + + + + +

      + CKEditor Samples » Producing Flash Compliant HTML Output +

      +
      +

      + This sample shows how to configure CKEditor to output + HTML code that can be used with + + Adobe Flash. + The code will contain a subset of standard HTML elements like <b>, + <i>, and <p> as well as HTML attributes. +

      +

      + To add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard + JavaScript call, and define CKEditor features to use HTML elements and attributes. +

      +

      + For details on how to create this setup check the source code of this sample page. +

      +
      +

      + To see how it works, create some content in the editing area of CKEditor on the left + and send it to the Flash object on the right side of the page by using the + Send to Flash button. +

      + + + + + +
      + + +

      + +

      +
      +
      +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/outputhtml.html b/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/outputhtml.html new file mode 100644 index 0000000000..3cc66e330a --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/outputhtml.html @@ -0,0 +1,221 @@ + + + + + + HTML Compliant Output — CKEditor Sample + + + + + + + + + +

      + CKEditor Samples » Producing HTML Compliant Output +

      +
      +

      + This sample shows how to configure CKEditor to output valid + HTML 4.01 code. + Traditional HTML elements like <b>, + <i>, and <font> are used in place of + <strong>, <em>, and CSS styles. +

      +

      + To add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard + JavaScript call, and define CKEditor features to use the HTML compliant elements and attributes. +

      +

      + A snippet of the configuration code can be seen below; check the source of this page for + full definition: +

      +
      +CKEDITOR.replace( 'textarea_id', {
      +	coreStyles_bold: { element: 'b' },
      +	coreStyles_italic: { element: 'i' },
      +
      +	fontSize_style: {
      +		element: 'font',
      +		attributes: { 'size': '#(size)' }
      +	}
      +
      +	...
      +});
      +
      +
      +

      + + + +

      +

      + +

      +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/plugins/magicline/magicline.html b/sites/all/libraries/ckeditor/samples/plugins/magicline/magicline.html new file mode 100644 index 0000000000..b09fcf7e7d --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/magicline/magicline.html @@ -0,0 +1,206 @@ + + + + + + Using Magicline plugin — CKEditor Sample + + + + + + + +

      + CKEditor Samples » Using Magicline plugin +

      +
      +

      + This sample shows the advantages of Magicline plugin + which is to enhance the editing process. Thanks to this plugin, + a number of difficult focus spaces which are inaccessible due to + browser issues can now be focused. +

      +

      + Magicline plugin shows a red line with a handler + which, when clicked, inserts a paragraph and allows typing. To see this, + focus an editor and move your mouse above the focus space you want + to access. The plugin is enabled by default so no additional + configuration is necessary. +

      +
      +
      + +
      +

      + This editor uses a default Magicline setup. +

      +
      + + +
      +
      +
      + +
      +

      + This editor is using a blue line. +

      +
      +CKEDITOR.replace( 'editor2', {
      +	magicline_color: 'blue'
      +});
      +
      + + +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/plugins/toolbar/toolbar.html b/sites/all/libraries/ckeditor/samples/plugins/toolbar/toolbar.html new file mode 100644 index 0000000000..c78b433c08 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/toolbar/toolbar.html @@ -0,0 +1,232 @@ + + + + + + Toolbar Configuration — CKEditor Sample + + + + + + + +

      + CKEditor Samples » Toolbar Configuration +

      +
      +

      + This sample page demonstrates editor with loaded full toolbar (all registered buttons) and, if + current editor's configuration modifies default settings, also editor with modified toolbar. +

      + +

      Since CKEditor 4 there are two ways to configure toolbar buttons.

      + +

      By config.toolbar

      + +

      + You can explicitly define which buttons are displayed in which groups and in which order. + This is the more precise setting, but less flexible. If newly added plugin adds its + own button you'll have to add it manually to your config.toolbar setting as well. +

      + +

      To add a CKEditor instance with custom toolbar setting, insert the following JavaScript call to your code:

      + +
      +CKEDITOR.replace( 'textarea_id', {
      +	toolbar: [
      +		{ name: 'document', items: [ 'Source', '-', 'NewPage', 'Preview', '-', 'Templates' ] },	// Defines toolbar group with name (used to create voice label) and items in 3 subgroups.
      +		[ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ],			// Defines toolbar group without name.
      +		'/',																					// Line break - next group will be placed in new line.
      +		{ name: 'basicstyles', items: [ 'Bold', 'Italic' ] }
      +	]
      +});
      + +

      By config.toolbarGroups

      + +

      + You can define which groups of buttons (like e.g. basicstyles, clipboard + and forms) are displayed and in which order. Registered buttons are associated + with toolbar groups by toolbar property in their definition. + This setting's advantage is that you don't have to modify toolbar configuration + when adding/removing plugins which register their own buttons. +

      + +

      To add a CKEditor instance with custom toolbar groups setting, insert the following JavaScript call to your code:

      + +
      +CKEDITOR.replace( 'textarea_id', {
      +	toolbarGroups: [
      +		{ name: 'document',	   groups: [ 'mode', 'document' ] },			// Displays document group with its two subgroups.
      + 		{ name: 'clipboard',   groups: [ 'clipboard', 'undo' ] },			// Group's name will be used to create voice label.
      + 		'/',																// Line break - next group will be placed in new line.
      + 		{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
      + 		{ name: 'links' }
      +	]
      +
      +	// NOTE: Remember to leave 'toolbar' property with the default value (null).
      +});
      +
      + + + +
      +

      Full toolbar configuration

      +

      Below you can see editor with full toolbar, generated automatically by the editor.

      +

      + Note: To create editor instance with full toolbar you don't have to set anything. + Just leave toolbar and toolbarGroups with the default, null values. +

      + +
      
      +	
      + + + + + + diff --git a/sites/all/libraries/ckeditor/samples/plugins/wysiwygarea/fullpage.html b/sites/all/libraries/ckeditor/samples/plugins/wysiwygarea/fullpage.html new file mode 100644 index 0000000000..6b31f57366 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/wysiwygarea/fullpage.html @@ -0,0 +1,77 @@ + + + + + + Full Page Editing — CKEditor Sample + + + + + + + + + +

      + CKEditor Samples » Full Page Editing +

      +
      +

      + This sample shows how to configure CKEditor to edit entire HTML pages, from the + <html> tag to the </html> tag. +

      +

      + The CKEditor instance below is inserted with a JavaScript call using the following code: +

      +
      +CKEDITOR.replace( 'textarea_id', {
      +	fullPage: true,
      +	allowedContent: true
      +});
      +
      +

      + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

      +

      + The allowedContent in the code above is set to true to disable content filtering. + Setting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations. +

      +
      +
      + + + +

      + +

      +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/readonly.html b/sites/all/libraries/ckeditor/samples/readonly.html new file mode 100644 index 0000000000..c1cbacd192 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/readonly.html @@ -0,0 +1,73 @@ + + + + + + Using the CKEditor Read-Only API — CKEditor Sample + + + + + +

      + CKEditor Samples » Using the CKEditor Read-Only API +

      +
      +

      + This sample shows how to use the + setReadOnly + API to put editor into the read-only state that makes it impossible for users to change the editor contents. +

      +

      + For details on how to create this setup check the source code of this sample page. +

      +
      +
      +

      + +

      +

      + + +

      +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/replacebyclass.html b/sites/all/libraries/ckeditor/samples/replacebyclass.html new file mode 100644 index 0000000000..850df3969f --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/replacebyclass.html @@ -0,0 +1,57 @@ + + + + + + Replace Textareas by Class Name — CKEditor Sample + + + + +

      + CKEditor Samples » Replace Textarea Elements by Class Name +

      +
      +

      + This sample shows how to automatically replace all <textarea> elements + of a given class with a CKEditor instance. +

      +

      + To replace a <textarea> element, simply assign it the ckeditor + class, as in the code below: +

      +
      +<textarea class="ckeditor" name="editor1"></textarea>
      +
      +

      + Note that other <textarea> attributes (like id or name) need to be adjusted to your document. +

      +
      +
      +

      + + +

      +

      + +

      +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/replacebycode.html b/sites/all/libraries/ckeditor/samples/replacebycode.html new file mode 100644 index 0000000000..ad9753477e --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/replacebycode.html @@ -0,0 +1,56 @@ + + + + + + Replace Textarea by Code — CKEditor Sample + + + + +

      + CKEditor Samples » Replace Textarea Elements Using JavaScript Code +

      +
      +
      +

      + This editor is using an <iframe> element-based editing area, provided by the Wysiwygarea plugin. +

      +
      +CKEDITOR.replace( 'textarea_id' )
      +
      +
      + + +

      + +

      +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/sample.css b/sites/all/libraries/ckeditor/samples/sample.css new file mode 100644 index 0000000000..13bd4cdd5f --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/sample.css @@ -0,0 +1,365 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre +{ + line-height: 1.5; +} + +body +{ + padding: 10px 30px; +} + +input, textarea, select, option, optgroup, button, td, th +{ + font-size: 100%; +} + +pre +{ + -moz-tab-size: 4; + -o-tab-size: 4; + -webkit-tab-size: 4; + tab-size: 4; +} + +pre, code, kbd, samp, tt +{ + font-family: monospace,monospace; + font-size: 1em; +} + +body { + width: 960px; + margin: 0 auto; +} + +code +{ + background: #f3f3f3; + border: 1px solid #ddd; + padding: 1px 4px; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +abbr +{ + border-bottom: 1px dotted #555; + cursor: pointer; +} + +.new, .beta +{ + text-transform: uppercase; + font-size: 10px; + font-weight: bold; + padding: 1px 4px; + margin: 0 0 0 5px; + color: #fff; + float: right; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.new +{ + background: #FF7E00; + border: 1px solid #DA8028; + text-shadow: 0 1px 0 #C97626; + + -moz-box-shadow: 0 2px 3px 0 #FFA54E inset; + -webkit-box-shadow: 0 2px 3px 0 #FFA54E inset; + box-shadow: 0 2px 3px 0 #FFA54E inset; +} + +.beta +{ + background: #18C0DF; + border: 1px solid #19AAD8; + text-shadow: 0 1px 0 #048CAD; + font-style: italic; + + -moz-box-shadow: 0 2px 3px 0 #50D4FD inset; + -webkit-box-shadow: 0 2px 3px 0 #50D4FD inset; + box-shadow: 0 2px 3px 0 #50D4FD inset; +} + +h1.samples +{ + color: #0782C1; + font-size: 200%; + font-weight: normal; + margin: 0; + padding: 0; +} + +h1.samples a +{ + color: #0782C1; + text-decoration: none; + border-bottom: 1px dotted #0782C1; +} + +.samples a:hover +{ + border-bottom: 1px dotted #0782C1; +} + +h2.samples +{ + color: #000000; + font-size: 130%; + margin: 15px 0 0 0; + padding: 0; +} + +p, blockquote, address, form, pre, dl, h1.samples, h2.samples +{ + margin-bottom: 15px; +} + +ul.samples +{ + margin-bottom: 15px; +} + +.clear +{ + clear: both; +} + +fieldset +{ + margin: 0; + padding: 10px; +} + +body, input, textarea +{ + color: #333333; + font-family: Arial, Helvetica, sans-serif; +} + +body +{ + font-size: 75%; +} + +a.samples +{ + color: #189DE1; + text-decoration: none; +} + +form +{ + margin: 0; + padding: 0; +} + +pre.samples +{ + background-color: #F7F7F7; + border: 1px solid #D7D7D7; + overflow: auto; + padding: 0.25em; + white-space: pre-wrap; /* CSS 2.1 */ + word-wrap: break-word; /* IE7 */ +} + +#footer +{ + clear: both; + padding-top: 10px; +} + +#footer hr +{ + margin: 10px 0 15px 0; + height: 1px; + border: solid 1px gray; + border-bottom: none; +} + +#footer p +{ + margin: 0 10px 10px 10px; + float: left; +} + +#footer #copy +{ + float: right; +} + +#outputSample +{ + width: 100%; + table-layout: fixed; +} + +#outputSample thead th +{ + color: #dddddd; + background-color: #999999; + padding: 4px; + white-space: nowrap; +} + +#outputSample tbody th +{ + vertical-align: top; + text-align: left; +} + +#outputSample pre +{ + margin: 0; + padding: 0; +} + +.description +{ + border: 1px dotted #B7B7B7; + margin-bottom: 10px; + padding: 10px 10px 0; + overflow: hidden; +} + +label +{ + display: block; + margin-bottom: 6px; +} + +/** + * CKEditor editables are automatically set with the "cke_editable" class + * plus cke_editable_(inline|themed) depending on the editor type. + */ + +/* Style a bit the inline editables. */ +.cke_editable.cke_editable_inline +{ + cursor: pointer; +} + +/* Once an editable element gets focused, the "cke_focus" class is + added to it, so we can style it differently. */ +.cke_editable.cke_editable_inline.cke_focus +{ + box-shadow: inset 0px 0px 20px 3px #ddd, inset 0 0 1px #000; + outline: none; + background: #eee; + cursor: text; +} + +/* Avoid pre-formatted overflows inline editable. */ +.cke_editable_inline pre +{ + white-space: pre-wrap; + word-wrap: break-word; +} + +/** + * Samples index styles. + */ + +.twoColumns, +.twoColumnsLeft, +.twoColumnsRight +{ + overflow: hidden; +} + +.twoColumnsLeft, +.twoColumnsRight +{ + width: 45%; +} + +.twoColumnsLeft +{ + float: left; +} + +.twoColumnsRight +{ + float: right; +} + +dl.samples +{ + padding: 0 0 0 40px; +} +dl.samples > dt +{ + display: list-item; + list-style-type: disc; + list-style-position: outside; + margin: 0 0 3px; +} +dl.samples > dd +{ + margin: 0 0 3px; +} +.warning +{ + color: #ff0000; + background-color: #FFCCBA; + border: 2px dotted #ff0000; + padding: 15px 10px; + margin: 10px 0; +} + +/* Used on inline samples */ + +blockquote +{ + font-style: italic; + font-family: Georgia, Times, "Times New Roman", serif; + padding: 2px 0; + border-style: solid; + border-color: #ccc; + border-width: 0; +} + +.cke_contents_ltr blockquote +{ + padding-left: 20px; + padding-right: 8px; + border-left-width: 5px; +} + +.cke_contents_rtl blockquote +{ + padding-left: 8px; + padding-right: 20px; + border-right-width: 5px; +} + +img.right { + border: 1px solid #ccc; + float: right; + margin-left: 15px; + padding: 5px; +} + +img.left { + border: 1px solid #ccc; + float: left; + margin-right: 15px; + padding: 5px; +} + +.marker +{ + background-color: Yellow; +} diff --git a/sites/all/libraries/ckeditor/samples/sample.js b/sites/all/libraries/ckeditor/samples/sample.js new file mode 100644 index 0000000000..439a521217 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/sample.js @@ -0,0 +1,50 @@ +/** + * Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +// Tool scripts for the sample pages. +// This file can be ignored and is not required to make use of CKEditor. + +( function() { + CKEDITOR.on( 'instanceReady', function( ev ) { + // Check for sample compliance. + var editor = ev.editor, + meta = CKEDITOR.document.$.getElementsByName( 'ckeditor-sample-required-plugins' ), + requires = meta.length ? CKEDITOR.dom.element.get( meta[ 0 ] ).getAttribute( 'content' ).split( ',' ) : [], + missing = [], + i; + + if ( requires.length ) { + for ( i = 0; i < requires.length; i++ ) { + if ( !editor.plugins[ requires[ i ] ] ) + missing.push( '' + requires[ i ] + '' ); + } + + if ( missing.length ) { + var warn = CKEDITOR.dom.element.createFromHtml( + '
      ' + + 'To fully experience this demo, the ' + missing.join( ', ' ) + ' plugin' + ( missing.length > 1 ? 's are' : ' is' ) + ' required.' + + '
      ' + ); + warn.insertBefore( editor.container ); + } + } + + // Set icons. + var doc = new CKEDITOR.dom.document( document ), + icons = doc.find( '.button_icon' ); + + for ( i = 0; i < icons.count(); i++ ) { + var icon = icons.getItem( i ), + name = icon.getAttribute( 'data-icon' ), + style = CKEDITOR.skin.getIconStyle( name, ( CKEDITOR.lang.dir == 'rtl' ) ); + + icon.addClass( 'cke_button_icon' ); + icon.addClass( 'cke_button__' + name + '_icon' ); + icon.setAttribute( 'style', style ); + icon.setStyle( 'float', 'none' ); + + } + } ); +} )(); diff --git a/sites/all/libraries/ckeditor/samples/sample_posteddata.php b/sites/all/libraries/ckeditor/samples/sample_posteddata.php new file mode 100644 index 0000000000..c5c3308523 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/sample_posteddata.php @@ -0,0 +1,16 @@ +
      +
      +-------------------------------------------------------------------------------------------
      +  CKEditor - Posted Data
      +
      +  We are sorry, but your Web server does not support the PHP language used in this script.
      +
      +  Please note that CKEditor can be used with any other server-side language than just PHP.
      +  To save the content created with CKEditor you need to read the POST data on the server
      +  side and write it to a file or the database.
      +
      +  Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
      +  For licensing, see LICENSE.md or http://ckeditor.com/license
      +-------------------------------------------------------------------------------------------
      +
      +
      */ include "assets/posteddata.php"; ?> diff --git a/sites/all/libraries/ckeditor/samples/tabindex.html b/sites/all/libraries/ckeditor/samples/tabindex.html new file mode 100644 index 0000000000..68a95bf5da --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/tabindex.html @@ -0,0 +1,75 @@ + + + + + + TAB Key-Based Navigation — CKEditor Sample + + + + + + +

      + CKEditor Samples » TAB Key-Based Navigation +

      +
      +

      + This sample shows how tab key navigation among editor instances is + affected by the tabIndex attribute from + the original page element. Use TAB key to move between the editors. +

      +
      +

      + +

      +
      +

      + +

      +

      + +

      + + + diff --git a/sites/all/libraries/ckeditor/samples/uicolor.html b/sites/all/libraries/ckeditor/samples/uicolor.html new file mode 100644 index 0000000000..3e57a46c3b --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/uicolor.html @@ -0,0 +1,69 @@ + + + + + + UI Color Picker — CKEditor Sample + + + + +

      + CKEditor Samples » UI Color +

      +
      +

      + This sample shows how to automatically replace <textarea> elements + with a CKEditor instance with an option to change the color of its user interface.
      + Note:The UI skin color feature depends on the CKEditor skin + compatibility. The Moono and Kama skins are examples of skins that work with it. +

      +
      +
      +

      + This editor instance has a UI color value defined in configuration to change the skin color, + To specify the color of the user interface, set the uiColor property: +

      +
      +CKEDITOR.replace( 'textarea_id', {
      +	uiColor: '#14B8C4'
      +});
      +

      + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

      +

      + + +

      +

      + +

      +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/uilanguages.html b/sites/all/libraries/ckeditor/samples/uilanguages.html new file mode 100644 index 0000000000..596e0d7a83 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/uilanguages.html @@ -0,0 +1,119 @@ + + + + + + User Interface Globalization — CKEditor Sample + + + + + +

      + CKEditor Samples » User Interface Languages +

      +
      +

      + This sample shows how to automatically replace <textarea> elements + with a CKEditor instance with an option to change the language of its user interface. +

      +

      + It pulls the language list from CKEditor _languages.js file that contains the list of supported languages and creates + a drop-down list that lets the user change the UI language. +

      +

      + By default, CKEditor automatically localizes the editor to the language of the user. + The UI language can be controlled with two configuration options: + language and + + defaultLanguage. The defaultLanguage setting specifies the + default CKEditor language to be used when a localization suitable for user's settings is not available. +

      +

      + To specify the user interface language that will be used no matter what language is + specified in user's browser or operating system, set the language property: +

      +
      +CKEDITOR.replace( 'textarea_id', {
      +	// Load the German interface.
      +	language: 'de'
      +});
      +

      + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

      +
      +
      +

      + Available languages ( languages!):
      + +
      + + (You may see strange characters if your system does not support the selected language) + +

      +

      + + +

      +
      + + + diff --git a/sites/all/libraries/ckeditor/samples/xhtmlstyle.html b/sites/all/libraries/ckeditor/samples/xhtmlstyle.html new file mode 100644 index 0000000000..b9d9a2594c --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/xhtmlstyle.html @@ -0,0 +1,231 @@ + + + + + + XHTML Compliant Output — CKEditor Sample + + + + + + +

      + CKEditor Samples » Producing XHTML Compliant Output +

      +
      +

      + This sample shows how to configure CKEditor to output valid + XHTML 1.1 code. + Deprecated elements (<font>, <u>) or attributes + (size, face) will be replaced with XHTML compliant code. +

      +

      + To add a CKEditor instance outputting valid XHTML code, load the editor using a standard + JavaScript call and define CKEditor features to use the XHTML compliant elements and styles. +

      +

      + A snippet of the configuration code can be seen below; check the source of this page for + full definition: +

      +
      +CKEDITOR.replace( 'textarea_id', {
      +	contentsCss: 'assets/outputxhtml.css',
      +
      +	coreStyles_bold: {
      +		element: 'span',
      +		attributes: { 'class': 'Bold' }
      +	},
      +	coreStyles_italic: {
      +		element: 'span',
      +		attributes: { 'class': 'Italic' }
      +	},
      +
      +	...
      +});
      +
      +
      +

      + + + +

      +

      + +

      +
      + + + diff --git a/sites/all/libraries/ckeditor/skins/moono/dialog.css b/sites/all/libraries/ckeditor/skins/moono/dialog.css new file mode 100644 index 0000000000..86986f17a4 --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/dialog.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/dialog_ie.css b/sites/all/libraries/ckeditor/skins/moono/dialog_ie.css new file mode 100644 index 0000000000..02b96e526a --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/dialog_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/dialog_ie7.css b/sites/all/libraries/ckeditor/skins/moono/dialog_ie7.css new file mode 100644 index 0000000000..8948f32088 --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/dialog_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/dialog_ie8.css b/sites/all/libraries/ckeditor/skins/moono/dialog_ie8.css new file mode 100644 index 0000000000..4f39b924fc --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/dialog_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/dialog_iequirks.css b/sites/all/libraries/ckeditor/skins/moono/dialog_iequirks.css new file mode 100644 index 0000000000..180b5b5bc1 --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/dialog_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:""} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/editor.css b/sites/all/libraries/ckeditor/skins/moono/editor.css new file mode 100644 index 0000000000..1fdcb43ca8 --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/editor.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/editor_gecko.css b/sites/all/libraries/ckeditor/skins/moono/editor_gecko.css new file mode 100644 index 0000000000..e1210656a1 --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/editor_gecko.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/editor_ie.css b/sites/all/libraries/ckeditor/skins/moono/editor_ie.css new file mode 100644 index 0000000000..4878a90b4a --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/editor_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/editor_ie7.css b/sites/all/libraries/ckeditor/skins/moono/editor_ie7.css new file mode 100644 index 0000000000..8ecfc0ae0d --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/editor_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/editor_ie8.css b/sites/all/libraries/ckeditor/skins/moono/editor_ie8.css new file mode 100644 index 0000000000..6971f74f7b --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/editor_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/editor_iequirks.css b/sites/all/libraries/ckeditor/skins/moono/editor_iequirks.css new file mode 100644 index 0000000000..1cbf808719 --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/editor_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/icons.png b/sites/all/libraries/ckeditor/skins/moono/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..ee029707f76fa8e4851cd3bb638ae150e1e862ef GIT binary patch literal 10227 zcmW++2RPLKAOG59o-OM-Gi0yqarR!3EhA)a*(-;$%ghL6?^Gz;37HW|W*lWEE9C$A z{qNz9=bq;~KHvBI^?r>{lA*o^`Hh=5AP6GY(nK1APbvt)hZ7TmzxFYU%Mb*Iw2;cC zAIb61$0p^zGR4KH%2ioKPNQ=jPtJ>M0dq4jzv761- zG&KD5%I8x089XlkJutU%?}OQK#A)Pd=Q2STrv)TOV$TjqMejm;=A$1?*Nky?++AIH z$HvAI#$4jQ?P97;Dt%UZV&38`a!)+3P+2)2Okr5w36ME&Zf-6jWe}8WemGIQnw6Ec zeSUtG`qY$Bh#XtI$}Mzis>4tk>$=>;1nxogQ$_8jJl$8F)`D{q41(4N-RGNyU0gaj zA)b=oikFs_V!yUNWIo;f#sD?hj<6r!J(8m=#=>qSKyc=G*e9-Jc5vncIm) z7Kh4#fyaOI@KMB(-Rv|pG%x=C{d>j1!9m!)Y`1g#xIQp2a4fRBo4m)NzM%g>bKUmN zPDMwD3_GlzqpTh&J~KJl)Y#gZ-O}2Mmm%`CN+F|w>PA8jV`sid5Nq@f27~dGn<%fV z`vjGWyU?JB!8Jk|I6V`L{02HYk7^ql)a~p_N>CV1HYPPV6|sGIIE#Aul#}>PA%7O4 zl)>1(K9xTwCu@IyH7=9IOx4gp(fx^({jTB&4i3B*hOTn7H^|Xw^z-}eeq3`)OI<}G zlCWA57N}cb1i$BoJxh-cx><4bNF#z2>6Af}v#ghx=FROzuwp{;c0_FO=H~aNki!Sr zV=j0TM~pXbs(5<~bvuvJM_F20UVfvQ!b8pk53vRtYG@E0pPqWd5$rHEvQx*@XXc`q z;>}RDTtSA9X$jT~DyrSA>AiL@Mp|sS#VFKI#XZy3F z1Dd>cBT23F{kwPb+d-Wo-b?Qzn!PF#F1*_}==p?%PN|Iw@4d2+cvp-K#gFUl&(J%f z=FZ5@{){=2Yv}s>lLOuC+RTE-44t`*6{y|0bI0lJH#~^K)%l*EGk^38x6iNsD^sxi zaDA0)|M2ken42*u^L&&FG&6q|TEE&=VBJ*p<46pnQbQZCb!O>!E4m)~ixYzLoUSof zwHJ4$D6)6G9~sCU4k#)yT2$gz z;U7dmb7Gjj{vOl`6%5=70iy4fULhH}x!VyvD~2ItbnJFUOAM3Np7g%){FWwY*Y$qJ z>uq^=H+w`x#MZB0q~v5|;m`^}=l6fu=4KJw`txtFyH+X0+}TNFgmH3SvT#Q?gltNg zoQzEJGk$Zw&fxvctnBPwUzW)0i{&Fo1uZf=WI?v_PICsgl&&Z0!+M%*4%E}`k8KJ& z-SfFC(e6XmBLkg^VQw-xMq=hm=YAy&t@nP)7vl(VG$rTbsAQ297A zqN1#fBWU{`wfyho?NDRqUPrA2$C;hDlkDf`CwLLwWdm?Ywxy-z2_HW{32rS>^qst?x|JN-g}SeTrPF@32W(FZ zA_`QI$CU;pOE@bPv+fb9J3MYbu{24#u_#;mcJF$DhGNuX)D}T?PRq^bsdJnX8K!s$ z84}%92|C|25f|!yCipmY(#US8E?@QK--5U_Z^5#&-lq!Oh~GM^1&>1QCoFhI^n#V+OLzw4YKJ=zSoXzl73(EBBVE4!xyw|Dr?>5vHwk z7RBPzK;>tOuYye0LiuSAhX&5(eqva%5TQjfj}$epdk`AD>P!pI0Y)`o_LR)acMPc?Xb%Sg_y{#EHlH?i%WUi2Piy3@}}nEOsyN)+?@#n-m~ zuE!tp{dvfTAJTjUbK}k)rXnK*a{*CR6}U!FjLpo-T6>Be9T^$9fsfl{Ay6(tf=*A5 z`gs^)XlOV|vZ4;16UMDR4C?%@ATAycP~-E6D9oZe@`_YVO|5Hl(`Dq-C(hbgZ7}ZW zBqSw`U0hr!VRtgI<|gA(X{o6n0PG8Io?f&{r?n=kyhxdyoyBYH{`Z(Knp>;RO@&rq zpL&V}(V>gHK+YOk_j8{!^4^0FEp26B(>j@$nO4qGO3&&g_AKB=ij9;yxj#5!< zF<$8@cxe9t84Q2$b(Yl!chUTF(_qp8TIl)$7y6c7I3gM9I+B7Vn~$ z)S}lZ4AJt$`#);*vi4rRUvN;+^zodXf#UhF!RCl;G>UDpE8=3~2 z(+yGr%^2a29e=sAv*U;is1z+iiGt_z7Z4`ZbcMfF#+Rf;_bn}NS~ou!G(c^sKl}4$ zdfFI_g=KwY(a3;);TZkpUU2tC4rXhSV#UzNXv!J!SS#P+M(OD}wq#iexsMD;gD85e zKvyejA-${b>;w_w#=J!SQJh&I=xGD1%7D_G^|As~h4QsJLWhQL*RNfZe0zJFg9N5! zV8G+d0;7W&HGcI-GZ=7bRfA>F#26>m#eenq@(E6zq^D$!PUWqH%@p=AroipnEX`zR z?S)-W5-rJR3Z_SWpYvtD!~cOa^@fuc;Bz8=2XL$Fs}nm~#CEvFTs{#Q>S$&!6o{x< zxZ(}>!fnnWT9Z&MRC+JP0R1_SrI6V2Q_dwN0jD(j5F_A9oq_uJIk3HSlz?^FT_CZ_ zeo9F!y6S5fBY0Z!w{PE8rP`r=#@l3Be-#=U8exo_nX|C5xtfY4Af3KLKPrn_EOyt^ z*0%Hq!`o@&$B&&aoIcp1;7CzX(b$HD2I`c--#oX|2Ooqwul6NKc)exz^za zYfHSdS{fR>C}9!0NFD&~u~fPl1XM=u?(RQv;(D8IDAf-;Eo5hB zAGJJPnx8*w8gu!DH|gGN!4@dZ!l6*oNbTqG?ai(P)Cs*Ky>Ua5YRdR4`JRWH+kGO3 z3G53npu2RCC&akO8QngwJ{aQhGgOO{8w>1%67uSSnD}YTugSv%rCibu>kLp1HiBDc z_g)OSv}RV7ZcmL=hznU$tjIv@%aIqmgP$u6h#>2CJ~&bTj!M$;s-h3*6mabevwEh= zHPUZt>*(+UUMEMDS^#OjxqErC`^~c?{P*yXv$L~YbPK9x-a`^mMghTl5r#=@BK3gm zA`KeAY$~4gU`5S@C)_WXj=oL*wbLPm}t>u8CTwlf$HlH)FP-!n4aO3m+~E( zR+5&~RrfaH%0vmq5$=!=w%d(0I~mg(%~2I0f@pWr@N7< z!FDTUkUE$IjS?0SiP;#A!X!ru ziXL`~?O%}$4F*-utyOjjlb=7{lC0eC+)?$xUoS0X{#M)ea@%3q)YqK&_Re?^vd*}FJ>O@ zxZ_J~tu2O58wqluqovi<+xl>bVI~o|ysh(be7u;Y{vsUL;KS)sSTLJx&`w_#myY7@Yvn2u}VB%1%P zt-ijVo006ng9o^vBZF#ZJJcV9kwG^|Nw)#Ve*;=m9)SEEDMqrDP&SQpwuJuG9`Hr) zksOMcWyk@Hp{uK_t?g}?Q@ONKRC7&D4It{)zc-VC(t%Ri?J_*d48J#>8dWw zh;}1KBEg~7QfM2L5mr-WJ&gTW`UaVRaQ}mGET5-nzWRfgIs$rQc8fvK$B`S2b9c-x zaj7I2E4n&oCKyTgBe=`pjslm=I0(^u}B)ueQKn*@(o1>(R(gL2g&re z#uS>q?HZFWQJ-F^RrnjTR}m=9BZwVhgdI6$tVoR`2=U+w z1ilv{21uI8gR6c+v(Hc5p-;IbD{GY;MK^W1#tFquUqC~Q>o4uxgtd_E zs7;2-H5ucosw!!yRMRLfyVkt%&FGmLtu0{&DFhIW2%?1aLIp|HO_)d}{z2xAiJ1UvR-h=J%;3M>8TY!|o#CEAuo9mY%}ImWQvF(__%uxH*`$!5H1f5< zn|y2AxGe>EnI|3|9)ol6T|DH+cuL0;9N5d`_qM~7>nF-`nvaAEjtIEk@J7=7!nL%`Rie^83Nw<^Sb*AE1dO#>ZWarS4B{n)-8bC2~h8q?po5 zUAx->x2)3G%&vwy#$K4w<+YJy0q{Ixl;9qTDrI9yuW|Wim0C&4%gY&=nN@`u@g2!x zl%Q#4Nw#$CQ!o?3K?mg~Do07;n;#$l`~b#tu8kltx9CFs{r%qx+H|}w#J4M})S7pj zEi5VNCV&8FlzWKpbC>BTl
      U?)8gWr;~ura3&%P_}sDy1s+T!MC|q+Gx$a{!nSH zH12DzCzEKl%CO2np6!MiMMV+*ety4SA08g2X!`ivim;)a-wj#@D_UJwhZdkup^U|p zF~z=z@XwoBGlmJ0CMsXPoI33~mCw`V7RCS{VDj_lIAE8oU!EVq%X-1uljV*kTwR>D z5*HH_Z(`ZfdBVqhSpamc`nC5k#?Ad2gQ9^jg)$D2Nkdwn=<)(sI4EBCc^;pKJCK&~ ze!EhFL&ezg8^gD{wc@QaBIA1DU{HyZXztjylGrvffTgrfsi>$R4!y?SvJMXq3*StIBfwxp&O6~`hbt&5Mv=mfll@l2VK%lM0dB!wUVC54 z$`FmC8)ct9eHsP5zQnAow07jjni*olH~&LtR!5&7^lhFYfSv4==VGM2TR1S{Jb3;R&fwAw?CVnfm?RNpqV(+Im)sV z5)z1z2!|aecJ}M+!3STtx~&`?Ie_R8;KSPAR#j-wI!))1q zLS6`GUb`ySM~gKo83nr(wcD z6X_<8uPt|we@^{y2@xIX@g@{Mf~~j-Ll+f98cTD{yQnyiUW^Txw9T#sY)u~44@zkY z=8bLIfVv&oP_eaTgBdv*8&8wiPhWqAVJvusgbZ#o0KX*);AxdT`ul@s3vC%0nI%Vb z(Q4?w2k!_i{TzTrTG-Lq$xg6h^Ui10YbUwrE>VxuqHK!J&i0lLgXZHkMFdoa9p zlOtK#K{JW{J>6gKHq}?s5nMDtaw8spC@*)+1&?rHVF89%P)24JCpiuD@pl_PpK=u_ z5ph(H0yb~ct5;6|E026(X@MsQefa!J?-x&*Dv*=Yh|{apN-9!*^9Ef4pH*PK0H?J# z29HS4$;rv%*UnA=hM!-;O$O$fyC85f%v|B8{e*&b8P}E7t4%GZk}j5`#U{_11g6x2 z7e(g~C-AL-fRug`2n0<|T>I&pnt?uJjHI1`qvPX}jH&A2$LZli4R>Mc>R#Yx*yW2j zVq%!YTv#kRgLe6~aowK?z(`w>GwMj9fytbZ(@3*3cQ!{=RXhoCaipC3aNZDpph5Vm zH1Jn5?nQ&1AcJ+Of@5_A{<0OhnM#CKUylj=^(BIty_|y8j@?xRjm#s5$h+A0O(-dk zUY|uGMDd~}mklz$yNQ9X#^#7hu0?7NuR@9#_fVjrgqH!IAaon!g5~2V74BcB%B!== zbg^kZ_4UA^QecsO(5%n@QHN#Lq}*)$mB5^IgrveGZFmd&{G3{LIYP<-7RQuVsw;0!*0k?R68wC(iWO&v7zdBQ$;w0i zf$O+AF?V`r>&)EB*;F$qN`jzjVnb{P%)FRxsVlMCUhhAcTa}xgkk`83}=n;Ps#U=!S zcAZ&R&{olLC4n7Fv!v<$KKTHTyoiFAX^0G8^xYrmOHU3Zs|c!-C$U8pbN5dAX9`4S zGMyXM z*%IiCs1XnnsysOfs^+d85RH{L*3ltNO;0bcsKEcvkhs|IzV3zs#4!I#H0@#0p@4Zt zz@?-ZN+SQ>uDi$o#(P;X#OKfB4wseNtp3VT6#K%kdV;y z+}ZgN77SJgVMd>=$rt*Vc?ai*A{ZCkt-6{T+=(NH%3VSTIIkw!B~@;$YI{VvD8Bu2 zRSnuMH>{9_0DT$$gq@*0rRDBZw>uvv+==}y&hu{^!tLsw64%iv>b3cbDEodHGd+eOs%%3x(^7#_UGqmRqKM75=RMDe zM<@>Kp5z73X!Afr1Fbi?jZ95xkLm~x1qe}%e*_W9mSJ-fmXn7sR|~lr{`iM>#ruc8 z;^Qw1xiWQDGksRc$3L_1d@>M${mn_Z(JsdqY>E&qdKDs=&a3kvW6n7tO^8??cp#j= z74_QT>`q!PoZOH+IXU?tAo{MJo@&4+YStXUPsmTIvF7FHKLRmMobn%|;UhT@N#>|O zTSlJkkOSGX4C`o2Zb6fE#;=SY1-r;mjg@3T1oNm*liXux-DeTVkFPkzN z+7`p&Ni;JkoHOVhenhtn*5t*R&u z=o`&sqeyw$3|7Av3U=U9Qf}jojE)|k$EJ0&{oDMZGVoYAJY0|f8Bdm^X77GP@Qj<2 zlVAK%MpfM;CwL>KnKbqv%BFL`wHz87{O=RdNIAj4dB2p4zpV7R(17fL=9q@*K)CW# zf`S&6r(6q@V0F9&+0@a&c4S7s>KvHSc2_^mFF{u=2g?+N?6qTGJ#=x&0izsr!YKfH zGGO_F3+n`J%b*PZ^aND}Q@RZ`0DGZ*bVGZ8f1lEG@!et617pcOCv-%aB_3v8ACkop zUkdu>xvfw_nJZ)m6#HEo{Wzn9nZEFV ztw&{{#RiUfNj;TQP*A|u`JD~S%>yzD3a@ACJFr9xVNCL%JRdz~-VL%s;#KbZvq)Ln z*m$l;d(|~I?yF(uCC`f_r0#NZaWO&fLH73EyZb6A*u`bjjd(Ly%@4QWiO&7|_p85t z{Tg<%_r3F3e8lR1zPZBQ&z~KBZTS?eCcVZ3E{Dyem6et0uBo2jp*vDr6y)Scs>IH{ zL9~%+-w8&pK7IN$F98S6!=sT64f2ygfS>-Pq3|_&l^_zNjn3NfM4;b`Q&I{F2yjAq zB92dRdiIZg|Hg$tDnT4uPeB9$=4a|1>zd-cD!o_#<;y*7Ev@PEOb3}L3Iw?^*1H`HhPLrc9UkKo*XU<5L=V0c{OJUOs|T5O&Ab0I7zYDa^^CFVtkQwL>C5 z09mzw6#x1(mYB9AJg>Uu;IS6H93E6w=bB0XryRb1%o1%@CJ@cb94R!C+_Zy={rF3d zJ9|472ni61MnRCVvGJalrzcn1`Vy|a(ZV5L?s%vBqel#{UcQWwk(0ahh5((t?ssq7 zYiw-nrtA4$AgcTmnYO-H+t^5nYr(<&LH6PJbNG<2A}+VH#(b!79t06J{I?f?wu>wu zJ{yl zV#02D&~iY`aM#D;Mx-m#AWyHVt$oA*J5F-gs;(?vFtxK|cR~|DiPv>7E|`HaK%)5f$Hl3IWrz;lPJSZJed6A{CvpT zUgthH6o$iOqGw>>Ee1p<3(Msv4@t#_sR1ldGL%HPH~|3xGms`ZP2OF9m-^*>;D>K9 zVdk0IrqRul2L}fZ#aI!~1@SbId;F}m{Wy&D>19IG?_?qS<*tbPz4lZfRX&?akEG2C zM<$FH%XcoXANFkc(c$q!Fkw zdE05-P`0}20N@8Jgl^W_k3gCpfpowtcQ@;P%txj%M9SdWBX{>Q!1Q)*m9gKhR@6kk zwd)Ajb}}(BX?#b%aZhCIX+gnF4^PkI%fs|2z+sCC58zG)y|^m`7>iM%sPoaN>*L0# z2#nWTylm@2|8{HZh=?l}E*krz&9PUY+wiECqSzrjP&L;y269sr z5PSGR3=q2-6+nlzNB#X=@r$gHU>JO zh*V|7n$|p)2|pUdF1+hM&Idwb9G>Rp;>Dh6(=c#z6^@C6pJw*3nkJRqE=E%KC_{KfPEXS7qI*<-cqM=vCbnF8OOG`6)?XQ$J zv5AO?z#6=O>aHkozr}mIJXPJ13IfJh+=Kd9j8WWyJC7WhiL9fLy z??KYsn`;-@Ze`2em(up9#EH)jk}4Q;F?jUoQ4?VKG_b4k_h@QLJlAZS38})dVhl#T z`XHr%6{qyOdmEvrWT6$O=(5+_u$wn;#sYq}j6@3ECPljWE`0m8%+AJE9QOOi@LQ;~ zscACn`SbUoKm`mjIbK(A_R!)>LqZcJipzo9(=Xehl>nLL{k=VfamEX8ce8u`bmKT7 z=dTLA{BU}nkTZ*u{$~}(IJlcE@iOiKi;!RPzzN+8Tuz)~EYBS)+K0~ulf@Xxg#U|! zKmY`CO*jIum%K3-5OgOss}G7`K&^aXhf(^{NcwBC&A2j zAjcUOmXxHQO`^INy^aCgF5(~g%JYJOXSzSv1_7l^ICZf$0x=yv!kxP}IK(H}fe0oM zwIn$CVx2kK6l%0}TXlhWHW~z8mtKCn3tg`T$V5ec)|2uDGZSz7WgVpS;Z$s?sc z*j>u8JQ0qk+1VyVIXQ%Jy%2C>im}1A?|g32DK+%3YJ!a({o_TlLm)TvfU;SU$U)@m z^@h&91w)X;*45UQgXKZ=>SL*3Hvd-QD1(4)v`cM%x6C|DvuXJLm(QPDL9$W&EZhd= z#*OHBhLV)K*lGQqXWfG$Bq`QY1Xh`q#PojHPV>;xBq!Wu1YS1hSh38W9Ssunu8{XP zl+~@7kY9bMW9v{Vi!muEw&|M4=Hwn!a@+6z^bAVOdrB4#v0wfKfJNId9U8CTR~t!8(_vipWU{(2VfTg z*bKx>=o9((&vrRs+zXMrcbViS{!1&tW(T5)V);>=EeCW0NqBcv)yK%a#rE$YaZ~|# zCK62*-Q3b53e+LUt9b$AI$Z+f0qpd0K(pq)jTmd4Q22J|My6E~?+*T`dt275yZkq> zmWlZ6MpOMKLu_F?W0o1vKxtZDaV@{j&3e}-y#Ei$A{54B{c1YOmho1PhK}mFzyfN~* zTnXd##y5`8!Eb+Qnl-XKPI2OQGcO->kf6NNfAAo#pDl2}^uRCGlAh9ofoV#5TvaJ(N+WNU#W6>;o|6XMl;QM>5Zm`Q7Uj zh1~qM8{`cX`BiP1>8|hm z?|biizvp{Co|(g$GcYrU^V@r`z1G@)l9A zQ&aLn2Dyc`H7z3}I(4#)pWpLqPcNsvH3cUNla)Sz0@k5I=U=XqF)BAxrfWVtG5{HK zTJfMr1kW>XLgMQLa>Ax!GcTsXXTA<4=TsPAWC-Z!+OeHlYHlfel*<%gu6rnoo3%+D zK?A2YAwknCBNEQU@eG96$Doh3Uz&+ z!BU4;-hy7|dmZf$TXNPM#&xCiG=_(1Z@$ewg~Rl!tEx=6NOA;7D$FnJ?-P7(tN_7` zVn+tU{ote|)?ry%on+LZDiRWsmF2k_TeWYuuYh*cLu=q~im|W9XO*J)og>dqCvw5$ zo`qy0b|n44psHMlp8o6Ce@?DePOi9kc%ar=KXJ6Rk_kHOr1~|b`pbf1KL89U?k0bF zqpGiOu3O0a{Qn46d`6h?jjCw*^FQ+6h+Q7bIP>guCifPn{ChPwa|&qTNuA3u&;`LD zx3L-}SWXMCbD8+V5~bEWEH>9injFvfwlLm0IJgODYEu#j;sj73*F6Z=*7u{!MA05N zfFUYeSxLgU^z>bF0{^S1s9?a(yzM?k(*sW389z8EB?Xt31o}=)bosaSV!vUz0-x|s z7K?0;y-lxweCffaMo8m*R)Z%D4Ym}CU(uQVP7I7i@F>G=V;TdPtJsD)IeZt^T>>;P zqyK;>9KdP+Ydp0kn$Il(V-R3NsbFf(St;znB9?jq*GcXPn~&ms`jj$L)c4j(A2Cy2)G`i)I5RcJ`z~ilMIEv)s*F4_^l_FC3&m!ebr^C~LBjlgxbn zt#?=eAc;U=!#bSETZ}k`MMMH|#cmJni+X-D2EA=1gxO`{phJD1ORK}iPT**PBu}15 zT5G4=BxxH7P4RfSvLbsmgYyj|5&{rGQqD&( z6BrNB4}aN2km_T>0aWtDi62LU{59sT=ZTF3Eh_bVf`fyle0|$Y z_|juE6l1&@U>5kHOa-4Gd^b|XL|pd-IaGW6uGuh3lZYu%!6&|rMItdDvuGBpeU=K2 z2$y0Ip%nw1!duC?iPI5ChPl*WVWTYCvMC+B4AjE^i zs4CdN%Uqy|--!tYcL0(zPo0zF9Co%Kt)lJ#kCVN9O26C8G7;C($AO)*z^yqWAWw=P z9mu3j3Wxm@pzX`Jip(y;PuYmD-tv=0%F=@Sq-3OOT3T8+d*!}oSb#A(F+`HEJIR?m z^#0!WU}Gd5qM+4}LgIclt*v@H-+rg>BqJm9W%e!F*a=s5>g7H^}(ccCY@@lm%F2e%`2|WohPC&F!ZWE30qXAePY?65}*2=cZBkCwwl#e|D3aF?Rvu_dZ6fJD*0_h|3I8TN7h&#Rp#r~}% zh?Q$&f}1{Lr-n`K?f_Ciqt~st@ueFk6(MFg;EHl7Tk@NCC&01uy(M`cH3@dWAHgq( zGX9-OF6`)R@m94ox(3RQ`uL>G@EzBUA5BePr9H?GMPsmtIbaUW`*l8+mX?Oo)6<3& zF+~rj+f#e}{b9k-NUg6jl9CWoGP2LSBpYWL&mDlnzn}Ca5Hb>fp;?;~&$&A6e^r>; z2juS^uMaIhrJyj1Pf9{nWVS0(mJHiG5WGF=dw@zrj>KN^B|bzX1`xo22C?7QL`Y+( zqXSqH20A(!6fA{Euj}p`*{l|X{I(VF3$Y9@8xP|^Fh-aYGgV6KTBLr{EkpM zD+B{UDD9+HKGpaLEzk|jy-QCieRXVVbqH%8?t)^oV^YEN81bXJC-OU43JO3$9dyh8 z`YN?XV&V8nAQhd=I@0?o?C_10yce3~*MD-(zmt#I@TD;FGj@5(tH*o{UQ(}I&y(sG zT@nmuxmiURxXm`{Frfi#AD8bp1ia$hDHb>H?S>BWXGC@H5AXOx|0f4_{ zCmIxfc}GG{(qYW+z@hkhVM`x5*=UtFu`n?K$?F6@_CQ;Wa3$h#Z|;1tA3ajAYW4BC zf31{)Q`nNNP5_W7Zr=cUH|S_B7Yjc1vv2tW5n!%~!K=S1s26zGBu;Y&p5=qQ-Y=Us zMTt9*8lXef_j<}+7eLM01oQG?aJobEqLRJB>!spmi8^)x06F^B_n_&+ZV8|uzH;vV zU4;Mb7F}gmAR$S!A$Lx;i1nyJrWRRpNan$|5O$6qUvOk-$3oSlMk`GlRYoY`we|yKo_pino))H+`Et zEu879DAQvgiRel`6Kiel16-o&iYse@z7du*z5(p3zk#0-@87>4r5Z_07lcZD)hfcu zes*%@-LP7i-U7(76O$4^lw8lv)c^W{b@t@uXyoSLfG#MXz~&_!QdrmI*~SzRFRz7g zG<7_TBoY)4sp^%^G1c&GGgMy&%d;{Ii||M8(+3?4HVb&;uLs}fKMlS19h(ve31mA~ z9N93j3M~`ZBjV!x{ylCWJVyN`!k<&Zw|y#A`9-jYhfqLi z){G4w*VdUwP^{b<-$6{W1Oq?a5HY8r-OQU>)40~$7c@Z~ruDp7#Ozf!FQ~n1oUKb< zxrcvLP3cI>Yz@KAwikH67LVOVcK{7>5Xi?&QBI0;)B3>Rtaa$-&=%1$T`(*JtBxJIyOG<~G z=-0k0NtA2_d8is!mF_o6hlZ>_ODe}8gBBL`e3hI|u5o~X3yy}!GE5jahid;Ux z)gNX~VTw?vNCgXJw+$aWNNTvvyl-#h*|R@1hn(!Z);odzK%VBFYqKd&s+zhw_0N~- zAv+~3E-o%BU}oOh*)fZz5W@saJSYN*Ir7;=+5Lsyy#o;zPYc^)EEx2Y(3|ATJ9LUL z`~h~I3W+Oi7*gBFBlxPEG0Vh#04l&d83maE5q#rHjh>_>l$Ms({k(DWGNZIKhAQe< zl`8WabCAWB5!%4B$lsV$+CrGI@NK=0Z&Nl@hb-CIIb-GZ!{Wlq_u(IU|li1G2MI@)Q?)#oOV)v47WxtRq3*L_y3B znmCEe@318Luw9gGr93$sU#vv^0*?2L^pQ?9fk<omhM323eeB+7LROuk^vX-= z8$5Fax6b2W9gFq%ZspXL z55#|ynw>7SgF@lFvX8?2{xI}87e@*f*a#+SRIp*i%zVVHvyUQ2_oEM5_!Qe=L-lc8 z4`P5~yIMJ#DWbjWBHUfpaU|+_ebeL9?8Ydn5+7c1jSfT*+);^ic_bl@W#s!>DM~Yi zpLr8Ws@o7IB{LWjPvVbnuH72^%;e*XNqmQgj^$m?@a5pDjc;D7p^ z-;PPSn^9y}Eqir3D%IJ+lQk*%0IO;M&@AWG%+*NcY1#Q`}XRjLa&U8nOPFV z{5m>1Va(DG9zP=jJows#a{R&W%zu@WbJ6`503AIG22iS491VM!wv)#0J*+2~j@lz@YQt1u9gOS_x z>z4&RJ#bWLg&tdfs;JP+G^$Kkx#KK+1&G ze2ZsK1Vh3E9PARxXFh`PUsGHA;X@4!AA`lKXnH1lWNhS}t01`s7j`R{;n5H5XRBgN zNvyWx>0cIxH4wdc@#66MuKD>~t4It&L&yjk18u0Ut2>wQ_4Tcu+72=*4^=4&)P8>e z`#McZ)Ys2w=X$W*?ni_~$Dn>r&IzGKMgem>J3BapgoJz|GGh=SfmCk` zJ_CV9BOhA#M%~Y!4Arybf1M?@r0n?8D$M@r$wXZD=NR5Eu&4>!Y5Rx68)~eoH5(_w z!6;$C1g=^OVqX&ri?uw% zX4hwX3ysyLCMG7!D=Sn|pAmx5fg^T38M@Va5NWhQcLHSW8fITj*yCxQgux+)N!wbm zyI=L7fWyRv!H%4O&XU0Scx|9AK0e+jfQrxB(o&&`HW2dNt~J=RHNvu%zbFSFovq9b zF*T{wGp(L?%Kf^F>87nM1(lG>m&W&0iuwY$vgT4M!(_-8{xLwbz+h>7>5cOKnBlP_~S38os<% z)>t2=im>SE=>vw=@yT&QR~!XlUl%!kF}%b?*Z&lz#)A=OtjoORL18_Xp-?x6Z{l6F zuMrTz{CLZO^&yfmUPEjeqFG9>_hsnB z9}v9^^o#UlC}CUH|5t2_b4DtNb2)L5RJ=VhL(o(4c6Wf)!>rnLIgVDFe5rPK5CZIka2x8)Ew8iiAWymznK@UZ%`G5K`pK9lB&!Azm6wUhv1Q%a zEw?HD7Bch4e|ZxNOQ^Z2X=S4!(HE0J+MMU%cqn*?h#f!v9Zr(V5xWVOXpQek8iTI+ zaneP-Lw45ZUW>oGN_&^%Jn026K7fix(Bv*6qJMc7E&v zInPqH(8aRA#tD_Fe@w2;dwpXwuf6<$4!I0TQ8UM%9Sd&)8#i)!Q7m7-tpwG-Wo2cH zjBu%cqMi!Qm8z`cGHW>km3RDp7K zGLnYce=ml5rJG#bs&$;?^>C8}Gglyo+T>8Jsv2=WF%ZjVm=i?*+6pq6 zpMA&yN7v3Q=1@aRqN-A+P^tFPzyCQ}xp(k&-Wzpf;>r>1%zIy|Z&UkWV26{PrG$nD0`_@eT8t|9 zefH&JM-8lo^kvNQ0XpYbJ85-kb*H0!h2y38grov(=ssGYBsTa(MxPyQPJ1}xw&Y~o z;3%otau}W)X8WpeSU|5VU83I;n1ZmOP{$;KC5n-D44U-^>`f}&wiY#-yaW; z?WCt|q(${M>Z%m2-K&=O_4mU;RD~WhgOxV{FY5NM8c67lF$XIhuk~2d*asJE0;$1- zr0np!j)eK=w~jAmY;BD_bak^9?L#FICfw=VW#4e(MjZ)d3TJj@jEyP%W)|HjrQ>au zpVT84Fgc+*TD+EnrYsT8k7r_qGdYxzDS1Nu=*!WWf*$cs!sMs`L(%bQ3bVg3Z~!p< zs`I&NOEL1E@Ht$O+yIe_R{6{>U#jxo+*}$5A0M&hxjDO*tBrK)0o?6Q7H#2(1sL>8kvMQK1DS3M*W^Nx}@DpNEkfb1J@P@Bod=E+tqaO!Ct_+7Vggyi( zFi?vyqSJPFZ|(1PpM!ty?Uoi^V}Osel0H!Er=D-4Lh4s~wz!=r<)LB|6b4ufOke ztF3)UZEVCw>U|G=?5g!zbFGq%EV-mticlsjF}I;&97mzTiGKkaNK3m<-Y3J%WH!=> zDhZ5L0ppAg%e36&aI~>1HY`bs=i!4UFQ`Et)Z#HQuH1*t`%IB++zK|Ze^j)rM0F%b zub+P;AJA9$ON9K$a~Tc`j5Kq|D8>ef`^Clmr=o7(SRw$}Y9)$XbjunR8Xg=i6+F{q z%kH~k#Ma*4US1**l|N_IxnXmgx~AUX#UpGk`+73PCxefetG?g+`$OpcG~^;3M5S;FtJ3aRl9?767P)_ZEc2rmYoi=mgn!zloNkz+#ogWiFgb}zF{s< zEv&4&!$~5yo_c<_t?B|E?z%qP4Sx3KC){~+gkb4c%hfY_zp4||=TNnWQ{J(+>YqRX zVrj|fVb*yQ2g+55-;F2bi=9K!;U-|e;2znZRwF@$%vxINWKCfw(>yK`Hg?=w*EV9F zwyDjff`bguuXeu&bNZehT!=fn?TO49W6&5ce#E#2~AWnC8cf;c&SX*`J+>m*}nn3)hk0}{ucH`h(=C;JYY(i^HAjC56_{qu7p_IOt0*M-w1vLV% zw(BFU?d;wJM+^?eO<9jRCQhCtPBtX*;{B}?&J38gnpa}JQzL41pyF~pEHEQr& zY@!x=NKc$>QReZ5bg%+#()4aB87(=HvKcoY0M)-Djw`V(h{Y6+7i(m3S&Gr6zQBO& z*42dP3Nh0(Z-*Pioyz0zId9tSe+%`!8_jWn=6JgDIJdGQt+W)Ji5hh#+*~ zXiCaw;avVT8%+xG3r;utF?M{UaKBsHDFM-2iJW#nO;{J1Doe!n?GOVUWaS=I43T+q zF}cOXHa}by%3~$uj56F}0rez>Q!aS|p52E6wrc8?lra?|jPFG)n!EjJ`=TxRSa}#aD%qSncY8wT z>k3-GZu;Kn-|lF)2Xvg^x@3uG#($TA+FAks$c0b|v^(!z_WEDC$vqDDn|>sSV~Nc# zuM`vv48kU#8sW*P4bZB}vaV;kEgTigGiTkMl|NyLz;($KN{IblTu41(wb84bnr7T~ zGAf6GG`_o@iIm?)*%T4}Ef2mzA_1NP)u44mW{}x`yZ~rC!Bz4;+oK{*7lv-1t4bre zEv%m-(mCwbdA12;10NBP550f1a{s7)DdO{IYUNZOdiw%wzs^dwwO6K<&g1}9w9{t| zd6=TEeXiGG>bKM!e&P(1Z=rrG;@iT$XdAFhiwyC z8bqE;K9-YmElErSCWjr=g$%i6gS1C1V3Q*b!h^c8w)c^D1kq;-sT_X2uwG$cYW-mW z!{QcGrcVf-l=s}6kt%|#P^cpfQ#O-hRdcif%RM@9=`9+KR^Nog7#GQEL&E{D!|S{_ z;bAMT_`q)U*D3`wVpiV|&;vS)hx0HRMBCJhHA%XC`Fs`S?s~uehr*A;(Dd;y;Z!?A zEoqaOCN92)zBbO;!TRsP6=&iZzrV2m9Qbd{@JKQvtz+lR{e%-Czpw{thl?w1uU>0o zpr!Ad=i@Y`kzkuo>z7d)d;N)mA}@aXs-*bslg=osefjdGZ}u2^ z@}G_nsZX;%f+hzCiy*@<GFM9bAA2H z$l%gz&~l@KoDKe9gOzW!L7L})e+lTjw{aklUE_JkV*8N>RuWNy*k z?Uz_=$B9n8=ZCB%v)M2k$_-C5u9g=2vmGhP=-V83M^`UVk@q7Tot22o?t^TvZzV-V zj3n4--QRrpumfwqY75xDEZn4-6mPX!A8gbs}T;W8r9G9t8A3XrFhr6M6rw;nbj3;?+_5LX*mZ-xhE zduzZ=@TloHew^CWZ4Ln~x&rU!9G%qThV1KKe4Un}4JF1~?|-DY4qg#!Vc`}z97;6g z!wa|vje6sga=W0|cBuPG!i&)1%*@Pg@oY|m)ZhH_PEQHpu<_~X$G1ad4h@i&xYA>F zyjX=>d6X8fl@&=}8=L--6YpOmsuoxci}vSNpj!S~S8D_Ha9z_fy2tdmOfTd}g@sM@ zbAw03Nz-?yzQUK8dhiue4}>Z?M5@1H!rpJ=SEcz#BpWi?g_>SOBU=UT!A!tOk!t%j zZz9=P?Qr?!qeqdyiUs zk5q6H3ev7GuZn~PTJKz!LFbPy0NO}qyH7Sos*{tF9$PmWjFVxz`_0#Nb}lWkLdXF` z5s!iZngNgn8-G)wGdhwj)*Ku`1FmOfhN-&IQI%$cD^7^0nx3BC)bwI0&<9ls_g&0InK$@1O!_8Exe1YJ&C z^N0%m;`QpqUVHpl3^Rx3^_0kNdU~+TyLVE%mMK0Gv>+UBuCJ_AZ+JUF1L+VTSY!Vr z{4R~l@7~*VV6s5nV}5?#Z6xEFlFs|9btoNUq=J49|IjKxhPf(-E0!O;rhD`rFdi8j zV#PrV^ob%SU*BJh8Ih16B;i_R zMq={tD;Dat@}O8o`-O^C-%O)yVmK_vNpQ4xqxHOQz6oTJJGiik3|wbt`&)*z%dWo- zSX5o#`F5BHX4Tv=7gP_jus(ll^OlgM>79uR5+T4esCBBXEmoObQaS_)|wVcMD$<6#n>$ z*?4u;wN}Mr>gm&}rm0Eiec+E?_e!xnlgfdj;IwAeY`eU?oVcV&8Snjj=isUc%zyA$ zKPS`5{h!LdrJ}^8^hBh=I0%@QX4%;(b>7u2ftG~M_4lY5Dx06hD1B;DG)Qw2f6@)y zP!!aBt*mrv?q1y*8yh1A0iZWd=$}94eK7}dPv0dK(5gu=??;e)C$@P08nZ2)#(_IY z)PsJIRZY=BN!LSKQblq551zF5@nXRo0h5QJ!f~C2X5;^gZ4vPQx4PiJdTs28_x~+C z|M9l8b4IRH?SCXnf7dGB`vf|4a_AxI2X$Per|0q;z&AB==Kb`^xrnCV(s5aQ&;4Ri zeZL{$oiZj>t4eml13Hoz0-t*G=1KNgpSx&Q@zCZ8_dgHii{2YYGHqrUXmzc;4cE&7 z^!D$C*x5Z25qooWFXiBPU(?fqhV=AuASCL9e^e(4pdqGIz;EebJCi{vUFQ+}E1kl#hJu3pr zO)iMBkdo<>Wa6X?*pq+Ec#=}4L#@fjUzc%xX--EMJGva!W7iYb$D7;)0ca_3*?xXx z*;22UfCi*q=Z^ybWrE+2Y6-%g;(HFex6*ZsIEMJ`t{GG-0rOEDjRRkPkFY-RcL|K` zy-eH&U+|^&nIun zsV57Ri!ow*o*Nw$s755s$bfj&u`-dDCK%4B|MZ}fwP8vPW`)Zgfx_P=~!Qd19 zg$V{~1mDs}!e`zDm7v;-fsNEu^O zm2Yn8`t;CrI9UP5s|X6@(!jH=Mc*^%gFYq{*VJ!3Pol9UT{(HP%)vUz^{j2w*zqgY35gWtlhV*HbnSXZlN@&BInVp_%s zZXKCikU8YPd}zn=^D;L%A57}6o6WKO^yB7o0;zGB8-_)JdtPiVA%jgLH+%UzESiFp z%8baM?mc~k0ms&dCJcRuxg-Si0(|R~^rjjM;qv!y6W> zC!!v*N!)m#hjB)bV4^{?RS9IMH1N-LCDbE~=jLC>LGI79LUza|tRH>AE|&i>m~x#O zE4*~{T3{(mL05PD4Ija^)-Wb?6!+08=h*Y-+?FN(>%_Ti?p%&ed^=6t284D3?R|mB zwVmgt--_MNmGgy<)1P&7fnGVT`L`q(!H3tB_edtFZ#gljf!}_ZDpX>r)2;JvWK#U; zIRSH*1Q@?eb1-{%nk1syU)rOp!|0~iP=%%X_rbz`{Gs`Fu|cACjtT4D5lanFu8BQP zE@6I^Wm{5?4%AQz9u9|__W>)jM>Rm+G(%l6Au2@bdk&4(t{4_)Gd8GHgSUTNWR-dc zPgK{D79{MlIzNrx`hUXPf8PkQ5nVs4$j7?Z->(J;6fj=agq3anCP4%-z3BG(+qn4_ z?6yKeL%2lwg8u%sUvM51bD~I-!|ECFCinjp_z2f`Q^azJqy07t#AW2-jw>CjmMO;f zy@AVDDzokwbYc<{zvfu@>gq7@FdURj(B1Vz&W2GBv%`JE${4pvkQNu{fN|1;IK`16 z%i1qzXJaN#PR@Jxi@&N=BJ!$Qs-KVuXJizj>qXl8F)Ot%P+99r(RQ=#NwZd?m`;EH z2Vu9JAEtmvBFrq(c%}cZRu^B#vw!L1?zMFC@fC+r^QDz<;g!L-Et^ z$O$xnQ$pM$1;)BdO4^pN?xJ{v4Vq-hLkqBoH@1g2QXnJ{BsHDgQ+Z)58Z~VL^&|J) zT$vd=<-!-hx0kVnZ1oj~jkdM5D?%JBS;1O)oxg*zKp_nZRCgjQN%328zGpw>O5Zyt zwi^3nnw6Lm`cTp) z&tJZM_TawT;_(3?1B!4`a6PM0XazB%ur__VQ*dNIAja)D@&rgMCc_@$r2_N{Uo)DR*x*#qPXMh=4D(wK<6ae;R7! zz9%Ll%&q2SpupQne`#kel~F9-o!t@9F}bK;I^R{kxTv97brAstVATYPniv5A{+|$y z`urwdOTL(pAbHy#+%a7KAQuTj`ro;^kI2VB8n$3>s*>jW2^>!cDKw%S_T zVjE;`3`gUPa72enFy-5+{3n0?15vn5f5CJw4;xM9Zm*DO=Jpv@wStocr#&i`fqLP`e%J;CE19Y2`Epmx=mdIJ;XxE;5{{VkJh_+GIz09t(k zi%xz{_=Npa!Y8pbLE|?0hOY5t_cGLv`?&jCls;8B(iEaHjqyqZ9nx$#8%RFUBKcUM z9pX~;*(Hon!;s=+o&gw&UrR5zrR_hmrybO#NaZ?r)_{hO|5zZOk)}bO`w-{#vHWhX zq+y0A+LmzRQJ_?&CBt>7!!O%EMRYXGK-80;^yXk-R~OYa3YEnK_1|Ky!g{Bkt*t#Q65f6z@uU4cyhM-TE>it|hbn>=x1g%;e6 zEuyQ!<4)IRKH)#Xszsz|D~4>4uXsX0GA$gtBKZRT1kKT082ZNuoncQG`Ki{pt=r=F z@!~`#^QRB&|5HJWqC?Aw8SK-P?*2mMF_E{az?;FjDDQ z908h-Qx-_Y>8li#P|JqSu3D45eA--_7qj?#@8|>HYRB@`cnd3kpKWW03i3kM|6TC@ zwP5VLF*+3FyF$3l_imu+@3!B$Exty}`Rhy_o0)_fI>MjT)F&rVN!yYLYeQcVwD|ov=%CR^m_Xj;1r=%w;rsx7Y6Zj8rQK;=NX- z1wIgUV9P`Jd1zyaFtGK~6G;T(>i&>E;)sk~IjuCWq_KwZAY@GPqXJTt zRq+^^Iqq0PjY*S%!8sJEd+KAaN8QT(Bw=)i!uZ3pa}g1&KMg-5IeGfr`AL2CAyCxJ z`Xnh2pH+abCTtNWQw4tL__l=w&#yKG#b2!ij2D4{pET8wf7`^d&*eMazkia110c?M zxsV?OTC3pHlb;-$Cwz7YbKz==f%4<@L?7470s;c+9zdVjSxc+!6oZs}j1-lkv0(29 zDxMcz!$PR2xBh|XG9L#t!{B)DN`p^z@V*EbWH9-&ojgZdL6eeiJ{F^-&23HG?QnoB zynu%bo5>&?UWqrhkf(*6`S<%g|9xV*a(fjNTtqJcZ+td!QCX6vREI+s7-Gs3ejQI_ z?nkNi}gmaH!D^roY9IQ16CYIR|nf$ll zTv%4hj<+PaU3$6$qqS;!)H@c-uLaP>4Q9hxi)#8z&ImIQA>-#n&97I{}-Vx9HB41u2I&% zWPaQeiT0Th@r!$WY6>l^+2T#CA1A2)T}+3`5PBT-gv8%scs>d>-Ds6C!JQNX>=<~9u9g{rMEvo~&`7hxuCZpJ zy@uAzMbB+)L}(_VXkaM^89G^DwY;sFpE0VmzyPh0;*0g16Fg*pl@x7D4V_B3bACPU zOCp#?m3d`3Uti<=^x2$B<3HW zsZ@EqH>P?jl>AS6&XdgjKqc_pcv3)`>e$=A3g^`IL$IG}0dIsaWsVCL%`*D$u_rGt zZzR|9ARrDLvfz`utIDmsl=tdx<4f9rG@x{35*1bFmevr;1PAwzj`jv)5s&-ai{em< z%`u||3eeDW(Q^Ea&Fzk0{xtoQ!TWSIR16+`|D+=u?_H1`tOC)I>G{#}-K!UYuAYWZ z-}0vu7Qc?x??XVNv_67z9r67sgM-q@+>>SCxzn=(nm*^@fFq#39+B8ZLso_1$uk^(mR ztsvE~Jxl{TwV=Bf?{QtE`Cr|sghQ_!X0uq?Tb16;Wsr8*^| zwZmFxJ-v!A)x5Wc7CVB_eP(NIDQgC2ESf$~~2%npli_jgZ9SlnYDZWT21jPj*zMGwZqLeqSI6 zH4C{DVS#e9$G%5c33qTjf%IV2Q^Ei6%xklJ6!VL9C6zsU5Y(4srmaGqROwdYfy+I^ znk=>7W{EI}NIJ+1(%rU#^qqkA>$ET_{MTsx6dr5h8-ve?0_J}&Znn1cdC{b}j51i}ZA_?mI)48%@Qa@oMT4~Y=tt=?$x!p*2IF^eh zcS;@EU`d!Ri86?=Rqj}C(7(OwjXLnV*)=ZDG%(08uhaouFJ0`^{ku(Lo89B%YUA53 z6z;#n8B2MsM@u0&G3>jb3R<~+cIMe@#=I}?Yk&gOR$F5cc1(zQ;XjYIRKNQI+W)FW z$LjUih-5)d8vz6L0B%Ce%m&bKi{AEdcOW2%nFs+gK{LW7OhN!DEB{&63Sz?e`t|;< zkjF6(P@MWq2|$`t`s9a~=~Fwh7u0CiC7+Rtd7cIqWqH~iL_ZZdS5pk#l7TT5wC5#q zDCop$YVj7Fy64}2e&34?-Xnh;%P4+P;xNdWKrj_}F&8{YFh?b1Ffb1(GW)1p8BF|Q z0(p-RjC_L~rUEOV_IMh@#CQ)9JdxY-SrR}_q2ti`(ni3jzvG%@d%uKFehW$=t;AZe zR-xJ_n<(hrT!L0gW;}O>epcJ6{>Fnw8U;jcoV;>jVof{Njk+xTk1oVb%A82hK?46i=Ve80VkeXCx=E&e$~-8UpgZWa8@=I4r8@Nfbr2L{+F`?Y=q@Vge#te5OTMC;eK5w8S_TB* z$>>8$gF6ooOFd37#pkN%k2Vs`XPLA{fBz2sreBMRO?`OdtscN6fxo;}qc?1C-{ zs#8S&0l8d7B}FwOBOJvqZT0029AhWo$PMb%6%}yXY4T%(t}=tGN=6VzbS%&YUr94j zv_nR2F33_6E}7hoN90)f837K!k(tM2RG`v)ZV0i8y#>5jq!oTSs#C@#N|Y*vRsb5; zTy{`(4UO+gDhY!Tv>1kp6Yr#aAPTXjG(8t)b3_f_VH$N3dweZFt^;eP4mEahd9qNm zXQ?7HQ6un`;`YDqz+~syEA?u=W2sAj4k$%OtUZqVBWP=C_NhWeB5wj572}GeJCHB1 z21CxEBv?M5kS-S$baBrAk?h!Azw>6Nd2J+*^qYT5XF~!J#LPOK)pj-(!sQ{rABro8DJL##;B57k?MM zE|0WhS z5iq7vGt-I3m&ZT|p~dK2#PKoIz@hKM&9Z~vMymCDY_u0i0~ThWr`kO$bZnELR&T%V zPhU(5w3uq(nprE06RS4*m0~)9RqP~NT+fX^eByrmpEwdd`|-*vhC=KbQt*S;Z&``C zm0wra>DXIw+c{C=%_R1ObVe12sRO=Y_W?LD*)Qref?yq^WVM(aiEY|^1!NEYeqf@@ zKqY|aR#rYUY^teV(Vzum#9C#=*}-4O>6B+0gZi-zf z|K2W}|1d+i-LzI^ucWD78diuP9dUkDsBAklG7>yt6Qq?F&LayteJgazF4xAX$wgeY z&;d2xcXKFbQ-z(IXGV#f{d&)gzyVvdiRI-OP@1>*r&_=qIOeAyP1w%-s#Q*u%%(ee zww9pUCdK^pvqFXMou{d+b2V39qpnW7uTQB23w|48w)b%oy;8D^VXbFv4tMI3!cS;D zyK&=jYV7jz1$fasAe!_R%;wW2ug&bgt*sWdw^Nq4-+MOsY=rlGB-Vdq<-AlVu+%`% zQ7y5yp;>NRG_zajIg-W>l*T;2zr@9$zKOs3He*-&4}E>*J#JSkzq;wW{0DsU1@LqF z&CjT#rYEWH(BCFC!|51Uu zK&S9U;ns4ZpvUpr61`FirscC|0m`?9;G|8Eo-R4IbeIh|D#I7w;DZGS8gNwnITh=z zV$+EZ?0!rXZ9lP9{aq6FA1{E*xD1nIw>k1r@HM%sSHqJ){|-}01lNb1ABCDu*cyhf zid5c#7RXMCm5Rw{IL%MrG7T!3XWKSTi~CmbU{IQ_89Rl1=>^VQF8m|F7m_9!jPOOQQ)>Zn}9WSMYn>T<&Y3G)7dJ^t}4r+Ake0!xeF8|{)NVFfL+)1EELAo}U-X$n0VuCa9bL}4v zT92ME6}YJ>ipli!+$bq2OM8wC7R|*b}a#AIU zlWt4}U1OAf-l{S(JroH8Kh|A@gZqb89pSQh>J6(QWJ|B+E<(uc-N$VBFmXa(guQg& zNo`_bVL87ACp$0H6s!+bx&|$w!93y0M<`c=ga>MhSg+2sE!e8j>AsB$Y-Ps zDK6~&w*mN%BT&JSOkBXnU+ZQeF)fW>TZ<@?;gyC@XJ>b))9?N`NEr8ut()90K$eXZB+H8rC)O^Doi%d z_f35|_hzg0GgPc~j1g~4RcTLA;kNDj4llogF-A3WLG3j0Z{ zY->+cDDW)!47K3(YpMBo`aeI3YuJt05;e6#&QL91zwTOVYO0VHSwIE zu8`1*hp*HrD!=tF+o9xg-@9EA*@eH3X%!9PB-rQR{O&sQ$kxRTE*Zv`bm9L~*;~d% z74>bSdthjg0Y$nDLQ+AxQ9)EvQo2F9o1syVE~R6nL%KVq1Vp;KJ0;HYIq&_v_lNW4 z@Edeym<=0dt^Z!@`d{H_{=|D3n#U};N1BYPhAaZ_snwWu_I>T{>6w6mhOU*2S$@vw z?)jSg9tPqm=H^=eU(PY(kFIAsRn{2$e;XGT!V|yCnH+0aCN%;8tA)`3?}i}KCpHHJc>Yx?*9IlOl0sbTP$K_nlZE`4AgIBWu+qz zE2qLh#>W&Sdw9D9CJ5Pl+v8O}Cf z38(+@RdJGYA@;vC&IitZypgWu+AD5cuhmgdO3)+by{KD`cQN~mL)Lz<-uoP3hs}|= zF^H>^hBM@O<|2xs>|$x1Gw7^*WW^42QAr%%-n94Kx%m0&_ z5~eK4Yp7On@_1I`8TNFT4&HR3oCN@7*H2+}3c0+~yJ7R9N>o4WwhC}&Z>!E$7ZfyA zC(qsU^FI`-P&Jjrv1HS{}ka0_5%Do>1olaM-7mKV0NBnoapDr!;8d4FPtj04g z8R_qn35Lawzos%U2<MA;rzhG@qbia?zWd#+a#Kow}Entril8Qd**tnkiRwS zJ_|(Cvw8Nr{8;!1fx|oWbWzKLr#pCjNij*&Tmk~$ViO{uIFiIQzB>jgEKyO>?pM9; zCT>QE>&JRm&x-_ktp~s)tXMWQA}7F9pa$zyoAlzr!;{E|>NhLJfoIp*I<)-y3$Bfs znVAM9;4@PIs#s&5pADn~w<`u2($_1V5<^ud7u$=N-fm_{ASg(o*}maOY3 z(3n_RB(t6(U7$7DC!3Ub4zHFL0&4}7%w>Q?*3{*^(l3aR!(N>gmao@mA^{DuYLqnJ z>nf#@G;w-`d7n)U!2GlBgU!~@LtWQhfZAO%YzZpnR`N&K#I(jF3y*mmWXN446bIVc z+S>3Z(+MQ6=}D&D1Iq#M1dQPPSWL!EfSc%*#u9VKzOJs_{?*l03Xts=7)JM)Jg0h^ z7@3+n$7OR`@XSZ;ix0Y>v+>ucXts-*8gPXTMH&52vuUgv)2AV?;mJ>THEh?Hk=f*P zJ6;FPW+|+9uU}KIMiMzbf3GU}UwWbUF9L#}QzfJszkDru++ z*HcU7@1-)Kv5S{q-h47wLBoELzlX(OY=TXPCRW&Hd<{~0t=y!x+$Z}SQQ!J%3N|J^M)sOrRmrWL$=cM9Oh z+x;hJv^QAjB=>M|OcS}*KJW6v4QKWk-A^HHv#e{Io4`ctz^6}%1W)&LM(nT7(Py#H z%l@jfhCcZ5OMX(Fxl+oE9&+kAT+uXoiQyJTd&W<5L>-G;4ME2FBpLyJu;MjEI5qoE zIe7vc`sFTvgv3g-jFpoJSkTtpYMCjGoelg{BC&x_m^m@c-)F;xY}G#eT1c5 zEJ+g54pq?)XB>!2=H-m zq`AM^0A***b+&8(10w(HucqXl=g*UROkXs4cQ9dmq5RFU;vtXrLxbRY>QhLFpAvod zH+|J?Bf}TZG1<@lIh z-{){1HI@Lpdj=bf>D}8lOmbuWyr62ke&mJ)_EXqrDWh|w7 zuDT1c-#JP<0FP$xi?LYXkuc5nU_6<#w$BQYWiMB+f3h9w-H5Gt(Op}QQs-) z8+G@=oqR@b$V~4aL1%udW~SJB3K@|NuBv!*4Yl7Nkqlx31_vi9cL{)+f5xL*OK86J!Uy1+hFn%8TVvw-Cvk0N0DrB_z zp1sEq_t%k5+1H3Q*Xqm|VuIF5JRr;M+T(m*lTaA=eS7;QDk^2p{6|`Lwv@vEd*u3V ze2o84BvI1lCT{Lples~2zpXBsYV(c)?q@O>oUe-VH4cv6$(5?*a|eOspjs@f+nbZC zAHKtqxwV(M|LM7FD!I@MQ^vC`DdA(9k}=Q;;bF`#x_TV$)-}QRUnKCPntiA_v`v1M zIev!&o2+tTzaxm&94gLUeAGa*@#(oAQqG11-NJ}v(qUXlXXgolM0{_6LK(T1mX;2csMl4x5|OG*HpbSbWm0{P^ET<2?fLz#%1Jyjamm5 zDkJ#F!W4lMr7$BCXKI10gAJHU{*3E(ez6AKYUQ*S5J;_tg@uI!65zaDO;IR8(?=%B z#>T@6ry9+FhF4NjU0qT8JJ5~WzeCgtolL|Cr7!2>=^4g2VqTIk8LXBwN0q+++N>4$CTJuhM!GEfwN-U&bO@|%P1V)OJ@?at z1{7qH6)7*}OMP2I{0Svu2!FAheRQ!-knplI`ZY!V3MuNV2U?v->^Ec?Fq%w$nZ^JMa_jEemnU< zhwZ$Jh?r|K6>WH5)}wW``~G?nuGc4`(-qdKLtYn$XA%{Ag;{Q$w`#U8JKprJ4&H{P z7^NGLnLeigw~}vS7;G%mBj(({p5Y&}h8P{Kd1qH=EIx)mX%i|H!jhq&pc%_XS;CtQ z@00xKAR#H{{r#tiD62zKTXrS3pLUjo3H4r+(1nJeqT=IcmM7YStWWe|oR{V0Umg<> zg!i5Z8Kl`=Iy5q|;H?cN|IH87OBjxd+NzH?7DvoG)aX`D*x20OFv6}vXoF~Z`jRfV zqFa!B$#?METtvWTK3g_*whzxYLPxE7(L#q-fRJim3onNbxyBcBpR}0i32VKqw!liw zjCsZ4Vn;~zZ3~th6E+soyXN0L&3YFimHg4{qN$x%3VI8UfFHr)5~idbwi3|UZ#&O7 zVE>1ztHrz`1Jow9zwLLsXll-8i7^%+q||OhmEq1^IjXIV4Wa^-k79yWVMnZLFu03Z z>=OULQSuTWa3DE8Ik9bWJDo5%17b6ntpZLU<*rWI_eIq~5%+@P;_$Mmo%#C7BP&59 z@|G*{%2ptG{CG28%1WcA6s?&To1PXknw`3C;d?AgK2O8tCQvXme|4jA`;!#h?8ywKZISD+09kA z?*edHfrmG95tS4yGF(7tYvD8)NM!uaPY)78kWneWsFZq$eP1pe(8#kvr^FJW{)mSe z;V&Ci%_YAgQ;lB)IujP8j{Ny^FEs+H8^MtYX55U@_d6s<__`$D;R!*R4OUui!TJ=R zaKOn`Y0w@!I=%~)4GN!g=g8}L@oKBo$m6w^*2qR%P%KW+!w6k&eFqB*p;8!>X<#57 z;cLMn-ZQW)DV8pl)ksZ2SI;6nPJ@8AthufI9;Kf#^bIpgAKTFV9TG;2H7nBtqtWIwe{8IWtolT? z@RZ%ppXW(GW%e$Gpp;J`OL!rl&wutrGo#AKnr36CB9_uf&paN52Z<@T@+Zv->vBJM zEJ8z}YYM3QeOpbpo==czop(xldaz`E_A+Nt3lDkyyOWsYA!a4FAbvrG;(l&QNF`(g zg?s&-T5ob0GUM4>>UmCY{^re!gGbG~=?G3Suq!GKl&IrT-pNdtrLIIO^sgUsi= zGxM1I;IdA<=uyQ%LZadeLyj~A`b^iPw!El`tl`0DW)wu}RA%{`jEX{$N)Q(1`*I?c zX@FJ`lkV3YqH%Q9Pmu38JsKuGLB`mb1m24&vG=EN4nhBLE&4R9)?7_kL28+eUUZA8 z|IEr^45687+C6{8_O6Z=s|uc-i{-oFTH>yVKrt|m?q-haZ>8Q+-K~?Dr^C;*`%f_KUzF!ne+dXWD+87W06; z-JDN*>3zu(Ec@G2Gh%!JYKUp`Pg@}gdzE08WlNJ6wJUs ztXGzM%1d&BO%@mHRk@)bRV++jDhUO{sM`Q{;olV9lFAtLWWFB3>lhxI;dj<3*e)T{@#hY5%A77tGvg zz~R!S%RQTQQQ1ok#-nfct7HtH#Yuohxj8%U=ItuI{dF>;% zF>3hv3py-}yZVelr3P(;)bLUBj)V#Pkcqz4)#Yx&x(z^hUNz6l@2@J*{2Cy=jp3@S z+)!a;#P5CHMjOF|`SvlizrPedGU&98j5Ctlgo7>Ach{r+X%27K4sG3v#W2C$=E!J9 zj$;RhWz1am482`V0h3)#83PNB1TJTG%LGB*`i5p;0Lu0!JhuUvc@G#c&HJNkzon98 zba{$Ue7l3eMamk?3dEY;-fGW#0TIo@@XnpJ#v6?Sgu$(^Zf;2NS8s97!r&(F78;3Q zAB4Wx@zb6&UEdpwL8c2*=?c$}u39vrx4tG&pTZ-Am9?varR7~cbq|0*D6la+(}-iW zB^~|4lPsJ;rXzSYu-V@JA{1j#i{?H6R+gCtWw4!0F1FduwjQZZkQPXJgxL$x+PQn5 z&z$(uX*=U684qGYRM*E!9iMNyFk~bz8DIWJpY;pDD~q1I*`t~)u5rQeTQJ* zppbzs?6ovn%N3q4aYP$B$$b(%aOqmel=8-f9F@LbRhQ&oTUAYEx7ffJ)$XeVEN_Wh zOa5C~^kU?Xe7X+0a~<=oUlfMixsPZ3XY4kCzP*bbvC3odY~6wLG2_y zVocket=!v(hyUUzV|dth3ies%O)hw3Un3lVwesr*18|jf8*k_R$m$(%3d&WPrX{~# zC3M(Q$$SnuSPK`?-+X_I_MgrAXQrp@x4xXGzWG}^oF)qrUVn}^en~4#z!XqjN}n6B z?&yN+q3T$ZuDLRaL4_Jw*~In%8)ssF=%~Kl_s-#_G}qNWe1va9os;Vo-fDjm4gvjJ zCU=-zZi!?$sVNhxui%dgFH=Y3_20}Rjs#70{?ZFSLZKUs33c_p^>wDZ1KOMd0zVB+ zjKJYM-upfu?Tn1>-C&TAkY>lln=}Bs2-poq>drX5u?uzve|k)7|B>l8UXJFb`N}D) zHdQSx&jv@~cGLFz#HMp~hZu&7(QK97n z3WCa;4Y?(XT(&oH`yCY(?@S)mN&NQvMTTDIJJegm$$pC_>X|)l)Z*5@R^6nfr|I5n zV5Ukow|hx8Ns@6|lICS1h5`GA;9`^v9(;XKMSCKI@X-=)JbPHm61qj~U&2ywRLW8i z(q5Fthn;!C5wVTCbq{>DPLQCPNQfh~r)O!2U>J3+Bal3=(a&1xZCn`q8P~JskiY;2 zC=~;NZK>)qIapM}E>nlLKSO&REL&Kd{q6jmT7I9SJGbC?BBi*uZ@H|uSJ-cWP|hem z{;0O^t%%w+5bC-2=I5Du>7{3Qi#xrfwniB+)tFC{BypKhGXQSgfRW7yqZdaH#`pOIF(iyfJ$fB*sYM8HJi zX2m0DJ8#62$JPFc%hUu@3g#%`$yRdtdonhHFwU+VHgKicbD-H4agQU(vP{PGgHe3x zj7W-7WHWKjg80JPRzTkXH_35)NB@#9SOz<@XE`H=hgd@7Qyvx*iWT`368U+ZdcAEj z1^WF0sw{!HzI50nYOK6UlIi0L00%HyJFx?zZj7kj)-7w-l@>%}k% z&?7)Q_O`@{4Z3=np1f<*N&?igwL}SRzxc9IE6>_EQwqGfbWcwHwam&M2Y!p{ryj09<7aW z^YWC^8CoXXJ)2j&%zEu%ZvG@SDyo(7+gl-MmI0gNoHQ$DQ`=($6>t9WV{%A5>q2i{ z-isan-c|CbC;?Iq^;QnG5+nyZo3Jdi*4FUYJKD7t z15BQ^A3)0T+g17x$ds-?uuNWjOirOnX9c4Ndzvt&5kXipKH`9;n4fG zu0^TV5DJ+{bnC#T-A3N=lJHZ7(Fe8t^CEH(c#8VIiiQ-2@EQWpy^h3;t=N~ZR^|7} z=`$W70)3!)#p2>7G@mz z#Vfj{C{Dg+_WY(O11Kjw)F>3nW2W3p2+8(qL!UArTJhWL%*c_pzWyTflW*<=@-jzR z26NeW;G)Pin34(G`ZOK%7uxV+5-jEy8;EZf`^{0A#v;hHb!#`)!0JH znhHOP@(Mz04gx6+7l@=Re+W=9+!lHc&F3!ul<~T792<(~v5J|CYNCCIUUr{7i>)_4 z=!`?2So^(pV^Muha1FSK+0K1?4(+3FXmQw?az_TBAChXzt5g;hR43HzoKD%^Hk^gY z@%c(E;V>rYl)F6jG;0gAb*$qxX4iOO!me?TA6@blW|QHC-Q^)m@mn=Mh?`AQI`KX` zJ{u);$th?$h4WQlOWRJ?@Tm$~2ShEuY?wHW%sH2MBNj3c&p+e6&$@#=af+bp zGdu~N@9{B0?6+|d(MNp9TkJm!B=8QcsTLflB}wbJK}*X!X>_=>wzPiw$iVU)!MD}E z8o9f)xA&1q&lYa!thh8dJViAxqHq1=!+mzOk_WuJr1$ej?<%xxIMm`E9&$FJR$ei% z@1jE@J>jlqx3=wonwXJ$id*V{gR}EyYEpv%m2Kc)(dPuDP+Kd0SkBwkGZq!N8yg#H z<+?2%U$p1$a6C^9)XShm_eaRFqd`Wtua;6CTUu5yMC05CmhvapXVy^3VE#`Xk;%qu z?fjXrm}Ns&t?Cl-kDS|R@(^^e=<+!UlEi+Cg9FJ&Bz&v=*wY&D^5EbAK(y{>d*1hC zPSHYEMggVc8bDgFBqY%8S5+v}v0ITs(P2g;Can?iVx_^(iHb@(_o3>n3Q^g7PyCEe zW3(7>wRg+`y(?%^xlrM$8Dv~%x*nQ@OkA>=U@fX_V3fOA`U@QEb0&=Mx}->Hy?ciN z&Iq{|H;4bKcuqr0IhGL{t#jLHOp4aiL69|$0Mf0PBGJO~C7ySg9ZT#qzdk!H{9sL8 zp+OBAw?`j7yn(j&^Gc1pfW%l5JFu(MBGqEzkf3^I&m~p^M?gX*a@b?zxwgZmpJg%CTOh3dpynwfz7{#)NONi+EcVk3#Oa^m}SY71p=-&vk?}SBMnD@VPQ3NA-tHq zsO&svX;(KhKj#{h?pw0k_vtQCw0z&`n|8LV*OA1)r0BNMeee1?cFUA?LkBX#(L_M- z;e&LlJ4`aYn4pd_qpGd@zv(E6Hz!&*_Q;E?IalVhuzpH-xfJ<&+I!Bk36mad7jK%e zV~Vy!T%SGqlwkb#B%=CkR_87R=yL+-bgVeEz+ztt-SzLE-r{=`5Xsl++F-Vj&fXlrVy|5 z$!vqW620-^!6yP)?r#wb?dV<5Aj^ism$#bJSVtc;tXR8y{YEy9mkF!X3Ln1nVChV3gg3KNibMx<`y#4qQusUXds35o4Qq)l%lp)LuZb!AN7_UX!<9 zhm|uhn`AZnnE!=~;tXO!Z|8fS?(o*93Jdk?(-XD3i;GTdRv+`FrKLgJsB_4m>xTS( zZ$9phN2&AejTE4Sdw2-Nv1+QtfUzuNE+(&S0ZOvHlsM7E$;{Y{puw7BTpA5Zu~ z4+nF-7jh9T+)kLA)W{e$e`;PKFj-~QK%%nM)QiAJXTY?`H@@L!yKp*BvRsh0Kp1(-77*`uIFt-Q8W;$MYiBb6@)W z&RL_B0D>MRivL>cve{uC@FxNox+OY2t+w9;jxTYwiW3^SPx#7Mw=CVmi0S90;C-|y z+=f3ZQkP}<&qfo7v#ZGV46N?}o4pfglg?`9ilSK$l7gtv=W#XMli&`J7xujO7BTTK z7vnn#Hw_9!B_$$S+Hl~RqzTMU0EZY86N}$wS|qrIvnd$E=Ox{8Rezar?7L(ElC*nq zKb`{IhL0-DN@jzu%ho72H~0ICXq>=vmwyg7nU+)jkv=}8^a6q`tK4`}bmYzUH30!t zY}(a`%W6J+Lc+|d?6p>daN$3mOJ8_-T0asVtfZ%pgbSaJ2LL7R1h_Owb5hvWXQEFz z?`&qXk7Yu$r=*B)Vw%%`$Jn&%3#v;HfKLVdf~#!~79$5w_lo1-c+eej4|U7H@-JsI z!1}H1r0M*nqn=(mJu@?o5bE4?iYNUqNa)$eBO>|Sd|Pv{n&_R9{1vCJKQJ>GN^3o%L8u_bmy9T#_`pYJ{E^Q83Tpltla&>E zM+&=7ARyAI98 zm`Q3O+J1w)@3k})Y`-p+cjmWV*#w9I0^5w?k&&m&qPH#caEIEd3RXN>+>?$2AwKbS z%zZA2;0zij_@Bc1mHRDEh`{D6Y3j>rXD4xRwA%cXEdb*DKzDd~p4W;O_l-;+q#dfr zhfU8Tv%yo>_B3^g&y<@&UPg~N^K1;A@7^!;#~2vu5tWX;A}~~JtO*Xi55L62HWR11 z2D!?17fW&u2#v!>7QIBM%k|zH(6F;TIOytPrh-lnV(y45s^Iw2Vg4R7zl#pUf&t*y zwh9{A_|%*^WV$~nCt{{xB`AbVf1h_S`)AAVfA+`5k_s<7P!JkK7HEVuQ;J31PJ?`< z#HWo09lr$U5o%Zst~~|@25M(=w^@XAV%WAMv2oul74eC_zA!g74#v;b8;Y=a=4v-n zJ7X0Z8mik5tj*A{q2^9i?HW#Q?sk5vI|@U6M>$MvmN5A(9i9gz+nIK6SuVD<*vFh8 zMiQJyA1ge2n3?|qubTE6q@tmTFS6~yx3z9nbLi|ncQn)1zdR=i-i1O^60#wK4gBkur# zaxEWBW9khLU>>*c3B*)V9 z+(}XY0Z98{*J%t*Nl7W@I6jSoowLxl8>q^=(MV&-zhi!m=3?C|MN3`#x2VqU@aTvO zR1?sDk}^>xm34Bu!Mj@g330B6cFqFM;P+*KbAI^(e5)bZZ2P&dTqfqQB#W=Sdz9`@ zyR5Jhr5{-3I5_TK7?cF*9}zZZzKLher6wcea>aIuWEcp1%R zMpO4-5Q_}G7Z@&vczQ~F?r8^vo>epMZ$f@8bb;it!;#?6@U$?Pjt>pn!SmvAnc>Bu z+}ZZ@1cH>b%PsqEWHul$vbStFoq3jgjJI_C$RaVyIBdmYowT(Z=xSjRfs1xGttC5# zf(hjjVXAo}k4t#}-Sr%kwxrC4o6Lrh%!X<3pn{B98+MTAryV;@KLZ@AycW846T`kE(S&=n;rAM7gtfG&Q}?E8 zl$Mn%-zu#kGeouSOdCEy<9#s3m z5edV;j|ozi68erEDjok67{QL2j5P0Hm2JeT=3!o5uI|n>B$C%V^u)!-Dx+~=yi#$! zXk)KSE-cL5*buS*zB=3y(l1w_HDy3euGeV0^kpvE2n*5O|I=KSlT2Pso-T`#F}sbU zj579jm1jJ=7V`Wv+w$@%1+|l4bWCDhv;Bi;MqXe*&#G3Q17!%C>Acg@nw=;!Y2i=K zg`UJ<$AA&r129=l;QvKP!uz1|Jl01gzvGYP)GWO}DiT(98w%K!X{3;qD8?kZFMv&w!*7nr+B!;)*y1cr4OhQURZ9l%#{e(?xS4%AI z9@x`Z#j}uzkS5Mcit-;a0JMY4J=#r^Gpo3Pz8F1+~)9ZlI3;QZmB@9zFL5s-FL zt2NmzCQ32*QK-fxj7FR|6tdTIIOu54r=UD53%_OKg^7s?CGr9X2PgP0FYf?m2|2>K z2k82)?5;0MfjG3>Nj|zHL@gb^!Ne5q{HhAS6&%+ZbpnIUW&}G(C7EG_0f)ZRzPrV#iN!7^(l1-5VJhxVX*R+yaYw zn+3Eoj|;mINBgxnXnjATmx(zYEaZ;eMK6c84y^|p4u4kJ*g>Js-9{ywy>VnF1#NOemF&suRW0jLpf(*)<&(ADJfFw3uB5 zrZq`1tMf`axcT+Z9$J9=*}FZq(GVZmp2#lx@Wa>oNl6cU)&ODSGsvj;JvwHv6iBcKsjZ~C&`*kOq(|@?{3)=kQCEK{)b$k1 zLq9)1)1;^9l)M%Qx?Ngq&g+*ly3gx{Ozs5?ejQ1PPu6;{FJw?Q0W1f@f%2#RycG`( zsR{{+VdL0v2m3cW$Adv=t6_gsN%zPOpgR+B(UA*8BAlGa%S*TV^Tm+T{lBsP=q>iK z?*4;1rORWOg>kQ+QHnIyySq>-pK8ljYkC_({M;T^D4HjaS=dvR+6K42AJAj7e=sVTDn;) zq8h8fhs|g%?-*?7n_+Lk8riL40p#WadDuK>BlyO59&Gh5rI{{(VEV@>o#4Q~4kKaBe+YK{B9ePq=9 zPomjk({pV7Wi3JNlDX>}|HX8qOxy2DZbd--lzBvi2+**&;@<^ zjq!rxfLIyiq3S;S3JA+({0u8m(b16+fE>TX2Sjmc*U@qkcl<%2z=WLkCP||0@Fph{ zs;l`Tk?*D{$%f5Z^s9P*E+oX1folSYHAVS%D^w3lDCeXKC!z(b*L*!%RgekJDKH-2 z=csz?uR#8Qow3KzRUD!f@Ai>yd+|~uEIz8T3_C8UlW<{o%e1%0PW_2`ODnx^HBfNJQ*U=7P9@%3iqPzY!wAyaWzp)^vm|*iXQb>&ly%i-Gs>`+Q0s?tjbLPLB#X4 zJylK|BzTBvEI~HwvhEsJJQYb&VMTLHEE< zV(Yf1(YH*qfnqPX^cI$Ti27|Ja7%a(Akw?cp{pYH1_h> z22XzqzrEAU@7xl8s*>K8iei|LAmC#+H7s0iy~|~027cN4_`YQ0-&%<{Vds{%t{2I8 zs{)E@!ZmCK~}t$wH#k_ou0K)(o{_81Gc&y))< zV4r_PeCBq${vKFcJ29%PoWdm2Qf>-%PX#J0m;%IbwE`7z)7;$aI=IUSUmG7!rF&(A zBh#MPoE)lsJGFJ6g9r6J3xwjh4+tczz6mR#%m4c+W-BGKRXAyHr(?Iloy{uWktX=gzs`xP^rZ?&J36IgvpX?)O#3ig} zkij!}x;xe7NF^EuE&wy@>p4CMMLlkc34ee1I*52xDp$etQLH~(6TPKr29!nZcztT* zEnc(Y2UTZy%s|`{;^)B&u&DyAns6X=W+`NRxaED(YcME!mINZe{$yombG^zWvUL-d zO%_}ea9fvW$eN!{9}XRebIV*u5l}kaj?_9<03fdukUoIH6yQ;h%*^nOj8@2O{;}Aw zrfDBlOkr>b!LFD}ii+kV!^3G`LfWKgyU1C zRt+R}kt!=Qvv(;rjK&O~J)R@E%w$ZRR@T(CNalCv;Ye0nPK%jk?jT&)tKBLBqD~KI zOHbj{4+=!5u1LjiQp__l%&7RFz%UbIlW-qBrMjm?6 zrN?*$DVlqG_r^6q0+|eS&s*hXQsbQ7hm&)0p)o2>*qEAVa1@H*y5Z0%eMC+z>?RsT9l3jyyC%C+8<(mZ}jh>8aa2CZI? zQI8-0&)gg?D{~g>yP{T3yvv|lHPvFyUG2CcWBezHe=AtF3SDgI`9nw?Ikno$`LSr!T+dnHhvi=_Hn}(Vjt^x73J&tAB{BiV9Kacz;3y)5Rt;5eWdT;a1W&7=%fm{Mq$ieu*qwLMt!+QY`@pChhu z3akr?d26)TLHBZ6@wX=+!iIFTD#*w^di;0-EDgB^K%mb)U6%!2LmpV^W-^}FsNq(L>5^XOIjR5vYyRo|~8x*q-*AM)@gLr4-39+NC+uKYt@C*7SrKbbG@IyH{QP1U@ zzq=oOTzc8g!p3Rwi~Ey=6FJz~D{t0&7@c49pjBlZ>AYiBPEriX%RB$$dUXEhkBZmk z?_3XK<5fM7SDAbBv1Jp(SI@}^OeQTF3ITTISsCVjJXN-;4Bz6y;1|BZ9YE zbo=_IAC7{xvYf)Li$SEXqFbb*+YH~PLXQ(?k<_!jz)n#s9VO`FB8vw|LG$@NbtF=0Xpi(?n8)OMj8d>U^lU zM3nnKPn(#QGrR|{_>ao_-y}Y8#zu`DO;Q4fWkm%1YNcX~#y?dCWp-gFGNFqML?99P zckquLlZ7req~!)RTz2AOZ46{zcAR~GugY7d!REf${^?=%9a=Ba#ZzqvsPf}pzj~-h zfJra%&>-cuCF|TJYyD(>V{`M|V{IUrqUuAnUQbkFoQbR)I|O0!y?!D7-s>pw11!sp zq`_eH`mAYma(sN)cKuf*dY#iwqN1Xr{h8;PFu|AA+%))i?&qFXUb+pTfvrP74kkJ-9 z<2!E^t#;7{KfO(v-nQW@(H+V_gLKfxRh3lZolm#bZDdWJAaNg~88I^`**U4)kB^J{ zBiTVc!glkhLW8Z+YU=b3y&((xIJFBMlI3(Rzf_KUi>b1j@`ufmZEZ0cjF!t=bZIY6Vl~q+u6B82`pL$nXRrwbpLEp^J+s zr$hqRiwl?KNGYq!9yu>Noi`uBpB2xXK~8&d^oy?g{VC_YS>R-!fH-X4yFKr!poj~2 zC&R_^6oUj_LSY>s^#21ffPSGbP8SZDMtpNK8lEcAlPm>(^;BdL$_?G!-N=!JW}rGO zX3Ab#%0&dNPV7j_yxF4jug8Ic1O-j_k_Ikcgc;DwQb_?7 zo$o8Zf9-LZ-kw~HW&z8}S9Kk}9dF{%AS{SbXdk)tiS|mY3y}G0{)Oq$@qK@QMCrlY^G{3Fv@Gc2l_@ZK;6YTY09Ic z4yES{EKgWw)F&pi28C~hwftUb|PWUcfaZh$Sx%GcPZ{3&1dfsoo11sdn1& zp|y`OmZ`OylwUU;#0*nx@Lt>&Gof~3hP7f8^N*+8a?KSSEiLzsIO@evbA-|wDz|nb z@Z~^jJc+bF#YtDTiZY_vF4@RVW!yg*ml&(uZchc! z0AL&v+)2(=V%vrZ)4wqY@scAFdz|o0u z>x<0qX%R8|?6Ir=&|fNFU9}XKUgqxqTE@osu?*9`pfQr$oITCE>Gzr%o3S~nAY{z#HE-5{| zKl8o;;B)$}Isuo76&_;t7c$=KOc0jAINFfzAG8DeX-Z5O!zi`1=q-Nnam; zmy;(K7Z+!SMuzVd#dX2D0}~UI)AQ27V!B%4zLy-|f>^>-gyJP8@`FmDMhBIU3j&~U zAbCfZ>=guwBgjDBjL(f%U&2##j;5!VDz;rWf@BDXjpX5LX~=X=(ZY|9>EfAH1#& z-3wIBTN30K45T@Ev~-ix<}bSOt=nC)A1Gk%>Eal|aXtBhiAd6gyIe=gyBczF}qKQ%F0(mNbo(!7G$6ystm-3eX4!Pgg&ebxsLQ E09R-@$^ZZW literal 0 HcmV?d00001 diff --git a/sites/all/libraries/ckeditor/skins/moono/images/close.png b/sites/all/libraries/ckeditor/skins/moono/images/close.png new file mode 100644 index 0000000000000000000000000000000000000000..6a04ab5275b321ce911c4e1416df7e0184d05f51 GIT binary patch literal 468 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMf(g2?j*SmM`-n)12!Gi~n9zA;e z`0$h*;zJLGziSUMMc%s)kQ=^Bqb$fWn~o<6oA~|;9y%@TNf7>e}Dgoh=|C@ z$mr;3CnqOwZ|}gsz|hdpn3$O467O? zeE#wc(2+oA0v!ni`CC}e12wGkba4!kkc>STSk!F5<8V;@q(cnT$uIxXbDYwnHXI20 zznl9%hr)yghbDzZvup(?cbsYBkw5jWXX+2z%?nB|&bJCE>3b9CvZkg_ddl%%sY-2p zciuhvRkQ7^EzhNOM%l6b;kVbDIBe=KwTZ9(?7(=`_OdK1&)j93&fUu|^7>}-Chzs5 z_sJ{fJWC8(mio1P_ql~`)`ur#?%8+Odfr~yz>Zjzezy%zYG5cX3Z@iTD$i4+O>Dqt-HH^{liV09&Ot6c=P5bK(uAc)2&;dZQc4Dh_-Ee zxqbV~9Xnp{-1%nb&bPaFzuUe0^S*tb_wWC5;K0{|2frOS@a^EiABPYBJAV8>5S=*j z|K!R4r%wGpefs~|v;WVX`+xrY{|guXU%veR%9a1uum8V!6X-&s03#y{4-coHAOjN< zF7?84azG>`D=R214OAv9D+@&WmX<*ETmk|DqM|?~A|b&mEX*e&!Vg415fKq-S=pfA zU_(nwIW;wHV`EcmYfF238%IZ5CnqO&cOO5$fY8vu(9p2(@W8OJkjTiem>7E}CkJO| zM^{%T7Z+D|F!1zr_ww=p0#8pbAn@_=1_B=+A73!=^Yilug8&c+3=9kcf?yB`0fJBv z2n!2~0D?#`h>nf|f@lzk0fM-=*x1;(xVU&ANC1Px#3Ud{PEJZmNls2q0fMx&bRfvc z$jZvf&dtrq$yq#0?-bDIOG<+Lf^mfyPH|QlH7z4^3rj0&8(Wb7JUqR8rcR%~VBw0D zt5&bwymi~F_wPS^_y_@CzJ7y)@87@wB@djAYS_oXz$E7B;uvCa`s(Dn{=$I*N1xw& zmuH{2J$}UvvF664p8t)Uot^w@YX3eHS4MMA5#twxCv@S8$@{k82K*Q#(4=#CkFcR=T*fdPzi-erDAcjNHHLY2?{u z8&A962-^K~k93eA&xEgw=dQTCQgSj^(SkcSY^&H+_8IlaZ_V2K&rrQ^&eMkQ)$jKo z-Tcq>QD?>Nw^8pe2fz6zd3@zMhG31h-+n9WXI3n`bLUlUNZF@U3*XP;JztqFmn8A) zU0x9Ny6(c2hoAc|9(u~aV3B*^;^~i<-tU_p^7Zw}pDGir7cZD)cvUg2KF)rcPiaAs zS>%pt^@k?OCJU~-)L1=_r!MxqtQmua!EBF+7&QyoKl9Ga%}ZnKFx)8aDEj5|?FysE zq4lX>wd7837f{l=vuW$Iz**P$qi^fSbuwKrJ02!+gJF&Q)q<8ZnjeXq6B~Ozf^oT&wN%`lJ4T<@emnIwOEc2%aZRRn;?5~LYTo7h wzq#67fa5dP-v+ibkXKVZe+7Bwiq5s(474n?R34pjx@h*VlBB~_$|Yjdd7L)9LtD(5Ov z)dL4Ww3l9cKsgjjQ3S1!I3S^@QYDnc5QyV{@4h!Zc-L&4wXc$2t_4=+LA^{LWAU-JRPr(*G&FRop?p0w>aD+Msa0AK)s*3hntJ(d-po}FEc zO-9-vE>Wocs9FrSIR(<;Gbl zFcB(^M(x)dH}aLGrIpoJuh4egx0?a2HEPW!+O7+`RzqcJ=|9UfXN3?D-t@z^f1zW? ze*fs=#eWVSI4}-oBy2klDL=7H^E*KV!cL!v1b~6gZaWSf*G09_=u+x?L&CPfj~|!m z#EGvypP9MENga0m(Emb>kY84SQt3a_hG@bdENX0-~(b)l3(I-Sn3x2nEd4rE}5-FgLf3nGH+ zx=_s~>dhwhm?i)~DFwqYFk+f-qzp*11Aq_$wq+p|kHeA@%nXj;>jXd=28>t?W?=6v zDPbiNc*ihMYqe0W)lhG>x(2pm4M(IzHl0TL{Q0wE6B7$Z4j(S)0UGv#x1>ZO7Q?9Q z^wx4+)Y@%4dHQsDePv~S^Uj@nrOnOmN^WC-JSr_IF*Y%=@WIKG1p?63FhU5T&T4vk zk4OnqN=)YSg+G}WEGZ``u#%x$z|5F9bf^GkNFe~jhzuZ@quUe!<>l;sC&-Y00?cq6 z2g-FJ4CBqa|1E==p_GE-INkjH0eGRAq5Tc$qkk{3es4Su|d;&#+0GsW$^Vh?NH@8ZqMF2=dD>+&O$WIXN9B2YYAa)!0=6trTx-Is8a+24X71*TBmto_G~90p2bhvSJKF&GAbbX*%mDjI zLWYpFMlze7Ln<|s^AA%gB(vE$tu-iQ5V_BA4wgV`D5XM&@YM0+SN0T(sBLU40zf>I znJeV;SG0Fm>@BXf9!`QF;xObRQkrKAg=qlOL204Kgi1 zA4T#3BCM{hEg#ssx6rSnp@Imm)>vIzTOKHZKdnv2LG#6n`M;SL_Ghz&pv#3N-|ZO@ zVZBsZZoPat-*lX99T nb{o{^Dm`@l0K5K`%#Z&8E@ID3`%|n)00000NkvXXu0mjf=}%$% literal 0 HcmV?d00001 diff --git a/sites/all/libraries/ckeditor/skins/moono/images/hidpi/lock.png b/sites/all/libraries/ckeditor/skins/moono/images/hidpi/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..1b87bbb7a14ceac0e259d75bdbc03365f01e9acf GIT binary patch literal 1299 zcmcK2YfO_@7zgl|J7XgE`xuonh01Nvjr*nTTY7<(-l(*+SfqVRg|f}S7??s;78ztp zX0k1txJ4X+B9|7(76PTE8=#;ILmd?4R;B^j!~z2x+8z9CvQPWvf6jSwzMPXM&u0ue z$=S)@34$PJ3K?dB6Lqj0ZNLuSs2_nKYbQn)hj_2G^*%^j+k>{Y-&LyV_V$_fcH_;P zvmhNEa~&NIJ3AM;yO-4JC5>iTtzPNveFW0ix8C2sF)(1(YB#mot---<5UuuakfEU+ z5S?yEuiw?_cJ=x_oo)~8!^6)(42FLUhW+7T%gBgjY|L`|wq<0OglbH=L7z`GR!Dcf!945ee zh0SJhIBXy%hXcap<^bFSCwRPEK0j9|AC{QP{8=%iRI0uZF2u&_`pE|f?L5kw3~ zBx0#lf*=y96hROvP*fz9$%ApWdo)va&{wTvRRW0uB zs>XO!=Uk-==9!?5@ZAN6#Syn!*AzSWhcB_^{#}C$haF~V#>Iw??d;fVlersm!!7;Uj>SJmi_hG5 zZ#pk-HW(_ix=qMW}A|^1`E2(SBSAdU|Li>Y8G$tCm(@1~=H6 z6ag5$lC;o&ImGX(B0jJPRk>h;_7e6O1LgJZU)YLj?I~aT3umymFustv(yj67&=Dm^ z?g_V&m3kVp*&AiWs4odWC9^_H_CGgi5Nm8H&$p$wuM4(gUDumDCrs~Z2E6SyLW!%& zP!I0Lm2aTnAU?{vkv)U$mKU^^qb1M{1k-Ofb_PyW@s~9{B7WB6vn4NitEC!2g!?Sd p*{oO(6}kOo)YtW8d<-4USq^e@@n6;8y}(pJ5QRvGJMp6P{{r75P22zg literal 0 HcmV?d00001 diff --git a/sites/all/libraries/ckeditor/skins/moono/images/hidpi/refresh.png b/sites/all/libraries/ckeditor/skins/moono/images/hidpi/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c2b86e6d1cd21bd352a54321ae13100b78e581 GIT binary patch literal 1842 zcmV-22hI42P)Uv6m4vp)}&37zI6HlHEH|eLsJKw zXPbapXPgxfwV)P793GstvOQgEa}Gh|da2&z%em*Az4y1i^^HedShGgFt+Ybg*R2zm zHf#`AHf|J`acy6}UbL=VJK{6My8xi_>sz;qNBj1Pmq(9^=LZjpo?W}drN+h)gLo(F zY57Aa$8Q?sYlx$E_N=(Qd-sSzytQ&3{`aO$;^mPe1Q0PRF;P00On>6Pzjo$~xU+Y! zdVkT5Oa8Y~9(Wo4?!@6YcI*(^i4zLI7b{oF^0{-Rqsep=_eolNyXXVBTXtMxUoke) z*9@?(&6~yTJ$uCSLx+Uc(jv6er-jzlr2u@oVuf73e7US&v`CJdIPnFZeG75Y&Ye?x zY=L;AVp>ZYX~ok62l|zEbWouKWHKZNVs&zLO>1aqkP8wGArqDmY*7YZsMbE%Zd`JDI20zZ;&$jQr70cBWLQeG}U zoH1h$-UTxE`%rc@1}O4fI6FtsS_QJALKc^m$w}eiKVz+l%6V>wy)=HThMz7$GJOG{NA!{^U%XfQ1zl^690Hb4^;0R&H*wi;J=7Aq=e z9U;ipL1GiYfd7$t?@yW1Ra{acXCwLxi;Lw)QBfyYa#Y3`b*|-mKbmU#l6RnJqvR zLskuu@vH>|X^R2hOr&2yVWBL9uCBTQAq64%{GvMl6L# zMz*lRQcwHPN@!#OeeFGA!XH^VIWiAS5CA3}_I4`+)YhnFC|5lMM&Os4n3}5g=R;W3 zJj~`*%(9`e^h!#-U`n~Te3l6SxnzML3JTb#z!Y4+|A0)mN@`I3o^2@q_dk_Bi@bSKqBE| zQhf~(O-i3}Sm`g}?>W1>@6OiuaX;C_dEErYEMUCZ>;){FsmhM%Z$uSNg!lm z7G?oAFRyEOm#L=TOPBgbGAQ;74Ryw|BDc|_dtxyOaeWp*bALigio~8A7AThRc3aJ; zRWB^PY{#H7AS7fp-$~Hb^loojzlRj7vxuP|WvS$Mq?Y z$mnQJtUjD4ZPk%szjg*(A%xi+6x0|UA1{+ZWg5Vw>3}j|ogut8-X$aYW3b*F9L(O} zqo_xv97?_InUJnPgwtP7!GxNQoSaIh&z#vCpOhpMAc+tHN`*3B6ZPj9Ok_k|0>J@waRKV zCf0-zx8paJR-z{xOd;km%Pc=O@NDSkmoT{Z?N_#wR$75Obe_YAED= g=g^ir!ms2106T%iXz%*nVE_OC07*qoM6N<$f=_o+lmGw# literal 0 HcmV?d00001 diff --git a/sites/all/libraries/ckeditor/skins/moono/images/lock-open.png b/sites/all/libraries/ckeditor/skins/moono/images/lock-open.png new file mode 100644 index 0000000000000000000000000000000000000000..04769877aa6d074e476f9560638d06cb158aaf1b GIT binary patch literal 349 zcmV-j0iyniP)Hc z&n^Q25XbTF&7uB8h{F<*UK$c{6bF(DX-V5yq<8{P)2DIiBX|hAR<{~TY$9o%h5mZ)AKROqT}ICn1K2gcrVZ2a4<}@gIzkdJz{m-92fBpLP=g*)2|NjHELI68EJ2y8s zkS!=EC?q7r%gd{)s|%6hQrC zQ&USzOJ85#+}zyO*4EC>&e74)$;rvp)z#hI-P6<4$H&Ll*VoU_FCZWwFfcGEC@3T( zBrGf}JUl!iA|f&}GAb%c^3n-Mpfw65L4F`_p#mOBpv4~P>Ak%>PCWYb^I+EhUqA)R zJzX3_BqUi68WtTk;Bh_3F0dqH=?3-5S9bp27<4=JnDRuWx-#Aadn}%KH8O@(F~l4f zV%6B5u|000zF>k}?(D_64^}eFG4tcw`tZRF@ly(tt&g5n<9kM zsLu=gzW%*|vFG*AU-=fqr?FkSs@QPm>HfukQ`A@#Ix8h7DKMl)rKBuVXo%cucmMZ^ rIRclgQu1>9uIx;p5dj z%lP`u&v$=J<2z5)lzAD*kbFD5EhFb!&D-m^J6co(0xLU+qr3iEV3kgyVg?12G;; z{1S&}Zs+utOA*o9X7*lg?dXjK7KQHXDU Qp#T5?07*qoM6N<$g14l=!T Date: Sat, 7 Mar 2015 23:02:20 -0500 Subject: [PATCH 9/9] Adding Chosen library --- sites/all/libraries/chosen/chosen-sprite.png | Bin 0 -> 538 bytes .../all/libraries/chosen/chosen-sprite@2x.png | Bin 0 -> 738 bytes sites/all/libraries/chosen/chosen.css | 450 +++++ sites/all/libraries/chosen/chosen.jquery.js | 1258 ++++++++++++++ .../all/libraries/chosen/chosen.jquery.min.js | 2 + sites/all/libraries/chosen/chosen.min.css | 3 + sites/all/libraries/chosen/chosen.proto.js | 1278 ++++++++++++++ .../all/libraries/chosen/chosen.proto.min.js | 2 + .../libraries/chosen/docsupport/chosen.png | Bin 0 -> 1509 bytes .../chosen/docsupport/oss-credit.png | Bin 0 -> 4400 bytes .../all/libraries/chosen/docsupport/prism.css | 108 ++ .../all/libraries/chosen/docsupport/prism.js | 9 + .../all/libraries/chosen/docsupport/style.css | 204 +++ sites/all/libraries/chosen/index.html | 1479 ++++++++++++++++ sites/all/libraries/chosen/index.proto.html | 1483 +++++++++++++++++ sites/all/libraries/chosen/options.html | 276 +++ 16 files changed, 6552 insertions(+) create mode 100755 sites/all/libraries/chosen/chosen-sprite.png create mode 100755 sites/all/libraries/chosen/chosen-sprite@2x.png create mode 100755 sites/all/libraries/chosen/chosen.css create mode 100755 sites/all/libraries/chosen/chosen.jquery.js create mode 100755 sites/all/libraries/chosen/chosen.jquery.min.js create mode 100755 sites/all/libraries/chosen/chosen.min.css create mode 100755 sites/all/libraries/chosen/chosen.proto.js create mode 100755 sites/all/libraries/chosen/chosen.proto.min.js create mode 100755 sites/all/libraries/chosen/docsupport/chosen.png create mode 100755 sites/all/libraries/chosen/docsupport/oss-credit.png create mode 100755 sites/all/libraries/chosen/docsupport/prism.css create mode 100755 sites/all/libraries/chosen/docsupport/prism.js create mode 100755 sites/all/libraries/chosen/docsupport/style.css create mode 100755 sites/all/libraries/chosen/index.html create mode 100755 sites/all/libraries/chosen/index.proto.html create mode 100755 sites/all/libraries/chosen/options.html diff --git a/sites/all/libraries/chosen/chosen-sprite.png b/sites/all/libraries/chosen/chosen-sprite.png new file mode 100755 index 0000000000000000000000000000000000000000..c57da70b4b5b1e08a6977ddde182677af0e5e1b8 GIT binary patch literal 538 zcmV+#0_FXQP)cz2)-WJLkv8J@4bb5L`rsE?Kc|FrXHkKz)ov z76MHYM&Apx%05P7orE!>9=yZ~6O0^V?1%{=1UASqa<2Pgnk7fs!OIs9gh{NCN+@=) z>Gfttd5uq;oeR{%NHjtqV~jEQeY?tDff=(jqx>~SZ_e+iN26HR*`0Q!Re)~HD85p> zbL()Mw}bI^#`7wp0+cv&7*LhrtOmR)?PK>(-BeLm#jL5Jfogv-QS(TBnUb;))Krqm zD}uDDeVLNhm1G*pFB`O?iA=dnWBEpqHk8Yh%Qu45EIG=&F-dDmt|;|nN@|3lOkVZ7>z*~a1?_t?U)c+&|JFJke1`&0-a z#PjhRlg?=$KTo4|rU@NyV_fzDy@>h!lVyKShsO8>V>$xyIXRbHK%H~^Aaz=s$Jz^V zlb?KfaKdZqu3^#m$mintvgJ15@j`sb2Zr%69Sn=xN01Tm5r)NQanT=jhwm7zqj2>O cEB}D~0$b-QdD7|v=>Px#07*qoM6N<$g6AXnUH||9 literal 0 HcmV?d00001 diff --git a/sites/all/libraries/chosen/chosen-sprite@2x.png b/sites/all/libraries/chosen/chosen-sprite@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..6b50545202cb4770039362c55025b0b9824663ad GIT binary patch literal 738 zcmV<80v-K{P)oJoIWh{eAG@xkM<0ryd(K3(} zP8JV&;uuIJ4nL%g8!wSG9E$P+3QVMGgj><+00}M5I5kMzaT<~M;uJ`UhLfbp9Ahdsrux5(g+(>Q*+9wU{AuYPH0}W_u4`|q(9c->{ zt>Jn|lbhH<_x5jU6prFi#S}&XMZ=~Y5VyC3+ZN%hXciz8 zPcLpJgbIK#a49e31-%wf2zh2F&&(Nq;AL%4zA(=QJRGq`sx3y3#0_cg9Fim739XTOu1NKKjlWs`52Q+3 Uja*K~(*OVf07*qoM6N<$g3mu-GXMYp literal 0 HcmV?d00001 diff --git a/sites/all/libraries/chosen/chosen.css b/sites/all/libraries/chosen/chosen.css new file mode 100755 index 0000000000..5ab2603d5b --- /dev/null +++ b/sites/all/libraries/chosen/chosen.css @@ -0,0 +1,450 @@ +/*! +Chosen, a Select Box Enhancer for jQuery and Prototype +by Patrick Filler for Harvest, http://getharvest.com + +Version 1.4.0 +Full source at https://github.com/harvesthq/chosen +Copyright (c) 2011-2015 Harvest http://getharvest.com + +MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md +This file is generated by `grunt build`, do not edit it by hand. +*/ + +/* @group Base */ +.chosen-container { + position: relative; + display: inline-block; + vertical-align: middle; + font-size: 13px; + zoom: 1; + *display: inline; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +.chosen-container * { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.chosen-container .chosen-drop { + position: absolute; + top: 100%; + left: -9999px; + z-index: 1010; + width: 100%; + border: 1px solid #aaa; + border-top: 0; + background: #fff; + box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15); +} +.chosen-container.chosen-with-drop .chosen-drop { + left: 0; +} +.chosen-container a { + cursor: pointer; +} +.chosen-container .search-choice .group-name, .chosen-container .chosen-single .group-name { + margin-right: 4px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + font-weight: normal; + color: #999999; +} +.chosen-container .search-choice .group-name:after, .chosen-container .chosen-single .group-name:after { + content: ":"; + padding-left: 2px; + vertical-align: top; +} + +/* @end */ +/* @group Single Chosen */ +.chosen-container-single .chosen-single { + position: relative; + display: block; + overflow: hidden; + padding: 0 0 0 8px; + height: 25px; + border: 1px solid #aaa; + border-radius: 5px; + background-color: #fff; + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4)); + background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); + background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); + background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); + background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); + background-clip: padding-box; + box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1); + color: #444; + text-decoration: none; + white-space: nowrap; + line-height: 24px; +} +.chosen-container-single .chosen-default { + color: #999; +} +.chosen-container-single .chosen-single span { + display: block; + overflow: hidden; + margin-right: 26px; + text-overflow: ellipsis; + white-space: nowrap; +} +.chosen-container-single .chosen-single-with-deselect span { + margin-right: 38px; +} +.chosen-container-single .chosen-single abbr { + position: absolute; + top: 6px; + right: 26px; + display: block; + width: 12px; + height: 12px; + background: url('chosen-sprite.png') -42px 1px no-repeat; + font-size: 1px; +} +.chosen-container-single .chosen-single abbr:hover { + background-position: -42px -10px; +} +.chosen-container-single.chosen-disabled .chosen-single abbr:hover { + background-position: -42px -10px; +} +.chosen-container-single .chosen-single div { + position: absolute; + top: 0; + right: 0; + display: block; + width: 18px; + height: 100%; +} +.chosen-container-single .chosen-single div b { + display: block; + width: 100%; + height: 100%; + background: url('chosen-sprite.png') no-repeat 0px 2px; +} +.chosen-container-single .chosen-search { + position: relative; + z-index: 1010; + margin: 0; + padding: 3px 4px; + white-space: nowrap; +} +.chosen-container-single .chosen-search input[type="text"] { + margin: 1px 0; + padding: 4px 20px 4px 5px; + width: 100%; + height: auto; + outline: 0; + border: 1px solid #aaa; + background: white url('chosen-sprite.png') no-repeat 100% -20px; + background: url('chosen-sprite.png') no-repeat 100% -20px; + font-size: 1em; + font-family: sans-serif; + line-height: normal; + border-radius: 0; +} +.chosen-container-single .chosen-drop { + margin-top: -1px; + border-radius: 0 0 4px 4px; + background-clip: padding-box; +} +.chosen-container-single.chosen-container-single-nosearch .chosen-search { + position: absolute; + left: -9999px; +} + +/* @end */ +/* @group Results */ +.chosen-container .chosen-results { + color: #444; + position: relative; + overflow-x: hidden; + overflow-y: auto; + margin: 0 4px 4px 0; + padding: 0 0 0 4px; + max-height: 240px; + -webkit-overflow-scrolling: touch; +} +.chosen-container .chosen-results li { + display: none; + margin: 0; + padding: 5px 6px; + list-style: none; + line-height: 15px; + word-wrap: break-word; + -webkit-touch-callout: none; +} +.chosen-container .chosen-results li.active-result { + display: list-item; + cursor: pointer; +} +.chosen-container .chosen-results li.disabled-result { + display: list-item; + color: #ccc; + cursor: default; +} +.chosen-container .chosen-results li.highlighted { + background-color: #3875d7; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); + background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%); + background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%); + background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%); + background-image: linear-gradient(#3875d7 20%, #2a62bc 90%); + color: #fff; +} +.chosen-container .chosen-results li.no-results { + color: #777; + display: list-item; + background: #f4f4f4; +} +.chosen-container .chosen-results li.group-result { + display: list-item; + font-weight: bold; + cursor: default; +} +.chosen-container .chosen-results li.group-option { + padding-left: 15px; +} +.chosen-container .chosen-results li em { + font-style: normal; + text-decoration: underline; +} + +/* @end */ +/* @group Multi Chosen */ +.chosen-container-multi .chosen-choices { + position: relative; + overflow: hidden; + margin: 0; + padding: 0 5px; + width: 100%; + height: auto !important; + height: 1%; + border: 1px solid #aaa; + background-color: #fff; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); + background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%); + background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%); + background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%); + background-image: linear-gradient(#eeeeee 1%, #ffffff 15%); + cursor: text; +} +.chosen-container-multi .chosen-choices li { + float: left; + list-style: none; +} +.chosen-container-multi .chosen-choices li.search-field { + margin: 0; + padding: 0; + white-space: nowrap; +} +.chosen-container-multi .chosen-choices li.search-field input[type="text"] { + margin: 1px 0; + padding: 0; + height: 25px; + outline: 0; + border: 0 !important; + background: transparent !important; + box-shadow: none; + color: #999; + font-size: 100%; + font-family: sans-serif; + line-height: normal; + border-radius: 0; +} +.chosen-container-multi .chosen-choices li.search-choice { + position: relative; + margin: 3px 5px 3px 0; + padding: 3px 20px 3px 5px; + border: 1px solid #aaa; + max-width: 100%; + border-radius: 3px; + background-color: #eeeeee; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); + background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + background-size: 100% 19px; + background-repeat: repeat-x; + background-clip: padding-box; + box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05); + color: #333; + line-height: 13px; + cursor: default; +} +.chosen-container-multi .chosen-choices li.search-choice span { + word-wrap: break-word; +} +.chosen-container-multi .chosen-choices li.search-choice .search-choice-close { + position: absolute; + top: 4px; + right: 3px; + display: block; + width: 12px; + height: 12px; + background: url('chosen-sprite.png') -42px 1px no-repeat; + font-size: 1px; +} +.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover { + background-position: -42px -10px; +} +.chosen-container-multi .chosen-choices li.search-choice-disabled { + padding-right: 5px; + border: 1px solid #ccc; + background-color: #e4e4e4; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); + background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + color: #666; +} +.chosen-container-multi .chosen-choices li.search-choice-focus { + background: #d4d4d4; +} +.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close { + background-position: -42px -10px; +} +.chosen-container-multi .chosen-results { + margin: 0; + padding: 0; +} +.chosen-container-multi .chosen-drop .result-selected { + display: list-item; + color: #ccc; + cursor: default; +} + +/* @end */ +/* @group Active */ +.chosen-container-active .chosen-single { + border: 1px solid #5897fb; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); +} +.chosen-container-active.chosen-with-drop .chosen-single { + border: 1px solid #aaa; + -moz-border-radius-bottomright: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 0; + border-bottom-left-radius: 0; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff)); + background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%); + background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%); + background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%); + background-image: linear-gradient(#eeeeee 20%, #ffffff 80%); + box-shadow: 0 1px 0 #fff inset; +} +.chosen-container-active.chosen-with-drop .chosen-single div { + border-left: none; + background: transparent; +} +.chosen-container-active.chosen-with-drop .chosen-single div b { + background-position: -18px 2px; +} +.chosen-container-active .chosen-choices { + border: 1px solid #5897fb; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); +} +.chosen-container-active .chosen-choices li.search-field input[type="text"] { + color: #222 !important; +} + +/* @end */ +/* @group Disabled Support */ +.chosen-disabled { + opacity: 0.5 !important; + cursor: default; +} +.chosen-disabled .chosen-single { + cursor: default; +} +.chosen-disabled .chosen-choices .search-choice .search-choice-close { + cursor: default; +} + +/* @end */ +/* @group Right to Left */ +.chosen-rtl { + text-align: right; +} +.chosen-rtl .chosen-single { + overflow: visible; + padding: 0 8px 0 0; +} +.chosen-rtl .chosen-single span { + margin-right: 0; + margin-left: 26px; + direction: rtl; +} +.chosen-rtl .chosen-single-with-deselect span { + margin-left: 38px; +} +.chosen-rtl .chosen-single div { + right: auto; + left: 3px; +} +.chosen-rtl .chosen-single abbr { + right: auto; + left: 26px; +} +.chosen-rtl .chosen-choices li { + float: right; +} +.chosen-rtl .chosen-choices li.search-field input[type="text"] { + direction: rtl; +} +.chosen-rtl .chosen-choices li.search-choice { + margin: 3px 5px 3px 0; + padding: 3px 5px 3px 19px; +} +.chosen-rtl .chosen-choices li.search-choice .search-choice-close { + right: auto; + left: 4px; +} +.chosen-rtl.chosen-container-single-nosearch .chosen-search, +.chosen-rtl .chosen-drop { + left: 9999px; +} +.chosen-rtl.chosen-container-single .chosen-results { + margin: 0 0 4px 4px; + padding: 0 4px 0 0; +} +.chosen-rtl .chosen-results li.group-option { + padding-right: 15px; + padding-left: 0; +} +.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div { + border-right: none; +} +.chosen-rtl .chosen-search input[type="text"] { + padding: 4px 5px 4px 20px; + background: white url('chosen-sprite.png') no-repeat -30px -20px; + background: url('chosen-sprite.png') no-repeat -30px -20px; + direction: rtl; +} +.chosen-rtl.chosen-container-single .chosen-single div b { + background-position: 6px 2px; +} +.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b { + background-position: -12px 2px; +} + +/* @end */ +/* @group Retina compatibility */ +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi), only screen and (min-resolution: 1.5dppx) { + .chosen-rtl .chosen-search input[type="text"], + .chosen-container-single .chosen-single abbr, + .chosen-container-single .chosen-single div b, + .chosen-container-single .chosen-search input[type="text"], + .chosen-container-multi .chosen-choices .search-choice .search-choice-close, + .chosen-container .chosen-results-scroll-down span, + .chosen-container .chosen-results-scroll-up span { + background-image: url('chosen-sprite@2x.png') !important; + background-size: 52px 37px !important; + background-repeat: no-repeat !important; + } +} +/* @end */ diff --git a/sites/all/libraries/chosen/chosen.jquery.js b/sites/all/libraries/chosen/chosen.jquery.js new file mode 100755 index 0000000000..450ec2f6e4 --- /dev/null +++ b/sites/all/libraries/chosen/chosen.jquery.js @@ -0,0 +1,1258 @@ +/*! +Chosen, a Select Box Enhancer for jQuery and Prototype +by Patrick Filler for Harvest, http://getharvest.com + +Version 1.4.0 +Full source at https://github.com/harvesthq/chosen +Copyright (c) 2011-2015 Harvest http://getharvest.com + +MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md +This file is generated by `grunt build`, do not edit it by hand. +*/ + +(function() { + var $, AbstractChosen, Chosen, SelectParser, _ref, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + SelectParser = (function() { + function SelectParser() { + this.options_index = 0; + this.parsed = []; + } + + SelectParser.prototype.add_node = function(child) { + if (child.nodeName.toUpperCase() === "OPTGROUP") { + return this.add_group(child); + } else { + return this.add_option(child); + } + }; + + SelectParser.prototype.add_group = function(group) { + var group_position, option, _i, _len, _ref, _results; + group_position = this.parsed.length; + this.parsed.push({ + array_index: group_position, + group: true, + label: this.escapeExpression(group.label), + title: group.title ? group.title : void 0, + children: 0, + disabled: group.disabled, + classes: group.className + }); + _ref = group.childNodes; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + _results.push(this.add_option(option, group_position, group.disabled)); + } + return _results; + }; + + SelectParser.prototype.add_option = function(option, group_position, group_disabled) { + if (option.nodeName.toUpperCase() === "OPTION") { + if (option.text !== "") { + if (group_position != null) { + this.parsed[group_position].children += 1; + } + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + value: option.value, + text: option.text, + html: option.innerHTML, + title: option.title ? option.title : void 0, + selected: option.selected, + disabled: group_disabled === true ? group_disabled : option.disabled, + group_array_index: group_position, + group_label: group_position != null ? this.parsed[group_position].label : null, + classes: option.className, + style: option.style.cssText + }); + } else { + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + empty: true + }); + } + return this.options_index += 1; + } + }; + + SelectParser.prototype.escapeExpression = function(text) { + var map, unsafe_chars; + if ((text == null) || text === false) { + return ""; + } + if (!/[\&\<\>\"\'\`]/.test(text)) { + return text; + } + map = { + "<": "<", + ">": ">", + '"': """, + "'": "'", + "`": "`" + }; + unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g; + return text.replace(unsafe_chars, function(chr) { + return map[chr] || "&"; + }); + }; + + return SelectParser; + + })(); + + SelectParser.select_to_array = function(select) { + var child, parser, _i, _len, _ref; + parser = new SelectParser(); + _ref = select.childNodes; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + child = _ref[_i]; + parser.add_node(child); + } + return parser.parsed; + }; + + AbstractChosen = (function() { + function AbstractChosen(form_field, options) { + this.form_field = form_field; + this.options = options != null ? options : {}; + if (!AbstractChosen.browser_is_supported()) { + return; + } + this.is_multiple = this.form_field.multiple; + this.set_default_text(); + this.set_default_values(); + this.setup(); + this.set_up_html(); + this.register_observers(); + this.on_ready(); + } + + AbstractChosen.prototype.set_default_values = function() { + var _this = this; + this.click_test_action = function(evt) { + return _this.test_active_click(evt); + }; + this.activate_action = function(evt) { + return _this.activate_field(evt); + }; + this.active_field = false; + this.mouse_on_container = false; + this.results_showing = false; + this.result_highlighted = null; + this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false; + this.disable_search_threshold = this.options.disable_search_threshold || 0; + this.disable_search = this.options.disable_search || false; + this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true; + this.group_search = this.options.group_search != null ? this.options.group_search : true; + this.search_contains = this.options.search_contains || false; + this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true; + this.max_selected_options = this.options.max_selected_options || Infinity; + this.inherit_select_classes = this.options.inherit_select_classes || false; + this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true; + this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true; + return this.include_group_label_in_selected = this.options.include_group_label_in_selected || false; + }; + + AbstractChosen.prototype.set_default_text = function() { + if (this.form_field.getAttribute("data-placeholder")) { + this.default_text = this.form_field.getAttribute("data-placeholder"); + } else if (this.is_multiple) { + this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text; + } else { + this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text; + } + return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text; + }; + + AbstractChosen.prototype.choice_label = function(item) { + if (this.include_group_label_in_selected && (item.group_label != null)) { + return "" + item.group_label + "" + item.html; + } else { + return item.html; + } + }; + + AbstractChosen.prototype.mouse_enter = function() { + return this.mouse_on_container = true; + }; + + AbstractChosen.prototype.mouse_leave = function() { + return this.mouse_on_container = false; + }; + + AbstractChosen.prototype.input_focus = function(evt) { + var _this = this; + if (this.is_multiple) { + if (!this.active_field) { + return setTimeout((function() { + return _this.container_mousedown(); + }), 50); + } + } else { + if (!this.active_field) { + return this.activate_field(); + } + } + }; + + AbstractChosen.prototype.input_blur = function(evt) { + var _this = this; + if (!this.mouse_on_container) { + this.active_field = false; + return setTimeout((function() { + return _this.blur_test(); + }), 100); + } + }; + + AbstractChosen.prototype.results_option_build = function(options) { + var content, data, _i, _len, _ref; + content = ''; + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + data = _ref[_i]; + if (data.group) { + content += this.result_add_group(data); + } else { + content += this.result_add_option(data); + } + if (options != null ? options.first : void 0) { + if (data.selected && this.is_multiple) { + this.choice_build(data); + } else if (data.selected && !this.is_multiple) { + this.single_set_selected_text(data.html); + } + } + } + return content; + }; + + AbstractChosen.prototype.result_add_option = function(option) { + var classes, option_el; + if (!option.search_match) { + return ''; + } + if (!this.include_option_in_results(option)) { + return ''; + } + classes = []; + if (!option.disabled && !(option.selected && this.is_multiple)) { + classes.push("active-result"); + } + if (option.disabled && !(option.selected && this.is_multiple)) { + classes.push("disabled-result"); + } + if (option.selected) { + classes.push("result-selected"); + } + if (option.group_array_index != null) { + classes.push("group-option"); + } + if (option.classes !== "") { + classes.push(option.classes); + } + option_el = document.createElement("li"); + option_el.className = classes.join(" "); + option_el.style.cssText = option.style; + option_el.setAttribute("data-option-array-index", option.array_index); + option_el.innerHTML = option.search_text; + if (option.title) { + option_el.title = option.title; + } + return this.outerHTML(option_el); + }; + + AbstractChosen.prototype.result_add_group = function(group) { + var classes, group_el; + if (!(group.search_match || group.group_match)) { + return ''; + } + if (!(group.active_options > 0)) { + return ''; + } + classes = []; + classes.push("group-result"); + if (group.classes) { + classes.push(group.classes); + } + group_el = document.createElement("li"); + group_el.className = classes.join(" "); + group_el.innerHTML = group.search_text; + if (group.title) { + group_el.title = group.title; + } + return this.outerHTML(group_el); + }; + + AbstractChosen.prototype.results_update_field = function() { + this.set_default_text(); + if (!this.is_multiple) { + this.results_reset_cleanup(); + } + this.result_clear_highlight(); + this.results_build(); + if (this.results_showing) { + return this.winnow_results(); + } + }; + + AbstractChosen.prototype.reset_single_select_options = function() { + var result, _i, _len, _ref, _results; + _ref = this.results_data; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + result = _ref[_i]; + if (result.selected) { + _results.push(result.selected = false); + } else { + _results.push(void 0); + } + } + return _results; + }; + + AbstractChosen.prototype.results_toggle = function() { + if (this.results_showing) { + return this.results_hide(); + } else { + return this.results_show(); + } + }; + + AbstractChosen.prototype.results_search = function(evt) { + if (this.results_showing) { + return this.winnow_results(); + } else { + return this.results_show(); + } + }; + + AbstractChosen.prototype.winnow_results = function() { + var escapedSearchText, option, regex, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref; + this.no_results_clear(); + results = 0; + searchText = this.get_search_text(); + escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + zregex = new RegExp(escapedSearchText, 'i'); + regex = this.get_search_regex(escapedSearchText); + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + option.search_match = false; + results_group = null; + if (this.include_option_in_results(option)) { + if (option.group) { + option.group_match = false; + option.active_options = 0; + } + if ((option.group_array_index != null) && this.results_data[option.group_array_index]) { + results_group = this.results_data[option.group_array_index]; + if (results_group.active_options === 0 && results_group.search_match) { + results += 1; + } + results_group.active_options += 1; + } + if (!(option.group && !this.group_search)) { + option.search_text = option.group ? option.label : option.html; + option.search_match = this.search_string_match(option.search_text, regex); + if (option.search_match && !option.group) { + results += 1; + } + if (option.search_match) { + if (searchText.length) { + startpos = option.search_text.search(zregex); + text = option.search_text.substr(0, startpos + searchText.length) + '
      ' + option.search_text.substr(startpos + searchText.length); + option.search_text = text.substr(0, startpos) + '' + text.substr(startpos); + } + if (results_group != null) { + results_group.group_match = true; + } + } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) { + option.search_match = true; + } + } + } + } + this.result_clear_highlight(); + if (results < 1 && searchText.length) { + this.update_results_content(""); + return this.no_results(searchText); + } else { + this.update_results_content(this.results_option_build()); + return this.winnow_results_set_highlight(); + } + }; + + AbstractChosen.prototype.get_search_regex = function(escaped_search_string) { + var regex_anchor; + regex_anchor = this.search_contains ? "" : "^"; + return new RegExp(regex_anchor + escaped_search_string, 'i'); + }; + + AbstractChosen.prototype.search_string_match = function(search_string, regex) { + var part, parts, _i, _len; + if (regex.test(search_string)) { + return true; + } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) { + parts = search_string.replace(/\[|\]/g, "").split(" "); + if (parts.length) { + for (_i = 0, _len = parts.length; _i < _len; _i++) { + part = parts[_i]; + if (regex.test(part)) { + return true; + } + } + } + } + }; + + AbstractChosen.prototype.choices_count = function() { + var option, _i, _len, _ref; + if (this.selected_option_count != null) { + return this.selected_option_count; + } + this.selected_option_count = 0; + _ref = this.form_field.options; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + if (option.selected) { + this.selected_option_count += 1; + } + } + return this.selected_option_count; + }; + + AbstractChosen.prototype.choices_click = function(evt) { + evt.preventDefault(); + if (!(this.results_showing || this.is_disabled)) { + return this.results_show(); + } + }; + + AbstractChosen.prototype.keyup_checker = function(evt) { + var stroke, _ref; + stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; + this.search_field_scale(); + switch (stroke) { + case 8: + if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) { + return this.keydown_backstroke(); + } else if (!this.pending_backstroke) { + this.result_clear_highlight(); + return this.results_search(); + } + break; + case 13: + evt.preventDefault(); + if (this.results_showing) { + return this.result_select(evt); + } + break; + case 27: + if (this.results_showing) { + this.results_hide(); + } + return true; + case 9: + case 38: + case 40: + case 16: + case 91: + case 17: + break; + default: + return this.results_search(); + } + }; + + AbstractChosen.prototype.clipboard_event_checker = function(evt) { + var _this = this; + return setTimeout((function() { + return _this.results_search(); + }), 50); + }; + + AbstractChosen.prototype.container_width = function() { + if (this.options.width != null) { + return this.options.width; + } else { + return "" + this.form_field.offsetWidth + "px"; + } + }; + + AbstractChosen.prototype.include_option_in_results = function(option) { + if (this.is_multiple && (!this.display_selected_options && option.selected)) { + return false; + } + if (!this.display_disabled_options && option.disabled) { + return false; + } + if (option.empty) { + return false; + } + return true; + }; + + AbstractChosen.prototype.search_results_touchstart = function(evt) { + this.touch_started = true; + return this.search_results_mouseover(evt); + }; + + AbstractChosen.prototype.search_results_touchmove = function(evt) { + this.touch_started = false; + return this.search_results_mouseout(evt); + }; + + AbstractChosen.prototype.search_results_touchend = function(evt) { + if (this.touch_started) { + return this.search_results_mouseup(evt); + } + }; + + AbstractChosen.prototype.outerHTML = function(element) { + var tmp; + if (element.outerHTML) { + return element.outerHTML; + } + tmp = document.createElement("div"); + tmp.appendChild(element); + return tmp.innerHTML; + }; + + AbstractChosen.browser_is_supported = function() { + if (window.navigator.appName === "Microsoft Internet Explorer") { + return document.documentMode >= 8; + } + if (/iP(od|hone)/i.test(window.navigator.userAgent)) { + return false; + } + if (/Android/i.test(window.navigator.userAgent)) { + if (/Mobile/i.test(window.navigator.userAgent)) { + return false; + } + } + return true; + }; + + AbstractChosen.default_multiple_text = "Select Some Options"; + + AbstractChosen.default_single_text = "Select an Option"; + + AbstractChosen.default_no_result_text = "No results match"; + + return AbstractChosen; + + })(); + + $ = jQuery; + + $.fn.extend({ + chosen: function(options) { + if (!AbstractChosen.browser_is_supported()) { + return this; + } + return this.each(function(input_field) { + var $this, chosen; + $this = $(this); + chosen = $this.data('chosen'); + if (options === 'destroy' && chosen instanceof Chosen) { + chosen.destroy(); + } else if (!(chosen instanceof Chosen)) { + $this.data('chosen', new Chosen(this, options)); + } + }); + } + }); + + Chosen = (function(_super) { + __extends(Chosen, _super); + + function Chosen() { + _ref = Chosen.__super__.constructor.apply(this, arguments); + return _ref; + } + + Chosen.prototype.setup = function() { + this.form_field_jq = $(this.form_field); + this.current_selectedIndex = this.form_field.selectedIndex; + return this.is_rtl = this.form_field_jq.hasClass("chosen-rtl"); + }; + + Chosen.prototype.set_up_html = function() { + var container_classes, container_props; + container_classes = ["chosen-container"]; + container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single")); + if (this.inherit_select_classes && this.form_field.className) { + container_classes.push(this.form_field.className); + } + if (this.is_rtl) { + container_classes.push("chosen-rtl"); + } + container_props = { + 'class': container_classes.join(' '), + 'style': "width: " + (this.container_width()) + ";", + 'title': this.form_field.title + }; + if (this.form_field.id.length) { + container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen"; + } + this.container = $("
      ", container_props); + if (this.is_multiple) { + this.container.html('
        '); + } else { + this.container.html('
        ' + this.default_text + '
          '); + } + this.form_field_jq.hide().after(this.container); + this.dropdown = this.container.find('div.chosen-drop').first(); + this.search_field = this.container.find('input').first(); + this.search_results = this.container.find('ul.chosen-results').first(); + this.search_field_scale(); + this.search_no_results = this.container.find('li.no-results').first(); + if (this.is_multiple) { + this.search_choices = this.container.find('ul.chosen-choices').first(); + this.search_container = this.container.find('li.search-field').first(); + } else { + this.search_container = this.container.find('div.chosen-search').first(); + this.selected_item = this.container.find('.chosen-single').first(); + } + this.results_build(); + this.set_tab_index(); + return this.set_label_behavior(); + }; + + Chosen.prototype.on_ready = function() { + return this.form_field_jq.trigger("chosen:ready", { + chosen: this + }); + }; + + Chosen.prototype.register_observers = function() { + var _this = this; + this.container.bind('touchstart.chosen', function(evt) { + _this.container_mousedown(evt); + }); + this.container.bind('touchend.chosen', function(evt) { + _this.container_mouseup(evt); + }); + this.container.bind('mousedown.chosen', function(evt) { + _this.container_mousedown(evt); + }); + this.container.bind('mouseup.chosen', function(evt) { + _this.container_mouseup(evt); + }); + this.container.bind('mouseenter.chosen', function(evt) { + _this.mouse_enter(evt); + }); + this.container.bind('mouseleave.chosen', function(evt) { + _this.mouse_leave(evt); + }); + this.search_results.bind('mouseup.chosen', function(evt) { + _this.search_results_mouseup(evt); + }); + this.search_results.bind('mouseover.chosen', function(evt) { + _this.search_results_mouseover(evt); + }); + this.search_results.bind('mouseout.chosen', function(evt) { + _this.search_results_mouseout(evt); + }); + this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) { + _this.search_results_mousewheel(evt); + }); + this.search_results.bind('touchstart.chosen', function(evt) { + _this.search_results_touchstart(evt); + }); + this.search_results.bind('touchmove.chosen', function(evt) { + _this.search_results_touchmove(evt); + }); + this.search_results.bind('touchend.chosen', function(evt) { + _this.search_results_touchend(evt); + }); + this.form_field_jq.bind("chosen:updated.chosen", function(evt) { + _this.results_update_field(evt); + }); + this.form_field_jq.bind("chosen:activate.chosen", function(evt) { + _this.activate_field(evt); + }); + this.form_field_jq.bind("chosen:open.chosen", function(evt) { + _this.container_mousedown(evt); + }); + this.form_field_jq.bind("chosen:close.chosen", function(evt) { + _this.input_blur(evt); + }); + this.search_field.bind('blur.chosen', function(evt) { + _this.input_blur(evt); + }); + this.search_field.bind('keyup.chosen', function(evt) { + _this.keyup_checker(evt); + }); + this.search_field.bind('keydown.chosen', function(evt) { + _this.keydown_checker(evt); + }); + this.search_field.bind('focus.chosen', function(evt) { + _this.input_focus(evt); + }); + this.search_field.bind('cut.chosen', function(evt) { + _this.clipboard_event_checker(evt); + }); + this.search_field.bind('paste.chosen', function(evt) { + _this.clipboard_event_checker(evt); + }); + if (this.is_multiple) { + return this.search_choices.bind('click.chosen', function(evt) { + _this.choices_click(evt); + }); + } else { + return this.container.bind('click.chosen', function(evt) { + evt.preventDefault(); + }); + } + }; + + Chosen.prototype.destroy = function() { + $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action); + if (this.search_field[0].tabIndex) { + this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex; + } + this.container.remove(); + this.form_field_jq.removeData('chosen'); + return this.form_field_jq.show(); + }; + + Chosen.prototype.search_field_disabled = function() { + this.is_disabled = this.form_field_jq[0].disabled; + if (this.is_disabled) { + this.container.addClass('chosen-disabled'); + this.search_field[0].disabled = true; + if (!this.is_multiple) { + this.selected_item.unbind("focus.chosen", this.activate_action); + } + return this.close_field(); + } else { + this.container.removeClass('chosen-disabled'); + this.search_field[0].disabled = false; + if (!this.is_multiple) { + return this.selected_item.bind("focus.chosen", this.activate_action); + } + } + }; + + Chosen.prototype.container_mousedown = function(evt) { + if (!this.is_disabled) { + if (evt && evt.type === "mousedown" && !this.results_showing) { + evt.preventDefault(); + } + if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) { + if (!this.active_field) { + if (this.is_multiple) { + this.search_field.val(""); + } + $(this.container[0].ownerDocument).bind('click.chosen', this.click_test_action); + this.results_show(); + } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) { + evt.preventDefault(); + this.results_toggle(); + } + return this.activate_field(); + } + } + }; + + Chosen.prototype.container_mouseup = function(evt) { + if (evt.target.nodeName === "ABBR" && !this.is_disabled) { + return this.results_reset(evt); + } + }; + + Chosen.prototype.search_results_mousewheel = function(evt) { + var delta; + if (evt.originalEvent) { + delta = evt.originalEvent.deltaY || -evt.originalEvent.wheelDelta || evt.originalEvent.detail; + } + if (delta != null) { + evt.preventDefault(); + if (evt.type === 'DOMMouseScroll') { + delta = delta * 40; + } + return this.search_results.scrollTop(delta + this.search_results.scrollTop()); + } + }; + + Chosen.prototype.blur_test = function(evt) { + if (!this.active_field && this.container.hasClass("chosen-container-active")) { + return this.close_field(); + } + }; + + Chosen.prototype.close_field = function() { + $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action); + this.active_field = false; + this.results_hide(); + this.container.removeClass("chosen-container-active"); + this.clear_backstroke(); + this.show_search_field_default(); + return this.search_field_scale(); + }; + + Chosen.prototype.activate_field = function() { + this.container.addClass("chosen-container-active"); + this.active_field = true; + this.search_field.val(this.search_field.val()); + return this.search_field.focus(); + }; + + Chosen.prototype.test_active_click = function(evt) { + var active_container; + active_container = $(evt.target).closest('.chosen-container'); + if (active_container.length && this.container[0] === active_container[0]) { + return this.active_field = true; + } else { + return this.close_field(); + } + }; + + Chosen.prototype.results_build = function() { + this.parsing = true; + this.selected_option_count = null; + this.results_data = SelectParser.select_to_array(this.form_field); + if (this.is_multiple) { + this.search_choices.find("li.search-choice").remove(); + } else if (!this.is_multiple) { + this.single_set_selected_text(); + if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) { + this.search_field[0].readOnly = true; + this.container.addClass("chosen-container-single-nosearch"); + } else { + this.search_field[0].readOnly = false; + this.container.removeClass("chosen-container-single-nosearch"); + } + } + this.update_results_content(this.results_option_build({ + first: true + })); + this.search_field_disabled(); + this.show_search_field_default(); + this.search_field_scale(); + return this.parsing = false; + }; + + Chosen.prototype.result_do_highlight = function(el) { + var high_bottom, high_top, maxHeight, visible_bottom, visible_top; + if (el.length) { + this.result_clear_highlight(); + this.result_highlight = el; + this.result_highlight.addClass("highlighted"); + maxHeight = parseInt(this.search_results.css("maxHeight"), 10); + visible_top = this.search_results.scrollTop(); + visible_bottom = maxHeight + visible_top; + high_top = this.result_highlight.position().top + this.search_results.scrollTop(); + high_bottom = high_top + this.result_highlight.outerHeight(); + if (high_bottom >= visible_bottom) { + return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0); + } else if (high_top < visible_top) { + return this.search_results.scrollTop(high_top); + } + } + }; + + Chosen.prototype.result_clear_highlight = function() { + if (this.result_highlight) { + this.result_highlight.removeClass("highlighted"); + } + return this.result_highlight = null; + }; + + Chosen.prototype.results_show = function() { + if (this.is_multiple && this.max_selected_options <= this.choices_count()) { + this.form_field_jq.trigger("chosen:maxselected", { + chosen: this + }); + return false; + } + this.container.addClass("chosen-with-drop"); + this.results_showing = true; + this.search_field.focus(); + this.search_field.val(this.search_field.val()); + this.winnow_results(); + return this.form_field_jq.trigger("chosen:showing_dropdown", { + chosen: this + }); + }; + + Chosen.prototype.update_results_content = function(content) { + return this.search_results.html(content); + }; + + Chosen.prototype.results_hide = function() { + if (this.results_showing) { + this.result_clear_highlight(); + this.container.removeClass("chosen-with-drop"); + this.form_field_jq.trigger("chosen:hiding_dropdown", { + chosen: this + }); + } + return this.results_showing = false; + }; + + Chosen.prototype.set_tab_index = function(el) { + var ti; + if (this.form_field.tabIndex) { + ti = this.form_field.tabIndex; + this.form_field.tabIndex = -1; + return this.search_field[0].tabIndex = ti; + } + }; + + Chosen.prototype.set_label_behavior = function() { + var _this = this; + this.form_field_label = this.form_field_jq.parents("label"); + if (!this.form_field_label.length && this.form_field.id.length) { + this.form_field_label = $("label[for='" + this.form_field.id + "']"); + } + if (this.form_field_label.length > 0) { + return this.form_field_label.bind('click.chosen', function(evt) { + if (_this.is_multiple) { + return _this.container_mousedown(evt); + } else { + return _this.activate_field(); + } + }); + } + }; + + Chosen.prototype.show_search_field_default = function() { + if (this.is_multiple && this.choices_count() < 1 && !this.active_field) { + this.search_field.val(this.default_text); + return this.search_field.addClass("default"); + } else { + this.search_field.val(""); + return this.search_field.removeClass("default"); + } + }; + + Chosen.prototype.search_results_mouseup = function(evt) { + var target; + target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); + if (target.length) { + this.result_highlight = target; + this.result_select(evt); + return this.search_field.focus(); + } + }; + + Chosen.prototype.search_results_mouseover = function(evt) { + var target; + target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); + if (target) { + return this.result_do_highlight(target); + } + }; + + Chosen.prototype.search_results_mouseout = function(evt) { + if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) { + return this.result_clear_highlight(); + } + }; + + Chosen.prototype.choice_build = function(item) { + var choice, close_link, + _this = this; + choice = $('
        • ', { + "class": "search-choice" + }).html("" + (this.choice_label(item)) + ""); + if (item.disabled) { + choice.addClass('search-choice-disabled'); + } else { + close_link = $('', { + "class": 'search-choice-close', + 'data-option-array-index': item.array_index + }); + close_link.bind('click.chosen', function(evt) { + return _this.choice_destroy_link_click(evt); + }); + choice.append(close_link); + } + return this.search_container.before(choice); + }; + + Chosen.prototype.choice_destroy_link_click = function(evt) { + evt.preventDefault(); + evt.stopPropagation(); + if (!this.is_disabled) { + return this.choice_destroy($(evt.target)); + } + }; + + Chosen.prototype.choice_destroy = function(link) { + if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) { + this.show_search_field_default(); + if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) { + this.results_hide(); + } + link.parents('li').first().remove(); + return this.search_field_scale(); + } + }; + + Chosen.prototype.results_reset = function() { + this.reset_single_select_options(); + this.form_field.options[0].selected = true; + this.single_set_selected_text(); + this.show_search_field_default(); + this.results_reset_cleanup(); + this.form_field_jq.trigger("change"); + if (this.active_field) { + return this.results_hide(); + } + }; + + Chosen.prototype.results_reset_cleanup = function() { + this.current_selectedIndex = this.form_field.selectedIndex; + return this.selected_item.find("abbr").remove(); + }; + + Chosen.prototype.result_select = function(evt) { + var high, item; + if (this.result_highlight) { + high = this.result_highlight; + this.result_clear_highlight(); + if (this.is_multiple && this.max_selected_options <= this.choices_count()) { + this.form_field_jq.trigger("chosen:maxselected", { + chosen: this + }); + return false; + } + if (this.is_multiple) { + high.removeClass("active-result"); + } else { + this.reset_single_select_options(); + } + item = this.results_data[high[0].getAttribute("data-option-array-index")]; + item.selected = true; + this.form_field.options[item.options_index].selected = true; + this.selected_option_count = null; + if (this.is_multiple) { + this.choice_build(item); + } else { + this.single_set_selected_text(this.choice_label(item)); + } + if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) { + this.results_hide(); + } + this.search_field.val(""); + if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) { + this.form_field_jq.trigger("change", { + 'selected': this.form_field.options[item.options_index].value + }); + } + this.current_selectedIndex = this.form_field.selectedIndex; + evt.preventDefault(); + return this.search_field_scale(); + } + }; + + Chosen.prototype.single_set_selected_text = function(text) { + if (text == null) { + text = this.default_text; + } + if (text === this.default_text) { + this.selected_item.addClass("chosen-default"); + } else { + this.single_deselect_control_build(); + this.selected_item.removeClass("chosen-default"); + } + return this.selected_item.find("span").html(text); + }; + + Chosen.prototype.result_deselect = function(pos) { + var result_data; + result_data = this.results_data[pos]; + if (!this.form_field.options[result_data.options_index].disabled) { + result_data.selected = false; + this.form_field.options[result_data.options_index].selected = false; + this.selected_option_count = null; + this.result_clear_highlight(); + if (this.results_showing) { + this.winnow_results(); + } + this.form_field_jq.trigger("change", { + deselected: this.form_field.options[result_data.options_index].value + }); + this.search_field_scale(); + return true; + } else { + return false; + } + }; + + Chosen.prototype.single_deselect_control_build = function() { + if (!this.allow_single_deselect) { + return; + } + if (!this.selected_item.find("abbr").length) { + this.selected_item.find("span").first().after(""); + } + return this.selected_item.addClass("chosen-single-with-deselect"); + }; + + Chosen.prototype.get_search_text = function() { + if (this.search_field.val() === this.default_text) { + return ""; + } else { + return $('
          ').text($.trim(this.search_field.val())).html(); + } + }; + + Chosen.prototype.winnow_results_set_highlight = function() { + var do_high, selected_results; + selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : []; + do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first(); + if (do_high != null) { + return this.result_do_highlight(do_high); + } + }; + + Chosen.prototype.no_results = function(terms) { + var no_results_html; + no_results_html = $('
        • ' + this.results_none_found + ' ""
        • '); + no_results_html.find("span").first().html(terms); + this.search_results.append(no_results_html); + return this.form_field_jq.trigger("chosen:no_results", { + chosen: this + }); + }; + + Chosen.prototype.no_results_clear = function() { + return this.search_results.find(".no-results").remove(); + }; + + Chosen.prototype.keydown_arrow = function() { + var next_sib; + if (this.results_showing && this.result_highlight) { + next_sib = this.result_highlight.nextAll("li.active-result").first(); + if (next_sib) { + return this.result_do_highlight(next_sib); + } + } else { + return this.results_show(); + } + }; + + Chosen.prototype.keyup_arrow = function() { + var prev_sibs; + if (!this.results_showing && !this.is_multiple) { + return this.results_show(); + } else if (this.result_highlight) { + prev_sibs = this.result_highlight.prevAll("li.active-result"); + if (prev_sibs.length) { + return this.result_do_highlight(prev_sibs.first()); + } else { + if (this.choices_count() > 0) { + this.results_hide(); + } + return this.result_clear_highlight(); + } + } + }; + + Chosen.prototype.keydown_backstroke = function() { + var next_available_destroy; + if (this.pending_backstroke) { + this.choice_destroy(this.pending_backstroke.find("a").first()); + return this.clear_backstroke(); + } else { + next_available_destroy = this.search_container.siblings("li.search-choice").last(); + if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) { + this.pending_backstroke = next_available_destroy; + if (this.single_backstroke_delete) { + return this.keydown_backstroke(); + } else { + return this.pending_backstroke.addClass("search-choice-focus"); + } + } + } + }; + + Chosen.prototype.clear_backstroke = function() { + if (this.pending_backstroke) { + this.pending_backstroke.removeClass("search-choice-focus"); + } + return this.pending_backstroke = null; + }; + + Chosen.prototype.keydown_checker = function(evt) { + var stroke, _ref1; + stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode; + this.search_field_scale(); + if (stroke !== 8 && this.pending_backstroke) { + this.clear_backstroke(); + } + switch (stroke) { + case 8: + this.backstroke_length = this.search_field.val().length; + break; + case 9: + if (this.results_showing && !this.is_multiple) { + this.result_select(evt); + } + this.mouse_on_container = false; + break; + case 13: + if (this.results_showing) { + evt.preventDefault(); + } + break; + case 32: + if (this.disable_search) { + evt.preventDefault(); + } + break; + case 38: + evt.preventDefault(); + this.keyup_arrow(); + break; + case 40: + evt.preventDefault(); + this.keydown_arrow(); + break; + } + }; + + Chosen.prototype.search_field_scale = function() { + var div, f_width, h, style, style_block, styles, w, _i, _len; + if (this.is_multiple) { + h = 0; + w = 0; + style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"; + styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing']; + for (_i = 0, _len = styles.length; _i < _len; _i++) { + style = styles[_i]; + style_block += style + ":" + this.search_field.css(style) + ";"; + } + div = $('
          ', { + 'style': style_block + }); + div.text(this.search_field.val()); + $('body').append(div); + w = div.width() + 25; + div.remove(); + f_width = this.container.outerWidth(); + if (w > f_width - 10) { + w = f_width - 10; + } + return this.search_field.css({ + 'width': w + 'px' + }); + } + }; + + return Chosen; + + })(AbstractChosen); + +}).call(this); diff --git a/sites/all/libraries/chosen/chosen.jquery.min.js b/sites/all/libraries/chosen/chosen.jquery.min.js new file mode 100755 index 0000000000..0b9a19359f --- /dev/null +++ b/sites/all/libraries/chosen/chosen.jquery.min.js @@ -0,0 +1,2 @@ +/* Chosen v1.4.0 | (c) 2011-2015 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ +(function(){var a,AbstractChosen,Chosen,SelectParser,b,c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),title:a.title?a.title:void 0,children:0,disabled:a.disabled,classes:a.className}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,title:a.title?a.title:void 0,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,group_label:null!=b?this.parsed[b].label:null,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"<",">":">",'"':""","'":"'","`":"`"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers(),this.on_ready())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0,this.include_group_label_in_selected=this.options.include_group_label_in_selected||!1},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.choice_label=function(a){return this.include_group_label_in_selected&&null!=a.group_label?""+a.group_label+""+a.html:a.html},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(c.html));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.style.cssText=a.style,c.setAttribute("data-option-array-index",a.array_index),c.innerHTML=a.search_text,a.title&&(c.title=a.title),this.outerHTML(c)):"":""},AbstractChosen.prototype.result_add_group=function(a){var b,c;return a.search_match||a.group_match?a.active_options>0?(b=[],b.push("group-result"),a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.innerHTML=a.search_text,a.title&&(c.title=a.title),this.outerHTML(c)):"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.reset_single_select_options=function(){var a,b,c,d,e;for(d=this.results_data,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.selected?e.push(a.selected=!1):e.push(void 0);return e},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l;for(this.no_results_clear(),d=0,f=this.get_search_text(),a=f.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),i=new RegExp(a,"i"),c=this.get_search_regex(a),l=this.results_data,j=0,k=l.length;k>j;j++)b=l[j],b.search_match=!1,e=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(e=this.results_data[b.group_array_index],0===e.active_options&&e.search_match&&(d+=1),e.active_options+=1),(!b.group||this.group_search)&&(b.search_text=b.group?b.label:b.html,b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(d+=1),b.search_match?(f.length&&(g=b.search_text.search(i),h=b.search_text.substr(0,g+f.length)+""+b.search_text.substr(g+f.length),b.search_text=h.substr(0,g)+""+h.substr(g)),null!=e&&(e.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>d&&f.length?(this.update_results_content(""),this.no_results(f)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.get_search_regex=function(a){var b;return b=this.search_contains?"":"^",new RegExp(b+a,"i")},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.clipboard_event_checker=function(){var a=this;return setTimeout(function(){return a.results_search()},50)},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.prototype.search_results_touchstart=function(a){return this.touch_started=!0,this.search_results_mouseover(a)},AbstractChosen.prototype.search_results_touchmove=function(a){return this.touch_started=!1,this.search_results_mouseout(a)},AbstractChosen.prototype.search_results_touchend=function(a){return this.touch_started?this.search_results_mouseup(a):void 0},AbstractChosen.prototype.outerHTML=function(a){var b;return a.outerHTML?a.outerHTML:(b=document.createElement("div"),b.appendChild(a),b.innerHTML)},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),a=jQuery,a.fn.extend({chosen:function(b){return AbstractChosen.browser_is_supported()?this.each(function(){var c,d;c=a(this),d=c.data("chosen"),"destroy"===b&&d instanceof Chosen?d.destroy():d instanceof Chosen||c.data("chosen",new Chosen(this,b))}):this}}),Chosen=function(c){function Chosen(){return b=Chosen.__super__.constructor.apply(this,arguments)}return d(Chosen,c),Chosen.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field_jq.hasClass("chosen-rtl")},Chosen.prototype.set_up_html=function(){var b,c;return b=["chosen-container"],b.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&b.push(this.form_field.className),this.is_rtl&&b.push("chosen-rtl"),c={"class":b.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(c.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("
          ",c),this.is_multiple?this.container.html('
            '):this.container.html('
            '+this.default_text+'
              '),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior()},Chosen.prototype.on_ready=function(){return this.form_field_jq.trigger("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.bind("touchstart.chosen",function(b){a.container_mousedown(b)}),this.container.bind("touchend.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mousedown.chosen",function(b){a.container_mousedown(b)}),this.container.bind("mouseup.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mouseenter.chosen",function(b){a.mouse_enter(b)}),this.container.bind("mouseleave.chosen",function(b){a.mouse_leave(b)}),this.search_results.bind("mouseup.chosen",function(b){a.search_results_mouseup(b)}),this.search_results.bind("mouseover.chosen",function(b){a.search_results_mouseover(b)}),this.search_results.bind("mouseout.chosen",function(b){a.search_results_mouseout(b)}),this.search_results.bind("mousewheel.chosen DOMMouseScroll.chosen",function(b){a.search_results_mousewheel(b)}),this.search_results.bind("touchstart.chosen",function(b){a.search_results_touchstart(b)}),this.search_results.bind("touchmove.chosen",function(b){a.search_results_touchmove(b)}),this.search_results.bind("touchend.chosen",function(b){a.search_results_touchend(b)}),this.form_field_jq.bind("chosen:updated.chosen",function(b){a.results_update_field(b)}),this.form_field_jq.bind("chosen:activate.chosen",function(b){a.activate_field(b)}),this.form_field_jq.bind("chosen:open.chosen",function(b){a.container_mousedown(b)}),this.form_field_jq.bind("chosen:close.chosen",function(b){a.input_blur(b)}),this.search_field.bind("blur.chosen",function(b){a.input_blur(b)}),this.search_field.bind("keyup.chosen",function(b){a.keyup_checker(b)}),this.search_field.bind("keydown.chosen",function(b){a.keydown_checker(b)}),this.search_field.bind("focus.chosen",function(b){a.input_focus(b)}),this.search_field.bind("cut.chosen",function(b){a.clipboard_event_checker(b)}),this.search_field.bind("paste.chosen",function(b){a.clipboard_event_checker(b)}),this.is_multiple?this.search_choices.bind("click.chosen",function(b){a.choices_click(b)}):this.container.bind("click.chosen",function(a){a.preventDefault()})},Chosen.prototype.destroy=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field_jq[0].disabled,this.is_disabled?(this.container.addClass("chosen-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus.chosen",this.activate_action),this.close_field()):(this.container.removeClass("chosen-disabled"),this.search_field[0].disabled=!1,this.is_multiple?void 0:this.selected_item.bind("focus.chosen",this.activate_action))},Chosen.prototype.container_mousedown=function(b){return this.is_disabled||(b&&"mousedown"===b.type&&!this.results_showing&&b.preventDefault(),null!=b&&a(b.target).hasClass("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!b||a(b.target)[0]!==this.selected_item[0]&&!a(b.target).parents("a.chosen-single").length||(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(this.container[0].ownerDocument).bind("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b;return a.originalEvent&&(b=a.originalEvent.deltaY||-a.originalEvent.wheelDelta||a.originalEvent.detail),null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop(b+this.search_results.scrollTop())):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClass("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},Chosen.prototype.test_active_click=function(b){var c;return c=a(b.target).closest(".chosen-container"),c.length&&this.container[0]===c[0]?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){if(this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight(),b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(f>c)return this.search_results.scrollTop(c)}},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results(),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}))},Chosen.prototype.update_results_content=function(a){return this.search_results.html(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var b=this;return this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=a("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0?this.form_field_label.bind("click.chosen",function(a){return b.is_multiple?b.container_mousedown(a):b.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},Chosen.prototype.search_results_mouseup=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c.length?(this.result_highlight=c,this.result_select(b),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c?this.result_do_highlight(c):void 0},Chosen.prototype.search_results_mouseout=function(b){return a(b.target).hasClass("active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(b){var c,d,e=this;return c=a("
            • ",{"class":"search-choice"}).html(""+this.choice_label(b)+""),b.disabled?c.addClass("search-choice-disabled"):(d=a("",{"class":"search-choice-close","data-option-array-index":b.array_index}),d.bind("click.chosen",function(a){return e.choice_destroy_link_click(a)}),c.append(d)),this.search_container.before(c)},Chosen.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),b.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a(b.target))},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a[0].getAttribute("data-option-array-index"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},Chosen.prototype.result_select=function(a){var b,c;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClass("active-result"):this.reset_single_select_options(),c=this.results_data[b[0].getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(this.choice_label(c)),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[c.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,a.preventDefault(),this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").html(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[b.options_index].value}),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.find("abbr").length||this.selected_item.find("span").first().after(''),this.selected_item.addClass("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return this.search_field.val()===this.default_text?"":a("
              ").text(a.trim(this.search_field.val())).html()},Chosen.prototype.winnow_results_set_highlight=function(){var a,b;return b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first(),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(b){var c;return c=a('
            • '+this.results_none_found+' ""
            • '),c.find("span").first().html(b),this.search_results.append(c),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a;return this.results_showing||this.is_multiple?this.result_highlight?(a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(a=this.search_container.siblings("li.search-choice").last(),a.length&&!a.hasClass("search-choice-disabled")?(this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:this.results_showing&&a.preventDefault();break;case 32:this.disable_search&&a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){for(d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],i=0,j=g.length;j>i;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return b=a("
              ",{style:f}),b.text(this.search_field.val()),a("body").append(b),h=b.width()+25,b.remove(),c=this.container.outerWidth(),h>c-10&&(h=c-10),this.search_field.css({width:h+"px"})}},Chosen}(AbstractChosen)}).call(this); \ No newline at end of file diff --git a/sites/all/libraries/chosen/chosen.min.css b/sites/all/libraries/chosen/chosen.min.css new file mode 100755 index 0000000000..75973432ea --- /dev/null +++ b/sites/all/libraries/chosen/chosen.min.css @@ -0,0 +1,3 @@ +/* Chosen v1.4.0 | (c) 2011-2015 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ + +.chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;zoom:1;*display:inline;-webkit-user-select:none;-moz-user-select:none;user-select:none}.chosen-container *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.chosen-container .chosen-drop{position:absolute;top:100%;left:-9999px;z-index:1010;width:100%;border:1px solid #aaa;border-top:0;background:#fff;box-shadow:0 4px 5px rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{left:0}.chosen-container a{cursor:pointer}.chosen-container .search-choice .group-name,.chosen-container .chosen-single .group-name{margin-right:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:400;color:#999}.chosen-container .search-choice .group-name:after,.chosen-container .chosen-single .group-name:after{content:":";padding-left:2px;vertical-align:top}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:25px;border:1px solid #aaa;border-radius:5px;background-color:#fff;background:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#fff),color-stop(50%,#f6f6f6),color-stop(52%,#eee),color-stop(100%,#f4f4f4));background:-webkit-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-moz-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-o-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background-clip:padding-box;box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-single .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%;background:url(chosen-sprite.png) no-repeat 0 2px}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;background:#fff url(chosen-sprite.png) no-repeat 100% -20px;background:url(chosen-sprite.png) no-repeat 100% -20px;font-size:1em;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-single .chosen-drop{margin-top:-1px;border-radius:0 0 4px 4px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{color:#444;position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;word-wrap:break-word;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#3875d7;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#3875d7),color-stop(90%,#2a62bc));background-image:-webkit-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-moz-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-o-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:linear-gradient(#3875d7 20%,#2a62bc 90%);color:#fff}.chosen-container .chosen-results li.no-results{color:#777;display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;margin:0;padding:0 5px;width:100%;height:auto!important;height:1%;border:1px solid #aaa;background-color:#fff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(#eee 1%,#fff 15%);background-image:-moz-linear-gradient(#eee 1%,#fff 15%);background-image:-o-linear-gradient(#eee 1%,#fff 15%);background-image:linear-gradient(#eee 1%,#fff 15%);cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:0;height:25px;outline:0;border:0!important;background:transparent!important;box-shadow:none;color:#999;font-size:100%;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 5px 3px 0;padding:3px 20px 3px 5px;border:1px solid #aaa;max-width:100%;border-radius:3px;background-color:#eee;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-size:100% 19px;background-repeat:repeat-x;background-clip:padding-box;box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);color:#333;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice span{word-wrap:break-word}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:3px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{background-position:-42px -10px}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #aaa;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#eee),color-stop(80%,#fff));background-image:-webkit-linear-gradient(#eee 20%,#fff 80%);background-image:-moz-linear-gradient(#eee 20%,#fff 80%);background-image:-o-linear-gradient(#eee 20%,#fff 80%);background-image:linear-gradient(#eee 20%,#fff 80%);box-shadow:0 1px 0 #fff inset}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:0;background:transparent}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#222!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl.chosen-container-single-nosearch .chosen-search,.chosen-rtl .chosen-drop{left:9999px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:0}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;background:#fff url(chosen-sprite.png) no-repeat -30px -20px;background:url(chosen-sprite.png) no-repeat -30px -20px;direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:144dpi),only screen and (min-resolution:1.5dppx){.chosen-rtl .chosen-search input[type=text],.chosen-container-single .chosen-single abbr,.chosen-container-single .chosen-single div b,.chosen-container-single .chosen-search input[type=text],.chosen-container-multi .chosen-choices .search-choice .search-choice-close,.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span{background-image:url(chosen-sprite@2x.png)!important;background-size:52px 37px!important;background-repeat:no-repeat!important}} \ No newline at end of file diff --git a/sites/all/libraries/chosen/chosen.proto.js b/sites/all/libraries/chosen/chosen.proto.js new file mode 100755 index 0000000000..a3b7bea1d0 --- /dev/null +++ b/sites/all/libraries/chosen/chosen.proto.js @@ -0,0 +1,1278 @@ +/*! +Chosen, a Select Box Enhancer for jQuery and Prototype +by Patrick Filler for Harvest, http://getharvest.com + +Version 1.4.0 +Full source at https://github.com/harvesthq/chosen +Copyright (c) 2011-2015 Harvest http://getharvest.com + +MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md +This file is generated by `grunt build`, do not edit it by hand. +*/ + +(function() { + var AbstractChosen, SelectParser, _ref, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + SelectParser = (function() { + function SelectParser() { + this.options_index = 0; + this.parsed = []; + } + + SelectParser.prototype.add_node = function(child) { + if (child.nodeName.toUpperCase() === "OPTGROUP") { + return this.add_group(child); + } else { + return this.add_option(child); + } + }; + + SelectParser.prototype.add_group = function(group) { + var group_position, option, _i, _len, _ref, _results; + group_position = this.parsed.length; + this.parsed.push({ + array_index: group_position, + group: true, + label: this.escapeExpression(group.label), + title: group.title ? group.title : void 0, + children: 0, + disabled: group.disabled, + classes: group.className + }); + _ref = group.childNodes; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + _results.push(this.add_option(option, group_position, group.disabled)); + } + return _results; + }; + + SelectParser.prototype.add_option = function(option, group_position, group_disabled) { + if (option.nodeName.toUpperCase() === "OPTION") { + if (option.text !== "") { + if (group_position != null) { + this.parsed[group_position].children += 1; + } + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + value: option.value, + text: option.text, + html: option.innerHTML, + title: option.title ? option.title : void 0, + selected: option.selected, + disabled: group_disabled === true ? group_disabled : option.disabled, + group_array_index: group_position, + group_label: group_position != null ? this.parsed[group_position].label : null, + classes: option.className, + style: option.style.cssText + }); + } else { + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + empty: true + }); + } + return this.options_index += 1; + } + }; + + SelectParser.prototype.escapeExpression = function(text) { + var map, unsafe_chars; + if ((text == null) || text === false) { + return ""; + } + if (!/[\&\<\>\"\'\`]/.test(text)) { + return text; + } + map = { + "<": "<", + ">": ">", + '"': """, + "'": "'", + "`": "`" + }; + unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g; + return text.replace(unsafe_chars, function(chr) { + return map[chr] || "&"; + }); + }; + + return SelectParser; + + })(); + + SelectParser.select_to_array = function(select) { + var child, parser, _i, _len, _ref; + parser = new SelectParser(); + _ref = select.childNodes; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + child = _ref[_i]; + parser.add_node(child); + } + return parser.parsed; + }; + + AbstractChosen = (function() { + function AbstractChosen(form_field, options) { + this.form_field = form_field; + this.options = options != null ? options : {}; + if (!AbstractChosen.browser_is_supported()) { + return; + } + this.is_multiple = this.form_field.multiple; + this.set_default_text(); + this.set_default_values(); + this.setup(); + this.set_up_html(); + this.register_observers(); + this.on_ready(); + } + + AbstractChosen.prototype.set_default_values = function() { + var _this = this; + this.click_test_action = function(evt) { + return _this.test_active_click(evt); + }; + this.activate_action = function(evt) { + return _this.activate_field(evt); + }; + this.active_field = false; + this.mouse_on_container = false; + this.results_showing = false; + this.result_highlighted = null; + this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false; + this.disable_search_threshold = this.options.disable_search_threshold || 0; + this.disable_search = this.options.disable_search || false; + this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true; + this.group_search = this.options.group_search != null ? this.options.group_search : true; + this.search_contains = this.options.search_contains || false; + this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true; + this.max_selected_options = this.options.max_selected_options || Infinity; + this.inherit_select_classes = this.options.inherit_select_classes || false; + this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true; + this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true; + return this.include_group_label_in_selected = this.options.include_group_label_in_selected || false; + }; + + AbstractChosen.prototype.set_default_text = function() { + if (this.form_field.getAttribute("data-placeholder")) { + this.default_text = this.form_field.getAttribute("data-placeholder"); + } else if (this.is_multiple) { + this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text; + } else { + this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text; + } + return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text; + }; + + AbstractChosen.prototype.choice_label = function(item) { + if (this.include_group_label_in_selected && (item.group_label != null)) { + return "" + item.group_label + "" + item.html; + } else { + return item.html; + } + }; + + AbstractChosen.prototype.mouse_enter = function() { + return this.mouse_on_container = true; + }; + + AbstractChosen.prototype.mouse_leave = function() { + return this.mouse_on_container = false; + }; + + AbstractChosen.prototype.input_focus = function(evt) { + var _this = this; + if (this.is_multiple) { + if (!this.active_field) { + return setTimeout((function() { + return _this.container_mousedown(); + }), 50); + } + } else { + if (!this.active_field) { + return this.activate_field(); + } + } + }; + + AbstractChosen.prototype.input_blur = function(evt) { + var _this = this; + if (!this.mouse_on_container) { + this.active_field = false; + return setTimeout((function() { + return _this.blur_test(); + }), 100); + } + }; + + AbstractChosen.prototype.results_option_build = function(options) { + var content, data, _i, _len, _ref; + content = ''; + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + data = _ref[_i]; + if (data.group) { + content += this.result_add_group(data); + } else { + content += this.result_add_option(data); + } + if (options != null ? options.first : void 0) { + if (data.selected && this.is_multiple) { + this.choice_build(data); + } else if (data.selected && !this.is_multiple) { + this.single_set_selected_text(data.html); + } + } + } + return content; + }; + + AbstractChosen.prototype.result_add_option = function(option) { + var classes, option_el; + if (!option.search_match) { + return ''; + } + if (!this.include_option_in_results(option)) { + return ''; + } + classes = []; + if (!option.disabled && !(option.selected && this.is_multiple)) { + classes.push("active-result"); + } + if (option.disabled && !(option.selected && this.is_multiple)) { + classes.push("disabled-result"); + } + if (option.selected) { + classes.push("result-selected"); + } + if (option.group_array_index != null) { + classes.push("group-option"); + } + if (option.classes !== "") { + classes.push(option.classes); + } + option_el = document.createElement("li"); + option_el.className = classes.join(" "); + option_el.style.cssText = option.style; + option_el.setAttribute("data-option-array-index", option.array_index); + option_el.innerHTML = option.search_text; + if (option.title) { + option_el.title = option.title; + } + return this.outerHTML(option_el); + }; + + AbstractChosen.prototype.result_add_group = function(group) { + var classes, group_el; + if (!(group.search_match || group.group_match)) { + return ''; + } + if (!(group.active_options > 0)) { + return ''; + } + classes = []; + classes.push("group-result"); + if (group.classes) { + classes.push(group.classes); + } + group_el = document.createElement("li"); + group_el.className = classes.join(" "); + group_el.innerHTML = group.search_text; + if (group.title) { + group_el.title = group.title; + } + return this.outerHTML(group_el); + }; + + AbstractChosen.prototype.results_update_field = function() { + this.set_default_text(); + if (!this.is_multiple) { + this.results_reset_cleanup(); + } + this.result_clear_highlight(); + this.results_build(); + if (this.results_showing) { + return this.winnow_results(); + } + }; + + AbstractChosen.prototype.reset_single_select_options = function() { + var result, _i, _len, _ref, _results; + _ref = this.results_data; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + result = _ref[_i]; + if (result.selected) { + _results.push(result.selected = false); + } else { + _results.push(void 0); + } + } + return _results; + }; + + AbstractChosen.prototype.results_toggle = function() { + if (this.results_showing) { + return this.results_hide(); + } else { + return this.results_show(); + } + }; + + AbstractChosen.prototype.results_search = function(evt) { + if (this.results_showing) { + return this.winnow_results(); + } else { + return this.results_show(); + } + }; + + AbstractChosen.prototype.winnow_results = function() { + var escapedSearchText, option, regex, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref; + this.no_results_clear(); + results = 0; + searchText = this.get_search_text(); + escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + zregex = new RegExp(escapedSearchText, 'i'); + regex = this.get_search_regex(escapedSearchText); + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + option.search_match = false; + results_group = null; + if (this.include_option_in_results(option)) { + if (option.group) { + option.group_match = false; + option.active_options = 0; + } + if ((option.group_array_index != null) && this.results_data[option.group_array_index]) { + results_group = this.results_data[option.group_array_index]; + if (results_group.active_options === 0 && results_group.search_match) { + results += 1; + } + results_group.active_options += 1; + } + if (!(option.group && !this.group_search)) { + option.search_text = option.group ? option.label : option.html; + option.search_match = this.search_string_match(option.search_text, regex); + if (option.search_match && !option.group) { + results += 1; + } + if (option.search_match) { + if (searchText.length) { + startpos = option.search_text.search(zregex); + text = option.search_text.substr(0, startpos + searchText.length) + '' + option.search_text.substr(startpos + searchText.length); + option.search_text = text.substr(0, startpos) + '' + text.substr(startpos); + } + if (results_group != null) { + results_group.group_match = true; + } + } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) { + option.search_match = true; + } + } + } + } + this.result_clear_highlight(); + if (results < 1 && searchText.length) { + this.update_results_content(""); + return this.no_results(searchText); + } else { + this.update_results_content(this.results_option_build()); + return this.winnow_results_set_highlight(); + } + }; + + AbstractChosen.prototype.get_search_regex = function(escaped_search_string) { + var regex_anchor; + regex_anchor = this.search_contains ? "" : "^"; + return new RegExp(regex_anchor + escaped_search_string, 'i'); + }; + + AbstractChosen.prototype.search_string_match = function(search_string, regex) { + var part, parts, _i, _len; + if (regex.test(search_string)) { + return true; + } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) { + parts = search_string.replace(/\[|\]/g, "").split(" "); + if (parts.length) { + for (_i = 0, _len = parts.length; _i < _len; _i++) { + part = parts[_i]; + if (regex.test(part)) { + return true; + } + } + } + } + }; + + AbstractChosen.prototype.choices_count = function() { + var option, _i, _len, _ref; + if (this.selected_option_count != null) { + return this.selected_option_count; + } + this.selected_option_count = 0; + _ref = this.form_field.options; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + if (option.selected) { + this.selected_option_count += 1; + } + } + return this.selected_option_count; + }; + + AbstractChosen.prototype.choices_click = function(evt) { + evt.preventDefault(); + if (!(this.results_showing || this.is_disabled)) { + return this.results_show(); + } + }; + + AbstractChosen.prototype.keyup_checker = function(evt) { + var stroke, _ref; + stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; + this.search_field_scale(); + switch (stroke) { + case 8: + if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) { + return this.keydown_backstroke(); + } else if (!this.pending_backstroke) { + this.result_clear_highlight(); + return this.results_search(); + } + break; + case 13: + evt.preventDefault(); + if (this.results_showing) { + return this.result_select(evt); + } + break; + case 27: + if (this.results_showing) { + this.results_hide(); + } + return true; + case 9: + case 38: + case 40: + case 16: + case 91: + case 17: + break; + default: + return this.results_search(); + } + }; + + AbstractChosen.prototype.clipboard_event_checker = function(evt) { + var _this = this; + return setTimeout((function() { + return _this.results_search(); + }), 50); + }; + + AbstractChosen.prototype.container_width = function() { + if (this.options.width != null) { + return this.options.width; + } else { + return "" + this.form_field.offsetWidth + "px"; + } + }; + + AbstractChosen.prototype.include_option_in_results = function(option) { + if (this.is_multiple && (!this.display_selected_options && option.selected)) { + return false; + } + if (!this.display_disabled_options && option.disabled) { + return false; + } + if (option.empty) { + return false; + } + return true; + }; + + AbstractChosen.prototype.search_results_touchstart = function(evt) { + this.touch_started = true; + return this.search_results_mouseover(evt); + }; + + AbstractChosen.prototype.search_results_touchmove = function(evt) { + this.touch_started = false; + return this.search_results_mouseout(evt); + }; + + AbstractChosen.prototype.search_results_touchend = function(evt) { + if (this.touch_started) { + return this.search_results_mouseup(evt); + } + }; + + AbstractChosen.prototype.outerHTML = function(element) { + var tmp; + if (element.outerHTML) { + return element.outerHTML; + } + tmp = document.createElement("div"); + tmp.appendChild(element); + return tmp.innerHTML; + }; + + AbstractChosen.browser_is_supported = function() { + if (window.navigator.appName === "Microsoft Internet Explorer") { + return document.documentMode >= 8; + } + if (/iP(od|hone)/i.test(window.navigator.userAgent)) { + return false; + } + if (/Android/i.test(window.navigator.userAgent)) { + if (/Mobile/i.test(window.navigator.userAgent)) { + return false; + } + } + return true; + }; + + AbstractChosen.default_multiple_text = "Select Some Options"; + + AbstractChosen.default_single_text = "Select an Option"; + + AbstractChosen.default_no_result_text = "No results match"; + + return AbstractChosen; + + })(); + + this.Chosen = (function(_super) { + __extends(Chosen, _super); + + function Chosen() { + _ref = Chosen.__super__.constructor.apply(this, arguments); + return _ref; + } + + Chosen.prototype.setup = function() { + this.current_selectedIndex = this.form_field.selectedIndex; + return this.is_rtl = this.form_field.hasClassName("chosen-rtl"); + }; + + Chosen.prototype.set_default_values = function() { + Chosen.__super__.set_default_values.call(this); + this.single_temp = new Template('#{default}
                '); + this.multi_temp = new Template('
                  '); + return this.no_results_temp = new Template('
                • ' + this.results_none_found + ' "#{terms}"
                • '); + }; + + Chosen.prototype.set_up_html = function() { + var container_classes, container_props; + container_classes = ["chosen-container"]; + container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single")); + if (this.inherit_select_classes && this.form_field.className) { + container_classes.push(this.form_field.className); + } + if (this.is_rtl) { + container_classes.push("chosen-rtl"); + } + container_props = { + 'class': container_classes.join(' '), + 'style': "width: " + (this.container_width()) + ";", + 'title': this.form_field.title + }; + if (this.form_field.id.length) { + container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen"; + } + this.container = this.is_multiple ? new Element('div', container_props).update(this.multi_temp.evaluate({ + "default": this.default_text + })) : new Element('div', container_props).update(this.single_temp.evaluate({ + "default": this.default_text + })); + this.form_field.hide().insert({ + after: this.container + }); + this.dropdown = this.container.down('div.chosen-drop'); + this.search_field = this.container.down('input'); + this.search_results = this.container.down('ul.chosen-results'); + this.search_field_scale(); + this.search_no_results = this.container.down('li.no-results'); + if (this.is_multiple) { + this.search_choices = this.container.down('ul.chosen-choices'); + this.search_container = this.container.down('li.search-field'); + } else { + this.search_container = this.container.down('div.chosen-search'); + this.selected_item = this.container.down('.chosen-single'); + } + this.results_build(); + this.set_tab_index(); + return this.set_label_behavior(); + }; + + Chosen.prototype.on_ready = function() { + return this.form_field.fire("chosen:ready", { + chosen: this + }); + }; + + Chosen.prototype.register_observers = function() { + var _this = this; + this.container.observe("touchstart", function(evt) { + return _this.container_mousedown(evt); + }); + this.container.observe("touchend", function(evt) { + return _this.container_mouseup(evt); + }); + this.container.observe("mousedown", function(evt) { + return _this.container_mousedown(evt); + }); + this.container.observe("mouseup", function(evt) { + return _this.container_mouseup(evt); + }); + this.container.observe("mouseenter", function(evt) { + return _this.mouse_enter(evt); + }); + this.container.observe("mouseleave", function(evt) { + return _this.mouse_leave(evt); + }); + this.search_results.observe("mouseup", function(evt) { + return _this.search_results_mouseup(evt); + }); + this.search_results.observe("mouseover", function(evt) { + return _this.search_results_mouseover(evt); + }); + this.search_results.observe("mouseout", function(evt) { + return _this.search_results_mouseout(evt); + }); + this.search_results.observe("mousewheel", function(evt) { + return _this.search_results_mousewheel(evt); + }); + this.search_results.observe("DOMMouseScroll", function(evt) { + return _this.search_results_mousewheel(evt); + }); + this.search_results.observe("touchstart", function(evt) { + return _this.search_results_touchstart(evt); + }); + this.search_results.observe("touchmove", function(evt) { + return _this.search_results_touchmove(evt); + }); + this.search_results.observe("touchend", function(evt) { + return _this.search_results_touchend(evt); + }); + this.form_field.observe("chosen:updated", function(evt) { + return _this.results_update_field(evt); + }); + this.form_field.observe("chosen:activate", function(evt) { + return _this.activate_field(evt); + }); + this.form_field.observe("chosen:open", function(evt) { + return _this.container_mousedown(evt); + }); + this.form_field.observe("chosen:close", function(evt) { + return _this.input_blur(evt); + }); + this.search_field.observe("blur", function(evt) { + return _this.input_blur(evt); + }); + this.search_field.observe("keyup", function(evt) { + return _this.keyup_checker(evt); + }); + this.search_field.observe("keydown", function(evt) { + return _this.keydown_checker(evt); + }); + this.search_field.observe("focus", function(evt) { + return _this.input_focus(evt); + }); + this.search_field.observe("cut", function(evt) { + return _this.clipboard_event_checker(evt); + }); + this.search_field.observe("paste", function(evt) { + return _this.clipboard_event_checker(evt); + }); + if (this.is_multiple) { + return this.search_choices.observe("click", function(evt) { + return _this.choices_click(evt); + }); + } else { + return this.container.observe("click", function(evt) { + return evt.preventDefault(); + }); + } + }; + + Chosen.prototype.destroy = function() { + this.container.ownerDocument.stopObserving("click", this.click_test_action); + this.form_field.stopObserving(); + this.container.stopObserving(); + this.search_results.stopObserving(); + this.search_field.stopObserving(); + if (this.form_field_label != null) { + this.form_field_label.stopObserving(); + } + if (this.is_multiple) { + this.search_choices.stopObserving(); + this.container.select(".search-choice-close").each(function(choice) { + return choice.stopObserving(); + }); + } else { + this.selected_item.stopObserving(); + } + if (this.search_field.tabIndex) { + this.form_field.tabIndex = this.search_field.tabIndex; + } + this.container.remove(); + return this.form_field.show(); + }; + + Chosen.prototype.search_field_disabled = function() { + this.is_disabled = this.form_field.disabled; + if (this.is_disabled) { + this.container.addClassName('chosen-disabled'); + this.search_field.disabled = true; + if (!this.is_multiple) { + this.selected_item.stopObserving("focus", this.activate_action); + } + return this.close_field(); + } else { + this.container.removeClassName('chosen-disabled'); + this.search_field.disabled = false; + if (!this.is_multiple) { + return this.selected_item.observe("focus", this.activate_action); + } + } + }; + + Chosen.prototype.container_mousedown = function(evt) { + if (!this.is_disabled) { + if (evt && evt.type === "mousedown" && !this.results_showing) { + evt.stop(); + } + if (!((evt != null) && evt.target.hasClassName("search-choice-close"))) { + if (!this.active_field) { + if (this.is_multiple) { + this.search_field.clear(); + } + this.container.ownerDocument.observe("click", this.click_test_action); + this.results_show(); + } else if (!this.is_multiple && evt && (evt.target === this.selected_item || evt.target.up("a.chosen-single"))) { + this.results_toggle(); + } + return this.activate_field(); + } + } + }; + + Chosen.prototype.container_mouseup = function(evt) { + if (evt.target.nodeName === "ABBR" && !this.is_disabled) { + return this.results_reset(evt); + } + }; + + Chosen.prototype.search_results_mousewheel = function(evt) { + var delta; + delta = evt.deltaY || -evt.wheelDelta || evt.detail; + if (delta != null) { + evt.preventDefault(); + if (evt.type === 'DOMMouseScroll') { + delta = delta * 40; + } + return this.search_results.scrollTop = delta + this.search_results.scrollTop; + } + }; + + Chosen.prototype.blur_test = function(evt) { + if (!this.active_field && this.container.hasClassName("chosen-container-active")) { + return this.close_field(); + } + }; + + Chosen.prototype.close_field = function() { + this.container.ownerDocument.stopObserving("click", this.click_test_action); + this.active_field = false; + this.results_hide(); + this.container.removeClassName("chosen-container-active"); + this.clear_backstroke(); + this.show_search_field_default(); + return this.search_field_scale(); + }; + + Chosen.prototype.activate_field = function() { + this.container.addClassName("chosen-container-active"); + this.active_field = true; + this.search_field.value = this.search_field.value; + return this.search_field.focus(); + }; + + Chosen.prototype.test_active_click = function(evt) { + if (evt.target.up('.chosen-container') === this.container) { + return this.active_field = true; + } else { + return this.close_field(); + } + }; + + Chosen.prototype.results_build = function() { + this.parsing = true; + this.selected_option_count = null; + this.results_data = SelectParser.select_to_array(this.form_field); + if (this.is_multiple) { + this.search_choices.select("li.search-choice").invoke("remove"); + } else if (!this.is_multiple) { + this.single_set_selected_text(); + if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) { + this.search_field.readOnly = true; + this.container.addClassName("chosen-container-single-nosearch"); + } else { + this.search_field.readOnly = false; + this.container.removeClassName("chosen-container-single-nosearch"); + } + } + this.update_results_content(this.results_option_build({ + first: true + })); + this.search_field_disabled(); + this.show_search_field_default(); + this.search_field_scale(); + return this.parsing = false; + }; + + Chosen.prototype.result_do_highlight = function(el) { + var high_bottom, high_top, maxHeight, visible_bottom, visible_top; + this.result_clear_highlight(); + this.result_highlight = el; + this.result_highlight.addClassName("highlighted"); + maxHeight = parseInt(this.search_results.getStyle('maxHeight'), 10); + visible_top = this.search_results.scrollTop; + visible_bottom = maxHeight + visible_top; + high_top = this.result_highlight.positionedOffset().top; + high_bottom = high_top + this.result_highlight.getHeight(); + if (high_bottom >= visible_bottom) { + return this.search_results.scrollTop = (high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0; + } else if (high_top < visible_top) { + return this.search_results.scrollTop = high_top; + } + }; + + Chosen.prototype.result_clear_highlight = function() { + if (this.result_highlight) { + this.result_highlight.removeClassName('highlighted'); + } + return this.result_highlight = null; + }; + + Chosen.prototype.results_show = function() { + if (this.is_multiple && this.max_selected_options <= this.choices_count()) { + this.form_field.fire("chosen:maxselected", { + chosen: this + }); + return false; + } + this.container.addClassName("chosen-with-drop"); + this.results_showing = true; + this.search_field.focus(); + this.search_field.value = this.search_field.value; + this.winnow_results(); + return this.form_field.fire("chosen:showing_dropdown", { + chosen: this + }); + }; + + Chosen.prototype.update_results_content = function(content) { + return this.search_results.update(content); + }; + + Chosen.prototype.results_hide = function() { + if (this.results_showing) { + this.result_clear_highlight(); + this.container.removeClassName("chosen-with-drop"); + this.form_field.fire("chosen:hiding_dropdown", { + chosen: this + }); + } + return this.results_showing = false; + }; + + Chosen.prototype.set_tab_index = function(el) { + var ti; + if (this.form_field.tabIndex) { + ti = this.form_field.tabIndex; + this.form_field.tabIndex = -1; + return this.search_field.tabIndex = ti; + } + }; + + Chosen.prototype.set_label_behavior = function() { + var _this = this; + this.form_field_label = this.form_field.up("label"); + if (this.form_field_label == null) { + this.form_field_label = $$("label[for='" + this.form_field.id + "']").first(); + } + if (this.form_field_label != null) { + return this.form_field_label.observe("click", function(evt) { + if (_this.is_multiple) { + return _this.container_mousedown(evt); + } else { + return _this.activate_field(); + } + }); + } + }; + + Chosen.prototype.show_search_field_default = function() { + if (this.is_multiple && this.choices_count() < 1 && !this.active_field) { + this.search_field.value = this.default_text; + return this.search_field.addClassName("default"); + } else { + this.search_field.value = ""; + return this.search_field.removeClassName("default"); + } + }; + + Chosen.prototype.search_results_mouseup = function(evt) { + var target; + target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result"); + if (target) { + this.result_highlight = target; + this.result_select(evt); + return this.search_field.focus(); + } + }; + + Chosen.prototype.search_results_mouseover = function(evt) { + var target; + target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result"); + if (target) { + return this.result_do_highlight(target); + } + }; + + Chosen.prototype.search_results_mouseout = function(evt) { + if (evt.target.hasClassName('active-result') || evt.target.up('.active-result')) { + return this.result_clear_highlight(); + } + }; + + Chosen.prototype.choice_build = function(item) { + var choice, close_link, + _this = this; + choice = new Element('li', { + "class": "search-choice" + }).update("" + (this.choice_label(item)) + ""); + if (item.disabled) { + choice.addClassName('search-choice-disabled'); + } else { + close_link = new Element('a', { + href: '#', + "class": 'search-choice-close', + rel: item.array_index + }); + close_link.observe("click", function(evt) { + return _this.choice_destroy_link_click(evt); + }); + choice.insert(close_link); + } + return this.search_container.insert({ + before: choice + }); + }; + + Chosen.prototype.choice_destroy_link_click = function(evt) { + evt.preventDefault(); + evt.stopPropagation(); + if (!this.is_disabled) { + return this.choice_destroy(evt.target); + } + }; + + Chosen.prototype.choice_destroy = function(link) { + if (this.result_deselect(link.readAttribute("rel"))) { + this.show_search_field_default(); + if (this.is_multiple && this.choices_count() > 0 && this.search_field.value.length < 1) { + this.results_hide(); + } + link.up('li').remove(); + return this.search_field_scale(); + } + }; + + Chosen.prototype.results_reset = function() { + this.reset_single_select_options(); + this.form_field.options[0].selected = true; + this.single_set_selected_text(); + this.show_search_field_default(); + this.results_reset_cleanup(); + if (typeof Event.simulate === 'function') { + this.form_field.simulate("change"); + } + if (this.active_field) { + return this.results_hide(); + } + }; + + Chosen.prototype.results_reset_cleanup = function() { + var deselect_trigger; + this.current_selectedIndex = this.form_field.selectedIndex; + deselect_trigger = this.selected_item.down("abbr"); + if (deselect_trigger) { + return deselect_trigger.remove(); + } + }; + + Chosen.prototype.result_select = function(evt) { + var high, item; + if (this.result_highlight) { + high = this.result_highlight; + this.result_clear_highlight(); + if (this.is_multiple && this.max_selected_options <= this.choices_count()) { + this.form_field.fire("chosen:maxselected", { + chosen: this + }); + return false; + } + if (this.is_multiple) { + high.removeClassName("active-result"); + } else { + this.reset_single_select_options(); + } + high.addClassName("result-selected"); + item = this.results_data[high.getAttribute("data-option-array-index")]; + item.selected = true; + this.form_field.options[item.options_index].selected = true; + this.selected_option_count = null; + if (this.is_multiple) { + this.choice_build(item); + } else { + this.single_set_selected_text(this.choice_label(item)); + } + if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) { + this.results_hide(); + } + this.search_field.value = ""; + if (typeof Event.simulate === 'function' && (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex)) { + this.form_field.simulate("change"); + } + this.current_selectedIndex = this.form_field.selectedIndex; + evt.preventDefault(); + return this.search_field_scale(); + } + }; + + Chosen.prototype.single_set_selected_text = function(text) { + if (text == null) { + text = this.default_text; + } + if (text === this.default_text) { + this.selected_item.addClassName("chosen-default"); + } else { + this.single_deselect_control_build(); + this.selected_item.removeClassName("chosen-default"); + } + return this.selected_item.down("span").update(text); + }; + + Chosen.prototype.result_deselect = function(pos) { + var result_data; + result_data = this.results_data[pos]; + if (!this.form_field.options[result_data.options_index].disabled) { + result_data.selected = false; + this.form_field.options[result_data.options_index].selected = false; + this.selected_option_count = null; + this.result_clear_highlight(); + if (this.results_showing) { + this.winnow_results(); + } + if (typeof Event.simulate === 'function') { + this.form_field.simulate("change"); + } + this.search_field_scale(); + return true; + } else { + return false; + } + }; + + Chosen.prototype.single_deselect_control_build = function() { + if (!this.allow_single_deselect) { + return; + } + if (!this.selected_item.down("abbr")) { + this.selected_item.down("span").insert({ + after: "" + }); + } + return this.selected_item.addClassName("chosen-single-with-deselect"); + }; + + Chosen.prototype.get_search_text = function() { + if (this.search_field.value === this.default_text) { + return ""; + } else { + return this.search_field.value.strip().escapeHTML(); + } + }; + + Chosen.prototype.winnow_results_set_highlight = function() { + var do_high; + if (!this.is_multiple) { + do_high = this.search_results.down(".result-selected.active-result"); + } + if (do_high == null) { + do_high = this.search_results.down(".active-result"); + } + if (do_high != null) { + return this.result_do_highlight(do_high); + } + }; + + Chosen.prototype.no_results = function(terms) { + this.search_results.insert(this.no_results_temp.evaluate({ + terms: terms + })); + return this.form_field.fire("chosen:no_results", { + chosen: this + }); + }; + + Chosen.prototype.no_results_clear = function() { + var nr, _results; + nr = null; + _results = []; + while (nr = this.search_results.down(".no-results")) { + _results.push(nr.remove()); + } + return _results; + }; + + Chosen.prototype.keydown_arrow = function() { + var next_sib; + if (this.results_showing && this.result_highlight) { + next_sib = this.result_highlight.next('.active-result'); + if (next_sib) { + return this.result_do_highlight(next_sib); + } + } else { + return this.results_show(); + } + }; + + Chosen.prototype.keyup_arrow = function() { + var actives, prevs, sibs; + if (!this.results_showing && !this.is_multiple) { + return this.results_show(); + } else if (this.result_highlight) { + sibs = this.result_highlight.previousSiblings(); + actives = this.search_results.select("li.active-result"); + prevs = sibs.intersect(actives); + if (prevs.length) { + return this.result_do_highlight(prevs.first()); + } else { + if (this.choices_count() > 0) { + this.results_hide(); + } + return this.result_clear_highlight(); + } + } + }; + + Chosen.prototype.keydown_backstroke = function() { + var next_available_destroy; + if (this.pending_backstroke) { + this.choice_destroy(this.pending_backstroke.down("a")); + return this.clear_backstroke(); + } else { + next_available_destroy = this.search_container.siblings().last(); + if (next_available_destroy && next_available_destroy.hasClassName("search-choice") && !next_available_destroy.hasClassName("search-choice-disabled")) { + this.pending_backstroke = next_available_destroy; + if (this.pending_backstroke) { + this.pending_backstroke.addClassName("search-choice-focus"); + } + if (this.single_backstroke_delete) { + return this.keydown_backstroke(); + } else { + return this.pending_backstroke.addClassName("search-choice-focus"); + } + } + } + }; + + Chosen.prototype.clear_backstroke = function() { + if (this.pending_backstroke) { + this.pending_backstroke.removeClassName("search-choice-focus"); + } + return this.pending_backstroke = null; + }; + + Chosen.prototype.keydown_checker = function(evt) { + var stroke, _ref1; + stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode; + this.search_field_scale(); + if (stroke !== 8 && this.pending_backstroke) { + this.clear_backstroke(); + } + switch (stroke) { + case 8: + this.backstroke_length = this.search_field.value.length; + break; + case 9: + if (this.results_showing && !this.is_multiple) { + this.result_select(evt); + } + this.mouse_on_container = false; + break; + case 13: + if (this.results_showing) { + evt.preventDefault(); + } + break; + case 32: + if (this.disable_search) { + evt.preventDefault(); + } + break; + case 38: + evt.preventDefault(); + this.keyup_arrow(); + break; + case 40: + evt.preventDefault(); + this.keydown_arrow(); + break; + } + }; + + Chosen.prototype.search_field_scale = function() { + var div, f_width, h, style, style_block, styles, w, _i, _len; + if (this.is_multiple) { + h = 0; + w = 0; + style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"; + styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing']; + for (_i = 0, _len = styles.length; _i < _len; _i++) { + style = styles[_i]; + style_block += style + ":" + this.search_field.getStyle(style) + ";"; + } + div = new Element('div', { + 'style': style_block + }).update(this.search_field.value.escapeHTML()); + document.body.appendChild(div); + w = Element.measure(div, 'width') + 25; + div.remove(); + f_width = this.container.getWidth(); + if (w > f_width - 10) { + w = f_width - 10; + } + return this.search_field.setStyle({ + 'width': w + 'px' + }); + } + }; + + return Chosen; + + })(AbstractChosen); + +}).call(this); diff --git a/sites/all/libraries/chosen/chosen.proto.min.js b/sites/all/libraries/chosen/chosen.proto.min.js new file mode 100755 index 0000000000..f4342f04c3 --- /dev/null +++ b/sites/all/libraries/chosen/chosen.proto.min.js @@ -0,0 +1,2 @@ +/* Chosen v1.4.0 | (c) 2011-2015 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ +(function(){var AbstractChosen,SelectParser,a,b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),title:a.title?a.title:void 0,children:0,disabled:a.disabled,classes:a.className}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,title:a.title?a.title:void 0,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,group_label:null!=b?this.parsed[b].label:null,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"<",">":">",'"':""","'":"'","`":"`"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers(),this.on_ready())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0,this.include_group_label_in_selected=this.options.include_group_label_in_selected||!1},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.choice_label=function(a){return this.include_group_label_in_selected&&null!=a.group_label?""+a.group_label+""+a.html:a.html},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(c.html));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.style.cssText=a.style,c.setAttribute("data-option-array-index",a.array_index),c.innerHTML=a.search_text,a.title&&(c.title=a.title),this.outerHTML(c)):"":""},AbstractChosen.prototype.result_add_group=function(a){var b,c;return a.search_match||a.group_match?a.active_options>0?(b=[],b.push("group-result"),a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.innerHTML=a.search_text,a.title&&(c.title=a.title),this.outerHTML(c)):"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.reset_single_select_options=function(){var a,b,c,d,e;for(d=this.results_data,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.selected?e.push(a.selected=!1):e.push(void 0);return e},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l;for(this.no_results_clear(),d=0,f=this.get_search_text(),a=f.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),i=new RegExp(a,"i"),c=this.get_search_regex(a),l=this.results_data,j=0,k=l.length;k>j;j++)b=l[j],b.search_match=!1,e=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(e=this.results_data[b.group_array_index],0===e.active_options&&e.search_match&&(d+=1),e.active_options+=1),(!b.group||this.group_search)&&(b.search_text=b.group?b.label:b.html,b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(d+=1),b.search_match?(f.length&&(g=b.search_text.search(i),h=b.search_text.substr(0,g+f.length)+"
                  "+b.search_text.substr(g+f.length),b.search_text=h.substr(0,g)+""+h.substr(g)),null!=e&&(e.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>d&&f.length?(this.update_results_content(""),this.no_results(f)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.get_search_regex=function(a){var b;return b=this.search_contains?"":"^",new RegExp(b+a,"i")},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.clipboard_event_checker=function(){var a=this;return setTimeout(function(){return a.results_search()},50)},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.prototype.search_results_touchstart=function(a){return this.touch_started=!0,this.search_results_mouseover(a)},AbstractChosen.prototype.search_results_touchmove=function(a){return this.touch_started=!1,this.search_results_mouseout(a)},AbstractChosen.prototype.search_results_touchend=function(a){return this.touch_started?this.search_results_mouseup(a):void 0},AbstractChosen.prototype.outerHTML=function(a){var b;return a.outerHTML?a.outerHTML:(b=document.createElement("div"),b.appendChild(a),b.innerHTML)},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),this.Chosen=function(b){function Chosen(){return a=Chosen.__super__.constructor.apply(this,arguments)}return c(Chosen,b),Chosen.prototype.setup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field.hasClassName("chosen-rtl")},Chosen.prototype.set_default_values=function(){return Chosen.__super__.set_default_values.call(this),this.single_temp=new Template('#{default}
                    '),this.multi_temp=new Template('
                      '),this.no_results_temp=new Template('
                    • '+this.results_none_found+' "#{terms}"
                    • ')},Chosen.prototype.set_up_html=function(){var a,b;return a=["chosen-container"],a.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&a.push(this.form_field.className),this.is_rtl&&a.push("chosen-rtl"),b={"class":a.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(b.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=this.is_multiple?new Element("div",b).update(this.multi_temp.evaluate({"default":this.default_text})):new Element("div",b).update(this.single_temp.evaluate({"default":this.default_text})),this.form_field.hide().insert({after:this.container}),this.dropdown=this.container.down("div.chosen-drop"),this.search_field=this.container.down("input"),this.search_results=this.container.down("ul.chosen-results"),this.search_field_scale(),this.search_no_results=this.container.down("li.no-results"),this.is_multiple?(this.search_choices=this.container.down("ul.chosen-choices"),this.search_container=this.container.down("li.search-field")):(this.search_container=this.container.down("div.chosen-search"),this.selected_item=this.container.down(".chosen-single")),this.results_build(),this.set_tab_index(),this.set_label_behavior()},Chosen.prototype.on_ready=function(){return this.form_field.fire("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.observe("touchstart",function(b){return a.container_mousedown(b)}),this.container.observe("touchend",function(b){return a.container_mouseup(b)}),this.container.observe("mousedown",function(b){return a.container_mousedown(b)}),this.container.observe("mouseup",function(b){return a.container_mouseup(b)}),this.container.observe("mouseenter",function(b){return a.mouse_enter(b)}),this.container.observe("mouseleave",function(b){return a.mouse_leave(b)}),this.search_results.observe("mouseup",function(b){return a.search_results_mouseup(b)}),this.search_results.observe("mouseover",function(b){return a.search_results_mouseover(b)}),this.search_results.observe("mouseout",function(b){return a.search_results_mouseout(b)}),this.search_results.observe("mousewheel",function(b){return a.search_results_mousewheel(b)}),this.search_results.observe("DOMMouseScroll",function(b){return a.search_results_mousewheel(b)}),this.search_results.observe("touchstart",function(b){return a.search_results_touchstart(b)}),this.search_results.observe("touchmove",function(b){return a.search_results_touchmove(b)}),this.search_results.observe("touchend",function(b){return a.search_results_touchend(b)}),this.form_field.observe("chosen:updated",function(b){return a.results_update_field(b)}),this.form_field.observe("chosen:activate",function(b){return a.activate_field(b)}),this.form_field.observe("chosen:open",function(b){return a.container_mousedown(b)}),this.form_field.observe("chosen:close",function(b){return a.input_blur(b)}),this.search_field.observe("blur",function(b){return a.input_blur(b)}),this.search_field.observe("keyup",function(b){return a.keyup_checker(b)}),this.search_field.observe("keydown",function(b){return a.keydown_checker(b)}),this.search_field.observe("focus",function(b){return a.input_focus(b)}),this.search_field.observe("cut",function(b){return a.clipboard_event_checker(b)}),this.search_field.observe("paste",function(b){return a.clipboard_event_checker(b)}),this.is_multiple?this.search_choices.observe("click",function(b){return a.choices_click(b)}):this.container.observe("click",function(a){return a.preventDefault()})},Chosen.prototype.destroy=function(){return this.container.ownerDocument.stopObserving("click",this.click_test_action),this.form_field.stopObserving(),this.container.stopObserving(),this.search_results.stopObserving(),this.search_field.stopObserving(),null!=this.form_field_label&&this.form_field_label.stopObserving(),this.is_multiple?(this.search_choices.stopObserving(),this.container.select(".search-choice-close").each(function(a){return a.stopObserving()})):this.selected_item.stopObserving(),this.search_field.tabIndex&&(this.form_field.tabIndex=this.search_field.tabIndex),this.container.remove(),this.form_field.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field.disabled,this.is_disabled?(this.container.addClassName("chosen-disabled"),this.search_field.disabled=!0,this.is_multiple||this.selected_item.stopObserving("focus",this.activate_action),this.close_field()):(this.container.removeClassName("chosen-disabled"),this.search_field.disabled=!1,this.is_multiple?void 0:this.selected_item.observe("focus",this.activate_action))},Chosen.prototype.container_mousedown=function(a){return this.is_disabled||(a&&"mousedown"===a.type&&!this.results_showing&&a.stop(),null!=a&&a.target.hasClassName("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!a||a.target!==this.selected_item&&!a.target.up("a.chosen-single")||this.results_toggle():(this.is_multiple&&this.search_field.clear(),this.container.ownerDocument.observe("click",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b;return b=a.deltaY||-a.wheelDelta||a.detail,null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop=b+this.search_results.scrollTop):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClassName("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return this.container.ownerDocument.stopObserving("click",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClassName("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClassName("chosen-container-active"),this.active_field=!0,this.search_field.value=this.search_field.value,this.search_field.focus()},Chosen.prototype.test_active_click=function(a){return a.target.up(".chosen-container")===this.container?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.select("li.search-choice").invoke("remove"):this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field.readOnly=!0,this.container.addClassName("chosen-container-single-nosearch")):(this.search_field.readOnly=!1,this.container.removeClassName("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;return this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClassName("highlighted"),d=parseInt(this.search_results.getStyle("maxHeight"),10),f=this.search_results.scrollTop,e=d+f,c=this.result_highlight.positionedOffset().top,b=c+this.result_highlight.getHeight(),b>=e?this.search_results.scrollTop=b-d>0?b-d:0:f>c?this.search_results.scrollTop=c:void 0},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClassName("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field.fire("chosen:maxselected",{chosen:this}),!1):(this.container.addClassName("chosen-with-drop"),this.results_showing=!0,this.search_field.focus(),this.search_field.value=this.search_field.value,this.winnow_results(),this.form_field.fire("chosen:showing_dropdown",{chosen:this}))},Chosen.prototype.update_results_content=function(a){return this.search_results.update(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClassName("chosen-with-drop"),this.form_field.fire("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field.tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var a=this;return this.form_field_label=this.form_field.up("label"),null==this.form_field_label&&(this.form_field_label=$$("label[for='"+this.form_field.id+"']").first()),null!=this.form_field_label?this.form_field_label.observe("click",function(b){return a.is_multiple?a.container_mousedown(b):a.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.value=this.default_text,this.search_field.addClassName("default")):(this.search_field.value="",this.search_field.removeClassName("default"))},Chosen.prototype.search_results_mouseup=function(a){var b;return b=a.target.hasClassName("active-result")?a.target:a.target.up(".active-result"),b?(this.result_highlight=b,this.result_select(a),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(a){var b;return b=a.target.hasClassName("active-result")?a.target:a.target.up(".active-result"),b?this.result_do_highlight(b):void 0},Chosen.prototype.search_results_mouseout=function(a){return a.target.hasClassName("active-result")||a.target.up(".active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(a){var b,c,d=this;return b=new Element("li",{"class":"search-choice"}).update(""+this.choice_label(a)+""),a.disabled?b.addClassName("search-choice-disabled"):(c=new Element("a",{href:"#","class":"search-choice-close",rel:a.array_index}),c.observe("click",function(a){return d.choice_destroy_link_click(a)}),b.insert(c)),this.search_container.insert({before:b})},Chosen.prototype.choice_destroy_link_click=function(a){return a.preventDefault(),a.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a.target)},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a.readAttribute("rel"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.value.length<1&&this.results_hide(),a.up("li").remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),"function"==typeof Event.simulate&&this.form_field.simulate("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){var a;return this.current_selectedIndex=this.form_field.selectedIndex,a=this.selected_item.down("abbr"),a?a.remove():void 0},Chosen.prototype.result_select=function(a){var b,c;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field.fire("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClassName("active-result"):this.reset_single_select_options(),b.addClassName("result-selected"),c=this.results_data[b.getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(this.choice_label(c)),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.value="","function"!=typeof Event.simulate||!this.is_multiple&&this.form_field.selectedIndex===this.current_selectedIndex||this.form_field.simulate("change"),this.current_selectedIndex=this.form_field.selectedIndex,a.preventDefault(),this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClassName("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClassName("chosen-default")),this.selected_item.down("span").update(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),"function"==typeof Event.simulate&&this.form_field.simulate("change"),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.down("abbr")||this.selected_item.down("span").insert({after:''}),this.selected_item.addClassName("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return this.search_field.value===this.default_text?"":this.search_field.value.strip().escapeHTML()},Chosen.prototype.winnow_results_set_highlight=function(){var a;return this.is_multiple||(a=this.search_results.down(".result-selected.active-result")),null==a&&(a=this.search_results.down(".active-result")),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(a){return this.search_results.insert(this.no_results_temp.evaluate({terms:a})),this.form_field.fire("chosen:no_results",{chosen:this})},Chosen.prototype.no_results_clear=function(){var a,b;for(a=null,b=[];a=this.search_results.down(".no-results");)b.push(a.remove());return b},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.next(".active-result"))?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a,b,c;return this.results_showing||this.is_multiple?this.result_highlight?(c=this.result_highlight.previousSiblings(),a=this.search_results.select("li.active-result"),b=c.intersect(a),b.length?this.result_do_highlight(b.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.down("a")),this.clear_backstroke()):(a=this.search_container.siblings().last(),a&&a.hasClassName("search-choice")&&!a.hasClassName("search-choice-disabled")?(this.pending_backstroke=a,this.pending_backstroke&&this.pending_backstroke.addClassName("search-choice-focus"),this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClassName("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClassName("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.value.length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:this.results_showing&&a.preventDefault();break;case 32:this.disable_search&&a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var a,b,c,d,e,f,g,h,i;if(this.is_multiple){for(c=0,g=0,e="position:absolute; left: -1000px; top: -1000px; display:none;",f=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],h=0,i=f.length;i>h;h++)d=f[h],e+=d+":"+this.search_field.getStyle(d)+";";return a=new Element("div",{style:e}).update(this.search_field.value.escapeHTML()),document.body.appendChild(a),g=Element.measure(a,"width")+25,a.remove(),b=this.container.getWidth(),g>b-10&&(g=b-10),this.search_field.setStyle({width:g+"px"})}},Chosen}(AbstractChosen)}).call(this); \ No newline at end of file diff --git a/sites/all/libraries/chosen/docsupport/chosen.png b/sites/all/libraries/chosen/docsupport/chosen.png new file mode 100755 index 0000000000000000000000000000000000000000..22d70eeae2dde1ce0d2eea860615804e874a31d6 GIT binary patch literal 1509 zcmV;{c1o>$V1SC>XGxRM_d^VsKzc2Y6_G%LW!LbQe&>*;)|{D+-L$KGf&n|mw(o2!}D z>Uug?Rky}8ujZ5}3FEamH*7j)RJ~tvp)4*<#R- zlNV92n<1;b`_n4c;j`*ixiTAH4Xt`meWjU=rv%WZqKJFV zdqbpiOX}6IrEDGI%~5T9T4wY=+1xx3iWo3?yt8nUj zVCHCR4QU0Kh2wNyky|VPcO$69V~1%TcIPXa>)OaMf8HFQKM&mBA2{5^T--bmR16s1 zQfr`1jXSv~dTUqq(Tpl%d+t1Nlh?E;wU=tX@soYe@s(lb80s#6hmyepI0PzHq%+6(+>8xWfo7w*P4Y=uZ z2G`6!>=`~;0L7?4B97*WO6Kn{A0D_W?%r>b>6w&4G4*-*4Eu%F?&>6dIHKF} zAeP1n^>?xBr7gQjwWlz}jB@>Azc@BHubSL^udyi$z_7`jT*{}%#2&w^4X77 zo2N^P_j%oD`=vJ#D8rZF(FQNQ*XcT8)Z;Oe;8w zAj)RY7(*ZNvbMaB~|nPIq%Q8{wJ?)Wnt*F@166V zyt@Bg-g}|G^WS?PQS?JU^g}=NLqGa-IGxTgU=pB62*!FU26=tA`wDiijgF2^|8=Gl z1<(;Dsk>aLE0?AFeNChC8;s8D!*5zQ+1K-}hrI(n_>Ir7@LzfPL)py$#-wo$#;^|7 zMX(*V$9^>G-?V&!j~6hM+7L9BtR3>^L*9d-Y!Joe*Uqn%=-D-_5B2qV<3aBcOCIt5 zIr930-nU0R>Guh7j zxoz#cP-XxyCXX{2WIgXc9O^8^x=7~MkKfzBWcqlB-Kx>X^F-v5-(_w6Xa%()vSU8{ z+tTsgzkB;(?{S}p`UWt$-CDHmgDKemiI`RIAKLitD^TXg`t~@qV&;RHv8$J3oxFt2 zZ?HNBydOR;A-P`<5Y^rB@6LLu^+1+aTtz z(Z*mdJQnSAahQ!or;lxT^RGLfF$4+%yv<&e96@zD+FER<=LFo%1Ua}eYtII%)7DUJ zgtFU(_-L&$CHL#`c{B-$wn^V4sU|;qS0AsQ^$55FOAL(R=rNUSYu^^2$ z0rh!FaWWa8P;#~`Sxngw;NgsXZlYMHbldV*P>Mp|fpzCkrcu1PBx?_p4Hx1eZpv>g zzvio1`@WMkE8ZLVDa#tix+}ld>MKQ1e?*u3PYl}~& zVI5AlPi#5m3${l;Tc;6JXt zwb@4PI!vV*jE6ErLxE9_qZ^ipV_#VH%w%CI`P1f-%smuC@j}_pXbS%Qrk7`m zZJm+NPQ;8+OMdlxKYAa^?gD}YhGSnso1fGj-tt$moo&riQ=xoFr>r*p$K)}rmm;l3CTU)O=9FEIyezc>bqw&Cj1Cs$o1{@waIXUwH1;J;7?csMg1yB$a zsa7Uvx7%0r*YW|%tuA>}1dQ(_nA~J>!t?ybKhLB(ZPt2|rTF;Y>9Z;4;Qwl@`vsVD z6XU3!wbFQ2m?Ga&|LRZg7sswU6#2R!QEx}a*RN5m#bT~T0jpV|p(6deNQ$+ZtBjZ_ zVoa2u*f-uM_DOLKZfi}C4j0?)d-;*M2Y)}rU(N6gj{H4;avWX%0-TQld|AdTf3A$K zlWx9b-DZR`NPZHT<*0S)fK|W{H8vkeR)3b_xhOwYXH`G+@5IlprqoO}xf+=pFPnrg zX)ac!7R>6Jfi+B)M)&0>?`xn+3@S#b&c*feg0-iVXGH9u@lX!oI|1inzGA zCpT`~cn6?xGBYzn=viM6`K3HNWD2})aVN6*-~4`gamT6;q+e1do2F~$vs+K?+DxC# z#==vW(ezM$w`RRHd73yjibs&&&A>fk90jaqSb;UgC(@|A`TLALm?>gAE&1Vn;{D=% z<7+GMTFM=K#}+?3zMM5)Y-g=0zp{VXA71|OQJ=ex%oyT>*&*P`q<4Mf*Ih;^!Bysm zu?GYxVcECpXZ)#Pnb1B5#l_?|pJF65qKEzS_+}UKTP~TB9?@8Pldk!(EYHBEt--yJ zAN7UszLbGLK|#TIReobYUIFlr_X^&Zx)ygk@H2ppk-~X^8uz1u($dnW#AklqQNYi8S$j{IJcgX(A;B*-FEljsPu`Qc^W1T^+roDAZn0(^tOBz^xE<26tG!>-8I$~c6qt9*4He2D`fP1?ULO|W=gK<=^@mlG*=%)rx z1pz(0_Ho}SIKDWxBXY*CnUI2-O_vKPjsivzS1%eiwz;vcn#wzlfBhQXE0>?xH{NI0 zy{GTqY0TKW4*TNMdti8n@#IcwNB3t;P1yD2ixZyxbh2*{U84*5bMKw}rc9aASzxhP z5XB8d`Ee9gGEO!HPFBmt2y*(in`v(j#Wcj%lm6$^W(sA0F60*m(6I(kn3xj!AU|H7 zz{-0lKk7?k>;XVYNy!U%!E@%!xd&zvYvFhBKeX9|8DK+0LlV%L)mg39Y(PQqIhf7n z9aU9T3jqaz_KQGv8GwSo7h#Y3Ja%>WI#NYN#p;%pma`z-PhqU%yLa!N0x0+s%J)S@ zMLi94N)+V08On#NaSr17zTWo(*(9z0Bb1M8Yi_bpSxM|NTKChGA4;VD+J$1o zQhn`;IIg|6EFbFM!KSW5Z3W4(R0jo&LM(jmw@~96mmdlU*83W8`ikp*Wo2d2v;l!)1Su5(Jge&jWe8H54=6}^ zdHE+zO-T}fNjlwyzNCD;kJY&w2(n%+&Ze@;6Z_e^pDMpo2jZmTHkd9rw#*#gjXb>|s|%-k zO%1ixup|87wdAOeyUMCA6>7X{6XI&jW^BjgCxBub)n2fFoxP>W%G*{JWv0Uv`hK>- zBEp}$`|?XlN^(|KRyyf`U$k?^j2VdH1~U15D`a6jTYEqvzi)YF*!TYB^5fYbJE8#P zI%a<6KFCjOJ8q!J4+R9m*$8xH*dVbdfKD-@cmR~&Uofi^rmr3-C%fJL7)?)cy%42E z^2AKAt*xz)+VBIX#L#9QpkT&HStDkOcnx?hMMXvb1>?L2C@$#sOW1zyP)vLAk!S?Z zn~b@KBwtcPdD@Ohid)Jrp56DKhKbvs9{ej)_TC*-UR!#Gt^3L4M?!(~M?Pc5o1UMp}`!%-X*IkyA zl2|Y|U?g61zse5}n(D#=uygk8*@)sMGWksxWE0BP@Dz#sFs29_71R6Pzg&I<$%Hl) zNHh|mMX?PJ12E3rY>j=UF%w+KFISz;MGe#q58UZRVFBnPKXLN|GchP%iE=ZUO!1JB zZKvH`+N@Z;di6;4b(ulf7fK7_(}2!QP;A4&_8`9d0R<9(ub};2KtV`;C{O7-l$7}; zZj6BXP6Emv0s>S<*6m-rjK%qvG|*I(l}2&%)so_i$9C>UDhe~wsl3HzwOw8?^d2UI zfLf3r)qyoXoN7MNp1W(KIA-BjZ---+ry-#rTcxp(>Xsdejc%;EdWAl>ACJ;%8zPQ@ z_lftb-nT#Ci-L3Ue~WL0O_AHw&5hgJ6F>fAo4K-7>@$DeLfU}g?fG+eEkAK%0Z2H@`{^j!H*;ayEFB`M6UQSgPyY-5VypHmZ4sB@Q1*fE> zJO}3}u{VSb8=SgkV&--H`0cj9IS_9eb1MDnAoPlohMD2da0pRK;88e=lfZ+K}I%0ME&F~HreO*Si)R~2QZ zl`R}LLL-YBYRONErMlH6`KQG(X}wP-KfF&jUUl)no#1yL@t*McoC(tpeiA-S73(0t z&$0gLCs6WTedZ=@#q6<9^5ZW#pF4LBQLZQSzcxrp{ZHTfm#q6msbUJ2$S;_+lkL!Q z`5A!RKFBX>pk#cwy9k*5#kL(-_p#lCUHXqNYzPj`AOoQ#TypRq?n9rsozF283fei z?2n^(L)is-)n!<7LGo5AZ?;-&$KMK_s0dNdUb%v8OyB37&Y0zYrz*djY8DOq1!TVGsL#6G#8|%0>DF^)^265)y5xuF0F>zv zs-TQaEPMxe63K{3k*2u`6cg*R%rC5)J`D6_SAULUZFygGKG0rnHVF63{|g}z%*yec z#|;{NvNoF6FbQE<=^(b&C#4_cXF#D*tf{`nWG_mIv7bF0jo^7xm9c>0n8D#R*$w%5 zw#P?2BaVAHeb-K`Pi^_SAJ*Ym@)K#jPb$BhE$@5=f2m~}{1ureiADE&Jq{ZefkNi! z3-|P~*e-qTE6d>m1rNQ5qNZ3&{(-e9%s$I6EG!JCyPe=Upy+hMr@Ut1 zh>BVNJ9_`zp!5L0S+i#S60=bzR%zx}eQ-krWRXsS%TE#ytSrn(qgX@9$-_|g3t`Q0 zM04_I?@-)QXA=GwhAO|4`{F2Gf3<|Wf&4YHJ%7E)cpp8l1q zwZagrBg1rb>mqz{S=i(l+uTr7Me!y}qwPv|Vp8dm9lP-wsT?F|?bz~%@qEWu`dk^j zK!>9}MV%&DR~z8yq^710gJqi6VEwOv{qC=;{Aj)J2VeNy&KH9Ri#wtno1guS*uHo@ zZ34KIAI5x8USivVZL9bnCm@D4<|W2*anX8TU*w1P&!)q^_N3KwTWl7qt9ET?IFf=7$Ud{O!qWXX6;WK4gWJZ6|lUhhy{IV)=8`<=1oY3*h=Nv+0nI z4hhBpj8-#`QG%Fc@tf2vESO>%@8Y32?f~ureh&BxQt$wVs^w!b(Zp6W*EHmL9bju_wI!w7Oeu&=jBix$5%kG1`BnC87UcAlA{* qQAO_oc&T`h{QH0|KOG$%o&N)k!$irr6Rv;&0000 code[class*="language-"], +pre[class*="language-"] { + background: #272822; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #f8f8f2; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag { + color: #f92672; +} + +.token.boolean, +.token.number{ + color: #ae81ff; +} + +.token.selector, +.token.attr-name, +.token.string { + color: #a6e22e; +} + + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #f8f8f2; +} + +.token.atrule, +.token.attr-value +{ + color: #e6db74; +} + + +.token.keyword{ +color: #66d9ef; +} + +.token.regex, +.token.important { + color: #fd971f; +} + +.token.important { + font-weight: bold; +} + +.token.entity { + cursor: help; +} diff --git a/sites/all/libraries/chosen/docsupport/prism.js b/sites/all/libraries/chosen/docsupport/prism.js new file mode 100755 index 0000000000..7ed4fa7375 --- /dev/null +++ b/sites/all/libraries/chosen/docsupport/prism.js @@ -0,0 +1,9 @@ +/** + * Prism: Lightweight, robust, elegant syntax highlighting + * MIT license http://www.opensource.org/licenses/mit-license.php/ + * @author Lea Verou http://lea.verou.me + */(function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var r={};for(var i in e)e.hasOwnProperty(i)&&(r[i]=t.util.clone(e[i]));return r;case"Array":return e.slice()}return e}},languages:{extend:function(e,n){var r=t.util.clone(t.languages[e]);for(var i in n)r[i]=n[i];return r},insertBefore:function(e,n,r,i){i=i||t.languages;var s=i[e],o={};for(var u in s)if(s.hasOwnProperty(u)){if(u==n)for(var a in r)r.hasOwnProperty(a)&&(o[a]=r[a]);o[u]=s[u]}return i[e]=o},DFS:function(e,n){for(var r in e){n.call(e,r,e[r]);t.util.type(e)==="Object"&&t.languages.DFS(e[r],n)}}},highlightAll:function(e,n){var r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');for(var i=0,s;s=r[i++];)t.highlightElement(s,e===!0,n)},highlightElement:function(r,i,s){var o,u,a=r;while(a&&!e.test(a.className))a=a.parentNode;if(a){o=(a.className.match(e)||[,""])[1];u=t.languages[o]}if(!u)return;r.className=r.className.replace(e,"").replace(/\s+/g," ")+" language-"+o;a=r.parentNode;/pre/i.test(a.nodeName)&&(a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+o);var f=r.textContent;if(!f)return;f=f.replace(/&/g,"&").replace(/e.length)break e;if(p instanceof i)continue;a.lastIndex=0;var d=a.exec(p);if(d){l&&(c=d[1].length);var v=d.index-1+c,d=d[0].slice(c),m=d.length,g=v+m,y=p.slice(0,v+1),b=p.slice(g+1),w=[h,1];y&&w.push(y);var E=new i(u,f?t.tokenize(d,f):d);w.push(E);b&&w.push(b);Array.prototype.splice.apply(s,w)}}}return s},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e,r,i){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]")return e.map(function(t){return n.stringify(t,r,e)}).join("");var s={type:e.type,content:n.stringify(e.content,r,i),tag:"span",classes:["token",e.type],attributes:{},language:r,parent:i};s.type=="comment"&&(s.attributes.spellcheck="true");t.hooks.run("wrap",s);var o="";for(var u in s.attributes)o+=u+'="'+(s.attributes[u]||"")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'" '+o+">"+s.content+""};if(!self.document){self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}})();; +Prism.languages.markup={comment:/<!--[\w\W]*?-->/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});; +Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/ig,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,ignore:/&(lt|gt|amp);/gi,punctuation:/[\{\};:]/g};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<|<)style[\w\W]*?(>|>)[\w\W]*?(<|<)\/style(>|>)/ig,inside:{tag:{pattern:/(<|<)style[\w\W]*?(>|>)|(<|<)\/style(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css}}});; +Prism.languages.clike={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])\/\/.*?(\r?\n|$))/g,lookbehind:!0},string:/("|')(\\?.)*?\1/g,"class-name":{pattern:/((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/ig,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|catch|finally|null|break|continue)\b/g,"boolean":/\b(true|false)\b/g,"function":{pattern:/[a-z0-9_]+\(/ig,inside:{punctuation:/\(/}}, number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,operator:/[-+]{1,2}|!|<=?|>=?|={1,3}|(&){1,2}|\|?\||\?|\*|\/|\~|\^|\%/g,ignore:/&(lt|gt|amp);/gi,punctuation:/[{}[\];(),.:]/g};; +Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(var|let|if|else|while|do|for|return|in|instanceof|function|new|with|typeof|try|catch|finally|null|break|continue)\b/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g});Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g,lookbehind:!0}});Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<|<)script[\w\W]*?(>|>)[\w\W]*?(<|<)\/script(>|>)/ig,inside:{tag:{pattern:/(<|<)script[\w\W]*?(>|>)|(<|<)\/script(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript}}});; diff --git a/sites/all/libraries/chosen/docsupport/style.css b/sites/all/libraries/chosen/docsupport/style.css new file mode 100755 index 0000000000..7f09d091f3 --- /dev/null +++ b/sites/all/libraries/chosen/docsupport/style.css @@ -0,0 +1,204 @@ +/* Reset */ +html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } + +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } + +blockquote, q { quotes: none; } +blockquote:before, blockquote:after, q:before, q:after { content: ""; content: none; } +ins { background-color: #ff9; color: #000; text-decoration: none; } +mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; } +del { text-decoration: line-through; } +abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; } +table { border-collapse: collapse; border-spacing: 0; } +hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; } +input, select { vertical-align: middle; } + +body { font:13px/1.231 sans-serif; *font-size:small; } /* Hack retained to preserve specificity */ +select, input, textarea, button { font:99% sans-serif; } +pre, code, kbd, samp { font-family: monospace, sans-serif; } + + +body { background: #EEE; color: #444; line-height: 1.4em; } + +header h1 { color: black; font-size: 2em; line-height: 1.1em; display: inline-block; height: 27px; margin: 20px 0 25px; } +header h1 small { font-size: 0.6em; } + +div#content { background: white; border: 1px solid #ccc; border-width: 0 1px 1px; margin: 0 auto; padding: 40px 50px 40px; width: 738px; } + +footer { color: #999; padding-top: 40px; font-size: 0.8em; text-align: center; } + +body { font-family: sans-serif; font-size: 1em; } + +p { margin: 0 0 .7em; max-width: 700px; } +table+p { margin-top: 1em; } + +h2 { border-bottom: 1px solid #ccc; font-size: 1.2em; margin: 3em 0 1em 0; font-weight: bold;} +h3 { font-weight: bold; } + +h2.intro { border-bottom: none; font-size: 1em; font-weight: normal; margin-top:0; } + +ul li { list-style: disc; margin-left: 1em; margin-bottom: 1.25em; } +ol li { margin-left: 1.25em; } +ol ul, ul ul { margin: .25em 0 0; } +ol ul li, ul ul li { list-style-type: circle; margin: 0 0 .25em 1em; } + +li > p { margin-top: .25em; } + +div.side-by-side { width: 100%; margin-bottom: 1em; } +div.side-by-side > div { float: left; width: 49%; } +div.side-by-side > div > em { margin-bottom: 10px; display: block; } + +.faqs em { display: block; } + +.clearfix:after { + content: "\0020"; + display: block; + height: 0; + clear: both; + overflow: hidden; + visibility: hidden; +} + +a { color: #F36C00; outline: none; text-decoration: none; } +a:hover { text-decoration: underline; } + +ul.credits li { margin-bottom: .25em; } + +strong { font-weight: bold; } +i { font-style: italic; } + +.button { + background: #fafafa; + background: -webkit-linear-gradient(top, #ffffff, #eeeeee); + background: -moz-linear-gradient(top, #ffffff, #eeeeee); + background: -o-linear-gradient(top, #ffffff, #eeeeee); + background: linear-gradient(to bottom, #ffffff, #eeeeee); + border: 1px solid #bbbbbb; + border-radius: 4px; + box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.2); + color: #555555; + cursor: pointer; + display: inline-block; + font-family: "Helvetica Neue", Arial, Verdana, "Nimbus Sans L", sans-serif; + font-size: 13px; + font-weight: 500; + height: 31px; + line-height: 28px; + outline: none; + padding: 0 13px; + text-shadow: 0 1px 0 white; + text-decoration: none; + vertical-align: middle; + white-space: nowrap; + -webkit-font-smoothing: antialiased; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.button-blue { + background: #1385e5; + background: -webkit-linear-gradient(top, #53b2fc, #1385e5); + background: -moz-linear-gradient(top, #53b2fc, #1385e5); + background: -o-linear-gradient(top, #53b2fc, #1385e5); + background: linear-gradient(to bottom, #53b2fc, #1385e5); + border-color: #075fa9; + color: white; + font-weight: bold; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); +} + + +/* Tweak navbar brand link to be super sleek +-------------------------------------------------- */ +.oss-bar { + top: 0; + right: 20px; + position: fixed; + z-index: 1030; +} +.oss-bar ul { + float: right; + margin: 0; + list-style: none; +} +.oss-bar ul li { + list-style: none; + float: left; + line-height: 0; + margin: 0; +} +.oss-bar ul li a { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + border: 0; + margin-top: -10px; + display: block; + height: 58px; + background: #F36C00 url(oss-credit.png) no-repeat 20px 22px; + padding: 22px 20px 12px 20px; + text-indent: 120%; /* stupid padding */ + white-space: nowrap; + overflow: hidden; + -webkit-transition: all 0.10s ease-in-out; + -moz-transition: all 0.10s ease-in-out; + transition: all 0.15s ease-in-out; +} +.oss-bar ul li a:hover { + margin-top: 0px; +} +.oss-bar a.harvest { + width: 196px; + background-color: #F36C00; + background-position: -142px 22px; + padding-right: 22px; /* optical illusion */ +} +.oss-bar a.fork { + width: 162px; + background-color: #333333; +} + +.docs-table th, .docs-table td { + border: 1px solid #000; + padding: 4px 6px; + white-space: nowrap; +} + +.docs-table td:last-child { + white-space: normal; +} + +.docs-table th { + font-weight: bold; + text-align: left; +} + +#content pre[class*=language-] { + font-size: 14px; + margin-bottom: 20px; +} + +#content pre[class*=language-] code { + font-size: 14px; + padding: 0; +} + +#content code[class*=language-] { + font-size: 12px; + padding: 2px 4px; +} + +.anchor { + color: inherit; + position: relative; +} + +.anchor:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSI3Ij48ZyBmaWxsPSIjNDE0MDQyIj48cGF0aCBkPSJNOS44IDdoLS45bC0uOS0uMWMtLjctLjMtMS40LS43LTEuOC0xLjMtLjItLjEtLjMtLjMtLjMtLjVsLS4zLS40Yy0uMS0uNC0uMi0uOC0uMi0xLjIgMC0uNC4xLS44LjItMS4yaDEuN2MtLjMuNC0uNC44LS40IDEuMiAwIC40LjEuOC4zIDEuMS4xLjIuMi4zLjQuNC4xLjEuMi4yLjQuMy4zLjIuNy4zIDEgLjNoMy40YzEuMiAwIDIuMi0uOSAyLjItMi4xcy0xLTIuMS0yLjItMi4xaC0xLjRjLS4zLS42LS43LTEtMS4yLTEuNGgyLjZjMiAwIDMuNiAxLjYgMy42IDMuNXMtMS42IDMuNS0zLjYgMy41aC0yLjZ6TTguNCAyYy0uMS0uMS0uMi0uMy0uNC0uMy0uMy0uMi0uNy0uMy0xLS4zaC0zLjRjLTEuMiAwLTIuMi45LTIuMiAyLjEgMCAxLjIgMSAyLjEgMi4yIDIuMWgxLjRjLjMuNS43IDEgMS4yIDEuNGgtMi42Yy0yIDAtMy42LTEuNi0zLjYtMy41czEuNi0zLjUgMy42LTMuNWgzLjUwMDAwMDAwMDAwMDAwMDRsLjkuMWMuNy4yIDEuNC43IDEuOCAxLjMuMS4xLjIuMy4zLjUuMS4xLjIuMy4yLjUuMS40LjIuOC4yIDEuMiAwIC40LS4xLjgtLjIgMS4yaC0xLjZjLjMtLjUuNC0uOS40LTEuM3MtLjEtLjgtLjMtMS4xYy0uMS0uMi0uMi0uMy0uNC0uNHoiLz48L2c+PC9zdmc+) 0 50% no-repeat; + background-size: 21px 9px; + margin-left: -27px; + padding-left: 27px; + text-decoration: none; +} diff --git a/sites/all/libraries/chosen/index.html b/sites/all/libraries/chosen/index.html new file mode 100755 index 0000000000..cdf85ca2be --- /dev/null +++ b/sites/all/libraries/chosen/index.html @@ -0,0 +1,1479 @@ + + + + + Chosen: A jQuery Plugin by Harvest to Tame Unwieldy Select Boxes + + + + + + +
                      +
                      +
                      +
                      +

                      Chosen (v1.4.0)

                      +
                      +

                      Chosen is a jQuery plugin that makes long, unwieldy select boxes much more user-friendly.

                      + +

                      + Downloads + Project Source + Contribute +

                      + +

                      Standard Select

                      +
                      +
                      + Turns This + +
                      +
                      + Into This + +
                      +
                      + +

                      Multiple Select

                      +
                      +
                      + Turns This + +
                      +
                      + Into This + +
                      +
                      + +

                      <optgroup> Support

                      +
                      +
                      + Single Select with Groups + +
                      +
                      + Multiple Select with Groups + +
                      +
                      + +

                      Selected and Disabled Support

                      +
                      +

                      Chosen automatically highlights selected options and removes disabled options.

                      +
                      + Single Select + +
                      +
                      + Multiple Select + +
                      +
                      + +

                      Hide Search on Single Select

                      +
                      +

                      The disable_search_threshold option can be specified to hide the search input on single selects if there are fewer than (n) options.

                      +
                      $(".chosen-select").chosen({disable_search_threshold: 10});
                      +

                      +
                      + +
                      +
                      + +

                      Default Text Support

                      +
                      +

                      Chosen automatically sets the default field text ("Choose a country...") by reading the select element's data-placeholder value. If no data-placeholder value is present, it will default to "Select an Option" or "Select Some Options" depending on whether the select is single or multiple. You can change these elements in the plugin js file as you see fit.

                      +
                      <select data-placeholder="Choose a country..." style="width:350px;" multiple class="chosen-select">
                      +

                      Note: on single selects, the first element is assumed to be selected by the browser. To take advantage of the default text support, you will need to include a blank option as the first element of your select list.

                      +
                      + +

                      No Results Text Support

                      +
                      +

                      Setting the "No results" search text is as easy as passing an option when you create Chosen:

                      +
                       $(".chosen-select").chosen({no_results_text: "Oops, nothing found!"}); 
                      +

                      +
                      + Single Select + +
                      +
                      + Multiple Select + +
                      +
                      + +

                      Limit Selected Options in Multiselect

                      +
                      +

                      You can easily limit how many options the user can select:

                      +
                      $(".chosen-select").chosen({max_selected_options: 5});
                      +

                      If you try to select another option with limit reached chosen:maxselected event is triggered:

                      +
                       $(".chosen-select").bind("chosen:maxselected", function () { ... }); 
                      +
                      + +

                      Allow Deselect on Single Selects

                      +
                      +

                      When a single select box isn't a required field, you can set allow_single_deselect: true and Chosen will add a UI element for option deselection. This will only work if the first option has blank text.

                      +
                      + +
                      +
                      + +

                      Right to Left Support

                      +
                      +

                      Chosen supports right to left select boxes too. just add "chosen-rtl" in addition to "chosen-select" to your select tags and you are good to go.

                      +
                      <select class="chosen-select chosen-rtl">
                      +
                      + Single right to left select + +
                      +
                      + Multiple right to left select + +
                      +
                      + +

                      Change / Update Events

                      +
                      +
                        +
                      • +

                        Form Field Change

                        +

                        When working with form fields, you often want to perform some behavior after a value has been selected or deselected. Whenever a user selects a field in Chosen, it triggers a "change" event* on the original form field. That let's you do something like this:

                        +
                        $("#form_field").chosen().change( … );
                        +
                      • +
                      • +

                        Updating Chosen Dynamically

                        +

                        If you need to update the options in your select field and want Chosen to pick up the changes, you'll need to trigger the "chosen:updated" event on the field. Chosen will re-build itself based on the updated content.

                        +
                        $("#form_field").trigger("chosen:updated");
                        +
                      • +
                      +
                      + +

                      Custom Width Support

                      +
                      +

                      Using a custom width with Chosen is as easy as passing an option when you create Chosen:

                      +
                       $(".chosen-select").chosen({width: "95%"}); 
                      +
                      + Single Select + +
                      +
                      + Multiple Select + +
                      +
                      + +

                      Labels work, too

                      +
                      +

                      Use labels just like you would a standard select

                      +

                      +
                      + + +
                      +
                      + + +
                      +
                      + +

                      Setup

                      +

                      Using Chosen is easy as can be.

                      +
                        +
                      1. Download the plugin and copy the chosen files to your app.
                      2. +
                      3. Activate the plugin on the select boxes of your choice: $(".chosen-select").chosen()
                      4. +
                      5. Disco.
                      6. +
                      + +

                      FAQs

                      +
                        +
                      • +

                        Do you have all the available options documented somewhere?

                        +

                        Yes! You can find them on the options page.

                        +
                      • +
                      • +

                        Something doesn't work. Can you fix it?

                        +

                        Yes! Please report all issues using the GitHub issue tracking tool. Please include the plugin version (jQuery or Prototype), browser and OS. The more information provided, the easier it is to fix a problem.

                        +
                      • +
                      • +

                        What browsers are supported?

                        +

                        All modern desktop browsers are supported (Firefox, Chrome, Safari and IE9). Legacy support for IE8 is also enabled. Chosen is disabled on iPhone, iPod Touch, and Android mobile devices (more information).

                        +
                      • +
                      • +

                        Didn't there used to be a Prototype version of Chosen?

                        +

                        There still is!

                        +
                      • +
                      + +

                      Credits

                      + + + + + +
                      +
                      + + + + +
                      + + + diff --git a/sites/all/libraries/chosen/index.proto.html b/sites/all/libraries/chosen/index.proto.html new file mode 100755 index 0000000000..d0245ef59b --- /dev/null +++ b/sites/all/libraries/chosen/index.proto.html @@ -0,0 +1,1483 @@ + + + + + Chosen: A Prototype Plugin by Harvest to Tame Unwieldy Select Boxes + + + + + + +
                      +
                      +
                      +

                      Chosen - Prototype Version (v1.4.0)

                      +
                      +

                      Chosen is a Prototype plugin that makes long, unwieldy select boxes much more user-friendly.

                      + +

                      + Downloads + Project Source + Contribute +

                      + +

                      Looking for the jQuery version?

                      + +

                      Standard Select

                      +
                      +
                      + Turns This + +
                      +
                      + Into This + +
                      +
                      + +

                      Multiple Select

                      +
                      +
                      + Turns This + +
                      +
                      + Into This + +
                      +
                      + +

                      <optgroup> Support

                      +
                      +
                      + Single Select with Groups + +
                      +
                      + Multiple Select with Groups + +
                      +
                      + +

                      Selected and Disabled Support

                      +
                      +

                      Chosen automatically highlights selected options and removes disabled options.

                      +
                      + Single Select + +
                      +
                      + Multiple Select + +
                      +
                      + +

                      Hide Search on Single Select

                      +
                      +

                      The disable_search_threshold option can be specified to hide the search input on single selects if there are fewer than (n) options.

                      +
                       new Chosen($("chosen_select_field"),{disable_search_threshold: 10}); 
                      +

                      +
                      + +
                      +
                      + +

                      Default Text Support

                      +
                      +

                      Chosen automatically sets the default field text ("Choose a country...") by reading the select element's data-placeholder value. If no data-placeholder value is present, it will default to "Select an Option" or "Select Some Options" depending on whether the select is single or multiple. You can change these elements in the plugin js file as you see fit.

                      +
                      <select data-placeholder="Choose a country..." style="width:350px;" multiple class="chosen-select">
                      +

                      Note: on single selects, the first element is assumed to be selected by the browser. To take advantage of the default text support, you will need to include a blank option as the first element of your select list.

                      +
                      + +

                      No Results Text Support

                      +
                      +

                      Setting the "No results" search text is as easy as passing an option when you create Chosen:

                      +
                      new Chosen($("chosen_select_field"),{no_results_text: "Oops, nothing found!"}); 
                      + +
                      + Single Select + +
                      +
                      + Multiple Select + +
                      +
                      + +

                      Limit Selected Options in Multiselect

                      +
                      +

                      You can easily limit how many options the user can select:

                      +
                      new Chosen($("chosen_select_field"),{max_selected_options: 5}); 
                      +

                      If you try to select another option with limit reached chosen:maxselected event is triggered:

                      +
                      $("chosen_select_field").observe("chosen:maxselected", function(evt) { ... }); 
                      +
                      + +

                      Allow Deselect on Single Selects

                      +
                      +

                      When a single select box isn't a required field, you can set allow_single_deselect: true and Chosen will add a UI element for option deselection. This will only work if the first option has blank text.

                      +
                      + +
                      +
                      + +

                      Right to Left Support

                      +
                      +

                      Chosen supports right to left select boxes too. just add "chosen-rtl" in addition to "chosen-select" to your select tags and you are good to go.

                      +
                      <select class="chosen-select chosen-rtl">
                      +
                      + Single right to left select + +
                      +
                      + Multiple right to left select + +
                      +
                      + +

                      Change / Update Events

                      +
                      +
                        +
                      • +

                        Form Field Change

                        +

                        When working with form fields, you often want to perform some behavior after a value has been selected or deselected. Whenever a user selects a field in Chosen, it triggers a "change" event* on the original form field. That let's you do something like this:

                        +
                        $("#form_field").chosen().change( … );
                        +

                        Note: Prototype doesn't offer support for triggering standard browser events. Event.simulate is required to trigger the change event when using the Prototype version.

                        +
                      • +
                      • +

                        Updating Chosen Dynamically

                        +

                        If you need to update the options in your select field and want Chosen to pick up the changes, you'll need to trigger the "chosen:updated" event on the field. Chosen will re-build itself based on the updated content.

                        +
                        Event.fire($("form_field"), "chosen:updated");
                        +
                      • +
                      +
                      + +

                      Custom Width Support

                      +
                      +

                      Using a custom width with Chosen is as easy as passing an option when you create Chosen:

                      +
                      new Chosen($("chosen_select_field"),{width: "95%"}); 
                      +
                      + Single Select + +
                      +
                      + Multiple Select + +
                      +
                      + +

                      Labels work, too

                      +
                      +

                      Use labels just like you would a standard select

                      +

                      +
                      + + +
                      +
                      + + +
                      +
                      + +

                      Setup

                      +

                      Using Chosen is easy as can be.

                      +
                        +
                      1. Download the plugin and copy the chosen files to your app.
                      2. +
                      3. Activate the plugin by creating a new instance of Chosen: New Chosen(some_form_field,some_options);
                      4. +
                      5. Disco.
                      6. +
                      + +

                      FAQs

                      +
                        +
                      • +

                        Do you have all the available options documented somewhere?

                        +

                        Yes! You can find them on the options page.

                        +
                      • +
                      • +

                        Something doesn't work. Can you fix it?

                        +

                        Yes! Please report all issues using the GitHub issue tracking tool. Please include the plugin version (jQuery or Prototype), browser and OS. The more information provided, the easier it is to fix a problem.

                        +
                      • +
                      • +

                        What browsers are supported?

                        +

                        All modern desktop browsers are supported (Firefox, Chrome, Safari and IE9). Legacy support for IE8 is also enabled. Chosen is disabled on iPhone, iPod Touch, and Android mobile devices (more information).

                        +
                      • +
                      + +

                      Credits

                      + + + + + +
                      +
                      + + + + + + + diff --git a/sites/all/libraries/chosen/options.html b/sites/all/libraries/chosen/options.html new file mode 100755 index 0000000000..0372925bc2 --- /dev/null +++ b/sites/all/libraries/chosen/options.html @@ -0,0 +1,276 @@ + + + + + Chosen: A jQuery Plugin by Harvest to Tame Unwieldy Select Boxes + + + + + + +
                      +
                      +
                      +

                      Chosen (v1.4.0)

                      +
                      +

                      Chosen has a number of options and attributes that allow you to have full control of your select boxes.

                      + +

                      Options

                      +

                      The following options are available to pass into Chosen on instantiation.

                      + +

                      Example:

                      +
                      +  $(".my_select_box").chosen({
                      +    disable_search_threshold: 10,
                      +    no_results_text: "Oops, nothing found!",
                      +    width: "95%"
                      +  });
                      +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      OptionDefaultDescription
                      allow_single_deselectfalseWhen set to true on a single select, Chosen adds a UI element which selects the first element (if it is blank).
                      disable_searchfalseWhen set to true, Chosen will not display the search field (single selects only).
                      disable_search_threshold0Hide the search input on single selects if there are fewer than (n) options.
                      enable_split_word_searchtrueBy default, searching will match on any word within an option tag. Set this option to false if you want to only match on the entire text of an option tag.
                      inherit_select_classesfalseWhen set to true, Chosen will grab any classes on the original select field and add them to Chosen’s container div.
                      max_selected_optionsInfinityLimits how many options the user can select. When the limit is reached, the chosen:maxselected event is triggered.
                      no_results_text"No results match"The text to be displayed when no matching results are found. The current search is shown at the end of the text (e.g., + No results match "Bad Search").
                      placeholder_text_multiple"Select Some Options"The text to be displayed as a placeholder when no options are selected for a multiple select.
                      placeholder_text_single"Select an Option"The text to be displayed as a placeholder when no options are selected for a single select.
                      search_containsfalseBy default, Chosen’s search matches starting at the beginning of a word. Setting this option to true allows matches starting from anywhere within a word. This is especially useful for options that include a lot of special characters or phrases in ()s and []s.
                      single_backstroke_deletetrueBy default, pressing delete/backspace on multiple selects will remove a selected choice. When false, pressing delete/backspace will highlight the last choice, and a second press deselects it.
                      widthOriginal select width.The width of the Chosen select box. By default, Chosen attempts to match the width of the select box you are replacing. If your select is hidden when Chosen is instantiated, you must specify a width or the select will show up with a width of 0.
                      display_disabled_optionstrueBy default, Chosen includes disabled options in search results with a special styling. Setting this option to false will hide disabled results and exclude them from searches.
                      display_selected_optionstrue +

                      By default, Chosen includes selected options in search results with a special styling. Setting this option to false will hide selected results and exclude them from searches.

                      +

                      Note: this is for multiple selects only. In single selects, the selected result will always be displayed.

                      +
                      include_group_label_in_selectedfalse +

                      By default, Chosen only shows the text of a selected option. Setting this option to true will show the text and group (if any) of the selected option.

                      +
                      + +

                      Attributes

                      +

                      Certain attributes placed on the select tag or its options can be used to configure Chosen.

                      + +

                      Example:

                      + +
                      +  <select class="my_select_box" data-placeholder="Select Your Options">
                      +    <option value="1">Option 1</option>
                      +    <option value="2" selected>Option 2</option>
                      +    <option value="3" disabled>Option 3</option>
                      +  </select>
                      +
                      + + + + + + + + + + + + + + + + + +
                      AttributeDescription
                      data-placeholder +

                      The text to be displayed as a placeholder when no options are selected for a select. Defaults to "Select an Option" for single selects or "Select Some Options" for multiple selects.

                      +

                      Note:This attribute overrides anything set in the placeholder_text_multiple or placeholder_text_single options.

                      +
                      multipleThe attribute multiple on your select box dictates whether Chosen will render a multiple or single select.
                      selected, disabledChosen automatically highlights selected options and disables disabled options.
                      + +

                      Classes

                      +

                      Classes placed on the select tag can be used to configure Chosen.

                      + +

                      Example:

                      + +
                      +  <select class="my_select_box chosen-rtl">
                      +    <option value="1">Option 1</option>
                      +    <option value="2">Option 2</option>
                      +    <option value="3">Option 3</option>
                      +  </select>
                      +
                      + + + + + + + + + + +
                      ClassnameDescription
                      chosen-rtl +

                      Chosen supports right-to-left text in select boxes. Add the class chosen-rtl to your select tag to support right-to-left text options.

                      +

                      Note: The chosen-rtl class will pass through to the Chosen select even when the inherit_select_classes option is set to false.

                      +
                      + +

                      Triggered Events

                      +

                      Chosen triggers a number of standard and custom events on the original select field.

                      + +

                      Example:

                      + +
                      +  $('.my_select_box').on('change', function(evt, params) {
                      +    do_something(evt, params);
                      +  });
                      +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      EventDescription
                      change +

                      Chosen triggers the standard DOM event whenever a selection is made (it also sends a selected or deselected parameter that tells you which option was changed).

                      +

                      Note: in order to use change in the Prototype version, you have to include the Event.simulate class. The selected and deselected parameters are not available for Prototype.

                      +
                      chosen:readyTriggered after Chosen has been fully instantiated.
                      chosen:maxselectedTriggered if max_selected_options is set and that total is broken.
                      chosen:showing_dropdownTriggered when Chosen’s dropdown is opened.
                      chosen:hiding_dropdownTriggered when Chosen’s dropdown is closed.
                      chosen:no_resultsTriggered when a search returns no matching results.
                      + +

                      + Note: all custom Chosen events (those that being with chosen:) also include the chosen object as a parameter. +

                      + +

                      Triggerable Events

                      +

                      You can trigger several events on the original select field to invoke a behavior in Chosen.

                      + +

                      Example:

                      + +
                      +  // tell Chosen that a select has changed
                      +  $('.my_select_box').trigger('chosen:updated');
                      +
                      + + + + + + + + + + + + + + + + + + + + + +
                      EventDescription
                      chosen:updatedThis event should be triggered whenever Chosen’s underlying select element changes (such as a change in selected options).
                      chosen:activateThis is the equivalant of focusing a standard HTML select field. When activated, Chosen will capure keypress events as if you had clicked the field directly.
                      chosen:openThis event activates Chosen and also displays the search results.
                      chosen:closeThis event deactivates Chosen and hides the search results.
                      + + + +
                      +
                      + + + +