lentil 0.0.1.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/MIT-LICENSE +20 -0
- data/README.md +199 -0
- data/Rakefile +43 -0
- data/app/assets/images/lentil/icons/MHL-touch-icon-114.png +0 -0
- data/app/assets/images/lentil/icons/MHL-touch-icon-144.png +0 -0
- data/app/assets/images/lentil/icons/MHL-touch-icon-57.png +0 -0
- data/app/assets/images/lentil/icons/MHL-touch-icon-72.png +0 -0
- data/app/assets/images/lentil/icons/f_logo.png +0 -0
- data/app/assets/images/lentil/icons/twitter-bird-light-bgs.png +0 -0
- data/app/assets/images/lentil/loadingsquares.gif +0 -0
- data/app/assets/javascripts/active_admin.js +7 -0
- data/app/assets/javascripts/lentil.js +3 -0
- data/app/assets/javascripts/lentil/addanimatedimages.js +44 -0
- data/app/assets/javascripts/lentil/addfancybox.js +152 -0
- data/app/assets/javascripts/lentil/addinfinitescroll.js.erb +50 -0
- data/app/assets/javascripts/lentil/buttonhandler.js +25 -0
- data/app/assets/javascripts/lentil/event_tracking.js.erb +80 -0
- data/app/assets/javascripts/lentil/imageerrors.js +8 -0
- data/app/assets/javascripts/lentil/images.js +55 -0
- data/app/assets/javascripts/lentil/thisorthat.js.erb +129 -0
- data/app/assets/stylesheets/active_admin.css.scss +31 -0
- data/app/assets/stylesheets/admin/moderation.css.scss +65 -0
- data/app/assets/stylesheets/lentil.css.scss +8 -0
- data/app/assets/stylesheets/lentil/breakpoint/sass/_components.scss +315 -0
- data/app/assets/stylesheets/lentil/breakpoint/sass/_config.scss +37 -0
- data/app/assets/stylesheets/lentil/breakpoint/sass/_framework.scss +6 -0
- data/app/assets/stylesheets/lentil/breakpoint/sass/_structure.scss +222 -0
- data/app/assets/stylesheets/lentil/breakpoint/sass/config.rb +17 -0
- data/app/assets/stylesheets/lentil/breakpoint/sass/framework/_grid-core.scss +83 -0
- data/app/assets/stylesheets/lentil/breakpoint/sass/framework/_grid-helpers.scss +136 -0
- data/app/assets/stylesheets/lentil/breakpoint/sass/framework/_mixins.scss +19 -0
- data/app/assets/stylesheets/lentil/breakpoint/sass/framework/_normalize.scss +524 -0
- data/app/assets/stylesheets/lentil/breakpoint/sass/framework/_print.scss +19 -0
- data/app/assets/stylesheets/lentil/breakpoint/sass/style.scss +12 -0
- data/app/assets/stylesheets/lentil/image_animation.css.scss +23 -0
- data/app/assets/stylesheets/lentil/images.css.scss +6 -0
- data/app/assets/stylesheets/lentil/thisorthat.css.scss +91 -0
- data/app/controllers/lentil/application_controller.rb +6 -0
- data/app/controllers/lentil/flags_controller.rb +13 -0
- data/app/controllers/lentil/images_controller.rb +61 -0
- data/app/controllers/lentil/like_votes_controller.rb +13 -0
- data/app/controllers/lentil/pages_controller.rb +7 -0
- data/app/controllers/lentil/photographers_controller.rb +20 -0
- data/app/controllers/lentil/thisorthat_controller.rb +117 -0
- data/app/helpers/lentil/application_helper.rb +58 -0
- data/app/helpers/lentil/images_helper.rb +23 -0
- data/app/helpers/lentil/thisorthat_helper.rb +19 -0
- data/app/models/lentil/admin_user.rb +32 -0
- data/app/models/lentil/battle.rb +33 -0
- data/app/models/lentil/flag.rb +14 -0
- data/app/models/lentil/image.rb +174 -0
- data/app/models/lentil/license.rb +21 -0
- data/app/models/lentil/licensing.rb +16 -0
- data/app/models/lentil/like_vote.rb +14 -0
- data/app/models/lentil/service.rb +17 -0
- data/app/models/lentil/tag.rb +23 -0
- data/app/models/lentil/tagging.rb +20 -0
- data/app/models/lentil/tagset.rb +24 -0
- data/app/models/lentil/tagset_assignment.rb +17 -0
- data/app/models/lentil/user.rb +27 -0
- data/app/views/admin/lentil_images/_moderation_form_body.html.erb +47 -0
- data/app/views/admin/lentil_images/flagging_history.html.erb +33 -0
- data/app/views/admin/lentil_images/manual_input.html.erb +6 -0
- data/app/views/admin/lentil_images/moderate.html.erb +9 -0
- data/app/views/layouts/lentil/_apple_touch_icons.html.erb +1 -0
- data/app/views/layouts/lentil/_error.html.erb +9 -0
- data/app/views/layouts/lentil/_flag_button.html.erb +10 -0
- data/app/views/layouts/lentil/_image_popup.html.erb +34 -0
- data/app/views/layouts/lentil/_like_button.html.erb +18 -0
- data/app/views/layouts/lentil/_secondary_navigation.html.erb +5 -0
- data/app/views/layouts/lentil/_top_navigation.html.erb +26 -0
- data/app/views/layouts/lentil/application.html.erb +28 -0
- data/app/views/lentil/images/_flagging_modal.html.erb +18 -0
- data/app/views/lentil/images/_image_tiles.erb +14 -0
- data/app/views/lentil/images/animate.html.erb +19 -0
- data/app/views/lentil/images/index.atom.builder +16 -0
- data/app/views/lentil/images/index.html.erb +30 -0
- data/app/views/lentil/images/index.rss.builder +19 -0
- data/app/views/lentil/images/show.html.erb +24 -0
- data/app/views/lentil/pages/about.html.erb +9 -0
- data/app/views/lentil/photographers/index.html.erb +13 -0
- data/app/views/lentil/photographers/show.html.erb +15 -0
- data/app/views/lentil/thisorthat/_battle_form.html.erb +44 -0
- data/app/views/lentil/thisorthat/battle.html.erb +13 -0
- data/app/views/lentil/thisorthat/battle_error.html.erb +3 -0
- data/config/locales/en.yml +39 -0
- data/config/routes.rb +17 -0
- data/db/migrate/20121028023144_create_images.rb +10 -0
- data/db/migrate/20121028042738_create_like_votes.rb +10 -0
- data/db/migrate/20121028052935_add_like_votes_counter_to_images.rb +5 -0
- data/db/migrate/20121028164239_add_sessions_table.rb +12 -0
- data/db/migrate/20121030170509_add_url_column_to_images.rb +5 -0
- data/db/migrate/20121030170542_add_username_column_to_images.rb +5 -0
- data/db/migrate/20121112162243_create_users.rb +11 -0
- data/db/migrate/20121112163008_create_services.rb +10 -0
- data/db/migrate/20121112163635_remove_username_from_images.rb +9 -0
- data/db/migrate/20121112163857_remove_title_from_images.rb +9 -0
- data/db/migrate/20121112165849_add_user_id_to_images.rb +5 -0
- data/db/migrate/20121112200340_add_service_id_to_users.rb +5 -0
- data/db/migrate/20121119210407_create_tags.rb +9 -0
- data/db/migrate/20121119210450_create_tagsets.rb +10 -0
- data/db/migrate/20121119210538_create_tagset_assignments.rb +12 -0
- data/db/migrate/20121119211236_create_taggings.rb +12 -0
- data/db/migrate/20121120172450_create_licenses.rb +11 -0
- data/db/migrate/20121120172712_create_licensings.rb +12 -0
- data/db/migrate/20121120191524_devise_create_admin_users.rb +52 -0
- data/db/migrate/20121120191530_create_admin_notes.rb +17 -0
- data/db/migrate/20121120191531_move_admin_notes_to_comments.rb +25 -0
- data/db/migrate/20121121204450_add_state_to_images.rb +5 -0
- data/db/migrate/20121126170008_add_external_identifier_to_images.rb +6 -0
- data/db/migrate/20121126192652_add_short_name_to_licenses.rb +6 -0
- data/db/migrate/20121126205839_add_long_url_to_images.rb +5 -0
- data/db/migrate/20121127154531_create_flags.rb +10 -0
- data/db/migrate/20121127160158_add_original_metadata_to_images.rb +5 -0
- data/db/migrate/20121127193932_add_index_to_users.rb +5 -0
- data/db/migrate/20121127194027_add_index_to_services.rb +5 -0
- data/db/migrate/20121127194428_add_index_to_tags.rb +5 -0
- data/db/migrate/20121127195059_add_original_datetime_to_images.rb +5 -0
- data/db/migrate/20121127210507_add_bio_to_users.rb +5 -0
- data/db/migrate/20121127211257_add_staff_like_to_images.rb +5 -0
- data/db/migrate/20121128190207_add_moderator_to_images.rb +7 -0
- data/db/migrate/20121128213305_add_second_moderation_boolean_to_images.rb +5 -0
- data/db/migrate/20121130202753_add_default_for_staff_like.rb +5 -0
- data/db/migrate/20121130212917_add_default_for_image_state.rb +5 -0
- data/db/migrate/20121206145832_add_staff_tag_to_taggings.rb +5 -0
- data/db/migrate/20121213142215_add_images_count_to_users.rb +14 -0
- data/db/migrate/20121220151517_create_battles.rb +10 -0
- data/db/migrate/20121220155108_add_wins_counter_to_images.rb +5 -0
- data/db/migrate/20121220182845_add_losses_counter_to_images.rb +5 -0
- data/db/migrate/20130107192518_add_win_pct_to_images.rb +5 -0
- data/db/migrate/20130108195949_add_popular_score_to_images.rb +5 -0
- data/db/migrate/20130116145103_add_harvest_to_tagsets.rb +5 -0
- data/db/migrate/20130130194955_add_file_harvested_date_field_to_images.rb +6 -0
- data/db/migrate/20130306144752_add_donor_agreement_submitted_to_images.rb +5 -0
- data/db/migrate/20130306145013_add_donor_agreement_failed_to_images.rb +5 -0
- data/db/migrate/20130403135640_add_failed_file_checks_to_images.rb +6 -0
- data/db/migrate/20130412195348_namespace_tables.rb +16 -0
- data/db/migrate/20130413005943_namespace_licensings.rb +5 -0
- data/db/migrate/20130506204728_add_donor_agreement_rejected_to_images.rb +5 -0
- data/db/migrate/20130506205348_add_do_not_request_donation_to_lentil_images.rb +5 -0
- data/db/seeds.rb +5 -0
- data/lib/generators/lentil/USAGE +8 -0
- data/lib/generators/lentil/install_generator.rb +85 -0
- data/lib/generators/lentil/templates/README.md +19 -0
- data/lib/generators/lentil/templates/active_admin.rb +150 -0
- data/lib/generators/lentil/templates/devise.rb +232 -0
- data/lib/generators/lentil/templates/kaminari.rb +3 -0
- data/lib/generators/lentil/templates/lentil_config.yml +33 -0
- data/lib/lentil.rb +24 -0
- data/lib/lentil/admin/admin_user.rb +24 -0
- data/lib/lentil/admin/dashboard.rb +116 -0
- data/lib/lentil/admin/flags.rb +17 -0
- data/lib/lentil/admin/images.rb +209 -0
- data/lib/lentil/admin/tags.rb +18 -0
- data/lib/lentil/admin/tagsets.rb +51 -0
- data/lib/lentil/admin/user.rb +20 -0
- data/lib/lentil/admin/view_helpers.rb +11 -0
- data/lib/lentil/engine.rb +22 -0
- data/lib/lentil/instagram_harvester.rb +249 -0
- data/lib/lentil/popularity_calculator.rb +63 -0
- data/lib/lentil/version.rb +3 -0
- data/lib/tasks/auto_annotate_models.rake +20 -0
- data/lib/tasks/image_services.rake +129 -0
- data/lib/tasks/lentil_tasks.rake +10 -0
- data/lib/tasks/popularity.rake +16 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css.scss +1 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/active_admin.rb +150 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/devise.rb +232 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/kaminari.rb +3 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/lentil_config.yml +30 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +9 -0
- data/test/dummy/db/schema.rb +195 -0
- data/test/dummy/db/seeds.rb +1 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/test.log +10235 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/tmp/cache/assets/C42/6B0/sprockets%2Ff9428783b785862eb53346b864f94428 +0 -0
- data/test/dummy/tmp/cache/assets/C48/E70/sprockets%2Fa7be1700e70899163027f63a25844c02 +0 -0
- data/test/dummy/tmp/cache/assets/C57/560/sprockets%2F1f547a440537aec8d738c93894407105 +0 -0
- data/test/dummy/tmp/cache/assets/C64/FE0/sprockets%2F64416e104b07dc260675009a5aa802c1 +0 -0
- data/test/dummy/tmp/cache/assets/C6C/080/sprockets%2F2116707a968e8208e090b121181afc0a +0 -0
- data/test/dummy/tmp/cache/assets/C6F/5C0/sprockets%2Fddc2132bb0b628079c5065081c817551 +0 -0
- data/test/dummy/tmp/cache/assets/C7B/090/sprockets%2F96c14f0b10f122605c2c48b5277865e6 +0 -0
- data/test/dummy/tmp/cache/assets/C83/600/sprockets%2F68b2320f62db97898602c88ab351b154 +0 -0
- data/test/dummy/tmp/cache/assets/C8D/0B0/sprockets%2F4086552147c1d9af9c66e72943d63b82 +0 -0
- data/test/dummy/tmp/cache/assets/C92/100/sprockets%2F36490a1ee805e37f098a7817e6c95526 +0 -0
- data/test/dummy/tmp/cache/assets/C96/970/sprockets%2F0829123a4f1a0c4102c81c9a35c02c98 +0 -0
- data/test/dummy/tmp/cache/assets/C99/8E0/sprockets%2Fe953726264248e339078be7cc7926e4f +0 -0
- data/test/dummy/tmp/cache/assets/CA6/380/sprockets%2F0db015389c4847b44149da5432ee600e +0 -0
- data/test/dummy/tmp/cache/assets/CAC/100/sprockets%2F9399d899650c546f87d34e233caf9977 +0 -0
- data/test/dummy/tmp/cache/assets/CB2/410/sprockets%2F95d0566e48bb62f4bf44364504421e9a +0 -0
- data/test/dummy/tmp/cache/assets/CB5/320/sprockets%2Fcc2889b817f6b8603540cd71e6616b50 +0 -0
- data/test/dummy/tmp/cache/assets/CB9/990/sprockets%2Faf8ad756710f9583563033dd94c728c0 +0 -0
- data/test/dummy/tmp/cache/assets/CC6/F80/sprockets%2Fd5e909a571443a22cf0dc0c113a94114 +0 -0
- data/test/dummy/tmp/cache/assets/CC8/C20/sprockets%2F6354de7687421eeda9c430397894f8f0 +0 -0
- data/test/dummy/tmp/cache/assets/CC9/7B0/sprockets%2Ffaa30a33ae1698f27018d11e3f072233 +0 -0
- data/test/dummy/tmp/cache/assets/CCF/5F0/sprockets%2F5d62451bc086a25070b4ea73c387d1a5 +0 -0
- data/test/dummy/tmp/cache/assets/CD5/A00/sprockets%2F9c4914e228af6400d302b6cd283f900e +0 -0
- data/test/dummy/tmp/cache/assets/CD6/170/sprockets%2F3554b0cf72c07f591dcb54630607d0a9 +0 -0
- data/test/dummy/tmp/cache/assets/CD6/F30/sprockets%2F23191ae5e95d7e0e0771b7033a1097af +0 -0
- data/test/dummy/tmp/cache/assets/CE5/210/sprockets%2Fdb0122cf42e7810fe0799874be09644e +0 -0
- data/test/dummy/tmp/cache/assets/CE5/650/sprockets%2F8ab512c9b33ac90e699b73469d71f061 +0 -0
- data/test/dummy/tmp/cache/assets/CE6/FE0/sprockets%2F73ec02022749e817b83909f60cce7a5f +0 -0
- data/test/dummy/tmp/cache/assets/CE7/610/sprockets%2F08cbe5246a49c4599797a0224fd246ea +0 -0
- data/test/dummy/tmp/cache/assets/CE7/F00/sprockets%2Fa74a53552b73e97b67ad19ce7660055f +0 -0
- data/test/dummy/tmp/cache/assets/CEA/A40/sprockets%2Fdfdd64331199cfc265779fd03241377c +0 -0
- data/test/dummy/tmp/cache/assets/CEA/D30/sprockets%2F45a3a8537165a7657e4ed46f8bdb0593 +0 -0
- data/test/dummy/tmp/cache/assets/CEC/830/sprockets%2F77ad86593cd9332af1407493e5c39c5b +0 -0
- data/test/dummy/tmp/cache/assets/CEC/C10/sprockets%2Fc193f41bd81159ae9ef7b0385250e789 +0 -0
- data/test/dummy/tmp/cache/assets/CED/250/sprockets%2F28b6d357c282e6867362ed05881dfe2b +0 -0
- data/test/dummy/tmp/cache/assets/CED/460/sprockets%2Fd37d356a7d06d0609ea3f7628496d29d +0 -0
- data/test/dummy/tmp/cache/assets/CF9/DA0/sprockets%2Fedb69283f09967db46c74b72ae179494 +0 -0
- data/test/dummy/tmp/cache/assets/CFB/160/sprockets%2F98a9093839b570dcc8997d274dbbc465 +0 -0
- data/test/dummy/tmp/cache/assets/D03/CD0/sprockets%2F2cd0353d32bc3c4284ef8537a3b47f22 +0 -0
- data/test/dummy/tmp/cache/assets/D04/360/sprockets%2Fddeca47fb0c8741454b26453d41c8015 +0 -0
- data/test/dummy/tmp/cache/assets/D04/C00/sprockets%2Fca82ed20399235d2c48dbb6d1620732d +0 -0
- data/test/dummy/tmp/cache/assets/D04/F50/sprockets%2F1dada65d112db8475da0768b01971a94 +0 -0
- data/test/dummy/tmp/cache/assets/D0D/B10/sprockets%2F3de9d42f71f1bc23221b69171e90ed67 +0 -0
- data/test/dummy/tmp/cache/assets/D1B/590/sprockets%2Fbe6ac6f9a700610d5ba87966e577077d +0 -0
- data/test/dummy/tmp/cache/assets/D1E/680/sprockets%2F509a2e8767cd429ea59a1b689d4ab484 +0 -0
- data/test/dummy/tmp/cache/assets/D27/B70/sprockets%2F5780a94fb908448ed3e800e63fd877de +0 -0
- data/test/dummy/tmp/cache/assets/D2E/B70/sprockets%2Fb05c50d8309cf7e7c006b344fbed0107 +0 -0
- data/test/dummy/tmp/cache/assets/D32/340/sprockets%2Fbfd4a939f123425ff33a40a76032ded2 +0 -0
- data/test/dummy/tmp/cache/assets/D34/C30/sprockets%2F715a4379b39f2577210c15affca3bdc1 +0 -0
- data/test/dummy/tmp/cache/assets/D38/440/sprockets%2Fc906c171e7aa8ba93ec3219ce4f04705 +0 -0
- data/test/dummy/tmp/cache/assets/D38/B20/sprockets%2F2b1c2ef9ddf068ab0174d4568091ea62 +0 -0
- data/test/dummy/tmp/cache/assets/D3B/EC0/sprockets%2Fc3ef1b053f9f177d9141cc375bf61c50 +0 -0
- data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/D56/BE0/sprockets%2F7777b5cfe624ec519525fe82da08f7e6 +0 -0
- data/test/dummy/tmp/cache/assets/D61/290/sprockets%2Fdf8e43ab35b1467495b10ad40c97bb1b +0 -0
- data/test/dummy/tmp/cache/assets/D66/AD0/sprockets%2F630aed9dbe5fb89243b0c040af3670e7 +0 -0
- data/test/dummy/tmp/cache/assets/D69/E10/sprockets%2F48900c1edbfe227d110f8050fbdd97f4 +0 -0
- data/test/dummy/tmp/cache/assets/D6D/AB0/sprockets%2F7138214dfee4490b54377eecc4cbfe11 +0 -0
- data/test/dummy/tmp/cache/assets/D6F/EF0/sprockets%2F0466d0a8ac4be2e9114ff4e82af38d84 +0 -0
- data/test/dummy/tmp/cache/assets/D73/040/sprockets%2Fcab4ce19553a2852a2ecec47f1e87568 +0 -0
- data/test/dummy/tmp/cache/assets/D74/490/sprockets%2Fa17a51fbc23c1a3648e9f6fec8f62943 +0 -0
- data/test/dummy/tmp/cache/assets/D74/680/sprockets%2F3dd8cd62caf32217aa89f897b0eb2818 +0 -0
- data/test/dummy/tmp/cache/assets/D7A/930/sprockets%2F6be8ba37ee48b21a9ab604565dfd9775 +0 -0
- data/test/dummy/tmp/cache/assets/D7A/A90/sprockets%2Ffec462cdc03e47621953fc8eb9e6547a +0 -0
- data/test/dummy/tmp/cache/assets/D8B/ED0/sprockets%2Fcc585faf0bcbb142f7125444e4fa6a02 +0 -0
- data/test/dummy/tmp/cache/assets/D90/440/sprockets%2Fb2aa1e118ce5bd06dee76be633562d42 +0 -0
- data/test/dummy/tmp/cache/assets/D91/080/sprockets%2Fbcca522c6302f184f12fe0e8a7d7e71a +0 -0
- data/test/dummy/tmp/cache/assets/D94/FD0/sprockets%2F2b120edc1ebea9c0f72d9be11d778390 +0 -0
- data/test/dummy/tmp/cache/assets/D95/2B0/sprockets%2F89dbd7378a1d1062e45dcc3df7a3a11c +0 -0
- data/test/dummy/tmp/cache/assets/D9C/1C0/sprockets%2F6d2b0db50dd2acf27667a48159c9f6ab +0 -0
- data/test/dummy/tmp/cache/assets/D9C/8A0/sprockets%2Fc76d2440ebeb87ab52dfe9d80bf10086 +0 -0
- data/test/dummy/tmp/cache/assets/D9D/380/sprockets%2Fb04c1714897d76abeca81fa0a37f8e6b +0 -0
- data/test/dummy/tmp/cache/assets/D9D/5B0/sprockets%2Fddcba2ec2b3037ef281e781a486de980 +0 -0
- data/test/dummy/tmp/cache/assets/D9F/300/sprockets%2Fc13fc73ceafa45876a901b3e775b83ae +0 -0
- data/test/dummy/tmp/cache/assets/DB0/FD0/sprockets%2F996ad98b7351ad4d9bd4b485a7ae9fa3 +0 -0
- data/test/dummy/tmp/cache/assets/DB1/8D0/sprockets%2F6cf903e8ff571c4d957e479cac1bc19d +0 -0
- data/test/dummy/tmp/cache/assets/DB3/1D0/sprockets%2F22cba3622ce0621f3eba0dd7e1aa089f +0 -0
- data/test/dummy/tmp/cache/assets/DB4/0B0/sprockets%2Fe8f58b1269ee313ff8b892bca727ede6 +0 -0
- data/test/dummy/tmp/cache/assets/DB6/F30/sprockets%2Fb6999585996e0f4bff328ba3addd17fb +0 -0
- data/test/dummy/tmp/cache/assets/DC1/020/sprockets%2Fbf6419ab7cf802a47da9ec4d1040cd4b +0 -0
- data/test/dummy/tmp/cache/assets/DC4/040/sprockets%2F0c65ff4bf893dd905d30aa129f4abca2 +0 -0
- data/test/dummy/tmp/cache/assets/DCA/030/sprockets%2F0bc7d1ffb47f42b36bc9abec83b58442 +0 -0
- data/test/dummy/tmp/cache/assets/DCB/D90/sprockets%2Fcfca0c746a29e28e6507eb312e7ec5bd +0 -0
- data/test/dummy/tmp/cache/assets/DCC/EA0/sprockets%2F3c7d9707a1daca88216a8ffc0fa8e4a3 +0 -0
- data/test/dummy/tmp/cache/assets/DCE/E00/sprockets%2F5f20b88da0ea9a18a05ee2f4d03f97ff +0 -0
- data/test/dummy/tmp/cache/assets/DCE/EC0/sprockets%2Ff2ec34a23c62dd857e1cf1df5966bc3b +0 -0
- data/test/dummy/tmp/cache/assets/DD3/E70/sprockets%2F6570fc1bef16b28caa54448c9deffa29 +0 -0
- data/test/dummy/tmp/cache/assets/DD7/F60/sprockets%2Fba89e9841faeba02ba74a8ed492f287e +0 -0
- data/test/dummy/tmp/cache/assets/DDA/900/sprockets%2F24705bef559fbf6f8738b7ab9b3f0faa +0 -0
- data/test/dummy/tmp/cache/assets/DDA/DD0/sprockets%2F74f3d35d3bacb479b95d56d17bafe75f +0 -0
- data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/DDC/9A0/sprockets%2F6b6d65eb6c891e5d6b5c1af73ae98ca6 +0 -0
- data/test/dummy/tmp/cache/assets/DDE/9B0/sprockets%2F890f41b9acdd3f93bd6ef7ae908ce472 +0 -0
- data/test/dummy/tmp/cache/assets/DE6/210/sprockets%2Fa2d10a00bca3a1e477d6dc95effc35c1 +0 -0
- data/test/dummy/tmp/cache/assets/DEE/C90/sprockets%2Ffca14d24400af9ec6deca6ec402953cb +0 -0
- data/test/dummy/tmp/cache/assets/DFB/980/sprockets%2F73cd2a8ad913ea8aece63bb39e3b72c6 +0 -0
- data/test/dummy/tmp/cache/assets/E03/CF0/sprockets%2Ffd9ccc8eca5b28ea8c175587a1c37cb3 +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/E07/0F0/sprockets%2F96ac3cc2bdaae9cde264974ef77d2c81 +0 -0
- data/test/dummy/tmp/cache/assets/E0F/E90/sprockets%2F8e7db2bac32a0e9cac06b43ab5d242ab +0 -0
- data/test/dummy/tmp/cache/assets/E25/820/sprockets%2Fd3b6a937cfa7e45cffc316bae06db5b0 +0 -0
- data/test/dummy/tmp/cache/assets/E2D/020/sprockets%2Fcbafddc9ed34b5bb8d1e300c55b488e9 +0 -0
- data/test/dummy/tmp/cache/assets/E33/300/sprockets%2Fb751f7e95e5efaedb23aef5b5069bd2c +0 -0
- data/test/dummy/tmp/cache/assets/E39/490/sprockets%2Ff0d1f807d9aeda4a98600cb9fe9df7cc +0 -0
- data/test/dummy/tmp/cache/assets/E68/D50/sprockets%2Fbb4b566ad8ba5fa7cf5e547cedfe0f95 +0 -0
- data/test/dummy/tmp/cache/sass/09ef2509826c8e6328e00a46ab2d431530905427/_base.scssc +0 -0
- data/test/dummy/tmp/cache/sass/09ef2509826c8e6328e00a46ab2d431530905427/_sprite-img.scssc +0 -0
- data/test/dummy/tmp/cache/sass/18aae862c6b8d844ecb0d28099e3c6dc22a78390/_components.scssc +0 -0
- data/test/dummy/tmp/cache/sass/18aae862c6b8d844ecb0d28099e3c6dc22a78390/_config.scssc +0 -0
- data/test/dummy/tmp/cache/sass/18aae862c6b8d844ecb0d28099e3c6dc22a78390/_framework.scssc +0 -0
- data/test/dummy/tmp/cache/sass/18aae862c6b8d844ecb0d28099e3c6dc22a78390/_structure.scssc +0 -0
- data/test/dummy/tmp/cache/sass/18aae862c6b8d844ecb0d28099e3c6dc22a78390/style.scssc +0 -0
- data/test/dummy/tmp/cache/sass/230bfc8f182635ad4b3a335d489af9a06274afb8/application.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/2a4cafc997677a5e0158c4d4a79d2ab3f4ff6997/_grid-core.scssc +0 -0
- data/test/dummy/tmp/cache/sass/2a4cafc997677a5e0158c4d4a79d2ab3f4ff6997/_grid-helpers.scssc +0 -0
- data/test/dummy/tmp/cache/sass/2a4cafc997677a5e0158c4d4a79d2ab3f4ff6997/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/sass/2a4cafc997677a5e0158c4d4a79d2ab3f4ff6997/_normalize.scssc +0 -0
- data/test/dummy/tmp/cache/sass/2a4cafc997677a5e0158c4d4a79d2ab3f4ff6997/_print.scssc +0 -0
- data/test/dummy/tmp/cache/sass/2fc48581832b599e78863798b316800e2f081db8/_css3.scssc +0 -0
- data/test/dummy/tmp/cache/sass/2fc48581832b599e78863798b316800e2f081db8/_support.scssc +0 -0
- data/test/dummy/tmp/cache/sass/2fc48581832b599e78863798b316800e2f081db8/_typography.scssc +0 -0
- data/test/dummy/tmp/cache/sass/2fc48581832b599e78863798b316800e2f081db8/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_appearance.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_background-clip.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_background-origin.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_background-size.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_border-radius.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_box-shadow.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_box-sizing.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_box.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_columns.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_filter.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_font-face.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_hyphenation.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_images.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_inline-block.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_opacity.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_regions.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_shared.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_text-shadow.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_transform.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3a054fa2dd9c968492f5a0cb990ea7fe73be8836/_transition.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3b11a8de81207d23d358103aa6b295021cc4f559/_contrast.scssc +0 -0
- data/test/dummy/tmp/cache/sass/4fafd6ccd5f325d6297db249d1acfce25c894abe/_compass.scssc +0 -0
- data/test/dummy/tmp/cache/sass/619a076775683b6e082ab3e83ee70dd4025b71ce/fancybox.cssc +0 -0
- data/test/dummy/tmp/cache/sass/6a181fabeabb4ad8135cf2bd3fa15f5039ab85a9/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/sass/6f4451653f8c03db4c183f13952595ad7fc9a7a5/_alternating-rows-and-columns.scssc +0 -0
- data/test/dummy/tmp/cache/sass/6f4451653f8c03db4c183f13952595ad7fc9a7a5/_borders.scssc +0 -0
- data/test/dummy/tmp/cache/sass/6f4451653f8c03db4c183f13952595ad7fc9a7a5/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/sass/6f8312e52a18e9753d5d08c869f5c3bec77f12b3/chosen.css.sassc +0 -0
- data/test/dummy/tmp/cache/sass/703c74442f96736be7a09968192044436254f4e2/bootstrap-responsive.scssc +0 -0
- data/test/dummy/tmp/cache/sass/703c74442f96736be7a09968192044436254f4e2/bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/sass/731447a6308f18f1769d254075093bb72c24f347/image_animation.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/731447a6308f18f1769d254075093bb72c24f347/images.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/731447a6308f18f1769d254075093bb72c24f347/thisorthat.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/81b75274929b072edf6f16f0144d09b81c0ec6cb/_color.scssc +0 -0
- data/test/dummy/tmp/cache/sass/81b75274929b072edf6f16f0144d09b81c0ec6cb/_general.scssc +0 -0
- data/test/dummy/tmp/cache/sass/81b75274929b072edf6f16f0144d09b81c0ec6cb/_sprites.scssc +0 -0
- data/test/dummy/tmp/cache/sass/81b75274929b072edf6f16f0144d09b81c0ec6cb/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/sass/a9ceb8ca2f3605f188194e487b24c01a1853c7e8/_grid-background.scssc +0 -0
- data/test/dummy/tmp/cache/sass/d53eea4db5c445904dd2d1926d6eea4bbca119f9/_bullets.scssc +0 -0
- data/test/dummy/tmp/cache/sass/d53eea4db5c445904dd2d1926d6eea4bbca119f9/_horizontal-list.scssc +0 -0
- data/test/dummy/tmp/cache/sass/d53eea4db5c445904dd2d1926d6eea4bbca119f9/_inline-block-list.scssc +0 -0
- data/test/dummy/tmp/cache/sass/d53eea4db5c445904dd2d1926d6eea4bbca119f9/_inline-list.scssc +0 -0
- data/test/dummy/tmp/cache/sass/d8b9a6cd27d9e74c47290b0b43e75f4003d5e84b/lentil.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/e8cb3fe0dc661de96e682e25b9bbeaf97d6a8698/_links.scssc +0 -0
- data/test/dummy/tmp/cache/sass/e8cb3fe0dc661de96e682e25b9bbeaf97d6a8698/_lists.scssc +0 -0
- data/test/dummy/tmp/cache/sass/e8cb3fe0dc661de96e682e25b9bbeaf97d6a8698/_text.scssc +0 -0
- data/test/dummy/tmp/cache/sass/e8cb3fe0dc661de96e682e25b9bbeaf97d6a8698/_vertical_rhythm.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_accordion.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_close.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_code.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_hero-unit.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_labels-badges.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_layouts.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_media.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_reset.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_responsive-1200px-min.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_responsive-767px-max.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_responsive-768px-979px.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_responsive-navbar.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_responsive-utilities.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_sprites.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_type.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/_wells.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/sass/effeda9621a1f8587c33f3f59e511b0a59ff7bb4/responsive.scssc +0 -0
- data/test/dummy/tmp/cache/sass/f785cff4f2efc02e3a7a52ccf822a563c511b793/_clearfix.scssc +0 -0
- data/test/dummy/tmp/cache/sass/f785cff4f2efc02e3a7a52ccf822a563c511b793/_float.scssc +0 -0
- data/test/dummy/tmp/cache/sass/f785cff4f2efc02e3a7a52ccf822a563c511b793/_hacks.scssc +0 -0
- data/test/dummy/tmp/cache/sass/f785cff4f2efc02e3a7a52ccf822a563c511b793/_min.scssc +0 -0
- data/test/dummy/tmp/cache/sass/f785cff4f2efc02e3a7a52ccf822a563c511b793/_reset.scssc +0 -0
- data/test/dummy/tmp/cache/sass/f785cff4f2efc02e3a7a52ccf822a563c511b793/_tag-cloud.scssc +0 -0
- data/test/dummy/tmp/cache/sass/fbf85d5608ca3ac95eb64dfaa76546b623980b5f/_hover-link.scssc +0 -0
- data/test/dummy/tmp/cache/sass/fbf85d5608ca3ac95eb64dfaa76546b623980b5f/_link-colors.scssc +0 -0
- data/test/dummy/tmp/cache/sass/fbf85d5608ca3ac95eb64dfaa76546b623980b5f/_unstyled-link.scssc +0 -0
- data/test/dummy/tmp/cache/sass/fcfbf62c4a5c26b3ae30accefa73ef6191bb4aab/_ellipsis.scssc +0 -0
- data/test/dummy/tmp/cache/sass/fcfbf62c4a5c26b3ae30accefa73ef6191bb4aab/_force-wrap.scssc +0 -0
- data/test/dummy/tmp/cache/sass/fcfbf62c4a5c26b3ae30accefa73ef6191bb4aab/_nowrap.scssc +0 -0
- data/test/dummy/tmp/cache/sass/fcfbf62c4a5c26b3ae30accefa73ef6191bb4aab/_replacement.scssc +0 -0
- data/test/fixtures/lentil/admin_users.yml +35 -0
- data/test/fixtures/lentil/battles.yml +20 -0
- data/test/fixtures/lentil/flags.yml +17 -0
- data/test/fixtures/lentil/images.yml +284 -0
- data/test/fixtures/lentil/licenses.yml +25 -0
- data/test/fixtures/lentil/licensings.yml +20 -0
- data/test/fixtures/lentil/like_votes.yml +19 -0
- data/test/fixtures/lentil/services.yml +20 -0
- data/test/fixtures/lentil/taggings.yml +29 -0
- data/test/fixtures/lentil/tags.yml +29 -0
- data/test/fixtures/lentil/tagset_assignments.yml +28 -0
- data/test/fixtures/lentil/tagsets.yml +27 -0
- data/test/fixtures/lentil/users.yml +40 -0
- data/test/functional/admin/flags_controller_test.rb +16 -0
- data/test/functional/admin/images_controller_test.rb +46 -0
- data/test/functional/admin/tags_controller_test.rb +16 -0
- data/test/functional/admin/tagsets_controller_test.rb +21 -0
- data/test/functional/admin/users_controller_test.rb +16 -0
- data/test/functional/lentil/flags_controller_test.rb +19 -0
- data/test/functional/lentil/images_controller_test.rb +51 -0
- data/test/functional/lentil/like_votes_controller_test.rb +19 -0
- data/test/functional/lentil/photographers_controller_test.rb +14 -0
- data/test/functional/lentil/thisorthat_controller_test.rb +9 -0
- data/test/integration/lentil/admin_dashboard_test.rb +31 -0
- data/test/integration/lentil/admin_moderation_test.rb +9 -0
- data/test/integration/lentil/admin_tagset_test.rb +14 -0
- data/test/integration/lentil/images_feed_test.rb +14 -0
- data/test/integration/lentil/images_index_test.rb +46 -0
- data/test/integration/lentil/images_show_test.rb +14 -0
- data/test/integration/lentil/javascript/event_tracking_battle_test.rb +18 -0
- data/test/integration/lentil/javascript/event_tracking_test.rb +67 -0
- data/test/integration/lentil/javascript/image_modal_test.rb +20 -0
- data/test/integration/lentil/navigation_test.rb +10 -0
- data/test/integration/lentil/pages_test.rb +11 -0
- data/test/integration/lentil/thisorthat_test.rb +33 -0
- data/test/lentil_test.rb +7 -0
- data/test/test_helper.rb +79 -0
- data/test/unit/lentil/admin_user_test.rb +26 -0
- data/test/unit/lentil/battle_test.rb +18 -0
- data/test/unit/lentil/flag_test.rb +17 -0
- data/test/unit/lentil/helpers/images_helper_test.rb +4 -0
- data/test/unit/lentil/helpers/photographers_helper_test.rb +4 -0
- data/test/unit/lentil/helpers/thisorthat_helper_test.rb +4 -0
- data/test/unit/lentil/image_test.rb +52 -0
- data/test/unit/lentil/instagram_test.rb +57 -0
- data/test/unit/lentil/license_test.rb +20 -0
- data/test/unit/lentil/licensing_test.rb +18 -0
- data/test/unit/lentil/like_vote_test.rb +17 -0
- data/test/unit/lentil/popularity_test.rb +19 -0
- data/test/unit/lentil/service_test.rb +18 -0
- data/test/unit/lentil/tag_test.rb +21 -0
- data/test/unit/lentil/tagging_test.rb +19 -0
- data/test/unit/lentil/tagset_assignment_test.rb +18 -0
- data/test/unit/lentil/tagset_test.rb +22 -0
- data/test/unit/lentil/user_test.rb +37 -0
- data/test/vcr_cassettes/battle_images.yml +245 -0
- data/test/vcr_cassettes/battle_images_events.yml +206 -0
- data/test/vcr_cassettes/instagram_bad_image_check.yml +40 -0
- data/test/vcr_cassettes/instagram_by_tag.yml +318 -0
- data/test/vcr_cassettes/instagram_good_image_check.yml +42 -0
- data/test/vcr_cassettes/instagram_image_harvest.yml +1992 -0
- data/test/vcr_cassettes/instagram_image_id.yml +97 -0
- data/test/vcr_cassettes/instagram_oembed.yml +43 -0
- data/vendor/assets/javascripts/animatedimages/css/demo.css +178 -0
- data/vendor/assets/javascripts/animatedimages/css/fallback.css +12 -0
- data/vendor/assets/javascripts/animatedimages/css/style.css +132 -0
- data/vendor/assets/javascripts/animatedimages/images/Thumbs.db +0 -0
- data/vendor/assets/javascripts/animatedimages/images/bg.jpg +0 -0
- data/vendor/assets/javascripts/animatedimages/images/light.png +0 -0
- data/vendor/assets/javascripts/animatedimages/images/loading.gif +0 -0
- data/vendor/assets/javascripts/animatedimages/js/jquery.gridrotator.js +760 -0
- data/vendor/assets/javascripts/animatedimages/js/modernizr.custom.26633.js +4 -0
- data/vendor/assets/javascripts/expanding/expanding.js +118 -0
- data/vendor/assets/javascripts/html5historyapi/README.md +338 -0
- data/vendor/assets/javascripts/html5historyapi/component.json +8 -0
- data/vendor/assets/javascripts/html5historyapi/history.iegte8.js +721 -0
- data/vendor/assets/javascripts/html5historyapi/history.iegte8.min.js +30 -0
- data/vendor/assets/javascripts/html5historyapi/history.js +890 -0
- data/vendor/assets/javascripts/html5historyapi/history.min.js +33 -0
- data/vendor/assets/javascripts/html5historyapi/readme.en.txt +161 -0
- data/vendor/assets/javascripts/html5historyapi/readme.ru.txt +161 -0
- data/vendor/assets/javascripts/imagesloaded/jquery.imagesloaded.min.js +3 -0
- data/vendor/assets/javascripts/infinitescroll/Readme.md +59 -0
- data/vendor/assets/javascripts/infinitescroll/ajax-loader.gif +0 -0
- data/vendor/assets/javascripts/infinitescroll/behaviors/cufon.js +21 -0
- data/vendor/assets/javascripts/infinitescroll/behaviors/local.js +26 -0
- data/vendor/assets/javascripts/infinitescroll/behaviors/manual-trigger.js +59 -0
- data/vendor/assets/javascripts/infinitescroll/behaviors/masonry-isotope.js +21 -0
- data/vendor/assets/javascripts/infinitescroll/behaviors/sausage.js +19 -0
- data/vendor/assets/javascripts/infinitescroll/jquery.infinitescroll.js +802 -0
- data/vendor/assets/javascripts/infinitescroll/package.json +7 -0
- data/vendor/assets/javascripts/infinitescroll/site/assets/anivers_regular.otf +0 -0
- data/vendor/assets/javascripts/infinitescroll/site/assets/buttons.psd +0 -0
- data/vendor/assets/javascripts/infinitescroll/site/assets/logo.psd +0 -0
- data/vendor/assets/javascripts/infinitescroll/site/assets/mobius-strip2.ai +2266 -15
- data/vendor/assets/javascripts/infinitescroll/site/assets/pattern.psd +0 -0
- data/vendor/assets/javascripts/infinitescroll/site/assets/selector spots.psd +0 -0
- data/vendor/assets/javascripts/infinitescroll/site/assets/sites.psd +0 -0
- data/vendor/assets/javascripts/infinitescroll/site/buttons.png +0 -0
- data/vendor/assets/javascripts/infinitescroll/site/infinite-scroll-pattern.gif +0 -0
- data/vendor/assets/javascripts/infinitescroll/site/logo.jpg +0 -0
- data/vendor/assets/javascripts/infinitescroll/site/screens.jpg +0 -0
- data/vendor/assets/javascripts/infinitescroll/site/selectors.jpg +0 -0
- data/vendor/assets/javascripts/infinitescroll/test/debug.js +24 -0
- data/vendor/assets/javascripts/infinitescroll/test/index.html +105 -0
- data/vendor/assets/javascripts/infinitescroll/test/index2.html +41 -0
- data/vendor/assets/javascripts/infinitescroll/test/index3.html +48 -0
- data/vendor/assets/javascripts/infinitescroll/test/jquery-1.6.1.js +8936 -0
- data/vendor/assets/javascripts/infinitescroll/test/mobile.html +108 -0
- data/vendor/assets/javascripts/infinitescroll/test/mobile2.json +1 -0
- data/vendor/assets/javascripts/infinitescroll/test/mobile3.json +1 -0
- data/vendor/assets/javascripts/infinitescroll/test/mobile4.json +1 -0
- data/vendor/assets/javascripts/infinitescroll/test/style.css +319 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/img/ajax-loader.gif +0 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/includes/admin.php +126 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/includes/options.php +188 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/includes/presets.php +737 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/includes/submit.php +67 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/infinite-scroll.php +261 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/js/admin/infinite-scoll.js +5 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/js/admin/infinite-scroll.dev.js +128 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/js/front-end/jquery.infinitescroll.dev.js +747 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/js/front-end/jquery.infinitescroll.js +31 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/languages/infinite-scroll.pot +157 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/license.html +694 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/readme.md +246 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/readme.txt +241 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/screenshot-1.png +0 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/screenshot-2.png +0 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/screenshot-3.png +0 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/templates/footer.php +7 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/templates/manage-presets.php +21 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/templates/options.php +97 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/templates/preset-prompt.php +7 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/templates/submit-prompt.php +23 -0
- data/vendor/assets/javascripts/infinitescroll/wordpress-plugin/templates/submit.php +31 -0
- data/vendor/assets/javascripts/spin/spin.js +2 -0
- data/vendor/assets/javascripts/touchswipe/README.md +84 -0
- data/vendor/assets/javascripts/touchswipe/jquery.touchSwipe.js +1555 -0
- metadata +1397 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/**
|
|
3
|
+
* Provides interface to store and retrieve plugin and user options
|
|
4
|
+
* @subpackage Infinite_Scroll_Options
|
|
5
|
+
* @package Infinite_Scroll
|
|
6
|
+
*/
|
|
7
|
+
class Infinite_Scroll_Options {
|
|
8
|
+
|
|
9
|
+
//default scope for options when called directly,
|
|
10
|
+
//choices: site, user, or global (user option across sites)
|
|
11
|
+
public $defaults = array();
|
|
12
|
+
private $parent;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Stores parent class as static
|
|
16
|
+
* @param class $parent (reference) the parent class
|
|
17
|
+
*/
|
|
18
|
+
function __construct( &$parent ) {
|
|
19
|
+
|
|
20
|
+
$this->parent = &$parent;
|
|
21
|
+
|
|
22
|
+
add_action( 'admin_init', array( &$this, 'options_init' ) );
|
|
23
|
+
add_filter( $this->parent->prefix . 'options', array( &$this, 'default_options_filter' ), 20 );
|
|
24
|
+
add_filter( $this->parent->prefix . 'js_options', array( &$this, 'db_version_filter' ) );
|
|
25
|
+
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Tells WP that we're using a custom settings field
|
|
31
|
+
*/
|
|
32
|
+
function options_init() {
|
|
33
|
+
|
|
34
|
+
register_setting( $this->parent->slug_, $this->parent->slug_, array( &$this, 'validate' ) );
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Runs options through filter prior to saving
|
|
41
|
+
* @param array $options the options array
|
|
42
|
+
* @return array sanitized options array
|
|
43
|
+
*/
|
|
44
|
+
function validate( $options ) {
|
|
45
|
+
|
|
46
|
+
//add slashes to JS selectors
|
|
47
|
+
$js = array ( 'nextSelector', 'navSelector', 'itemSelector', 'contentSelector', 'callback' );
|
|
48
|
+
foreach ( $js as $field ) {
|
|
49
|
+
|
|
50
|
+
if ( !isset( $options[$field] ) )
|
|
51
|
+
continue;
|
|
52
|
+
|
|
53
|
+
$options[$field] = addslashes( $options[ $field ] );
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//force post-style kses on messages
|
|
58
|
+
foreach ( array( 'finishedMsg', 'msgText' ) as $field ) {
|
|
59
|
+
|
|
60
|
+
if ( !isset( $options['loading'][$field] ) )
|
|
61
|
+
continue;
|
|
62
|
+
|
|
63
|
+
$options['loading'][$field] = wp_filter_post_kses( $options['loading'][$field] );
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
//handle image resets
|
|
68
|
+
if ( isset( $_POST[ 'reset_default_image'] ) )
|
|
69
|
+
$options['img'] = $this->defaults['img'];
|
|
70
|
+
|
|
71
|
+
//pull existing image if none is given
|
|
72
|
+
if ( empty( $options['img'] ) )
|
|
73
|
+
$options['img'] = $this->img;
|
|
74
|
+
|
|
75
|
+
return apply_filters( $this->parent->prefix . 'options_validate', $options );
|
|
76
|
+
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Allows overloading to get option value
|
|
82
|
+
* Usage: $value = $object->{option name}
|
|
83
|
+
* @param string $name the option name
|
|
84
|
+
* @return mixed the option value
|
|
85
|
+
*/
|
|
86
|
+
function __get( $name ) {
|
|
87
|
+
|
|
88
|
+
return $this->get_option( $name );
|
|
89
|
+
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Allows overloading to set option value
|
|
95
|
+
* Usage: $object->{option name} = $value
|
|
96
|
+
* @param string $name unique option key
|
|
97
|
+
* @param mixed $value the value to store
|
|
98
|
+
* @return bool success/fail
|
|
99
|
+
*/
|
|
100
|
+
function __set( $name, $value ) {
|
|
101
|
+
|
|
102
|
+
return $this->set_option( $name, $value );
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Retreive the options array
|
|
109
|
+
* @return array the options
|
|
110
|
+
*/
|
|
111
|
+
function get_options( ) {
|
|
112
|
+
|
|
113
|
+
if ( !$options = wp_cache_get( 'options', $this->parent->slug ) ) {
|
|
114
|
+
$options = get_option( $this->parent->slug_ );
|
|
115
|
+
wp_cache_set( 'options', $options, $this->parent->slug );
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return apply_filters( $this->parent->prefix . 'options', $options );
|
|
119
|
+
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* If any options are not set, merge with defaults
|
|
125
|
+
* @param array $options the saved options
|
|
126
|
+
* @return array the merged options with defaults
|
|
127
|
+
*/
|
|
128
|
+
function default_options_filter( $options ) {
|
|
129
|
+
|
|
130
|
+
$options = wp_parse_args( $options, $this->defaults );
|
|
131
|
+
wp_cache_set( 'options', $options, $this->parent->slug );
|
|
132
|
+
return $options;
|
|
133
|
+
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Retreives a specific option
|
|
139
|
+
* @param string $option the unique option key
|
|
140
|
+
* @return mixed the value
|
|
141
|
+
*/
|
|
142
|
+
function get_option( $option ) {
|
|
143
|
+
$options = $this->get_options( );
|
|
144
|
+
$value = ( isset( $options[ $option ] ) ) ? $options[ $option ] : false;
|
|
145
|
+
return apply_filters( $this->parent->prefix . $option, $value );
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Sets a specific option
|
|
151
|
+
* @return bool success/fail
|
|
152
|
+
* @param string $key the unique option key
|
|
153
|
+
* @param mixed $value the value
|
|
154
|
+
*/
|
|
155
|
+
function set_option( $key, $value ) {
|
|
156
|
+
$options = array( $key => $value );
|
|
157
|
+
$this->set_options( $options );
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Sets all plugin options
|
|
163
|
+
* @param array $options the options array
|
|
164
|
+
* @param bool $merge (optional) whether or not to merge options arrays or overwrite
|
|
165
|
+
* @return bool success/fail
|
|
166
|
+
*/
|
|
167
|
+
function set_options( $options, $merge = true ) {
|
|
168
|
+
|
|
169
|
+
if ( $merge ) {
|
|
170
|
+
$defaults = $this->get_options();
|
|
171
|
+
$options = wp_parse_args( $options, $defaults );
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
wp_cache_set( 'options', $options, $this->parent->slug );
|
|
175
|
+
|
|
176
|
+
return update_option( $this->parent->slug_, $options );
|
|
177
|
+
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Don't output db_version to front end when passing args to javascript function
|
|
182
|
+
*/
|
|
183
|
+
function db_version_filter( $options ) {
|
|
184
|
+
unset( $options['db_version'] );
|
|
185
|
+
return $options;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
}
|
|
@@ -0,0 +1,737 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/**
|
|
3
|
+
* Infinite Scroll Presets Interface
|
|
4
|
+
*
|
|
5
|
+
* Stores theme-specific presets for CSS Selectors to aid with setup. Pulls community presets from CSV
|
|
6
|
+
* stored in the plugin's SVN repo.
|
|
7
|
+
*
|
|
8
|
+
* The csv from the repo is cached for 24 hours as a site-transient (available to all sites on a network install)
|
|
9
|
+
*
|
|
10
|
+
* Custom presets (beyond the SVN CSV) are stored as a site option (also available to all sites on network)
|
|
11
|
+
*
|
|
12
|
+
* On a single site install, settings available to all admins.
|
|
13
|
+
* On a network install, settings available only to super-admins (but site-admins can load those presets)
|
|
14
|
+
*
|
|
15
|
+
* If a user hasn't chosen CSS selectors for there theme and a preset exists, the plugin will
|
|
16
|
+
* default to the preset (thus in many cases, no need to adjust any settings or know this exists).
|
|
17
|
+
*
|
|
18
|
+
* Hierarchy of presets: 1) User specified, 2) (admin specified) custom preset, 3) community specified preset
|
|
19
|
+
*
|
|
20
|
+
* @subpackage Presets
|
|
21
|
+
* @package Infinite_Scroll
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
class Infinite_Scroll_Presets {
|
|
25
|
+
|
|
26
|
+
private $parent;
|
|
27
|
+
// public $preset_url = 'http://plugins.svn.wordpress.org/infinite-scroll/branches/PresetDB/presets.csv';
|
|
28
|
+
public $preset_url = 'https://raw.github.com/benbalter/Infinite-Scroll/presetDB/presets.csv';
|
|
29
|
+
public $custom_preset_key = 'infinite_scroll_presets';
|
|
30
|
+
public $ttl = 86000; //TTL of transient cache in seconds, 1 day = 86400 = 60*60*24
|
|
31
|
+
public $keys = array( 'theme', 'contentSelector', 'navSelector', 'itemSelector', 'nextSelector' );
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Register hooks with WordPress API
|
|
35
|
+
*
|
|
36
|
+
* @param object $parent (reference) the parent class
|
|
37
|
+
*/
|
|
38
|
+
function __construct( &$parent ) {
|
|
39
|
+
|
|
40
|
+
$this->parent = &$parent;
|
|
41
|
+
|
|
42
|
+
add_action( 'admin_init', array( &$this, 'set_presets' ) );
|
|
43
|
+
add_action( 'wp_ajax_infinite-scroll-edit-preset', array( &$this, 'process_ajax_edit' ) );
|
|
44
|
+
add_action( 'wp_ajax_infinite-scroll-delete-preset', array( &$this, 'process_ajax_delete' ) );
|
|
45
|
+
add_filter( $this->parent->prefix . 'presets', array( &$this, 'merge_custom_presets' ) );
|
|
46
|
+
add_filter( $this->parent->prefix . 'options', array( &$this, 'default_to_presets'), 9 );
|
|
47
|
+
add_action( $this->parent->prefix . 'refresh_cache', array( &$this, 'get_presets' ) );
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Allow for class overloading
|
|
54
|
+
* @param string $preset the theme slug to retrieve
|
|
55
|
+
* @return array|bool the presets or false on failure
|
|
56
|
+
*/
|
|
57
|
+
function __get( $preset ) {
|
|
58
|
+
return $this->get_preset( $preset );
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Pulls preset array from cache, or retrieves and parses
|
|
64
|
+
* @return array an array of preset objects
|
|
65
|
+
* @todo Consider using TLC Transients in case cron isn't working
|
|
66
|
+
*/
|
|
67
|
+
function get_presets() {
|
|
68
|
+
|
|
69
|
+
//check cache
|
|
70
|
+
if ( $cache = get_transient( $this->parent->prefix . 'presets' ) )
|
|
71
|
+
return apply_filters( $this->parent->prefix . 'presets', $cache );
|
|
72
|
+
|
|
73
|
+
$data = wp_remote_get( $this->preset_url );
|
|
74
|
+
|
|
75
|
+
if ( is_wp_error( $data ) )
|
|
76
|
+
return array();
|
|
77
|
+
|
|
78
|
+
$data = wp_remote_retrieve_body( $data );
|
|
79
|
+
|
|
80
|
+
//parse CSV string into array
|
|
81
|
+
$presets = $this->parse_csv( $data );
|
|
82
|
+
|
|
83
|
+
//sort by key alpha ascending
|
|
84
|
+
asort( $presets );
|
|
85
|
+
|
|
86
|
+
set_transient( $this->parent->prefix . 'presets', $presets, $this->ttl );
|
|
87
|
+
|
|
88
|
+
return apply_filters( $this->parent->prefix . 'presets', $presets );
|
|
89
|
+
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Return a theme's preset object
|
|
95
|
+
* @param string $theme the slug of theme to retrieve
|
|
96
|
+
* @return object the preset object
|
|
97
|
+
*/
|
|
98
|
+
function get_preset( $theme = null ) {
|
|
99
|
+
|
|
100
|
+
if ( $theme == null )
|
|
101
|
+
$theme = get_stylesheet();
|
|
102
|
+
|
|
103
|
+
$presets = $this->get_presets();
|
|
104
|
+
|
|
105
|
+
//direct match found, return
|
|
106
|
+
if ( array_key_exists( $theme, $presets ) )
|
|
107
|
+
return $presets[ $theme ];
|
|
108
|
+
|
|
109
|
+
//no direct match found, permahps this is a child theme?
|
|
110
|
+
|
|
111
|
+
//theme isn't installed, no way to know if it's a child, so skip
|
|
112
|
+
if ( !$this->theme_installed( $theme ) )
|
|
113
|
+
return false;
|
|
114
|
+
|
|
115
|
+
//WP version 3.4+, use the new wp_get_themes function
|
|
116
|
+
if ( function_exists( 'wp_get_theme' ) ) {
|
|
117
|
+
|
|
118
|
+
$theme = wp_get_theme( $theme );
|
|
119
|
+
|
|
120
|
+
//not a theme or not a child
|
|
121
|
+
if ( is_wp_error( $theme ) || !is_object( $theme->parent() ) )
|
|
122
|
+
return false;
|
|
123
|
+
|
|
124
|
+
return $this->get_preset( $theme->parent()->stylesheet );
|
|
125
|
+
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
//pre 3.4 back compat..
|
|
129
|
+
//get theme by slug
|
|
130
|
+
$name = $this->get_name( $theme );
|
|
131
|
+
$themes = get_themes();
|
|
132
|
+
$child = $themes[ $name ];
|
|
133
|
+
|
|
134
|
+
//not a child theme
|
|
135
|
+
if ( !isset( $child['Template'] ) || empty( $child['Template'] ) || $child['Template'] == $child['Stylesheet'] )
|
|
136
|
+
return false;
|
|
137
|
+
|
|
138
|
+
//pull up parent data to get its name
|
|
139
|
+
$parent = $themes[$name]['Template'];
|
|
140
|
+
$parent = get_theme_data( get_theme_root( $child['Template'] ) . '/' . $child['Template'] . '/style.css' );
|
|
141
|
+
$preset = $this->get_preset( $parent['Stylesheet'] );
|
|
142
|
+
|
|
143
|
+
//no parent preset
|
|
144
|
+
if ( !$preset )
|
|
145
|
+
return false;
|
|
146
|
+
|
|
147
|
+
//rename the theme of the parent preset object for consistent return
|
|
148
|
+
$preset->theme = $theme;
|
|
149
|
+
$preset->parentPreset = $parent['Stylesheet'];
|
|
150
|
+
|
|
151
|
+
return $preset;
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* On plugin activation register with WP_Cron API to asynchronously refresh cache every 24 hours
|
|
157
|
+
* This will also asynchronously prime the cache on activation
|
|
158
|
+
*/
|
|
159
|
+
function schedule() {
|
|
160
|
+
wp_schedule_event( time(), 'daily', $this->parent->prefix . 'refresh_cache' );
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Clear chron schedule on deactivation
|
|
166
|
+
*/
|
|
167
|
+
function unschedule() {
|
|
168
|
+
wp_clear_scheduled_hook( $this->parent->prefix . 'refresh_cache' );
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Conditionally prompts users on options page to use the default selectors
|
|
174
|
+
* @uses get_preset
|
|
175
|
+
*/
|
|
176
|
+
function preset_prompt() {
|
|
177
|
+
|
|
178
|
+
$preset = $this->get_preset( );
|
|
179
|
+
|
|
180
|
+
if ( !$preset )
|
|
181
|
+
return;
|
|
182
|
+
|
|
183
|
+
unset( $preset->theme );
|
|
184
|
+
unset( $preset->parentPreset );
|
|
185
|
+
|
|
186
|
+
//if they are already using the preset, don't prompt
|
|
187
|
+
$using_default = true;
|
|
188
|
+
foreach ( $preset as $key => $value ) {
|
|
189
|
+
|
|
190
|
+
if ( $this->parent->options->$key != $value )
|
|
191
|
+
$using_default = false;
|
|
192
|
+
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if ( $using_default )
|
|
196
|
+
return;
|
|
197
|
+
|
|
198
|
+
require dirname( $this->parent->file ) . '/templates/preset-prompt.php';
|
|
199
|
+
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Reset selectors to default
|
|
205
|
+
*/
|
|
206
|
+
function set_presets() {
|
|
207
|
+
|
|
208
|
+
if ( !isset( $_GET['set_presets'] ) )
|
|
209
|
+
return;
|
|
210
|
+
|
|
211
|
+
if ( !current_user_can( 'manage_options' ) )
|
|
212
|
+
return;
|
|
213
|
+
|
|
214
|
+
check_admin_referer( 'infinite-scroll-presets', 'nonce' );
|
|
215
|
+
|
|
216
|
+
//don't delete options if we don't have a preset
|
|
217
|
+
$preset = $this->get_preset( );
|
|
218
|
+
|
|
219
|
+
if ( !$preset )
|
|
220
|
+
return;
|
|
221
|
+
|
|
222
|
+
foreach ( $this->keys as $key )
|
|
223
|
+
$this->parent->options->$key = null;
|
|
224
|
+
|
|
225
|
+
wp_redirect( admin_url( 'options-general.php?page=infinite_scroll_options&settings-updated=true' ) );
|
|
226
|
+
exit();
|
|
227
|
+
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Handles AJAX edits from the manage presets form
|
|
233
|
+
*/
|
|
234
|
+
function process_ajax_edit() {
|
|
235
|
+
|
|
236
|
+
if ( !current_user_can( 'manage_options' ) )
|
|
237
|
+
wp_die( -1 );
|
|
238
|
+
|
|
239
|
+
if ( is_multisite() && !is_super_admin() )
|
|
240
|
+
wp_die( -1 );
|
|
241
|
+
|
|
242
|
+
$data = new stdClass;
|
|
243
|
+
|
|
244
|
+
foreach ( $this->keys as $key )
|
|
245
|
+
$data->$key = addslashes( trim( $_POST[ $key . '_column-' . $key ] ) );
|
|
246
|
+
|
|
247
|
+
$this->set_custom_preset( $data->theme, $data );
|
|
248
|
+
|
|
249
|
+
wp_die( 1 );
|
|
250
|
+
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Handles AJAX requests to delete presets from the manage presets form
|
|
256
|
+
*/
|
|
257
|
+
function process_ajax_delete() {
|
|
258
|
+
|
|
259
|
+
if ( !current_user_can( 'manage_options' ) )
|
|
260
|
+
wp_die( -1 );
|
|
261
|
+
|
|
262
|
+
if ( is_multisite() && !is_super_admin() )
|
|
263
|
+
wp_die( -1 );
|
|
264
|
+
|
|
265
|
+
if ( !isset( $_GET['theme'] ) )
|
|
266
|
+
wp_die( -1 );
|
|
267
|
+
|
|
268
|
+
$this->delete_custom_preset( $_GET['theme'] );
|
|
269
|
+
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Retreive global custom presets
|
|
275
|
+
* @return array the custom preset array
|
|
276
|
+
*/
|
|
277
|
+
function get_custom_presets( ) {
|
|
278
|
+
$presets = get_site_option( $this->custom_preset_key, array(), true );
|
|
279
|
+
return apply_filters( $this->parent->prefix . 'custom_presets', $presets );
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Update global custom presets
|
|
285
|
+
* @param array $presets the presets (all)
|
|
286
|
+
* @return bool success/fail
|
|
287
|
+
*/
|
|
288
|
+
function set_custom_presets( $presets ) {
|
|
289
|
+
return update_site_option( $this->custom_preset_key, $presets );
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Store a theme's global presets
|
|
295
|
+
* @param string $theme the theme name
|
|
296
|
+
* @param array $preset the presets
|
|
297
|
+
* @return bool success/fail
|
|
298
|
+
*/
|
|
299
|
+
function set_custom_preset( $theme, $preset ) {
|
|
300
|
+
$presets = $this->get_custom_presets();
|
|
301
|
+
$presets[ $theme ] = $preset;
|
|
302
|
+
return $this->set_custom_presets( $presets );
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Removes a custom preset from the database
|
|
308
|
+
* @param string $theme the theme to remove
|
|
309
|
+
* @return bool success/fail
|
|
310
|
+
*/
|
|
311
|
+
function delete_custom_preset( $theme ) {
|
|
312
|
+
$presets = $this->get_custom_presets();
|
|
313
|
+
unset( $presets[ $theme ] );
|
|
314
|
+
return $this->set_custom_presets( $presets );
|
|
315
|
+
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Allow custom presets to merge/override community presets
|
|
321
|
+
* @param unknown $presets
|
|
322
|
+
* @return unknown
|
|
323
|
+
*/
|
|
324
|
+
function merge_custom_presets( $presets ) {
|
|
325
|
+
|
|
326
|
+
// 2nd array overrides keys that overlap with first array
|
|
327
|
+
$presets = array_merge( $presets, $this->get_custom_presets() );
|
|
328
|
+
|
|
329
|
+
//sort by key alpha ascending
|
|
330
|
+
asort( $presets );
|
|
331
|
+
|
|
332
|
+
return $presets;
|
|
333
|
+
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* If a selector is not set, try to grab a preset to save the user trouble
|
|
339
|
+
* @param array $options the options array
|
|
340
|
+
* @return array the defaulted options array
|
|
341
|
+
*/
|
|
342
|
+
function default_to_presets( $options ) {
|
|
343
|
+
|
|
344
|
+
//we don't have a preset, no need to go any further
|
|
345
|
+
if ( !( $preset = $this->get_preset( ) ) )
|
|
346
|
+
return $options;
|
|
347
|
+
|
|
348
|
+
foreach ( $this->keys as $key ) {
|
|
349
|
+
if ( empty( $options[$key] ) )
|
|
350
|
+
$options[$key] = $preset->$key;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
return $options;
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Converts legacy csv.php format
|
|
359
|
+
* Removes first two lines and last line
|
|
360
|
+
* @param string $data the contents of the CSV (usually via wp_remote_get)
|
|
361
|
+
* @param string the equivalent standard CSV
|
|
362
|
+
*/
|
|
363
|
+
function parse_legacy_csv( $data ) {
|
|
364
|
+
|
|
365
|
+
if ( is_string( $data ) )
|
|
366
|
+
$data = explode( "\n", $data );
|
|
367
|
+
|
|
368
|
+
//remove first two lines
|
|
369
|
+
$data = array_slice( $data, 2 );
|
|
370
|
+
|
|
371
|
+
//remove the last line
|
|
372
|
+
array_pop( $data );
|
|
373
|
+
|
|
374
|
+
$presets = $this->parse_csv( $data );
|
|
375
|
+
|
|
376
|
+
$output = array();
|
|
377
|
+
|
|
378
|
+
//convert Theme Name to stylesheet and stuff into output array
|
|
379
|
+
foreach( $presets as $theme ) {
|
|
380
|
+
$theme->theme = $this->get_stylesheet( $theme->theme );
|
|
381
|
+
$output[ $theme->theme ] = $theme;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
return $output;
|
|
385
|
+
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* Parse CSV into array of preset objects
|
|
390
|
+
* @param string|array the CSV data, either as a string or as an array of lines
|
|
391
|
+
* @return array array of preset objects
|
|
392
|
+
*/
|
|
393
|
+
function parse_csv( $data ) {
|
|
394
|
+
|
|
395
|
+
if ( is_string( $data ) )
|
|
396
|
+
$data = explode( "\n", $data );
|
|
397
|
+
|
|
398
|
+
//php 5.3+
|
|
399
|
+
if ( function_exists( 'str_getcsv' ) ) {
|
|
400
|
+
|
|
401
|
+
foreach ( $data as &$line )
|
|
402
|
+
$line = str_getcsv( $line );
|
|
403
|
+
|
|
404
|
+
//php 5.2
|
|
405
|
+
// fgetcsv needs a file handle,
|
|
406
|
+
// so write the string to a temp file before parsing
|
|
407
|
+
} else {
|
|
408
|
+
|
|
409
|
+
$fh = tmpfile();
|
|
410
|
+
fwrite( $fh, implode( "\n", $data ) );
|
|
411
|
+
fseek( $fh, 0 );
|
|
412
|
+
$data = array();
|
|
413
|
+
|
|
414
|
+
while( $line = fgetcsv( $fh ) )
|
|
415
|
+
$data[] = $line;
|
|
416
|
+
|
|
417
|
+
fclose( $fh );
|
|
418
|
+
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
$presets = array();
|
|
422
|
+
|
|
423
|
+
//build preset objects and stuff into keyed array
|
|
424
|
+
foreach ( $data as &$line ) {
|
|
425
|
+
|
|
426
|
+
$lineObj = new stdClass;
|
|
427
|
+
|
|
428
|
+
foreach ( $this->keys as $id => $key )
|
|
429
|
+
$lineObj->$key = $line[ $id ];
|
|
430
|
+
|
|
431
|
+
$presets[ $lineObj->theme ] = $lineObj;
|
|
432
|
+
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
return $presets;
|
|
436
|
+
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Return object representing current theme's selectors
|
|
441
|
+
* @return object the same as would be returned from get_preset()
|
|
442
|
+
*/
|
|
443
|
+
function current_selectors() {
|
|
444
|
+
|
|
445
|
+
$theme = new stdClass();
|
|
446
|
+
foreach ( $this->keys as $key )
|
|
447
|
+
$theme->$key = $this->parent->options->$key;
|
|
448
|
+
|
|
449
|
+
$theme->theme = get_stylesheet();
|
|
450
|
+
|
|
451
|
+
return $theme;
|
|
452
|
+
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* Export CSS Selectors as CSV
|
|
457
|
+
* @param bool $all (optional) whether to include community selectors in output
|
|
458
|
+
* @return string CSV of selectors
|
|
459
|
+
*/
|
|
460
|
+
function export( $all = false ) {
|
|
461
|
+
|
|
462
|
+
$presets = array();
|
|
463
|
+
|
|
464
|
+
//if the current theme is not a known preset or they want all
|
|
465
|
+
if ( !$this->get_preset( ) || $all )
|
|
466
|
+
$presets[ get_stylesheet() ] = $this->current_selectors();
|
|
467
|
+
|
|
468
|
+
//user has access to global custom presets
|
|
469
|
+
if ( is_multisite() && is_super_admin() ) {
|
|
470
|
+
|
|
471
|
+
if ( $custom = $this->get_custom_presets() );
|
|
472
|
+
$presets = array_merge( $presets, $custom );
|
|
473
|
+
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
//include community presets, if asked
|
|
477
|
+
if ( $all )
|
|
478
|
+
$presets = array_merge( $this->get_presets(), $presets );
|
|
479
|
+
|
|
480
|
+
asort( $presets );
|
|
481
|
+
|
|
482
|
+
//workaround because fputcsv needs a file handle by default
|
|
483
|
+
$fh = tmpfile();
|
|
484
|
+
$length = 0;
|
|
485
|
+
|
|
486
|
+
foreach ( $presets as &$preset )
|
|
487
|
+
$length += fputcsv( $fh, (array) $preset );
|
|
488
|
+
|
|
489
|
+
if ( $length == 0 )
|
|
490
|
+
return false;
|
|
491
|
+
|
|
492
|
+
fseek( $fh, 0 );
|
|
493
|
+
$csv = fread( $fh, $length );
|
|
494
|
+
fclose( $fh );
|
|
495
|
+
|
|
496
|
+
return $csv;
|
|
497
|
+
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* Migrates legacy csv.php files to 2.5's custom presets format
|
|
502
|
+
* @uses parse_legacy_csv
|
|
503
|
+
*/
|
|
504
|
+
function migrate() {
|
|
505
|
+
|
|
506
|
+
//no preset file to migrate
|
|
507
|
+
if ( !file_exists( dirname( $this->parent->file ) . '/PresetDB.csv.php' ) )
|
|
508
|
+
return;
|
|
509
|
+
|
|
510
|
+
$data = file_get_contents( dirname( $this->parent->file ) . '/PresetDB.csv.php' );
|
|
511
|
+
$presets = $this->parse_legacy_csv( $data );
|
|
512
|
+
|
|
513
|
+
//this wiill override any existing presets,
|
|
514
|
+
// but is okay as is only being fired when no presets exist
|
|
515
|
+
$this->set_custom_presets( $presets );
|
|
516
|
+
|
|
517
|
+
return $presets;
|
|
518
|
+
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/**
|
|
522
|
+
* Determines whether a given theme is installed
|
|
523
|
+
* @param string|object $theme either the theme slug or the preset object
|
|
524
|
+
* @return bool true if insalled, otherwise false
|
|
525
|
+
*/
|
|
526
|
+
function theme_installed( $theme ) {
|
|
527
|
+
|
|
528
|
+
//3.4+
|
|
529
|
+
if ( function_exists( 'wp_get_theme' ) )
|
|
530
|
+
return ( wp_get_theme( $theme ) ) ? true : false;
|
|
531
|
+
|
|
532
|
+
//pre 3.4
|
|
533
|
+
$themes = get_themes();
|
|
534
|
+
$name = $this->get_name( $theme );
|
|
535
|
+
|
|
536
|
+
return array_key_exists( $name, $themes );
|
|
537
|
+
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
/**
|
|
541
|
+
* Given a theme name, returns the coresponding theme stylesheet
|
|
542
|
+
*
|
|
543
|
+
* Used for converting legacy CSVs which were name based to new CSVs which are stylesheet based
|
|
544
|
+
* since 3.4 returns themes keyed to stylesheets, not names as it did pre-3.4
|
|
545
|
+
*
|
|
546
|
+
* @param string $theme the theme name
|
|
547
|
+
* @return string the stylesheet
|
|
548
|
+
*/
|
|
549
|
+
function get_stylesheet( $name ) {
|
|
550
|
+
|
|
551
|
+
//pre 3.4
|
|
552
|
+
if ( !function_exists( 'wp_get_themes' ) ) {
|
|
553
|
+
|
|
554
|
+
if ( $theme = get_theme( $name ) )
|
|
555
|
+
return $theme->stylesheet;
|
|
556
|
+
|
|
557
|
+
//3.4+
|
|
558
|
+
} else {
|
|
559
|
+
|
|
560
|
+
//we can't use wp_filter_list_object with WP_Theme objects, so filter manually
|
|
561
|
+
foreach ( wp_get_themes() as $theme )
|
|
562
|
+
if ( $theme->name = $name )
|
|
563
|
+
return $theme->stylesheet;
|
|
564
|
+
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
return false;
|
|
568
|
+
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
/**
|
|
572
|
+
* Given a theme stylesheet, return the coresponding theme name
|
|
573
|
+
*
|
|
574
|
+
* Used to normalize data between 3.3 and 3.4 where keying of themes switched from name to stylesheet
|
|
575
|
+
*
|
|
576
|
+
* @param string $stylesheet the theme stylesheet (slug)
|
|
577
|
+
* @return string the theme name
|
|
578
|
+
*/
|
|
579
|
+
function get_name( $stylesheet ) {
|
|
580
|
+
|
|
581
|
+
//3.4+
|
|
582
|
+
if ( function_exists( 'wp_get_theme' ) ) {
|
|
583
|
+
|
|
584
|
+
if ( $theme = wp_get_theme( $stylesheet ) )
|
|
585
|
+
return $theme->name;
|
|
586
|
+
|
|
587
|
+
|
|
588
|
+
//pre 3.4
|
|
589
|
+
} else {
|
|
590
|
+
|
|
591
|
+
foreach ( get_themes as $theme )
|
|
592
|
+
if ( $theme->stylesheet == $stylesheet )
|
|
593
|
+
return $theme->name;
|
|
594
|
+
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
//theme isn't installed, use the WP.org API to grab the name rather than risk losing data on upgrade
|
|
598
|
+
$api = themes_api( 'theme_information', array( 'slug' => $stylesheet, 'fields' => array( 'sections' => false, 'tags' => false ) ) );
|
|
599
|
+
|
|
600
|
+
if ( is_wp_error( $api ) )
|
|
601
|
+
return false;
|
|
602
|
+
|
|
603
|
+
return $api->name;
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
|
|
611
|
+
if (!class_exists('WP_List_Table')) {
|
|
612
|
+
require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
/**
|
|
616
|
+
* List table for manage custom presets page
|
|
617
|
+
*/
|
|
618
|
+
class Infinite_Scroll_Presets_Table extends WP_List_Table {
|
|
619
|
+
|
|
620
|
+
/**
|
|
621
|
+
* Register with Parent
|
|
622
|
+
*/
|
|
623
|
+
function __construct( $args = array() ) {
|
|
624
|
+
|
|
625
|
+
parent::__construct( array(
|
|
626
|
+
'singular' => 'preset',
|
|
627
|
+
'plural' => 'presets',
|
|
628
|
+
'ajax' => true,
|
|
629
|
+
) );
|
|
630
|
+
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
|
|
634
|
+
/**
|
|
635
|
+
* Default column callback
|
|
636
|
+
* @param object $item the item to display
|
|
637
|
+
* @param string $column_name the column name
|
|
638
|
+
* @return string the HTML to display
|
|
639
|
+
*/
|
|
640
|
+
function column_default( $item, $column_name ) {
|
|
641
|
+
return $item->$column_name;
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
|
|
645
|
+
/**
|
|
646
|
+
* Callback to display the theme column
|
|
647
|
+
* @param object $item the preset object
|
|
648
|
+
* @return string the HTML to display
|
|
649
|
+
*/
|
|
650
|
+
function column_theme( $item ) {
|
|
651
|
+
global $infinite_scroll;
|
|
652
|
+
|
|
653
|
+
$s = '<strong><a href="#" class="theme-name">' . $item->theme . '</a></strong>';
|
|
654
|
+
$s .= '<div class="edit edit-link" style="visibility:hidden;"><a href="#">' . __( 'Edit', 'infinite-scroll' ) . '</a> | <span class="delete"><a href="#">' . __( 'Delete', 'infinite-scroll' ) . '</a></span></div>';
|
|
655
|
+
$s .= '<div class="save save-link" style="display:none; padding-top:5px;"><a href="#" class="button-primary">' . __( 'Save', 'infinite-scroll' ) . '</a> <a href="#" class="cancel">' . __( 'Cancel', 'infinite-scroll' ) . '</a> <img class="loader" style="display:none;" src="'. admin_url( '/images/loading.gif' ) .'" /></div>';
|
|
656
|
+
return $s;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
|
|
660
|
+
/**
|
|
661
|
+
* Callaback to return list of columns to display
|
|
662
|
+
* @return array the columns to display
|
|
663
|
+
*/
|
|
664
|
+
function get_columns() {
|
|
665
|
+
return array(
|
|
666
|
+
'theme' => 'Theme',
|
|
667
|
+
'contentSelector' => 'Content Selector',
|
|
668
|
+
'navSelector' => 'Navigation Selector',
|
|
669
|
+
'nextSelector' => 'Next Selector',
|
|
670
|
+
'itemSelector' => 'Item Selector',
|
|
671
|
+
);
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
|
|
675
|
+
/**
|
|
676
|
+
* Grab data and filter prior to passing to table class
|
|
677
|
+
*/
|
|
678
|
+
function prepare_items() {
|
|
679
|
+
global $infinite_scroll;
|
|
680
|
+
|
|
681
|
+
$per_page = 25;
|
|
682
|
+
|
|
683
|
+
$columns = $this->get_columns();
|
|
684
|
+
$hidden = array();
|
|
685
|
+
$sortable = array();
|
|
686
|
+
|
|
687
|
+
$this->_column_headers = array($columns, $hidden, $sortable);
|
|
688
|
+
|
|
689
|
+
$data = $infinite_scroll->presets->get_presets();
|
|
690
|
+
|
|
691
|
+
//only display installed themes
|
|
692
|
+
$data = array_filter( $data, array( &$infinite_scroll->presets, 'theme_installed' ) );
|
|
693
|
+
|
|
694
|
+
//merge in themes
|
|
695
|
+
$themes = get_themes();
|
|
696
|
+
|
|
697
|
+
foreach ( $themes as $theme => $theme_data ) {
|
|
698
|
+
|
|
699
|
+
if ( array_key_exists( $theme, $data) )
|
|
700
|
+
continue;
|
|
701
|
+
|
|
702
|
+
//check for parent theme's preset, if any
|
|
703
|
+
if ( $preset = $infinite_scroll->presets->get_preset( $theme ) ) {
|
|
704
|
+
$data[ $theme ] = $preset;
|
|
705
|
+
continue;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
$themeObj = new stdClass;
|
|
709
|
+
|
|
710
|
+
foreach ( $infinite_scroll->presets->keys as $key )
|
|
711
|
+
$themeObj->$key = null;
|
|
712
|
+
|
|
713
|
+
$themeObj->theme = $theme;
|
|
714
|
+
|
|
715
|
+
$data[ $theme ] = $themeObj;
|
|
716
|
+
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
asort( $data );
|
|
720
|
+
|
|
721
|
+
$current_page = $this->get_pagenum();
|
|
722
|
+
|
|
723
|
+
$total_items = count($data);
|
|
724
|
+
|
|
725
|
+
$data = array_slice($data, (($current_page-1)*$per_page), $per_page);
|
|
726
|
+
|
|
727
|
+
$this->items = $data;
|
|
728
|
+
|
|
729
|
+
$this->set_pagination_args( array(
|
|
730
|
+
'total_items' => $total_items, //WE have to calculate the total number of items
|
|
731
|
+
'per_page' => $per_page, //WE have to determine how many items to show on a page
|
|
732
|
+
'total_pages' => ceil($total_items/$per_page) //WE have to calculate the total number of pages
|
|
733
|
+
) );
|
|
734
|
+
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
}
|