typus 3.0.6 → 3.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (295) hide show
  1. data/.gemtest +0 -0
  2. data/.gitignore +15 -0
  3. data/Gemfile +9 -5
  4. data/Rakefile +34 -21
  5. data/app/controllers/admin/base_controller.rb +0 -4
  6. data/app/controllers/admin/resources_controller.rb +77 -213
  7. data/app/controllers/admin/session_controller.rb +1 -1
  8. data/app/helpers/admin/base_helper.rb +4 -4
  9. data/app/helpers/admin/dashboard_helper.rb +1 -3
  10. data/app/helpers/admin/display_helper.rb +49 -0
  11. data/app/helpers/admin/file_preview_helper.rb +10 -12
  12. data/app/helpers/admin/filters_helper.rb +1 -1
  13. data/app/helpers/admin/form_helper.rb +2 -13
  14. data/app/helpers/admin/list_helper.rb +14 -3
  15. data/app/helpers/admin/relationships_helper.rb +79 -62
  16. data/app/helpers/admin/resources_helper.rb +17 -16
  17. data/app/helpers/admin/search_helper.rb +1 -1
  18. data/app/helpers/admin/sidebar_helper.rb +1 -2
  19. data/app/helpers/admin/table_helper.rb +9 -4
  20. data/app/views/admin/helpers/_file_preview.html.erb +1 -1
  21. data/app/views/admin/helpers/base/_apps.html.erb +23 -0
  22. data/app/views/admin/helpers/{_flash_message.html.erb → base/_flash_message.html.erb} +0 -0
  23. data/app/views/admin/helpers/{_header.html.erb → base/_header.html.erb} +0 -0
  24. data/app/views/admin/helpers/{_login_info.html.erb → base/_login_info.html.erb} +0 -0
  25. data/app/views/admin/helpers/resources/_display_link_to_previous.html.erb +1 -1
  26. data/app/views/admin/resources/show.html.erb +4 -27
  27. data/app/views/admin/templates/_belongs_to_with_autocomplete.html.erb +11 -0
  28. data/app/views/admin/templates/_has_n.html.erb +1 -1
  29. data/app/views/admin/templates/_has_one.html.erb +3 -3
  30. data/app/views/admin/templates/_relate_form.html.erb +1 -1
  31. data/app/views/admin/templates/_relate_form_with_autocomplete.html.erb +24 -0
  32. data/app/views/layouts/admin/base.html.erb +15 -9
  33. data/app/views/layouts/admin/headless.html.erb +44 -0
  34. data/app/views/layouts/admin/session.html.erb +3 -2
  35. data/doc/hudson_setup.md +19 -0
  36. data/lib/generators/typus/assets_generator.rb +0 -4
  37. data/lib/generators/typus/config_generator.rb +107 -0
  38. data/lib/generators/typus/controller_generator.rb +0 -4
  39. data/lib/generators/typus/initializers_generator.rb +22 -0
  40. data/lib/generators/typus/migration_generator.rb +0 -4
  41. data/lib/generators/typus/typus_generator.rb +8 -101
  42. data/lib/generators/typus/views_generator.rb +0 -4
  43. data/lib/support/active_record.rb +8 -2
  44. data/lib/support/fake_user.rb +2 -0
  45. data/lib/support/hash.rb +1 -1
  46. data/lib/support/string.rb +3 -3
  47. data/lib/tasks/typus.rake +1 -1
  48. data/lib/typus.rb +15 -6
  49. data/lib/typus/controller/actions.rb +69 -0
  50. data/lib/typus/controller/associations.rb +82 -0
  51. data/lib/typus/controller/autocomplete.rb +16 -0
  52. data/lib/typus/controller/filters.rb +24 -0
  53. data/lib/typus/controller/format.rb +70 -0
  54. data/lib/typus/orm/active_record.rb +9 -240
  55. data/lib/typus/orm/active_record/class_methods.rb +227 -0
  56. data/lib/typus/orm/active_record/instance_methods.rb +13 -0
  57. data/lib/typus/orm/active_record/search.rb +17 -5
  58. data/lib/typus/orm/active_record/user.rb +157 -0
  59. data/lib/typus/regex.rb +11 -0
  60. data/lib/typus/version.rb +1 -1
  61. data/test/app/controllers/admin/account_controller_test.rb +104 -0
  62. data/test/app/controllers/admin/assets_controller_test.rb +153 -0
  63. data/test/app/controllers/admin/base_controller_test.rb +41 -0
  64. data/test/app/controllers/admin/birds_controller_test.rb +42 -0
  65. data/test/app/controllers/admin/cases_controller_test.rb +21 -0
  66. data/test/app/controllers/admin/categories_controller_test.rb +141 -0
  67. data/test/app/controllers/admin/comments_controller_test.rb +79 -0
  68. data/test/app/controllers/admin/dashboard_controller_test.rb +162 -0
  69. data/test/app/controllers/admin/image_holders_controller_test.rb +75 -0
  70. data/test/app/controllers/admin/invoices_controller_test.rb +78 -0
  71. data/test/app/controllers/admin/orders_controller_test.rb +18 -0
  72. data/test/app/controllers/admin/pages_controller_test.rb +37 -0
  73. data/test/app/controllers/admin/posts_controller_test.rb +745 -0
  74. data/test/app/controllers/admin/projects_controller_test.rb +52 -0
  75. data/test/app/controllers/admin/session_controller_test.rb +92 -0
  76. data/test/app/controllers/admin/status_controller_test.rb +54 -0
  77. data/test/app/controllers/admin/typus_users_controller_test.rb +160 -0
  78. data/test/app/controllers/admin/users_controller_test.rb +106 -0
  79. data/test/app/helpers/admin/base_helper_test.rb +83 -0
  80. data/test/app/helpers/admin/dashboard_helper_test.rb +32 -0
  81. data/test/app/helpers/admin/file_preview_helper_test.rb +82 -0
  82. data/test/app/helpers/admin/filters_helper_test.rb +161 -0
  83. data/test/app/helpers/admin/form_helper_test.rb +126 -0
  84. data/test/app/helpers/admin/list_helper_test.rb +59 -0
  85. data/test/app/helpers/admin/relationships_helper_test.rb +19 -0
  86. data/test/app/helpers/admin/resources_helper_test.rb +46 -0
  87. data/test/app/helpers/admin/search_helper_test.rb +60 -0
  88. data/test/app/helpers/admin/sidebar_helper_test.rb +34 -0
  89. data/test/app/helpers/admin/table_helper_test.rb +215 -0
  90. data/test/app/mailers/admin/mailer_test.rb +32 -0
  91. data/test/app/models/typus_user_roles_test.rb +124 -0
  92. data/test/app/models/typus_user_test.rb +194 -0
  93. data/test/config/routes_test.rb +29 -0
  94. data/test/factories.rb +111 -0
  95. data/test/fixtures/config/broken/application.yml +68 -0
  96. data/test/fixtures/config/broken/application_roles.yml +20 -0
  97. data/test/fixtures/config/broken/empty.yml +0 -0
  98. data/test/fixtures/config/broken/empty_roles.yml +0 -0
  99. data/test/fixtures/config/broken/undefined.yml +3 -0
  100. data/test/fixtures/config/broken/undefined_roles.yml +6 -0
  101. data/test/fixtures/config/default/typus.yml +13 -0
  102. data/test/fixtures/config/default/typus_roles.yml +2 -0
  103. data/test/fixtures/config/empty/empty_01.yml +0 -0
  104. data/test/fixtures/config/empty/empty_01_roles.yml +0 -0
  105. data/test/fixtures/config/empty/empty_02.yml +0 -0
  106. data/test/fixtures/config/empty/empty_02_roles.yml +0 -0
  107. data/test/fixtures/config/locales/es.yml +10 -0
  108. data/test/fixtures/config/namespaced/application.yml +5 -0
  109. data/test/fixtures/config/namespaced/application_roles.yml +2 -0
  110. data/test/fixtures/config/ordered/001_roles.yml +2 -0
  111. data/test/fixtures/config/ordered/002_roles.yml +2 -0
  112. data/test/fixtures/config/unordered/app_one_roles.yml +2 -0
  113. data/test/fixtures/config/unordered/app_two_roles.yml +2 -0
  114. data/test/fixtures/rails_app/.gitignore +4 -0
  115. data/test/fixtures/rails_app/Capfile +6 -0
  116. data/test/fixtures/rails_app/README +256 -0
  117. data/test/fixtures/rails_app/Rakefile +7 -0
  118. data/test/fixtures/rails_app/app/controllers/admin/animals_controller.rb +2 -0
  119. data/test/fixtures/rails_app/app/controllers/admin/articles_controller.rb +2 -0
  120. data/test/fixtures/rails_app/app/controllers/admin/assets_controller.rb +51 -0
  121. data/test/fixtures/rails_app/app/controllers/admin/birds_controller.rb +2 -0
  122. data/test/fixtures/rails_app/app/controllers/admin/cases_controller.rb +2 -0
  123. data/test/fixtures/rails_app/app/controllers/admin/categories_controller.rb +2 -0
  124. data/test/fixtures/rails_app/app/controllers/admin/comments_controller.rb +2 -0
  125. data/test/fixtures/rails_app/app/controllers/admin/dogs_controller.rb +2 -0
  126. data/test/fixtures/rails_app/app/controllers/admin/entries_controller.rb +2 -0
  127. data/test/fixtures/rails_app/app/controllers/admin/image_holders_controller.rb +2 -0
  128. data/test/fixtures/rails_app/app/controllers/admin/invoices_controller.rb +2 -0
  129. data/test/fixtures/rails_app/app/controllers/admin/orders_controller.rb +2 -0
  130. data/test/fixtures/rails_app/app/controllers/admin/pages_controller.rb +7 -0
  131. data/test/fixtures/rails_app/app/controllers/admin/posts_controller.rb +2 -0
  132. data/test/fixtures/rails_app/app/controllers/admin/project_collaborators_controller.rb +2 -0
  133. data/test/fixtures/rails_app/app/controllers/admin/projects_controller.rb +2 -0
  134. data/test/fixtures/rails_app/app/controllers/admin/status_controller.rb +2 -0
  135. data/test/fixtures/rails_app/app/controllers/admin/typus_users_controller.rb +2 -0
  136. data/test/fixtures/rails_app/app/controllers/admin/users_controller.rb +2 -0
  137. data/test/fixtures/rails_app/app/controllers/admin/views_controller.rb +2 -0
  138. data/test/fixtures/rails_app/app/controllers/admin/watch_dog_controller.rb +2 -0
  139. data/test/fixtures/rails_app/app/controllers/application_controller.rb +3 -0
  140. data/test/fixtures/rails_app/app/helpers/application_helper.rb +2 -0
  141. data/test/fixtures/rails_app/app/helpers/form_helper.rb +3 -0
  142. data/test/fixtures/rails_app/app/models/animal.rb +21 -0
  143. data/test/fixtures/rails_app/app/models/article.rb +10 -0
  144. data/test/fixtures/rails_app/app/models/asset.rb +39 -0
  145. data/test/fixtures/rails_app/app/models/bird.rb +2 -0
  146. data/test/fixtures/rails_app/app/models/case.rb +2 -0
  147. data/test/fixtures/rails_app/app/models/category.rb +31 -0
  148. data/test/fixtures/rails_app/app/models/comment.rb +17 -0
  149. data/test/fixtures/rails_app/app/models/delayed/task.rb +5 -0
  150. data/test/fixtures/rails_app/app/models/dog.rb +2 -0
  151. data/test/fixtures/rails_app/app/models/entry.rb +23 -0
  152. data/test/fixtures/rails_app/app/models/image_holder.rb +21 -0
  153. data/test/fixtures/rails_app/app/models/invoice.rb +10 -0
  154. data/test/fixtures/rails_app/app/models/order.rb +9 -0
  155. data/test/fixtures/rails_app/app/models/page.rb +24 -0
  156. data/test/fixtures/rails_app/app/models/post.rb +32 -0
  157. data/test/fixtures/rails_app/app/models/project.rb +17 -0
  158. data/test/fixtures/rails_app/app/models/project_collaborator.rb +16 -0
  159. data/test/fixtures/rails_app/app/models/typus_user.rb +22 -0
  160. data/test/fixtures/rails_app/app/models/user.rb +10 -0
  161. data/test/fixtures/rails_app/app/models/view.rb +17 -0
  162. data/test/fixtures/rails_app/app/views/admin/assets/_index.html.erb +3 -0
  163. data/test/fixtures/rails_app/app/views/admin/cases/_index.html.erb +3 -0
  164. data/test/fixtures/rails_app/app/views/admin/categories/_index.html.erb +3 -0
  165. data/test/fixtures/rails_app/app/views/admin/dashboard/_sidebar.html.erb +11 -0
  166. data/test/fixtures/rails_app/app/views/admin/entries/_index.html.erb +3 -0
  167. data/test/fixtures/rails_app/app/views/admin/pages/_index.html.erb +3 -0
  168. data/test/fixtures/rails_app/app/views/admin/posts/_edit.html.erb +1 -0
  169. data/test/fixtures/rails_app/app/views/admin/posts/_index.html.erb +5 -0
  170. data/test/fixtures/rails_app/app/views/admin/posts/_new.html.erb +1 -0
  171. data/test/fixtures/rails_app/app/views/admin/posts/_show.html.erb +1 -0
  172. data/test/fixtures/rails_app/app/views/admin/resources/_sidebar.html.erb +1 -0
  173. data/test/fixtures/rails_app/app/views/admin/status/index.html.erb +9 -0
  174. data/test/fixtures/rails_app/app/views/admin/templates/_datepicker.html.erb +1 -0
  175. data/test/fixtures/rails_app/app/views/admin/watch_dog/index.html.erb +9 -0
  176. data/test/fixtures/rails_app/app/views/layouts/admin/headless.html.erb +38 -0
  177. data/test/fixtures/rails_app/config.ru +4 -0
  178. data/test/fixtures/rails_app/config/application.rb +44 -0
  179. data/test/fixtures/rails_app/config/boot.rb +13 -0
  180. data/test/fixtures/rails_app/config/database.yml +34 -0
  181. data/test/fixtures/rails_app/config/deploy.rb +32 -0
  182. data/test/fixtures/rails_app/config/environment.rb +5 -0
  183. data/test/fixtures/rails_app/config/environments/development.rb +32 -0
  184. data/test/fixtures/rails_app/config/environments/production.rb +54 -0
  185. data/test/fixtures/rails_app/config/environments/test.rb +40 -0
  186. data/test/fixtures/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  187. data/test/fixtures/rails_app/config/initializers/dragonfly.rb +1 -0
  188. data/test/fixtures/rails_app/config/initializers/inflections.rb +12 -0
  189. data/test/fixtures/rails_app/config/initializers/mime_types.rb +5 -0
  190. data/test/fixtures/rails_app/config/initializers/secret_token.rb +7 -0
  191. data/test/fixtures/rails_app/config/initializers/session_store.rb +8 -0
  192. data/test/fixtures/rails_app/config/initializers/typus.rb +5 -0
  193. data/test/fixtures/rails_app/config/initializers/typus_resources.rb +27 -0
  194. data/test/fixtures/rails_app/config/locales/en.yml +5 -0
  195. data/test/fixtures/rails_app/config/routes.rb +61 -0
  196. data/test/fixtures/rails_app/config/typus/README +68 -0
  197. data/test/fixtures/rails_app/config/typus/crud_basic.yml +10 -0
  198. data/test/fixtures/rails_app/config/typus/crud_basic_roles.yml +2 -0
  199. data/test/fixtures/rails_app/config/typus/crud_extended.yml +64 -0
  200. data/test/fixtures/rails_app/config/typus/crud_extended_roles.yml +18 -0
  201. data/test/fixtures/rails_app/config/typus/has_many.yml +0 -0
  202. data/test/fixtures/rails_app/config/typus/has_many_roles.yml +0 -0
  203. data/test/fixtures/rails_app/config/typus/has_many_through.yml +23 -0
  204. data/test/fixtures/rails_app/config/typus/has_many_through_roles.yml +4 -0
  205. data/test/fixtures/rails_app/config/typus/has_one.yml +12 -0
  206. data/test/fixtures/rails_app/config/typus/has_one_roles.yml +3 -0
  207. data/test/fixtures/rails_app/config/typus/polymorphic.yml +17 -0
  208. data/test/fixtures/rails_app/config/typus/polymorphic_roles.yml +5 -0
  209. data/test/fixtures/rails_app/config/typus/resource_roles.yml +7 -0
  210. data/test/fixtures/rails_app/config/typus/sti.yml +5 -0
  211. data/test/fixtures/rails_app/config/typus/sti_roles.yml +2 -0
  212. data/test/fixtures/rails_app/config/typus/typus.yml +13 -0
  213. data/test/fixtures/rails_app/config/typus/typus_roles.yml +2 -0
  214. data/test/fixtures/rails_app/config/typus/unknown.yml +3 -0
  215. data/test/fixtures/rails_app/config/typus/unknown_roles.yml +5 -0
  216. data/test/fixtures/rails_app/db/.gitkeep +0 -0
  217. data/test/fixtures/rails_app/db/schema.rb +174 -0
  218. data/test/fixtures/rails_app/db/seeds.rb +54 -0
  219. data/test/fixtures/rails_app/db/seeds/assets/000.jpg +0 -0
  220. data/test/fixtures/rails_app/db/seeds/assets/001.jpg +0 -0
  221. data/test/fixtures/rails_app/db/seeds/assets/002.jpg +0 -0
  222. data/test/fixtures/rails_app/db/seeds/assets/003.jpg +0 -0
  223. data/test/fixtures/rails_app/db/seeds/assets/004.jpg +0 -0
  224. data/test/fixtures/rails_app/public/404.html +26 -0
  225. data/test/fixtures/rails_app/public/422.html +26 -0
  226. data/test/fixtures/rails_app/public/500.html +26 -0
  227. data/test/fixtures/rails_app/public/favicon.ico +0 -0
  228. data/test/fixtures/rails_app/public/images/rails.png +0 -0
  229. data/test/fixtures/rails_app/public/javascripts/application.js +2 -0
  230. data/test/fixtures/rails_app/public/javascripts/controls.js +965 -0
  231. data/test/fixtures/rails_app/public/javascripts/dragdrop.js +974 -0
  232. data/test/fixtures/rails_app/public/javascripts/effects.js +1123 -0
  233. data/test/fixtures/rails_app/public/javascripts/prototype.js +6001 -0
  234. data/test/fixtures/rails_app/public/javascripts/rails.js +175 -0
  235. data/test/fixtures/rails_app/public/robots.txt +5 -0
  236. data/test/fixtures/rails_app/public/stylesheets/.gitkeep +0 -0
  237. data/test/fixtures/rails_app/script/rails +6 -0
  238. data/test/lib/support/active_record_test.rb +150 -0
  239. data/test/lib/support/fake_user_test.rb +59 -0
  240. data/test/lib/support/hash_test.rb +29 -0
  241. data/test/lib/support/object_test.rb +17 -0
  242. data/test/lib/support/string_test.rb +116 -0
  243. data/test/lib/typus/configuration_test.rb +46 -0
  244. data/test/lib/typus/controller/actions_test.rb +141 -0
  245. data/test/lib/typus/controller/associations_test.rb +7 -0
  246. data/test/lib/typus/controller/autocomplete_test.rb +7 -0
  247. data/test/lib/typus/controller/filters_test.rb +73 -0
  248. data/test/lib/typus/controller/format_test.rb +7 -0
  249. data/test/lib/typus/i18n_test.rb +9 -0
  250. data/test/lib/typus/orm/active_record/class_methods_test.rb +378 -0
  251. data/test/lib/typus/orm/active_record/search_test.rb +330 -0
  252. data/test/lib/typus/regex_test.rb +53 -0
  253. data/test/lib/typus/resources_test.rb +41 -0
  254. data/test/lib/typus_test.rb +141 -0
  255. data/test/test_helper.rb +15 -0
  256. data/typus.gemspec +25 -0
  257. metadata +586 -64
  258. data/Gemfile.lock +0 -149
  259. data/app/views/admin/helpers/_apps.html.erb +0 -9
  260. data/lib/generators/templates/public/admin/javascripts/application.js +0 -2
  261. data/lib/generators/templates/public/admin/javascripts/jquery-1.4.4.min.js +0 -167
  262. data/lib/generators/templates/public/admin/javascripts/jquery.application.js +0 -16
  263. data/lib/generators/templates/public/admin/javascripts/jquery.rails.js +0 -160
  264. data/lib/generators/templates/public/admin/javascripts/jquery.searchField.js +0 -91
  265. data/lib/generators/templates/public/admin/stylesheets/application.css +0 -11
  266. data/lib/generators/templates/public/admin/stylesheets/screen.css +0 -367
  267. data/lib/generators/templates/public/admin/vendor/fancybox/blank.gif +0 -0
  268. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_close.png +0 -0
  269. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_loading.png +0 -0
  270. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_nav_left.png +0 -0
  271. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_nav_right.png +0 -0
  272. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_e.png +0 -0
  273. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_n.png +0 -0
  274. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_ne.png +0 -0
  275. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_nw.png +0 -0
  276. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_s.png +0 -0
  277. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_se.png +0 -0
  278. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_sw.png +0 -0
  279. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_w.png +0 -0
  280. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_title_left.png +0 -0
  281. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_title_main.png +0 -0
  282. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_title_over.png +0 -0
  283. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_title_right.png +0 -0
  284. data/lib/generators/templates/public/admin/vendor/fancybox/fancybox-x.png +0 -0
  285. data/lib/generators/templates/public/admin/vendor/fancybox/fancybox-y.png +0 -0
  286. data/lib/generators/templates/public/admin/vendor/fancybox/fancybox.png +0 -0
  287. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.easing-1.3.pack.js +0 -72
  288. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.fancybox-1.3.4.css +0 -359
  289. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.fancybox-1.3.4.js +0 -1156
  290. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.fancybox-1.3.4.pack.js +0 -46
  291. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.mousewheel-3.0.4.pack.js +0 -14
  292. data/lib/typus/actions.rb +0 -41
  293. data/lib/typus/filters.rb +0 -12
  294. data/lib/typus/format.rb +0 -70
  295. data/lib/typus/user.rb +0 -157
