spree 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of spree might be problematic. Click here for more details.

Files changed (959) hide show
  1. data/CHANGELOG +44 -11
  2. data/CONTRIBUTORS +1 -1
  3. data/INSTALL +4 -5
  4. data/README.markdown +1 -34
  5. data/app/controllers/admin/base_controller.rb +6 -0
  6. data/app/controllers/admin/configurations_controller.rb +7 -1
  7. data/app/controllers/admin/creditcard_payments_controller.rb +6 -56
  8. data/app/controllers/admin/products_controller.rb +9 -0
  9. data/app/controllers/admin/prototypes_controller.rb +4 -8
  10. data/app/controllers/admin/shipments_controller.rb +37 -0
  11. data/{vendor/extensions/shipping/app → app}/controllers/admin/shipping_categories_controller.rb +1 -1
  12. data/{vendor/extensions/shipping/app → app}/controllers/admin/shipping_methods_controller.rb +1 -1
  13. data/app/controllers/admin/users_controller.rb +6 -3
  14. data/app/controllers/admin/zones_controller.rb +17 -36
  15. data/app/controllers/application.rb +74 -12
  16. data/app/controllers/content_controller.rb +4 -0
  17. data/app/controllers/orders_controller.rb +52 -26
  18. data/app/controllers/password_resets_controller.rb +44 -0
  19. data/app/controllers/spree/base_controller.rb +1 -1
  20. data/app/controllers/states_controller.rb +8 -10
  21. data/app/controllers/taxons_controller.rb +0 -6
  22. data/app/controllers/user_sessions_controller.rb +38 -0
  23. data/app/controllers/users_controller.rb +29 -14
  24. data/app/helpers/admin/base_helper.rb +127 -4
  25. data/app/helpers/admin/orders_helper.rb +1 -1
  26. data/{vendor/extensions/shipping/app → app}/helpers/admin/shipping_categories_helper.rb +0 -0
  27. data/{vendor/extensions/shipping/app → app}/helpers/admin/shipping_methods_helper.rb +0 -0
  28. data/app/helpers/admin/zones_helper.rb +4 -4
  29. data/app/helpers/application_helper.rb +0 -13
  30. data/app/helpers/orders_helper.rb +0 -11
  31. data/app/helpers/spree/base_helper.rb +51 -3
  32. data/app/helpers/taxons_helper.rb +13 -12
  33. data/app/models/address.rb +0 -1
  34. data/app/models/app_configuration.rb +4 -1
  35. data/app/models/country.rb +2 -2
  36. data/app/models/creditcard.rb +10 -6
  37. data/app/models/creditcard_payment.rb +1 -0
  38. data/app/models/image.rb +1 -1
  39. data/app/models/line_item.rb +2 -0
  40. data/app/models/option_type.rb +1 -0
  41. data/app/models/order.rb +51 -29
  42. data/app/models/order_mailer.rb +4 -4
  43. data/app/models/product.rb +27 -1
  44. data/app/models/product_property.rb +0 -1
  45. data/app/models/property.rb +3 -0
  46. data/app/models/prototype.rb +1 -0
  47. data/app/models/shipment.rb +13 -17
  48. data/app/models/tax_category.rb +1 -0
  49. data/app/models/user.rb +32 -117
  50. data/app/models/user_mailer.rb +11 -0
  51. data/app/models/user_session.rb +2 -0
  52. data/app/models/variant.rb +6 -2
  53. data/app/models/zone.rb +34 -18
  54. data/app/models/zone_member.rb +9 -3
  55. data/app/views/account/login.html.erb +2 -0
  56. data/app/views/admin/configurations/index.html.erb +1 -1
  57. data/app/views/admin/creditcard_payments/edit.html.erb +11 -9
  58. data/app/views/admin/creditcard_payments/new.html.erb +14 -27
  59. data/app/views/admin/general_settings/edit.html.erb +28 -11
  60. data/app/views/admin/general_settings/show.html.erb +29 -16
  61. data/app/views/admin/inventory_settings/edit.html.erb +20 -11
  62. data/app/views/admin/inventory_settings/show.html.erb +9 -11
  63. data/app/views/admin/mail_settings/edit.html.erb +109 -80
  64. data/app/views/admin/mail_settings/show.html.erb +55 -41
  65. data/app/views/admin/option_types/_form.html.erb +18 -22
  66. data/app/views/admin/option_types/_option_value.html.erb +1 -1
  67. data/app/views/admin/option_types/available.html.erb +26 -30
  68. data/app/views/admin/option_types/edit.html.erb +5 -2
  69. data/app/views/admin/option_types/index.html.erb +36 -35
  70. data/app/views/admin/option_types/new.html.erb +7 -4
  71. data/app/views/admin/option_types/selected.html.erb +28 -28
  72. data/app/views/admin/orders/index.html.erb +86 -112
  73. data/app/views/admin/orders/show.html.erb +31 -51
  74. data/app/views/admin/overview/index.html.erb +1 -1
  75. data/app/views/admin/payments/index.html.erb +14 -6
  76. data/app/views/admin/product_properties/_product_property.html.erb +1 -1
  77. data/app/views/admin/product_properties/index.html.erb +21 -16
  78. data/app/views/admin/products/_form.html.erb +79 -71
  79. data/app/views/admin/products/_images.html.erb +27 -30
  80. data/app/views/admin/products/_option_types.html.erb +2 -2
  81. data/app/views/admin/products/_properties_form.erb +7 -0
  82. data/app/views/admin/products/edit.html.erb +9 -6
  83. data/app/views/admin/products/index.html.erb +79 -67
  84. data/app/views/admin/products/new.html.erb +51 -5
  85. data/app/views/admin/properties/_form.html.erb +12 -14
  86. data/app/views/admin/properties/edit.html.erb +3 -2
  87. data/app/views/admin/properties/index.html.erb +26 -17
  88. data/app/views/admin/properties/new.html.erb +5 -3
  89. data/app/views/admin/prototypes/_form.html.erb +38 -15
  90. data/app/views/admin/prototypes/available.html.erb +7 -7
  91. data/app/views/admin/prototypes/edit.html.erb +2 -2
  92. data/app/views/admin/prototypes/index.html.erb +24 -16
  93. data/app/views/admin/prototypes/new.html.erb +4 -2
  94. data/app/views/admin/reports/index.html.erb +18 -23
  95. data/app/views/admin/reports/sales_total.html.erb +25 -26
  96. data/app/views/admin/shared/_additional_field.html.erb +5 -0
  97. data/app/views/admin/shared/_address.html.erb +13 -0
  98. data/app/views/admin/shared/_configuration_menu.html.erb +18 -0
  99. data/app/views/admin/shared/_edit_resource_links.html.erb +4 -0
  100. data/app/views/admin/shared/_form_address.html.erb +50 -0
  101. data/app/views/admin/shared/_new_resource_links.html.erb +4 -0
  102. data/app/views/admin/shared/_order_details.html.erb +36 -0
  103. data/{vendor/plugins/has_many_polymorphs/test/fixtures/eaters_foodstuffs.yml → app/views/admin/shared/_order_sub_menu.html.erb} +0 -0
  104. data/app/views/admin/shared/_order_tabs.html.erb +27 -0
  105. data/app/views/admin/shared/_product_sub_menu.html.erb +8 -0
  106. data/app/views/admin/shared/_product_tabs.html.erb +35 -0
  107. data/app/views/admin/shared/_report_criteria.html.erb +23 -0
  108. data/app/views/admin/shared/_show_resource_links.html.erb +5 -0
  109. data/app/views/admin/shipments/_details.html.erb +19 -0
  110. data/app/views/admin/shipments/_form.html.erb +21 -0
  111. data/app/views/admin/shipments/edit.html.erb +12 -0
  112. data/{vendor/extensions/shipping/app → app}/views/admin/shipments/index.html.erb +8 -8
  113. data/app/views/admin/shipments/new.html.erb +14 -0
  114. data/{vendor/extensions/shipping/app → app}/views/admin/shipping_categories/_form.html.erb +0 -0
  115. data/{vendor/extensions/shipping/app → app}/views/admin/shipping_categories/edit.html.erb +1 -1
  116. data/app/views/admin/shipping_categories/index.html.erb +27 -0
  117. data/{vendor/extensions/shipping/app → app}/views/admin/shipping_categories/new.html.erb +1 -1
  118. data/{vendor/extensions/shipping/app → app}/views/admin/shipping_methods/_form.html.erb +1 -1
  119. data/{vendor/extensions/shipping/app → app}/views/admin/shipping_methods/edit.html.erb +1 -1
  120. data/app/views/admin/shipping_methods/index.html.erb +34 -0
  121. data/{vendor/extensions/shipping/app → app}/views/admin/shipping_methods/new.html.erb +1 -1
  122. data/app/views/admin/states/_form.html.erb +9 -10
  123. data/app/views/admin/states/_state_list.html.erb +10 -7
  124. data/app/views/admin/states/edit.html.erb +4 -2
  125. data/app/views/admin/states/index.html.erb +11 -4
  126. data/app/views/admin/states/new.html.erb +4 -2
  127. data/app/views/admin/tax_categories/_form.html.erb +9 -11
  128. data/app/views/admin/tax_categories/edit.html.erb +4 -2
  129. data/app/views/admin/tax_categories/index.html.erb +19 -9
  130. data/app/views/admin/tax_categories/new.html.erb +4 -2
  131. data/app/views/admin/tax_categories/show.html.erb +1 -0
  132. data/app/views/admin/taxonomies/_form.html.erb +5 -9
  133. data/app/views/admin/taxonomies/_list.html.erb +4 -4
  134. data/app/views/admin/taxonomies/_yui_head.html.erb +2 -16
  135. data/app/views/admin/taxonomies/edit.html.erb +13 -12
  136. data/app/views/admin/taxonomies/index.html.erb +11 -2
  137. data/app/views/admin/taxonomies/new.html.erb +7 -4
  138. data/app/views/admin/taxons/_taxon_table.html.erb +9 -9
  139. data/app/views/admin/taxons/available.js.erb +8 -8
  140. data/app/views/admin/taxons/selected.html.erb +10 -9
  141. data/app/views/admin/users/_form.html.erb +35 -36
  142. data/app/views/admin/users/edit.html.erb +3 -3
  143. data/app/views/admin/users/index.html.erb +45 -47
  144. data/app/views/admin/users/new.html.erb +5 -5
  145. data/app/views/admin/users/show.html.erb +8 -5
  146. data/app/views/admin/variants/_form.html.erb +36 -31
  147. data/app/views/admin/variants/edit.html.erb +5 -4
  148. data/app/views/admin/variants/index.html.erb +52 -50
  149. data/app/views/admin/variants/new.html.erb +3 -3
  150. data/app/views/admin/zones/_country_member.html.erb +5 -0
  151. data/app/views/admin/zones/_form.html.erb +26 -65
  152. data/app/views/admin/zones/_member_type.html.erb +15 -0
  153. data/app/views/admin/zones/_state_member.html.erb +5 -0
  154. data/app/views/admin/zones/_zone_member.html.erb +5 -0
  155. data/app/views/admin/zones/edit.html.erb +6 -4
  156. data/app/views/admin/zones/index.html.erb +18 -7
  157. data/app/views/admin/zones/new.html.erb +6 -4
  158. data/app/views/{checkout → content}/cvv.html.erb +0 -2
  159. data/app/views/layouts/admin.html.erb +75 -60
  160. data/app/views/layouts/application.html.erb +51 -75
  161. data/app/views/orders/_billing.html.erb +53 -0
  162. data/app/views/orders/_checkout_form.html.erb +14 -0
  163. data/app/views/{checkout/_confirm_order.erb → orders/_confirmation.html.erb} +3 -1
  164. data/app/views/orders/_form.html.erb +1 -2
  165. data/app/views/orders/_line_item.html.erb +15 -16
  166. data/app/views/orders/_payment.html.erb +30 -0
  167. data/app/views/orders/_registration.html.erb +60 -0
  168. data/app/views/orders/_shipping.html.erb +54 -0
  169. data/app/views/orders/_shipping_method.html.erb +10 -0
  170. data/app/views/orders/checkout.html.erb +15 -0
  171. data/app/views/orders/edit.html.erb +20 -20
  172. data/app/views/orders/new.html.erb +9 -8
  173. data/app/views/orders/show.html.erb +2 -4
  174. data/app/views/password_resets/edit.html.erb +12 -0
  175. data/app/views/password_resets/new.html.erb +11 -0
  176. data/app/views/products/_cart_form.html.erb +46 -0
  177. data/app/views/products/_properties.html.erb +8 -0
  178. data/app/views/products/_thumbnails.html.erb +27 -5
  179. data/app/views/products/index.html.erb +3 -8
  180. data/app/views/products/show.html.erb +23 -68
  181. data/app/views/shared/_footer.html.erb +8 -3
  182. data/app/views/shared/_login.html.erb +17 -16
  183. data/app/views/shared/_login_bar.html.erb +6 -0
  184. data/app/views/shared/_new_resource_links.html.erb +1 -1
  185. data/app/views/shared/_order_details.html.erb +8 -8
  186. data/app/views/shared/_products.html.erb +21 -17
  187. data/app/views/shared/_store_menu.html.erb +2 -5
  188. data/app/views/shared/_taxonomies.html.erb +8 -5
  189. data/app/views/states/index.js.erb +1 -10
  190. data/app/views/taxons/_taxon.html.erb +2 -3
  191. data/app/views/taxons/show.html.erb +10 -6
  192. data/app/views/user_mailer/password_reset_instructions.erb +9 -0
  193. data/app/views/{account → user_sessions}/authorization_failure.html.erb +0 -0
  194. data/app/views/user_sessions/new.html.erb +6 -0
  195. data/app/views/users/_form.html.erb +16 -23
  196. data/app/views/users/new.html.erb +11 -19
  197. data/config/boot.rb +1 -1
  198. data/config/database.yml +5 -5
  199. data/config/database.yml.example +2 -2
  200. data/config/environment.rb +11 -24
  201. data/config/initializers/backtrace_silencers.rb +7 -0
  202. data/config/initializers/compass.rb +8 -0
  203. data/config/initializers/inflections.rb +10 -0
  204. data/config/initializers/mime_types.rb +0 -3
  205. data/config/initializers/new_rails_defaults.rb +19 -0
  206. data/config/initializers/session_store.rb +15 -0
  207. data/config/locales/de.yml +57 -2
  208. data/config/locales/de_rails.yml +27 -7
  209. data/config/locales/en-GB.yml +59 -4
  210. data/config/locales/en-GB_rails.yml +6 -6
  211. data/config/locales/en-US.yml +60 -5
  212. data/config/locales/en-US_rails.yml +80 -39
  213. data/config/locales/es.yml +318 -263
  214. data/config/locales/es_rails.yml +26 -8
  215. data/config/locales/fr-FR.yml +55 -0
  216. data/config/locales/fr-FR_rails.yml +51 -43
  217. data/config/locales/it.yml +57 -2
  218. data/config/locales/it_rails.yml +60 -18
  219. data/config/locales/nb-NO.yml +67 -469
  220. data/config/locales/nl-BE.yml +522 -0
  221. data/config/locales/nl-BE_rails.yml +155 -0
  222. data/config/locales/pl.yml +57 -2
  223. data/config/locales/pt-BR.yml +272 -217
  224. data/config/locales/pt-BR_rails.yml +132 -98
  225. data/config/locales/pt-PT.yml +56 -1
  226. data/config/locales/pt-PT_rails.yml +25 -4
  227. data/config/locales/ru-RU.yml +56 -1
  228. data/config/locales/ru-RU_rails.yml +156 -110
  229. data/config/routes.rb +17 -8
  230. data/config/spree_permissions.yml +8 -5
  231. data/{vendor/extensions/shipping/db → db}/migrate/20081003211336_create_shipping_methods.rb +0 -0
  232. data/{vendor/extensions/shipping/db → db}/migrate/20081003233427_create_shipping_categories.rb +0 -0
  233. data/{vendor/extensions/shipping/db → db}/migrate/20081015001711_create_shipments.rb +0 -0
  234. data/{vendor/extensions/shipping/db → db}/migrate/20081023134446_add_product_dimensions.rb +0 -0
  235. data/{vendor/extensions/shipping/db → db}/migrate/20081205155619_add_shipped_at_property.rb +0 -0
  236. data/{vendor/extensions/shipping/db → db}/migrate/20081221201510_create_shipping_addresses.rb +0 -0
  237. data/db/migrate/20090302221152_give_all_users_user_role.rb +1 -0
  238. data/db/migrate/20090320113300_authlogic_changes.rb +24 -0
  239. data/db/migrate/20090324164010_create_option_types_prototypes.rb +12 -0
  240. data/db/migrate/20090401120636_meta_data_fields_for_products.rb +11 -0
  241. data/db/migrate/20090401203712_remove_hmp_stuff_in_zones.rb +12 -0
  242. data/db/migrate/{20080706233224_create_eu_vat_zone.rb → 20090401223217_create_eu_vat_zone_again.rb} +8 -3
  243. data/db/migrate/20090402002244_add_user_login.rb +17 -0
  244. data/db/migrate/20090402161055_add_order_token.rb +13 -0
  245. data/db/migrate/20090402200317_add_email_to_order.rb +19 -0
  246. data/db/migrate/20090406174645_refactor_addresses.rb +53 -0
  247. data/db/migrate/20090420021303_remove_viewable_id_from_products.rb +10 -0
  248. data/db/migrate/20090427000000_upgrade_taxons.rb +14 -0
  249. data/db/sample/addresses.yml +24 -14
  250. data/db/sample/creditcards.yml +2 -1
  251. data/db/sample/orders.yml +4 -1
  252. data/db/sample/products.yml +9 -9
  253. data/{vendor/extensions/shipping/db → db}/sample/shipments.yml +2 -1
  254. data/{vendor/extensions/shipping/db → db}/sample/shipping_categories.yml +0 -0
  255. data/{vendor/extensions/shipping/db → db}/sample/shipping_methods.yml +0 -0
  256. data/db/sample/users.yml +2 -1
  257. data/db/sample/zone_members.yml +16 -0
  258. data/{vendor/extensions/shipping/db → db}/sample/zones.yml +0 -0
  259. data/lib/easy_role_requirement_system.rb +32 -1
  260. data/lib/generators/generator_base_extension.rb +2 -2
  261. data/lib/generators/instance/instance_generator.rb +13 -9
  262. data/lib/generators/instance/templates/session_store.rb +15 -0
  263. data/lib/plugins/extension_patches/lib/fixture_loading_extension.rb +3 -1
  264. data/lib/plugins/monkey_patches/init.rb +1 -0
  265. data/lib/plugins/monkey_patches/lib/monkey_patches.rb +59 -0
  266. data/{vendor/plugins/calendar_date_select → lib/plugins/option_tags_with_disable}/MIT-LICENSE +20 -20
  267. data/lib/plugins/option_tags_with_disable/README.rdoc +35 -0
  268. data/lib/plugins/option_tags_with_disable/Rakefile +23 -0
  269. data/lib/plugins/option_tags_with_disable/init.rb +1 -0
  270. data/lib/plugins/option_tags_with_disable/lib/option_tags_will_disable.rb +85 -0
  271. data/lib/plugins/option_tags_with_disable/test/option_tags_will_disable_test.rb +72 -0
  272. data/lib/plugins/option_tags_with_disable/test/test_helper.rb +8 -0
  273. data/lib/role_requirement_system.rb +2 -2
  274. data/lib/spree.rb +2 -2
  275. data/lib/spree/checkout.rb +74 -0
  276. data/lib/spree/initializer.rb +0 -1
  277. data/lib/spree/setup.rb +2 -1
  278. data/{vendor/extensions/shipping/lib → lib}/spree/shipping_error.rb +0 -0
  279. data/lib/tasks/database.rake +2 -0
  280. data/lib/tasks/release.rake +8 -6
  281. data/lib/tasks/upgrade.rake +3 -0
  282. data/public/assets/products/1009/large/IMG_3408.jpg +0 -0
  283. data/public/assets/products/1009/mini/IMG_3408.jpg +0 -0
  284. data/public/assets/products/1009/original/IMG_3408.jpg +0 -0
  285. data/public/assets/products/1009/product/IMG_3408.jpg +0 -0
  286. data/public/assets/products/1009/small/IMG_3408.jpg +0 -0
  287. data/public/images/add-to-cart.png +0 -0
  288. data/public/images/admin/bg/active-tab.png +0 -0
  289. data/public/images/admin/bg/admin_tab_back.png +0 -0
  290. data/public/images/admin/bg/admin_tab_selected_back.png +0 -0
  291. data/public/images/admin/bg/content-back-blue.png +0 -0
  292. data/public/images/admin/bg/content-back-green.png +0 -0
  293. data/public/images/admin/bg/content-back.png +0 -0
  294. data/public/images/admin/bg/flash-error.png +0 -0
  295. data/public/images/admin/bg/flash-notice.png +0 -0
  296. data/public/images/admin/bg/green-stripes.gif +0 -0
  297. data/public/images/admin/bg/green-stripes.png +0 -0
  298. data/public/images/admin/bg/grid_header_back.png +0 -0
  299. data/public/images/admin/bg/grid_header_back_green.png +0 -0
  300. data/public/images/admin/bg/header-bg.png +0 -0
  301. data/public/images/admin/bg/header_bg.jpg +0 -0
  302. data/public/images/admin/bg/menu-current.png +0 -0
  303. data/public/images/admin/bg/red-stripes.gif +0 -0
  304. data/public/images/admin/bg/red-stripes.png +0 -0
  305. data/public/images/admin/bg/spree_50.png +0 -0
  306. data/public/images/admin/bg/subnav-divider.png +0 -0
  307. data/public/images/admin/bg/subnav.png +0 -0
  308. data/public/images/admin/bg/tab-back.png +0 -0
  309. data/public/images/admin/buttons/blue/left_01.png +0 -0
  310. data/public/images/admin/buttons/blue/right_01.png +0 -0
  311. data/public/images/admin/buttons/drag-handle-green.png +0 -0
  312. data/public/images/admin/buttons/green/left_01.png +0 -0
  313. data/public/images/admin/buttons/green/right_01.png +0 -0
  314. data/public/images/admin/buttons/left_01.png +0 -0
  315. data/public/images/admin/buttons/left_01_small.png +0 -0
  316. data/public/images/admin/buttons/orange/left_03.png +0 -0
  317. data/public/images/admin/buttons/orange/right_03.png +0 -0
  318. data/public/images/admin/buttons/right_01.png +0 -0
  319. data/public/images/admin/buttons/right_01_small.png +0 -0
  320. data/public/images/admin/icons/16x16/1.png +0 -0
  321. data/public/images/admin/icons/16x16/10.png +0 -0
  322. data/public/images/admin/icons/16x16/2.png +0 -0
  323. data/public/images/admin/icons/16x16/3.png +0 -0
  324. data/public/images/admin/icons/16x16/4.png +0 -0
  325. data/public/images/admin/icons/16x16/5.png +0 -0
  326. data/public/images/admin/icons/16x16/6.png +0 -0
  327. data/public/images/admin/icons/16x16/7.png +0 -0
  328. data/public/images/admin/icons/16x16/8.png +0 -0
  329. data/public/images/admin/icons/16x16/9.png +0 -0
  330. data/public/images/admin/icons/32x32/1.png +0 -0
  331. data/public/images/admin/icons/32x32/10.png +0 -0
  332. data/public/images/admin/icons/32x32/11.png +0 -0
  333. data/public/images/admin/icons/32x32/2.png +0 -0
  334. data/public/images/admin/icons/32x32/3.png +0 -0
  335. data/public/images/admin/icons/32x32/4.png +0 -0
  336. data/public/images/admin/icons/32x32/5.png +0 -0
  337. data/public/images/admin/icons/32x32/6.png +0 -0
  338. data/public/images/admin/icons/32x32/7.png +0 -0
  339. data/public/images/admin/icons/32x32/8.png +0 -0
  340. data/public/images/admin/icons/32x32/9.png +0 -0
  341. data/public/images/admin/icons/accept.png +0 -0
  342. data/public/images/admin/icons/add.gif +0 -0
  343. data/public/images/admin/icons/add.png +0 -0
  344. data/public/images/admin/icons/arrow-down.gif +0 -0
  345. data/public/images/admin/icons/cross.png +0 -0
  346. data/public/images/admin/icons/delete.gif +0 -0
  347. data/public/images/admin/icons/delete.png +0 -0
  348. data/public/images/admin/icons/drag.gif +0 -0
  349. data/public/images/admin/icons/edit.gif +0 -0
  350. data/public/images/admin/icons/edit.png +0 -0
  351. data/public/images/admin/icons/email.png +0 -0
  352. data/public/images/admin/icons/error.png +0 -0
  353. data/public/images/admin/icons/exclamation.png +0 -0
  354. data/public/images/admin/icons/feed.png +0 -0
  355. data/public/images/admin/icons/pdf.png +0 -0
  356. data/public/images/admin/icons/reorder.gif +0 -0
  357. data/public/images/admin/icons/search.gif +0 -0
  358. data/public/images/admin/icons/send-email.png +0 -0
  359. data/public/images/admin/icons/stop.png +0 -0
  360. data/public/images/admin/icons/tick.png +0 -0
  361. data/public/images/admin/icons/up.gif +0 -0
  362. data/public/images/admin/icons/xls.png +0 -0
  363. data/public/images/admin/tabs/off-left.png +0 -0
  364. data/public/images/admin/tabs/off-right.png +0 -0
  365. data/public/images/admin/tabs/on-left.png +0 -0
  366. data/public/images/admin/tabs/on-right.png +0 -0
  367. data/public/images/bg-button-hover.png +0 -0
  368. data/public/images/bg-button-pressed.png +0 -0
  369. data/public/images/bg-button.gif +0 -0
  370. data/public/images/bg-button.png +0 -0
  371. data/public/images/blue/left_01.png +0 -0
  372. data/public/images/blue/right_01.png +0 -0
  373. data/public/images/body-back.png +0 -0
  374. data/public/images/bottom_shine.png +0 -0
  375. data/public/images/button-dark-hover.png +0 -0
  376. data/public/images/button-dark.png +0 -0
  377. data/public/images/buttons/bg-button-hover.png +0 -0
  378. data/public/images/buttons/bg-button-pressed.png +0 -0
  379. data/public/images/buttons/bg-button.gif +0 -0
  380. data/public/images/buttons/bg-button.png +0 -0
  381. data/public/images/buttons/blue/left_01.png +0 -0
  382. data/public/images/buttons/blue/right_01.png +0 -0
  383. data/public/images/buttons/button-dark-hover.png +0 -0
  384. data/public/images/buttons/button-dark.png +0 -0
  385. data/public/images/buttons/drag-handle-green.png +0 -0
  386. data/public/images/buttons/green/left_01.png +0 -0
  387. data/public/images/buttons/green/right_01.png +0 -0
  388. data/public/images/buttons/left_01.png +0 -0
  389. data/public/images/buttons/left_01_small.png +0 -0
  390. data/public/images/buttons/orange/left_03.png +0 -0
  391. data/public/images/buttons/orange/right_03.png +0 -0
  392. data/public/images/buttons/right_01.png +0 -0
  393. data/public/images/buttons/right_01_small.png +0 -0
  394. data/public/images/buttons/sxsw-ribbon-v1.png +0 -0
  395. data/public/images/buttons/top-shine.png +0 -0
  396. data/public/images/cart-empty.png +0 -0
  397. data/public/images/cart-empty_x32.png +0 -0
  398. data/public/images/cart-full.png +0 -0
  399. data/public/images/cart-full_x32.png +0 -0
  400. data/public/images/checkout.png +0 -0
  401. data/public/images/drag-handle-green.png +0 -0
  402. data/public/images/green/left_01.png +0 -0
  403. data/public/images/green/right_01.png +0 -0
  404. data/public/images/grid.png +0 -0
  405. data/public/images/left_01.png +0 -0
  406. data/public/images/left_01_small.png +0 -0
  407. data/public/images/menu-current.png +0 -0
  408. data/public/images/menu-hover.png +0 -0
  409. data/public/images/orange/left_03.png +0 -0
  410. data/public/images/orange/right_03.png +0 -0
  411. data/public/images/right_01.png +0 -0
  412. data/public/images/right_01_small.png +0 -0
  413. data/public/images/separator.png +0 -0
  414. data/public/images/shadow-top.png +0 -0
  415. data/public/images/shadow_top.png +0 -0
  416. data/public/images/steps/1.png +0 -0
  417. data/public/images/steps/1_small.png +0 -0
  418. data/public/images/steps/2.png +0 -0
  419. data/public/images/steps/2_small.png +0 -0
  420. data/public/images/steps/3.png +0 -0
  421. data/public/images/steps/3_small.png +0 -0
  422. data/public/images/steps/4.png +0 -0
  423. data/public/images/steps/4_small.png +0 -0
  424. data/public/images/steps/5.png +0 -0
  425. data/public/images/steps/5_small.png +0 -0
  426. data/public/images/steps/6.png +0 -0
  427. data/public/images/steps/6_small.png +0 -0
  428. data/public/images/sxsw-ribbon-v1.png +0 -0
  429. data/public/images/top-shine.png +0 -0
  430. data/public/images/tree-nav-icons/treeview-loading.gif +0 -0
  431. data/public/images/tree-nav-icons/treeview-sprite.gif +0 -0
  432. data/public/images/update.png +0 -0
  433. data/public/images/wrapper-back-2.png +0 -0
  434. data/public/images/wrapper-back.png +0 -0
  435. data/public/images/yui-menubaritem_submenuindicator.png +0 -0
  436. data/public/images/yui-menubaritem_submenuindicator_disabled.png +0 -0
  437. data/public/images/yui-menuitem_checkbox.png +0 -0
  438. data/public/images/yui-menuitem_checkbox_disabled.png +0 -0
  439. data/public/images/yui-menuitem_submenuindicator.png +0 -0
  440. data/public/images/yui-menuitem_submenuindicator_disabled.png +0 -0
  441. data/public/images/yui-sprite.png +0 -0
  442. data/public/javascripts/checkout.js +191 -55
  443. data/public/javascripts/nested-attribute.js +25 -0
  444. data/public/javascripts/spree-yui.js +1 -1
  445. data/public/javascripts/yui-includes.js +57 -0
  446. data/public/javascripts/zone.js +48 -0
  447. data/public/stylesheets/admin/admin-forms.css +159 -0
  448. data/public/stylesheets/admin/admin-reset.css +67 -0
  449. data/public/stylesheets/admin/admin-tables.css +31 -0
  450. data/public/stylesheets/admin/admin-typography.css +117 -0
  451. data/public/stylesheets/admin/admin.css +426 -0
  452. data/public/stylesheets/admin/david-admin.css +210 -0
  453. data/public/stylesheets/admin/grids.css +314 -0
  454. data/public/stylesheets/admin/reset-fonts-grids-2-6-0.css +7 -0
  455. data/public/stylesheets/admin/yui-includes.css +14 -0
  456. data/public/stylesheets/compiled/ie.css +25 -0
  457. data/public/stylesheets/compiled/print.css +62 -0
  458. data/public/stylesheets/compiled/screen.css +1615 -0
  459. data/public/stylesheets/sass/ie.sass +3 -0
  460. data/public/stylesheets/sass/print.sass +3 -0
  461. data/public/stylesheets/sass/screen.sass +565 -0
  462. data/{vendor/extensions/shipping/spec/controllers → spec/controllers/admin}/shipments_controller_spec.rb +3 -3
  463. data/{vendor/extensions/shipping/spec → spec}/controllers/admin/shipping_categories_controller_spec.rb +0 -0
  464. data/{vendor/extensions/shipping/spec → spec}/controllers/admin/shipping_methods_controller_spec.rb +0 -0
  465. data/spec/controllers/countries_controller_spec.rb +3 -3
  466. data/spec/controllers/orders_controller_spec.rb +11 -9
  467. data/spec/controllers/states_controller_spec.rb +3 -3
  468. data/spec/helpers/spree/base_helper_spec.rb +5 -5
  469. data/spec/lib/easy_role_requirement_system_spec.rb +2 -2
  470. data/spec/models/address_spec.rb +3 -3
  471. data/spec/models/order_spec.rb +43 -1
  472. data/spec/models/product_property_spec.rb +0 -7
  473. data/spec/models/product_spec.rb +1 -1
  474. data/{vendor/extensions/shipping/spec → spec}/models/shipment_spec.rb +0 -0
  475. data/{vendor/extensions/shipping/spec → spec}/models/shipping_category_spec.rb +0 -0
  476. data/{vendor/extensions/shipping/spec → spec}/models/shipping_method_spec.rb +0 -0
  477. data/{vendor/extensions/shipping/spec → spec}/models/shipping_order_spec.rb +13 -6
  478. data/spec/models/tax_category_spec.rb +1 -1
  479. data/spec/models/zone_spec.rb +46 -42
  480. data/vendor/extensions/localization/app/views/shared/_language_bar.html.erb +8 -10
  481. data/vendor/extensions/localization/localization_extension.rb +2 -2
  482. data/vendor/extensions/payment_gateway/app/views/admin/gateway_configurations/_form.html.erb +5 -4
  483. data/vendor/extensions/payment_gateway/app/views/admin/gateway_configurations/edit.html.erb +4 -2
  484. data/vendor/extensions/payment_gateway/app/views/admin/gateway_option_values/_options.html.erb +4 -4
  485. data/vendor/extensions/payment_gateway/lib/spree/payment_gateway.rb +2 -2
  486. data/vendor/extensions/tax_calculator/app/controllers/admin/tax_settings_controller.rb +13 -0
  487. data/vendor/extensions/tax_calculator/app/views/admin/tax_rates/index.html.erb +27 -25
  488. data/vendor/extensions/tax_calculator/app/views/admin/tax_settings/edit.html.erb +17 -0
  489. data/vendor/extensions/tax_calculator/app/views/admin/tax_settings/show.html.erb +14 -0
  490. data/vendor/extensions/tax_calculator/config/locales/en-US.yml +2 -0
  491. data/vendor/extensions/tax_calculator/config/routes.rb +1 -0
  492. data/vendor/extensions/tax_calculator/lib/spree/vat_calculator.rb +3 -8
  493. data/vendor/extensions/tax_calculator/tax_calculator_extension.rb +1 -0
  494. data/vendor/gems/haml-2.1.0/FAQ +138 -0
  495. data/vendor/gems/haml-2.1.0/MIT-LICENSE +20 -0
  496. data/vendor/gems/haml-2.1.0/README.rdoc +332 -0
  497. data/vendor/gems/haml-2.1.0/REVISION +1 -0
  498. data/vendor/gems/haml-2.1.0/Rakefile +185 -0
  499. data/vendor/gems/haml-2.1.0/VERSION +1 -0
  500. data/vendor/gems/haml-2.1.0/bin/css2sass +7 -0
  501. data/vendor/gems/haml-2.1.0/bin/haml +9 -0
  502. data/vendor/gems/haml-2.1.0/bin/html2haml +7 -0
  503. data/vendor/gems/haml-2.1.0/bin/sass +8 -0
  504. data/vendor/gems/haml-2.1.0/extra/haml-mode.el +434 -0
  505. data/vendor/gems/haml-2.1.0/extra/sass-mode.el +98 -0
  506. data/vendor/gems/haml-2.1.0/init.rb +8 -0
  507. data/vendor/gems/haml-2.1.0/lib/haml.rb +1042 -0
  508. data/vendor/gems/haml-2.1.0/lib/haml/buffer.rb +255 -0
  509. data/vendor/gems/haml-2.1.0/lib/haml/engine.rb +268 -0
  510. data/vendor/gems/haml-2.1.0/lib/haml/error.rb +22 -0
  511. data/vendor/gems/haml-2.1.0/lib/haml/exec.rb +395 -0
  512. data/vendor/gems/haml-2.1.0/lib/haml/filters.rb +276 -0
  513. data/vendor/gems/haml-2.1.0/lib/haml/helpers.rb +468 -0
  514. data/vendor/gems/haml-2.1.0/lib/haml/helpers/action_view_extensions.rb +45 -0
  515. data/vendor/gems/haml-2.1.0/lib/haml/helpers/action_view_mods.rb +181 -0
  516. data/vendor/gems/haml-2.1.0/lib/haml/html.rb +218 -0
  517. data/vendor/gems/haml-2.1.0/lib/haml/precompiler.rb +889 -0
  518. data/vendor/gems/haml-2.1.0/lib/haml/shared.rb +45 -0
  519. data/vendor/gems/haml-2.1.0/lib/haml/template.rb +51 -0
  520. data/vendor/gems/haml-2.1.0/lib/haml/template/patch.rb +58 -0
  521. data/vendor/gems/haml-2.1.0/lib/haml/template/plugin.rb +72 -0
  522. data/vendor/gems/haml-2.1.0/lib/haml/util.rb +77 -0
  523. data/vendor/gems/haml-2.1.0/lib/haml/version.rb +47 -0
  524. data/vendor/gems/haml-2.1.0/lib/sass.rb +1062 -0
  525. data/vendor/gems/haml-2.1.0/lib/sass/css.rb +388 -0
  526. data/vendor/gems/haml-2.1.0/lib/sass/engine.rb +499 -0
  527. data/vendor/gems/haml-2.1.0/lib/sass/environment.rb +33 -0
  528. data/vendor/gems/haml-2.1.0/lib/sass/error.rb +35 -0
  529. data/vendor/gems/haml-2.1.0/lib/sass/plugin.rb +203 -0
  530. data/vendor/gems/haml-2.1.0/lib/sass/plugin/merb.rb +56 -0
  531. data/vendor/gems/haml-2.1.0/lib/sass/plugin/rails.rb +24 -0
  532. data/vendor/gems/haml-2.1.0/lib/sass/repl.rb +51 -0
  533. data/vendor/gems/haml-2.1.0/lib/sass/script.rb +38 -0
  534. data/vendor/gems/haml-2.1.0/lib/sass/script/bool.rb +13 -0
  535. data/vendor/gems/haml-2.1.0/lib/sass/script/color.rb +97 -0
  536. data/vendor/gems/haml-2.1.0/lib/sass/script/funcall.rb +28 -0
  537. data/vendor/gems/haml-2.1.0/lib/sass/script/functions.rb +122 -0
  538. data/vendor/gems/haml-2.1.0/lib/sass/script/lexer.rb +152 -0
  539. data/vendor/gems/haml-2.1.0/lib/sass/script/literal.rb +60 -0
  540. data/vendor/gems/haml-2.1.0/lib/sass/script/number.rb +231 -0
  541. data/vendor/gems/haml-2.1.0/lib/sass/script/operation.rb +30 -0
  542. data/vendor/gems/haml-2.1.0/lib/sass/script/parser.rb +142 -0
  543. data/vendor/gems/haml-2.1.0/lib/sass/script/string.rb +42 -0
  544. data/vendor/gems/haml-2.1.0/lib/sass/script/unary_operation.rb +21 -0
  545. data/vendor/gems/haml-2.1.0/lib/sass/script/variable.rb +20 -0
  546. data/vendor/gems/haml-2.1.0/lib/sass/tree/attr_node.rb +64 -0
  547. data/vendor/gems/haml-2.1.0/lib/sass/tree/comment_node.rb +34 -0
  548. data/vendor/gems/haml-2.1.0/lib/sass/tree/debug_node.rb +22 -0
  549. data/vendor/gems/haml-2.1.0/lib/sass/tree/directive_node.rb +50 -0
  550. data/vendor/gems/haml-2.1.0/lib/sass/tree/file_node.rb +27 -0
  551. data/vendor/gems/haml-2.1.0/lib/sass/tree/for_node.rb +29 -0
  552. data/vendor/gems/haml-2.1.0/lib/sass/tree/if_node.rb +27 -0
  553. data/vendor/gems/haml-2.1.0/lib/sass/tree/mixin_def_node.rb +18 -0
  554. data/vendor/gems/haml-2.1.0/lib/sass/tree/mixin_node.rb +34 -0
  555. data/vendor/gems/haml-2.1.0/lib/sass/tree/node.rb +99 -0
  556. data/vendor/gems/haml-2.1.0/lib/sass/tree/rule_node.rb +120 -0
  557. data/vendor/gems/haml-2.1.0/lib/sass/tree/variable_node.rb +24 -0
  558. data/vendor/gems/haml-2.1.0/lib/sass/tree/while_node.rb +20 -0
  559. data/vendor/gems/haml-2.1.0/rails/init.rb +1 -0
  560. data/vendor/gems/haml-2.1.0/test/benchmark.rb +99 -0
  561. data/vendor/gems/haml-2.1.0/test/haml/engine_test.rb +734 -0
  562. data/vendor/gems/haml-2.1.0/test/haml/helper_test.rb +224 -0
  563. data/vendor/gems/haml-2.1.0/test/haml/html2haml_test.rb +92 -0
  564. data/vendor/gems/haml-2.1.0/test/haml/markaby/standard.mab +52 -0
  565. data/vendor/gems/haml-2.1.0/test/haml/mocks/article.rb +6 -0
  566. data/vendor/gems/haml-2.1.0/test/haml/results/content_for_layout.xhtml +15 -0
  567. data/vendor/gems/haml-2.1.0/test/haml/results/eval_suppressed.xhtml +9 -0
  568. data/vendor/gems/haml-2.1.0/test/haml/results/filters.xhtml +62 -0
  569. data/vendor/gems/haml-2.1.0/test/haml/results/helpers.xhtml +93 -0
  570. data/vendor/gems/haml-2.1.0/test/haml/results/helpful.xhtml +10 -0
  571. data/vendor/gems/haml-2.1.0/test/haml/results/just_stuff.xhtml +68 -0
  572. data/vendor/gems/haml-2.1.0/test/haml/results/list.xhtml +12 -0
  573. data/vendor/gems/haml-2.1.0/test/haml/results/nuke_inner_whitespace.xhtml +40 -0
  574. data/vendor/gems/haml-2.1.0/test/haml/results/nuke_outer_whitespace.xhtml +148 -0
  575. data/vendor/gems/haml-2.1.0/test/haml/results/original_engine.xhtml +20 -0
  576. data/vendor/gems/haml-2.1.0/test/haml/results/partial_layout.xhtml +5 -0
  577. data/vendor/gems/haml-2.1.0/test/haml/results/partials.xhtml +21 -0
  578. data/vendor/gems/haml-2.1.0/test/haml/results/render_layout.xhtml +3 -0
  579. data/vendor/gems/haml-2.1.0/test/haml/results/silent_script.xhtml +74 -0
  580. data/vendor/gems/haml-2.1.0/test/haml/results/standard.xhtml +42 -0
  581. data/vendor/gems/haml-2.1.0/test/haml/results/tag_parsing.xhtml +23 -0
  582. data/vendor/gems/haml-2.1.0/test/haml/results/very_basic.xhtml +5 -0
  583. data/vendor/gems/haml-2.1.0/test/haml/results/whitespace_handling.xhtml +89 -0
  584. data/vendor/gems/haml-2.1.0/test/haml/rhtml/_av_partial_1.rhtml +12 -0
  585. data/vendor/gems/haml-2.1.0/test/haml/rhtml/_av_partial_2.rhtml +8 -0
  586. data/vendor/gems/haml-2.1.0/test/haml/rhtml/action_view.rhtml +62 -0
  587. data/vendor/gems/haml-2.1.0/test/haml/rhtml/standard.rhtml +54 -0
  588. data/vendor/gems/haml-2.1.0/test/haml/template_test.rb +204 -0
  589. data/vendor/gems/haml-2.1.0/test/haml/templates/_av_partial_1.haml +9 -0
  590. data/vendor/gems/haml-2.1.0/test/haml/templates/_av_partial_1_ugly.haml +9 -0
  591. data/vendor/gems/haml-2.1.0/test/haml/templates/_av_partial_2.haml +5 -0
  592. data/vendor/gems/haml-2.1.0/test/haml/templates/_av_partial_2_ugly.haml +5 -0
  593. data/vendor/gems/haml-2.1.0/test/haml/templates/_layout.erb +3 -0
  594. data/vendor/gems/haml-2.1.0/test/haml/templates/_layout_for_partial.haml +3 -0
  595. data/vendor/gems/haml-2.1.0/test/haml/templates/_partial.haml +8 -0
  596. data/vendor/gems/haml-2.1.0/test/haml/templates/_text_area.haml +3 -0
  597. data/vendor/gems/haml-2.1.0/test/haml/templates/action_view.haml +47 -0
  598. data/vendor/gems/haml-2.1.0/test/haml/templates/action_view_ugly.haml +47 -0
  599. data/vendor/gems/haml-2.1.0/test/haml/templates/breakage.haml +8 -0
  600. data/vendor/gems/haml-2.1.0/test/haml/templates/content_for_layout.haml +10 -0
  601. data/vendor/gems/haml-2.1.0/test/haml/templates/eval_suppressed.haml +11 -0
  602. data/vendor/gems/haml-2.1.0/test/haml/templates/filters.haml +66 -0
  603. data/vendor/gems/haml-2.1.0/test/haml/templates/helpers.haml +95 -0
  604. data/vendor/gems/haml-2.1.0/test/haml/templates/helpful.haml +11 -0
  605. data/vendor/gems/haml-2.1.0/test/haml/templates/just_stuff.haml +83 -0
  606. data/vendor/gems/haml-2.1.0/test/haml/templates/list.haml +12 -0
  607. data/vendor/gems/haml-2.1.0/test/haml/templates/nuke_inner_whitespace.haml +32 -0
  608. data/vendor/gems/haml-2.1.0/test/haml/templates/nuke_outer_whitespace.haml +144 -0
  609. data/vendor/gems/haml-2.1.0/test/haml/templates/original_engine.haml +17 -0
  610. data/vendor/gems/haml-2.1.0/test/haml/templates/partial_layout.haml +3 -0
  611. data/vendor/gems/haml-2.1.0/test/haml/templates/partialize.haml +1 -0
  612. data/vendor/gems/haml-2.1.0/test/haml/templates/partials.haml +12 -0
  613. data/vendor/gems/haml-2.1.0/test/haml/templates/render_layout.haml +2 -0
  614. data/vendor/gems/haml-2.1.0/test/haml/templates/silent_script.haml +40 -0
  615. data/vendor/gems/haml-2.1.0/test/haml/templates/standard.haml +42 -0
  616. data/vendor/gems/haml-2.1.0/test/haml/templates/standard_ugly.haml +42 -0
  617. data/vendor/gems/haml-2.1.0/test/haml/templates/tag_parsing.haml +21 -0
  618. data/vendor/gems/haml-2.1.0/test/haml/templates/very_basic.haml +4 -0
  619. data/vendor/gems/haml-2.1.0/test/haml/templates/whitespace_handling.haml +87 -0
  620. data/vendor/gems/haml-2.1.0/test/linked_rails.rb +12 -0
  621. data/vendor/gems/haml-2.1.0/test/sass/css2sass_test.rb +193 -0
  622. data/vendor/gems/haml-2.1.0/test/sass/engine_test.rb +769 -0
  623. data/vendor/gems/haml-2.1.0/test/sass/functions_test.rb +96 -0
  624. data/vendor/gems/haml-2.1.0/test/sass/more_results/more1.css +9 -0
  625. data/vendor/gems/haml-2.1.0/test/sass/more_results/more1_with_line_comments.css +26 -0
  626. data/vendor/gems/haml-2.1.0/test/sass/more_results/more_import.css +29 -0
  627. data/vendor/gems/haml-2.1.0/test/sass/more_templates/_more_partial.sass +2 -0
  628. data/vendor/gems/haml-2.1.0/test/sass/more_templates/more1.sass +23 -0
  629. data/vendor/gems/haml-2.1.0/test/sass/more_templates/more_import.sass +11 -0
  630. data/vendor/gems/haml-2.1.0/test/sass/plugin_test.rb +208 -0
  631. data/vendor/gems/haml-2.1.0/test/sass/results/alt.css +4 -0
  632. data/vendor/gems/haml-2.1.0/test/sass/results/basic.css +9 -0
  633. data/vendor/gems/haml-2.1.0/test/sass/results/compact.css +5 -0
  634. data/vendor/gems/haml-2.1.0/test/sass/results/complex.css +87 -0
  635. data/vendor/gems/haml-2.1.0/test/sass/results/compressed.css +1 -0
  636. data/vendor/gems/haml-2.1.0/test/sass/results/expanded.css +19 -0
  637. data/vendor/gems/haml-2.1.0/test/sass/results/import.css +29 -0
  638. data/vendor/gems/haml-2.1.0/test/sass/results/line_numbers.css +49 -0
  639. data/vendor/gems/haml-2.1.0/test/sass/results/mixins.css +95 -0
  640. data/vendor/gems/haml-2.1.0/test/sass/results/multiline.css +24 -0
  641. data/vendor/gems/haml-2.1.0/test/sass/results/nested.css +22 -0
  642. data/vendor/gems/haml-2.1.0/test/sass/results/parent_ref.css +13 -0
  643. data/vendor/gems/haml-2.1.0/test/sass/results/script.css +16 -0
  644. data/vendor/gems/haml-2.1.0/test/sass/results/subdir/nested_subdir/nested_subdir.css +1 -0
  645. data/vendor/gems/haml-2.1.0/test/sass/results/subdir/subdir.css +3 -0
  646. data/vendor/gems/haml-2.1.0/test/sass/results/units.css +11 -0
  647. data/vendor/gems/haml-2.1.0/test/sass/script_test.rb +153 -0
  648. data/vendor/gems/haml-2.1.0/test/sass/templates/_partial.sass +2 -0
  649. data/vendor/gems/haml-2.1.0/test/sass/templates/alt.sass +16 -0
  650. data/vendor/gems/haml-2.1.0/test/sass/templates/basic.sass +23 -0
  651. data/vendor/gems/haml-2.1.0/test/sass/templates/bork.sass +2 -0
  652. data/vendor/gems/haml-2.1.0/test/sass/templates/bork2.sass +2 -0
  653. data/vendor/gems/haml-2.1.0/test/sass/templates/compact.sass +17 -0
  654. data/vendor/gems/haml-2.1.0/test/sass/templates/complex.sass +309 -0
  655. data/vendor/gems/haml-2.1.0/test/sass/templates/compressed.sass +15 -0
  656. data/vendor/gems/haml-2.1.0/test/sass/templates/expanded.sass +17 -0
  657. data/vendor/gems/haml-2.1.0/test/sass/templates/import.sass +11 -0
  658. data/vendor/gems/haml-2.1.0/test/sass/templates/importee.sass +19 -0
  659. data/vendor/gems/haml-2.1.0/test/sass/templates/line_numbers.sass +13 -0
  660. data/vendor/gems/haml-2.1.0/test/sass/templates/mixins.sass +76 -0
  661. data/vendor/gems/haml-2.1.0/test/sass/templates/multiline.sass +20 -0
  662. data/vendor/gems/haml-2.1.0/test/sass/templates/nested.sass +25 -0
  663. data/vendor/gems/haml-2.1.0/test/sass/templates/parent_ref.sass +25 -0
  664. data/vendor/gems/haml-2.1.0/test/sass/templates/script.sass +101 -0
  665. data/vendor/gems/haml-2.1.0/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +2 -0
  666. data/vendor/gems/haml-2.1.0/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +3 -0
  667. data/vendor/gems/haml-2.1.0/test/sass/templates/subdir/subdir.sass +6 -0
  668. data/vendor/gems/haml-2.1.0/test/sass/templates/units.sass +11 -0
  669. data/vendor/gems/haml-2.1.0/test/test_helper.rb +21 -0
  670. data/vendor/plugins/enumerable_constants/lib/enumerable_constants.rb +1 -1
  671. data/vendor/plugins/find_by_param/README.markdown +1 -1
  672. metadata +544 -427
  673. data/app/controllers/account_controller.rb +0 -31
  674. data/app/controllers/checkout_controller.rb +0 -96
  675. data/app/helpers/payments_helper.rb +0 -2
  676. data/app/helpers/store_helper.rb +0 -3
  677. data/app/helpers/tax_categories_helper.rb +0 -2
  678. data/app/helpers/users_helper.rb +0 -2
  679. data/app/presenters/checkout_presenter.rb +0 -58
  680. data/app/presenters/payment_presenter.rb +0 -3
  681. data/app/views/admin/zones/_country.html.erb +0 -15
  682. data/app/views/admin/zones/_function.rjs +0 -11
  683. data/app/views/admin/zones/_state.html.erb +0 -15
  684. data/app/views/admin/zones/_zone.html.erb +0 -15
  685. data/app/views/admin/zones/index.js.erb +0 -1
  686. data/app/views/admin/zones/show.html.erb +0 -4
  687. data/app/views/checkout/_billing.html.erb +0 -49
  688. data/app/views/checkout/_form.html.erb +0 -33
  689. data/app/views/checkout/_payment.erb +0 -24
  690. data/app/views/checkout/_shipping.html.erb +0 -50
  691. data/app/views/checkout/_shipping_method.html.erb +0 -5
  692. data/app/views/checkout/new.html.erb +0 -6
  693. data/app/views/shared/_address.html.erb +0 -35
  694. data/app/views/shared/_form_address.html.erb +0 -46
  695. data/app/views/shared/_states.html.erb +0 -14
  696. data/app/views/users/index.html.erb +0 -21
  697. data/lib/authenticated_system.rb +0 -124
  698. data/lib/authenticated_test_helper.rb +0 -10
  699. data/public/stylesheets/checkout.css +0 -25
  700. data/public/stylesheets/fullscreen.css +0 -63
  701. data/public/stylesheets/orders/_controller.css +0 -82
  702. data/public/stylesheets/prototypes/_controller.css +0 -9
  703. data/public/stylesheets/spree-admin.css +0 -563
  704. data/public/stylesheets/spree.css +0 -420
  705. data/spec/helpers/tax_categories_helper_spec.rb +0 -11
  706. data/spec/views/admin/mail_settings/edit.html.erb_spec.rb +0 -14
  707. data/spec/views/admin/mail_settings/show.html.erb_spec.rb +0 -12
  708. data/spec/views/admin/products/edit.html.erb_spec.rb +0 -88
  709. data/spec/views/admin/variants/eidt.html.erb_spec.rb +0 -90
  710. data/vendor/extensions/shipping/README.markdown +0 -3
  711. data/vendor/extensions/shipping/Rakefile +0 -120
  712. data/vendor/extensions/shipping/app/controllers/admin/shipments_controller.rb +0 -68
  713. data/vendor/extensions/shipping/app/models/shipment_presenter.rb +0 -3
  714. data/vendor/extensions/shipping/app/views/admin/shipments/_form.html.erb +0 -35
  715. data/vendor/extensions/shipping/app/views/admin/shipments/edit.html.erb +0 -11
  716. data/vendor/extensions/shipping/app/views/admin/shipments/new.html.erb +0 -12
  717. data/vendor/extensions/shipping/app/views/admin/shipping_categories/index.html.erb +0 -24
  718. data/vendor/extensions/shipping/app/views/admin/shipping_methods/index.html.erb +0 -28
  719. data/vendor/extensions/shipping/config/locales/de.yml +0 -25
  720. data/vendor/extensions/shipping/config/locales/en-GB.yml +0 -25
  721. data/vendor/extensions/shipping/config/locales/en-US.yml +0 -25
  722. data/vendor/extensions/shipping/config/locales/es.yml +0 -25
  723. data/vendor/extensions/shipping/config/locales/it.yml +0 -25
  724. data/vendor/extensions/shipping/config/locales/nb-NO.yml +0 -25
  725. data/vendor/extensions/shipping/config/locales/pl.yml +0 -25
  726. data/vendor/extensions/shipping/config/locales/pt-BR.yml +0 -25
  727. data/vendor/extensions/shipping/config/locales/ru-RU.yml +0 -25
  728. data/vendor/extensions/shipping/config/routes.rb +0 -10
  729. data/vendor/extensions/shipping/db/sample/addresses.yml +0 -14
  730. data/vendor/extensions/shipping/db/sample/zone_members.yml +0 -16
  731. data/vendor/extensions/shipping/lib/spree/shipping_calculator.rb +0 -28
  732. data/vendor/extensions/shipping/lib/tasks/shipping_extension_tasks.rake +0 -29
  733. data/vendor/extensions/shipping/shipping_extension.rb +0 -40
  734. data/vendor/extensions/shipping/spec/spec.opts +0 -6
  735. data/vendor/extensions/shipping/spec/spec_helper.rb +0 -37
  736. data/vendor/extensions/tax_calculator/spec/controllers/admin/tax_rates_controller_spec.rb +0 -22
  737. data/vendor/extensions/tax_calculator/spec/models/order_tax_calc_spec.rb +0 -22
  738. data/vendor/gems/active_presenter-0.0.6/.specification +0 -64
  739. data/vendor/gems/active_presenter-0.0.6/LICENSE +0 -22
  740. data/vendor/gems/active_presenter-0.0.6/README +0 -82
  741. data/vendor/gems/active_presenter-0.0.6/Rakefile +0 -10
  742. data/vendor/gems/active_presenter-0.0.6/lib/active_presenter.rb +0 -7
  743. data/vendor/gems/active_presenter-0.0.6/lib/active_presenter/base.rb +0 -204
  744. data/vendor/gems/active_presenter-0.0.6/lib/active_presenter/version.rb +0 -9
  745. data/vendor/gems/active_presenter-0.0.6/lib/tasks/doc.rake +0 -19
  746. data/vendor/gems/active_presenter-0.0.6/lib/tasks/gem.rake +0 -62
  747. data/vendor/gems/active_presenter-0.0.6/test/base_test.rb +0 -188
  748. data/vendor/gems/active_presenter-0.0.6/test/test_helper.rb +0 -74
  749. data/vendor/plugins/calendar_date_select/History.txt +0 -231
  750. data/vendor/plugins/calendar_date_select/Manifest.txt +0 -42
  751. data/vendor/plugins/calendar_date_select/Rakefile +0 -31
  752. data/vendor/plugins/calendar_date_select/Readme.txt +0 -16
  753. data/vendor/plugins/calendar_date_select/calendar_date_select.gemspec +0 -33
  754. data/vendor/plugins/calendar_date_select/init.rb +0 -1
  755. data/vendor/plugins/calendar_date_select/js_test/functional/cds_test.html +0 -334
  756. data/vendor/plugins/calendar_date_select/js_test/prototype.js +0 -4184
  757. data/vendor/plugins/calendar_date_select/js_test/test.css +0 -40
  758. data/vendor/plugins/calendar_date_select/js_test/unit/cds_helper_methods.html +0 -46
  759. data/vendor/plugins/calendar_date_select/js_test/unittest.js +0 -564
  760. data/vendor/plugins/calendar_date_select/lib/calendar_date_select.rb +0 -33
  761. data/vendor/plugins/calendar_date_select/lib/calendar_date_select/calendar_date_select.rb +0 -116
  762. data/vendor/plugins/calendar_date_select/lib/calendar_date_select/form_helpers.rb +0 -223
  763. data/vendor/plugins/calendar_date_select/lib/calendar_date_select/includes_helper.rb +0 -29
  764. data/vendor/plugins/calendar_date_select/public/blank_iframe.html +0 -2
  765. data/vendor/plugins/calendar_date_select/public/images/calendar_date_select/calendar.gif +0 -0
  766. data/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/calendar_date_select.js +0 -443
  767. data/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_american.js +0 -34
  768. data/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_db.js +0 -27
  769. data/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_euro_24hr.js +0 -7
  770. data/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_euro_24hr_ymd.js +0 -7
  771. data/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_finnish.js +0 -32
  772. data/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_hyphen_ampm.js +0 -36
  773. data/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_iso_date.js +0 -46
  774. data/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_italian.js +0 -24
  775. data/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/locale/de.js +0 -11
  776. data/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/locale/fi.js +0 -10
  777. data/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/locale/fr.js +0 -10
  778. data/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/locale/pl.js +0 -10
  779. data/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/locale/pt.js +0 -11
  780. data/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/locale/ru.js +0 -10
  781. data/vendor/plugins/calendar_date_select/public/stylesheets/calendar_date_select/blue.css +0 -130
  782. data/vendor/plugins/calendar_date_select/public/stylesheets/calendar_date_select/default.css +0 -135
  783. data/vendor/plugins/calendar_date_select/public/stylesheets/calendar_date_select/plain.css +0 -128
  784. data/vendor/plugins/calendar_date_select/public/stylesheets/calendar_date_select/red.css +0 -135
  785. data/vendor/plugins/calendar_date_select/public/stylesheets/calendar_date_select/silver.css +0 -133
  786. data/vendor/plugins/calendar_date_select/spec/calendar_date_select/calendar_date_select_spec.rb +0 -14
  787. data/vendor/plugins/calendar_date_select/spec/calendar_date_select/form_helpers_spec.rb +0 -161
  788. data/vendor/plugins/calendar_date_select/spec/spec_helper.rb +0 -26
  789. data/vendor/plugins/has_many_polymorphs/CHANGELOG +0 -83
  790. data/vendor/plugins/has_many_polymorphs/LICENSE +0 -184
  791. data/vendor/plugins/has_many_polymorphs/Manifest +0 -174
  792. data/vendor/plugins/has_many_polymorphs/README +0 -205
  793. data/vendor/plugins/has_many_polymorphs/Rakefile +0 -28
  794. data/vendor/plugins/has_many_polymorphs/TODO +0 -2
  795. data/vendor/plugins/has_many_polymorphs/examples/hmph.rb +0 -69
  796. data/vendor/plugins/has_many_polymorphs/generators/tagging/tagging_generator.rb +0 -97
  797. data/vendor/plugins/has_many_polymorphs/generators/tagging/templates/migration.rb +0 -28
  798. data/vendor/plugins/has_many_polymorphs/generators/tagging/templates/tag.rb +0 -39
  799. data/vendor/plugins/has_many_polymorphs/generators/tagging/templates/tag_test.rb +0 -15
  800. data/vendor/plugins/has_many_polymorphs/generators/tagging/templates/tagging.rb +0 -16
  801. data/vendor/plugins/has_many_polymorphs/generators/tagging/templates/tagging_extensions.rb +0 -159
  802. data/vendor/plugins/has_many_polymorphs/generators/tagging/templates/tagging_test.rb +0 -85
  803. data/vendor/plugins/has_many_polymorphs/generators/tagging/templates/taggings.yml +0 -23
  804. data/vendor/plugins/has_many_polymorphs/generators/tagging/templates/tags.yml +0 -7
  805. data/vendor/plugins/has_many_polymorphs/init.rb +0 -2
  806. data/vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs.rb +0 -27
  807. data/vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/association.rb +0 -159
  808. data/vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/autoload.rb +0 -70
  809. data/vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/base.rb +0 -60
  810. data/vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/class_methods.rb +0 -600
  811. data/vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/configuration.rb +0 -19
  812. data/vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/debugging_tools.rb +0 -103
  813. data/vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/rake_task_redefine_task.rb +0 -35
  814. data/vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/reflection.rb +0 -58
  815. data/vendor/plugins/has_many_polymorphs/lib/has_many_polymorphs/support_methods.rb +0 -84
  816. data/vendor/plugins/has_many_polymorphs/test/fixtures/bow_wows.yml +0 -10
  817. data/vendor/plugins/has_many_polymorphs/test/fixtures/cats.yml +0 -18
  818. data/vendor/plugins/has_many_polymorphs/test/fixtures/fish.yml +0 -12
  819. data/vendor/plugins/has_many_polymorphs/test/fixtures/frogs.yml +0 -5
  820. data/vendor/plugins/has_many_polymorphs/test/fixtures/keep_your_enemies_close.yml +0 -0
  821. data/vendor/plugins/has_many_polymorphs/test/fixtures/little_whale_pupils.yml +0 -0
  822. data/vendor/plugins/has_many_polymorphs/test/fixtures/people.yml +0 -7
  823. data/vendor/plugins/has_many_polymorphs/test/fixtures/petfoods.yml +0 -11
  824. data/vendor/plugins/has_many_polymorphs/test/fixtures/whales.yml +0 -5
  825. data/vendor/plugins/has_many_polymorphs/test/fixtures/wild_boars.yml +0 -10
  826. data/vendor/plugins/has_many_polymorphs/test/generator/tagging_generator_test.rb +0 -42
  827. data/vendor/plugins/has_many_polymorphs/test/integration/app/README +0 -182
  828. data/vendor/plugins/has_many_polymorphs/test/integration/app/Rakefile +0 -19
  829. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/controllers/application.rb +0 -7
  830. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/controllers/bones_controller.rb +0 -5
  831. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/helpers/addresses_helper.rb +0 -2
  832. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/helpers/application_helper.rb +0 -3
  833. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/helpers/bones_helper.rb +0 -2
  834. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/helpers/sellers_helper.rb +0 -28
  835. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/helpers/states_helper.rb +0 -2
  836. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/helpers/users_helper.rb +0 -2
  837. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/models/bone.rb +0 -2
  838. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/models/double_sti_parent.rb +0 -2
  839. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/models/double_sti_parent_relationship.rb +0 -2
  840. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/models/organic_substance.rb +0 -2
  841. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/models/single_sti_parent.rb +0 -4
  842. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/models/single_sti_parent_relationship.rb +0 -4
  843. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/models/stick.rb +0 -2
  844. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/models/stone.rb +0 -2
  845. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/addresses/edit.html.erb +0 -12
  846. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/addresses/index.html.erb +0 -18
  847. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/addresses/new.html.erb +0 -11
  848. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/addresses/show.html.erb +0 -3
  849. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/bones/index.rhtml +0 -5
  850. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/layouts/addresses.html.erb +0 -17
  851. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/layouts/sellers.html.erb +0 -17
  852. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/layouts/states.html.erb +0 -17
  853. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/layouts/users.html.erb +0 -17
  854. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/sellers/edit.html.erb +0 -12
  855. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/sellers/index.html.erb +0 -20
  856. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/sellers/new.html.erb +0 -11
  857. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/sellers/show.html.erb +0 -3
  858. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/states/edit.html.erb +0 -12
  859. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/states/index.html.erb +0 -19
  860. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/states/new.html.erb +0 -11
  861. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/states/show.html.erb +0 -3
  862. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/users/edit.html.erb +0 -12
  863. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/users/index.html.erb +0 -22
  864. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/users/new.html.erb +0 -11
  865. data/vendor/plugins/has_many_polymorphs/test/integration/app/app/views/users/show.html.erb +0 -3
  866. data/vendor/plugins/has_many_polymorphs/test/integration/app/config/boot.rb +0 -110
  867. data/vendor/plugins/has_many_polymorphs/test/integration/app/config/database.yml +0 -17
  868. data/vendor/plugins/has_many_polymorphs/test/integration/app/config/environment.rb +0 -19
  869. data/vendor/plugins/has_many_polymorphs/test/integration/app/config/environment.rb.canonical +0 -19
  870. data/vendor/plugins/has_many_polymorphs/test/integration/app/config/environments/development.rb +0 -8
  871. data/vendor/plugins/has_many_polymorphs/test/integration/app/config/environments/production.rb +0 -18
  872. data/vendor/plugins/has_many_polymorphs/test/integration/app/config/environments/test.rb +0 -19
  873. data/vendor/plugins/has_many_polymorphs/test/integration/app/config/routes.rb +0 -33
  874. data/vendor/plugins/has_many_polymorphs/test/integration/app/config/ultrasphinx/default.base +0 -56
  875. data/vendor/plugins/has_many_polymorphs/test/integration/app/config/ultrasphinx/development.conf.canonical +0 -155
  876. data/vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/001_create_sticks.rb +0 -11
  877. data/vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/002_create_stones.rb +0 -11
  878. data/vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/003_create_organic_substances.rb +0 -11
  879. data/vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/004_create_bones.rb +0 -8
  880. data/vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/005_create_single_sti_parents.rb +0 -11
  881. data/vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/006_create_double_sti_parents.rb +0 -11
  882. data/vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/007_create_single_sti_parent_relationships.rb +0 -13
  883. data/vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/008_create_double_sti_parent_relationships.rb +0 -14
  884. data/vendor/plugins/has_many_polymorphs/test/integration/app/db/migrate/009_create_library_model.rb +0 -11
  885. data/vendor/plugins/has_many_polymorphs/test/integration/app/doc/README_FOR_APP +0 -2
  886. data/vendor/plugins/has_many_polymorphs/test/integration/app/generators/commenting_generator_test.rb +0 -83
  887. data/vendor/plugins/has_many_polymorphs/test/integration/app/lib/library_model.rb +0 -2
  888. data/vendor/plugins/has_many_polymorphs/test/integration/app/public/404.html +0 -30
  889. data/vendor/plugins/has_many_polymorphs/test/integration/app/public/500.html +0 -30
  890. data/vendor/plugins/has_many_polymorphs/test/integration/app/public/dispatch.cgi +0 -10
  891. data/vendor/plugins/has_many_polymorphs/test/integration/app/public/dispatch.fcgi +0 -24
  892. data/vendor/plugins/has_many_polymorphs/test/integration/app/public/dispatch.rb +0 -10
  893. data/vendor/plugins/has_many_polymorphs/test/integration/app/public/favicon.ico +0 -0
  894. data/vendor/plugins/has_many_polymorphs/test/integration/app/public/images/rails.png +0 -0
  895. data/vendor/plugins/has_many_polymorphs/test/integration/app/public/index.html +0 -277
  896. data/vendor/plugins/has_many_polymorphs/test/integration/app/public/javascripts/application.js +0 -2
  897. data/vendor/plugins/has_many_polymorphs/test/integration/app/public/javascripts/controls.js +0 -833
  898. data/vendor/plugins/has_many_polymorphs/test/integration/app/public/javascripts/dragdrop.js +0 -942
  899. data/vendor/plugins/has_many_polymorphs/test/integration/app/public/javascripts/effects.js +0 -1088
  900. data/vendor/plugins/has_many_polymorphs/test/integration/app/public/javascripts/prototype.js +0 -2515
  901. data/vendor/plugins/has_many_polymorphs/test/integration/app/public/robots.txt +0 -1
  902. data/vendor/plugins/has_many_polymorphs/test/integration/app/public/stylesheets/scaffold.css +0 -74
  903. data/vendor/plugins/has_many_polymorphs/test/integration/app/script/about +0 -3
  904. data/vendor/plugins/has_many_polymorphs/test/integration/app/script/breakpointer +0 -3
  905. data/vendor/plugins/has_many_polymorphs/test/integration/app/script/console +0 -3
  906. data/vendor/plugins/has_many_polymorphs/test/integration/app/script/destroy +0 -3
  907. data/vendor/plugins/has_many_polymorphs/test/integration/app/script/generate +0 -3
  908. data/vendor/plugins/has_many_polymorphs/test/integration/app/script/performance/benchmarker +0 -3
  909. data/vendor/plugins/has_many_polymorphs/test/integration/app/script/performance/profiler +0 -3
  910. data/vendor/plugins/has_many_polymorphs/test/integration/app/script/plugin +0 -3
  911. data/vendor/plugins/has_many_polymorphs/test/integration/app/script/process/inspector +0 -3
  912. data/vendor/plugins/has_many_polymorphs/test/integration/app/script/process/reaper +0 -3
  913. data/vendor/plugins/has_many_polymorphs/test/integration/app/script/process/spawner +0 -3
  914. data/vendor/plugins/has_many_polymorphs/test/integration/app/script/runner +0 -3
  915. data/vendor/plugins/has_many_polymorphs/test/integration/app/script/server +0 -3
  916. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/fixtures/double_sti_parent_relationships.yml +0 -7
  917. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/fixtures/double_sti_parents.yml +0 -7
  918. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/fixtures/organic_substances.yml +0 -5
  919. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/fixtures/single_sti_parent_relationships.yml +0 -7
  920. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/fixtures/single_sti_parents.yml +0 -7
  921. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/fixtures/sticks.yml +0 -7
  922. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/fixtures/stones.yml +0 -7
  923. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/functional/addresses_controller_test.rb +0 -57
  924. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/functional/bones_controller_test.rb +0 -8
  925. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/functional/sellers_controller_test.rb +0 -57
  926. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/functional/states_controller_test.rb +0 -57
  927. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/functional/users_controller_test.rb +0 -57
  928. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/test_helper.rb +0 -8
  929. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/bone_test.rb +0 -8
  930. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/double_sti_parent_relationship_test.rb +0 -8
  931. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/double_sti_parent_test.rb +0 -8
  932. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/organic_substance_test.rb +0 -8
  933. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/single_sti_parent_relationship_test.rb +0 -8
  934. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/single_sti_parent_test.rb +0 -8
  935. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/stick_test.rb +0 -8
  936. data/vendor/plugins/has_many_polymorphs/test/integration/app/test/unit/stone_test.rb +0 -8
  937. data/vendor/plugins/has_many_polymorphs/test/integration/server_test.rb +0 -43
  938. data/vendor/plugins/has_many_polymorphs/test/models/aquatic/fish.rb +0 -5
  939. data/vendor/plugins/has_many_polymorphs/test/models/aquatic/pupils_whale.rb +0 -7
  940. data/vendor/plugins/has_many_polymorphs/test/models/aquatic/whale.rb +0 -15
  941. data/vendor/plugins/has_many_polymorphs/test/models/beautiful_fight_relationship.rb +0 -26
  942. data/vendor/plugins/has_many_polymorphs/test/models/canine.rb +0 -9
  943. data/vendor/plugins/has_many_polymorphs/test/models/cat.rb +0 -5
  944. data/vendor/plugins/has_many_polymorphs/test/models/dog.rb +0 -18
  945. data/vendor/plugins/has_many_polymorphs/test/models/eaters_foodstuff.rb +0 -10
  946. data/vendor/plugins/has_many_polymorphs/test/models/frog.rb +0 -4
  947. data/vendor/plugins/has_many_polymorphs/test/models/kitten.rb +0 -3
  948. data/vendor/plugins/has_many_polymorphs/test/models/parentship.rb +0 -4
  949. data/vendor/plugins/has_many_polymorphs/test/models/person.rb +0 -9
  950. data/vendor/plugins/has_many_polymorphs/test/models/petfood.rb +0 -39
  951. data/vendor/plugins/has_many_polymorphs/test/models/tabby.rb +0 -2
  952. data/vendor/plugins/has_many_polymorphs/test/models/wild_boar.rb +0 -3
  953. data/vendor/plugins/has_many_polymorphs/test/modules/extension_module.rb +0 -9
  954. data/vendor/plugins/has_many_polymorphs/test/modules/other_extension_module.rb +0 -9
  955. data/vendor/plugins/has_many_polymorphs/test/patches/symlinked_plugins_1.2.6.diff +0 -46
  956. data/vendor/plugins/has_many_polymorphs/test/schema.rb +0 -87
  957. data/vendor/plugins/has_many_polymorphs/test/setup.rb +0 -14
  958. data/vendor/plugins/has_many_polymorphs/test/test_helper.rb +0 -51
  959. data/vendor/plugins/has_many_polymorphs/test/unit/has_many_polymorphs_test.rb +0 -714