@@ -1,1156 +0,0 @@
1
- /*
2
- * FancyBox - jQuery Plugin
3
- * Simple and fancy lightbox alternative
4
- *
5
- * Examples and documentation at: http://fancybox.net
6
- *
7
- * Copyright (c) 2008 - 2010 Janis Skarnelis
8
- * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
9
- *
10
- * Version: 1.3.4 (11/11/2010)
11
- * Requires: jQuery v1.3+
12
- *
13
- * Dual licensed under the MIT and GPL licenses:
14
- * http://www.opensource.org/licenses/mit-license.php
15
- * http://www.gnu.org/licenses/gpl.html
16
- */
17
-
18
- ;(function($) {
19
- var tmp, loading, overlay, wrap, outer, content, close, title, nav_left, nav_right,
20
-
21
- selectedIndex = 0, selectedOpts = {}, selectedArray = [], currentIndex = 0, currentOpts = {}, currentArray = [],
22
-
23
- ajaxLoader = null, imgPreloader = new Image(), imgRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i, swfRegExp = /[^\.]\.(swf)\s*$/i,
24
-
25
- loadingTimer, loadingFrame = 1,
26
-
27
- titleHeight = 0, titleStr = '', start_pos, final_pos, busy = false, fx = $.extend($('<div/>')[0], { prop: 0 }),
28
-
29
- isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest,
30
-
31
- /*
32
- * Private methods
33
- */
34
-
35
- _abort = function() {
36
- loading.hide();
37
-
38
- imgPreloader.onerror = imgPreloader.onload = null;
39
-
40
- if (ajaxLoader) {
41
- ajaxLoader.abort();
42
- }
43
-
44
- tmp.empty();
45
- },
46
-
47
- _error = function() {
48
- if (false === selectedOpts.onError(selectedArray, selectedIndex, selectedOpts)) {
49
- loading.hide();
50
- busy = false;
51
- return;
52
- }
53
-
54
- selectedOpts.titleShow = false;
55
-
56
- selectedOpts.width = 'auto';
57
- selectedOpts.height = 'auto';
58
-
59
- tmp.html( '<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>' );
60
-
61
- _process_inline();
62
- },
63
-
64
- _start = function() {
65
- var obj = selectedArray[ selectedIndex ],
66
- href,
67
- type,
68
- title,
69
- str,
70
- emb,
71
- ret;
72
-
73
- _abort();
74
-
75
- selectedOpts = $.extend({}, $.fn.fancybox.defaults, (typeof $(obj).data('fancybox') == 'undefined' ? selectedOpts : $(obj).data('fancybox')));
76
-
77
- ret = selectedOpts.onStart(selectedArray, selectedIndex, selectedOpts);
78
-
79
- if (ret === false) {
80
- busy = false;
81
- return;
82
- } else if (typeof ret == 'object') {
83
- selectedOpts = $.extend(selectedOpts, ret);
84
- }
85
-
86
- title = selectedOpts.title || (obj.nodeName ? $(obj).attr('title') : obj.title) || '';
87
-
88
- if (obj.nodeName && !selectedOpts.orig) {
89
- selectedOpts.orig = $(obj).children("img:first").length ? $(obj).children("img:first") : $(obj);
90
- }
91
-
92
- if (title === '' && selectedOpts.orig && selectedOpts.titleFromAlt) {
93
- title = selectedOpts.orig.attr('alt');
94
- }
95
-
96
- href = selectedOpts.href || (obj.nodeName ? $(obj).attr('href') : obj.href) || null;
97
-
98
- if ((/^(?:javascript)/i).test(href) || href == '#') {
99
- href = null;
100
- }
101
-
102
- if (selectedOpts.type) {
103
- type = selectedOpts.type;
104
-
105
- if (!href) {
106
- href = selectedOpts.content;
107
- }
108
-
109
- } else if (selectedOpts.content) {
110
- type = 'html';
111
-
112
- } else if (href) {
113
- if (href.match(imgRegExp)) {
114
- type = 'image';
115
-
116
- } else if (href.match(swfRegExp)) {
117
- type = 'swf';
118
-
119
- } else if ($(obj).hasClass("iframe")) {
120
- type = 'iframe';
121
-
122
- } else if (href.indexOf("#") === 0) {
123
- type = 'inline';
124
-
125
- } else {
126
- type = 'ajax';
127
- }
128
- }
129
-
130
- if (!type) {
131
- _error();
132
- return;
133
- }
134
-
135
- if (type == 'inline') {
136
- obj = href.substr(href.indexOf("#"));
137
- type = $(obj).length > 0 ? 'inline' : 'ajax';
138
- }
139
-
140
- selectedOpts.type = type;
141
- selectedOpts.href = href;
142
- selectedOpts.title = title;
143
-
144
- if (selectedOpts.autoDimensions) {
145
- if (selectedOpts.type == 'html' || selectedOpts.type == 'inline' || selectedOpts.type == 'ajax') {
146
- selectedOpts.width = 'auto';
147
- selectedOpts.height = 'auto';
148
- } else {
149
- selectedOpts.autoDimensions = false;
150
- }
151
- }
152
-
153
- if (selectedOpts.modal) {
154
- selectedOpts.overlayShow = true;
155
- selectedOpts.hideOnOverlayClick = false;
156
- selectedOpts.hideOnContentClick = false;
157
- selectedOpts.enableEscapeButton = false;
158
- selectedOpts.showCloseButton = false;
159
- }
160
-
161
- selectedOpts.padding = parseInt(selectedOpts.padding, 10);
162
- selectedOpts.margin = parseInt(selectedOpts.margin, 10);
163
-
164
- tmp.css('padding', (selectedOpts.padding + selectedOpts.margin));
165
-
166
- $('.fancybox-inline-tmp').unbind('fancybox-cancel').bind('fancybox-change', function() {
167
- $(this).replaceWith(content.children());
168
- });
169
-
170
- switch (type) {
171
- case 'html' :
172
- tmp.html( selectedOpts.content );
173
- _process_inline();
174
- break;
175
-
176
- case 'inline' :
177
- if ( $(obj).parent().is('#fancybox-content') === true) {
178
- busy = false;
179
- return;
180
- }
181
-
182
- $('<div class="fancybox-inline-tmp" />')
183
- .hide()
184
- .insertBefore( $(obj) )
185
- .bind('fancybox-cleanup', function() {
186
- $(this).replaceWith(content.children());
187
- }).bind('fancybox-cancel', function() {
188
- $(this).replaceWith(tmp.children());
189
- });
190
-
191
- $(obj).appendTo(tmp);
192
-
193
- _process_inline();
194
- break;
195
-
196
- case 'image':
197
- busy = false;
198
-
199
- $.fancybox.showActivity();
200
-
201
- imgPreloader = new Image();
202
-
203
- imgPreloader.onerror = function() {
204
- _error();
205
- };
206
-
207
- imgPreloader.onload = function() {
208
- busy = true;
209
-
210
- imgPreloader.onerror = imgPreloader.onload = null;
211
-
212
- _process_image();
213
- };
214
-
215
- imgPreloader.src = href;
216
- break;
217
-
218
- case 'swf':
219
- selectedOpts.scrolling = 'no';
220
-
221
- str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"><param name="movie" value="' + href + '"></param>';
222
- emb = '';
223
-
224
- $.each(selectedOpts.swf, function(name, val) {
225
- str += '<param name="' + name + '" value="' + val + '"></param>';
226
- emb += ' ' + name + '="' + val + '"';
227
- });
228
-
229
- str += '<embed src="' + href + '" type="application/x-shockwave-flash" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"' + emb + '></embed></object>';
230
-
231
- tmp.html(str);
232
-
233
- _process_inline();
234
- break;
235
-
236
- case 'ajax':
237
- busy = false;
238
-
239
- $.fancybox.showActivity();
240
-
241
- selectedOpts.ajax.win = selectedOpts.ajax.success;
242
-
243
- ajaxLoader = $.ajax($.extend({}, selectedOpts.ajax, {
244
- url : href,
245
- data : selectedOpts.ajax.data || {},
246
- error : function(XMLHttpRequest, textStatus, errorThrown) {
247
- if ( XMLHttpRequest.status > 0 ) {
248
- _error();
249
- }
250
- },
251
- success : function(data, textStatus, XMLHttpRequest) {
252
- var o = typeof XMLHttpRequest == 'object' ? XMLHttpRequest : ajaxLoader;
253
- if (o.status == 200) {
254
- if ( typeof selectedOpts.ajax.win == 'function' ) {
255
- ret = selectedOpts.ajax.win(href, data, textStatus, XMLHttpRequest);
256
-
257
- if (ret === false) {
258
- loading.hide();
259
- return;
260
- } else if (typeof ret == 'string' || typeof ret == 'object') {
261
- data = ret;
262
- }
263
- }
264
-
265
- tmp.html( data );
266
- _process_inline();
267
- }
268
- }
269
- }));
270
-
271
- break;
272
-
273
- case 'iframe':
274
- _show();
275
- break;
276
- }
277
- },
278
-
279
- _process_inline = function() {
280
- var
281
- w = selectedOpts.width,
282
- h = selectedOpts.height;
283
-
284
- if (w.toString().indexOf('%') > -1) {
285
- w = parseInt( ($(window).width() - (selectedOpts.margin * 2)) * parseFloat(w) / 100, 10) + 'px';
286
-
287
- } else {
288
- w = w == 'auto' ? 'auto' : w + 'px';
289
- }
290
-
291
- if (h.toString().indexOf('%') > -1) {
292
- h = parseInt( ($(window).height() - (selectedOpts.margin * 2)) * parseFloat(h) / 100, 10) + 'px';
293
-
294
- } else {
295
- h = h == 'auto' ? 'auto' : h + 'px';
296
- }
297
-
298
- tmp.wrapInner('<div style="width:' + w + ';height:' + h + ';overflow: ' + (selectedOpts.scrolling == 'auto' ? 'auto' : (selectedOpts.scrolling == 'yes' ? 'scroll' : 'hidden')) + ';position:relative;"></div>');
299
-
300
- selectedOpts.width = tmp.width();
301
- selectedOpts.height = tmp.height();
302
-
303
- _show();
304
- },
305
-
306
- _process_image = function() {
307
- selectedOpts.width = imgPreloader.width;
308
- selectedOpts.height = imgPreloader.height;
309
-
310
- $("<img />").attr({
311
- 'id' : 'fancybox-img',
312
- 'src' : imgPreloader.src,
313
- 'alt' : selectedOpts.title
314
- }).appendTo( tmp );
315
-
316
- _show();
317
- },
318
-
319
- _show = function() {
320
- var pos, equal;
321
-
322
- loading.hide();
323
-
324
- if (wrap.is(":visible") && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) {
325
- $.event.trigger('fancybox-cancel');
326
-
327
- busy = false;
328
- return;
329
- }
330
-
331
- busy = true;
332
-
333
- $(content.add( overlay )).unbind();
334
-
335
- $(window).unbind("resize.fb scroll.fb");
336
- $(document).unbind('keydown.fb');
337
-
338
- if (wrap.is(":visible") && currentOpts.titlePosition !== 'outside') {
339
- wrap.css('height', wrap.height());
340
- }
341
-
342
- currentArray = selectedArray;
343
- currentIndex = selectedIndex;
344
- currentOpts = selectedOpts;
345
-
346
- if (currentOpts.overlayShow) {
347
- overlay.css({
348
- 'background-color' : currentOpts.overlayColor,
349
- 'opacity' : currentOpts.overlayOpacity,
350
- 'cursor' : currentOpts.hideOnOverlayClick ? 'pointer' : 'auto',
351
- 'height' : $(document).height()
352
- });
353
-
354
- if (!overlay.is(':visible')) {
355
- if (isIE6) {
356
- $('select:not(#fancybox-tmp select)').filter(function() {
357
- return this.style.visibility !== 'hidden';
358
- }).css({'visibility' : 'hidden'}).one('fancybox-cleanup', function() {
359
- this.style.visibility = 'inherit';
360
- });
361
- }
362
-
363
- overlay.show();
364
- }
365
- } else {
366
- overlay.hide();
367
- }
368
-
369
- final_pos = _get_zoom_to();
370
-
371
- _process_title();
372
-
373
- if (wrap.is(":visible")) {
374
- $( close.add( nav_left ).add( nav_right ) ).hide();
375
-
376
- pos = wrap.position(),
377
-
378
- start_pos = {
379
- top : pos.top,
380
- left : pos.left,
381
- width : wrap.width(),
382
- height : wrap.height()
383
- };
384
-
385
- equal = (start_pos.width == final_pos.width && start_pos.height == final_pos.height);
386
-
387
- content.fadeTo(currentOpts.changeFade, 0.3, function() {
388
- var finish_resizing = function() {
389
- content.html( tmp.contents() ).fadeTo(currentOpts.changeFade, 1, _finish);
390
- };
391
-
392
- $.event.trigger('fancybox-change');
393
-
394
- content
395
- .empty()
396
- .removeAttr('filter')
397
- .css({
398
- 'border-width' : currentOpts.padding,
399
- 'width' : final_pos.width - currentOpts.padding * 2,
400
- 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2
401
- });
402
-
403
- if (equal) {
404
- finish_resizing();
405
-
406
- } else {
407
- fx.prop = 0;
408
-
409
- $(fx).animate({prop: 1}, {
410
- duration : currentOpts.changeSpeed,
411
- easing : currentOpts.easingChange,
412
- step : _draw,
413
- complete : finish_resizing
414
- });
415
- }
416
- });
417
-
418
- return;
419
- }
420
-
421
- wrap.removeAttr("style");
422
-
423
- content.css('border-width', currentOpts.padding);
424
-
425
- if (currentOpts.transitionIn == 'elastic') {
426
- start_pos = _get_zoom_from();
427
-
428
- content.html( tmp.contents() );
429
-
430
- wrap.show();
431
-
432
- if (currentOpts.opacity) {
433
- final_pos.opacity = 0;
434
- }
435
-
436
- fx.prop = 0;
437
-
438
- $(fx).animate({prop: 1}, {
439
- duration : currentOpts.speedIn,
440
- easing : currentOpts.easingIn,
441
- step : _draw,
442
- complete : _finish
443
- });
444
-
445
- return;
446
- }
447
-
448
- if (currentOpts.titlePosition == 'inside' && titleHeight > 0) {
449
- title.show();
450
- }
451
-
452
- content
453
- .css({
454
- 'width' : final_pos.width - currentOpts.padding * 2,
455
- 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2
456
- })
457
- .html( tmp.contents() );
458
-
459
- wrap
460
- .css(final_pos)
461
- .fadeIn( currentOpts.transitionIn == 'none' ? 0 : currentOpts.speedIn, _finish );
462
- },
463
-
464
- _format_title = function(title) {
465
- if (title && title.length) {
466
- if (currentOpts.titlePosition == 'float') {
467
- return '<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">' + title + '</td><td id="fancybox-title-float-right"></td></tr></table>';
468
- }
469
-
470
- return '<div id="fancybox-title-' + currentOpts.titlePosition + '">' + title + '</div>';
471
- }
472
-
473
- return false;
474
- },
475
-
476
- _process_title = function() {
477
- titleStr = currentOpts.title || '';
478
- titleHeight = 0;
479
-
480
- title
481
- .empty()
482
- .removeAttr('style')
483
- .removeClass();
484
-
485
- if (currentOpts.titleShow === false) {
486
- title.hide();
487
- return;
488
- }
489
-
490
- titleStr = $.isFunction(currentOpts.titleFormat) ? currentOpts.titleFormat(titleStr, currentArray, currentIndex, currentOpts) : _format_title(titleStr);
491
-
492
- if (!titleStr || titleStr === '') {
493
- title.hide();
494
- return;
495
- }
496
-
497
- title
498
- .addClass('fancybox-title-' + currentOpts.titlePosition)
499
- .html( titleStr )
500
- .appendTo( 'body' )
501
- .show();
502
-
503
- switch (currentOpts.titlePosition) {
504
- case 'inside':
505
- title
506
- .css({
507
- 'width' : final_pos.width - (currentOpts.padding * 2),
508
- 'marginLeft' : currentOpts.padding,
509
- 'marginRight' : currentOpts.padding
510
- });
511
-
512
- titleHeight = title.outerHeight(true);
513
-
514
- title.appendTo( outer );
515
-
516
- final_pos.height += titleHeight;
517
- break;
518
-
519
- case 'over':
520
- title
521
- .css({
522
- 'marginLeft' : currentOpts.padding,
523
- 'width' : final_pos.width - (currentOpts.padding * 2),
524
- 'bottom' : currentOpts.padding
525
- })
526
- .appendTo( outer );
527
- break;
528
-
529
- case 'float':
530
- title
531
- .css('left', parseInt((title.width() - final_pos.width - 40)/ 2, 10) * -1)
532
- .appendTo( wrap );
533
- break;
534
-
535
- default:
536
- title
537
- .css({
538
- 'width' : final_pos.width - (currentOpts.padding * 2),
539
- 'paddingLeft' : currentOpts.padding,
540
- 'paddingRight' : currentOpts.padding
541
- })
542
- .appendTo( wrap );
543
- break;
544
- }
545
-
546
- title.hide();
547
- },
548
-
549
- _set_navigation = function() {
550
- if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) {
551
- $(document).bind('keydown.fb', function(e) {
552
- if (e.keyCode == 27 && currentOpts.enableEscapeButton) {
553
- e.preventDefault();
554
- $.fancybox.close();
555
-
556
- } else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') {
557
- e.preventDefault();
558
- $.fancybox[ e.keyCode == 37 ? 'prev' : 'next']();
559
- }
560
- });
561
- }
562
-
563
- if (!currentOpts.showNavArrows) {
564
- nav_left.hide();
565
- nav_right.hide();
566
- return;
567
- }
568
-
569
- if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex !== 0) {
570
- nav_left.show();
571
- }
572
-
573
- if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != (currentArray.length -1)) {
574
- nav_right.show();
575
- }
576
- },
577
-
578
- _finish = function () {
579
- if (!$.support.opacity) {
580
- content.get(0).style.removeAttribute('filter');
581
- wrap.get(0).style.removeAttribute('filter');
582
- }
583
-
584
- if (selectedOpts.autoDimensions) {
585
- content.css('height', 'auto');
586
- }
587
-
588
- wrap.css('height', 'auto');
589
-
590
- if (titleStr && titleStr.length) {
591
- title.show();
592
- }
593
-
594
- if (currentOpts.showCloseButton) {
595
- close.show();
596
- }
597
-
598
- _set_navigation();
599
-
600
- if (currentOpts.hideOnContentClick) {
601
- content.bind('click', $.fancybox.close);
602
- }
603
-
604
- if (currentOpts.hideOnOverlayClick) {
605
- overlay.bind('click', $.fancybox.close);
606
- }
607
-
608
- $(window).bind("resize.fb", $.fancybox.resize);
609
-
610
- if (currentOpts.centerOnScroll) {
611
- $(window).bind("scroll.fb", $.fancybox.center);
612
- }
613
-
614
- if (currentOpts.type == 'iframe') {
615
- $('<iframe id="fancybox-frame" name="fancybox-frame' + new Date().getTime() + '" frameborder="0" hspace="0" ' + ($.browser.msie ? 'allowtransparency="true""' : '') + ' scrolling="' + selectedOpts.scrolling + '" src="' + currentOpts.href + '"></iframe>').appendTo(content);
616
- }
617
-
618
- wrap.show();
619
-
620
- busy = false;
621
-
622
- $.fancybox.center();
623
-
624
- currentOpts.onComplete(currentArray, currentIndex, currentOpts);
625
-
626
- _preload_images();
627
- },
628
-
629
- _preload_images = function() {
630
- var href,
631
- objNext;
632
-
633
- if ((currentArray.length -1) > currentIndex) {
634
- href = currentArray[ currentIndex + 1 ].href;
635
-
636
- if (typeof href !== 'undefined' && href.match(imgRegExp)) {
637
- objNext = new Image();
638
- objNext.src = href;
639
- }
640
- }
641
-
642
- if (currentIndex > 0) {
643
- href = currentArray[ currentIndex - 1 ].href;
644
-
645
- if (typeof href !== 'undefined' && href.match(imgRegExp)) {
646
- objNext = new Image();
647
- objNext.src = href;
648
- }
649
- }
650
- },
651
-
652
- _draw = function(pos) {
653
- var dim = {
654
- width : parseInt(start_pos.width + (final_pos.width - start_pos.width) * pos, 10),
655
- height : parseInt(start_pos.height + (final_pos.height - start_pos.height) * pos, 10),
656
-
657
- top : parseInt(start_pos.top + (final_pos.top - start_pos.top) * pos, 10),
658
- left : parseInt(start_pos.left + (final_pos.left - start_pos.left) * pos, 10)
659
- };
660
-
661
- if (typeof final_pos.opacity !== 'undefined') {
662
- dim.opacity = pos < 0.5 ? 0.5 : pos;
663
- }
664
-
665
- wrap.css(dim);
666
-
667
- content.css({
668
- 'width' : dim.width - currentOpts.padding * 2,
669
- 'height' : dim.height - (titleHeight * pos) - currentOpts.padding * 2
670
- });
671
- },
672
-
673
- _get_viewport = function() {
674
- return [
675
- $(window).width() - (currentOpts.margin * 2),
676
- $(window).height() - (currentOpts.margin * 2),
677
- $(document).scrollLeft() + currentOpts.margin,
678
- $(document).scrollTop() + currentOpts.margin
679
- ];
680
- },
681
-
682
- _get_zoom_to = function () {
683
- var view = _get_viewport(),
684
- to = {},
685
- resize = currentOpts.autoScale,
686
- double_padding = currentOpts.padding * 2,
687
- ratio;
688
-
689
- if (currentOpts.width.toString().indexOf('%') > -1) {
690
- to.width = parseInt((view[0] * parseFloat(currentOpts.width)) / 100, 10);
691
- } else {
692
- to.width = currentOpts.width + double_padding;
693
- }
694
-
695
- if (currentOpts.height.toString().indexOf('%') > -1) {
696
- to.height = parseInt((view[1] * parseFloat(currentOpts.height)) / 100, 10);
697
- } else {
698
- to.height = currentOpts.height + double_padding;
699
- }
700
-
701
- if (resize && (to.width > view[0] || to.height > view[1])) {
702
- if (selectedOpts.type == 'image' || selectedOpts.type == 'swf') {
703
- ratio = (currentOpts.width ) / (currentOpts.height );
704
-
705
- if ((to.width ) > view[0]) {
706
- to.width = view[0];
707
- to.height = parseInt(((to.width - double_padding) / ratio) + double_padding, 10);
708
- }
709
-
710
- if ((to.height) > view[1]) {
711
- to.height = view[1];
712
- to.width = parseInt(((to.height - double_padding) * ratio) + double_padding, 10);
713
- }
714
-
715
- } else {
716
- to.width = Math.min(to.width, view[0]);
717
- to.height = Math.min(to.height, view[1]);
718
- }
719
- }
720
-
721
- to.top = parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - to.height - 40) * 0.5)), 10);
722
- to.left = parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - to.width - 40) * 0.5)), 10);
723
-
724
- return to;
725
- },
726
-
727
- _get_obj_pos = function(obj) {
728
- var pos = obj.offset();
729
-
730
- pos.top += parseInt( obj.css('paddingTop'), 10 ) || 0;
731
- pos.left += parseInt( obj.css('paddingLeft'), 10 ) || 0;
732
-
733
- pos.top += parseInt( obj.css('border-top-width'), 10 ) || 0;
734
- pos.left += parseInt( obj.css('border-left-width'), 10 ) || 0;
735
-
736
- pos.width = obj.width();
737
- pos.height = obj.height();
738
-
739
- return pos;
740
- },
741
-
742
- _get_zoom_from = function() {
743
- var orig = selectedOpts.orig ? $(selectedOpts.orig) : false,
744
- from = {},
745
- pos,
746
- view;
747
-
748
- if (orig && orig.length) {
749
- pos = _get_obj_pos(orig);
750
-
751
- from = {
752
- width : pos.width + (currentOpts.padding * 2),
753
- height : pos.height + (currentOpts.padding * 2),
754
- top : pos.top - currentOpts.padding - 20,
755
- left : pos.left - currentOpts.padding - 20
756
- };
757
-
758
- } else {
759
- view = _get_viewport();
760
-
761
- from = {
762
- width : currentOpts.padding * 2,
763
- height : currentOpts.padding * 2,
764
- top : parseInt(view[3] + view[1] * 0.5, 10),
765
- left : parseInt(view[2] + view[0] * 0.5, 10)
766
- };
767
- }
768
-
769
- return from;
770
- },
771
-
772
- _animate_loading = function() {
773
- if (!loading.is(':visible')){
774
- clearInterval(loadingTimer);
775
- return;
776
- }
777
-
778
- $('div', loading).css('top', (loadingFrame * -40) + 'px');
779
-
780
- loadingFrame = (loadingFrame + 1) % 12;
781
- };
782
-
783
- /*
784
- * Public methods
785
- */
786
-
787
- $.fn.fancybox = function(options) {
788
- if (!$(this).length) {
789
- return this;
790
- }
791
-
792
- $(this)
793
- .data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {})))
794
- .unbind('click.fb')
795
- .bind('click.fb', function(e) {
796
- e.preventDefault();
797
-
798
- if (busy) {
799
- return;
800
- }
801
-
802
- busy = true;
803
-
804
- $(this).blur();
805
-
806
- selectedArray = [];
807
- selectedIndex = 0;
808
-
809
- var rel = $(this).attr('rel') || '';
810
-
811
- if (!rel || rel == '' || rel === 'nofollow') {
812
- selectedArray.push(this);
813
-
814
- } else {
815
- selectedArray = $("a[rel=" + rel + "], area[rel=" + rel + "]");
816
- selectedIndex = selectedArray.index( this );
817
- }
818
-
819
- _start();
820
-
821
- return;
822
- });
823
-
824
- return this;
825
- };
826
-
827
- $.fancybox = function(obj) {
828
- var opts;
829
-
830
- if (busy) {
831
- return;
832
- }
833
-
834
- busy = true;
835
- opts = typeof arguments[1] !== 'undefined' ? arguments[1] : {};
836
-
837
- selectedArray = [];
838
- selectedIndex = parseInt(opts.index, 10) || 0;
839
-
840
- if ($.isArray(obj)) {
841
- for (var i = 0, j = obj.length; i < j; i++) {
842
- if (typeof obj[i] == 'object') {
843
- $(obj[i]).data('fancybox', $.extend({}, opts, obj[i]));
844
- } else {
845
- obj[i] = $({}).data('fancybox', $.extend({content : obj[i]}, opts));
846
- }
847
- }
848
-
849
- selectedArray = jQuery.merge(selectedArray, obj);
850
-
851
- } else {
852
- if (typeof obj == 'object') {
853
- $(obj).data('fancybox', $.extend({}, opts, obj));
854
- } else {
855
- obj = $({}).data('fancybox', $.extend({content : obj}, opts));
856
- }
857
-
858
- selectedArray.push(obj);
859
- }
860
-
861
- if (selectedIndex > selectedArray.length || selectedIndex < 0) {
862
- selectedIndex = 0;
863
- }
864
-
865
- _start();
866
- };
867
-
868
- $.fancybox.showActivity = function() {
869
- clearInterval(loadingTimer);
870
-
871
- loading.show();
872
- loadingTimer = setInterval(_animate_loading, 66);
873
- };
874
-
875
- $.fancybox.hideActivity = function() {
876
- loading.hide();
877
- };
878
-
879
- $.fancybox.next = function() {
880
- return $.fancybox.pos( currentIndex + 1);
881
- };
882
-
883
- $.fancybox.prev = function() {
884
- return $.fancybox.pos( currentIndex - 1);
885
- };
886
-
887
- $.fancybox.pos = function(pos) {
888
- if (busy) {
889
- return;
890
- }
891
-
892
- pos = parseInt(pos);
893
-
894
- selectedArray = currentArray;
895
-
896
- if (pos > -1 && pos < currentArray.length) {
897
- selectedIndex = pos;
898
- _start();
899
-
900
- } else if (currentOpts.cyclic && currentArray.length > 1) {
901
- selectedIndex = pos >= currentArray.length ? 0 : currentArray.length - 1;
902
- _start();
903
- }
904
-
905
- return;
906
- };
907
-
908
- $.fancybox.cancel = function() {
909
- if (busy) {
910
- return;
911
- }
912
-
913
- busy = true;
914
-
915
- $.event.trigger('fancybox-cancel');
916
-
917
- _abort();
918
-
919
- selectedOpts.onCancel(selectedArray, selectedIndex, selectedOpts);
920
-
921
- busy = false;
922
- };
923
-
924
- // Note: within an iframe use - parent.$.fancybox.close();
925
- $.fancybox.close = function() {
926
- if (busy || wrap.is(':hidden')) {
927
- return;
928
- }
929
-
930
- busy = true;
931
-
932
- if (currentOpts && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) {
933
- busy = false;
934
- return;
935
- }
936
-
937
- _abort();
938
-
939
- $(close.add( nav_left ).add( nav_right )).hide();
940
-
941
- $(content.add( overlay )).unbind();
942
-
943
- $(window).unbind("resize.fb scroll.fb");
944
- $(document).unbind('keydown.fb');
945
-
946
- content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank');
947
-
948
- if (currentOpts.titlePosition !== 'inside') {
949
- title.empty();
950
- }
951
-
952
- wrap.stop();
953
-
954
- function _cleanup() {
955
- overlay.fadeOut('fast');
956
-
957
- title.empty().hide();
958
- wrap.hide();
959
-
960
- $.event.trigger('fancybox-cleanup');
961
-
962
- content.empty();
963
-
964
- currentOpts.onClosed(currentArray, currentIndex, currentOpts);
965
-
966
- currentArray = selectedOpts = [];
967
- currentIndex = selectedIndex = 0;
968
- currentOpts = selectedOpts = {};
969
-
970
- busy = false;
971
- }
972
-
973
- if (currentOpts.transitionOut == 'elastic') {
974
- start_pos = _get_zoom_from();
975
-
976
- var pos = wrap.position();
977
-
978
- final_pos = {
979
- top : pos.top ,
980
- left : pos.left,
981
- width : wrap.width(),
982
- height : wrap.height()
983
- };
984
-
985
- if (currentOpts.opacity) {
986
- final_pos.opacity = 1;
987
- }
988
-
989
- title.empty().hide();
990
-
991
- fx.prop = 1;
992
-
993
- $(fx).animate({ prop: 0 }, {
994
- duration : currentOpts.speedOut,
995
- easing : currentOpts.easingOut,
996
- step : _draw,
997
- complete : _cleanup
998
- });
999
-
1000
- } else {
1001
- wrap.fadeOut( currentOpts.transitionOut == 'none' ? 0 : currentOpts.speedOut, _cleanup);
1002
- }
1003
- };
1004
-
1005
- $.fancybox.resize = function() {
1006
- if (overlay.is(':visible')) {
1007
- overlay.css('height', $(document).height());
1008
- }
1009
-
1010
- $.fancybox.center(true);
1011
- };
1012
-
1013
- $.fancybox.center = function() {
1014
- var view, align;
1015
-
1016
- if (busy) {
1017
- return;
1018
- }
1019
-
1020
- align = arguments[0] === true ? 1 : 0;
1021
- view = _get_viewport();
1022
-
1023
- if (!align && (wrap.width() > view[0] || wrap.height() > view[1])) {
1024
- return;
1025
- }
1026
-
1027
- wrap
1028
- .stop()
1029
- .animate({
1030
- 'top' : parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - content.height() - 40) * 0.5) - currentOpts.padding)),
1031
- 'left' : parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - content.width() - 40) * 0.5) - currentOpts.padding))
1032
- }, typeof arguments[0] == 'number' ? arguments[0] : 200);
1033
- };
1034
-
1035
- $.fancybox.init = function() {
1036
- if ($("#fancybox-wrap").length) {
1037
- return;
1038
- }
1039
-
1040
- $('body').append(
1041
- tmp = $('<div id="fancybox-tmp"></div>'),
1042
- loading = $('<div id="fancybox-loading"><div></div></div>'),
1043
- overlay = $('<div id="fancybox-overlay"></div>'),
1044
- wrap = $('<div id="fancybox-wrap"></div>')
1045
- );
1046
-
1047
- outer = $('<div id="fancybox-outer"></div>')
1048
- .append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>')
1049
- .appendTo( wrap );
1050
-
1051
- outer.append(
1052
- content = $('<div id="fancybox-content"></div>'),
1053
- close = $('<a id="fancybox-close"></a>'),
1054
- title = $('<div id="fancybox-title"></div>'),
1055
-
1056
- nav_left = $('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),
1057
- nav_right = $('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>')
1058
- );
1059
-
1060
- close.click($.fancybox.close);
1061
- loading.click($.fancybox.cancel);
1062
-
1063
- nav_left.click(function(e) {
1064
- e.preventDefault();
1065
- $.fancybox.prev();
1066
- });
1067
-
1068
- nav_right.click(function(e) {
1069
- e.preventDefault();
1070
- $.fancybox.next();
1071
- });
1072
-
1073
- if ($.fn.mousewheel) {
1074
- wrap.bind('mousewheel.fb', function(e, delta) {
1075
- if (busy) {
1076
- e.preventDefault();
1077
-
1078
- } else if ($(e.target).get(0).clientHeight == 0 || $(e.target).get(0).scrollHeight === $(e.target).get(0).clientHeight) {
1079
- e.preventDefault();
1080
- $.fancybox[ delta > 0 ? 'prev' : 'next']();
1081
- }
1082
- });
1083
- }
1084
-
1085
- if (!$.support.opacity) {
1086
- wrap.addClass('fancybox-ie');
1087
- }
1088
-
1089
- if (isIE6) {
1090
- loading.addClass('fancybox-ie6');
1091
- wrap.addClass('fancybox-ie6');
1092
-
1093
- $('<iframe id="fancybox-hide-sel-frame" src="' + (/^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank' ) + '" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(outer);
1094
- }
1095
- };
1096
-
1097
- $.fn.fancybox.defaults = {
1098
- padding : 10,
1099
- margin : 40,
1100
- opacity : false,
1101
- modal : false,
1102
- cyclic : false,
1103
- scrolling : 'auto', // 'auto', 'yes' or 'no'
1104
-
1105
- width : 560,
1106
- height : 340,
1107
-
1108
- autoScale : true,
1109
- autoDimensions : true,
1110
- centerOnScroll : false,
1111
-
1112
- ajax : {},
1113
- swf : { wmode: 'transparent' },
1114
-
1115
- hideOnOverlayClick : true,
1116
- hideOnContentClick : false,
1117
-
1118
- overlayShow : true,
1119
- overlayOpacity : 0.7,
1120
- overlayColor : '#777',
1121
-
1122
- titleShow : true,
1123
- titlePosition : 'float', // 'float', 'outside', 'inside' or 'over'
1124
- titleFormat : null,
1125
- titleFromAlt : false,
1126
-
1127
- transitionIn : 'fade', // 'elastic', 'fade' or 'none'
1128
- transitionOut : 'fade', // 'elastic', 'fade' or 'none'
1129
-
1130
- speedIn : 300,
1131
- speedOut : 300,
1132
-
1133
- changeSpeed : 300,
1134
- changeFade : 'fast',
1135
-
1136
- easingIn : 'swing',
1137
- easingOut : 'swing',
1138
-
1139
- showCloseButton : true,
1140
- showNavArrows : true,
1141
- enableEscapeButton : true,
1142
- enableKeyboardNav : true,
1143
-
1144
- onStart : function(){},
1145
- onCancel : function(){},
1146
- onComplete : function(){},
1147
- onCleanup : function(){},
1148
- onClosed : function(){},
1149
- onError : function(){}
1150
- };
1151
-
1152
- $(document).ready(function() {
1153
- $.fancybox.init();
1154
- });
1155
-
1156
- })(jQuery);