@@ -0,0 +1,45 @@
1
+ require 'haml/helpers/action_view_mods'
2
+
3
+ if defined?(ActionView)
4
+ module Haml
5
+ module Helpers
6
+ # This module contains various useful helper methods
7
+ # that either tie into ActionView or the rest of the ActionPack stack,
8
+ # or are only useful in that context.
9
+ # Thus, the methods defined here are only available
10
+ # if ActionView is installed.
11
+ module ActionViewExtensions
12
+ # Returns a value for the "class" attribute
13
+ # unique to this controller/action pair.
14
+ # This can be used to target styles specifically at this action or controller.
15
+ # For example, if the current action were EntryController#show,
16
+ #
17
+ # %div{:class => page_class} My Div
18
+ #
19
+ # would become
20
+ #
21
+ # <div class="entry show">My Div</div>
22
+ #
23
+ # Then, in a stylesheet
24
+ # (shown here as Sass),
25
+ # you could refer to this specific action:
26
+ #
27
+ # .entry.show
28
+ # :font-weight bold
29
+ #
30
+ # or to all actions in the entry controller:
31
+ #
32
+ # .entry
33
+ # :color #00f
34
+ #
35
+ def page_class
36
+ controller.controller_name + " " + controller.action_name
37
+ end
38
+
39
+ # :stopdoc:
40
+ alias_method :generate_content_class_names, :page_class
41
+ # :startdoc:
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,181 @@
1
+ if defined?(ActionView) and not defined?(Merb::Plugins)
2
+ module ActionView
3
+ class Base # :nodoc:
4
+ def render_with_haml(*args, &block)
5
+ options = args.first
6
+
7
+ # If render :layout is used with a block,
8
+ # it concats rather than returning a string
9
+ # so we need it to keep thinking it's Haml
10
+ # until it hits the sub-render
11
+ if is_haml? && !(options.is_a?(Hash) && options[:layout] && block_given?)
12
+ return non_haml { render_without_haml(*args, &block) }
13
+ end
14
+ render_without_haml(*args, &block)
15
+ end
16
+ alias_method :render_without_haml, :render
17
+ alias_method :render, :render_with_haml
18
+
19
+ # Rails >2.1
20
+ if Haml::Util.has?(:instance_method, self, :output_buffer)
21
+ def output_buffer_with_haml
22
+ return haml_buffer.buffer if is_haml?
23
+ output_buffer_without_haml
24
+ end
25
+ alias_method :output_buffer_without_haml, :output_buffer
26
+ alias_method :output_buffer, :output_buffer_with_haml
27
+
28
+ def set_output_buffer_with_haml(new)
29
+ if is_haml?
30
+ haml_buffer.buffer = new
31
+ else
32
+ set_output_buffer_without_haml new
33
+ end
34
+ end
35
+ alias_method :set_output_buffer_without_haml, :output_buffer=
36
+ alias_method :output_buffer=, :set_output_buffer_with_haml
37
+ end
38
+ end
39
+
40
+ # This overrides various helpers in ActionView
41
+ # to make them work more effectively with Haml.
42
+ module Helpers
43
+ # :stopdoc:
44
+ # In Rails <=2.1, we've got to override considerable capturing infrastructure.
45
+ # In Rails >2.1, we can make do with only overriding #capture
46
+ # (which no longer behaves differently in helper contexts).
47
+ unless Haml::Util.has?(:instance_method, ActionView::Base, :output_buffer)
48
+ module CaptureHelper
49
+ def capture_with_haml(*args, &block)
50
+ # Rails' #capture helper will just return the value of the block
51
+ # if it's not actually in the template context,
52
+ # as detected by the existance of an _erbout variable.
53
+ # We've got to do the same thing for compatibility.
54
+
55
+ if is_haml? && block_is_haml?(block)
56
+ capture_haml(*args, &block)
57
+ else
58
+ capture_without_haml(*args, &block)
59
+ end
60
+ end
61
+ alias_method :capture_without_haml, :capture
62
+ alias_method :capture, :capture_with_haml
63
+
64
+ def capture_erb_with_buffer_with_haml(buffer, *args, &block)
65
+ if is_haml?
66
+ capture_haml(*args, &block)
67
+ else
68
+ capture_erb_with_buffer_without_haml(buffer, *args, &block)
69
+ end
70
+ end
71
+ alias_method :capture_erb_with_buffer_without_haml, :capture_erb_with_buffer
72
+ alias_method :capture_erb_with_buffer, :capture_erb_with_buffer_with_haml
73
+ end
74
+
75
+ module TextHelper
76
+ def concat_with_haml(string, binding = nil)
77
+ if is_haml?
78
+ haml_buffer.buffer.concat(string)
79
+ else
80
+ concat_without_haml(string, binding)
81
+ end
82
+ end
83
+ alias_method :concat_without_haml, :concat
84
+ alias_method :concat, :concat_with_haml
85
+ end
86
+ else
87
+ module CaptureHelper
88
+ def capture_with_haml(*args, &block)
89
+ if Haml::Helpers.block_is_haml?(block)
90
+ capture_haml(*args, &block)
91
+ else
92
+ capture_without_haml(*args, &block)
93
+ end
94
+ end
95
+ alias_method :capture_without_haml, :capture
96
+ alias_method :capture, :capture_with_haml
97
+ end
98
+ end
99
+
100
+ module TagHelper
101
+ def content_tag_with_haml(name, *args, &block)
102
+ return content_tag_without_haml(name, *args, &block) unless is_haml?
103
+
104
+ preserve = haml_buffer.options[:preserve].include?(name.to_s)
105
+
106
+ if block_given? && block_is_haml?(block) && preserve
107
+ return content_tag_without_haml(name, *args) {preserve(&block)}
108
+ end
109
+
110
+ returning content_tag_without_haml(name, *args, &block) do |content|
111
+ return Haml::Helpers.preserve(content) if preserve && content
112
+ end
113
+ end
114
+
115
+ alias_method :content_tag_without_haml, :content_tag
116
+ alias_method :content_tag, :content_tag_with_haml
117
+ end
118
+
119
+ class InstanceTag
120
+ # Includes TagHelper
121
+
122
+ def haml_buffer
123
+ @template_object.send :haml_buffer
124
+ end
125
+
126
+ def is_haml?
127
+ @template_object.send :is_haml?
128
+ end
129
+
130
+ alias_method :content_tag_without_haml, :content_tag
131
+ alias_method :content_tag, :content_tag_with_haml
132
+ end
133
+
134
+ module FormTagHelper
135
+ def form_tag_with_haml(url_for_options = {}, options = {}, *parameters_for_url, &proc)
136
+ if is_haml?
137
+ if block_given?
138
+ oldproc = proc
139
+ proc = haml_bind_proc do |*args|
140
+ concat "\n"
141
+ tab_up
142
+ oldproc.call(*args)
143
+ tab_down
144
+ concat haml_indent
145
+ end
146
+ concat haml_indent
147
+ end
148
+ res = form_tag_without_haml(url_for_options, options, *parameters_for_url, &proc) + "\n"
149
+ concat "\n" if block_given?
150
+ res
151
+ else
152
+ form_tag_without_haml(url_for_options, options, *parameters_for_url, &proc)
153
+ end
154
+ end
155
+ alias_method :form_tag_without_haml, :form_tag
156
+ alias_method :form_tag, :form_tag_with_haml
157
+ end
158
+
159
+ module FormHelper
160
+ def form_for_with_haml(object_name, *args, &proc)
161
+ if block_given? && is_haml?
162
+ oldproc = proc
163
+ proc = haml_bind_proc do |*args|
164
+ tab_up
165
+ oldproc.call(*args)
166
+ tab_down
167
+ concat haml_indent
168
+ end
169
+ concat haml_indent
170
+ end
171
+ form_for_without_haml(object_name, *args, &proc)
172
+ concat "\n" if block_given? && is_haml?
173
+ end
174
+ alias_method :form_for_without_haml, :form_for
175
+ alias_method :form_for, :form_for_with_haml
176
+ end
177
+ # :startdoc:
178
+ end
179
+ end
180
+ end
181
+
@@ -0,0 +1,218 @@
1
+ require File.dirname(__FILE__) + '/../haml'
2
+
3
+ require 'haml/engine'
4
+ require 'rubygems'
5
+ require 'hpricot'
6
+ require 'cgi'
7
+
8
+ module Haml
9
+ # This class contains the functionality used in the +html2haml+ utility,
10
+ # namely converting HTML documents to Haml templates.
11
+ # It depends on Hpricot for HTML parsing (http://code.whytheluckystiff.net/hpricot/).
12
+ class HTML
13
+ # Creates a new instance of Haml::HTML that will compile the given template,
14
+ # which can either be a string containing HTML or an Hpricot node,
15
+ # to a Haml string when +render+ is called.
16
+ def initialize(template, options = {})
17
+ @@options = options
18
+
19
+ if template.is_a? Hpricot::Node
20
+ @template = template
21
+ else
22
+ if template.is_a? IO
23
+ template = template.read
24
+ end
25
+
26
+ if @@options[:rhtml]
27
+ match_to_html(template, /<%=(.*?)-?%>/m, 'loud')
28
+ match_to_html(template, /<%-?(.*?)-?%>/m, 'silent')
29
+ end
30
+
31
+ method = @@options[:xhtml] ? Hpricot.method(:XML) : method(:Hpricot)
32
+ @template = method.call(template.gsub('&', '&amp;'))
33
+ end
34
+ end
35
+
36
+ # Processes the document and returns the result as a string
37
+ # containing the Haml template.
38
+ def render
39
+ @template.to_haml(0)
40
+ end
41
+ alias_method :to_haml, :render
42
+
43
+ module ::Hpricot::Node
44
+ # Returns the Haml representation of the given node,
45
+ # at the given tabulation.
46
+ def to_haml(tabs = 0)
47
+ parse_text(self.to_s, tabs)
48
+ end
49
+
50
+ private
51
+
52
+ def tabulate(tabs)
53
+ ' ' * tabs
54
+ end
55
+
56
+ def parse_text(text, tabs)
57
+ text.strip!
58
+ if text.empty?
59
+ String.new
60
+ else
61
+ lines = text.split("\n")
62
+
63
+ lines.map do |line|
64
+ line.strip!
65
+ "#{tabulate(tabs)}#{'\\' if Haml::Engine::SPECIAL_CHARACTERS.include?(line[0])}#{line}\n"
66
+ end.join
67
+ end
68
+ end
69
+ end
70
+
71
+ # :stopdoc:
72
+
73
+ def self.options
74
+ @@options
75
+ end
76
+
77
+ TEXT_REGEXP = /^(\s*).*$/
78
+
79
+ class ::Hpricot::Doc
80
+ def to_haml(tabs = 0)
81
+ output = ''
82
+ children.each { |child| output += child.to_haml(0) } if children
83
+ output
84
+ end
85
+ end
86
+
87
+ class ::Hpricot::XMLDecl
88
+ def to_haml(tabs = 0)
89
+ "#{tabulate(tabs)}!!! XML\n"
90
+ end
91
+ end
92
+
93
+ class ::Hpricot::DocType
94
+ def to_haml(tabs = 0)
95
+ attrs = public_id.scan(/DTD\s+([^\s]+)\s*([^\s]*)\s*([^\s]*)\s*\/\//)[0]
96
+ if attrs == nil
97
+ raise Exception.new("Invalid doctype")
98
+ end
99
+
100
+ type, version, strictness = attrs.map { |a| a.downcase }
101
+ if type == "html"
102
+ version = "1.0"
103
+ strictness = "transitional"
104
+ end
105
+
106
+ if version == "1.0" || version.empty?
107
+ version = nil
108
+ end
109
+
110
+ if strictness == 'transitional' || strictness.empty?
111
+ strictness = nil
112
+ end
113
+
114
+ version = " #{version}" if version
115
+ if strictness
116
+ strictness[0] = strictness[0] - 32
117
+ strictness = " #{strictness}"
118
+ end
119
+
120
+ "#{tabulate(tabs)}!!!#{version}#{strictness}\n"
121
+ end
122
+ end
123
+
124
+ class ::Hpricot::Comment
125
+ def to_haml(tabs = 0)
126
+ "#{tabulate(tabs)}/\n#{parse_text(self.content, tabs + 1)}"
127
+ end
128
+ end
129
+
130
+ class ::Hpricot::Elem
131
+ def to_haml(tabs = 0)
132
+ output = "#{tabulate(tabs)}"
133
+ if HTML.options[:rhtml] && name[0...5] == 'haml:'
134
+ return output + HTML.send("haml_tag_#{name[5..-1]}", CGI.unescapeHTML(self.inner_text))
135
+ end
136
+
137
+ output += "%#{name}" unless name == 'div' && (static_id? || static_classname?)
138
+
139
+ if attributes
140
+ if static_id?
141
+ output += "##{attributes['id']}"
142
+ remove_attribute('id')
143
+ end
144
+ if static_classname?
145
+ attributes['class'].split(' ').each { |c| output += ".#{c}" }
146
+ remove_attribute('class')
147
+ end
148
+ output += haml_attributes if attributes.length > 0
149
+ end
150
+
151
+ (self.children || []).inject(output + "\n") do |output, child|
152
+ output + child.to_haml(tabs + 1)
153
+ end
154
+ end
155
+
156
+ private
157
+
158
+ def dynamic_attributes
159
+ @dynamic_attributes ||= begin
160
+ Haml::Util.map_hash(attributes) do |name, value|
161
+ next if value.empty?
162
+ full_match = nil
163
+ ruby_value = value.gsub(%r{<haml:loud>\s*(.+?)\s*</haml:loud>}) do
164
+ full_match = $`.empty? && $'.empty?
165
+ full_match ? $1: "\#{#{$1}}"
166
+ end
167
+ next if ruby_value == value
168
+ [name, full_match ? ruby_value : %("#{ruby_value}")]
169
+ end
170
+ end
171
+ end
172
+
173
+ def static_attribute?(name)
174
+ attributes[name] and !dynamic_attribute?(name)
175
+ end
176
+
177
+ def dynamic_attribute?(name)
178
+ HTML.options[:rhtml] and dynamic_attributes.key?(name)
179
+ end
180
+
181
+ def static_id?
182
+ static_attribute? 'id'
183
+ end
184
+
185
+ def static_classname?
186
+ static_attribute? 'class'
187
+ end
188
+
189
+ # Returns a string representation of an attributes hash
190
+ # that's prettier than that produced by Hash#inspect
191
+ def haml_attributes
192
+ attrs = attributes.map do |name, value|
193
+ value = dynamic_attribute?(name) ? dynamic_attributes[name] : value.inspect
194
+ name = name.index(/\W/) ? name.inspect : ":#{name}"
195
+ "#{name} => #{value}"
196
+ end
197
+ "{ #{attrs.join(', ')} }"
198
+ end
199
+ end
200
+
201
+ def self.haml_tag_loud(text)
202
+ "= #{text.gsub(/\n\s*/, ' ').strip}\n"
203
+ end
204
+
205
+ def self.haml_tag_silent(text)
206
+ text.split("\n").map { |line| "- #{line.strip}\n" }.join
207
+ end
208
+
209
+ private
210
+
211
+ def match_to_html(string, regex, tag)
212
+ string.gsub!(regex) do
213
+ "<haml:#{tag}>#{CGI.escapeHTML($1)}</haml:#{tag}>"
214
+ end
215
+ end
216
+ # :startdoc:
217
+ end
218
+ end
@@ -0,0 +1,889 @@
1
+ require 'strscan'
2
+ require 'haml/shared'
3
+
4
+ module Haml
5
+ module Precompiler
6
+ include Haml::Util
7
+
8
+ # Designates an XHTML/XML element.
9
+ ELEMENT = ?%
10
+
11
+ # Designates a <tt><div></tt> element with the given class.
12
+ DIV_CLASS = ?.
13
+
14
+ # Designates a <tt><div></tt> element with the given id.
15
+ DIV_ID = ?#
16
+
17
+ # Designates an XHTML/XML comment.
18
+ COMMENT = ?/
19
+
20
+ # Designates an XHTML doctype or script that is never HTML-escaped.
21
+ DOCTYPE = ?!
22
+
23
+ # Designates script, the result of which is output.
24
+ SCRIPT = ?=
25
+
26
+ # Designates script that is always HTML-escaped.
27
+ SANITIZE = ?&
28
+
29
+ # Designates script, the result of which is flattened and output.
30
+ FLAT_SCRIPT = ?~
31
+
32
+ # Designates script which is run but not output.
33
+ SILENT_SCRIPT = ?-
34
+
35
+ # When following SILENT_SCRIPT, designates a comment that is not output.
36
+ SILENT_COMMENT = ?#
37
+
38
+ # Designates a non-parsed line.
39
+ ESCAPE = ?\\
40
+
41
+ # Designates a block of filtered text.
42
+ FILTER = ?:
43
+
44
+ # Designates a non-parsed line. Not actually a character.
45
+ PLAIN_TEXT = -1
46
+
47
+ # Keeps track of the ASCII values of the characters that begin a
48
+ # specially-interpreted line.
49
+ SPECIAL_CHARACTERS = [
50
+ ELEMENT,
51
+ DIV_CLASS,
52
+ DIV_ID,
53
+ COMMENT,
54
+ DOCTYPE,
55
+ SCRIPT,
56
+ SANITIZE,
57
+ FLAT_SCRIPT,
58
+ SILENT_SCRIPT,
59
+ ESCAPE,
60
+ FILTER
61
+ ]
62
+
63
+ # The value of the character that designates that a line is part
64
+ # of a multiline string.
65
+ MULTILINE_CHAR_VALUE = ?|
66
+
67
+ # Keywords that appear in the middle of a Ruby block with lowered
68
+ # indentation. If a block has been started using indentation,
69
+ # lowering the indentation with one of these won't end the block.
70
+ # For example:
71
+ #
72
+ # - if foo
73
+ # %p yes!
74
+ # - else
75
+ # %p no!
76
+ #
77
+ # The block is ended after <tt>%p no!</tt>, because <tt>else</tt>
78
+ # is a member of this array.
79
+ MID_BLOCK_KEYWORDS = ['else', 'elsif', 'rescue', 'ensure', 'when']
80
+
81
+ # The Regex that matches a Doctype command.
82
+ DOCTYPE_REGEX = /(\d\.\d)?[\s]*([a-z]*)/i
83
+
84
+ # The Regex that matches a literal string or symbol value
85
+ LITERAL_VALUE_REGEX = /^\s*(:(\w*)|(('|")([^\\\#'"]*?)\4))\s*$/
86
+
87
+ private
88
+
89
+ # Returns the precompiled string with the preamble and postamble
90
+ def precompiled_with_ambles(local_names)
91
+ preamble = <<END.gsub("\n", ";")
92
+ extend Haml::Helpers
93
+ _hamlout = @haml_buffer = Haml::Buffer.new(@haml_buffer, #{options_for_buffer.inspect})
94
+ _erbout = _hamlout.buffer
95
+ __in_erb_template = true
96
+ END
97
+ postamble = <<END.gsub("\n", ";")
98
+ @haml_buffer = @haml_buffer.upper
99
+ _erbout
100
+ END
101
+ preamble + locals_code(local_names) + @precompiled + postamble
102
+ end
103
+
104
+ def locals_code(names)
105
+ names = names.keys if Hash == names
106
+
107
+ names.map do |name|
108
+ # Can't use || because someone might explicitly pass in false with a symbol
109
+ sym_local = "_haml_locals[#{name.to_sym.inspect}]"
110
+ str_local = "_haml_locals[#{name.to_s.inspect}]"
111
+ "#{name} = #{sym_local}.nil? ? #{str_local} : #{sym_local}"
112
+ end.join(';') + ';'
113
+ end
114
+
115
+ class Line < Struct.new(:text, :unstripped, :full, :index, :precompiler, :eod)
116
+ alias_method :eod?, :eod
117
+
118
+ def tabs
119
+ line = self
120
+ @tabs ||= precompiler.instance_eval do
121
+ break 0 if line.text.empty? || !(whitespace = line.full[/^\s+/])
122
+
123
+ if @indentation.nil?
124
+ @indentation = whitespace
125
+
126
+ if @indentation.include?(?\s) && @indentation.include?(?\t)
127
+ raise SyntaxError.new("Indentation can't use both tabs and spaces.", line.index)
128
+ end
129
+
130
+ @flat_spaces = @indentation * @template_tabs if flat?
131
+ break 1
132
+ end
133
+
134
+ tabs = whitespace.length / @indentation.length
135
+ break tabs if whitespace == @indentation * tabs
136
+ break @template_tabs if flat? && whitespace =~ /^#{@indentation * @template_tabs}/
137
+
138
+ raise SyntaxError.new(<<END.strip.gsub("\n", ' '), line.index)
139
+ Inconsistent indentation: #{Haml::Shared.human_indentation whitespace, true} used for indentation,
140
+ but the rest of the document was indented using #{Haml::Shared.human_indentation @indentation}.
141
+ END
142
+ end
143
+ end
144
+ end
145
+
146
+ def precompile
147
+ @haml_comment = @dont_indent_next_line = @dont_tab_up_next_text = false
148
+ @indentation = nil
149
+ @line = next_line
150
+ resolve_newlines
151
+ newline
152
+
153
+ raise SyntaxError.new("Indenting at the beginning of the document is illegal.", @line.index) if @line.tabs != 0
154
+
155
+ while next_line
156
+ process_indent(@line) unless @line.text.empty?
157
+
158
+ if flat?
159
+ push_flat(@line)
160
+ @line = @next_line
161
+ newline
162
+ next
163
+ end
164
+
165
+ process_line(@line.text, @line.index) unless @line.text.empty? || @haml_comment
166
+
167
+ if !flat? && @next_line.tabs - @line.tabs > 1
168
+ raise SyntaxError.new("The line was indented #{@next_line.tabs - @line.tabs} levels deeper than the previous line.", @next_line.index)
169
+ end
170
+
171
+ resolve_newlines unless @next_line.eod?
172
+ @line = @next_line
173
+ newline unless @next_line.eod?
174
+ end
175
+
176
+ # Close all the open tags
177
+ close until @to_close_stack.empty?
178
+ flush_merged_text
179
+ end
180
+
181
+ # Processes and deals with lowering indentation.
182
+ def process_indent(line)
183
+ return unless line.tabs <= @template_tabs && @template_tabs > 0
184
+
185
+ to_close = @template_tabs - line.tabs
186
+ to_close.times { |i| close unless to_close - 1 - i == 0 && mid_block_keyword?(line.text) }
187
+ end
188
+
189
+ # Processes a single line of Haml.
190
+ #
191
+ # This method doesn't return anything; it simply processes the line and
192
+ # adds the appropriate code to <tt>@precompiled</tt>.
193
+ def process_line(text, index)
194
+ @index = index + 1
195
+
196
+ case text[0]
197
+ when DIV_CLASS, DIV_ID; render_div(text)
198
+ when ELEMENT; render_tag(text)
199
+ when COMMENT; render_comment(text[1..-1].strip)
200
+ when SANITIZE
201
+ return push_script(unescape_interpolation(text[3..-1].strip), :escape_html => true) if text[1..2] == "=="
202
+ return push_script(text[2..-1].strip, :escape_html => true) if text[1] == SCRIPT
203
+ return push_script(unescape_interpolation(text[1..-1].strip), :escape_html => true) if text[1] == ?\s
204
+ push_plain text
205
+ when SCRIPT
206
+ return push_script(unescape_interpolation(text[2..-1].strip)) if text[1] == SCRIPT
207
+ return push_script(text[1..-1], :escape_html => true) if options[:escape_html]
208
+ push_script(text[1..-1])
209
+ when FLAT_SCRIPT; push_flat_script(text[1..-1])
210
+ when SILENT_SCRIPT
211
+ return start_haml_comment if text[1] == SILENT_COMMENT
212
+
213
+ raise SyntaxError.new(<<END.rstrip, index) if text[1..-1].strip == "end"
214
+ You don't need to use "- end" in Haml. Use indentation instead:
215
+ - if foo?
216
+ %strong Foo!
217
+ - else
218
+ Not foo.
219
+ END
220
+
221
+ push_silent(text[1..-1], true)
222
+ newline_now
223
+
224
+ case_stmt = text[1..-1].split(' ', 2)[0] == "case"
225
+ block = block_opened? && !mid_block_keyword?(text)
226
+ push_and_tabulate([:script]) if block || case_stmt
227
+ push_and_tabulate(:nil) if block && case_stmt
228
+ when FILTER; start_filtered(text[1..-1].downcase)
229
+ when DOCTYPE
230
+ return render_doctype(text) if text[0...3] == '!!!'
231
+ return push_script(unescape_interpolation(text[3..-1].strip)) if text[1..2] == "=="
232
+ return push_script(text[2..-1].strip) if text[1] == SCRIPT
233
+ return push_script(unescape_interpolation(text[1..-1].strip)) if text[1] == ?\s
234
+ push_plain text
235
+ when ESCAPE; push_plain text[1..-1]
236
+ else push_plain text
237
+ end
238
+ end
239
+
240
+ # Returns whether or not the text is a silent script text with one
241
+ # of Ruby's mid-block keywords.
242
+ def mid_block_keyword?(text)
243
+ text.length > 2 && text[0] == SILENT_SCRIPT && MID_BLOCK_KEYWORDS.include?(text[1..-1].split[0])
244
+ end
245
+
246
+ # Evaluates <tt>text</tt> in the context of the scope object, but
247
+ # does not output the result.
248
+ def push_silent(text, can_suppress = false)
249
+ flush_merged_text
250
+ return if can_suppress && options[:suppress_eval]
251
+ @precompiled << "#{text};"
252
+ end
253
+
254
+ # Adds <tt>text</tt> to <tt>@buffer</tt> with appropriate tabulation
255
+ # without parsing it.
256
+ def push_merged_text(text, tab_change = 0, indent = true)
257
+ text = !indent || @dont_indent_next_line || @options[:ugly] ? text : "#{' ' * @output_tabs}#{text}"
258
+ @to_merge << [:text, text, tab_change]
259
+ @dont_indent_next_line = false
260
+ end
261
+
262
+ # Concatenate <tt>text</tt> to <tt>@buffer</tt> without tabulation.
263
+ def concat_merged_text(text)
264
+ @to_merge << [:text, text, 0]
265
+ end
266
+
267
+ def push_text(text, tab_change = 0)
268
+ push_merged_text("#{text}\n", tab_change)
269
+ end
270
+
271
+ def flush_merged_text
272
+ return if @to_merge.empty?
273
+
274
+ text, tab_change = @to_merge.inject(["", 0]) do |(str, mtabs), (type, val, tabs)|
275
+ case type
276
+ when :text
277
+ [str << val.gsub('#{', "\\\#{"), mtabs + tabs]
278
+ when :script
279
+ if mtabs != 0 && !@options[:ugly]
280
+ val = "_hamlout.adjust_tabs(#{mtabs}); " + val
281
+ end
282
+ [str << "\#{#{val}}", 0]
283
+ else
284
+ raise SyntaxError.new("[HAML BUG] Undefined entry in Haml::Precompiler@to_merge.")
285
+ end
286
+ end
287
+
288
+ @precompiled <<
289
+ if @options[:ugly]
290
+ "_erbout << #{unescape_interpolation(text)};"
291
+ else
292
+ "_hamlout.push_text(#{unescape_interpolation(text)}, #{tab_change}, #{@dont_tab_up_next_text.inspect});"
293
+ end
294
+ @to_merge = []
295
+ @dont_tab_up_next_text = false
296
+ end
297
+
298
+ # Renders a block of text as plain text.
299
+ # Also checks for an illegally opened block.
300
+ def push_plain(text)
301
+ if block_opened?
302
+ raise SyntaxError.new("Illegal nesting: nesting within plain text is illegal.", @next_line.index)
303
+ end
304
+
305
+ if contains_interpolation?(text)
306
+ push_script unescape_interpolation(text)
307
+ else
308
+ push_text text
309
+ end
310
+ end
311
+
312
+ # Adds +text+ to <tt>@buffer</tt> while flattening text.
313
+ def push_flat(line)
314
+ text = line.full.dup
315
+ text = "" unless text.gsub!(/^#{@flat_spaces}/, '')
316
+ @filter_buffer << "#{text}\n"
317
+ end
318
+
319
+ # Causes <tt>text</tt> to be evaluated in the context of
320
+ # the scope object and the result to be added to <tt>@buffer</tt>.
321
+ #
322
+ # If <tt>opts[:preserve_script]</tt> is true, Haml::Helpers#find_and_flatten is run on
323
+ # the result before it is added to <tt>@buffer</tt>
324
+ def push_script(text, opts = {})
325
+ raise SyntaxError.new("There's no Ruby code for = to evaluate.") if text.empty?
326
+ return if options[:suppress_eval]
327
+
328
+ args = %w[preserve_script in_tag preserve_tag escape_html nuke_inner_whitespace]
329
+ args.map! {|name| opts[name.to_sym]}
330
+ args << !block_opened? << @options[:ugly]
331
+
332
+ no_format = @options[:ugly] &&
333
+ !(opts[:preserve_script] || opts[:preserve_tag] || opts[:escape_html])
334
+ output_temp = "(haml_very_temp = haml_temp; haml_temp = nil; haml_very_temp)"
335
+ out = "_hamlout.#{static_method_name(:format_script, *args)}(#{output_temp});"
336
+
337
+ # Prerender tabulation unless we're in a tag
338
+ push_merged_text '' unless opts[:in_tag]
339
+
340
+ unless block_opened?
341
+ @to_merge << [:script, no_format ? "#{text}\n" : "haml_temp = #{text}\n#{out}"]
342
+ concat_merged_text("\n") unless opts[:in_tag] || opts[:nuke_inner_whitespace]
343
+ @newlines -= 1
344
+ return
345
+ end
346
+
347
+ flush_merged_text
348
+
349
+ push_silent "haml_temp = #{text}"
350
+ newline_now
351
+ push_and_tabulate([:loud, "_erbout << #{no_format ? "#{output_temp}.to_s;" : out}",
352
+ !(opts[:in_tag] || opts[:nuke_inner_whitespace] || @options[:ugly])])
353
+ end
354
+
355
+ # Causes <tt>text</tt> to be evaluated, and Haml::Helpers#find_and_flatten
356
+ # to be run on it afterwards.
357
+ def push_flat_script(text)
358
+ flush_merged_text
359
+
360
+ raise SyntaxError.new("There's no Ruby code for ~ to evaluate.") if text.empty?
361
+ push_script(text, :preserve_script => true)
362
+ end
363
+
364
+ def start_haml_comment
365
+ return unless block_opened?
366
+
367
+ @haml_comment = true
368
+ push_and_tabulate([:haml_comment])
369
+ end
370
+
371
+ # Closes the most recent item in <tt>@to_close_stack</tt>.
372
+ def close
373
+ tag, *rest = @to_close_stack.pop
374
+ send("close_#{tag}", *rest)
375
+ end
376
+
377
+ # Puts a line in <tt>@precompiled</tt> that will add the closing tag of
378
+ # the most recently opened tag.
379
+ def close_element(value)
380
+ tag, nuke_outer_whitespace, nuke_inner_whitespace = value
381
+ @output_tabs -= 1 unless nuke_inner_whitespace
382
+ @template_tabs -= 1
383
+ rstrip_buffer! if nuke_inner_whitespace
384
+ push_merged_text("</#{tag}>" + (nuke_outer_whitespace ? "" : "\n"),
385
+ nuke_inner_whitespace ? 0 : -1, !nuke_inner_whitespace)
386
+ @dont_indent_next_line = nuke_outer_whitespace
387
+ end
388
+
389
+ # Closes a Ruby block.
390
+ def close_script
391
+ push_silent "end", true
392
+ @template_tabs -= 1
393
+ end
394
+
395
+ # Closes a comment.
396
+ def close_comment(has_conditional)
397
+ @output_tabs -= 1
398
+ @template_tabs -= 1
399
+ close_tag = has_conditional ? "<![endif]-->" : "-->"
400
+ push_text(close_tag, -1)
401
+ end
402
+
403
+ # Closes a loud Ruby block.
404
+ def close_loud(command, add_newline)
405
+ push_silent 'end', true
406
+ @precompiled << command
407
+ @template_tabs -= 1
408
+ concat_merged_text("\n") if add_newline
409
+ end
410
+
411
+ # Closes a filtered block.
412
+ def close_filtered(filter)
413
+ filter.internal_compile(self, @filter_buffer)
414
+ @flat = false
415
+ @flat_spaces = nil
416
+ @filter_buffer = nil
417
+ @template_tabs -= 1
418
+ end
419
+
420
+ def close_haml_comment
421
+ @haml_comment = false
422
+ @template_tabs -= 1
423
+ end
424
+
425
+ def close_nil
426
+ @template_tabs -= 1
427
+ end
428
+
429
+ # Iterates through the classes and ids supplied through <tt>.</tt>
430
+ # and <tt>#</tt> syntax, and returns a hash with them as attributes,
431
+ # that can then be merged with another attributes hash.
432
+ def parse_class_and_id(list)
433
+ attributes = {}
434
+ list.scan(/([#.])([-_a-zA-Z0-9]+)/) do |type, property|
435
+ case type
436
+ when '.'
437
+ if attributes['class']
438
+ attributes['class'] += " "
439
+ else
440
+ attributes['class'] = ""
441
+ end
442
+ attributes['class'] += property
443
+ when '#'; attributes['id'] = property
444
+ end
445
+ end
446
+ attributes
447
+ end
448
+
449
+ def parse_literal_value(text)
450
+ return nil unless text
451
+ text.match(LITERAL_VALUE_REGEX)
452
+
453
+ # $2 holds the value matched by a symbol, but is nil for a string match
454
+ # $5 holds the value matched by a string
455
+ $2 || $5
456
+ end
457
+
458
+ def parse_static_hash(text)
459
+ return {} unless text
460
+
461
+ attributes = {}
462
+ text.split(',').each do |attrib|
463
+ key, value, more = attrib.split('=>')
464
+
465
+ # Make sure the key and value and only the key and value exist
466
+ # Otherwise, it's too complicated or dynamic and we'll defer it to the actual Ruby parser
467
+ key = parse_literal_value key
468
+ value = parse_literal_value value
469
+ return nil if more || key.nil? || value.nil?
470
+
471
+ attributes[key] = value
472
+ end
473
+ text.count("\n").times { newline }
474
+ attributes
475
+ end
476
+
477
+ # This is a class method so it can be accessed from Buffer.
478
+ def self.build_attributes(is_html, attr_wrapper, attributes = {})
479
+ quote_escape = attr_wrapper == '"' ? "&quot;" : "&apos;"
480
+ other_quote_char = attr_wrapper == '"' ? "'" : '"'
481
+
482
+ result = attributes.collect do |attr, value|
483
+ next if value.nil?
484
+
485
+ if value == true
486
+ next " #{attr}" if is_html
487
+ next " #{attr}=#{attr_wrapper}#{attr}#{attr_wrapper}"
488
+ elsif value == false
489
+ next
490
+ end
491
+
492
+ value = Haml::Helpers.preserve(Haml::Helpers.escape_once(value.to_s))
493
+ # We want to decide whether or not to escape quotes
494
+ value.gsub!('&quot;', '"')
495
+ this_attr_wrapper = attr_wrapper
496
+ if value.include? attr_wrapper
497
+ if value.include? other_quote_char
498
+ value = value.gsub(attr_wrapper, quote_escape)
499
+ else
500
+ this_attr_wrapper = other_quote_char
501
+ end
502
+ end
503
+ " #{attr}=#{this_attr_wrapper}#{value}#{this_attr_wrapper}"
504
+ end
505
+ result.compact.sort.join
506
+ end
507
+
508
+ def prerender_tag(name, self_close, attributes)
509
+ attributes_string = Precompiler.build_attributes(html?, @options[:attr_wrapper], attributes)
510
+ "<#{name}#{attributes_string}#{self_close && xhtml? ? ' /' : ''}>"
511
+ end
512
+
513
+ # Parses a line into tag_name, attributes, attributes_hash, object_ref, action, value
514
+ def parse_tag(line)
515
+ raise SyntaxError.new("Invalid tag: \"#{line}\".") unless match = line.scan(/%([-:\w]+)([-\w\.\#]*)(.*)/)[0]
516
+ tag_name, attributes, rest = match
517
+ attributes_hash, rest, last_line = parse_attributes(rest) if rest[0] == ?{
518
+ if rest
519
+ object_ref, rest = balance(rest, ?[, ?]) if rest[0] == ?[
520
+ attributes_hash, rest, last_line = parse_attributes(rest) if rest[0] == ?{ && attributes_hash.nil?
521
+ nuke_whitespace, action, value = rest.scan(/(<>|><|[><])?([=\/\~&!])?(.*)?/)[0]
522
+ nuke_whitespace ||= ''
523
+ nuke_outer_whitespace = nuke_whitespace.include? '>'
524
+ nuke_inner_whitespace = nuke_whitespace.include? '<'
525
+ end
526
+ value = value.to_s.strip
527
+ [tag_name, attributes, attributes_hash, object_ref, nuke_outer_whitespace,
528
+ nuke_inner_whitespace, action, value, last_line || @index]
529
+ end
530
+
531
+ def parse_attributes(line)
532
+ line = line.dup
533
+ last_line = @index
534
+
535
+ begin
536
+ attributes_hash, rest = balance(line, ?{, ?})
537
+ rescue SyntaxError => e
538
+ if line.strip[-1] == ?, && e.message == "Unbalanced brackets."
539
+ line << "\n" << @next_line.text
540
+ last_line += 1
541
+ next_line
542
+ retry
543
+ end
544
+
545
+ raise e
546
+ end
547
+
548
+ attributes_hash = attributes_hash[1...-1] if attributes_hash
549
+ return attributes_hash, rest, last_line
550
+ end
551
+
552
+ # Parses a line that will render as an XHTML tag, and adds the code that will
553
+ # render that tag to <tt>@precompiled</tt>.
554
+ def render_tag(line)
555
+ tag_name, attributes, attributes_hash, object_ref, nuke_outer_whitespace,
556
+ nuke_inner_whitespace, action, value, last_line = parse_tag(line)
557
+
558
+ raise SyntaxError.new("Illegal element: classes and ids must have values.") if attributes =~ /[\.#](\.|#|\z)/
559
+
560
+ # Get rid of whitespace outside of the tag if we need to
561
+ rstrip_buffer! if nuke_outer_whitespace
562
+
563
+ preserve_tag = options[:preserve].include?(tag_name)
564
+ nuke_inner_whitespace ||= preserve_tag
565
+ preserve_tag &&= !options[:ugly]
566
+
567
+ case action
568
+ when '/'; self_closing = true
569
+ when '~'; parse = preserve_script = true
570
+ when '='
571
+ parse = true
572
+ value = unescape_interpolation(value[1..-1].strip) if value[0] == ?=
573
+ when '&', '!'
574
+ if value[0] == ?=
575
+ parse = true
576
+ value =
577
+ if value[1] == ?=
578
+ unescape_interpolation(value[2..-1].strip)
579
+ else
580
+ value[1..-1].strip
581
+ end
582
+ elsif contains_interpolation?(value)
583
+ parse = true
584
+ value = unescape_interpolation(value)
585
+ end
586
+ else
587
+ if contains_interpolation?(value)
588
+ parse = true
589
+ value = unescape_interpolation(value)
590
+ end
591
+ end
592
+
593
+ if parse && @options[:suppress_eval]
594
+ parse = false
595
+ value = ''
596
+ end
597
+
598
+ escape_html = (action == '&' || (action != '!' && @options[:escape_html]))
599
+
600
+ object_ref = "nil" if object_ref.nil? || @options[:suppress_eval]
601
+
602
+ static_attributes = parse_static_hash(attributes_hash) # Try pre-compiling a static attributes hash
603
+ attributes_hash = nil if static_attributes || @options[:suppress_eval]
604
+ attributes = parse_class_and_id(attributes)
605
+ Buffer.merge_attrs(attributes, static_attributes) if static_attributes
606
+
607
+ raise SyntaxError.new("Illegal nesting: nesting within a self-closing tag is illegal.", @next_line.index) if block_opened? && self_closing
608
+ raise SyntaxError.new("Illegal nesting: content can't be both given on the same line as %#{tag_name} and nested within it.", @next_line.index) if block_opened? && !value.empty?
609
+ raise SyntaxError.new("There's no Ruby code for #{action} to evaluate.", last_line - 1) if parse && value.empty?
610
+ raise SyntaxError.new("Self-closing tags can't have content.", last_line - 1) if self_closing && !value.empty?
611
+
612
+ self_closing ||= !!( !block_opened? && value.empty? && @options[:autoclose].include?(tag_name) )
613
+
614
+ dont_indent_next_line =
615
+ (nuke_outer_whitespace && !block_opened?) ||
616
+ (nuke_inner_whitespace && block_opened?)
617
+
618
+ # Check if we can render the tag directly to text and not process it in the buffer
619
+ if object_ref == "nil" && attributes_hash.nil? && !preserve_script
620
+ tag_closed = !block_opened? && !self_closing && !parse
621
+
622
+ open_tag = prerender_tag(tag_name, self_closing, attributes)
623
+ if tag_closed
624
+ open_tag << "#{value}</#{tag_name}>"
625
+ open_tag << "\n" unless nuke_outer_whitespace
626
+ else
627
+ open_tag << "\n" unless parse || nuke_inner_whitespace || (self_closing && nuke_outer_whitespace)
628
+ end
629
+
630
+ push_merged_text(open_tag, tag_closed || self_closing || nuke_inner_whitespace ? 0 : 1,
631
+ !nuke_outer_whitespace)
632
+
633
+ @dont_indent_next_line = dont_indent_next_line
634
+ return if tag_closed
635
+ else
636
+ flush_merged_text
637
+ content = value.empty? || parse ? 'nil' : value.dump
638
+ attributes_hash = ', ' + attributes_hash if attributes_hash
639
+ args = [tag_name, self_closing, !block_opened?, preserve_tag, escape_html,
640
+ attributes, nuke_outer_whitespace, nuke_inner_whitespace
641
+ ].map { |v| v.inspect }.join(', ')
642
+ push_silent "_hamlout.open_tag(#{args}, #{object_ref}, #{content}#{attributes_hash})"
643
+ @dont_tab_up_next_text = @dont_indent_next_line = dont_indent_next_line
644
+ end
645
+
646
+ return if self_closing
647
+
648
+ if value.empty?
649
+ push_and_tabulate([:element, [tag_name, nuke_outer_whitespace, nuke_inner_whitespace]])
650
+ @output_tabs += 1 unless nuke_inner_whitespace
651
+ return
652
+ end
653
+
654
+ if parse
655
+ push_script(value, :preserve_script => preserve_script, :in_tag => true,
656
+ :preserve_tag => preserve_tag, :escape_html => escape_html,
657
+ :nuke_inner_whitespace => nuke_inner_whitespace)
658
+ concat_merged_text("</#{tag_name}>" + (nuke_outer_whitespace ? "" : "\n"))
659
+ end
660
+ end
661
+
662
+ # Renders a line that creates an XHTML tag and has an implicit div because of
663
+ # <tt>.</tt> or <tt>#</tt>.
664
+ def render_div(line)
665
+ render_tag('%div' + line)
666
+ end
667
+
668
+ # Renders an XHTML comment.
669
+ def render_comment(line)
670
+ conditional, line = balance(line, ?[, ?]) if line[0] == ?[
671
+ line.strip!
672
+ conditional << ">" if conditional
673
+
674
+ if block_opened? && !line.empty?
675
+ raise SyntaxError.new('Illegal nesting: nesting within a tag that already has content is illegal.', @next_line.index)
676
+ end
677
+
678
+ open = "<!--#{conditional} "
679
+
680
+ # Render it statically if possible
681
+ unless line.empty?
682
+ return push_text("#{open}#{line} #{conditional ? "<![endif]-->" : "-->"}")
683
+ end
684
+
685
+ push_text(open, 1)
686
+ @output_tabs += 1
687
+ push_and_tabulate([:comment, !conditional.nil?])
688
+ unless line.empty?
689
+ push_text(line)
690
+ close
691
+ end
692
+ end
693
+
694
+ # Renders an XHTML doctype or XML shebang.
695
+ def render_doctype(line)
696
+ raise SyntaxError.new("Illegal nesting: nesting within a header command is illegal.", @next_line.index) if block_opened?
697
+ doctype = text_for_doctype(line)
698
+ push_text doctype if doctype
699
+ end
700
+
701
+ def text_for_doctype(text)
702
+ text = text[3..-1].lstrip.downcase
703
+ if text.index("xml") == 0
704
+ return nil if html?
705
+ wrapper = @options[:attr_wrapper]
706
+ return "<?xml version=#{wrapper}1.0#{wrapper} encoding=#{wrapper}#{text.split(' ')[1] || "utf-8"}#{wrapper} ?>"
707
+ end
708
+
709
+ if html5?
710
+ '<!DOCTYPE html>'
711
+ else
712
+ version, type = text.scan(DOCTYPE_REGEX)[0]
713
+
714
+ if xhtml?
715
+ if version == "1.1"
716
+ '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'
717
+ else
718
+ case type
719
+ when "strict"; '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
720
+ when "frameset"; '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'
721
+ when "mobile"; '<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">'
722
+ when "basic"; '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">'
723
+ else '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
724
+ end
725
+ end
726
+
727
+ elsif html4?
728
+ case type
729
+ when "strict"; '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'
730
+ when "frameset"; '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'
731
+ else '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'
732
+ end
733
+ end
734
+ end
735
+ end
736
+
737
+ # Starts a filtered block.
738
+ def start_filtered(name)
739
+ raise Error.new("Invalid filter name \":#{name}\".") unless name =~ /^\w+$/
740
+ raise Error.new("Filter \"#{name}\" is not defined.") unless filter = Filters.defined[name]
741
+
742
+ push_and_tabulate([:filtered, filter])
743
+ @flat = true
744
+ @filter_buffer = String.new
745
+
746
+ # If we don't know the indentation by now, it'll be set in Line#tabs
747
+ @flat_spaces = @indentation * @template_tabs if @indentation
748
+ end
749
+
750
+ def raw_next_line
751
+ text = @template.shift
752
+ return unless text
753
+
754
+ index = @template_index
755
+ @template_index += 1
756
+
757
+ return text, index
758
+ end
759
+
760
+ def next_line
761
+ text, index = raw_next_line
762
+ return unless text
763
+
764
+ # :eod is a special end-of-document marker
765
+ line =
766
+ if text == :eod
767
+ Line.new '-#', '-#', '-#', index, self, true
768
+ else
769
+ Line.new text.strip, text.lstrip.chomp, text, index, self, false
770
+ end
771
+
772
+ # `flat?' here is a little outdated,
773
+ # so we have to manually check if the previous line closes the flat block.
774
+ unless flat? && (@line.text.empty? || @line.tabs >= @template_tabs)
775
+ if line.text.empty?
776
+ newline
777
+ return next_line
778
+ end
779
+
780
+ handle_multiline(line)
781
+ end
782
+
783
+ @next_line = line
784
+ end
785
+
786
+ def un_next_line(line)
787
+ @template.unshift line
788
+ @template_index -= 1
789
+ end
790
+
791
+ def handle_multiline(line)
792
+ if is_multiline?(line.text)
793
+ line.text.slice!(-1)
794
+ while new_line = raw_next_line.first
795
+ break if new_line == :eod
796
+ newline and next if new_line.strip.empty?
797
+ break unless is_multiline?(new_line.strip)
798
+ line.text << new_line.strip[0...-1]
799
+ newline
800
+ end
801
+ un_next_line new_line
802
+ resolve_newlines
803
+ end
804
+ end
805
+
806
+ # Checks whether or not +line+ is in a multiline sequence.
807
+ def is_multiline?(text)
808
+ text && text.length > 1 && text[-1] == MULTILINE_CHAR_VALUE && text[-2] == ?\s
809
+ end
810
+
811
+ def contains_interpolation?(str)
812
+ str.include?('#{')
813
+ end
814
+
815
+ def unescape_interpolation(str)
816
+ res = ''
817
+ rest = Haml::Shared.handle_interpolation str.dump do |scan|
818
+ escapes = (scan[2].size - 1) / 2
819
+ res << scan.matched[0...-3 - escapes]
820
+ if escapes % 2 == 1
821
+ res << '#{'
822
+ else
823
+ res << '#{' + eval('"' + balance(scan, ?{, ?}, 1)[0][0...-1] + '"') + "}"# Use eval to get rid of string escapes
824
+ end
825
+ end
826
+ res + rest
827
+ end
828
+
829
+ def balance(*args)
830
+ res = Haml::Shared.balance(*args)
831
+ return res if res
832
+ raise SyntaxError.new("Unbalanced brackets.")
833
+ end
834
+
835
+ def block_opened?
836
+ !flat? && @next_line.tabs > @line.tabs
837
+ end
838
+
839
+ # Pushes value onto <tt>@to_close_stack</tt> and increases
840
+ # <tt>@template_tabs</tt>.
841
+ def push_and_tabulate(value)
842
+ @to_close_stack.push(value)
843
+ @template_tabs += 1
844
+ end
845
+
846
+ def flat?
847
+ @flat
848
+ end
849
+
850
+ def newline
851
+ @newlines += 1
852
+ end
853
+
854
+ def newline_now
855
+ @precompiled << "\n"
856
+ @newlines -= 1
857
+ end
858
+
859
+ def resolve_newlines
860
+ return unless @newlines > 0
861
+ @precompiled << "\n" * @newlines
862
+ @newlines = 0
863
+ end
864
+
865
+ # Get rid of and whitespace at the end of the buffer
866
+ # or the merged text
867
+ def rstrip_buffer!
868
+ if @to_merge.empty?
869
+ push_silent("_erbout.rstrip!", false)
870
+ @dont_tab_up_next_text = true
871
+ return
872
+ end
873
+
874
+ last = @to_merge.last
875
+ case last.first
876
+ when :text
877
+ last[1].rstrip!
878
+ if last[1].empty?
879
+ @to_merge.pop
880
+ rstrip_buffer!
881
+ end
882
+ when :script
883
+ last[1].gsub!(/\(haml_temp, (.*?)\);$/, '(haml_temp.rstrip, \1);')
884
+ else
885
+ raise SyntaxError.new("[HAML BUG] Undefined entry in Haml::Precompiler@to_merge.")
886
+ end
887
+ end
888
+ end
889
+ end