From 1ab6e5f0b085d1b0b001b0d9d2076341dbd2c61b Mon Sep 17 00:00:00 2001 From: Rumperuu Date: Wed, 21 Mar 2018 18:19:20 +0000 Subject: [PATCH] Initial Commit --- 404.php | 18 + LICENSE | 674 ++ archive.php | 58 + centred-page.php | 26 + comments.php | 53 + css/editor-style.css | 546 ++ css/ie.css | 48 + css/ie7.css | 176 + css/ie8.css | 222 + css/reset.css | 48 + footer.php | 24 + functions.php | 622 ++ genericons/COPYING.txt | 9 + genericons/Genericons.eot | Bin 0 -> 22374 bytes genericons/Genericons.svg | 537 ++ genericons/Genericons.ttf | Bin 0 -> 22188 bytes genericons/Genericons.woff | Bin 0 -> 13988 bytes genericons/LICENSE.txt | 339 + genericons/README.md | 218 + genericons/genericons.css | 263 + header.php | 39 + home.php | 61 + inc/back-compat.php | 71 + inc/customizer.php | 1165 +++ inc/template-tags.php | 262 + index.php | 15 + js/color-scheme-control.js | 96 + js/customize-preview.js | 41 + js/functions.js | 200 + js/html5.js | 326 + js/keyboard-image-navigation.js | 26 + js/markerclusterer.js | 1315 +++ js/skip-link-focus-fix.js | 36 + languages/twentysixteen.pot | 346 + page-experience-by-companies.php | 139 + page-experience-by-locations.php | 112 + page.php | 32 + plugins/akismet/.htaccess | 34 + plugins/akismet/LICENSE.txt | 339 + plugins/akismet/_inc/akismet.css | 474 ++ plugins/akismet/_inc/akismet.js | 197 + plugins/akismet/_inc/form.js | 30 + plugins/akismet/_inc/img/logo-full-2x.png | Bin 0 -> 4970 bytes plugins/akismet/akismet.php | 60 + plugins/akismet/class.akismet-admin.php | 1011 +++ plugins/akismet/class.akismet-widget.php | 110 + plugins/akismet/class.akismet.php | 1217 +++ plugins/akismet/index.php | 2 + plugins/akismet/readme.txt | 336 + plugins/akismet/views/config.php | 216 + plugins/akismet/views/get.php | 6 + plugins/akismet/views/notice.php | 123 + plugins/akismet/views/start.php | 97 + plugins/akismet/views/stats.php | 4 + plugins/akismet/views/strict.php | 17 + plugins/akismet/wrapper.php | 213 + .../easy-footnotes/assets/banner-772x250.jpg | Bin 0 -> 92081 bytes .../easy-footnotes/assets/easy-footnotes.css | 13 + .../assets/qtip/imagesloaded.pkg.min.js | 19 + .../assets/qtip/imagesloaded.pkgd.min.js | 7 + .../assets/qtip/jquery.qtip.css | 617 ++ .../easy-footnotes/assets/qtip/jquery.qtip.js | 3451 ++++++++ .../assets/qtip/jquery.qtip.min.css | 3 + .../assets/qtip/jquery.qtip.min.js | 5 + .../assets/qtip/jquery.qtip.min.map | 1 + .../assets/qtip/jquery.qtipcall.js | 18 + .../easy-footnotes/easy-footnotes-admin.php | 48 + plugins/easy-footnotes/easy-footnotes.php | 140 + plugins/easy-footnotes/readme.txt | 115 + plugins/easy-footnotes/screenshot-1.jpg | Bin 0 -> 58078 bytes plugins/easy-footnotes/screenshot-2.jpg | Bin 0 -> 16540 bytes plugins/index.php | 2 + plugins/infinite-scroll/behaviors/cufon.js | 20 + plugins/infinite-scroll/behaviors/local.js | 26 + .../behaviors/manual-trigger.js | 61 + .../behaviors/masonry-isotope.js | 21 + plugins/infinite-scroll/behaviors/sausage.js | 19 + plugins/infinite-scroll/img/ajax-loader.gif | Bin 0 -> 10819 bytes plugins/infinite-scroll/includes/admin.php | 126 + plugins/infinite-scroll/includes/options.php | 191 + plugins/infinite-scroll/includes/presets.php | 759 ++ plugins/infinite-scroll/includes/submit.php | 67 + plugins/infinite-scroll/infinite-scroll.php | 316 + .../js/admin/infinite-scoll.js | 5 + .../js/admin/infinite-scroll.dev.js | 128 + .../js/front-end/jquery.infinitescroll.dev.js | 810 ++ .../js/front-end/jquery.infinitescroll.js | 1 + .../languages/infinite-scroll.pot | 173 + plugins/infinite-scroll/license.html | 694 ++ plugins/infinite-scroll/readme.md | 246 + plugins/infinite-scroll/readme.txt | 241 + plugins/infinite-scroll/screenshot-1.png | Bin 0 -> 63879 bytes plugins/infinite-scroll/screenshot-2.png | Bin 0 -> 68151 bytes plugins/infinite-scroll/screenshot-3.png | Bin 0 -> 81085 bytes plugins/infinite-scroll/templates/footer.php | 12 + .../templates/manage-presets.php | 21 + plugins/infinite-scroll/templates/options.php | 174 + .../templates/preset-prompt.php | 7 + .../templates/submit-prompt.php | 23 + plugins/infinite-scroll/templates/submit.php | 31 + plugins/jetpack/.svnignore | 8 + plugins/jetpack/3rd-party/3rd-party.php | 12 + plugins/jetpack/3rd-party/bbpress.php | 28 + plugins/jetpack/3rd-party/bitly.php | 29 + plugins/jetpack/3rd-party/buddypress.php | 9 + plugins/jetpack/3rd-party/woocommerce.php | 14 + plugins/jetpack/3rd-party/wpml.php | 35 + plugins/jetpack/_inc/facebook-embed.js | 36 + .../fonts/automatticons/automatticons.eot | Bin 0 -> 8292 bytes .../fonts/automatticons/automatticons.svg | 44 + .../fonts/automatticons/automatticons.ttf | Bin 0 -> 12012 bytes .../fonts/automatticons/automatticons.woff | Bin 0 -> 8944 bytes .../jetpack/_inc/fonts/jetpack/jetpack.eot | Bin 0 -> 1860 bytes .../jetpack/_inc/fonts/jetpack/jetpack.svg | 32 + .../jetpack/_inc/fonts/jetpack/jetpack.ttf | Bin 0 -> 1688 bytes .../jetpack/_inc/fonts/jetpack/jetpack.woff | Bin 0 -> 1172 bytes plugins/jetpack/_inc/footer.php | 44 + plugins/jetpack/_inc/gallery-settings.js | 33 + plugins/jetpack/_inc/genericons.php | 13 + plugins/jetpack/_inc/genericons/COPYING.txt | 9 + plugins/jetpack/_inc/genericons/LICENSE.txt | 339 + plugins/jetpack/_inc/genericons/README.md | 218 + .../jetpack/_inc/genericons/genericons.css | 11 + .../_inc/genericons/genericons/Genericons.eot | Bin 0 -> 22374 bytes .../_inc/genericons/genericons/Genericons.svg | 537 ++ .../_inc/genericons/genericons/Genericons.ttf | Bin 0 -> 22188 bytes .../genericons/genericons/Genericons.woff | Bin 0 -> 13988 bytes .../_inc/genericons/genericons/genericons.css | 263 + .../genericons/rtl/genericons-rtl.css | 265 + plugins/jetpack/_inc/header.php | 27 + plugins/jetpack/_inc/jetpack-admin.js | 54 + plugins/jetpack/_inc/jetpack-jitm.js | 135 + plugins/jetpack/_inc/jetpack-modules.js | 150 + .../jetpack/_inc/jetpack-modules.models.js | 72 + plugins/jetpack/_inc/jetpack-modules.views.js | 62 + plugins/jetpack/_inc/jetpack.js | 256 + plugins/jetpack/_inc/jp-my-jetpack.js | 86 + plugins/jetpack/_inc/jp.js | 433 + plugins/jetpack/_inc/jquery.inview.js | 143 + plugins/jetpack/_inc/jquery.jetpack-resize.js | 285 + plugins/jetpack/_inc/jquery.jetpack-sync.js | 68 + plugins/jetpack/_inc/jquery.spin.js | 104 + .../admin-pages/class.jetpack-admin-page.php | 109 + .../class.jetpack-landing-page.php | 299 + .../class.jetpack-my-jetpack-page.php | 187 + .../class.jetpack-settings-page.php | 87 + plugins/jetpack/_inc/lib/class.color.php | 755 ++ .../_inc/lib/class.media-extractor.php | 436 + .../jetpack/_inc/lib/class.media-summary.php | 281 + plugins/jetpack/_inc/lib/markdown/0-load.php | 6 + plugins/jetpack/_inc/lib/markdown/README.md | 19 + plugins/jetpack/_inc/lib/markdown/extra.php | 3194 ++++++++ plugins/jetpack/_inc/lib/markdown/gfm.php | 389 + plugins/jetpack/_inc/lib/tonesque.php | 215 + .../_inc/lib/tracks/class.tracks-client.php | 168 + .../_inc/lib/tracks/class.tracks-event.php | 149 + plugins/jetpack/_inc/lib/tracks/client.php | 124 + .../jetpack/_inc/lib/tracks/tracks-ajax.js | 49 + plugins/jetpack/_inc/postmessage.js | 438 + plugins/jetpack/_inc/spin.js | 349 + plugins/jetpack/_inc/twitter-timeline.js | 10 + plugins/jetpack/changelog.txt | 1787 +++++ plugins/jetpack/class.jetpack-admin.php | 259 + plugins/jetpack/class.jetpack-autoupdate.php | 246 + .../class.jetpack-bbpress-json-api-compat.php | 108 + plugins/jetpack/class.jetpack-cli.php | 599 ++ .../jetpack/class.jetpack-client-server.php | 273 + plugins/jetpack/class.jetpack-client.php | 288 + plugins/jetpack/class.jetpack-data.php | 125 + plugins/jetpack/class.jetpack-debugger.php | 434 + plugins/jetpack/class.jetpack-error.php | 3 + plugins/jetpack/class.jetpack-heartbeat.php | 160 + plugins/jetpack/class.jetpack-ixr-client.php | 135 + plugins/jetpack/class.jetpack-jitm.php | 477 ++ .../class.jetpack-modules-list-table.php | 357 + ...class.jetpack-network-sites-list-table.php | 148 + plugins/jetpack/class.jetpack-network.php | 813 ++ plugins/jetpack/class.jetpack-options.php | 246 + plugins/jetpack/class.jetpack-post-images.php | 583 ++ plugins/jetpack/class.jetpack-signature.php | 193 + plugins/jetpack/class.jetpack-sync.php | 1104 +++ plugins/jetpack/class.jetpack-tracks.php | 83 + .../jetpack/class.jetpack-twitter-cards.php | 217 + plugins/jetpack/class.jetpack-user-agent.php | 1415 ++++ .../jetpack/class.jetpack-xmlrpc-server.php | 514 ++ plugins/jetpack/class.jetpack.php | 7098 +++++++++++++++++ plugins/jetpack/class.json-api-endpoints.php | 2146 +++++ plugins/jetpack/class.json-api.php | 693 ++ plugins/jetpack/class.photon.php | 943 +++ plugins/jetpack/composer.json | 10 + plugins/jetpack/css/dashboard-widget-rtl.css | 118 + .../jetpack/css/dashboard-widget-rtl.min.css | 3 + plugins/jetpack/css/dashboard-widget.css | 114 + plugins/jetpack/css/dashboard-widget.css.map | 1 + plugins/jetpack/css/dashboard-widget.min.css | 3 + .../jetpack/css/dashboard-widget.min.css.map | 1 + .../jetpack/css/jetpack-admin-jitm-rtl.css | 151 + .../css/jetpack-admin-jitm-rtl.min.css | 5 + plugins/jetpack/css/jetpack-admin-jitm.css | 145 + .../jetpack/css/jetpack-admin-jitm.css.map | 1 + .../jetpack/css/jetpack-admin-jitm.min.css | 5 + .../css/jetpack-admin-jitm.min.css.map | 1 + plugins/jetpack/css/jetpack-admin-rtl.css | 3774 +++++++++ plugins/jetpack/css/jetpack-admin-rtl.css.map | 1 + plugins/jetpack/css/jetpack-admin-rtl.min.css | 37 + .../jetpack/css/jetpack-admin-rtl.min.css.map | 1 + plugins/jetpack/css/jetpack-admin.css | 3736 +++++++++ plugins/jetpack/css/jetpack-admin.css.map | 1 + plugins/jetpack/css/jetpack-admin.min.css | 37 + plugins/jetpack/css/jetpack-admin.min.css.map | 1 + plugins/jetpack/css/jetpack-banners-rtl.css | 337 + .../jetpack/css/jetpack-banners-rtl.css.map | 1 + .../jetpack/css/jetpack-banners-rtl.min.css | 6 + .../css/jetpack-banners-rtl.min.css.map | 1 + plugins/jetpack/css/jetpack-banners.css | 330 + plugins/jetpack/css/jetpack-banners.css.map | 1 + plugins/jetpack/css/jetpack-banners.min.css | 6 + .../jetpack/css/jetpack-banners.min.css.map | 1 + plugins/jetpack/css/jetpack-icons.css | 37 + plugins/jetpack/css/jetpack-icons.css.map | 1 + plugins/jetpack/css/jetpack-icons.min.css | 3 + plugins/jetpack/css/jetpack-icons.min.css.map | 1 + plugins/jetpack/css/jetpack-rtl.css | 4 + plugins/jetpack/css/jetpack.css | 4 + plugins/jetpack/css/jp-benefits.css | 2 + plugins/jetpack/css/jp-benefits.css.map | 1 + plugins/jetpack/functions.compat.php | 90 + plugins/jetpack/functions.gallery.php | 76 + plugins/jetpack/functions.opengraph.php | 395 + plugins/jetpack/functions.photon.php | 258 + plugins/jetpack/images/connect-plug.svg | 19 + .../images/connection-landing/aurora-lrg.jpg | Bin 0 -> 168634 bytes .../images/connection-landing/aurora-med.jpg | Bin 0 -> 95157 bytes .../images/connection-landing/aurora-sm.jpg | Bin 0 -> 66171 bytes .../connection-landing/feature-photon-lrg.jpg | Bin 0 -> 144089 bytes .../connection-landing/feature-photon-med.jpg | Bin 0 -> 84302 bytes .../connection-landing/feature-photon-sm.jpg | Bin 0 -> 60122 bytes .../images/connection-landing/jp-shield.svg | 1 + .../images/connection-landing/long-clouds.svg | 38 + .../images/connection-landing/stars-left.svg | 172 + .../images/connection-landing/stars-right.svg | 172 + .../images/connection-landing/stat-bars.svg | 125 + .../connection-landing/stats-example-lrg.png | Bin 0 -> 60642 bytes .../connection-landing/stats-example-med.png | Bin 0 -> 82359 bytes .../connection-landing/stats-example-sm.png | Bin 0 -> 60401 bytes plugins/jetpack/images/custom-css.jpg | Bin 0 -> 9525 bytes plugins/jetpack/images/custom-css@2x.jpg | Bin 0 -> 23050 bytes plugins/jetpack/images/download-arrow.svg | 10 + plugins/jetpack/images/jetpack-icon.jpg | Bin 0 -> 9872 bytes plugins/jetpack/images/jetpack-logo.png | Bin 0 -> 706 bytes plugins/jetpack/images/jetpack-logo.svg | 27 + .../jetpack/images/jetpack-protect-shield.svg | 30 + plugins/jetpack/images/new-badge.svg | 10 + plugins/jetpack/images/rocketeer.svg | 14 + plugins/jetpack/images/rss/blue-large.png | Bin 0 -> 1743 bytes plugins/jetpack/images/rss/blue-medium.png | Bin 0 -> 1175 bytes plugins/jetpack/images/rss/blue-small.png | Bin 0 -> 597 bytes plugins/jetpack/images/rss/green-large.png | Bin 0 -> 1603 bytes plugins/jetpack/images/rss/green-medium.png | Bin 0 -> 1018 bytes plugins/jetpack/images/rss/green-small.png | Bin 0 -> 523 bytes plugins/jetpack/images/rss/orange-large.png | Bin 0 -> 2495 bytes plugins/jetpack/images/rss/orange-medium.png | Bin 0 -> 1582 bytes plugins/jetpack/images/rss/orange-small.png | Bin 0 -> 652 bytes plugins/jetpack/images/rss/pink-large.png | Bin 0 -> 3458 bytes plugins/jetpack/images/rss/pink-medium.png | Bin 0 -> 1509 bytes plugins/jetpack/images/rss/pink-small.png | Bin 0 -> 630 bytes plugins/jetpack/images/rss/purple-large.png | Bin 0 -> 3615 bytes plugins/jetpack/images/rss/purple-medium.png | Bin 0 -> 1655 bytes plugins/jetpack/images/rss/purple-small.png | Bin 0 -> 630 bytes plugins/jetpack/images/rss/red-large.png | Bin 0 -> 3388 bytes plugins/jetpack/images/rss/red-medium.png | Bin 0 -> 1536 bytes plugins/jetpack/images/rss/red-small.png | Bin 0 -> 595 bytes plugins/jetpack/images/rss/silver-large.png | Bin 0 -> 1946 bytes plugins/jetpack/images/rss/silver-medium.png | Bin 0 -> 811 bytes plugins/jetpack/images/rss/silver-small.png | Bin 0 -> 331 bytes .../images/screenshots/beautifulmath.jpg | Bin 0 -> 17159 bytes .../jetpack/images/screenshots/carousel.jpg | Bin 0 -> 42162 bytes .../jetpack/images/screenshots/comments.jpg | Bin 0 -> 16219 bytes .../images/screenshots/contactform.jpg | Bin 0 -> 25029 bytes .../screenshots/custom-content-types.jpg | Bin 0 -> 22052 bytes .../jetpack/images/screenshots/custom-css.jpg | Bin 0 -> 25432 bytes .../images/screenshots/google-plus.jpg | Bin 0 -> 7103 bytes .../jetpack/images/screenshots/hovercards.jpg | Bin 0 -> 25367 bytes plugins/jetpack/images/screenshots/likes.jpg | Bin 0 -> 15437 bytes plugins/jetpack/images/screenshots/manage.jpg | Bin 0 -> 23865 bytes .../screenshots/mobile-push-notifications.jpg | Bin 0 -> 28093 bytes .../images/screenshots/mobile-theme.jpg | Bin 0 -> 22313 bytes plugins/jetpack/images/screenshots/notes.jpg | Bin 0 -> 20665 bytes .../images/screenshots/post-by-email.jpg | Bin 0 -> 19119 bytes .../jetpack/images/screenshots/publicize.jpg | Bin 0 -> 15343 bytes .../images/screenshots/related-posts.jpg | Bin 0 -> 11382 bytes .../jetpack/images/screenshots/sharing.jpg | Bin 0 -> 15781 bytes .../jetpack/images/screenshots/shortcodes.jpg | Bin 0 -> 28818 bytes .../jetpack/images/screenshots/shortlinks.jpg | Bin 0 -> 21286 bytes .../jetpack/images/screenshots/spelling.jpg | Bin 0 -> 19051 bytes plugins/jetpack/images/screenshots/stats.jpg | Bin 0 -> 18641 bytes .../images/screenshots/subscriptions.jpg | Bin 0 -> 22165 bytes .../images/screenshots/tiled-gallery.jpg | Bin 0 -> 31306 bytes .../jetpack/images/screenshots/vaultpress.jpg | Bin 0 -> 21181 bytes .../jetpack/images/screenshots/widgets.jpg | Bin 0 -> 23939 bytes plugins/jetpack/images/stats-smiley.gif | Bin 0 -> 50 bytes plugins/jetpack/images/the-cloud-sm.svg | 30 + plugins/jetpack/images/the-cloud.svg | 16 + plugins/jetpack/images/the-footcloud.svg | 9 + plugins/jetpack/images/the-undercloud.svg | 13 + plugins/jetpack/images/wordpress-connect.jpg | Bin 0 -> 5524 bytes .../jetpack/images/wordpress-connect@2x.jpg | Bin 0 -> 12401 bytes plugins/jetpack/images/wordpress-stats.jpg | Bin 0 -> 11658 bytes plugins/jetpack/images/wordpress-stats@2x.jpg | Bin 0 -> 24786 bytes plugins/jetpack/jetpack.php | 101 + plugins/jetpack/json-api-config.php | 15 + plugins/jetpack/json-endpoints.php | 2734 +++++++ ...m-json-api-autosave-post-v1-1-endpoint.php | 68 + .../class.wpcom-json-api-comment-endpoint.php | 198 + ...s.wpcom-json-api-delete-media-endpoint.php | 24 + ...om-json-api-delete-media-v1-1-endpoint.php | 24 + ...om-json-api-get-autosave-v1-1-endpoint.php | 46 + ...ss.wpcom-json-api-get-comment-endpoint.php | 23 + .../class.wpcom-json-api-get-customcss.php | 34 + ...lass.wpcom-json-api-get-media-endpoint.php | 17 + ...wpcom-json-api-get-media-v1-1-endpoint.php | 21 + ...json-api-get-post-counts-v1-1-endpoint.php | 107 + ...class.wpcom-json-api-get-post-endpoint.php | 34 + ....wpcom-json-api-get-post-v1-1-endpoint.php | 34 + ...class.wpcom-json-api-get-site-endpoint.php | 521 ++ ....wpcom-json-api-get-site-v1-2-endpoint.php | 52 + ...wpcom-json-api-get-taxonomies-endpoint.php | 84 + ...s.wpcom-json-api-get-taxonomy-endpoint.php | 28 + ....wpcom-json-api-list-comments-endpoint.php | 266 + ...ss.wpcom-json-api-list-embeds-endpoint.php | 39 + ...s.wpcom-json-api-list-invites-endpoint.php | 124 + ...ass.wpcom-json-api-list-media-endpoint.php | 48 + ...pcom-json-api-list-media-v1-1-endpoint.php | 241 + ...pcom-json-api-list-post-types-endpoint.php | 84 + ...ass.wpcom-json-api-list-posts-endpoint.php | 277 + ...pcom-json-api-list-posts-v1-1-endpoint.php | 448 ++ ...ass.wpcom-json-api-list-roles-endpoint.php | 64 + ...pcom-json-api-list-shortcodes-endpoint.php | 27 + ...ass.wpcom-json-api-list-users-endpoint.php | 103 + ...ass.wpcom-json-api-menus-v1-1-endpoint.php | 698 ++ .../class.wpcom-json-api-post-endpoint.php | 684 ++ ...lass.wpcom-json-api-post-v1-1-endpoint.php | 712 ++ ...lass.wpcom-json-api-publicize-endpoint.php | 181 + ...s.wpcom-json-api-render-embed-endpoint.php | 61 + ...son-api-render-embed-reversal-endpoint.php | 74 + .../class.wpcom-json-api-render-endpoint.php | 124 + ...com-json-api-render-shortcode-endpoint.php | 50 + ...pcom-json-api-sharing-buttons-endpoint.php | 389 + ....wpcom-json-api-site-settings-endpoint.php | 463 ++ ...m-json-api-site-settings-v1-2-endpoint.php | 61 + ...lass.wpcom-json-api-site-user-endpoint.php | 107 + ...class.wpcom-json-api-taxonomy-endpoint.php | 29 + ...wpcom-json-api-update-comment-endpoint.php | 272 + .../class.wpcom-json-api-update-customcss.php | 50 + ...wpcom-json-api-update-invites-endpoint.php | 141 + ...s.wpcom-json-api-update-media-endpoint.php | 39 + ...om-json-api-update-media-v1-1-endpoint.php | 77 + ...ss.wpcom-json-api-update-post-endpoint.php | 716 ++ ...com-json-api-update-post-v1-1-endpoint.php | 727 ++ ...com-json-api-update-post-v1-2-endpoint.php | 628 ++ ...pcom-json-api-update-taxonomy-endpoint.php | 155 + ...ss.wpcom-json-api-update-user-endpoint.php | 101 + ...s.wpcom-json-api-upload-media-endpoint.php | 59 + ...om-json-api-upload-media-v1-1-endpoint.php | 47 + ...k-json-api-check-capabilities-endpoint.php | 25 + .../class.jetpack-json-api-core-endpoint.php | 20 + ....jetpack-json-api-core-modify-endpoint.php | 75 + .../class.jetpack-json-api-endpoint.php | 115 + .../class.jetpack-json-api-log-endpoint.php | 16 + ...ck-json-api-maybe-auto-update-endpoint.php | 32 + ...lass.jetpack-json-api-modules-endpoint.php | 121 + ....jetpack-json-api-modules-get-endpoint.php | 6 + ...jetpack-json-api-modules-list-endpoint.php | 13 + ...tpack-json-api-modules-modify-endpoint.php | 62 + ...tpack-json-api-plugins-delete-endpoint.php | 33 + ...lass.jetpack-json-api-plugins-endpoint.php | 199 + ....jetpack-json-api-plugins-get-endpoint.php | 6 + ...pack-json-api-plugins-install-endpoint.php | 198 + ...jetpack-json-api-plugins-list-endpoint.php | 15 + ...tpack-json-api-plugins-modify-endpoint.php | 189 + .../class.jetpack-json-api-sync-endpoint.php | 14 + ...etpack-json-api-themes-active-endpoint.php | 49 + ...etpack-json-api-themes-delete-endpoint.php | 41 + ...class.jetpack-json-api-themes-endpoint.php | 168 + ...s.jetpack-json-api-themes-get-endpoint.php | 6 + ...tpack-json-api-themes-install-endpoint.php | 82 + ....jetpack-json-api-themes-list-endpoint.php | 13 + ...etpack-json-api-themes-modify-endpoint.php | 67 + ...tpack-json-api-updates-status-endpoint.php | 34 + ...ass.wpcom-json-api-get-option-endpoint.php | 39 + ....wpcom-json-api-update-option-endpoint.php | 31 + .../jetpack/json-api-jetpack-endpoints.php | 673 ++ plugins/jetpack/languages/jetpack-af.mo | Bin 0 -> 11262 bytes plugins/jetpack/languages/jetpack-az.mo | Bin 0 -> 200045 bytes plugins/jetpack/languages/jetpack-bg_BG.mo | Bin 0 -> 21156 bytes plugins/jetpack/languages/jetpack-bs_BA.mo | Bin 0 -> 71909 bytes plugins/jetpack/languages/jetpack-ca.mo | Bin 0 -> 80071 bytes plugins/jetpack/languages/jetpack-ckb.mo | Bin 0 -> 91348 bytes plugins/jetpack/languages/jetpack-cs_CZ.mo | Bin 0 -> 46928 bytes plugins/jetpack/languages/jetpack-cy.mo | Bin 0 -> 20883 bytes plugins/jetpack/languages/jetpack-da_DK.mo | Bin 0 -> 57726 bytes plugins/jetpack/languages/jetpack-el.mo | Bin 0 -> 251264 bytes plugins/jetpack/languages/jetpack-es_CL.mo | Bin 0 -> 717 bytes plugins/jetpack/languages/jetpack-fa_IR.mo | Bin 0 -> 185029 bytes plugins/jetpack/languages/jetpack-gd.mo | Bin 0 -> 48759 bytes plugins/jetpack/languages/jetpack-gl_ES.mo | Bin 0 -> 39180 bytes plugins/jetpack/languages/jetpack-hr.mo | Bin 0 -> 38814 bytes plugins/jetpack/languages/jetpack-hu_HU.mo | Bin 0 -> 174752 bytes plugins/jetpack/languages/jetpack-is_IS.mo | Bin 0 -> 21640 bytes plugins/jetpack/languages/jetpack-ka_GE.mo | Bin 0 -> 1774 bytes plugins/jetpack/languages/jetpack-lt_LT.mo | Bin 0 -> 19361 bytes plugins/jetpack/languages/jetpack-lv.mo | Bin 0 -> 806 bytes plugins/jetpack/languages/jetpack-mk_MK.mo | Bin 0 -> 25205 bytes plugins/jetpack/languages/jetpack-ms_MY.mo | Bin 0 -> 24416 bytes plugins/jetpack/languages/jetpack-my_MM.mo | Bin 0 -> 18713 bytes plugins/jetpack/languages/jetpack-nb_NO.mo | Bin 0 -> 182475 bytes plugins/jetpack/languages/jetpack-nn_NO.mo | Bin 0 -> 25313 bytes plugins/jetpack/languages/jetpack-pl_PL.mo | Bin 0 -> 43924 bytes plugins/jetpack/languages/jetpack-pt_PT.mo | Bin 0 -> 87285 bytes plugins/jetpack/languages/jetpack-sa_IN.mo | Bin 0 -> 1075 bytes plugins/jetpack/languages/jetpack-si_LK.mo | Bin 0 -> 56106 bytes plugins/jetpack/languages/jetpack-sk_SK.mo | Bin 0 -> 18116 bytes plugins/jetpack/languages/jetpack-sl_SI.mo | Bin 0 -> 9766 bytes plugins/jetpack/languages/jetpack-sr_RS.mo | Bin 0 -> 54232 bytes plugins/jetpack/languages/jetpack-te.mo | Bin 0 -> 22370 bytes plugins/jetpack/languages/jetpack-th.mo | Bin 0 -> 29992 bytes plugins/jetpack/languages/jetpack-uk.mo | Bin 0 -> 56465 bytes plugins/jetpack/languages/jetpack-ur.mo | Bin 0 -> 4576 bytes plugins/jetpack/languages/jetpack-vi.mo | Bin 0 -> 22558 bytes plugins/jetpack/languages/readme.txt | 15 + plugins/jetpack/locales.php | 2112 +++++ .../jetpack/modules/after-the-deadline.php | 334 + .../after-the-deadline/atd-autoproofread.js | 93 + .../atd-nonvis-editor-plugin.js | 267 + .../modules/after-the-deadline/atd-rtl.css | 122 + .../after-the-deadline/atd-rtl.min.css | 1 + .../modules/after-the-deadline/atd.core.js | 640 ++ .../modules/after-the-deadline/atd.css | 122 + .../modules/after-the-deadline/atd.min.css | 1 + .../modules/after-the-deadline/button.gif | Bin 0 -> 515 bytes .../after-the-deadline/config-options.php | 128 + .../after-the-deadline/config-unignore.php | 148 + .../modules/after-the-deadline/jquery.atd.js | 436 + .../modules/after-the-deadline/proxy.php | 115 + .../after-the-deadline/rtl/atd-rtl.css | 124 + .../tinymce/atdbuttontr.gif | Bin 0 -> 123 bytes .../tinymce/css/content.css | 18 + .../tinymce/css/content.min.css | 1 + .../tinymce/editor_plugin.js | 479 ++ .../after-the-deadline/tinymce/plugin.js | 427 + plugins/jetpack/modules/carousel.php | 17 + .../modules/carousel/images/arrows-2x.png | Bin 0 -> 10063 bytes .../modules/carousel/images/arrows.png | Bin 0 -> 4529 bytes .../images/carousel-likereblog-2x.png | Bin 0 -> 1096 bytes .../carousel/images/carousel-likereblog.png | Bin 0 -> 547 bytes .../carousel/images/carousel-link-2x.png | Bin 0 -> 867 bytes .../modules/carousel/images/carousel-link.png | Bin 0 -> 431 bytes .../carousel/images/carousel-sprite-2x.png | Bin 0 -> 2076 bytes .../carousel/images/carousel-sprite.png | Bin 0 -> 1318 bytes .../carousel/jetpack-carousel-ie8fix.css | 13 + .../modules/carousel/jetpack-carousel.css | 1128 +++ .../modules/carousel/jetpack-carousel.js | 1517 ++++ .../modules/carousel/jetpack-carousel.php | 604 ++ .../carousel/rtl/jetpack-carousel-rtl.css | 1130 +++ plugins/jetpack/modules/comments.php | 50 + plugins/jetpack/modules/comments/admin.php | 208 + plugins/jetpack/modules/comments/base.php | 294 + plugins/jetpack/modules/comments/comments.php | 574 ++ plugins/jetpack/modules/contact-form.php | 16 + .../jetpack/modules/contact-form/admin.php | 893 +++ .../modules/contact-form/css/grunion.css | 14 + .../contact-form/css/menu-alter-rtl.css | 73 + .../contact-form/css/menu-alter-rtl.min.css | 1 + .../modules/contact-form/css/menu-alter.css | 73 + .../contact-form/css/menu-alter.min.css | 1 + .../contact-form/css/rtl/grunion-rtl.css | 16 + .../contact-form/css/rtl/menu-alter-rtl.css | 75 + .../contact-form/grunion-contact-form.php | 2470 ++++++ .../contact-form/grunion-form-view.php | 242 + .../contact-form/grunion-omnisearch.php | 83 + .../images/blank-screen-akismet.png | Bin 0 -> 2270 bytes .../images/blank-screen-button.png | Bin 0 -> 1823 bytes .../contact-form/images/grunion-form-2x.png | Bin 0 -> 153 bytes .../contact-form/images/grunion-form.png | Bin 0 -> 188 bytes .../contact-form/images/grunion-menu-2x.png | Bin 0 -> 546 bytes .../images/grunion-menu-big-2x.png | Bin 0 -> 340 bytes .../contact-form/images/grunion-menu-big.png | Bin 0 -> 352 bytes .../images/grunion-menu-hover-2x.png | Bin 0 -> 611 bytes .../images/grunion-menu-hover.png | Bin 0 -> 278 bytes .../contact-form/images/grunion-menu.png | Bin 0 -> 157 bytes .../images/grunion-remove-field-2x.png | Bin 0 -> 201 bytes .../images/grunion-remove-field-hover-2x.png | Bin 0 -> 207 bytes .../images/grunion-remove-field-hover.gif | Bin 0 -> 144 bytes .../images/grunion-remove-field.gif | Bin 0 -> 139 bytes .../images/grunion-remove-option-2x.png | Bin 0 -> 99 bytes .../images/grunion-remove-option-hover-2x.png | Bin 0 -> 94 bytes .../images/grunion-remove-option-hover.gif | Bin 0 -> 73 bytes .../images/grunion-remove-option.gif | Bin 0 -> 73 bytes .../modules/contact-form/js/grunion-admin.js | 29 + .../contact-form/js/grunion-frontend.js | 5 + .../modules/contact-form/js/grunion.js | 813 ++ .../jetpack/modules/custom-content-types.php | 52 + plugins/jetpack/modules/custom-css.php | 30 + .../custom-css/csstidy/class.csstidy.php | 1242 +++ .../csstidy/class.csstidy_ctype.php | 46 + .../csstidy/class.csstidy_optimise.php | 935 +++ .../csstidy/class.csstidy_print.php | 408 + .../custom-css/csstidy/cssparse-rtl.css | 118 + .../custom-css/csstidy/cssparse-rtl.min.css | 1 + .../modules/custom-css/csstidy/cssparse.css | 118 + .../custom-css/csstidy/cssparse.min.css | 1 + .../custom-css/csstidy/cssparsed-rtl.css | 29 + .../custom-css/csstidy/cssparsed-rtl.min.css | 1 + .../modules/custom-css/csstidy/cssparsed.css | 29 + .../custom-css/csstidy/cssparsed.min.css | 1 + .../custom-css/csstidy/data-wp.inc.php | 86 + .../modules/custom-css/csstidy/data.inc.php | 672 ++ .../modules/custom-css/csstidy/lang.inc.php | 308 + .../custom-css/csstidy/wordpress-standard.tpl | 10 + .../jetpack/modules/custom-css/custom-css.php | 1861 +++++ .../custom-css/custom-css/css/blank.css | 1 + .../custom-css/css/codemirror-rtl.css | 262 + .../custom-css/css/codemirror-rtl.min.css | 1 + .../custom-css/custom-css/css/codemirror.css | 262 + .../custom-css/css/codemirror.min.css | 1 + .../custom-css/custom-css/css/css-editor.css | 32 + .../custom-css/css/css-editor.min.css | 1 + .../custom-css/css/rtl/codemirror-rtl.css | 260 + .../custom-css/css/use-codemirror.css | 6 + .../custom-css/css/use-codemirror.min.css | 1 + .../custom-css/js/codemirror.min.js | 11 + .../custom-css/custom-css/js/css-editor.js | 84 + .../custom-css/js/use-codemirror.js | 47 + .../custom-css/custom-css/preprocessors.php | 57 + .../custom-css/preprocessors/lessc.inc.php | 3767 +++++++++ .../custom-css/preprocessors/scss.inc.php | 4383 ++++++++++ .../modules/custom-post-types/comics.php | 533 ++ .../custom-post-types/comics/admin.css | 7 + .../custom-post-types/comics/comics.css | 30 + .../custom-post-types/comics/comics.js | 121 + .../comics/rtl/comics-rtl.css | 32 + .../custom-post-types/css/edit-items.css | 24 + .../custom-post-types/css/many-items.css | 14 + .../custom-post-types/css/nova-font.css | 30 + .../modules/custom-post-types/css/nova.css | 110 + .../css/portfolio-shortcode.css | 131 + .../css/testimonial-shortcode.css | 102 + .../custom-post-types/js/many-items.js | 112 + .../custom-post-types/js/menu-checkboxes.js | 49 + .../custom-post-types/js/nova-drag-drop.js | 49 + .../modules/custom-post-types/nova.php | 1208 +++ .../modules/custom-post-types/portfolios.php | 785 ++ .../modules/custom-post-types/testimonial.php | 763 ++ plugins/jetpack/modules/debug.php | 6 + .../jetpack/modules/enhanced-distribution.php | 55 + plugins/jetpack/modules/gplus-authorship.php | 6 + .../jetpack/modules/gravatar-hovercards.php | 292 + plugins/jetpack/modules/holiday-snow.php | 134 + .../jetpack/modules/holiday-snow/snowstorm.js | 539 ++ plugins/jetpack/modules/infinite-scroll.php | 257 + .../modules/infinite-scroll/infinity.css | 164 + .../modules/infinite-scroll/infinity.js | 718 ++ .../modules/infinite-scroll/infinity.php | 1543 ++++ .../infinite-scroll/themes/twentyeleven.css | 45 + .../infinite-scroll/themes/twentyeleven.php | 48 + .../themes/twentyfifteen-rtl.css | 216 + .../infinite-scroll/themes/twentyfifteen.css | 216 + .../infinite-scroll/themes/twentyfifteen.php | 26 + .../infinite-scroll/themes/twentyfourteen.css | 111 + .../infinite-scroll/themes/twentyfourteen.php | 47 + .../themes/twentysixteen-rtl.css | 161 + .../infinite-scroll/themes/twentysixteen.css | 161 + .../infinite-scroll/themes/twentysixteen.php | 41 + .../infinite-scroll/themes/twentyten.css | 25 + .../infinite-scroll/themes/twentyten.php | 48 + .../infinite-scroll/themes/twentythirteen.css | 90 + .../infinite-scroll/themes/twentythirteen.php | 26 + .../infinite-scroll/themes/twentytwelve.css | 33 + .../infinite-scroll/themes/twentytwelve.php | 46 + plugins/jetpack/modules/json-api.php | 14 + plugins/jetpack/modules/latex.php | 121 + plugins/jetpack/modules/likes.php | 1298 +++ .../modules/likes/post-count-jetpack.js | 18 + plugins/jetpack/modules/likes/post-count.js | 62 + plugins/jetpack/modules/likes/queuehandler.js | 278 + plugins/jetpack/modules/likes/style.css | 193 + plugins/jetpack/modules/manage.php | 50 + .../jetpack/modules/manage/activate-admin.php | 95 + .../jetpack/modules/manage/confirm-admin.php | 107 + plugins/jetpack/modules/markdown.php | 26 + .../modules/markdown/easy-markdown.php | 755 ++ plugins/jetpack/modules/minileven.php | 134 + .../minileven/images/wp-app-devices.png | Bin 0 -> 1014 bytes .../jetpack/modules/minileven/minileven.php | 347 + .../theme/pub/minileven/comments.php | 52 + .../theme/pub/minileven/content-gallery.php | 83 + .../minileven/theme/pub/minileven/content.php | 63 + .../minileven/theme/pub/minileven/footer.php | 66 + .../theme/pub/minileven/functions.php | 263 + .../minileven/theme/pub/minileven/header.php | 70 + .../minileven/theme/pub/minileven/image.php | 108 + .../theme/pub/minileven/inc/custom-header.php | 107 + .../inc/fonts/genericons-regular-webfont.eot | Bin 0 -> 7475 bytes .../inc/fonts/genericons-regular-webfont.svg | 81 + .../inc/fonts/genericons-regular-webfont.ttf | Bin 0 -> 13516 bytes .../inc/fonts/genericons-regular-webfont.woff | Bin 0 -> 8676 bytes .../theme/pub/minileven/inc/template-tags.php | 96 + .../theme/pub/minileven/inc/tweaks.php | 103 + .../minileven/theme/pub/minileven/index.php | 75 + .../theme/pub/minileven/js/small-menu.js | 36 + .../minileven/theme/pub/minileven/page.php | 47 + .../minileven/theme/pub/minileven/rtl.css | 582 ++ .../theme/pub/minileven/screenshot.png | Bin 0 -> 58138 bytes .../theme/pub/minileven/searchform.php | 12 + .../minileven/theme/pub/minileven/sidebar.php | 12 + .../minileven/theme/pub/minileven/style.css | 1587 ++++ plugins/jetpack/modules/mobile-push.php | 6 + plugins/jetpack/modules/module-extras.php | 39 + plugins/jetpack/modules/module-headings.php | 308 + plugins/jetpack/modules/module-info.php | 958 +++ plugins/jetpack/modules/monitor.php | 176 + plugins/jetpack/modules/notes.php | 205 + plugins/jetpack/modules/omnisearch.php | 17 + .../omnisearch/omnisearch-comments.php | 48 + .../modules/omnisearch/omnisearch-core.php | 235 + .../omnisearch/omnisearch-jetpack-rtl.css | 10 + .../omnisearch/omnisearch-jetpack-rtl.min.css | 1 + .../modules/omnisearch/omnisearch-jetpack.css | 10 + .../omnisearch/omnisearch-jetpack.min.css | 1 + .../modules/omnisearch/omnisearch-media.php | 44 + .../modules/omnisearch/omnisearch-plugins.php | 61 + .../modules/omnisearch/omnisearch-posts.php | 137 + .../modules/omnisearch/omnisearch-rtl.css | 130 + .../modules/omnisearch/omnisearch-rtl.min.css | 1 + .../jetpack/modules/omnisearch/omnisearch.css | 130 + .../modules/omnisearch/omnisearch.min.css | 1 + .../omnisearch/rtl/omnisearch-jetpack-rtl.css | 11 + .../modules/omnisearch/rtl/omnisearch-rtl.css | 132 + plugins/jetpack/modules/photon.php | 22 + plugins/jetpack/modules/photon/photon.js | 55 + plugins/jetpack/modules/post-by-email.php | 211 + .../modules/post-by-email/post-by-email.css | 6 + .../modules/post-by-email/post-by-email.js | 128 + .../post-by-email/post-by-email.min.css | 1 + plugins/jetpack/modules/protect.php | 835 ++ plugins/jetpack/modules/protect/config-ui.php | 70 + .../jetpack/modules/protect/math-fallback.php | 127 + .../protect/protect-dashboard-widget-rtl.css | 117 + .../protect-dashboard-widget-rtl.min.css | 1 + .../protect/protect-dashboard-widget.css | 117 + .../protect/protect-dashboard-widget.min.css | 1 + .../modules/protect/shared-functions.php | 317 + .../modules/protect/transient-cleanup.php | 56 + plugins/jetpack/modules/publicize.php | 340 + .../modules/publicize/assets/connected.gif | Bin 0 -> 1681 bytes .../publicize/assets/facebook-logo.png | Bin 0 -> 18719 bytes .../publicize/assets/linkedin-logo.png | Bin 0 -> 6783 bytes .../modules/publicize/assets/path-logo.png | Bin 0 -> 4605 bytes .../publicize/assets/publicize-fb-2x.png | Bin 0 -> 2723 bytes .../publicize/assets/publicize-google-2x.png | Bin 0 -> 1960 bytes .../assets/publicize-linkedin-2x.png | Bin 0 -> 2281 bytes .../publicize/assets/publicize-path-2x.png | Bin 0 -> 4912 bytes .../publicize/assets/publicize-rtl.css | 199 + .../publicize/assets/publicize-rtl.min.css | 1 + .../publicize/assets/publicize-tumblr-2x.png | Bin 0 -> 2128 bytes .../publicize/assets/publicize-twitter-2x.png | Bin 0 -> 3372 bytes .../modules/publicize/assets/publicize.css | 199 + .../modules/publicize/assets/publicize.js | 184 + .../publicize/assets/publicize.min.css | 1 + .../publicize/assets/rtl/publicize-rtl.css | 201 + .../modules/publicize/assets/spinner.gif | Bin 0 -> 457 bytes .../modules/publicize/assets/tumblr-logo.png | Bin 0 -> 8902 bytes .../modules/publicize/assets/twitter-logo.png | Bin 0 -> 4524 bytes .../modules/publicize/enhanced-open-graph.php | 127 + .../modules/publicize/publicize-jetpack.php | 741 ++ .../jetpack/modules/publicize/publicize.php | 477 ++ plugins/jetpack/modules/publicize/ui.php | 764 ++ plugins/jetpack/modules/random-redirect.php | 6 + plugins/jetpack/modules/related-posts.php | 90 + .../related-posts/jetpack-related-posts.php | 1340 ++++ .../modules/related-posts/related-posts.css | 196 + .../modules/related-posts/related-posts.js | 202 + .../related-posts/rtl/related-posts-rtl.css | 190 + plugins/jetpack/modules/sharedaddy.php | 30 + .../modules/sharedaddy/admin-sharing-rtl.css | 400 + .../sharedaddy/admin-sharing-rtl.min.css | 1 + .../modules/sharedaddy/admin-sharing.css | 400 + .../modules/sharedaddy/admin-sharing.js | 440 + .../modules/sharedaddy/admin-sharing.min.css | 1 + .../images/after-the-deadline@2x.png | Bin 0 -> 1068 bytes .../modules/sharedaddy/images/comments@2x.png | Bin 0 -> 763 bytes .../sharedaddy/images/contact-form@2x.png | Bin 0 -> 539 bytes .../modules/sharedaddy/images/custom.png | Bin 0 -> 445 bytes .../modules/sharedaddy/images/custom@2x.png | Bin 0 -> 1147 bytes .../modules/sharedaddy/images/designfloat.png | Bin 0 -> 833 bytes .../modules/sharedaddy/images/digg.png | Bin 0 -> 530 bytes .../modules/sharedaddy/images/digg@2x.png | Bin 0 -> 872 bytes .../modules/sharedaddy/images/divider.png | Bin 0 -> 94 bytes .../modules/sharedaddy/images/divider@2x.png | Bin 0 -> 116 bytes .../modules/sharedaddy/images/draggy.png | Bin 0 -> 107 bytes .../modules/sharedaddy/images/draggy@2x.png | Bin 0 -> 109 bytes .../modules/sharedaddy/images/email.png | Bin 0 -> 209 bytes .../modules/sharedaddy/images/email@2x.png | Bin 0 -> 927 bytes .../modules/sharedaddy/images/ember.png | Bin 0 -> 533 bytes .../images/enhanced-distribution@2x.png | Bin 0 -> 757 bytes .../modules/sharedaddy/images/facebook.png | Bin 0 -> 568 bytes .../modules/sharedaddy/images/facebook@2x.png | Bin 0 -> 1036 bytes .../modules/sharedaddy/images/feed.png | Bin 0 -> 761 bytes .../modules/sharedaddy/images/googleplus1.png | Bin 0 -> 602 bytes .../sharedaddy/images/googleplus1@2x.png | Bin 0 -> 1134 bytes .../sharedaddy/images/icon-facebook-2x.png | Bin 0 -> 1027 bytes .../sharedaddy/images/icon-facebook.png | Bin 0 -> 581 bytes .../sharedaddy/images/icon-googleplus-2x.png | Bin 0 -> 1333 bytes .../sharedaddy/images/icon-googleplus.png | Bin 0 -> 722 bytes .../sharedaddy/images/icon-twitter-2x.png | Bin 0 -> 1414 bytes .../sharedaddy/images/icon-twitter.png | Bin 0 -> 523 bytes .../sharedaddy/images/icon-wordpress-2x.png | Bin 0 -> 592 bytes .../sharedaddy/images/icon-wordpress.png | Bin 0 -> 666 bytes .../modules/sharedaddy/images/kindle.png | Bin 0 -> 750 bytes .../modules/sharedaddy/images/kindle@2x.png | Bin 0 -> 1505 bytes .../sharedaddy/images/linkedin-horizontal.png | Bin 0 -> 2115 bytes .../images/linkedin-horizontal@2x.png | Bin 0 -> 2975 bytes .../sharedaddy/images/linkedin-nocount.png | Bin 0 -> 1564 bytes .../sharedaddy/images/linkedin-nocount@2x.png | Bin 0 -> 1736 bytes .../sharedaddy/images/linkedin-smart.png | Bin 0 -> 2115 bytes .../sharedaddy/images/linkedin-smart@2x.png | Bin 0 -> 2975 bytes .../sharedaddy/images/linkedin-vertical.png | Bin 0 -> 2274 bytes .../images/linkedin-vertical@2x.png | Bin 0 -> 2653 bytes .../modules/sharedaddy/images/linkedin.png | Bin 0 -> 360 bytes .../modules/sharedaddy/images/linkedin@2x.png | Bin 0 -> 944 bytes .../modules/sharedaddy/images/loading.gif | Bin 0 -> 2530 bytes .../modules/sharedaddy/images/more.png | Bin 0 -> 285 bytes .../modules/sharedaddy/images/more@2x.png | Bin 0 -> 798 bytes .../modules/sharedaddy/images/pinterest.png | Bin 0 -> 624 bytes .../sharedaddy/images/pinterest@2x.png | Bin 0 -> 1310 bytes .../modules/sharedaddy/images/pocket.png | Bin 0 -> 367 bytes .../modules/sharedaddy/images/pocket@2x.png | Bin 0 -> 504 bytes .../modules/sharedaddy/images/print.png | Bin 0 -> 209 bytes .../modules/sharedaddy/images/print@2x.png | Bin 0 -> 1052 bytes .../modules/sharedaddy/images/reddit.png | Bin 0 -> 881 bytes .../modules/sharedaddy/images/reddit@2x.png | Bin 0 -> 1500 bytes .../jetpack/modules/sharedaddy/images/rss.png | Bin 0 -> 870 bytes .../modules/sharedaddy/images/rss@2x.png | Bin 0 -> 1775 bytes .../modules/sharedaddy/images/share-bg.png | Bin 0 -> 82 bytes .../sharedaddy/images/sharing-hidden.png | Bin 0 -> 213 bytes .../sharedaddy/images/sharing-hidden@2x.png | Bin 0 -> 106 bytes .../modules/sharedaddy/images/smart-digg.png | Bin 0 -> 793 bytes .../sharedaddy/images/smart-digg@2x.png | Bin 0 -> 1147 bytes .../sharedaddy/images/smart-facebook.png | Bin 0 -> 1427 bytes .../sharedaddy/images/smart-facebook@2x.png | Bin 0 -> 830 bytes .../sharedaddy/images/smart-googleplus1.png | Bin 0 -> 2323 bytes .../images/smart-googleplus1@2x.png | Bin 0 -> 3398 bytes .../modules/sharedaddy/images/smart-like.png | Bin 0 -> 1620 bytes .../sharedaddy/images/smart-like@2x.png | Bin 0 -> 3800 bytes .../sharedaddy/images/smart-pinterest.png | Bin 0 -> 1235 bytes .../sharedaddy/images/smart-pinterest@2x.png | Bin 0 -> 2170 bytes .../sharedaddy/images/smart-pocket.png | Bin 0 -> 641 bytes .../sharedaddy/images/smart-pocket@2x.png | Bin 0 -> 1272 bytes .../sharedaddy/images/smart-reddit.png | Bin 0 -> 1572 bytes .../sharedaddy/images/smart-reddit@2x.png | Bin 0 -> 2601 bytes .../modules/sharedaddy/images/smart-skype.png | Bin 0 -> 2995 bytes .../sharedaddy/images/smart-skype@2x.png | Bin 0 -> 6782 bytes .../sharedaddy/images/smart-stumbleupon.png | Bin 0 -> 552 bytes .../images/smart-stumbleupon@2x.png | Bin 0 -> 2072 bytes .../sharedaddy/images/smart-tumblr.png | Bin 0 -> 1531 bytes .../sharedaddy/images/smart-tumblr@2x.png | Bin 0 -> 4179 bytes .../sharedaddy/images/smart-twitter.png | Bin 0 -> 1952 bytes .../sharedaddy/images/smart-twitter@2x.png | Bin 0 -> 1691 bytes .../modules/sharedaddy/images/tumblr.png | Bin 0 -> 742 bytes .../modules/sharedaddy/images/tumblr@2x.png | Bin 0 -> 926 bytes .../modules/sharedaddy/images/twitter.png | Bin 0 -> 523 bytes .../modules/sharedaddy/images/twitter@2x.png | Bin 0 -> 1302 bytes .../modules/sharedaddy/images/wordpress.png | Bin 0 -> 667 bytes .../sharedaddy/images/wordpress@2x.png | Bin 0 -> 1344 bytes .../jetpack/modules/sharedaddy/recaptcha.php | 179 + .../jetpack/modules/sharedaddy/sharedaddy.php | 260 + .../modules/sharedaddy/sharing-service.php | 794 ++ .../modules/sharedaddy/sharing-sources.php | 1687 ++++ .../jetpack/modules/sharedaddy/sharing.css | 682 ++ plugins/jetpack/modules/sharedaddy/sharing.js | 446 ++ .../jetpack/modules/sharedaddy/sharing.php | 496 ++ plugins/jetpack/modules/shortcodes.php | 159 + .../jetpack/modules/shortcodes/archives.php | 73 + plugins/jetpack/modules/shortcodes/audio.php | 435 + .../jetpack/modules/shortcodes/bandcamp.php | 189 + plugins/jetpack/modules/shortcodes/blip.php | 55 + .../jetpack/modules/shortcodes/cartodb.php | 18 + .../jetpack/modules/shortcodes/codepen.php | 10 + .../modules/shortcodes/css/recipes-print.css | 3 + .../modules/shortcodes/css/recipes.css | 33 + .../shortcodes/css/rtl/recipes-rtl.css | 35 + .../css/rtl/slideshow-shortcode-rtl.css | 159 + .../shortcodes/css/slideshow-shortcode.css | 157 + .../jetpack/modules/shortcodes/css/style.css | 188 + .../modules/shortcodes/dailymotion.php | 249 + .../jetpack/modules/shortcodes/diggthis.php | 11 + .../jetpack/modules/shortcodes/facebook.php | 63 + plugins/jetpack/modules/shortcodes/flickr.php | 199 + plugins/jetpack/modules/shortcodes/gist.php | 92 + .../jetpack/modules/shortcodes/googlemaps.php | 111 + .../jetpack/modules/shortcodes/googleplus.php | 42 + .../modules/shortcodes/googlevideo.php | 29 + plugins/jetpack/modules/shortcodes/houzz.php | 29 + .../modules/shortcodes/images/collapse.png | Bin 0 -> 2072 bytes .../modules/shortcodes/images/expand.png | Bin 0 -> 2039 bytes .../modules/shortcodes/images/slide-nav.png | Bin 0 -> 5704 bytes .../shortcodes/img/slideshow-controls-2x.png | Bin 0 -> 1944 bytes .../shortcodes/img/slideshow-controls.png | Bin 0 -> 1009 bytes .../shortcodes/img/slideshow-loader.gif | Bin 0 -> 13545 bytes .../jetpack/modules/shortcodes/instagram.php | 178 + .../modules/shortcodes/js/audio-shortcode.js | 159 + plugins/jetpack/modules/shortcodes/js/gist.js | 28 + .../modules/shortcodes/js/instagram.js | 19 + .../jetpack/modules/shortcodes/js/jmpress.js | 2721 +++++++ .../modules/shortcodes/js/jmpress.min.js | 13 + .../modules/shortcodes/js/jquery.cycle.js | 1551 ++++ plugins/jetpack/modules/shortcodes/js/main.js | 258 + .../shortcodes/js/recipes-printthis.js | 170 + .../jetpack/modules/shortcodes/js/recipes.js | 11 + .../shortcodes/js/slideshow-shortcode.js | 193 + plugins/jetpack/modules/shortcodes/medium.php | 67 + .../jetpack/modules/shortcodes/mixcloud.php | 52 + .../jetpack/modules/shortcodes/polldaddy.php | 578 ++ .../modules/shortcodes/presentations.php | 454 ++ plugins/jetpack/modules/shortcodes/recipe.php | 147 + plugins/jetpack/modules/shortcodes/scribd.php | 57 + .../jetpack/modules/shortcodes/slideshare.php | 115 + .../jetpack/modules/shortcodes/slideshow.php | 330 + .../jetpack/modules/shortcodes/soundcloud.php | 310 + plugins/jetpack/modules/shortcodes/ted.php | 78 + .../jetpack/modules/shortcodes/twitchtv.php | 79 + .../modules/shortcodes/twitter-timeline.php | 38 + .../jetpack/modules/shortcodes/videopress.php | 23 + plugins/jetpack/modules/shortcodes/vimeo.php | 302 + plugins/jetpack/modules/shortcodes/vine.php | 65 + plugins/jetpack/modules/shortcodes/wufoo.php | 82 + .../jetpack/modules/shortcodes/youtube.php | 389 + plugins/jetpack/modules/shortlinks.php | 90 + plugins/jetpack/modules/site-icon.php | 17 + plugins/jetpack/modules/site-icon/browser.png | Bin 0 -> 47596 bytes .../modules/site-icon/css/site-icon-admin.css | 57 + .../modules/site-icon/jetpack-site-icon.php | 829 ++ .../modules/site-icon/js/site-icon-admin.js | 0 .../modules/site-icon/js/site-icon-crop.js | 55 + .../modules/site-icon/site-icon-functions.php | 75 + .../modules/site-icon/upload-site-icon.php | 31 + plugins/jetpack/modules/sitemaps.php | 26 + .../jetpack/modules/sitemaps/sitemap-xsl.php | 144 + plugins/jetpack/modules/sitemaps/sitemaps.php | 761 ++ plugins/jetpack/modules/social-links.php | 6 + plugins/jetpack/modules/sso.php | 1097 +++ plugins/jetpack/modules/stats.php | 1350 ++++ plugins/jetpack/modules/subscriptions.php | 1052 +++ .../modules/subscriptions/subscriptions.css | 7 + plugins/jetpack/modules/theme-tools.php | 68 + .../theme-tools/compat/twentyfifteen-rtl.css | 736 ++ .../theme-tools/compat/twentyfifteen.css | 736 ++ .../theme-tools/compat/twentyfifteen.php | 28 + .../theme-tools/compat/twentyfourteen-rtl.css | 367 + .../theme-tools/compat/twentyfourteen.css | 367 + .../theme-tools/compat/twentyfourteen.php | 71 + .../theme-tools/compat/twentysixteen-rtl.css | 763 ++ .../theme-tools/compat/twentysixteen.css | 763 ++ .../theme-tools/compat/twentysixteen.php | 49 + .../modules/theme-tools/featured-content.php | 626 ++ .../modules/theme-tools/infinite-scroll.php | 48 + .../jetpack/modules/theme-tools/js/suggest.js | 10 + .../modules/theme-tools/random-redirect.php | 74 + .../modules/theme-tools/responsive-videos.php | 104 + .../responsive-videos/responsive-videos.css | 10 + .../responsive-videos/responsive-videos.js | 98 + .../responsive-videos.min.js | 1 + .../modules/theme-tools/site-breadcrumbs.php | 37 + .../jetpack/modules/theme-tools/site-logo.php | 46 + .../site-logo/css/site-logo-control-rtl.css | 12 + .../css/site-logo-control-rtl.min.css | 1 + .../site-logo/css/site-logo-control.css | 49 + .../site-logo/css/site-logo-control.min.css | 1 + .../site-logo/inc/class-site-logo-control.php | 108 + .../site-logo/inc/class-site-logo.php | 359 + .../theme-tools/site-logo/inc/compat.php | 44 + .../theme-tools/site-logo/inc/functions.php | 174 + .../site-logo/js/site-logo-control.js | 155 + .../site-logo/js/site-logo-control.min.js | 1 + .../site-logo/js/site-logo-header-text.js | 24 + .../site-logo/js/site-logo-header-text.min.js | 1 + .../theme-tools/site-logo/js/site-logo.js | 43 + .../theme-tools/site-logo/js/site-logo.min.js | 1 + .../modules/theme-tools/social-links.php | 235 + .../modules/theme-tools/social-menu.php | 67 + .../theme-tools/social-menu/social-menu.css | 180 + plugins/jetpack/modules/tiled-gallery.php | 30 + .../math/class-constrained-array-rounding.php | 75 + .../modules/tiled-gallery/tiled-gallery.php | 247 + .../tiled-gallery/rtl/tiled-gallery-rtl.css | 96 + .../templates/carousel-container.php | 19 + .../tiled-gallery/templates/circle-layout.php | 3 + .../partials/carousel-image-args.php | 24 + .../tiled-gallery/templates/partials/item.php | 60 + .../templates/rectangular-layout.php | 23 + .../tiled-gallery/templates/square-layout.php | 19 + .../tiled-gallery/tiled-gallery-circle.php | 8 + .../tiled-gallery/tiled-gallery-item.php | 84 + .../tiled-gallery/tiled-gallery-layout.php | 80 + .../tiled-gallery-rectangular.php | 221 + .../tiled-gallery/tiled-gallery-shape.php | 209 + .../tiled-gallery/tiled-gallery-square.php | 70 + .../tiled-gallery/tiled-gallery.css | 94 + .../tiled-gallery/tiled-gallery.js | 172 + plugins/jetpack/modules/tonesque.php | 6 + plugins/jetpack/modules/vaultpress.php | 32 + .../jetpack/modules/verification-tools.php | 28 + .../blog-verification-tools.php | 185 + plugins/jetpack/modules/videopress.php | 24 + .../videopress/class.videopress-player.php | 811 ++ .../videopress/class.videopress-video.php | 330 + .../modules/videopress/js/editor-view.js | 264 + .../modules/videopress/js/videopress-admin.js | 502 ++ .../jetpack/modules/videopress/shortcode.php | 255 + .../modules/videopress/utility-functions.php | 99 + .../videopress/videopress-admin-rtl.css | 97 + .../videopress/videopress-admin-rtl.min.css | 1 + .../modules/videopress/videopress-admin.css | 97 + .../videopress/videopress-admin.min.css | 1 + .../videopress/videopress-editor-style.css | 21 + .../jetpack/modules/videopress/videopress.php | 737 ++ plugins/jetpack/modules/widget-visibility.php | 14 + .../widget-visibility/widget-conditions.php | 698 ++ .../rtl/widget-conditions-rtl.css | 78 + .../widget-conditions-rtl.css | 76 + .../widget-conditions-rtl.min.css | 1 + .../widget-conditions/widget-conditions.css | 76 + .../widget-conditions/widget-conditions.js | 178 + .../widget-conditions.min.css | 1 + plugins/jetpack/modules/widgets.php | 67 + .../jetpack/modules/widgets/contact-info.php | 295 + .../widgets/contact-info/contact-info-map.css | 11 + .../widgets/contact-info/contact-info-map.js | 41 + .../modules/widgets/customizer-utils.js | 76 + .../modules/widgets/facebook-likebox.php | 304 + .../widgets/facebook-likebox/style.css | 3 + plugins/jetpack/modules/widgets/gallery.php | 433 + .../modules/widgets/gallery/css/admin-rtl.css | 11 + .../widgets/gallery/css/admin-rtl.min.css | 1 + .../modules/widgets/gallery/css/admin.css | 11 + .../modules/widgets/gallery/css/admin.min.css | 1 + .../widgets/gallery/css/rtl/admin-rtl.css | 13 + .../modules/widgets/gallery/js/admin.js | 225 + .../modules/widgets/gallery/js/gallery.js | 10 + .../widgets/gallery/templates/form.php | 89 + plugins/jetpack/modules/widgets/goodreads.php | 143 + .../widgets/goodreads/css/goodreads.css | 48 + .../goodreads/css/rtl/goodreads-rtl.css | 50 + .../modules/widgets/google-plus/js/admin.js | 22 + .../modules/widgets/googleplus-badge.php | 311 + .../modules/widgets/gravatar-profile.css | 46 + .../modules/widgets/gravatar-profile.php | 405 + .../jetpack/modules/widgets/image-widget.php | 245 + .../modules/widgets/image-widget/style.css | 13 + .../modules/widgets/rsslinks-widget.php | 222 + .../modules/widgets/social-media-icons.php | 253 + .../widgets/social-media-icons/style.css | 49 + plugins/jetpack/modules/widgets/top-posts.php | 585 ++ .../modules/widgets/top-posts/style.css | 114 + .../modules/widgets/twitter-timeline.php | 264 + .../modules/widgets/wordpress-post-widget.php | 1142 +++ .../widgets/wordpress-post-widget/style.css | 24 + plugins/jetpack/modules/wpcc.php | 6 + plugins/jetpack/modules/wpgroho.js | 38 + plugins/jetpack/readme.txt | 514 ++ plugins/jetpack/require-lib.php | 36 + .../sal/class.json-api-platform-jetpack.php | 12 + .../jetpack/sal/class.json-api-platform.php | 7 + .../jetpack/sal/class.json-api-site-base.php | 188 + .../sal/class.json-api-site-jetpack-base.php | 124 + .../sal/class.json-api-site-jetpack.php | 126 + .../scss/_utilities/_accessibility.scss | 30 + .../jetpack/scss/_utilities/_clearings.scss | 21 + plugins/jetpack/scss/_utilities/_grid.scss | 75 + plugins/jetpack/scss/_utilities/_ie.scss | 48 + .../jetpack/scss/_utilities/_normalize.scss | 322 + plugins/jetpack/scss/_utilities/_print.scss | 67 + .../scss/_utilities/mixins/_arrows.scss | 64 + .../scss/_utilities/mixins/_breakpoint.scss | 46 + .../scss/_utilities/mixins/_button.scss | 45 + .../_utilities/mixins/_custom-scrollbar.scss | 16 + .../_utilities/mixins/_full-width-bars.scss | 21 + .../mixins/_gradient--vertical.scss | 8 + .../mixins/_ie__gradient--vertical.scss | 7 + .../_utilities/mixins/_image-replacement.scss | 13 + .../scss/_utilities/mixins/_mixins.scss | 13 + .../_utilities/mixins/_retina-background.scss | 17 + .../scss/_utilities/mixins/_sections.scss | 25 + plugins/jetpack/scss/atoms/_animations.scss | 40 + plugins/jetpack/scss/atoms/_buttons.scss | 157 + plugins/jetpack/scss/atoms/_media.scss | 8 + .../jetpack/scss/atoms/colors/_colors.scss | 16 + .../scss/atoms/icons/_automatticons.scss | 32 + .../jetpack/scss/atoms/icons/_jetpack.scss | 23 + .../scss/atoms/typography/_functions.scss | 12 + .../scss/atoms/typography/_typography.scss | 112 + .../scss/atoms/typography/_variables.scss | 32 + plugins/jetpack/scss/dashboard-widget.scss | 5 + plugins/jetpack/scss/jetpack-admin-jitm.scss | 170 + plugins/jetpack/scss/jetpack-admin.scss | 17 + plugins/jetpack/scss/jetpack-banners.scss | 4 + plugins/jetpack/scss/jetpack-icons.scss | 27 + .../scss/molecules/_nav-horizontal.scss | 19 + plugins/jetpack/scss/organisms/_banners.scss | 350 + .../scss/pages/_connection-settings.scss | 160 + plugins/jetpack/scss/pages/_manage.scss | 40 + plugins/jetpack/scss/pages/_protect.scss | 261 + .../scss/templates/_connection-landing.scss | 881 ++ .../scss/templates/_dashboard-widget.scss | 99 + .../jetpack/scss/templates/_id-crisis.scss | 9 + plugins/jetpack/scss/templates/_main.scss | 1660 ++++ plugins/jetpack/scss/templates/_settings.scss | 417 + plugins/jetpack/uninstall.php | 26 + plugins/jetpack/views/admin/admin-page.php | 405 + .../views/admin/landing-page-templates.php | 98 + .../views/admin/module-modal-template.php | 30 + .../views/admin/must-connect-main-blog.php | 15 + .../jetpack/views/admin/my-jetpack-page.php | 180 + .../views/admin/network-activated-notice.php | 5 + .../views/admin/network-admin-alert.php | 9 + .../views/admin/network-admin-footer.php | 26 + .../views/admin/network-admin-header.php | 14 + .../jetpack/views/admin/network-settings.php | 87 + plugins/jetpack/wpml-config.xml | 10 + .../js/jquery-ui/css/flick/images/overlay.png | Bin 0 -> 182 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_0_eeeeee_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_55_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../ui-bg_highlight-soft_100_f6f6f6_1x100.png | Bin 0 -> 90 bytes .../ui-bg_highlight-soft_25_0073ea_1x100.png | Bin 0 -> 118 bytes .../ui-bg_highlight-soft_50_dddddd_1x100.png | Bin 0 -> 92 bytes .../flick/images/ui-icons_0073ea_256x240.png | Bin 0 -> 4369 bytes .../flick/images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../flick/images/ui-icons_666666_256x240.png | Bin 0 -> 4369 bytes .../flick/images/ui-icons_ff0084_256x240.png | Bin 0 -> 4369 bytes .../flick/images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../css/flick/jquery-ui-1.8.17.custom.css | 565 ++ .../js/jquery-ui/jquery.ui.accordion.min.js | 30 + .../js/jquery-ui/jquery.ui.widget.min.js | 15 + .../js/simplyexclude_admin_ajax.js | 74 + .../js/simplyexclude_admin_dialog.js | 24 + .../languages/simply-exclude-default.mo | Bin 0 -> 458 bytes .../languages/simply-exclude-default.po | 318 + .../languages/simply-exclude.pot | 308 + plugins/simply-exclude/readme.txt | 137 + plugins/simply-exclude/screenshot-1.png | Bin 0 -> 101249 bytes plugins/simply-exclude/screenshot-2.png | Bin 0 -> 49553 bytes plugins/simply-exclude/screenshot-3.png | Bin 0 -> 79916 bytes plugins/simply-exclude/simplyexclude.php | 3291 ++++++++ .../simplyexclude_style_admin.css | 84 + .../simplyexclude_style_admin_27.css | 29 + .../languages/wordpress-importer.pot | 231 + plugins/wordpress-importer/parsers.php | 664 ++ plugins/wordpress-importer/readme.txt | 107 + .../tmp-wordpress-importer-readme.pot | 174 + .../wordpress-importer/wordpress-importer.php | 1132 +++ .../wysiwyg-inline-code-command/devnotes.txt | 8 + .../wysiwyg-inline-code-command/readme.txt | 85 + .../wicc-button.png | Bin 0 -> 282 bytes .../wicc-mce-plugin.php | 52 + .../wysiwyg-inline-code-command.php | 53 + rtl.css | 754 ++ screenshot.png | Bin 0 -> 463555 bytes search.php | 53 + searchform.php | 17 + sidebar.php | 26 + single.php | 29 + style-old.css | 878 ++ style-temp.css | 702 ++ style.css | 988 +++ taxonomy-company.php | 216 + template-parts/.content-single.php.swp | Bin 0 -> 12286 bytes template-parts/content-none.php | 33 + template-parts/content-page.php | 30 + template-parts/content-search.php | 53 + template-parts/content-single.php | 73 + template-parts/content.php | 25 + zzpage-experience.php | 97 + 1085 files changed, 195258 insertions(+) create mode 100644 404.php create mode 100644 LICENSE create mode 100644 archive.php create mode 100644 centred-page.php create mode 100644 comments.php create mode 100644 css/editor-style.css create mode 100644 css/ie.css create mode 100644 css/ie7.css create mode 100644 css/ie8.css create mode 100644 css/reset.css create mode 100644 footer.php create mode 100644 functions.php create mode 100644 genericons/COPYING.txt create mode 100644 genericons/Genericons.eot create mode 100644 genericons/Genericons.svg create mode 100644 genericons/Genericons.ttf create mode 100644 genericons/Genericons.woff create mode 100644 genericons/LICENSE.txt create mode 100644 genericons/README.md create mode 100644 genericons/genericons.css create mode 100644 header.php create mode 100644 home.php create mode 100644 inc/back-compat.php create mode 100644 inc/customizer.php create mode 100644 inc/template-tags.php create mode 100644 index.php create mode 100644 js/color-scheme-control.js create mode 100644 js/customize-preview.js create mode 100644 js/functions.js create mode 100644 js/html5.js create mode 100644 js/keyboard-image-navigation.js create mode 100644 js/markerclusterer.js create mode 100644 js/skip-link-focus-fix.js create mode 100644 languages/twentysixteen.pot create mode 100644 page-experience-by-companies.php create mode 100644 page-experience-by-locations.php create mode 100644 page.php create mode 100644 plugins/akismet/.htaccess create mode 100644 plugins/akismet/LICENSE.txt create mode 100644 plugins/akismet/_inc/akismet.css create mode 100644 plugins/akismet/_inc/akismet.js create mode 100644 plugins/akismet/_inc/form.js create mode 100644 plugins/akismet/_inc/img/logo-full-2x.png create mode 100644 plugins/akismet/akismet.php create mode 100644 plugins/akismet/class.akismet-admin.php create mode 100644 plugins/akismet/class.akismet-widget.php create mode 100644 plugins/akismet/class.akismet.php create mode 100644 plugins/akismet/index.php create mode 100644 plugins/akismet/readme.txt create mode 100644 plugins/akismet/views/config.php create mode 100644 plugins/akismet/views/get.php create mode 100644 plugins/akismet/views/notice.php create mode 100644 plugins/akismet/views/start.php create mode 100644 plugins/akismet/views/stats.php create mode 100644 plugins/akismet/views/strict.php create mode 100644 plugins/akismet/wrapper.php create mode 100644 plugins/easy-footnotes/assets/banner-772x250.jpg create mode 100644 plugins/easy-footnotes/assets/easy-footnotes.css create mode 100644 plugins/easy-footnotes/assets/qtip/imagesloaded.pkg.min.js create mode 100644 plugins/easy-footnotes/assets/qtip/imagesloaded.pkgd.min.js create mode 100644 plugins/easy-footnotes/assets/qtip/jquery.qtip.css create mode 100644 plugins/easy-footnotes/assets/qtip/jquery.qtip.js create mode 100644 plugins/easy-footnotes/assets/qtip/jquery.qtip.min.css create mode 100644 plugins/easy-footnotes/assets/qtip/jquery.qtip.min.js create mode 100644 plugins/easy-footnotes/assets/qtip/jquery.qtip.min.map create mode 100644 plugins/easy-footnotes/assets/qtip/jquery.qtipcall.js create mode 100644 plugins/easy-footnotes/easy-footnotes-admin.php create mode 100644 plugins/easy-footnotes/easy-footnotes.php create mode 100644 plugins/easy-footnotes/readme.txt create mode 100644 plugins/easy-footnotes/screenshot-1.jpg create mode 100644 plugins/easy-footnotes/screenshot-2.jpg create mode 100644 plugins/index.php create mode 100644 plugins/infinite-scroll/behaviors/cufon.js create mode 100644 plugins/infinite-scroll/behaviors/local.js create mode 100644 plugins/infinite-scroll/behaviors/manual-trigger.js create mode 100644 plugins/infinite-scroll/behaviors/masonry-isotope.js create mode 100644 plugins/infinite-scroll/behaviors/sausage.js create mode 100644 plugins/infinite-scroll/img/ajax-loader.gif create mode 100644 plugins/infinite-scroll/includes/admin.php create mode 100644 plugins/infinite-scroll/includes/options.php create mode 100644 plugins/infinite-scroll/includes/presets.php create mode 100644 plugins/infinite-scroll/includes/submit.php create mode 100644 plugins/infinite-scroll/infinite-scroll.php create mode 100644 plugins/infinite-scroll/js/admin/infinite-scoll.js create mode 100644 plugins/infinite-scroll/js/admin/infinite-scroll.dev.js create mode 100644 plugins/infinite-scroll/js/front-end/jquery.infinitescroll.dev.js create mode 100644 plugins/infinite-scroll/js/front-end/jquery.infinitescroll.js create mode 100644 plugins/infinite-scroll/languages/infinite-scroll.pot create mode 100644 plugins/infinite-scroll/license.html create mode 100644 plugins/infinite-scroll/readme.md create mode 100644 plugins/infinite-scroll/readme.txt create mode 100644 plugins/infinite-scroll/screenshot-1.png create mode 100644 plugins/infinite-scroll/screenshot-2.png create mode 100644 plugins/infinite-scroll/screenshot-3.png create mode 100644 plugins/infinite-scroll/templates/footer.php create mode 100644 plugins/infinite-scroll/templates/manage-presets.php create mode 100644 plugins/infinite-scroll/templates/options.php create mode 100644 plugins/infinite-scroll/templates/preset-prompt.php create mode 100644 plugins/infinite-scroll/templates/submit-prompt.php create mode 100644 plugins/infinite-scroll/templates/submit.php create mode 100644 plugins/jetpack/.svnignore create mode 100644 plugins/jetpack/3rd-party/3rd-party.php create mode 100644 plugins/jetpack/3rd-party/bbpress.php create mode 100644 plugins/jetpack/3rd-party/bitly.php create mode 100644 plugins/jetpack/3rd-party/buddypress.php create mode 100644 plugins/jetpack/3rd-party/woocommerce.php create mode 100644 plugins/jetpack/3rd-party/wpml.php create mode 100644 plugins/jetpack/_inc/facebook-embed.js create mode 100644 plugins/jetpack/_inc/fonts/automatticons/automatticons.eot create mode 100644 plugins/jetpack/_inc/fonts/automatticons/automatticons.svg create mode 100644 plugins/jetpack/_inc/fonts/automatticons/automatticons.ttf create mode 100644 plugins/jetpack/_inc/fonts/automatticons/automatticons.woff create mode 100644 plugins/jetpack/_inc/fonts/jetpack/jetpack.eot create mode 100644 plugins/jetpack/_inc/fonts/jetpack/jetpack.svg create mode 100644 plugins/jetpack/_inc/fonts/jetpack/jetpack.ttf create mode 100644 plugins/jetpack/_inc/fonts/jetpack/jetpack.woff create mode 100644 plugins/jetpack/_inc/footer.php create mode 100644 plugins/jetpack/_inc/gallery-settings.js create mode 100644 plugins/jetpack/_inc/genericons.php create mode 100644 plugins/jetpack/_inc/genericons/COPYING.txt create mode 100644 plugins/jetpack/_inc/genericons/LICENSE.txt create mode 100644 plugins/jetpack/_inc/genericons/README.md create mode 100644 plugins/jetpack/_inc/genericons/genericons.css create mode 100644 plugins/jetpack/_inc/genericons/genericons/Genericons.eot create mode 100644 plugins/jetpack/_inc/genericons/genericons/Genericons.svg create mode 100644 plugins/jetpack/_inc/genericons/genericons/Genericons.ttf create mode 100644 plugins/jetpack/_inc/genericons/genericons/Genericons.woff create mode 100644 plugins/jetpack/_inc/genericons/genericons/genericons.css create mode 100644 plugins/jetpack/_inc/genericons/genericons/rtl/genericons-rtl.css create mode 100644 plugins/jetpack/_inc/header.php create mode 100644 plugins/jetpack/_inc/jetpack-admin.js create mode 100644 plugins/jetpack/_inc/jetpack-jitm.js create mode 100644 plugins/jetpack/_inc/jetpack-modules.js create mode 100644 plugins/jetpack/_inc/jetpack-modules.models.js create mode 100644 plugins/jetpack/_inc/jetpack-modules.views.js create mode 100644 plugins/jetpack/_inc/jetpack.js create mode 100644 plugins/jetpack/_inc/jp-my-jetpack.js create mode 100644 plugins/jetpack/_inc/jp.js create mode 100644 plugins/jetpack/_inc/jquery.inview.js create mode 100644 plugins/jetpack/_inc/jquery.jetpack-resize.js create mode 100644 plugins/jetpack/_inc/jquery.jetpack-sync.js create mode 100644 plugins/jetpack/_inc/jquery.spin.js create mode 100644 plugins/jetpack/_inc/lib/admin-pages/class.jetpack-admin-page.php create mode 100644 plugins/jetpack/_inc/lib/admin-pages/class.jetpack-landing-page.php create mode 100644 plugins/jetpack/_inc/lib/admin-pages/class.jetpack-my-jetpack-page.php create mode 100644 plugins/jetpack/_inc/lib/admin-pages/class.jetpack-settings-page.php create mode 100644 plugins/jetpack/_inc/lib/class.color.php create mode 100644 plugins/jetpack/_inc/lib/class.media-extractor.php create mode 100644 plugins/jetpack/_inc/lib/class.media-summary.php create mode 100644 plugins/jetpack/_inc/lib/markdown/0-load.php create mode 100644 plugins/jetpack/_inc/lib/markdown/README.md create mode 100644 plugins/jetpack/_inc/lib/markdown/extra.php create mode 100644 plugins/jetpack/_inc/lib/markdown/gfm.php create mode 100644 plugins/jetpack/_inc/lib/tonesque.php create mode 100644 plugins/jetpack/_inc/lib/tracks/class.tracks-client.php create mode 100644 plugins/jetpack/_inc/lib/tracks/class.tracks-event.php create mode 100644 plugins/jetpack/_inc/lib/tracks/client.php create mode 100644 plugins/jetpack/_inc/lib/tracks/tracks-ajax.js create mode 100644 plugins/jetpack/_inc/postmessage.js create mode 100644 plugins/jetpack/_inc/spin.js create mode 100644 plugins/jetpack/_inc/twitter-timeline.js create mode 100644 plugins/jetpack/changelog.txt create mode 100644 plugins/jetpack/class.jetpack-admin.php create mode 100644 plugins/jetpack/class.jetpack-autoupdate.php create mode 100644 plugins/jetpack/class.jetpack-bbpress-json-api-compat.php create mode 100644 plugins/jetpack/class.jetpack-cli.php create mode 100644 plugins/jetpack/class.jetpack-client-server.php create mode 100644 plugins/jetpack/class.jetpack-client.php create mode 100644 plugins/jetpack/class.jetpack-data.php create mode 100644 plugins/jetpack/class.jetpack-debugger.php create mode 100644 plugins/jetpack/class.jetpack-error.php create mode 100644 plugins/jetpack/class.jetpack-heartbeat.php create mode 100644 plugins/jetpack/class.jetpack-ixr-client.php create mode 100644 plugins/jetpack/class.jetpack-jitm.php create mode 100644 plugins/jetpack/class.jetpack-modules-list-table.php create mode 100644 plugins/jetpack/class.jetpack-network-sites-list-table.php create mode 100644 plugins/jetpack/class.jetpack-network.php create mode 100644 plugins/jetpack/class.jetpack-options.php create mode 100644 plugins/jetpack/class.jetpack-post-images.php create mode 100644 plugins/jetpack/class.jetpack-signature.php create mode 100644 plugins/jetpack/class.jetpack-sync.php create mode 100644 plugins/jetpack/class.jetpack-tracks.php create mode 100644 plugins/jetpack/class.jetpack-twitter-cards.php create mode 100644 plugins/jetpack/class.jetpack-user-agent.php create mode 100644 plugins/jetpack/class.jetpack-xmlrpc-server.php create mode 100644 plugins/jetpack/class.jetpack.php create mode 100644 plugins/jetpack/class.json-api-endpoints.php create mode 100644 plugins/jetpack/class.json-api.php create mode 100644 plugins/jetpack/class.photon.php create mode 100644 plugins/jetpack/composer.json create mode 100644 plugins/jetpack/css/dashboard-widget-rtl.css create mode 100644 plugins/jetpack/css/dashboard-widget-rtl.min.css create mode 100644 plugins/jetpack/css/dashboard-widget.css create mode 100644 plugins/jetpack/css/dashboard-widget.css.map create mode 100644 plugins/jetpack/css/dashboard-widget.min.css create mode 100644 plugins/jetpack/css/dashboard-widget.min.css.map create mode 100644 plugins/jetpack/css/jetpack-admin-jitm-rtl.css create mode 100644 plugins/jetpack/css/jetpack-admin-jitm-rtl.min.css create mode 100644 plugins/jetpack/css/jetpack-admin-jitm.css create mode 100644 plugins/jetpack/css/jetpack-admin-jitm.css.map create mode 100644 plugins/jetpack/css/jetpack-admin-jitm.min.css create mode 100644 plugins/jetpack/css/jetpack-admin-jitm.min.css.map create mode 100644 plugins/jetpack/css/jetpack-admin-rtl.css create mode 100644 plugins/jetpack/css/jetpack-admin-rtl.css.map create mode 100644 plugins/jetpack/css/jetpack-admin-rtl.min.css create mode 100644 plugins/jetpack/css/jetpack-admin-rtl.min.css.map create mode 100644 plugins/jetpack/css/jetpack-admin.css create mode 100644 plugins/jetpack/css/jetpack-admin.css.map create mode 100644 plugins/jetpack/css/jetpack-admin.min.css create mode 100644 plugins/jetpack/css/jetpack-admin.min.css.map create mode 100644 plugins/jetpack/css/jetpack-banners-rtl.css create mode 100644 plugins/jetpack/css/jetpack-banners-rtl.css.map create mode 100644 plugins/jetpack/css/jetpack-banners-rtl.min.css create mode 100644 plugins/jetpack/css/jetpack-banners-rtl.min.css.map create mode 100644 plugins/jetpack/css/jetpack-banners.css create mode 100644 plugins/jetpack/css/jetpack-banners.css.map create mode 100644 plugins/jetpack/css/jetpack-banners.min.css create mode 100644 plugins/jetpack/css/jetpack-banners.min.css.map create mode 100644 plugins/jetpack/css/jetpack-icons.css create mode 100644 plugins/jetpack/css/jetpack-icons.css.map create mode 100644 plugins/jetpack/css/jetpack-icons.min.css create mode 100644 plugins/jetpack/css/jetpack-icons.min.css.map create mode 100644 plugins/jetpack/css/jetpack-rtl.css create mode 100644 plugins/jetpack/css/jetpack.css create mode 100644 plugins/jetpack/css/jp-benefits.css create mode 100644 plugins/jetpack/css/jp-benefits.css.map create mode 100644 plugins/jetpack/functions.compat.php create mode 100644 plugins/jetpack/functions.gallery.php create mode 100644 plugins/jetpack/functions.opengraph.php create mode 100644 plugins/jetpack/functions.photon.php create mode 100644 plugins/jetpack/images/connect-plug.svg create mode 100644 plugins/jetpack/images/connection-landing/aurora-lrg.jpg create mode 100644 plugins/jetpack/images/connection-landing/aurora-med.jpg create mode 100644 plugins/jetpack/images/connection-landing/aurora-sm.jpg create mode 100644 plugins/jetpack/images/connection-landing/feature-photon-lrg.jpg create mode 100644 plugins/jetpack/images/connection-landing/feature-photon-med.jpg create mode 100644 plugins/jetpack/images/connection-landing/feature-photon-sm.jpg create mode 100644 plugins/jetpack/images/connection-landing/jp-shield.svg create mode 100644 plugins/jetpack/images/connection-landing/long-clouds.svg create mode 100644 plugins/jetpack/images/connection-landing/stars-left.svg create mode 100644 plugins/jetpack/images/connection-landing/stars-right.svg create mode 100644 plugins/jetpack/images/connection-landing/stat-bars.svg create mode 100644 plugins/jetpack/images/connection-landing/stats-example-lrg.png create mode 100644 plugins/jetpack/images/connection-landing/stats-example-med.png create mode 100644 plugins/jetpack/images/connection-landing/stats-example-sm.png create mode 100644 plugins/jetpack/images/custom-css.jpg create mode 100644 plugins/jetpack/images/custom-css@2x.jpg create mode 100644 plugins/jetpack/images/download-arrow.svg create mode 100644 plugins/jetpack/images/jetpack-icon.jpg create mode 100644 plugins/jetpack/images/jetpack-logo.png create mode 100644 plugins/jetpack/images/jetpack-logo.svg create mode 100644 plugins/jetpack/images/jetpack-protect-shield.svg create mode 100644 plugins/jetpack/images/new-badge.svg create mode 100644 plugins/jetpack/images/rocketeer.svg create mode 100644 plugins/jetpack/images/rss/blue-large.png create mode 100644 plugins/jetpack/images/rss/blue-medium.png create mode 100644 plugins/jetpack/images/rss/blue-small.png create mode 100644 plugins/jetpack/images/rss/green-large.png create mode 100644 plugins/jetpack/images/rss/green-medium.png create mode 100644 plugins/jetpack/images/rss/green-small.png create mode 100644 plugins/jetpack/images/rss/orange-large.png create mode 100644 plugins/jetpack/images/rss/orange-medium.png create mode 100644 plugins/jetpack/images/rss/orange-small.png create mode 100644 plugins/jetpack/images/rss/pink-large.png create mode 100644 plugins/jetpack/images/rss/pink-medium.png create mode 100644 plugins/jetpack/images/rss/pink-small.png create mode 100644 plugins/jetpack/images/rss/purple-large.png create mode 100644 plugins/jetpack/images/rss/purple-medium.png create mode 100644 plugins/jetpack/images/rss/purple-small.png create mode 100644 plugins/jetpack/images/rss/red-large.png create mode 100644 plugins/jetpack/images/rss/red-medium.png create mode 100644 plugins/jetpack/images/rss/red-small.png create mode 100644 plugins/jetpack/images/rss/silver-large.png create mode 100644 plugins/jetpack/images/rss/silver-medium.png create mode 100644 plugins/jetpack/images/rss/silver-small.png create mode 100644 plugins/jetpack/images/screenshots/beautifulmath.jpg create mode 100644 plugins/jetpack/images/screenshots/carousel.jpg create mode 100644 plugins/jetpack/images/screenshots/comments.jpg create mode 100644 plugins/jetpack/images/screenshots/contactform.jpg create mode 100644 plugins/jetpack/images/screenshots/custom-content-types.jpg create mode 100644 plugins/jetpack/images/screenshots/custom-css.jpg create mode 100644 plugins/jetpack/images/screenshots/google-plus.jpg create mode 100644 plugins/jetpack/images/screenshots/hovercards.jpg create mode 100644 plugins/jetpack/images/screenshots/likes.jpg create mode 100644 plugins/jetpack/images/screenshots/manage.jpg create mode 100644 plugins/jetpack/images/screenshots/mobile-push-notifications.jpg create mode 100644 plugins/jetpack/images/screenshots/mobile-theme.jpg create mode 100644 plugins/jetpack/images/screenshots/notes.jpg create mode 100644 plugins/jetpack/images/screenshots/post-by-email.jpg create mode 100644 plugins/jetpack/images/screenshots/publicize.jpg create mode 100644 plugins/jetpack/images/screenshots/related-posts.jpg create mode 100644 plugins/jetpack/images/screenshots/sharing.jpg create mode 100644 plugins/jetpack/images/screenshots/shortcodes.jpg create mode 100644 plugins/jetpack/images/screenshots/shortlinks.jpg create mode 100644 plugins/jetpack/images/screenshots/spelling.jpg create mode 100644 plugins/jetpack/images/screenshots/stats.jpg create mode 100644 plugins/jetpack/images/screenshots/subscriptions.jpg create mode 100644 plugins/jetpack/images/screenshots/tiled-gallery.jpg create mode 100644 plugins/jetpack/images/screenshots/vaultpress.jpg create mode 100644 plugins/jetpack/images/screenshots/widgets.jpg create mode 100644 plugins/jetpack/images/stats-smiley.gif create mode 100644 plugins/jetpack/images/the-cloud-sm.svg create mode 100644 plugins/jetpack/images/the-cloud.svg create mode 100644 plugins/jetpack/images/the-footcloud.svg create mode 100644 plugins/jetpack/images/the-undercloud.svg create mode 100644 plugins/jetpack/images/wordpress-connect.jpg create mode 100644 plugins/jetpack/images/wordpress-connect@2x.jpg create mode 100644 plugins/jetpack/images/wordpress-stats.jpg create mode 100644 plugins/jetpack/images/wordpress-stats@2x.jpg create mode 100644 plugins/jetpack/jetpack.php create mode 100644 plugins/jetpack/json-api-config.php create mode 100644 plugins/jetpack/json-endpoints.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-autosave-post-v1-1-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-comment-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-v1-1-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-get-autosave-v1-1-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comment-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-get-customcss.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-get-media-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-get-media-v1-1-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-counts-v1-1-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-v1-1-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-v1-2-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-get-taxonomies-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-get-taxonomy-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-list-comments-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-list-embeds-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-list-invites-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-v1-1-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-v1-1-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-list-roles-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-list-shortcodes-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-list-users-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-menus-v1-1-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-post-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-post-v1-1-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-publicize-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-render-embed-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-render-embed-reversal-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-render-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-render-shortcode-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-sharing-buttons-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-2-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-site-user-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-taxonomy-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-update-comment-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-update-customcss.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-update-invites-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-update-media-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-update-media-v1-1-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-update-taxonomy-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-update-user-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-upload-media-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/class.wpcom-json-api-upload-media-v1-1-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-check-capabilities-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-core-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-core-modify-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-log-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-maybe-auto-update-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-get-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-list-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-modify-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-delete-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-get-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-install-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-list-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-sync-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-active-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-delete-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-get-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-install-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-list-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-modify-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-updates-status-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-get-option-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-update-option-endpoint.php create mode 100644 plugins/jetpack/json-endpoints/jetpack/json-api-jetpack-endpoints.php create mode 100644 plugins/jetpack/languages/jetpack-af.mo create mode 100644 plugins/jetpack/languages/jetpack-az.mo create mode 100644 plugins/jetpack/languages/jetpack-bg_BG.mo create mode 100644 plugins/jetpack/languages/jetpack-bs_BA.mo create mode 100644 plugins/jetpack/languages/jetpack-ca.mo create mode 100644 plugins/jetpack/languages/jetpack-ckb.mo create mode 100644 plugins/jetpack/languages/jetpack-cs_CZ.mo create mode 100644 plugins/jetpack/languages/jetpack-cy.mo create mode 100644 plugins/jetpack/languages/jetpack-da_DK.mo create mode 100644 plugins/jetpack/languages/jetpack-el.mo create mode 100644 plugins/jetpack/languages/jetpack-es_CL.mo create mode 100644 plugins/jetpack/languages/jetpack-fa_IR.mo create mode 100644 plugins/jetpack/languages/jetpack-gd.mo create mode 100644 plugins/jetpack/languages/jetpack-gl_ES.mo create mode 100644 plugins/jetpack/languages/jetpack-hr.mo create mode 100644 plugins/jetpack/languages/jetpack-hu_HU.mo create mode 100644 plugins/jetpack/languages/jetpack-is_IS.mo create mode 100644 plugins/jetpack/languages/jetpack-ka_GE.mo create mode 100644 plugins/jetpack/languages/jetpack-lt_LT.mo create mode 100644 plugins/jetpack/languages/jetpack-lv.mo create mode 100644 plugins/jetpack/languages/jetpack-mk_MK.mo create mode 100644 plugins/jetpack/languages/jetpack-ms_MY.mo create mode 100644 plugins/jetpack/languages/jetpack-my_MM.mo create mode 100644 plugins/jetpack/languages/jetpack-nb_NO.mo create mode 100644 plugins/jetpack/languages/jetpack-nn_NO.mo create mode 100644 plugins/jetpack/languages/jetpack-pl_PL.mo create mode 100644 plugins/jetpack/languages/jetpack-pt_PT.mo create mode 100644 plugins/jetpack/languages/jetpack-sa_IN.mo create mode 100644 plugins/jetpack/languages/jetpack-si_LK.mo create mode 100644 plugins/jetpack/languages/jetpack-sk_SK.mo create mode 100644 plugins/jetpack/languages/jetpack-sl_SI.mo create mode 100644 plugins/jetpack/languages/jetpack-sr_RS.mo create mode 100644 plugins/jetpack/languages/jetpack-te.mo create mode 100644 plugins/jetpack/languages/jetpack-th.mo create mode 100644 plugins/jetpack/languages/jetpack-uk.mo create mode 100644 plugins/jetpack/languages/jetpack-ur.mo create mode 100644 plugins/jetpack/languages/jetpack-vi.mo create mode 100644 plugins/jetpack/languages/readme.txt create mode 100644 plugins/jetpack/locales.php create mode 100644 plugins/jetpack/modules/after-the-deadline.php create mode 100644 plugins/jetpack/modules/after-the-deadline/atd-autoproofread.js create mode 100644 plugins/jetpack/modules/after-the-deadline/atd-nonvis-editor-plugin.js create mode 100644 plugins/jetpack/modules/after-the-deadline/atd-rtl.css create mode 100644 plugins/jetpack/modules/after-the-deadline/atd-rtl.min.css create mode 100644 plugins/jetpack/modules/after-the-deadline/atd.core.js create mode 100644 plugins/jetpack/modules/after-the-deadline/atd.css create mode 100644 plugins/jetpack/modules/after-the-deadline/atd.min.css create mode 100644 plugins/jetpack/modules/after-the-deadline/button.gif create mode 100644 plugins/jetpack/modules/after-the-deadline/config-options.php create mode 100644 plugins/jetpack/modules/after-the-deadline/config-unignore.php create mode 100644 plugins/jetpack/modules/after-the-deadline/jquery.atd.js create mode 100644 plugins/jetpack/modules/after-the-deadline/proxy.php create mode 100644 plugins/jetpack/modules/after-the-deadline/rtl/atd-rtl.css create mode 100644 plugins/jetpack/modules/after-the-deadline/tinymce/atdbuttontr.gif create mode 100644 plugins/jetpack/modules/after-the-deadline/tinymce/css/content.css create mode 100644 plugins/jetpack/modules/after-the-deadline/tinymce/css/content.min.css create mode 100644 plugins/jetpack/modules/after-the-deadline/tinymce/editor_plugin.js create mode 100644 plugins/jetpack/modules/after-the-deadline/tinymce/plugin.js create mode 100644 plugins/jetpack/modules/carousel.php create mode 100644 plugins/jetpack/modules/carousel/images/arrows-2x.png create mode 100644 plugins/jetpack/modules/carousel/images/arrows.png create mode 100644 plugins/jetpack/modules/carousel/images/carousel-likereblog-2x.png create mode 100644 plugins/jetpack/modules/carousel/images/carousel-likereblog.png create mode 100644 plugins/jetpack/modules/carousel/images/carousel-link-2x.png create mode 100644 plugins/jetpack/modules/carousel/images/carousel-link.png create mode 100644 plugins/jetpack/modules/carousel/images/carousel-sprite-2x.png create mode 100644 plugins/jetpack/modules/carousel/images/carousel-sprite.png create mode 100644 plugins/jetpack/modules/carousel/jetpack-carousel-ie8fix.css create mode 100644 plugins/jetpack/modules/carousel/jetpack-carousel.css create mode 100644 plugins/jetpack/modules/carousel/jetpack-carousel.js create mode 100644 plugins/jetpack/modules/carousel/jetpack-carousel.php create mode 100644 plugins/jetpack/modules/carousel/rtl/jetpack-carousel-rtl.css create mode 100644 plugins/jetpack/modules/comments.php create mode 100644 plugins/jetpack/modules/comments/admin.php create mode 100644 plugins/jetpack/modules/comments/base.php create mode 100644 plugins/jetpack/modules/comments/comments.php create mode 100644 plugins/jetpack/modules/contact-form.php create mode 100644 plugins/jetpack/modules/contact-form/admin.php create mode 100644 plugins/jetpack/modules/contact-form/css/grunion.css create mode 100644 plugins/jetpack/modules/contact-form/css/menu-alter-rtl.css create mode 100644 plugins/jetpack/modules/contact-form/css/menu-alter-rtl.min.css create mode 100644 plugins/jetpack/modules/contact-form/css/menu-alter.css create mode 100644 plugins/jetpack/modules/contact-form/css/menu-alter.min.css create mode 100644 plugins/jetpack/modules/contact-form/css/rtl/grunion-rtl.css create mode 100644 plugins/jetpack/modules/contact-form/css/rtl/menu-alter-rtl.css create mode 100644 plugins/jetpack/modules/contact-form/grunion-contact-form.php create mode 100644 plugins/jetpack/modules/contact-form/grunion-form-view.php create mode 100644 plugins/jetpack/modules/contact-form/grunion-omnisearch.php create mode 100644 plugins/jetpack/modules/contact-form/images/blank-screen-akismet.png create mode 100644 plugins/jetpack/modules/contact-form/images/blank-screen-button.png create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-form-2x.png create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-form.png create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-menu-2x.png create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-menu-big-2x.png create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-menu-big.png create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-menu-hover-2x.png create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-menu-hover.png create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-menu.png create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-remove-field-2x.png create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-remove-field-hover-2x.png create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-remove-field-hover.gif create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-remove-field.gif create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-remove-option-2x.png create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-remove-option-hover-2x.png create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-remove-option-hover.gif create mode 100644 plugins/jetpack/modules/contact-form/images/grunion-remove-option.gif create mode 100644 plugins/jetpack/modules/contact-form/js/grunion-admin.js create mode 100644 plugins/jetpack/modules/contact-form/js/grunion-frontend.js create mode 100644 plugins/jetpack/modules/contact-form/js/grunion.js create mode 100644 plugins/jetpack/modules/custom-content-types.php create mode 100644 plugins/jetpack/modules/custom-css.php create mode 100644 plugins/jetpack/modules/custom-css/csstidy/class.csstidy.php create mode 100644 plugins/jetpack/modules/custom-css/csstidy/class.csstidy_ctype.php create mode 100644 plugins/jetpack/modules/custom-css/csstidy/class.csstidy_optimise.php create mode 100644 plugins/jetpack/modules/custom-css/csstidy/class.csstidy_print.php create mode 100644 plugins/jetpack/modules/custom-css/csstidy/cssparse-rtl.css create mode 100644 plugins/jetpack/modules/custom-css/csstidy/cssparse-rtl.min.css create mode 100644 plugins/jetpack/modules/custom-css/csstidy/cssparse.css create mode 100644 plugins/jetpack/modules/custom-css/csstidy/cssparse.min.css create mode 100644 plugins/jetpack/modules/custom-css/csstidy/cssparsed-rtl.css create mode 100644 plugins/jetpack/modules/custom-css/csstidy/cssparsed-rtl.min.css create mode 100644 plugins/jetpack/modules/custom-css/csstidy/cssparsed.css create mode 100644 plugins/jetpack/modules/custom-css/csstidy/cssparsed.min.css create mode 100644 plugins/jetpack/modules/custom-css/csstidy/data-wp.inc.php create mode 100644 plugins/jetpack/modules/custom-css/csstidy/data.inc.php create mode 100644 plugins/jetpack/modules/custom-css/csstidy/lang.inc.php create mode 100644 plugins/jetpack/modules/custom-css/csstidy/wordpress-standard.tpl create mode 100644 plugins/jetpack/modules/custom-css/custom-css.php create mode 100644 plugins/jetpack/modules/custom-css/custom-css/css/blank.css create mode 100644 plugins/jetpack/modules/custom-css/custom-css/css/codemirror-rtl.css create mode 100644 plugins/jetpack/modules/custom-css/custom-css/css/codemirror-rtl.min.css create mode 100644 plugins/jetpack/modules/custom-css/custom-css/css/codemirror.css create mode 100644 plugins/jetpack/modules/custom-css/custom-css/css/codemirror.min.css create mode 100644 plugins/jetpack/modules/custom-css/custom-css/css/css-editor.css create mode 100644 plugins/jetpack/modules/custom-css/custom-css/css/css-editor.min.css create mode 100644 plugins/jetpack/modules/custom-css/custom-css/css/rtl/codemirror-rtl.css create mode 100644 plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror.css create mode 100644 plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror.min.css create mode 100644 plugins/jetpack/modules/custom-css/custom-css/js/codemirror.min.js create mode 100644 plugins/jetpack/modules/custom-css/custom-css/js/css-editor.js create mode 100644 plugins/jetpack/modules/custom-css/custom-css/js/use-codemirror.js create mode 100644 plugins/jetpack/modules/custom-css/custom-css/preprocessors.php create mode 100644 plugins/jetpack/modules/custom-css/custom-css/preprocessors/lessc.inc.php create mode 100644 plugins/jetpack/modules/custom-css/custom-css/preprocessors/scss.inc.php create mode 100644 plugins/jetpack/modules/custom-post-types/comics.php create mode 100644 plugins/jetpack/modules/custom-post-types/comics/admin.css create mode 100644 plugins/jetpack/modules/custom-post-types/comics/comics.css create mode 100644 plugins/jetpack/modules/custom-post-types/comics/comics.js create mode 100644 plugins/jetpack/modules/custom-post-types/comics/rtl/comics-rtl.css create mode 100644 plugins/jetpack/modules/custom-post-types/css/edit-items.css create mode 100644 plugins/jetpack/modules/custom-post-types/css/many-items.css create mode 100644 plugins/jetpack/modules/custom-post-types/css/nova-font.css create mode 100644 plugins/jetpack/modules/custom-post-types/css/nova.css create mode 100644 plugins/jetpack/modules/custom-post-types/css/portfolio-shortcode.css create mode 100644 plugins/jetpack/modules/custom-post-types/css/testimonial-shortcode.css create mode 100644 plugins/jetpack/modules/custom-post-types/js/many-items.js create mode 100644 plugins/jetpack/modules/custom-post-types/js/menu-checkboxes.js create mode 100644 plugins/jetpack/modules/custom-post-types/js/nova-drag-drop.js create mode 100644 plugins/jetpack/modules/custom-post-types/nova.php create mode 100644 plugins/jetpack/modules/custom-post-types/portfolios.php create mode 100644 plugins/jetpack/modules/custom-post-types/testimonial.php create mode 100644 plugins/jetpack/modules/debug.php create mode 100644 plugins/jetpack/modules/enhanced-distribution.php create mode 100644 plugins/jetpack/modules/gplus-authorship.php create mode 100644 plugins/jetpack/modules/gravatar-hovercards.php create mode 100644 plugins/jetpack/modules/holiday-snow.php create mode 100644 plugins/jetpack/modules/holiday-snow/snowstorm.js create mode 100644 plugins/jetpack/modules/infinite-scroll.php create mode 100644 plugins/jetpack/modules/infinite-scroll/infinity.css create mode 100644 plugins/jetpack/modules/infinite-scroll/infinity.js create mode 100644 plugins/jetpack/modules/infinite-scroll/infinity.php create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentyeleven.css create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentyeleven.php create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentyfifteen-rtl.css create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentyfifteen.css create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentyfifteen.php create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentyfourteen.css create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentyfourteen.php create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentysixteen-rtl.css create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentysixteen.css create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentysixteen.php create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentyten.css create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentyten.php create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentythirteen.css create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentythirteen.php create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentytwelve.css create mode 100644 plugins/jetpack/modules/infinite-scroll/themes/twentytwelve.php create mode 100644 plugins/jetpack/modules/json-api.php create mode 100644 plugins/jetpack/modules/latex.php create mode 100644 plugins/jetpack/modules/likes.php create mode 100644 plugins/jetpack/modules/likes/post-count-jetpack.js create mode 100644 plugins/jetpack/modules/likes/post-count.js create mode 100644 plugins/jetpack/modules/likes/queuehandler.js create mode 100644 plugins/jetpack/modules/likes/style.css create mode 100644 plugins/jetpack/modules/manage.php create mode 100644 plugins/jetpack/modules/manage/activate-admin.php create mode 100644 plugins/jetpack/modules/manage/confirm-admin.php create mode 100644 plugins/jetpack/modules/markdown.php create mode 100644 plugins/jetpack/modules/markdown/easy-markdown.php create mode 100644 plugins/jetpack/modules/minileven.php create mode 100644 plugins/jetpack/modules/minileven/images/wp-app-devices.png create mode 100644 plugins/jetpack/modules/minileven/minileven.php create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/comments.php create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/content-gallery.php create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/content.php create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/footer.php create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/functions.php create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/header.php create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/image.php create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/inc/custom-header.php create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.eot create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.svg create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.ttf create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.woff create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/inc/template-tags.php create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/inc/tweaks.php create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/index.php create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/js/small-menu.js create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/page.php create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/rtl.css create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/screenshot.png create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/searchform.php create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/sidebar.php create mode 100644 plugins/jetpack/modules/minileven/theme/pub/minileven/style.css create mode 100644 plugins/jetpack/modules/mobile-push.php create mode 100644 plugins/jetpack/modules/module-extras.php create mode 100644 plugins/jetpack/modules/module-headings.php create mode 100644 plugins/jetpack/modules/module-info.php create mode 100644 plugins/jetpack/modules/monitor.php create mode 100644 plugins/jetpack/modules/notes.php create mode 100644 plugins/jetpack/modules/omnisearch.php create mode 100644 plugins/jetpack/modules/omnisearch/omnisearch-comments.php create mode 100644 plugins/jetpack/modules/omnisearch/omnisearch-core.php create mode 100644 plugins/jetpack/modules/omnisearch/omnisearch-jetpack-rtl.css create mode 100644 plugins/jetpack/modules/omnisearch/omnisearch-jetpack-rtl.min.css create mode 100644 plugins/jetpack/modules/omnisearch/omnisearch-jetpack.css create mode 100644 plugins/jetpack/modules/omnisearch/omnisearch-jetpack.min.css create mode 100644 plugins/jetpack/modules/omnisearch/omnisearch-media.php create mode 100644 plugins/jetpack/modules/omnisearch/omnisearch-plugins.php create mode 100644 plugins/jetpack/modules/omnisearch/omnisearch-posts.php create mode 100644 plugins/jetpack/modules/omnisearch/omnisearch-rtl.css create mode 100644 plugins/jetpack/modules/omnisearch/omnisearch-rtl.min.css create mode 100644 plugins/jetpack/modules/omnisearch/omnisearch.css create mode 100644 plugins/jetpack/modules/omnisearch/omnisearch.min.css create mode 100644 plugins/jetpack/modules/omnisearch/rtl/omnisearch-jetpack-rtl.css create mode 100644 plugins/jetpack/modules/omnisearch/rtl/omnisearch-rtl.css create mode 100644 plugins/jetpack/modules/photon.php create mode 100644 plugins/jetpack/modules/photon/photon.js create mode 100644 plugins/jetpack/modules/post-by-email.php create mode 100644 plugins/jetpack/modules/post-by-email/post-by-email.css create mode 100644 plugins/jetpack/modules/post-by-email/post-by-email.js create mode 100644 plugins/jetpack/modules/post-by-email/post-by-email.min.css create mode 100644 plugins/jetpack/modules/protect.php create mode 100644 plugins/jetpack/modules/protect/config-ui.php create mode 100644 plugins/jetpack/modules/protect/math-fallback.php create mode 100644 plugins/jetpack/modules/protect/protect-dashboard-widget-rtl.css create mode 100644 plugins/jetpack/modules/protect/protect-dashboard-widget-rtl.min.css create mode 100644 plugins/jetpack/modules/protect/protect-dashboard-widget.css create mode 100644 plugins/jetpack/modules/protect/protect-dashboard-widget.min.css create mode 100644 plugins/jetpack/modules/protect/shared-functions.php create mode 100644 plugins/jetpack/modules/protect/transient-cleanup.php create mode 100644 plugins/jetpack/modules/publicize.php create mode 100644 plugins/jetpack/modules/publicize/assets/connected.gif create mode 100644 plugins/jetpack/modules/publicize/assets/facebook-logo.png create mode 100644 plugins/jetpack/modules/publicize/assets/linkedin-logo.png create mode 100644 plugins/jetpack/modules/publicize/assets/path-logo.png create mode 100644 plugins/jetpack/modules/publicize/assets/publicize-fb-2x.png create mode 100644 plugins/jetpack/modules/publicize/assets/publicize-google-2x.png create mode 100644 plugins/jetpack/modules/publicize/assets/publicize-linkedin-2x.png create mode 100644 plugins/jetpack/modules/publicize/assets/publicize-path-2x.png create mode 100644 plugins/jetpack/modules/publicize/assets/publicize-rtl.css create mode 100644 plugins/jetpack/modules/publicize/assets/publicize-rtl.min.css create mode 100644 plugins/jetpack/modules/publicize/assets/publicize-tumblr-2x.png create mode 100644 plugins/jetpack/modules/publicize/assets/publicize-twitter-2x.png create mode 100644 plugins/jetpack/modules/publicize/assets/publicize.css create mode 100644 plugins/jetpack/modules/publicize/assets/publicize.js create mode 100644 plugins/jetpack/modules/publicize/assets/publicize.min.css create mode 100644 plugins/jetpack/modules/publicize/assets/rtl/publicize-rtl.css create mode 100644 plugins/jetpack/modules/publicize/assets/spinner.gif create mode 100644 plugins/jetpack/modules/publicize/assets/tumblr-logo.png create mode 100644 plugins/jetpack/modules/publicize/assets/twitter-logo.png create mode 100644 plugins/jetpack/modules/publicize/enhanced-open-graph.php create mode 100644 plugins/jetpack/modules/publicize/publicize-jetpack.php create mode 100644 plugins/jetpack/modules/publicize/publicize.php create mode 100644 plugins/jetpack/modules/publicize/ui.php create mode 100644 plugins/jetpack/modules/random-redirect.php create mode 100644 plugins/jetpack/modules/related-posts.php create mode 100644 plugins/jetpack/modules/related-posts/jetpack-related-posts.php create mode 100644 plugins/jetpack/modules/related-posts/related-posts.css create mode 100644 plugins/jetpack/modules/related-posts/related-posts.js create mode 100644 plugins/jetpack/modules/related-posts/rtl/related-posts-rtl.css create mode 100644 plugins/jetpack/modules/sharedaddy.php create mode 100644 plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.css create mode 100644 plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.min.css create mode 100644 plugins/jetpack/modules/sharedaddy/admin-sharing.css create mode 100644 plugins/jetpack/modules/sharedaddy/admin-sharing.js create mode 100644 plugins/jetpack/modules/sharedaddy/admin-sharing.min.css create mode 100644 plugins/jetpack/modules/sharedaddy/images/after-the-deadline@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/comments@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/contact-form@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/custom.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/custom@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/designfloat.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/digg.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/digg@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/divider.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/divider@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/draggy.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/draggy@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/email.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/email@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/ember.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/enhanced-distribution@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/facebook.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/facebook@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/feed.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/googleplus1.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/googleplus1@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/icon-facebook-2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/icon-facebook.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/icon-googleplus-2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/icon-googleplus.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/icon-twitter-2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/icon-twitter.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/icon-wordpress-2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/icon-wordpress.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/kindle.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/kindle@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/linkedin-horizontal.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/linkedin-horizontal@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/linkedin-nocount.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/linkedin-nocount@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/linkedin-smart.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/linkedin-smart@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/linkedin-vertical.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/linkedin-vertical@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/linkedin.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/linkedin@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/loading.gif create mode 100644 plugins/jetpack/modules/sharedaddy/images/more.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/more@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/pinterest.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/pinterest@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/pocket.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/pocket@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/print.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/print@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/reddit.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/reddit@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/rss.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/rss@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/share-bg.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/sharing-hidden.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/sharing-hidden@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-digg.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-digg@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-facebook.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-facebook@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-googleplus1.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-googleplus1@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-like.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-like@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-pinterest.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-pinterest@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-pocket.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-pocket@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-reddit.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-reddit@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-skype.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-skype@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-stumbleupon.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-stumbleupon@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-tumblr.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-tumblr@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-twitter.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/smart-twitter@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/tumblr.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/tumblr@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/twitter.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/twitter@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/wordpress.png create mode 100644 plugins/jetpack/modules/sharedaddy/images/wordpress@2x.png create mode 100644 plugins/jetpack/modules/sharedaddy/recaptcha.php create mode 100644 plugins/jetpack/modules/sharedaddy/sharedaddy.php create mode 100644 plugins/jetpack/modules/sharedaddy/sharing-service.php create mode 100644 plugins/jetpack/modules/sharedaddy/sharing-sources.php create mode 100644 plugins/jetpack/modules/sharedaddy/sharing.css create mode 100644 plugins/jetpack/modules/sharedaddy/sharing.js create mode 100644 plugins/jetpack/modules/sharedaddy/sharing.php create mode 100644 plugins/jetpack/modules/shortcodes.php create mode 100644 plugins/jetpack/modules/shortcodes/archives.php create mode 100644 plugins/jetpack/modules/shortcodes/audio.php create mode 100644 plugins/jetpack/modules/shortcodes/bandcamp.php create mode 100644 plugins/jetpack/modules/shortcodes/blip.php create mode 100644 plugins/jetpack/modules/shortcodes/cartodb.php create mode 100644 plugins/jetpack/modules/shortcodes/codepen.php create mode 100644 plugins/jetpack/modules/shortcodes/css/recipes-print.css create mode 100644 plugins/jetpack/modules/shortcodes/css/recipes.css create mode 100644 plugins/jetpack/modules/shortcodes/css/rtl/recipes-rtl.css create mode 100644 plugins/jetpack/modules/shortcodes/css/rtl/slideshow-shortcode-rtl.css create mode 100644 plugins/jetpack/modules/shortcodes/css/slideshow-shortcode.css create mode 100644 plugins/jetpack/modules/shortcodes/css/style.css create mode 100644 plugins/jetpack/modules/shortcodes/dailymotion.php create mode 100644 plugins/jetpack/modules/shortcodes/diggthis.php create mode 100644 plugins/jetpack/modules/shortcodes/facebook.php create mode 100644 plugins/jetpack/modules/shortcodes/flickr.php create mode 100644 plugins/jetpack/modules/shortcodes/gist.php create mode 100644 plugins/jetpack/modules/shortcodes/googlemaps.php create mode 100644 plugins/jetpack/modules/shortcodes/googleplus.php create mode 100644 plugins/jetpack/modules/shortcodes/googlevideo.php create mode 100644 plugins/jetpack/modules/shortcodes/houzz.php create mode 100644 plugins/jetpack/modules/shortcodes/images/collapse.png create mode 100644 plugins/jetpack/modules/shortcodes/images/expand.png create mode 100644 plugins/jetpack/modules/shortcodes/images/slide-nav.png create mode 100644 plugins/jetpack/modules/shortcodes/img/slideshow-controls-2x.png create mode 100644 plugins/jetpack/modules/shortcodes/img/slideshow-controls.png create mode 100644 plugins/jetpack/modules/shortcodes/img/slideshow-loader.gif create mode 100644 plugins/jetpack/modules/shortcodes/instagram.php create mode 100644 plugins/jetpack/modules/shortcodes/js/audio-shortcode.js create mode 100644 plugins/jetpack/modules/shortcodes/js/gist.js create mode 100644 plugins/jetpack/modules/shortcodes/js/instagram.js create mode 100644 plugins/jetpack/modules/shortcodes/js/jmpress.js create mode 100644 plugins/jetpack/modules/shortcodes/js/jmpress.min.js create mode 100644 plugins/jetpack/modules/shortcodes/js/jquery.cycle.js create mode 100644 plugins/jetpack/modules/shortcodes/js/main.js create mode 100644 plugins/jetpack/modules/shortcodes/js/recipes-printthis.js create mode 100644 plugins/jetpack/modules/shortcodes/js/recipes.js create mode 100644 plugins/jetpack/modules/shortcodes/js/slideshow-shortcode.js create mode 100644 plugins/jetpack/modules/shortcodes/medium.php create mode 100644 plugins/jetpack/modules/shortcodes/mixcloud.php create mode 100644 plugins/jetpack/modules/shortcodes/polldaddy.php create mode 100644 plugins/jetpack/modules/shortcodes/presentations.php create mode 100644 plugins/jetpack/modules/shortcodes/recipe.php create mode 100644 plugins/jetpack/modules/shortcodes/scribd.php create mode 100644 plugins/jetpack/modules/shortcodes/slideshare.php create mode 100644 plugins/jetpack/modules/shortcodes/slideshow.php create mode 100644 plugins/jetpack/modules/shortcodes/soundcloud.php create mode 100644 plugins/jetpack/modules/shortcodes/ted.php create mode 100644 plugins/jetpack/modules/shortcodes/twitchtv.php create mode 100644 plugins/jetpack/modules/shortcodes/twitter-timeline.php create mode 100644 plugins/jetpack/modules/shortcodes/videopress.php create mode 100644 plugins/jetpack/modules/shortcodes/vimeo.php create mode 100644 plugins/jetpack/modules/shortcodes/vine.php create mode 100644 plugins/jetpack/modules/shortcodes/wufoo.php create mode 100644 plugins/jetpack/modules/shortcodes/youtube.php create mode 100644 plugins/jetpack/modules/shortlinks.php create mode 100644 plugins/jetpack/modules/site-icon.php create mode 100644 plugins/jetpack/modules/site-icon/browser.png create mode 100644 plugins/jetpack/modules/site-icon/css/site-icon-admin.css create mode 100644 plugins/jetpack/modules/site-icon/jetpack-site-icon.php create mode 100644 plugins/jetpack/modules/site-icon/js/site-icon-admin.js create mode 100644 plugins/jetpack/modules/site-icon/js/site-icon-crop.js create mode 100644 plugins/jetpack/modules/site-icon/site-icon-functions.php create mode 100644 plugins/jetpack/modules/site-icon/upload-site-icon.php create mode 100644 plugins/jetpack/modules/sitemaps.php create mode 100644 plugins/jetpack/modules/sitemaps/sitemap-xsl.php create mode 100644 plugins/jetpack/modules/sitemaps/sitemaps.php create mode 100644 plugins/jetpack/modules/social-links.php create mode 100644 plugins/jetpack/modules/sso.php create mode 100644 plugins/jetpack/modules/stats.php create mode 100644 plugins/jetpack/modules/subscriptions.php create mode 100644 plugins/jetpack/modules/subscriptions/subscriptions.css create mode 100644 plugins/jetpack/modules/theme-tools.php create mode 100644 plugins/jetpack/modules/theme-tools/compat/twentyfifteen-rtl.css create mode 100644 plugins/jetpack/modules/theme-tools/compat/twentyfifteen.css create mode 100644 plugins/jetpack/modules/theme-tools/compat/twentyfifteen.php create mode 100644 plugins/jetpack/modules/theme-tools/compat/twentyfourteen-rtl.css create mode 100644 plugins/jetpack/modules/theme-tools/compat/twentyfourteen.css create mode 100644 plugins/jetpack/modules/theme-tools/compat/twentyfourteen.php create mode 100644 plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css create mode 100644 plugins/jetpack/modules/theme-tools/compat/twentysixteen.css create mode 100644 plugins/jetpack/modules/theme-tools/compat/twentysixteen.php create mode 100644 plugins/jetpack/modules/theme-tools/featured-content.php create mode 100644 plugins/jetpack/modules/theme-tools/infinite-scroll.php create mode 100644 plugins/jetpack/modules/theme-tools/js/suggest.js create mode 100644 plugins/jetpack/modules/theme-tools/random-redirect.php create mode 100644 plugins/jetpack/modules/theme-tools/responsive-videos.php create mode 100644 plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.css create mode 100644 plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.js create mode 100644 plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.min.js create mode 100644 plugins/jetpack/modules/theme-tools/site-breadcrumbs.php create mode 100644 plugins/jetpack/modules/theme-tools/site-logo.php create mode 100644 plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.css create mode 100644 plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.min.css create mode 100644 plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.css create mode 100644 plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.min.css create mode 100644 plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo-control.php create mode 100644 plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo.php create mode 100644 plugins/jetpack/modules/theme-tools/site-logo/inc/compat.php create mode 100644 plugins/jetpack/modules/theme-tools/site-logo/inc/functions.php create mode 100644 plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.js create mode 100644 plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.min.js create mode 100644 plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.js create mode 100644 plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.min.js create mode 100644 plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.js create mode 100644 plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.min.js create mode 100644 plugins/jetpack/modules/theme-tools/social-links.php create mode 100644 plugins/jetpack/modules/theme-tools/social-menu.php create mode 100644 plugins/jetpack/modules/theme-tools/social-menu/social-menu.css create mode 100644 plugins/jetpack/modules/tiled-gallery.php create mode 100644 plugins/jetpack/modules/tiled-gallery/math/class-constrained-array-rounding.php create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery.php create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery/rtl/tiled-gallery-rtl.css create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/carousel-container.php create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/circle-layout.php create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/carousel-image-args.php create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/item.php create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/rectangular-layout.php create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/square-layout.php create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-circle.php create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-item.php create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-layout.php create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-rectangular.php create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-shape.php create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-square.php create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.css create mode 100644 plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.js create mode 100644 plugins/jetpack/modules/tonesque.php create mode 100644 plugins/jetpack/modules/vaultpress.php create mode 100644 plugins/jetpack/modules/verification-tools.php create mode 100644 plugins/jetpack/modules/verification-tools/blog-verification-tools.php create mode 100644 plugins/jetpack/modules/videopress.php create mode 100644 plugins/jetpack/modules/videopress/class.videopress-player.php create mode 100644 plugins/jetpack/modules/videopress/class.videopress-video.php create mode 100644 plugins/jetpack/modules/videopress/js/editor-view.js create mode 100644 plugins/jetpack/modules/videopress/js/videopress-admin.js create mode 100644 plugins/jetpack/modules/videopress/shortcode.php create mode 100644 plugins/jetpack/modules/videopress/utility-functions.php create mode 100644 plugins/jetpack/modules/videopress/videopress-admin-rtl.css create mode 100644 plugins/jetpack/modules/videopress/videopress-admin-rtl.min.css create mode 100644 plugins/jetpack/modules/videopress/videopress-admin.css create mode 100644 plugins/jetpack/modules/videopress/videopress-admin.min.css create mode 100644 plugins/jetpack/modules/videopress/videopress-editor-style.css create mode 100644 plugins/jetpack/modules/videopress/videopress.php create mode 100644 plugins/jetpack/modules/widget-visibility.php create mode 100644 plugins/jetpack/modules/widget-visibility/widget-conditions.php create mode 100644 plugins/jetpack/modules/widget-visibility/widget-conditions/rtl/widget-conditions-rtl.css create mode 100644 plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions-rtl.css create mode 100644 plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions-rtl.min.css create mode 100644 plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.css create mode 100644 plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js create mode 100644 plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.min.css create mode 100644 plugins/jetpack/modules/widgets.php create mode 100644 plugins/jetpack/modules/widgets/contact-info.php create mode 100644 plugins/jetpack/modules/widgets/contact-info/contact-info-map.css create mode 100644 plugins/jetpack/modules/widgets/contact-info/contact-info-map.js create mode 100644 plugins/jetpack/modules/widgets/customizer-utils.js create mode 100644 plugins/jetpack/modules/widgets/facebook-likebox.php create mode 100644 plugins/jetpack/modules/widgets/facebook-likebox/style.css create mode 100644 plugins/jetpack/modules/widgets/gallery.php create mode 100644 plugins/jetpack/modules/widgets/gallery/css/admin-rtl.css create mode 100644 plugins/jetpack/modules/widgets/gallery/css/admin-rtl.min.css create mode 100644 plugins/jetpack/modules/widgets/gallery/css/admin.css create mode 100644 plugins/jetpack/modules/widgets/gallery/css/admin.min.css create mode 100644 plugins/jetpack/modules/widgets/gallery/css/rtl/admin-rtl.css create mode 100644 plugins/jetpack/modules/widgets/gallery/js/admin.js create mode 100644 plugins/jetpack/modules/widgets/gallery/js/gallery.js create mode 100644 plugins/jetpack/modules/widgets/gallery/templates/form.php create mode 100644 plugins/jetpack/modules/widgets/goodreads.php create mode 100644 plugins/jetpack/modules/widgets/goodreads/css/goodreads.css create mode 100644 plugins/jetpack/modules/widgets/goodreads/css/rtl/goodreads-rtl.css create mode 100644 plugins/jetpack/modules/widgets/google-plus/js/admin.js create mode 100644 plugins/jetpack/modules/widgets/googleplus-badge.php create mode 100644 plugins/jetpack/modules/widgets/gravatar-profile.css create mode 100644 plugins/jetpack/modules/widgets/gravatar-profile.php create mode 100644 plugins/jetpack/modules/widgets/image-widget.php create mode 100644 plugins/jetpack/modules/widgets/image-widget/style.css create mode 100644 plugins/jetpack/modules/widgets/rsslinks-widget.php create mode 100644 plugins/jetpack/modules/widgets/social-media-icons.php create mode 100644 plugins/jetpack/modules/widgets/social-media-icons/style.css create mode 100644 plugins/jetpack/modules/widgets/top-posts.php create mode 100644 plugins/jetpack/modules/widgets/top-posts/style.css create mode 100644 plugins/jetpack/modules/widgets/twitter-timeline.php create mode 100644 plugins/jetpack/modules/widgets/wordpress-post-widget.php create mode 100644 plugins/jetpack/modules/widgets/wordpress-post-widget/style.css create mode 100644 plugins/jetpack/modules/wpcc.php create mode 100644 plugins/jetpack/modules/wpgroho.js create mode 100644 plugins/jetpack/readme.txt create mode 100644 plugins/jetpack/require-lib.php create mode 100644 plugins/jetpack/sal/class.json-api-platform-jetpack.php create mode 100644 plugins/jetpack/sal/class.json-api-platform.php create mode 100644 plugins/jetpack/sal/class.json-api-site-base.php create mode 100644 plugins/jetpack/sal/class.json-api-site-jetpack-base.php create mode 100644 plugins/jetpack/sal/class.json-api-site-jetpack.php create mode 100644 plugins/jetpack/scss/_utilities/_accessibility.scss create mode 100644 plugins/jetpack/scss/_utilities/_clearings.scss create mode 100644 plugins/jetpack/scss/_utilities/_grid.scss create mode 100644 plugins/jetpack/scss/_utilities/_ie.scss create mode 100644 plugins/jetpack/scss/_utilities/_normalize.scss create mode 100644 plugins/jetpack/scss/_utilities/_print.scss create mode 100644 plugins/jetpack/scss/_utilities/mixins/_arrows.scss create mode 100644 plugins/jetpack/scss/_utilities/mixins/_breakpoint.scss create mode 100644 plugins/jetpack/scss/_utilities/mixins/_button.scss create mode 100644 plugins/jetpack/scss/_utilities/mixins/_custom-scrollbar.scss create mode 100644 plugins/jetpack/scss/_utilities/mixins/_full-width-bars.scss create mode 100644 plugins/jetpack/scss/_utilities/mixins/_gradient--vertical.scss create mode 100644 plugins/jetpack/scss/_utilities/mixins/_ie__gradient--vertical.scss create mode 100644 plugins/jetpack/scss/_utilities/mixins/_image-replacement.scss create mode 100644 plugins/jetpack/scss/_utilities/mixins/_mixins.scss create mode 100644 plugins/jetpack/scss/_utilities/mixins/_retina-background.scss create mode 100644 plugins/jetpack/scss/_utilities/mixins/_sections.scss create mode 100644 plugins/jetpack/scss/atoms/_animations.scss create mode 100644 plugins/jetpack/scss/atoms/_buttons.scss create mode 100644 plugins/jetpack/scss/atoms/_media.scss create mode 100644 plugins/jetpack/scss/atoms/colors/_colors.scss create mode 100644 plugins/jetpack/scss/atoms/icons/_automatticons.scss create mode 100644 plugins/jetpack/scss/atoms/icons/_jetpack.scss create mode 100644 plugins/jetpack/scss/atoms/typography/_functions.scss create mode 100644 plugins/jetpack/scss/atoms/typography/_typography.scss create mode 100644 plugins/jetpack/scss/atoms/typography/_variables.scss create mode 100644 plugins/jetpack/scss/dashboard-widget.scss create mode 100644 plugins/jetpack/scss/jetpack-admin-jitm.scss create mode 100644 plugins/jetpack/scss/jetpack-admin.scss create mode 100644 plugins/jetpack/scss/jetpack-banners.scss create mode 100644 plugins/jetpack/scss/jetpack-icons.scss create mode 100644 plugins/jetpack/scss/molecules/_nav-horizontal.scss create mode 100644 plugins/jetpack/scss/organisms/_banners.scss create mode 100644 plugins/jetpack/scss/pages/_connection-settings.scss create mode 100644 plugins/jetpack/scss/pages/_manage.scss create mode 100644 plugins/jetpack/scss/pages/_protect.scss create mode 100644 plugins/jetpack/scss/templates/_connection-landing.scss create mode 100644 plugins/jetpack/scss/templates/_dashboard-widget.scss create mode 100644 plugins/jetpack/scss/templates/_id-crisis.scss create mode 100644 plugins/jetpack/scss/templates/_main.scss create mode 100644 plugins/jetpack/scss/templates/_settings.scss create mode 100644 plugins/jetpack/uninstall.php create mode 100644 plugins/jetpack/views/admin/admin-page.php create mode 100644 plugins/jetpack/views/admin/landing-page-templates.php create mode 100644 plugins/jetpack/views/admin/module-modal-template.php create mode 100644 plugins/jetpack/views/admin/must-connect-main-blog.php create mode 100644 plugins/jetpack/views/admin/my-jetpack-page.php create mode 100644 plugins/jetpack/views/admin/network-activated-notice.php create mode 100644 plugins/jetpack/views/admin/network-admin-alert.php create mode 100644 plugins/jetpack/views/admin/network-admin-footer.php create mode 100644 plugins/jetpack/views/admin/network-admin-header.php create mode 100644 plugins/jetpack/views/admin/network-settings.php create mode 100644 plugins/jetpack/wpml-config.xml create mode 100644 plugins/simply-exclude/js/jquery-ui/css/flick/images/overlay.png create mode 100644 plugins/simply-exclude/js/jquery-ui/css/flick/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 plugins/simply-exclude/js/jquery-ui/css/flick/images/ui-bg_flat_0_eeeeee_40x100.png create mode 100644 plugins/simply-exclude/js/jquery-ui/css/flick/images/ui-bg_flat_55_ffffff_40x100.png create mode 100644 plugins/simply-exclude/js/jquery-ui/css/flick/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 plugins/simply-exclude/js/jquery-ui/css/flick/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 plugins/simply-exclude/js/jquery-ui/css/flick/images/ui-bg_highlight-soft_100_f6f6f6_1x100.png create mode 100644 plugins/simply-exclude/js/jquery-ui/css/flick/images/ui-bg_highlight-soft_25_0073ea_1x100.png create mode 100644 plugins/simply-exclude/js/jquery-ui/css/flick/images/ui-bg_highlight-soft_50_dddddd_1x100.png create mode 100644 plugins/simply-exclude/js/jquery-ui/css/flick/images/ui-icons_0073ea_256x240.png create mode 100644 plugins/simply-exclude/js/jquery-ui/css/flick/images/ui-icons_454545_256x240.png create mode 100644 plugins/simply-exclude/js/jquery-ui/css/flick/images/ui-icons_666666_256x240.png create mode 100644 plugins/simply-exclude/js/jquery-ui/css/flick/images/ui-icons_ff0084_256x240.png create mode 100644 plugins/simply-exclude/js/jquery-ui/css/flick/images/ui-icons_ffffff_256x240.png create mode 100644 plugins/simply-exclude/js/jquery-ui/css/flick/jquery-ui-1.8.17.custom.css create mode 100644 plugins/simply-exclude/js/jquery-ui/jquery.ui.accordion.min.js create mode 100644 plugins/simply-exclude/js/jquery-ui/jquery.ui.widget.min.js create mode 100644 plugins/simply-exclude/js/simplyexclude_admin_ajax.js create mode 100644 plugins/simply-exclude/js/simplyexclude_admin_dialog.js create mode 100644 plugins/simply-exclude/languages/simply-exclude-default.mo create mode 100644 plugins/simply-exclude/languages/simply-exclude-default.po create mode 100644 plugins/simply-exclude/languages/simply-exclude.pot create mode 100644 plugins/simply-exclude/readme.txt create mode 100644 plugins/simply-exclude/screenshot-1.png create mode 100644 plugins/simply-exclude/screenshot-2.png create mode 100644 plugins/simply-exclude/screenshot-3.png create mode 100644 plugins/simply-exclude/simplyexclude.php create mode 100644 plugins/simply-exclude/simplyexclude_style_admin.css create mode 100644 plugins/simply-exclude/simplyexclude_style_admin_27.css create mode 100644 plugins/wordpress-importer/languages/wordpress-importer.pot create mode 100644 plugins/wordpress-importer/parsers.php create mode 100644 plugins/wordpress-importer/readme.txt create mode 100644 plugins/wordpress-importer/tmp-wordpress-importer-readme.pot create mode 100644 plugins/wordpress-importer/wordpress-importer.php create mode 100644 plugins/wysiwyg-inline-code-command/devnotes.txt create mode 100644 plugins/wysiwyg-inline-code-command/readme.txt create mode 100644 plugins/wysiwyg-inline-code-command/wicc-button.png create mode 100644 plugins/wysiwyg-inline-code-command/wicc-mce-plugin.php create mode 100644 plugins/wysiwyg-inline-code-command/wysiwyg-inline-code-command.php create mode 100644 rtl.css create mode 100644 screenshot.png create mode 100644 search.php create mode 100644 searchform.php create mode 100644 sidebar.php create mode 100644 single.php create mode 100644 style-old.css create mode 100644 style-temp.css create mode 100644 style.css create mode 100644 taxonomy-company.php create mode 100644 template-parts/.content-single.php.swp create mode 100644 template-parts/content-none.php create mode 100644 template-parts/content-page.php create mode 100644 template-parts/content-search.php create mode 100644 template-parts/content-single.php create mode 100644 template-parts/content.php create mode 100644 zzpage-experience.php diff --git a/404.php b/404.php new file mode 100644 index 0000000..aa1fe9f --- /dev/null +++ b/404.php @@ -0,0 +1,18 @@ + + + + +
+

404.

+

That's ‘computer’ for Oops! Something went wrong!

+
+ + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9cecc1d --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + {project} Copyright (C) {year} {fullname} + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/archive.php b/archive.php new file mode 100644 index 0000000..f9833a9 --- /dev/null +++ b/archive.php @@ -0,0 +1,58 @@ + + + + +
+
+

.

+ ' ', + 'mid_size' => 20, + 'prev_text' => '', + 'next_text' => '', + )); + ?> +
+ +
+ +
+ +
+ ' ', + 'mid_size' => 20, + 'prev_text' => '', + 'next_text' => '', + )); + ?> +
+
+ + diff --git a/centred-page.php b/centred-page.php new file mode 100644 index 0000000..df30a56 --- /dev/null +++ b/centred-page.php @@ -0,0 +1,26 @@ + + + + +
+ +

+

+ +
+ + diff --git a/comments.php b/comments.php new file mode 100644 index 0000000..49a4127 --- /dev/null +++ b/comments.php @@ -0,0 +1,53 @@ + + +
+
+
+

Comments

+ + + +
    + 'ol', + 'short_ping' => true, + 'avatar_size' => 42, + )); + ?> +
+ + + +

No comments yet.

+ + +

+ +
+ +
+ '

', + 'title_reply_after' => '

', + )); + ?> +
+
+
diff --git a/css/editor-style.css b/css/editor-style.css new file mode 100644 index 0000000..7b99fa2 --- /dev/null +++ b/css/editor-style.css @@ -0,0 +1,546 @@ +/* +Theme Name: Twenty Sixteen +Description: Used to style the TinyMCE editor. +*/ + + +/** + * Table of Contents: + * + * 1.0 - Body + * 2.0 - Typography + * 3.0 - Elements + * 4.0 - Alignment + * 5.0 - Caption + * 6.0 - Galleries + * 7.0 - Audio / Video + * 8.0 - RTL + */ + + +/** + * 1.0 - Body + */ + +body { + color: #1a1a1a; + font-family: Merriweather, Georgia, serif; + font-size: 16px; + font-weight: 400; + line-height: 1.75; + margin: 20px 40px; + max-width: 600px; + vertical-align: baseline; +} + +body.post-type-page { + max-width: 840px; +} + + +/** + * 2.0 - Typography + */ + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + font-weight: 900; + margin: 56px 0 28px; +} + +h1 { + font-size: 33px; + line-height: 1.2727272727; +} + +h2 { + font-size: 28px; + line-height: 1.25; +} + +h3 { + font-size: 23px; + line-height: 1.2173913043; +} + +h4, +h5, +h6 { + font-size: 19px; + line-height: 1.1052631579; +} + +h4 { + letter-spacing: 0.13333em; + text-transform: uppercase; +} + +h6 { + font-style: italic; +} + +h1:first-child, +h2:first-child, +h3:first-child, +h4:first-child, +h5:first-child, +h6:first-child { + margin-top: 0; +} + +p { + margin: 0 0 28px; +} + +b, +strong { + font-weight: 700; +} + +dfn, +cite, +em, +i { + font-style: italic; +} + +blockquote { + border-left: 4px solid #1a1a1a; + color: #686868; + font-size: 19px; + font-style: italic; + line-height: 1.4736842105; + margin-bottom: 28px; + padding: 0 0 0 24px; +} + +blockquote:not(.alignleft):not(.alignright) { + margin-left: -28px; +} + +blockquote blockquote:not(.alignleft):not(.alignright) { + margin-left: 0; +} + +blockquote:before, +blockquote:after { + content: ""; + display: table; +} + +blockquote:after { + clear: both; +} + +blockquote > :last-child { + margin-bottom: 0; +} + +blockquote cite, +blockquote small { + color: #1a1a1a; + font-size: 16px; + line-height: 1.75; +} + +blockquote em, +blockquote i, +blockquote cite { + font-style: normal; +} + +blockquote strong, +blockquote b { + font-weight: 400; +} + +blockquote.alignleft, +blockquote.alignright { + border: 0 solid #1a1a1a; + border-top-width: 4px; + padding: 18px 0 0; + width: -webkit-calc(50% - 14px); + width: calc(50% - 14px); +} + +address { + font-style: italic; + margin: 0 0 28px; +} + +code, +kbd, +tt, +var, +samp, +pre { + font-family: Inconsolata, monospace; +} + +pre { + border: 1px solid #d1d1d1; + font-size: 16px; + line-height: 1.3125; + margin: 0 0 28px; + max-width: 100%; + overflow: auto; + padding: 14px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +code { + background-color: #d1d1d1; + padding: 2px 4px; +} + +abbr[title] { + border-bottom: 1px dotted #d1d1d1; + cursor: help; +} + +mark, +ins { + background: #007acc; + color: #fff; + padding: 2px 4px; + text-decoration: none; +} + +sup, +sub { + font-size: 75%; + height: 0; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + top: -6px; +} + +sup { + bottom: -3px; +} + +small { + font-size: 80%; +} + +big { + font-size: 125%; +} + + +/** + * 3.0 - Elements + */ + +hr { + background-color: #d1d1d1; + border: 0; + height: 1px; + margin-bottom: 28px; +} + +ul, +ol { + margin: 0 0 28px 0; + padding: 0; +} + +ul { + list-style: disc; +} + +ol { + list-style: decimal; +} + +li > ul, +li > ol { + margin-bottom: 0; +} + +li > ul, +blockquote > ul { + margin-left: 20px; +} + +li > ol, +blockquote > ol { + margin-left: 24px; +} + +dl { + margin: 0 0 28px; +} + +dt { + font-weight: bold; +} + +dd { + margin: 0 0 28px; +} + +table, +th, +td, +.mce-item-table, +.mce-item-table th, +.mce-item-table td { + border: 1px solid #d1d1d1; +} + +table a { + color: #007acc; +} + +table, +.mce-item-table { + border-collapse: separate; + border-spacing: 0; + border-width: 1px 0 0 1px; + margin: 0 0 28px; + width: 100%; +} + +table th, +.mce-item-table th, +table caption { + border-width: 0 1px 1px 0; + font-size: 16px; + font-weight: 700; + padding: 7px; + text-align: left; + vertical-align: baseline; +} + +table td, +.mce-item-table td { + border-width: 0 1px 1px 0; + font-size: 16px; + padding: 7px; + vertical-align: baseline; +} + +img { + border: 0; + height: auto; + max-width: 100%; + vertical-align: middle; +} + +a img { + display: block; +} + +figure { + margin: 0; +} + +del { + opacity: 0.8; +} + +a { + box-shadow: 0 1px 0 0 currentColor; + color: #007acc; + text-decoration: none; +} + +fieldset { + border: 1px solid #d1d1d1; + margin: 0 0 28px; + padding: 14px; +} + + +/** + * 4.0 - Alignment + */ + +.alignleft { + float: left; + margin: 6px 28px 28px 0; +} + +.alignright { + float: right; + margin: 6px 0 28px 28px; +} + +.aligncenter { + clear: both; + display: block; + margin: 0 auto 28px; +} + + +/** + * 5.0 - Caption + */ + +.wp-caption { + background: transparent; + border: none; + margin-bottom: 28px; + max-width: 100%; + padding: 0; + text-align: inherit; +} + +.wp-caption-text, +.wp-caption-dd { + color: #686868; + font-size: 13px; + font-style: italic; + line-height: 1.6153846154; + padding-top: 7px; +} + + +/** + * 6.0 - Galleries + */ + +.mce-content-body .wpview-wrap { + margin-bottom: 28px; +} + +.gallery { + margin: 0 -1.1666667%; + padding: 0; +} + +.gallery .gallery-item { + display: inline-block; + max-width: 33.33%; + padding: 0 1.1400652% 2.2801304%; + text-align: center; + vertical-align: top; + width: 100%; +} + +.gallery-columns-1 .gallery-item { + max-width: 100%; +} + +.gallery-columns-2 .gallery-item { + max-width: 50%; +} + +.gallery-columns-4 .gallery-item { + max-width: 25%; +} + +.gallery-columns-5 .gallery-item { + max-width: 20%; +} + +.gallery-columns-6 .gallery-item { + max-width: 16.66%; +} + +.gallery-columns-7 .gallery-item { + max-width: 14.28%; +} + +.gallery-columns-8 .gallery-item { + max-width: 12.5%; +} + +.gallery-columns-9 .gallery-item { + max-width: 11.11%; +} + +.gallery .gallery-caption { + font-size: 13px; + margin: 0; +} + +.gallery-columns-6 .gallery-caption, +.gallery-columns-7 .gallery-caption, +.gallery-columns-8 .gallery-caption, +.gallery-columns-9 .gallery-caption { + display: none; +} + + +/** + * 7.0 - Audio / Video + */ + +.wp-audio-shortcode a, +.wp-playlist a { + box-shadow: none; +} + +.mce-content-body .wp-audio-playlist { + margin: 0; + padding-bottom: 0; +} + +.mce-content-body .wp-playlist-tracks { + margin-top: 0; +} + +.mce-content-body .wp-playlist-item { + padding: 10px 0; +} + +.mce-content-body .wp-playlist-item-length { + top: 10px; +} + + +/** + * 8.0 - RTL + */ + +.rtl blockquote { + border: 0 solid #1a1a1a; + border-right-width: 4px; +} + +.rtl blockquote.alignleft, +.rtl blockquote.alignright { + border: 0 solid #1a1a1a; + border-top-width: 4px; +} + +.rtl blockquote:not(.alignleft):not(.alignright) { + margin-right: -28px; + padding: 0 24px 0 0; +} + +.rtl blockquote blockquote:not(.alignleft):not(.alignright) { + margin-right: 0; + margin-left: auto; +} + +.rtl li > ul, +.rtl blockquote > ul { + margin-right: 20px; + margin-left: auto; +} + +.rtl li > ol, +.rtl blockquote > ol { + margin-right: 24px; + margin-left: auto; +} + +.rtl table th, +.rtl .mce-item-table th, +.rtl table caption { + text-align: right; +} diff --git a/css/ie.css b/css/ie.css new file mode 100644 index 0000000..6aa093a --- /dev/null +++ b/css/ie.css @@ -0,0 +1,48 @@ +/* +Theme Name: Twenty Sixteen +Description: Global Styles for older IE versions (previous to IE10). +*/ + +.site-header-main:before, +.site-header-main:after, +.site-footer:before, +.site-footer:after { + content: ""; + display: table; +} + +.site-header-main:after, +.site-footer:after { + clear: both; +} + +@media screen and (min-width: 56.875em) { + .site-branding, + .site-info { + float: left; + } + + .site-header-menu, + .site-footer .social-navigation { + float: right; + } + + .site-footer .social-navigation { + margin-left: 7px; + } + + .rtl .site-branding, + .rtl .site-info { + float: right; + } + + .rtl .site-header-menu, + .rtl .site-footer .social-navigation { + float: left; + } + + .rtl .site-footer .social-navigation { + margin-right: 7px; + margin-left: 0; + } +} diff --git a/css/ie7.css b/css/ie7.css new file mode 100644 index 0000000..6f9ec28 --- /dev/null +++ b/css/ie7.css @@ -0,0 +1,176 @@ +/* +Theme Name: Twenty Sixteen +Description: IE7 specific style. +*/ + +.site-inner { + max-width: 656px; +} + +.post-navigation, +.pagination, +.image-navigation, +.entry-header, +.entry-summary, +.entry-content, +.entry-footer, +.page-header, +.page-content, +.post-thumbnail, +.content-bottom-widgets, +.comments-area { + margin-right: 28px; + margin-left: 28px; + max-width: 100%; +} + +.site-header, +.sidebar, +.site-footer, +.widecolumn { + padding-right: 28px; + padding-left: 28px; +} + +.search-submit { + height: auto; + margin-top: 28px; + padding: 15px 0 8px; + position: relative; + width: auto; +} + +.search-submit .screen-reader-text { + height: auto; + position: relative !important; + width: auto; +} + +.image-navigation .nav-previous, +.image-navigation .nav-next, +.comment-navigation .nav-previous, +.comment-navigation .nav-next { + *display: inline; + zoom: 1; +} + +.image-navigation .nav-previous + .nav-next, +.comment-navigation .nav-previous + .nav-next { + margin-left: 14px; +} + +.pagination .nav-links { + padding: 0; +} + +.pagination .page-numbers { + line-height: 1; + margin: -4px 14px 0; + padding: 18px 0; +} + +.pagination .prev, +.pagination .next { + display: inline-block; + font-size: 16px; + font-weight: 700; + height: auto; + left: 0; + line-height: 1; + margin: 0; + padding: 18px 14px; + position: relative; + right: 0; + text-transform: none; + width: auto; +} + +.dropdown-toggle { + display: none; +} + +.main-navigation ul ul { + display: block; +} + +.social-navigation { + margin-top: 1.75em; +} + +.social-navigation a { + height: auto; + padding: 3px 7px; + width: auto; +} + +.social-navigation .screen-reader-text { + height: auto; + position: relative !important; + width: auto; +} + +.site-header-main { + overflow : hidden; + zoom : 1; +} + +.entry-footer > span { + margin-right: 14px; +} + +.site-info .site-title { + font-size: 13px; + margin-right: 14px; +} + +.gallery-item { + max-width: 30%; +} + +.gallery-columns-1 .gallery-item { + max-width: 100%; +} + +.gallery-columns-2 .gallery-item { + max-width: 46%; +} + +.gallery-columns-4 .gallery-item { + max-width: 22%; +} + +.gallery-columns-5 .gallery-item { + max-width: 17%; +} + +.gallery-columns-6 .gallery-item { + max-width: 13.5%; +} + +.gallery-columns-7 .gallery-item { + max-width: 11%; +} + +.gallery-columns-8 .gallery-item { + max-width: 9.5%; +} + +.gallery-columns-9 .gallery-item { + max-width: 8%; +} + +.rtl .image-navigation .nav-previous + .nav-next, +.rtl .comment-navigation .nav-previous + .nav-next { + margin-right: 14px; + margin-left: 0; +} + +.rtl .entry-footer > span { + margin-right: 14px; + margin-left: 0; +} + +.rtl .site-info .site-title { + margin-right: 0; + margin-left: 14px; +} diff --git a/css/ie8.css b/css/ie8.css new file mode 100644 index 0000000..1b07fe8 --- /dev/null +++ b/css/ie8.css @@ -0,0 +1,222 @@ +/* +Theme Name: Twenty Sixteen +Description: IE8 specific style. +*/ + +code { + background-color: transparent; + padding: 0; +} + +.entry-content a, +.entry-summary a, +.taxonomy-description a, +.logged-in-as a, +.comment-content a, +.pingback .comment-body > a, +.textwidget a, +.entry-footer a:hover, +.site-info a:hover { + text-decoration: underline; +} + +.entry-content a:hover, +.entry-content a:focus, +.entry-summary a:hover, +.entry-summary a:focus, +.taxonomy-description a:hover, +.taxonomy-description a:focus, +.logged-in-as a:hover, +.logged-in-as a:focus, +.comment-content a:hover, +.comment-content a:focus, +.pingback .comment-body > a:hover, +.pingback .comment-body > a:focus, +.textwidget a:hover, +.textwidget a:focus, +.entry-content .wp-audio-shortcode a, +.entry-content .wp-playlist a, +.page-links a { + text-decoration: none; +} + +.site { + margin: 21px; +} + +.site-inner { + max-width: 710px; +} + +.site-header { + padding-top: 3.9375em; + padding-bottom: 3.9375em; +} + +.site-branding { + float: left; + margin-top: 1.3125em; + margin-bottom: 1.3125em; +} + +.site-title { + font-size: 28px; + line-height: 1.25; +} + +.site-description { + display: block; +} + +.menu-toggle { + float: right; + font-size: 16px; + margin: 1.3125em 0; + padding: 0.8125em 0.875em 0.6875em; +} + +.site-header-menu { + clear: both; + margin: 0; + padding: 1.3125em 0; +} + +.site-header .main-navigation + .social-navigation { + margin-top: 2.625em; +} + +.header-image { + margin: 1.3125em 0; +} + +.site-main { + margin-bottom: 5.25em; +} + +.post-navigation { + margin-bottom: 5.25em; +} + +.post-navigation .post-title { + font-size: 28px; + line-height: 1.25; +} + +.pagination { + margin: 0 7.6923% 4.421052632em; +} + +.pagination .nav-links:before, +.pagination .nav-links:after { + display: none; +} + +/* restore screen-reader-text */ +.pagination .current .screen-reader-text { + position: absolute !important; +} + +.pagination .page-numbers { + display: inline-block; + font-weight: 400; +} + +.image-navigation .nav-previous, +.image-navigation .nav-next, +.comment-navigation .nav-previous, +.comment-navigation .nav-next { + display: inline-block; +} + +.image-navigation .nav-previous + .nav-next:before, +.comment-navigation .nav-previous + .nav-next:before { + content: "\002f"; + display: inline-block; + filter: alpha(opacity=70); + padding: 0 0.538461538em; +} + +.site-main > article { + margin-bottom: 5.25em; +} + +.entry-title { + font-size: 33px; + line-height: 1.2727272727; + margin-bottom: 0.8484848485em; +} + +.entry-content blockquote.alignleft, +.entry-content blockquote.alignright { + border-width: 4px 0 0 0; + padding: 0.9473684211em 0 0; + width: 50%; +} + +.entry-footer > span:after { + content: "\002f"; + display: inline-block; + filter: alpha(opacity=70); + padding: 0 0.538461538em; +} + +.updated { + display: none; +} + +.updated.published { + display: inline; +} + +.comment-author { + margin-bottom: 0; +} + +.comment-author .avatar { + height: 42px; + position: relative; + top: 0.25em; + width: 42px; +} + +.comment-list .children > li { + padding-left: 1.75em; +} + +.comment-list + .comment-respond, +.comment-navigation + .comment-respond { + padding-top: 3.5em; +} + +.comment-reply-link { + margin-top: 0; +} + +.comments-area, +.widget, +.content-bottom-widgets .widget-area { + margin-bottom: 5.25em; +} + +.sidebar, +.widecolumn { + margin-bottom: 5.25em; +} + +.site-footer .main-navigation, +.site-footer .social-navigation { + display: none; +} + +.rtl .site-branding { + float: right; +} + +.rtl .menu-toggle { + float: left; +} + +.rtl .comment-list .children > li { + padding-right: 1.75em; + padding-left: 0; +} diff --git a/css/reset.css b/css/reset.css new file mode 100644 index 0000000..af94440 --- /dev/null +++ b/css/reset.css @@ -0,0 +1,48 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/footer.php b/footer.php new file mode 100644 index 0000000..31735e9 --- /dev/null +++ b/footer.php @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/functions.php b/functions.php new file mode 100644 index 0000000..bd051f1 --- /dev/null +++ b/functions.php @@ -0,0 +1,622 @@ + tag in the document head, and expect WordPress to + * provide it for us. + */ + add_theme_support( 'title-tag' ); + + /* + * Enable support for custom logo. + * + * @since Omphaloskepsis 1.2 + */ + add_theme_support( 'custom-logo', array( + 'height' => 2256, + 'width' => 1622, + 'flex-height' => true, + ) ); + + /* + * Enable support for Post Thumbnails on posts and pages. + * + * @link http://codex.wordpress.org/Function_Reference/add_theme_support#Post_Thumbnails + */ + add_theme_support( 'post-thumbnails' ); + set_post_thumbnail_size( 1200, 9999 ); + + // This theme uses wp_nav_menu() in two locations. + register_nav_menus( array( + 'primary' => __( 'Primary Menu', 'omphaloskepsis' ), + 'social' => __( 'Social Links Menu', 'omphaloskepsis' ), + ) ); + + function omphaloskepsis_infinite_scroll_init() { + add_theme_support( 'infinite-scroll', array( + 'container' => 'main', + 'render' => 'omphaloskepsis_infinite_scroll_render', + 'footer' => 'colophon', + ) ); +} + +add_action( 'init', 'omphaloskepsis_infinite_scroll_init' ); +/** + * Custom render function for Infinite Scroll. + */ +function omphaloskepsis_infinite_scroll_render() { + while ( have_posts() ) { + the_post(); + if ( is_search() ) { + get_template_part( 'template-parts/content', 'search' ); + } else { + get_template_part( 'template-parts/content', get_post_format() ); + } + } +} + + /* + * Switch default core markup for search form, comment form, and comments + * to output valid HTML5. + */ + add_theme_support( 'html5', array( + 'search-form', + 'comment-form', + 'comment-list', + 'gallery', + 'caption', + ) ); + + /* + * Enable support for Post Formats. + * + * See: https://codex.wordpress.org/Post_Formats + */ + add_theme_support( 'post-formats', array( + 'aside', + 'image', + 'video', + 'quote', + 'link', + 'gallery', + 'status', + 'audio', + 'chat', + ) ); + + /* + * This theme styles the visual editor to resemble the theme style, + * specifically font, colors, icons, and column width. + */ + add_editor_style( array( 'css/editor-style.css', omphaloskepsis_fonts_url() ) ); + + // Indicate widget sidebars can use selective refresh in the Customizer. + add_theme_support( 'customize-selective-refresh-widgets' ); + } +endif; // omphaloskepsis_setup +add_action( 'after_setup_theme', 'omphaloskepsis_setup' ); + +/** + * Sets the content width in pixels, based on the theme's design and stylesheet. + * + * Priority 0 to make it available to lower priority callbacks. + * + * @global int $content_width + * + * @since Omphaloskepsis 1.0 + */ +function omphaloskepsis_content_width() { + $GLOBALS['content_width'] = apply_filters( 'omphaloskepsis_content_width', 840 ); +} +add_action( 'after_setup_theme', 'omphaloskepsis_content_width', 0 ); + +/** + * Registers a widget area. + * + * @link https://developer.wordpress.org/reference/functions/register_sidebar/ + * + * @since Omphaloskepsis 1.0 + */ +function omphaloskepsis_widgets_init() { + register_sidebar( array( + 'name' => __( 'Sidebar', 'omphaloskepsis' ), + 'id' => 'sidebar-1', + 'description' => __( 'Add widgets here to appear in your sidebar.', 'omphaloskepsis' ), + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); + + register_sidebar( array( + 'name' => __( 'Content Bottom 1', 'omphaloskepsis' ), + 'id' => 'sidebar-2', + 'description' => __( 'Appears at the bottom of the content on posts and pages.', 'omphaloskepsis' ), + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); + + register_sidebar( array( + 'name' => __( 'Content Bottom 2', 'omphaloskepsis' ), + 'id' => 'sidebar-3', + 'description' => __( 'Appears at the bottom of the content on posts and pages.', 'omphaloskepsis' ), + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); +} +add_action( 'widgets_init', 'omphaloskepsis_widgets_init' ); + +if ( ! function_exists( 'omphaloskepsis_fonts_url' ) ) : + /** + * Register Google fonts for Omphaloskepsis. + * + * Create your own omphaloskepsis_fonts_url() function to override in a child theme. + * + * @since Omphaloskepsis 1.0 + * + * @return string Google fonts URL for the theme. + */ + function omphaloskepsis_fonts_url() { + $fonts_url = ''; + $fonts = array(); + $subsets = 'latin,latin-ext'; + + /* translators: If there are characters in your language that are not supported by Merriweather, translate this to 'off'. Do not translate into your own language. */ + if ( 'off' !== _x( 'on', 'Merriweather font: on or off', 'omphaloskepsis' ) ) { + $fonts[] = 'Merriweather:400,700,900,400italic,700italic,900italic'; + } + + /* translators: If there are characters in your language that are not supported by Montserrat, translate this to 'off'. Do not translate into your own language. */ + if ( 'off' !== _x( 'on', 'Montserrat font: on or off', 'omphaloskepsis' ) ) { + $fonts[] = 'Montserrat:400,700'; + } + + /* translators: If there are characters in your language that are not supported by Inconsolata, translate this to 'off'. Do not translate into your own language. */ + if ( 'off' !== _x( 'on', 'Inconsolata font: on or off', 'omphaloskepsis' ) ) { + $fonts[] = 'Inconsolata:400'; + } + + if ( $fonts ) { + $fonts_url = add_query_arg( array( + 'family' => urlencode( implode( '|', $fonts ) ), + 'subset' => urlencode( $subsets ), + ), 'https://fonts.googleapis.com/css' ); + } + + return $fonts_url; + } +endif; + +/** + * Handles JavaScript detection. + * + * Adds a `js` class to the root `` element when JavaScript is detected. + * + * @since Omphaloskepsis 1.0 + */ +function omphaloskepsis_javascript_detection() { + echo "\n"; +} +add_action( 'wp_head', 'omphaloskepsis_javascript_detection', 0 ); + +/** + * Enqueues scripts and styles. + * + * @since Omphaloskepsis 1.0 + */ +function omphaloskepsis_scripts() { + // Load the normalisation stylesheet. + wp_enqueue_style( 'omphaloskepsis-reset', get_template_directory_uri() . '/css/reset.css', array( ), null ); + + wp_style_add_data( 'omphaloskepsis-ie', 'conditional', 'lt IE 10' ); + // Add custom fonts, used in the main stylesheet. + wp_enqueue_style( 'omphaloskepsis-fonts', omphaloskepsis_fonts_url(), array(), null ); + + // Add Genericons, used in the main stylesheet. + wp_enqueue_style( 'genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), '3.4.1' ); + + // Theme stylesheet. + wp_enqueue_style( 'omphaloskepsis-style', get_stylesheet_uri() ); + + wp_enqueue_style('font-awesome', 'https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css'); + + wp_enqueue_style( 'montserrat', "https://fonts.googleapis.com/css?family=Montserrat" ); + + // Load the Internet Explorer specific stylesheet. + wp_enqueue_style( 'omphaloskepsis-ie', get_template_directory_uri() . '/css/ie.css', array( 'omphaloskepsis-style' ), '20160412' ); + wp_style_add_data( 'omphaloskepsis-ie', 'conditional', 'lt IE 10' ); + + // Load the Internet Explorer 8 specific stylesheet. + wp_enqueue_style( 'omphaloskepsis-ie8', get_template_directory_uri() . '/css/ie8.css', array( 'omphaloskepsis-style' ), '20160412' ); + wp_style_add_data( 'omphaloskepsis-ie8', 'conditional', 'lt IE 9' ); + + // Load the Internet Explorer 7 specific stylesheet. + wp_enqueue_style( 'omphaloskepsis-ie7', get_template_directory_uri() . '/css/ie7.css', array( 'omphaloskepsis-style' ), '20160412' ); + wp_style_add_data( 'omphaloskepsis-ie7', 'conditional', 'lt IE 8' ); + + // Load the html5 shiv. + wp_enqueue_script( 'omphaloskepsis-html5', get_template_directory_uri() . '/js/html5.js', array(), '3.7.3' ); + wp_script_add_data( 'omphaloskepsis-html5', 'conditional', 'lt IE 9' ); + + wp_enqueue_script( 'omphaloskepsis-skip-link-focus-fix', get_template_directory_uri() . '/js/skip-link-focus-fix.js', array(), '20160412', true ); + + if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { + wp_enqueue_script( 'comment-reply' ); + } + + if ( is_singular() && wp_attachment_is_image() ) { + wp_enqueue_script( 'omphaloskepsis-keyboard-image-navigation', get_template_directory_uri() . '/js/keyboard-image-navigation.js', array( 'jquery' ), '20160412' ); + } + + wp_enqueue_script( 'omphaloskepsis-script', get_template_directory_uri() . '/js/functions.js', array( 'jquery' ), '20160412', true ); + + wp_localize_script( 'omphaloskepsis-script', 'screenReaderText', array( + 'expand' => __( 'expand child menu', 'omphaloskepsis' ), + 'collapse' => __( 'collapse child menu', 'omphaloskepsis' ), + ) ); +} +add_action( 'wp_enqueue_scripts', 'omphaloskepsis_scripts' ); + +/** + * Adds custom classes to the array of body classes. + * + * @since Omphaloskepsis 1.0 + * + * @param array $classes Classes for the body element. + * @return array (Maybe) filtered body classes. + */ +function omphaloskepsis_body_classes( $classes ) { + // Adds a class of custom-background-image to sites with a custom background image. + if ( get_background_image() ) { + $classes[] = 'custom-background-image'; + } + + // Adds a class of group-blog to sites with more than 1 published author. + if ( is_multi_author() ) { + $classes[] = 'group-blog'; + } + + // Adds a class of no-sidebar to sites without active sidebar. + if ( ! is_active_sidebar( 'sidebar-1' ) ) { + $classes[] = 'no-sidebar'; + } + + // Adds a class of hfeed to non-singular pages. + if ( ! is_singular() ) { + $classes[] = 'hfeed'; + } + + return $classes; +} +add_filter( 'body_class', 'omphaloskepsis_body_classes' ); + +/** + * Converts a HEX value to RGB. + * + * @since Omphaloskepsis 1.0 + * + * @param string $color The original color, in 3- or 6-digit hexadecimal form. + * @return array Array containing RGB (red, green, and blue) values for the given + * HEX code, empty array otherwise. + */ +function omphaloskepsis_hex2rgb( $color ) { + $color = trim( $color, '#' ); + + if ( strlen( $color ) === 3 ) { + $r = hexdec( substr( $color, 0, 1 ).substr( $color, 0, 1 ) ); + $g = hexdec( substr( $color, 1, 1 ).substr( $color, 1, 1 ) ); + $b = hexdec( substr( $color, 2, 1 ).substr( $color, 2, 1 ) ); + } else if ( strlen( $color ) === 6 ) { + $r = hexdec( substr( $color, 0, 2 ) ); + $g = hexdec( substr( $color, 2, 2 ) ); + $b = hexdec( substr( $color, 4, 2 ) ); + } else { + return array(); + } + + return array( 'red' => $r, 'green' => $g, 'blue' => $b ); +} + +/** + * Custom template tags for this theme. + */ +require get_template_directory() . '/inc/template-tags.php'; + +/** + * Customizer additions. + */ +require get_template_directory() . '/inc/customizer.php'; + +/** + * Add custom image sizes attribute to enhance responsive image functionality + * for content images + * + * @since Omphaloskepsis 1.0 + * + * @param string $sizes A source size value for use in a 'sizes' attribute. + * @param array $size Image size. Accepts an array of width and height + * values in pixels (in that order). + * @return string A source size value for use in a content image 'sizes' attribute. + */ +function omphaloskepsis_content_image_sizes_attr( $sizes, $size ) { + $width = $size[0]; + + 840 <= $width && $sizes = '(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px'; + + if ( 'page' === get_post_type() ) { + 840 > $width && $sizes = '(max-width: ' . $width . 'px) 85vw, ' . $width . 'px'; + } else { + 840 > $width && 600 <= $width && $sizes = '(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px'; + 600 > $width && $sizes = '(max-width: ' . $width . 'px) 85vw, ' . $width . 'px'; + } + + return $sizes; +} +add_filter( 'wp_calculate_image_sizes', 'omphaloskepsis_content_image_sizes_attr', 10 , 2 ); + +/** + * Add custom image sizes attribute to enhance responsive image functionality + * for post thumbnails + * + * @since Omphaloskepsis 1.0 + * + * @param array $attr Attributes for the image markup. + * @param int $attachment Image attachment ID. + * @param array $size Registered image size or flat array of height and width dimensions. + * @return string A source size value for use in a post thumbnail 'sizes' attribute. + */ +function omphaloskepsis_post_thumbnail_sizes_attr( $attr, $attachment, $size ) { + if ( 'post-thumbnail' === $size ) { + is_active_sidebar( 'sidebar-1' ) && $attr['sizes'] = '(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 60vw, (max-width: 1362px) 62vw, 840px'; + ! is_active_sidebar( 'sidebar-1' ) && $attr['sizes'] = '(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 88vw, 1200px'; + } + return $attr; +} +add_filter( 'wp_get_attachment_image_attributes', 'omphaloskepsis_post_thumbnail_sizes_attr', 10 , 3 ); + +/** + * Modifies tag cloud widget arguments to have all tags in the widget same font size. + * + * @since Omphaloskepsis 1.1 + * + * @param array $args Arguments for tag cloud widget. + * @return array A new modified arguments. + */ +function omphaloskepsis_widget_tag_cloud_args( $args ) { + $args['largest'] = 1; + $args['smallest'] = 1; + $args['unit'] = 'em'; + return $args; +} +add_filter( 'widget_tag_cloud_args', 'omphaloskepsis_widget_tag_cloud_args' ); + +function omphaloskepsis_the_content($content) { + global $post; + if ($post->post_type == "program") { + $links = '

Links

'; + if ($meta = get_post_meta($post->ID, 'Link', true)) + $links = $links . 'Download'; + if ($meta = get_post_meta($post->ID, 'Documentation', true)) + $links = $links . 'Documentation'; + if ($meta = get_post_meta($post->ID, 'Repo', true)) + $links = $links . 'Repo'; + if ($meta = get_post_meta($post->ID, 'Licence', true)) + $links = $links . 'Licence'; + if ($meta = get_post_meta($post->ID, 'MD5', true)) + $links = $links . '

MD5 checksum: '.$meta.'

'; + return $content . $links; + } elseif ($post->post_type == "website") { + $links = '

Links

'; + if ($meta = get_post_meta($post->ID, 'Link', true)) + $links = $links . 'Visit'; + if ($meta = get_post_meta($post->ID, 'Repo', true)) + $links = $links . 'Repo'; + if ($meta = get_post_meta($post->ID, 'Licence', true)) + $links = $links . 'Licence'; + return '

Summary

' . $content . $links; + } elseif ($post->post_type == "writing") { + $links = '

Links

'; + if ($meta = get_post_meta($post->ID, 'Link', true)) + $links = $links . 'Read'; + if ($meta = get_post_meta($post->ID, 'Licence', true)) + $links = $links . 'Licence'; + return '

Summary

' . $content . $links; + } elseif ($post->post_type == "other") { + $links = '

Links

'; + if ($meta = get_post_meta($post->ID, 'Link', true)) + $links = $links . 'Download'; + return '

Summary

' . $content . $links; + } + return $content; +} +add_filter('the_content', 'omphaloskepsis_the_content', 10); + +add_action( 'wp_enqueue_scripts', 'load_dashicons_front_end' ); +function load_dashicons_front_end() { + wp_enqueue_style( 'dashicons' ); +} + +function display_companies() { + echo "
    "; + if ($_POST['toplevel'] == "true") { + // Gets all of the top-level company terms. + $terms = apply_filters("taxonomy-images-get-terms", "", array('having_images' => false, 'taxonomy' => 'company', 'term_args' => array('parent' => 0))); + $include = 1; + } else { + // Gets all of the company terms. + $terms = apply_filters("taxonomy-images-get-terms", "", array('having_images' => false, 'taxonomy' => 'company',)); + $include = 0; + } + if(!empty($terms)) { + foreach($terms as $term) { + $term_children = get_term_children($term->term_id, "company"); + + // 0 = Jobs + // 1 = Blog Posts + // 2 = Websites + // 3 = Programs + // 4 = Writings + // 5 = Videos + // 6 = Others + // 7 = Qualifications + // 8 = Awards + $post_types = array('job', 'post', 'website', 'program', 'writing', 'video', 'other', 'qualification', 'award'); + $dashicons = array('hammer', 'admin-post', 'schedule', 'desktop', 'format-aside', 'video-alt', 'archive', 'id', 'awards'); + $term_items = array(); + $term_item_counts = array(); + + foreach ($post_types as $post_type) { + $args = array( + 'posts_per_page' => -1, + 'post_type' => $post_type, + 'tax_query' => array( + array( + 'taxonomy' => 'company', + 'field' => 'slug', + 'terms' => $term->slug, + 'include_children' => $include, + ), + ), + 'meta_query' => array(), + ); + + if ($_POST['currentjobs'] == "true" && $post_type == "job") { + $args['meta_query'] = array( + array( + 'key' => 'end-date', + 'compare' => 'NOT EXISTS', + 'value' => '1', + ), + ); + } + + if ($_POST['showexpired'] != "true" && $post_type == "qualification") { + $args['meta_query'] = array( + array( + 'key' => 'Expired', + 'compare' => 'NOT EXISTS', + 'value' => '1', + ), + ); + } + + $posts = get_posts($args); + + array_push($term_items, $posts); + array_push($term_item_counts, count($posts)); + } + + if(($_POST['job'] == "true" && $term_item_counts[0] > 0) || + ($_POST['post'] == "true" && $term_item_counts[1] > 0) || + ($_POST['website'] == "true" && $term_item_counts[2] > 0) || + ($_POST['program'] == "true" && $term_item_counts[3] > 0) || + ($_POST['writing'] == "true" && $term_item_counts[4] > 0) || + ($_POST['video'] == "true" && $term_item_counts[5] > 0) || + ($_POST['other'] == "true" && $term_item_counts[6] > 0) || + ($_POST['qualification'] == "true" && $term_item_counts[7] > 0) || + ($_POST['award'] == "true" && $term_item_counts[8] > 0)) { + + $imgURL = wp_get_attachment_image_src($term->image_id, 'full')[0]; + $bgImg = (!$imgURL) ? "" : " background-image: url(".strtok($imgURL, '?').");"; + $colour = get_term_meta($term->term_id, 'color', true); + $colour = ($colour != "") ? $colour : "transparent"; + + echo ''; + echo '
  • '; + echo '
    '; + if (count($term_children) > 0) { + echo '
    '; + echo count($term_children).'
    '; + echo '
    '; + } + echo '
    '; + + echo '
    '; + $i = 0; + foreach ($post_types as $post_type) { + if ($_POST[$post_type] == "true") { + echo '
    '; + echo $term_item_counts[$i].''; + echo '
    '; + } + $i++; + } + echo '
    '; + if (!$imgURL) echo '

    '.$term->name.'

    '; + echo '
  • '; + echo '
    '; + } + } + } else { + echo '

    No companies found

    '; + } + echo '
'; + + die(); +} +add_action('wp_ajax_display_companies', 'display_companies'); +add_action('wp_ajax_nopriv_display_companies', 'display_companies'); diff --git a/genericons/COPYING.txt b/genericons/COPYING.txt new file mode 100644 index 0000000..aece214 --- /dev/null +++ b/genericons/COPYING.txt @@ -0,0 +1,9 @@ +Genericons is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + +The fonts are distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. + +This license does not convey any intellectual property rights to third party trademarks that may be included in the icon font; such marks remain subject to all rights and guidelines of use of their owner. \ No newline at end of file diff --git a/genericons/Genericons.eot b/genericons/Genericons.eot new file mode 100644 index 0000000000000000000000000000000000000000..7322565a01d25b8e3e8a69319593e5d3ccd59689 GIT binary patch literal 22374 zcmdsfd0-S(y6-u)bY)L^PdZyK>24rNC+U?02u;`%_9g7fzC@Nl08t#RQBe>K0asw#k}Gxy*3y1S}Qopb6t+jqXb zdhs;I9%yHbGl9`ZV6vzukaIn!)R+nSg|Q+dpXwT)%6^aed-Kj*9c(09#8%>1!))T3HnR*!E3i|E&S+%xu5&`?C($Y&}O*@O`z zri@+pU%%_aSo`(JEgL_%F1oO0-3zER9rtq=teDsN>ovc<9pn1~d5J%Wc_RYA@TC)72#rGW>eTXsnJ;p{|zjV>Og}HNEFjwqPIFd_|QS?NX z1+W~ruUfid?S|=JOva%26FB-WU$tP~Yg<2j2%zu9ef^4g8#>viyoAb7-@9_&iba#I zx@<3FS=No?kfdYnGdZ#~6FlckzS0*Hho2 zqZU0s%UnEwM;=vpB8wU2IwZ>J{m6RGP3#kMJ!#pwo|neN(??Ri;@2}7{fNo8ps>QY zivPhD3%0W{gq}Q&6u6nNc=$rBhxcoDZyyMp4qH#)`TmgY#&>7#U#+85(B)wEc9v$q| z32Kw8!d&Vk@>DjNu2fINRj}!KOu{|-rq`kN^|Z?N5eze5FU50Ihfy7zzhaB2UHTa9 z=}-VmFWrY)s41oOvJ~#7@RiguAiQYwf#B$MjWZ+s)Q>W11fK_RN2xLzi~id>%KE7FZR-&jFP&cJwazD;pEysr9IhHy+STq_=vw32?E1*6Fq-OP?$4DQhZQTDH0Dsj_3`73J;a zo#i)||GDCuN^fPPvZ-=ZWqaj)l}Eh&y)XNiuf_Mg?}*>xZ}N}wU*g~Cf7$<0peQgi z@I_Ts)hJ-fFrdpqc`6V@VUb5Ts~h;JBC*e-k67eC4SZA-kYtaDlr2;Cql$(1415%5 z_IWgB^;v^Ht8bX#)vEZ-+ERJyiTj61ZveF{v{x-mCXS)7Tvo{J%ndB{IeoIzmyi=a zC&v*)+KQ`yt<(dmkx^-rWmKdfKJU;WZLfBow)fB>{_@*9cfP$-VP|sYQH`EM$ldui=rBt>~_ zANnfO@a#SoZ5HAY!CxRaD!AyB6D(T6osI$_;E(WlQdR}_9R`bwcGrQsH;f#);cnxC z%`g1=p&jk9sTU5JwxhirgXvL4RpsoYdb$$T6~CLC-lui9@0d2^!l|+L9S`lG{s^Gf zXU!kx&g$dn5*_rF0INssVIpRQBgIu2XQHv1s_AD+VScbyT(#iKKo_zF%(Z$FcNu(9 zray<6Kvl59 zSOZ#D^v6-a1J-CVfqwQTeW2OumSbBxb^;xYgoa+zI&VF;g|nR9O$QHd;%a)`v=Y?O z^g0}MXy#bALVYV@0gN}Q_pO>+xi96TK^qwXtWdyD{Yu6xYRAr<9jcbr_N#pB-lLj+ zkK44Kuwe9*rKNeddUUU#p1IxG!BN0O;5pU_>n5Ys3bYF7I4WqJ!pTHDjARj#%|ap` z3R7);?NzBTIbc9?W?LICn!aGc^jUQ+!SN$y6raQ)6eX|SeQjc9TSo`VXMCphd^TfN z-RdhxEIl|9O<tt*@bqgAUbeC>Y}T!z9=<+a3m+Es4y#AT2@v+YTW!8iFm#% zGIH<;kC0vNPnJu0CD~Swm|gDi=W~nOn;J2HAP)p?(lSpjYrXR6BUy~j+BaM8(Oy3J zY*g_UOTV8qbgsu@uZoVFzj^Y$HHCdfo!`Jk+13#BbM6l|SS^CkXF_ADEVpa#q%HHu zMT0g=WL8drT$HGl@&l#Cf|Bd8aZ7PUf1i}!x1wJ`jg*nY)R#pz$5@l&Nfw5pTC5RTLxPnPrs!FclHqaHDJIPX^a2}`Wtq|Nv$t{4v zE3T@PVE0=BE_<_-3e|A0#6b2K=pG}&C$aqpeZTp$wz=ayan$bDi?w6g+XYRtPTaP3 z`Oo+R9~Y&ykF?eDvXKY=XP~P*Y`Kq*x!7~E={fBmb$1L= zYL9Cd@!fnQx8HfE_PMr6TZrTHJMZLnbpo&9SGH=0U+UhsoKNYFL`rYgUKO^a@6rB! z!y7y~wq9+I^7k6g@2Dt`P090FN_jc|YN~edUDv1x_wZ!V-P+wklef90>e64T=Kx28 zdZRR59Q3#b^!P*8h#QOI0>PD}fH&xhMX}|9UP$0F2>3;gz|dwP7InFksRFJf z6}4@JP&-q7_z#-4T|1X?Cm!W-qtnbE;%%!LEOGd$uD{BO1WB${_4C1?f1Qw+qb%P^Ma;9 zsgiVhnIDvs`pdvS6qSW>(@PAjKD%!actp&d3I)JG%0VH)G`~k6w2yc}p7v37%iZ$W zW#|2JdX1)KYKU?upa>@!Nassj>dqUO;$P+@&tEs}nAVeN+}Rby%^Qym_UGG}3*xF=isRy*ADxHy{E zaUni;+Nfl?MHID+a`2x%hzg*caQkf1&;9#2eaWBgD`(mrKI8Uv~bL2POzoQGs1?7dyCH zw#fyOB8+R|*(LRj5xF<8jC++Lm!}Bb84Gkk= z#gQ2azYxsw=9U!}J98V``NGawcdV2JkyrXfS?IY*u=44O;P>*J-b|%W_0_vFjUBw} z11P;DtzXN(0x#VLb$k%5qK@p4E!rqq%BJtITQc$>iMHv=hcpFs2>|Sxl6DuyD%8@ zmL@a*AznUbo3$)ZT58WtUGU&4kiOo%M^dJj4Mfj+cc8h|NItQHO-FbDf`r2r<3=|H zCE;@wITiFerBAifYOrnEcwobB?Yk?6P2>|=hEAF|L>h3<=IF%!{vz#L&Usc=j=#}A zd`Ry$HMZmlCYJPkEN&X#G;r*=0Zrq3Hu9H#bD*R;T-@o?y7nL72dkZ)zUAjn(WYZE zp=B!*!56>_c(g(?wo@o9U}uCwDLWwmW|q(a^GSOIyCMR)vj9~g1S!Za!2TjUk)?+9 ze|%{B+<5Kei*_DZxZpSb(MA3_H!9`7k_ueg7EhiY8d%`Ic;UJy=MTT)<)6*D|LT>a z!;@`_B02;m;F`KVRW)Y$O~3tX7E8_Fyl?-UjemJ|_lkjY(%OgpH||K@d$I6vwr^Sd z+JhHNitYHf#s$|u!5a=NedOn@k%^sG-8|vO`A$!9-uRqiYj)s(xpmuyX;H#$ zk|zw_w*U!Uo+uIu1W=7|GG*8CnbV*|V^A))3uJ?*lA*9k&4D@?J&D>_AjlttTUfwK zj!ANd7_z=6OPGBAhV5--qsq2Tyy)MrpEzL6?l-#DAKr86_`V%WY-O@w6=bZ76_vqCV2QIsA>W*)3Ow3Bu?Y^*I%d}w^ zw^dKH+qK~2`CGlD4>yMYRLRY`(f{&Ya~N z&p&TyOZ>%-wzf#ERZ+D8+Q(XacTJ6_YP$AO(&ehGY;5}ZMqynhkWSB>u@%$(J^JBh zwK@$xhkh`xrO4$?7NJM_ZuIIh2m0oULHf4>FRQuVQqCQ&0X&*Kn}mp!+H*%qg@S1Q z-?lBsw9k%hv1$L^mXKMZtu3LNr|(k{jU6?f>NzU15lzsQphOKAo}ovi{k_k$q3)-u-n+}>@IdMW)HaNaMoMs=dd(DXRtI_6r_-F5<$UqS_(P0_`|%u zj)%hap#-)aO>Zb1M*=%Alt5-2>P(_OnMgLo34IdLlzydj3S7HB#gkDtuXi=nyJA?X z-meoWXFdHKZbyTQTjf+XcL!x>id%z9Fcns^c~}l66a}lUe+142fg5LBGA-6V)=Uc* zInY_8G8CQtp_=+5C=$8w45|yyAnP;?0!LKtDhTUf zPFxN(poiIY3Cu!*G$?C*yaA$GsEW`+e-vv=xPV*A5Y7tTjWFTe16Ftyked=xK#V#da+-> z_N{BzPnkLQH!)fPkMYfm2Ta@fO4ryc=6RB%x;nMT@3}|&bYyG(wCTL| zQLF7%?bBD*|NH|UG2~8Tm?UsDQ${qe>dPK_Q_(CD1LLkI z&YN0VU8&?2xZNZB_M75!`|N^{=dqQx27}F3mxcGQ7I@|8@(Q28s{?^4VTaFSm$FML zy)){EToAG54L@&HB0i-y%T-V}s4BH_;P{IYg?TIP=(+ma*RQ&A-Qim=aCld2n|PD< z(1wkj<(~iCyPL1L<<>VVBq8sb_q0Fnxm$blgUbnj|6h@HNuRq+8KhiJeg$5EO;8|5 zpdeWbvLJHlsR|*P0(+_up^qmcmO$7aDnK<}Ay#rFB0-927Ar)zyhkY+J$(AG0iJ@& z>gB60>|8o6ZL@*wW?3EHV7xrOa>{U<-8XD#|03Ss;z$pkK6cXJh8&@)dD5)elZV*t zQc*14He&L~QDvniqSaH9oqbesH}x&g9W`|Lz4tu)tD85@_9%VDynfNCbFSF_`1~1L zCa3Ije!gPS{!36?Zf`}PqCD3olvL#9^J0H>K~=5zXyzk9&Xr_)?a&K`kGXtSYmL7! z3na->SllPpR$DuF;+UqIyxdo^y~|eKb^D96$E_LQ6$;8qa?CY^uDcdIx-a`VX2+%I z#?Ua48VRa6Np2$aJ&3LqveUuIQbmmA^cQtdX7C9TNqWm6n1I+ov^~Q^9461#pQUo6 zl%7(C#Q4}N_Ak6>#rQF6K6nD+s�?tPM9#*mhy-i22XlwWDitjkb7zKQL&(lu66l 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 Phwpv<4P3tWU# + + + + +Created by FontForge 20150618 at Fri Sep 18 10:24:13 2015 + By Joen Asmussen +Copyright (c) 2015, Joen Asmussen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/genericons/Genericons.ttf b/genericons/Genericons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..017443851965255c626a5ad3537d3ed0b7c00f6a GIT binary patch literal 22188 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 Gt^Ws)-B^wQ literal 0 HcmV?d00001 diff --git a/genericons/Genericons.woff b/genericons/Genericons.woff new file mode 100644 index 0000000000000000000000000000000000000000..0e7212af75273146e900bb3f0dbe2c83b0913e23 GIT binary patch literal 13988 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 literal 0 HcmV?d00001 diff --git a/genericons/LICENSE.txt b/genericons/LICENSE.txt new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/genericons/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/genericons/README.md b/genericons/README.md new file mode 100644 index 0000000..4aa8cc0 --- /dev/null +++ b/genericons/README.md @@ -0,0 +1,218 @@ +# Genericons + +Genericons are vector icons embedded in a webfont designed to be clean and simple keeping with a generic aesthetic. + +Use genericons for instant HiDPI, to change icon colors on the fly, or even with CSS effects such as drop-shadows or gradients! + + +## Usage + +To use it, place the `genericons` folder in your stylesheet directory and enqueue the genericons.css file. Now you can create an icon like this: + +``` +.my-icon:before { + content: '\f101'; + font: normal 16px/1 'Genericons'; + display: inline-block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +``` + +This will output a comment icon before every element with the class "my-icon". The `content: '\f101';` part of this CSS is easily copied from the helper tool at http://genericons.com/, or `example.html` in the `font` directory. + +You can also use the bundled example.css if you'd rather insert the icons using HTML tags. + + +## Building your own Genericons + +In the `source` directory, you'll find all Genericons source icons in SVG format. This will allow you to bake your own flavor of Genericons using a tool such as FontCustom (http://fontcustom.com) or Fontello (http://fontello.com). Perhaps you need more logos than are available in the base Genericons package? Just add those logos and bake your own expanded set. Maybe you need just a few of the icons Genericons provides, but would like to trim the fat? Remove the ones you won't need! + + +### FontCustom instructions + +FontCustom is a powerful commandline tool which which bakes icon fonts from the SVG source files. It's the tool Genericons is built on, and it provides highly accurate and perfectly crisp icons, *provided all SVGs have the same pixel height*. + +It's not that hard to use, and once it's installed you'll never think of icon-fonts the same way again. Seriously, you should try it. Icon fonts for everyone! + +1. Install FontCustom. Follow the instructions on the website: http://fontcustom.com/ +2. In the `source` directory from the Genericons download, open the file called `fontcustom.yml` in a text editor. Customize the `font_name` and `css_selector`. +3. Open a terminal. Browse to the `source` directory. Type `fontcustom compile`. + +You'll now receive a brand new subdirectory called `fontcustom-webfont`. Inside here you'll find your very own flavor of Genericons, with only the icons you want, including a handy example page that'll help you copy/paste the necessary glyphs or CSS values. + +*Please note*: In the source directory, there's a hidden file called `.fontcustom-manifest.json`. This file is auto-generated by the FontCustom tool, and holds codepoints (unicode addresses) for every glyph, so its address doesn't change when you add or remove icons. If you feel the need to "start fresh" with the unicode addresses, you should delete this file. + + +### Fontello instructions + +Fontello is very easy to use. Just drop the SVG files of the icons you want onto their website and download the font. The downside is that Fontello seems to ignore the 16px pixelgrid, so you'll end up with fuzzy icons. Buyer beware. + + +## Notes + +**Photoshop mockups** + +The `Genericons.ttf` file can be placed in your system fonts folder and used Photoshop or other graphics apps if you like. + +If you're using Genericons in your Photoshop mockups, please remember to delete the old version of the font from Font Book, and grab the new one from the zip file. This also affects using it in your webdesigns: if you have an old version of the font installed locally, that's the font that'll be used in your website as well, so if you're missing icons, check for old versions of the font on your system. + +**Pixel grid** + +Genericons has been designed for a 16x16px grid. That means it'll look sharp at font-size: 16px exactly. It'll also be crisp at multiples thereof, such as 32px or 64px. It'll look reasonably crisp at in-between font sizes such as 24px or 48px, but not quite as crisp as 16 or 32. Please don't set the font-size to 17px, though, that'll just look terrible blurry. + +**Antialiasing** + +If you keep intact the `-webkit-font-smoothing: antialiased;` and `-moz-osx-font-smoothing: grayscale;` CSS properties. That'll make the icons look their best possible, in Firefox and WebKit based browsers. + +**optimizeLegibility** + +Note: On Android browsers with version 4.2, 4.3, and probably later, Genericons will simply not show up if you're using the CSS property "text-rendering" set to "optimizeLegibility. + +**Updates** + +We don't often update icons, but do very carefully when we get good feedback suggesting improvements. Please be mindful if you upgrade, and check that the updated icons behave as you intended. + +**Base64 encoding** + +By default, Genericons ships with a stylesheet that includes a base64 encoded version of the font. This is to sidestep issues with cross-origin requests for fonts, that happen when a stylesheet loads a font that's stored on a different domain or subdomain. This is very common when using caching plugins. + +Base64 encoding comes with a 25% filesize overhead compared to just loading the WOFF file directly. If you know that you won't be loading fonts across domains, or have the ability to edit your server config files to allow it, you can get slightly faster performance by loading Genericons without the base64 encoding. Simply edit `genericons.css` and edit the `@font-face` declaration to match this: + +``` +@font-face { + font-family: 'Genericons'; + src: url('Genericons.woff') format('woff'), + url('Genericons.ttf') format('truetype'), + url('Genericons.svg#genericonsregular') format('svg'); + font-weight: normal; + font-style: normal; +} +``` + + + +## Changelog + +**3.4.1** + +* IE8 support restored. + +**3.4** + +* Updated: Update Google Plus icon to new geometric version. This also *retires* the "alt" version, so *please be mindful if you choose to update, make sure you use the `f206` glyph, not the `f218` glyph, as it no longer exists! +* New: Added helper rotation classes to the base CSS, thanks to geminorum. Apply `genericon-rotate-90` to rotate 90 degrees, -180, -270. Or `genericon-flip-horizontal` or -vertical. + +*Again, it is important if you choose to update to this version, make sure you're not using `genericon-googleplus-alt` or unicode character `f218`, as that has been retired! Use `genericon-googleplus` and glyph `f206` instead!* + +**3.3.1** + +Security Hardening: Remove Genericons example.html file. Please visit genericons.com instead. + +**3.3** + +The Open Source release. + +You can now build your own flavors of Genericons with all the SVGs provided. + + +**3.2** + +A number of new icons and a couple of quick updates. + +* New: Activity +* New: HTML anchor +* New: Bug +* New: Download +* New: Handset +* New: Microphone +* New: Minus +* New: Plus +* New: Move +* New: Rating stars, empty, half, full +* New: Shuffle +* New: video camera +* New: Spotify +* New: Twitch +* Update: Fixed geometry in Edit icon +* Update: Updated Foursquare icon +* IE8 bugfix, slipstreamed into this. + +Twitch and Spotify mark the last social icons that will be added to Genericons. +Future social icons will have to happen in a separate font. + +**3.1** + +Genericons is now generated using a commandline tool called FontCustom. This makes it far easier to add new icons to the font, but the switch means the download zip now has a different layout, fonts have different filenames, there's now no .otf font included (but the .ttf should suffice), and the font now has slightly different metrics. I've taken great care to ensure this new version should work as a drop-in replacement, but please be mindful and test carefully if you choose to upgrade. + +* Per feedback, the baked-in 16px width and height has been removed from the helper CSS. It wasn't really necessary (the glyph itself has these dimensions naturally), and it caused some headaches. +* Base64 encoding is now included by default in the helper CSS. This makes it drop-in easy to get Genericons working in Firefox even when using a CDN. +* Title attribute on website tool. +* New: Website. +* New: Ellipsis. +* New: Foursquare. +* New: X-post. +* New: Sitemap. +* New: Hierarchy. +* New: Paintbrush. +* Updated: Show and Hide icons were updated for clarity. + +**3.0.3** + +Bunch of updates mostly. + +* Two new icons, Dropbox and Fullscreen. +* Updates to all icons containing an exclamation mark. +* Updates to Image and Quote. +* Nicer "Share" icon. +* Bigger default Linkedin icon. + +**3.0.2** + +A slew of new stuff and updates. + +* Social icons: Skype, Digg, Reddit, Stumbleupon, Pocket. +* New generic icons: heart, lock and print. +* New editing icons: code, bold, italic, image +* New interaction icons: subscribe, unsubscribe, subscribed, reply all, reply, flag. +* The hyperlink icon has been updated to be clearer, chunkier. +* The "home" icon has been updated for style, size and clarity. +* The email icon has been updated for style and clarity, and to fit with the new subscribe icons. +* The document icon has been updated for style. +* The "pin" icon has been updated for style and clarity. +* The Twitter icon has been scaled down to fit with the other social icons. + +**3.0.1** + +Mostly maintenance. + +* Fixed an issue with the example page that showed an old "top" icon instead of the actual NEW "refresh" icon. +* Added inverse Google+ and Path. +* Replaced tabs with spaces in the helper CSS. +* Changed the Genericons.com copy/paste tool to serve span's instead of div's for casual icon insertion. It's being converted to "inline-block" anyway. + +**3.0** + +Mainly maintenance and a few new icons. + +* Fast forward, rewind, PollDaddy, Notice, Info, Help, Portfolio +* Updated the feed icon. It's a bit smaller now for consistency, the previous one was rather big. +* So, the previous version numbering, 2.09, wasn't very PHP version compare friendly. So from now on it'll be 3.0, 3.1 etc. Props Ipstenu. +* Genericons.com now has a mini release blog. +* The CSS has prettier formatting, props Konstantin Obenland. + +**2.09** + +Updated Facebook icon to new version. Updated Instagram logo to use new one-color version. Updated Google+ icon to use same radius as Instagram and Facebook. Added a bunch of new icons, cog, unapprove, cart, media player buttons, tablet, send to tablet. + +**2.06** + +Included Base64 encoded version. This is necessary for Genericons to work with CDNs in Firefox. Firefox blocks fonts linked from a different domain. A CDN (typically s.example.com) usually puts the font on a subdomain, and is hence blocked in Firefox. + +**2.05** + +Added a bunch of new icons, including upload to cloud, download to cloud, many more. + +**2.0** + +Initial public release diff --git a/genericons/genericons.css b/genericons/genericons.css new file mode 100644 index 0000000..87cf754 --- /dev/null +++ b/genericons/genericons.css @@ -0,0 +1,263 @@ +/** + + Genericons + +*/ + + +/* IE8 and below use EOT and allow cross-site embedding. + IE9 uses WOFF which is base64 encoded to allow cross-site embedding. + So unfortunately, IE9 will throw a console error, but it'll still work. + When the font is base64 encoded, cross-site embedding works in Firefox */ +@font-face { + font-family: "Genericons"; + src: url("./Genericons.eot"); + src: url("./Genericons.eot?") format("embedded-opentype"); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: "Genericons"; + src: url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff"), + url("./Genericons.ttf") format("truetype"), + url("./Genericons.svg#Genericons") format("svg"); + font-weight: normal; + font-style: normal; +} + +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: "Genericons"; + src: url("./Genericons.svg#Genericons") format("svg"); + } +} + + +/** + * All Genericons + */ + +.genericon { + font-size: 16px; + vertical-align: top; + text-align: center; + -moz-transition: color .1s ease-in 0; + -webkit-transition: color .1s ease-in 0; + display: inline-block; + font-family: "Genericons"; + font-style: normal; + font-weight: normal; + font-variant: normal; + line-height: 1; + text-decoration: inherit; + text-transform: none; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + speak: none; +} + + +/** + * Helper classes + */ + +.genericon-rotate-90 { + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); +} + +.genericon-rotate-180 { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); +} + +.genericon-rotate-270 { + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); +} + +.genericon-flip-horizontal { + -webkit-transform: scale(-1, 1); + -moz-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); +} + +.genericon-flip-vertical { + -webkit-transform: scale(1, -1); + -moz-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); +} + + +/** + * Individual icons + */ + +.genericon-404:before { content: "\f423"; } +.genericon-activity:before { content: "\f508"; } +.genericon-anchor:before { content: "\f509"; } +.genericon-aside:before { content: "\f101"; } +.genericon-attachment:before { content: "\f416"; } +.genericon-audio:before { content: "\f109"; } +.genericon-bold:before { content: "\f471"; } +.genericon-book:before { content: "\f444"; } +.genericon-bug:before { content: "\f50a"; } +.genericon-cart:before { content: "\f447"; } +.genericon-category:before { content: "\f301"; } +.genericon-chat:before { content: "\f108"; } +.genericon-checkmark:before { content: "\f418"; } +.genericon-close:before { content: "\f405"; } +.genericon-close-alt:before { content: "\f406"; } +.genericon-cloud:before { content: "\f426"; } +.genericon-cloud-download:before { content: "\f440"; } +.genericon-cloud-upload:before { content: "\f441"; } +.genericon-code:before { content: "\f462"; } +.genericon-codepen:before { content: "\f216"; } +.genericon-cog:before { content: "\f445"; } +.genericon-collapse:before { content: "\f432"; } +.genericon-comment:before { content: "\f300"; } +.genericon-day:before { content: "\f305"; } +.genericon-digg:before { content: "\f221"; } +.genericon-document:before { content: "\f443"; } +.genericon-dot:before { content: "\f428"; } +.genericon-downarrow:before { content: "\f502"; } +.genericon-download:before { content: "\f50b"; } +.genericon-draggable:before { content: "\f436"; } +.genericon-dribbble:before { content: "\f201"; } +.genericon-dropbox:before { content: "\f225"; } +.genericon-dropdown:before { content: "\f433"; } +.genericon-dropdown-left:before { content: "\f434"; } +.genericon-edit:before { content: "\f411"; } +.genericon-ellipsis:before { content: "\f476"; } +.genericon-expand:before { content: "\f431"; } +.genericon-external:before { content: "\f442"; } +.genericon-facebook:before { content: "\f203"; } +.genericon-facebook-alt:before { content: "\f204"; } +.genericon-fastforward:before { content: "\f458"; } +.genericon-feed:before { content: "\f413"; } +.genericon-flag:before { content: "\f468"; } +.genericon-flickr:before { content: "\f211"; } +.genericon-foursquare:before { content: "\f226"; } +.genericon-fullscreen:before { content: "\f474"; } +.genericon-gallery:before { content: "\f103"; } +.genericon-github:before { content: "\f200"; } +.genericon-googleplus:before { content: "\f206"; } +.genericon-googleplus-alt:before { content: "\f218"; } +.genericon-handset:before { content: "\f50c"; } +.genericon-heart:before { content: "\f461"; } +.genericon-help:before { content: "\f457"; } +.genericon-hide:before { content: "\f404"; } +.genericon-hierarchy:before { content: "\f505"; } +.genericon-home:before { content: "\f409"; } +.genericon-image:before { content: "\f102"; } +.genericon-info:before { content: "\f455"; } +.genericon-instagram:before { content: "\f215"; } +.genericon-italic:before { content: "\f472"; } +.genericon-key:before { content: "\f427"; } +.genericon-leftarrow:before { content: "\f503"; } +.genericon-link:before { content: "\f107"; } +.genericon-linkedin:before { content: "\f207"; } +.genericon-linkedin-alt:before { content: "\f208"; } +.genericon-location:before { content: "\f417"; } +.genericon-lock:before { content: "\f470"; } +.genericon-mail:before { content: "\f410"; } +.genericon-maximize:before { content: "\f422"; } +.genericon-menu:before { content: "\f419"; } +.genericon-microphone:before { content: "\f50d"; } +.genericon-minimize:before { content: "\f421"; } +.genericon-minus:before { content: "\f50e"; } +.genericon-month:before { content: "\f307"; } +.genericon-move:before { content: "\f50f"; } +.genericon-next:before { content: "\f429"; } +.genericon-notice:before { content: "\f456"; } +.genericon-paintbrush:before { content: "\f506"; } +.genericon-path:before { content: "\f219"; } +.genericon-pause:before { content: "\f448"; } +.genericon-phone:before { content: "\f437"; } +.genericon-picture:before { content: "\f473"; } +.genericon-pinned:before { content: "\f308"; } +.genericon-pinterest:before { content: "\f209"; } +.genericon-pinterest-alt:before { content: "\f210"; } +.genericon-play:before { content: "\f452"; } +.genericon-plugin:before { content: "\f439"; } +.genericon-plus:before { content: "\f510"; } +.genericon-pocket:before { content: "\f224"; } +.genericon-polldaddy:before { content: "\f217"; } +.genericon-portfolio:before { content: "\f460"; } +.genericon-previous:before { content: "\f430"; } +.genericon-print:before { content: "\f469"; } +.genericon-quote:before { content: "\f106"; } +.genericon-rating-empty:before { content: "\f511"; } +.genericon-rating-full:before { content: "\f512"; } +.genericon-rating-half:before { content: "\f513"; } +.genericon-reddit:before { content: "\f222"; } +.genericon-refresh:before { content: "\f420"; } +.genericon-reply:before { content: "\f412"; } +.genericon-reply-alt:before { content: "\f466"; } +.genericon-reply-single:before { content: "\f467"; } +.genericon-rewind:before { content: "\f459"; } +.genericon-rightarrow:before { content: "\f501"; } +.genericon-search:before { content: "\f400"; } +.genericon-send-to-phone:before { content: "\f438"; } +.genericon-send-to-tablet:before { content: "\f454"; } +.genericon-share:before { content: "\f415"; } +.genericon-show:before { content: "\f403"; } +.genericon-shuffle:before { content: "\f514"; } +.genericon-sitemap:before { content: "\f507"; } +.genericon-skip-ahead:before { content: "\f451"; } +.genericon-skip-back:before { content: "\f450"; } +.genericon-skype:before { content: "\f220"; } +.genericon-spam:before { content: "\f424"; } +.genericon-spotify:before { content: "\f515"; } +.genericon-standard:before { content: "\f100"; } +.genericon-star:before { content: "\f408"; } +.genericon-status:before { content: "\f105"; } +.genericon-stop:before { content: "\f449"; } +.genericon-stumbleupon:before { content: "\f223"; } +.genericon-subscribe:before { content: "\f463"; } +.genericon-subscribed:before { content: "\f465"; } +.genericon-summary:before { content: "\f425"; } +.genericon-tablet:before { content: "\f453"; } +.genericon-tag:before { content: "\f302"; } +.genericon-time:before { content: "\f303"; } +.genericon-top:before { content: "\f435"; } +.genericon-trash:before { content: "\f407"; } +.genericon-tumblr:before { content: "\f214"; } +.genericon-twitch:before { content: "\f516"; } +.genericon-twitter:before { content: "\f202"; } +.genericon-unapprove:before { content: "\f446"; } +.genericon-unsubscribe:before { content: "\f464"; } +.genericon-unzoom:before { content: "\f401"; } +.genericon-uparrow:before { content: "\f500"; } +.genericon-user:before { content: "\f304"; } +.genericon-video:before { content: "\f104"; } +.genericon-videocamera:before { content: "\f517"; } +.genericon-vimeo:before { content: "\f212"; } +.genericon-warning:before { content: "\f414"; } +.genericon-website:before { content: "\f475"; } +.genericon-week:before { content: "\f306"; } +.genericon-wordpress:before { content: "\f205"; } +.genericon-xpost:before { content: "\f504"; } +.genericon-youtube:before { content: "\f213"; } +.genericon-zoom:before { content: "\f402"; } + + + + diff --git a/header.php b/header.php new file mode 100644 index 0000000..b1f210b --- /dev/null +++ b/header.php @@ -0,0 +1,39 @@ + + + + class="no-js"> + + + + + + + + + + + + + + + + id="site-wrapper"> + + + diff --git a/home.php b/home.php new file mode 100644 index 0000000..c6ec1e7 --- /dev/null +++ b/home.php @@ -0,0 +1,61 @@ + + + + +
+
+

Blog.

+

Thoughts / Reports / Reviews / Projects

+ ' ', + 'mid_size' => 20, + 'prev_text' => '', + 'next_text' => '', + )); + ?> +
+ +
+ +
+ +
+ ' ', + 'mid_size' => 20, + 'prev_text' => '', + 'next_text' => '', + )); + ?> +
+
+ + + + diff --git a/inc/back-compat.php b/inc/back-compat.php new file mode 100644 index 0000000..7ed4240 --- /dev/null +++ b/inc/back-compat.php @@ -0,0 +1,71 @@ +

%s

', $message ); +} + +/** + * Prevents the Customizer from being loaded on WordPress versions prior to 4.4. + * + * @since Twenty Sixteen 1.0 + * + * @global string $wp_version WordPress version. + */ +function twentysixteen_customize() { + wp_die( sprintf( __( 'Twenty Sixteen requires at least WordPress version 4.4. You are running version %s. Please upgrade and try again.', 'twentysixteen' ), $GLOBALS['wp_version'] ), '', array( + 'back_link' => true, + ) ); +} +add_action( 'load-customize.php', 'twentysixteen_customize' ); + +/** + * Prevents the Theme Preview from being loaded on WordPress versions prior to 4.4. + * + * @since Twenty Sixteen 1.0 + * + * @global string $wp_version WordPress version. + */ +function twentysixteen_preview() { + if ( isset( $_GET['preview'] ) ) { + wp_die( sprintf( __( 'Twenty Sixteen requires at least WordPress version 4.4. You are running version %s. Please upgrade and try again.', 'twentysixteen' ), $GLOBALS['wp_version'] ) ); + } +} +add_action( 'template_redirect', 'twentysixteen_preview' ); diff --git a/inc/customizer.php b/inc/customizer.php new file mode 100644 index 0000000..794752d --- /dev/null +++ b/inc/customizer.php @@ -0,0 +1,1165 @@ + $default_background_color, + ) ) ); + + /** + * Filter the arguments used when adding 'custom-header' support in Twenty Sixteen. + * + * @since Twenty Sixteen 1.0 + * + * @param array $args { + * An array of custom-header support arguments. + * + * @type string $default-text-color Default color of the header text. + * @type int $width Width in pixels of the custom header image. Default 1200. + * @type int $height Height in pixels of the custom header image. Default 280. + * @type bool $flex-height Whether to allow flexible-height header images. Default true. + * @type callable $wp-head-callback Callback function used to style the header image and text + * displayed on the blog. + * } + */ + add_theme_support( 'custom-header', apply_filters( 'twentysixteen_custom_header_args', array( + 'default-text-color' => $default_text_color, + 'width' => 1200, + 'height' => 280, + 'flex-height' => true, + 'wp-head-callback' => 'twentysixteen_header_style', + ) ) ); +} +add_action( 'after_setup_theme', 'twentysixteen_custom_header_and_background' ); + +if ( ! function_exists( 'twentysixteen_header_style' ) ) : +/** + * Styles the header text displayed on the site. + * + * Create your own twentysixteen_header_style() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @see twentysixteen_custom_header_and_background(). + */ +function twentysixteen_header_style() { + // If the header text option is untouched, let's bail. + if ( display_header_text() ) { + return; + } + + // If the header text has been hidden. + ?> + + get_setting( 'blogname' )->transport = 'postMessage'; + $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; + + if ( isset( $wp_customize->selective_refresh ) ) { + $wp_customize->selective_refresh->add_partial( 'blogname', array( + 'selector' => '.site-title a', + 'container_inclusive' => false, + 'render_callback' => 'twentysixteen_customize_partial_blogname', + ) ); + $wp_customize->selective_refresh->add_partial( 'blogdescription', array( + 'selector' => '.site-description', + 'container_inclusive' => false, + 'render_callback' => 'twentysixteen_customize_partial_blogdescription', + ) ); + } + + // Add color scheme setting and control. + $wp_customize->add_setting( 'color_scheme', array( + 'default' => 'default', + 'sanitize_callback' => 'twentysixteen_sanitize_color_scheme', + 'transport' => 'postMessage', + ) ); + + $wp_customize->add_control( 'color_scheme', array( + 'label' => __( 'Base Color Scheme', 'twentysixteen' ), + 'section' => 'colors', + 'type' => 'select', + 'choices' => twentysixteen_get_color_scheme_choices(), + 'priority' => 1, + ) ); + + // Add page background color setting and control. + $wp_customize->add_setting( 'page_background_color', array( + 'default' => $color_scheme[1], + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage', + ) ); + + $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'page_background_color', array( + 'label' => __( 'Page Background Color', 'twentysixteen' ), + 'section' => 'colors', + ) ) ); + + // Remove the core header textcolor control, as it shares the main text color. + $wp_customize->remove_control( 'header_textcolor' ); + + // Add link color setting and control. + $wp_customize->add_setting( 'link_color', array( + 'default' => $color_scheme[2], + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage', + ) ); + + $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'link_color', array( + 'label' => __( 'Link Color', 'twentysixteen' ), + 'section' => 'colors', + ) ) ); + + // Add main text color setting and control. + $wp_customize->add_setting( 'main_text_color', array( + 'default' => $color_scheme[3], + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage', + ) ); + + $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'main_text_color', array( + 'label' => __( 'Main Text Color', 'twentysixteen' ), + 'section' => 'colors', + ) ) ); + + // Add secondary text color setting and control. + $wp_customize->add_setting( 'secondary_text_color', array( + 'default' => $color_scheme[4], + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage', + ) ); + + $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'secondary_text_color', array( + 'label' => __( 'Secondary Text Color', 'twentysixteen' ), + 'section' => 'colors', + ) ) ); +} +add_action( 'customize_register', 'twentysixteen_customize_register', 11 ); + +/** + * Render the site title for the selective refresh partial. + * + * @since Twenty Sixteen 1.2 + * @see twentysixteen_customize_register() + * + * @return void + */ +function twentysixteen_customize_partial_blogname() { + bloginfo( 'name' ); +} + +/** + * Render the site tagline for the selective refresh partial. + * + * @since Twenty Sixteen 1.2 + * @see twentysixteen_customize_register() + * + * @return void + */ +function twentysixteen_customize_partial_blogdescription() { + bloginfo( 'description' ); +} + +/** + * Registers color schemes for Twenty Sixteen. + * + * Can be filtered with {@see 'twentysixteen_color_schemes'}. + * + * The order of colors in a colors array: + * 1. Main Background Color. + * 2. Page Background Color. + * 3. Link Color. + * 4. Main Text Color. + * 5. Secondary Text Color. + * + * @since Twenty Sixteen 1.0 + * + * @return array An associative array of color scheme options. + */ +function twentysixteen_get_color_schemes() { + /** + * Filter the color schemes registered for use with Twenty Sixteen. + * + * The default schemes include 'default', 'dark', 'gray', 'red', and 'yellow'. + * + * @since Twenty Sixteen 1.0 + * + * @param array $schemes { + * Associative array of color schemes data. + * + * @type array $slug { + * Associative array of information for setting up the color scheme. + * + * @type string $label Color scheme label. + * @type array $colors HEX codes for default colors prepended with a hash symbol ('#'). + * Colors are defined in the following order: Main background, page + * background, link, main text, secondary text. + * } + * } + */ + return apply_filters( 'twentysixteen_color_schemes', array( + 'default' => array( + 'label' => __( 'Default', 'twentysixteen' ), + 'colors' => array( + '#1a1a1a', + '#ffffff', + '#007acc', + '#1a1a1a', + '#686868', + ), + ), + 'dark' => array( + 'label' => __( 'Dark', 'twentysixteen' ), + 'colors' => array( + '#262626', + '#1a1a1a', + '#9adffd', + '#e5e5e5', + '#c1c1c1', + ), + ), + 'gray' => array( + 'label' => __( 'Gray', 'twentysixteen' ), + 'colors' => array( + '#616a73', + '#4d545c', + '#c7c7c7', + '#f2f2f2', + '#f2f2f2', + ), + ), + 'red' => array( + 'label' => __( 'Red', 'twentysixteen' ), + 'colors' => array( + '#ffffff', + '#ff675f', + '#640c1f', + '#402b30', + '#402b30', + ), + ), + 'yellow' => array( + 'label' => __( 'Yellow', 'twentysixteen' ), + 'colors' => array( + '#3b3721', + '#ffef8e', + '#774e24', + '#3b3721', + '#5b4d3e', + ), + ), + ) ); +} + +if ( ! function_exists( 'twentysixteen_get_color_scheme' ) ) : +/** + * Retrieves the current Twenty Sixteen color scheme. + * + * Create your own twentysixteen_get_color_scheme() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @return array An associative array of either the current or default color scheme HEX values. + */ +function twentysixteen_get_color_scheme() { + $color_scheme_option = get_theme_mod( 'color_scheme', 'default' ); + $color_schemes = twentysixteen_get_color_schemes(); + + if ( array_key_exists( $color_scheme_option, $color_schemes ) ) { + return $color_schemes[ $color_scheme_option ]['colors']; + } + + return $color_schemes['default']['colors']; +} +endif; // twentysixteen_get_color_scheme + +if ( ! function_exists( 'twentysixteen_get_color_scheme_choices' ) ) : +/** + * Retrieves an array of color scheme choices registered for Twenty Sixteen. + * + * Create your own twentysixteen_get_color_scheme_choices() function to override + * in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @return array Array of color schemes. + */ +function twentysixteen_get_color_scheme_choices() { + $color_schemes = twentysixteen_get_color_schemes(); + $color_scheme_control_options = array(); + + foreach ( $color_schemes as $color_scheme => $value ) { + $color_scheme_control_options[ $color_scheme ] = $value['label']; + } + + return $color_scheme_control_options; +} +endif; // twentysixteen_get_color_scheme_choices + + +if ( ! function_exists( 'twentysixteen_sanitize_color_scheme' ) ) : +/** + * Handles sanitization for Twenty Sixteen color schemes. + * + * Create your own twentysixteen_sanitize_color_scheme() function to override + * in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @param string $value Color scheme name value. + * @return string Color scheme name. + */ +function twentysixteen_sanitize_color_scheme( $value ) { + $color_schemes = twentysixteen_get_color_scheme_choices(); + + if ( ! array_key_exists( $value, $color_schemes ) ) { + return 'default'; + } + + return $value; +} +endif; // twentysixteen_sanitize_color_scheme + +/** + * Enqueues front-end CSS for color scheme. + * + * @since Twenty Sixteen 1.0 + * + * @see wp_add_inline_style() + */ +function twentysixteen_color_scheme_css() { + $color_scheme_option = get_theme_mod( 'color_scheme', 'default' ); + + // Don't do anything if the default color scheme is selected. + if ( 'default' === $color_scheme_option ) { + return; + } + + $color_scheme = twentysixteen_get_color_scheme(); + + // Convert main text hex color to rgba. + $color_textcolor_rgb = twentysixteen_hex2rgb( $color_scheme[3] ); + + // If the rgba values are empty return early. + if ( empty( $color_textcolor_rgb ) ) { + return; + } + + // If we get this far, we have a custom color scheme. + $colors = array( + 'background_color' => $color_scheme[0], + 'page_background_color' => $color_scheme[1], + 'link_color' => $color_scheme[2], + 'main_text_color' => $color_scheme[3], + 'secondary_text_color' => $color_scheme[4], + 'border_color' => vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.2)', $color_textcolor_rgb ), + + ); + + $color_scheme_css = twentysixteen_get_color_scheme_css( $colors ); + + wp_add_inline_style( 'twentysixteen-style', $color_scheme_css ); +} +add_action( 'wp_enqueue_scripts', 'twentysixteen_color_scheme_css' ); + +/** + * Binds the JS listener to make Customizer color_scheme control. + * + * Passes color scheme data as colorScheme global. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_customize_control_js() { + wp_enqueue_script( 'color-scheme-control', get_template_directory_uri() . '/js/color-scheme-control.js', array( 'customize-controls', 'iris', 'underscore', 'wp-util' ), '20160412', true ); + wp_localize_script( 'color-scheme-control', 'colorScheme', twentysixteen_get_color_schemes() ); +} +add_action( 'customize_controls_enqueue_scripts', 'twentysixteen_customize_control_js' ); + +/** + * Binds JS handlers to make the Customizer preview reload changes asynchronously. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_customize_preview_js() { + wp_enqueue_script( 'twentysixteen-customize-preview', get_template_directory_uri() . '/js/customize-preview.js', array( 'customize-preview' ), '20160412', true ); +} +add_action( 'customize_preview_init', 'twentysixteen_customize_preview_js' ); + +/** + * Returns CSS for the color schemes. + * + * @since Twenty Sixteen 1.0 + * + * @param array $colors Color scheme colors. + * @return string Color scheme CSS. + */ +function twentysixteen_get_color_scheme_css( $colors ) { + $colors = wp_parse_args( $colors, array( + 'background_color' => '', + 'page_background_color' => '', + 'link_color' => '', + 'main_text_color' => '', + 'secondary_text_color' => '', + 'border_color' => '', + ) ); + + return << .page-links-title, + .comment-author, + .comment-reply-title small a:hover, + .comment-reply-title small a:focus { + color: {$colors['main_text_color']}; + } + + blockquote, + .menu-toggle.toggled-on, + .menu-toggle.toggled-on:hover, + .menu-toggle.toggled-on:focus, + .post-navigation, + .post-navigation div + div, + .pagination, + .widget, + .page-header, + .page-links a, + .comments-title, + .comment-reply-title { + border-color: {$colors['main_text_color']}; + } + + button, + button[disabled]:hover, + button[disabled]:focus, + input[type="button"], + input[type="button"][disabled]:hover, + input[type="button"][disabled]:focus, + input[type="reset"], + input[type="reset"][disabled]:hover, + input[type="reset"][disabled]:focus, + input[type="submit"], + input[type="submit"][disabled]:hover, + input[type="submit"][disabled]:focus, + .menu-toggle.toggled-on, + .menu-toggle.toggled-on:hover, + .menu-toggle.toggled-on:focus, + .pagination:before, + .pagination:after, + .pagination .prev, + .pagination .next, + .page-links a { + background-color: {$colors['main_text_color']}; + } + + /* Secondary Text Color */ + + /** + * IE8 and earlier will drop any block with CSS3 selectors. + * Do not combine these styles with the next block. + */ + body:not(.search-results) .entry-summary { + color: {$colors['secondary_text_color']}; + } + + blockquote, + .post-password-form label, + a:hover, + a:focus, + a:active, + .post-navigation .meta-nav, + .image-navigation, + .comment-navigation, + .widget_recent_entries .post-date, + .widget_rss .rss-date, + .widget_rss cite, + .site-description, + .author-bio, + .entry-footer, + .entry-footer a, + .sticky-post, + .taxonomy-description, + .entry-caption, + .comment-metadata, + .pingback .edit-link, + .comment-metadata a, + .pingback .comment-edit-link, + .comment-form label, + .comment-notes, + .comment-awaiting-moderation, + .logged-in-as, + .form-allowed-tags, + .site-info, + .site-info a, + .wp-caption .wp-caption-text, + .gallery-caption, + .widecolumn label, + .widecolumn .mu_register label { + color: {$colors['secondary_text_color']}; + } + + .widget_calendar tbody a:hover, + .widget_calendar tbody a:focus { + background-color: {$colors['secondary_text_color']}; + } + + /* Border Color */ + fieldset, + pre, + abbr, + acronym, + table, + th, + td, + input[type="text"], + input[type="email"], + input[type="url"], + input[type="password"], + input[type="search"], + textarea, + .main-navigation li, + .main-navigation .primary-menu, + .menu-toggle, + .dropdown-toggle:after, + .social-navigation a, + .image-navigation, + .comment-navigation, + .tagcloud a, + .entry-content, + .entry-summary, + .page-links a, + .page-links > span, + .comment-list article, + .comment-list .pingback, + .comment-list .trackback, + .comment-reply-link, + .no-comments, + .widecolumn .mu_register .mu_alert { + border-color: {$colors['main_text_color']}; /* Fallback for IE7 and IE8 */ + border-color: {$colors['border_color']}; + } + + hr, + code { + background-color: {$colors['main_text_color']}; /* Fallback for IE7 and IE8 */ + background-color: {$colors['border_color']}; + } + + @media screen and (min-width: 56.875em) { + .main-navigation li:hover > a, + .main-navigation li.focus > a { + color: {$colors['link_color']}; + } + + .main-navigation ul ul, + .main-navigation ul ul li { + border-color: {$colors['border_color']}; + } + + .main-navigation ul ul:before { + border-top-color: {$colors['border_color']}; + border-bottom-color: {$colors['border_color']}; + } + + .main-navigation ul ul li { + background-color: {$colors['page_background_color']}; + } + + .main-navigation ul ul:after { + border-top-color: {$colors['page_background_color']}; + border-bottom-color: {$colors['page_background_color']}; + } + } + +CSS; +} + + +/** + * Outputs an Underscore template for generating CSS for the color scheme. + * + * The template generates the css dynamically for instant display in the + * Customizer preview. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_color_scheme_css_template() { + $colors = array( + 'background_color' => '{{ data.background_color }}', + 'page_background_color' => '{{ data.page_background_color }}', + 'link_color' => '{{ data.link_color }}', + 'main_text_color' => '{{ data.main_text_color }}', + 'secondary_text_color' => '{{ data.secondary_text_color }}', + 'border_color' => '{{ data.border_color }}', + ); + ?> + + a, + .main-navigation li.focus > a { + color: %1$s; + } + } + '; + + wp_add_inline_style( 'twentysixteen-style', sprintf( $css, $link_color ) ); +} +add_action( 'wp_enqueue_scripts', 'twentysixteen_link_color_css', 11 ); + +/** + * Enqueues front-end CSS for the main text color. + * + * @since Twenty Sixteen 1.0 + * + * @see wp_add_inline_style() + */ +function twentysixteen_main_text_color_css() { + $color_scheme = twentysixteen_get_color_scheme(); + $default_color = $color_scheme[3]; + $main_text_color = get_theme_mod( 'main_text_color', $default_color ); + + // Don't do anything if the current color is the default. + if ( $main_text_color === $default_color ) { + return; + } + + // Convert main text hex color to rgba. + $main_text_color_rgb = twentysixteen_hex2rgb( $main_text_color ); + + // If the rgba values are empty return early. + if ( empty( $main_text_color_rgb ) ) { + return; + } + + // If we get this far, we have a custom color scheme. + $border_color = vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.2)', $main_text_color_rgb ); + + $css = ' + /* Custom Main Text Color */ + body, + blockquote cite, + blockquote small, + .main-navigation a, + .menu-toggle, + .dropdown-toggle, + .social-navigation a, + .post-navigation a, + .pagination a:hover, + .pagination a:focus, + .widget-title a, + .site-branding .site-title a, + .entry-title a, + .page-links > .page-links-title, + .comment-author, + .comment-reply-title small a:hover, + .comment-reply-title small a:focus { + color: %1$s + } + + blockquote, + .menu-toggle.toggled-on, + .menu-toggle.toggled-on:hover, + .menu-toggle.toggled-on:focus, + .post-navigation, + .post-navigation div + div, + .pagination, + .widget, + .page-header, + .page-links a, + .comments-title, + .comment-reply-title { + border-color: %1$s; + } + + button, + button[disabled]:hover, + button[disabled]:focus, + input[type="button"], + input[type="button"][disabled]:hover, + input[type="button"][disabled]:focus, + input[type="reset"], + input[type="reset"][disabled]:hover, + input[type="reset"][disabled]:focus, + input[type="submit"], + input[type="submit"][disabled]:hover, + input[type="submit"][disabled]:focus, + .menu-toggle.toggled-on, + .menu-toggle.toggled-on:hover, + .menu-toggle.toggled-on:focus, + .pagination:before, + .pagination:after, + .pagination .prev, + .pagination .next, + .page-links a { + background-color: %1$s; + } + + /* Border Color */ + fieldset, + pre, + abbr, + acronym, + table, + th, + td, + input[type="text"], + input[type="email"], + input[type="url"], + input[type="password"], + input[type="search"], + textarea, + .main-navigation li, + .main-navigation .primary-menu, + .menu-toggle, + .dropdown-toggle:after, + .social-navigation a, + .image-navigation, + .comment-navigation, + .tagcloud a, + .entry-content, + .entry-summary, + .page-links a, + .page-links > span, + .comment-list article, + .comment-list .pingback, + .comment-list .trackback, + .comment-reply-link, + .no-comments, + .widecolumn .mu_register .mu_alert { + border-color: %1$s; /* Fallback for IE7 and IE8 */ + border-color: %2$s; + } + + hr, + code { + background-color: %1$s; /* Fallback for IE7 and IE8 */ + background-color: %2$s; + } + + @media screen and (min-width: 56.875em) { + .main-navigation ul ul, + .main-navigation ul ul li { + border-color: %2$s; + } + + .main-navigation ul ul:before { + border-top-color: %2$s; + border-bottom-color: %2$s; + } + } + '; + + wp_add_inline_style( 'twentysixteen-style', sprintf( $css, $main_text_color, $border_color ) ); +} +add_action( 'wp_enqueue_scripts', 'twentysixteen_main_text_color_css', 11 ); + +/** + * Enqueues front-end CSS for the secondary text color. + * + * @since Twenty Sixteen 1.0 + * + * @see wp_add_inline_style() + */ +function twentysixteen_secondary_text_color_css() { + $color_scheme = twentysixteen_get_color_scheme(); + $default_color = $color_scheme[4]; + $secondary_text_color = get_theme_mod( 'secondary_text_color', $default_color ); + + // Don't do anything if the current color is the default. + if ( $secondary_text_color === $default_color ) { + return; + } + + $css = ' + /* Custom Secondary Text Color */ + + /** + * IE8 and earlier will drop any block with CSS3 selectors. + * Do not combine these styles with the next block. + */ + body:not(.search-results) .entry-summary { + color: %1$s; + } + + blockquote, + .post-password-form label, + a:hover, + a:focus, + a:active, + .post-navigation .meta-nav, + .image-navigation, + .comment-navigation, + .widget_recent_entries .post-date, + .widget_rss .rss-date, + .widget_rss cite, + .site-description, + .author-bio, + .entry-footer, + .entry-footer a, + .sticky-post, + .taxonomy-description, + .entry-caption, + .comment-metadata, + .pingback .edit-link, + .comment-metadata a, + .pingback .comment-edit-link, + .comment-form label, + .comment-notes, + .comment-awaiting-moderation, + .logged-in-as, + .form-allowed-tags, + .site-info, + .site-info a, + .wp-caption .wp-caption-text, + .gallery-caption, + .widecolumn label, + .widecolumn .mu_register label { + color: %1$s; + } + + .widget_calendar tbody a:hover, + .widget_calendar tbody a:focus { + background-color: %1$s; + } + '; + + wp_add_inline_style( 'twentysixteen-style', sprintf( $css, $secondary_text_color ) ); +} +add_action( 'wp_enqueue_scripts', 'twentysixteen_secondary_text_color_css', 11 ); diff --git a/inc/template-tags.php b/inc/template-tags.php new file mode 100644 index 0000000..bc8aaec --- /dev/null +++ b/inc/template-tags.php @@ -0,0 +1,262 @@ +%1$s%4$s', + get_avatar( get_the_author_meta( 'user_email' ), $author_avatar_size ), + _x( 'Author', 'Used before post author name.', 'twentysixteen' ), + esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ), + get_the_author() + ); + } + + if ( in_array( get_post_type(), array( 'post', 'attachment' ) ) ) { + twentysixteen_entry_date(); + } + + $format = get_post_format(); + if ( current_theme_supports( 'post-formats', $format ) ) { + printf( '%1$s%3$s', + sprintf( '%s ', _x( 'Format', 'Used before post format.', 'twentysixteen' ) ), + esc_url( get_post_format_link( $format ) ), + get_post_format_string( $format ) + ); + } + + edit_post_link( + sprintf( + /* translators: %s: Name of current post */ + __( 'Edit', 'twentysixteen' ), + get_the_title() + ), + '', + '' + ); + + +} +endif; + +if ( ! function_exists( 'twentysixteen_entry_date' ) ) : +/** + * Prints HTML with date information for current post. + * + * Create your own twentysixteen_entry_date() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_entry_date() { + $time_string = ''; + + if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) { + $time_string = ''; + } + + $time_string = sprintf( $time_string, + esc_attr( get_the_date( 'c' ) ), + get_the_date(), + esc_attr( get_the_modified_date( 'c' ) ), + get_the_modified_date() + ); + + printf( '%3$s', + _x( 'Posted on', 'Used before publish date.', 'bengoldsworthy' ), + esc_url( get_permalink() ), + $time_string + ); +} +endif; + +if ( ! function_exists( 'twentysixteen_entry_taxonomies' ) ) : +/** + * Prints HTML with category and tags for current post. + * + * Create your own twentysixteen_entry_taxonomies() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_entry_taxonomies() { + $categories_list = get_the_category_list( _x( ', ', 'Used between list items, there is a space after the comma.', 'twentysixteen' ) ); + if ( $categories_list && twentysixteen_categorized_blog() ) { + printf( '%1$s %2$s', + _x( 'Categories', 'Used before category names.', 'twentysixteen' ), + $categories_list + ); + } + + $tags_list = get_the_tag_list( '', _x( ', ', 'Used between list items, there is a space after the comma.', 'twentysixteen' ) ); + if ( $tags_list ) { + printf( '%1$s %2$s', + _x( 'Tags', 'Used before tag names.', 'twentysixteen' ), + $tags_list + ); + } +} +endif; + +if ( ! function_exists( 'twentysixteen_post_thumbnail' ) ) : +/** + * Displays an optional post thumbnail. + * + * Wraps the post thumbnail in an anchor element on index views, or a div + * element when on single views. + * + * Create your own twentysixteen_post_thumbnail() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_post_thumbnail() { + if ( post_password_required() || is_attachment() || ! has_post_thumbnail() ) { + return; + } + + if ( is_singular() ) : + ?> + +
+
', '' ); ?>
+ +
+ + + + + + + +
+ +
+ %2$s', + esc_url( get_permalink( get_the_ID() ) ), + /* translators: %s: Name of current post */ + sprintf( __( 'Continue reading "%s"', 'twentysixteen' ), get_the_title( get_the_ID() ) ) + ); + return ' … ' . $link; +} +add_filter( 'excerpt_more', 'twentysixteen_excerpt_more' ); +endif; + +/** + * Determines whether blog/site has more than one category. + * + * Create your own twentysixteen_categorized_blog() function to override in a child theme. + * + * @since Twenty Sixteen 1.0 + * + * @return bool True if there is more than one category, false otherwise. + */ +function twentysixteen_categorized_blog() { + if ( false === ( $all_the_cool_cats = get_transient( 'twentysixteen_categories' ) ) ) { + // Create an array of all the categories that are attached to posts. + $all_the_cool_cats = get_categories( array( + 'fields' => 'ids', + // We only need to know if there is more than one category. + 'number' => 2, + ) ); + + // Count the number of categories that are attached to the posts. + $all_the_cool_cats = count( $all_the_cool_cats ); + + set_transient( 'twentysixteen_categories', $all_the_cool_cats ); + } + + if ( $all_the_cool_cats > 1 ) { + // This blog has more than 1 category so twentysixteen_categorized_blog should return true. + return true; + } else { + // This blog has only 1 category so twentysixteen_categorized_blog should return false. + return false; + } +} + +/** + * Flushes out the transients used in twentysixteen_categorized_blog(). + * + * @since Twenty Sixteen 1.0 + */ +function twentysixteen_category_transient_flusher() { + if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { + return; + } + // Like, beat it. Dig? + delete_transient( 'twentysixteen_categories' ); +} +add_action( 'edit_category', 'twentysixteen_category_transient_flusher' ); +add_action( 'save_post', 'twentysixteen_category_transient_flusher' ); + +if ( ! function_exists( 'twentysixteen_the_custom_logo' ) ) : +/** + * Displays the optional custom logo. + * + * Does nothing if the custom logo is not available. + * + * @since Twenty Sixteen 1.2 + */ +function twentysixteen_the_custom_logo() { + if ( function_exists( 'the_custom_logo' ) ) { + the_custom_logo(); + } +} +endif; diff --git a/index.php b/index.php new file mode 100644 index 0000000..8709c48 --- /dev/null +++ b/index.php @@ -0,0 +1,15 @@ + + + + +

Oh dear, there should really be a template file here.

+ + diff --git a/js/color-scheme-control.js b/js/color-scheme-control.js new file mode 100644 index 0000000..e65b5bd --- /dev/null +++ b/js/color-scheme-control.js @@ -0,0 +1,96 @@ +/* global colorScheme, Color */ +/** + * Add a listener to the Color Scheme control to update other color controls to new values/defaults. + * Also trigger an update of the Color Scheme CSS when a color is changed. + */ + +( function( api ) { + var cssTemplate = wp.template( 'twentysixteen-color-scheme' ), + colorSchemeKeys = [ + 'background_color', + 'page_background_color', + 'link_color', + 'main_text_color', + 'secondary_text_color' + ], + colorSettings = [ + 'background_color', + 'page_background_color', + 'link_color', + 'main_text_color', + 'secondary_text_color' + ]; + + api.controlConstructor.select = api.Control.extend( { + ready: function() { + if ( 'color_scheme' === this.id ) { + this.setting.bind( 'change', function( value ) { + var colors = colorScheme[value].colors; + + // Update Background Color. + var color = colors[0]; + api( 'background_color' ).set( color ); + api.control( 'background_color' ).container.find( '.color-picker-hex' ) + .data( 'data-default-color', color ) + .wpColorPicker( 'defaultColor', color ); + + // Update Page Background Color. + color = colors[1]; + api( 'page_background_color' ).set( color ); + api.control( 'page_background_color' ).container.find( '.color-picker-hex' ) + .data( 'data-default-color', color ) + .wpColorPicker( 'defaultColor', color ); + + // Update Link Color. + color = colors[2]; + api( 'link_color' ).set( color ); + api.control( 'link_color' ).container.find( '.color-picker-hex' ) + .data( 'data-default-color', color ) + .wpColorPicker( 'defaultColor', color ); + + // Update Main Text Color. + color = colors[3]; + api( 'main_text_color' ).set( color ); + api.control( 'main_text_color' ).container.find( '.color-picker-hex' ) + .data( 'data-default-color', color ) + .wpColorPicker( 'defaultColor', color ); + + // Update Secondary Text Color. + color = colors[4]; + api( 'secondary_text_color' ).set( color ); + api.control( 'secondary_text_color' ).container.find( '.color-picker-hex' ) + .data( 'data-default-color', color ) + .wpColorPicker( 'defaultColor', color ); + } ); + } + } + } ); + + // Generate the CSS for the current Color Scheme. + function updateCSS() { + var scheme = api( 'color_scheme' )(), + css, + colors = _.object( colorSchemeKeys, colorScheme[ scheme ].colors ); + + // Merge in color scheme overrides. + _.each( colorSettings, function( setting ) { + colors[ setting ] = api( setting )(); + } ); + + // Add additional color. + // jscs:disable + colors.border_color = Color( colors.main_text_color ).toCSS( 'rgba', 0.2 ); + // jscs:enable + + css = cssTemplate( colors ); + + api.previewer.send( 'update-color-scheme-css', css ); + } + + // Update the CSS whenever a color setting is changed. + _.each( colorSettings, function( setting ) { + api( setting, function( setting ) { + setting.bind( updateCSS ); + } ); + } ); +} )( wp.customize ); diff --git a/js/customize-preview.js b/js/customize-preview.js new file mode 100644 index 0000000..fc99333 --- /dev/null +++ b/js/customize-preview.js @@ -0,0 +1,41 @@ +/** + * Live-update changed settings in real time in the Customizer preview. + */ + +( function( $ ) { + var style = $( '#twentysixteen-color-scheme-css' ), + api = wp.customize; + + if ( ! style.length ) { + style = $( 'head' ).append( ''; + return parent.insertBefore(p.lastChild, parent.firstChild); + } + + /** + * Returns the value of `html5.elements` as an array. + * @private + * @returns {Array} An array of shived element node names. + */ + function getElements() { + var elements = html5.elements; + return typeof elements == 'string' ? elements.split(' ') : elements; + } + + /** + * Extends the built-in list of html5 elements + * @memberOf html5 + * @param {String|Array} newElements whitespace separated list or array of new element names to shiv + * @param {Document} ownerDocument The context document. + */ + function addElements(newElements, ownerDocument) { + var elements = html5.elements; + if(typeof elements != 'string'){ + elements = elements.join(' '); + } + if(typeof newElements != 'string'){ + newElements = newElements.join(' '); + } + html5.elements = elements +' '+ newElements; + shivDocument(ownerDocument); + } + + /** + * Returns the data associated to the given document + * @private + * @param {Document} ownerDocument The document. + * @returns {Object} An object of data. + */ + function getExpandoData(ownerDocument) { + var data = expandoData[ownerDocument[expando]]; + if (!data) { + data = {}; + expanID++; + ownerDocument[expando] = expanID; + expandoData[expanID] = data; + } + return data; + } + + /** + * returns a shived element for the given nodeName and document + * @memberOf html5 + * @param {String} nodeName name of the element + * @param {Document|DocumentFragment} ownerDocument The context document. + * @returns {Object} The shived element. + */ + function createElement(nodeName, ownerDocument, data){ + if (!ownerDocument) { + ownerDocument = document; + } + if(supportsUnknownElements){ + return ownerDocument.createElement(nodeName); + } + if (!data) { + data = getExpandoData(ownerDocument); + } + var node; + + if (data.cache[nodeName]) { + node = data.cache[nodeName].cloneNode(); + } else if (saveClones.test(nodeName)) { + node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode(); + } else { + node = data.createElem(nodeName); + } + + // Avoid adding some elements to fragments in IE < 9 because + // * Attributes like `name` or `type` cannot be set/changed once an element + // is inserted into a document/fragment + // * Link elements with `src` attributes that are inaccessible, as with + // a 403 response, will cause the tab/window to crash + // * Script elements appended to fragments will execute when their `src` + // or `text` property is set + return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node; + } + + /** + * returns a shived DocumentFragment for the given document + * @memberOf html5 + * @param {Document} ownerDocument The context document. + * @returns {Object} The shived DocumentFragment. + */ + function createDocumentFragment(ownerDocument, data){ + if (!ownerDocument) { + ownerDocument = document; + } + if(supportsUnknownElements){ + return ownerDocument.createDocumentFragment(); + } + data = data || getExpandoData(ownerDocument); + var clone = data.frag.cloneNode(), + i = 0, + elems = getElements(), + l = elems.length; + for(;i + * This is a v3 implementation of the + * v2 MarkerClusterer. + */ + +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/** + * A Marker Clusterer that clusters markers. + * + * @param {google.maps.Map} map The Google map to attach to. + * @param {Array.=} opt_markers Optional markers to add to + * the cluster. + * @param {Object=} opt_options support the following options: + * 'gridSize': (number) The grid size of a cluster in pixels. + * 'maxZoom': (number) The maximum zoom level that a marker can be part of a + * cluster. + * 'zoomOnClick': (boolean) Whether the default behaviour of clicking on a + * cluster is to zoom into it. + * 'imagePath': (string) The base URL where the images representing + * clusters will be found. The full URL will be: + * {imagePath}[1-5].{imageExtension} + * Default: '../images/m'. + * 'imageExtension': (string) The suffix for images URL representing + * clusters will be found. See _imagePath_ for details. + * Default: 'png'. + * 'averageCenter': (boolean) Wether the center of each cluster should be + * the average of all markers in the cluster. + * 'minimumClusterSize': (number) The minimum number of markers to be in a + * cluster before the markers are hidden and a count + * is shown. + * 'styles': (object) An object that has style properties: + * 'url': (string) The image url. + * 'height': (number) The image height. + * 'width': (number) The image width. + * 'anchor': (Array) The anchor position of the label text. + * 'textColor': (string) The text color. + * 'textSize': (number) The text size. + * 'backgroundPosition': (string) The position of the backgound x, y. + * @constructor + * @extends google.maps.OverlayView + */ +function MarkerClusterer(map, opt_markers, opt_options) { + // MarkerClusterer implements google.maps.OverlayView interface. We use the + // extend function to extend MarkerClusterer with google.maps.OverlayView + // because it might not always be available when the code is defined so we + // look for it at the last possible moment. If it doesn't exist now then + // there is no point going ahead :) + this.extend(MarkerClusterer, google.maps.OverlayView); + this.map_ = map; + + /** + * @type {Array.} + * @private + */ + this.markers_ = []; + + /** + * @type {Array.} + */ + this.clusters_ = []; + + this.sizes = [53, 56, 66, 78, 90]; + + /** + * @private + */ + this.styles_ = []; + + /** + * @type {boolean} + * @private + */ + this.ready_ = false; + + var options = opt_options || {}; + + /** + * @type {number} + * @private + */ + this.gridSize_ = options['gridSize'] || 60; + + /** + * @private + */ + this.minClusterSize_ = options['minimumClusterSize'] || 2; + + + /** + * @type {?number} + * @private + */ + this.maxZoom_ = options['maxZoom'] || null; + + this.styles_ = options['styles'] || []; + + /** + * @type {string} + * @private + */ + this.imagePath_ = options['imagePath'] || + this.MARKER_CLUSTER_IMAGE_PATH_; + + /** + * @type {string} + * @private + */ + this.imageExtension_ = options['imageExtension'] || + this.MARKER_CLUSTER_IMAGE_EXTENSION_; + + /** + * @type {boolean} + * @private + */ + this.zoomOnClick_ = true; + + if (options['zoomOnClick'] != undefined) { + this.zoomOnClick_ = options['zoomOnClick']; + } + + /** + * @type {boolean} + * @private + */ + this.averageCenter_ = false; + + if (options['averageCenter'] != undefined) { + this.averageCenter_ = options['averageCenter']; + } + + this.setupStyles_(); + + this.setMap(map); + + /** + * @type {number} + * @private + */ + this.prevZoom_ = this.map_.getZoom(); + + // Add the map event listeners + var that = this; + google.maps.event.addListener(this.map_, 'zoom_changed', function() { + // Determines map type and prevent illegal zoom levels + var zoom = that.map_.getZoom(); + var minZoom = that.map_.minZoom || 0; + var maxZoom = Math.min(that.map_.maxZoom || 100, + that.map_.mapTypes[that.map_.getMapTypeId()].maxZoom); + zoom = Math.min(Math.max(zoom,minZoom),maxZoom); + + if (that.prevZoom_ != zoom) { + that.prevZoom_ = zoom; + that.resetViewport(); + } + }); + + google.maps.event.addListener(this.map_, 'idle', function() { + that.redraw(); + }); + + // Finally, add the markers + if (opt_markers && (opt_markers.length || Object.keys(opt_markers).length)) { + this.addMarkers(opt_markers, false); + } +} + + +/** + * The marker cluster image path. + * + * @type {string} + * @private + */ +MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PATH_ = '../images/m'; + + +/** + * The marker cluster image path. + * + * @type {string} + * @private + */ +MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_EXTENSION_ = 'png'; + + +/** + * Extends a objects prototype by anothers. + * + * @param {Object} obj1 The object to be extended. + * @param {Object} obj2 The object to extend with. + * @return {Object} The new extended object. + * @ignore + */ +MarkerClusterer.prototype.extend = function(obj1, obj2) { + return (function(object) { + for (var property in object.prototype) { + this.prototype[property] = object.prototype[property]; + } + return this; + }).apply(obj1, [obj2]); +}; + + +/** + * Implementaion of the interface method. + * @ignore + */ +MarkerClusterer.prototype.onAdd = function() { + this.setReady_(true); +}; + +/** + * Implementaion of the interface method. + * @ignore + */ +MarkerClusterer.prototype.draw = function() {}; + +/** + * Sets up the styles object. + * + * @private + */ +MarkerClusterer.prototype.setupStyles_ = function() { + if (this.styles_.length) { + return; + } + + for (var i = 0, size; size = this.sizes[i]; i++) { + this.styles_.push({ + url: this.imagePath_ + (i + 1) + '.' + this.imageExtension_, + height: size, + width: size + }); + } +}; + +/** + * Fit the map to the bounds of the markers in the clusterer. + */ +MarkerClusterer.prototype.fitMapToMarkers = function() { + var markers = this.getMarkers(); + var bounds = new google.maps.LatLngBounds(); + for (var i = 0, marker; marker = markers[i]; i++) { + bounds.extend(marker.getPosition()); + } + + this.map_.fitBounds(bounds); +}; + + +/** + * Sets the styles. + * + * @param {Object} styles The style to set. + */ +MarkerClusterer.prototype.setStyles = function(styles) { + this.styles_ = styles; +}; + + +/** + * Gets the styles. + * + * @return {Object} The styles object. + */ +MarkerClusterer.prototype.getStyles = function() { + return this.styles_; +}; + + +/** + * Whether zoom on click is set. + * + * @return {boolean} True if zoomOnClick_ is set. + */ +MarkerClusterer.prototype.isZoomOnClick = function() { + return this.zoomOnClick_; +}; + +/** + * Whether average center is set. + * + * @return {boolean} True if averageCenter_ is set. + */ +MarkerClusterer.prototype.isAverageCenter = function() { + return this.averageCenter_; +}; + + +/** + * Returns the array of markers in the clusterer. + * + * @return {Array.} The markers. + */ +MarkerClusterer.prototype.getMarkers = function() { + return this.markers_; +}; + + +/** + * Returns the number of markers in the clusterer + * + * @return {Number} The number of markers. + */ +MarkerClusterer.prototype.getTotalMarkers = function() { + return this.markers_.length; +}; + + +/** + * Sets the max zoom for the clusterer. + * + * @param {number} maxZoom The max zoom level. + */ +MarkerClusterer.prototype.setMaxZoom = function(maxZoom) { + this.maxZoom_ = maxZoom; +}; + + +/** + * Gets the max zoom for the clusterer. + * + * @return {number} The max zoom level. + */ +MarkerClusterer.prototype.getMaxZoom = function() { + return this.maxZoom_; +}; + + +/** + * The function for calculating the cluster icon image. + * + * @param {Array.} markers The markers in the clusterer. + * @param {number} numStyles The number of styles available. + * @return {Object} A object properties: 'text' (string) and 'index' (number). + * @private + */ +MarkerClusterer.prototype.calculator_ = function(markers, numStyles) { + var index = 0; + var count = markers.length; + var dv = count; + while (dv !== 0) { + dv = parseInt(dv / 10, 10); + index++; + } + + index = Math.min(index, numStyles); + return { + text: count, + index: index + }; +}; + + +/** + * Set the calculator function. + * + * @param {function(Array, number)} calculator The function to set as the + * calculator. The function should return a object properties: + * 'text' (string) and 'index' (number). + * + */ +MarkerClusterer.prototype.setCalculator = function(calculator) { + this.calculator_ = calculator; +}; + + +/** + * Get the calculator function. + * + * @return {function(Array, number)} the calculator function. + */ +MarkerClusterer.prototype.getCalculator = function() { + return this.calculator_; +}; + + +/** + * Add an array of markers to the clusterer. + * + * @param {Array.} markers The markers to add. + * @param {boolean=} opt_nodraw Whether to redraw the clusters. + */ +MarkerClusterer.prototype.addMarkers = function(markers, opt_nodraw) { + if (markers.length) { + for (var i = 0, marker; marker = markers[i]; i++) { + this.pushMarkerTo_(marker); + } + } else if (Object.keys(markers).length) { + for (var marker in markers) { + this.pushMarkerTo_(markers[marker]); + } + } + if (!opt_nodraw) { + this.redraw(); + } +}; + + +/** + * Pushes a marker to the clusterer. + * + * @param {google.maps.Marker} marker The marker to add. + * @private + */ +MarkerClusterer.prototype.pushMarkerTo_ = function(marker) { + marker.isAdded = false; + if (marker['draggable']) { + // If the marker is draggable add a listener so we update the clusters on + // the drag end. + var that = this; + google.maps.event.addListener(marker, 'dragend', function() { + marker.isAdded = false; + that.repaint(); + }); + } + this.markers_.push(marker); +}; + + +/** + * Adds a marker to the clusterer and redraws if needed. + * + * @param {google.maps.Marker} marker The marker to add. + * @param {boolean=} opt_nodraw Whether to redraw the clusters. + */ +MarkerClusterer.prototype.addMarker = function(marker, opt_nodraw) { + this.pushMarkerTo_(marker); + if (!opt_nodraw) { + this.redraw(); + } +}; + + +/** + * Removes a marker and returns true if removed, false if not + * + * @param {google.maps.Marker} marker The marker to remove + * @return {boolean} Whether the marker was removed or not + * @private + */ +MarkerClusterer.prototype.removeMarker_ = function(marker) { + var index = -1; + if (this.markers_.indexOf) { + index = this.markers_.indexOf(marker); + } else { + for (var i = 0, m; m = this.markers_[i]; i++) { + if (m == marker) { + index = i; + break; + } + } + } + + if (index == -1) { + // Marker is not in our list of markers. + return false; + } + + marker.setMap(null); + + this.markers_.splice(index, 1); + + return true; +}; + + +/** + * Remove a marker from the cluster. + * + * @param {google.maps.Marker} marker The marker to remove. + * @param {boolean=} opt_nodraw Optional boolean to force no redraw. + * @return {boolean} True if the marker was removed. + */ +MarkerClusterer.prototype.removeMarker = function(marker, opt_nodraw) { + var removed = this.removeMarker_(marker); + + if (!opt_nodraw && removed) { + this.resetViewport(); + this.redraw(); + return true; + } else { + return false; + } +}; + + +/** + * Removes an array of markers from the cluster. + * + * @param {Array.} markers The markers to remove. + * @param {boolean=} opt_nodraw Optional boolean to force no redraw. + */ +MarkerClusterer.prototype.removeMarkers = function(markers, opt_nodraw) { + var removed = false; + + for (var i = 0, marker; marker = markers[i]; i++) { + var r = this.removeMarker_(marker); + removed = removed || r; + } + + if (!opt_nodraw && removed) { + this.resetViewport(); + this.redraw(); + return true; + } +}; + + +/** + * Sets the clusterer's ready state. + * + * @param {boolean} ready The state. + * @private + */ +MarkerClusterer.prototype.setReady_ = function(ready) { + if (!this.ready_) { + this.ready_ = ready; + this.createClusters_(); + } +}; + + +/** + * Returns the number of clusters in the clusterer. + * + * @return {number} The number of clusters. + */ +MarkerClusterer.prototype.getTotalClusters = function() { + return this.clusters_.length; +}; + + +/** + * Returns the google map that the clusterer is associated with. + * + * @return {google.maps.Map} The map. + */ +MarkerClusterer.prototype.getMap = function() { + return this.map_; +}; + + +/** + * Sets the google map that the clusterer is associated with. + * + * @param {google.maps.Map} map The map. + */ +MarkerClusterer.prototype.setMap = function(map) { + this.map_ = map; +}; + + +/** + * Returns the size of the grid. + * + * @return {number} The grid size. + */ +MarkerClusterer.prototype.getGridSize = function() { + return this.gridSize_; +}; + + +/** + * Sets the size of the grid. + * + * @param {number} size The grid size. + */ +MarkerClusterer.prototype.setGridSize = function(size) { + this.gridSize_ = size; +}; + + +/** + * Returns the min cluster size. + * + * @return {number} The grid size. + */ +MarkerClusterer.prototype.getMinClusterSize = function() { + return this.minClusterSize_; +}; + +/** + * Sets the min cluster size. + * + * @param {number} size The grid size. + */ +MarkerClusterer.prototype.setMinClusterSize = function(size) { + this.minClusterSize_ = size; +}; + + +/** + * Extends a bounds object by the grid size. + * + * @param {google.maps.LatLngBounds} bounds The bounds to extend. + * @return {google.maps.LatLngBounds} The extended bounds. + */ +MarkerClusterer.prototype.getExtendedBounds = function(bounds) { + var projection = this.getProjection(); + + // Turn the bounds into latlng. + var tr = new google.maps.LatLng(bounds.getNorthEast().lat(), + bounds.getNorthEast().lng()); + var bl = new google.maps.LatLng(bounds.getSouthWest().lat(), + bounds.getSouthWest().lng()); + + // Convert the points to pixels and the extend out by the grid size. + var trPix = projection.fromLatLngToDivPixel(tr); + trPix.x += this.gridSize_; + trPix.y -= this.gridSize_; + + var blPix = projection.fromLatLngToDivPixel(bl); + blPix.x -= this.gridSize_; + blPix.y += this.gridSize_; + + // Convert the pixel points back to LatLng + var ne = projection.fromDivPixelToLatLng(trPix); + var sw = projection.fromDivPixelToLatLng(blPix); + + // Extend the bounds to contain the new bounds. + bounds.extend(ne); + bounds.extend(sw); + + return bounds; +}; + + +/** + * Determins if a marker is contained in a bounds. + * + * @param {google.maps.Marker} marker The marker to check. + * @param {google.maps.LatLngBounds} bounds The bounds to check against. + * @return {boolean} True if the marker is in the bounds. + * @private + */ +MarkerClusterer.prototype.isMarkerInBounds_ = function(marker, bounds) { + return bounds.contains(marker.getPosition()); +}; + + +/** + * Clears all clusters and markers from the clusterer. + */ +MarkerClusterer.prototype.clearMarkers = function() { + this.resetViewport(true); + + // Set the markers a empty array. + this.markers_ = []; +}; + + +/** + * Clears all existing clusters and recreates them. + * @param {boolean} opt_hide To also hide the marker. + */ +MarkerClusterer.prototype.resetViewport = function(opt_hide) { + // Remove all the clusters + for (var i = 0, cluster; cluster = this.clusters_[i]; i++) { + cluster.remove(); + } + + // Reset the markers to not be added and to be invisible. + for (var i = 0, marker; marker = this.markers_[i]; i++) { + marker.isAdded = false; + if (opt_hide) { + marker.setMap(null); + } + } + + this.clusters_ = []; +}; + +/** + * + */ +MarkerClusterer.prototype.repaint = function() { + var oldClusters = this.clusters_.slice(); + this.clusters_.length = 0; + this.resetViewport(); + this.redraw(); + + // Remove the old clusters. + // Do it in a timeout so the other clusters have been drawn first. + window.setTimeout(function() { + for (var i = 0, cluster; cluster = oldClusters[i]; i++) { + cluster.remove(); + } + }, 0); +}; + + +/** + * Redraws the clusters. + */ +MarkerClusterer.prototype.redraw = function() { + this.createClusters_(); +}; + + +/** + * Calculates the distance between two latlng locations in km. + * @see http://www.movable-type.co.uk/scripts/latlong.html + * + * @param {google.maps.LatLng} p1 The first lat lng point. + * @param {google.maps.LatLng} p2 The second lat lng point. + * @return {number} The distance between the two points in km. + * @private +*/ +MarkerClusterer.prototype.distanceBetweenPoints_ = function(p1, p2) { + if (!p1 || !p2) { + return 0; + } + + var R = 6371; // Radius of the Earth in km + var dLat = (p2.lat() - p1.lat()) * Math.PI / 180; + var dLon = (p2.lng() - p1.lng()) * Math.PI / 180; + var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) * + Math.sin(dLon / 2) * Math.sin(dLon / 2); + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + var d = R * c; + return d; +}; + + +/** + * Add a marker to a cluster, or creates a new cluster. + * + * @param {google.maps.Marker} marker The marker to add. + * @private + */ +MarkerClusterer.prototype.addToClosestCluster_ = function(marker) { + var distance = 40000; // Some large number + var clusterToAddTo = null; + var pos = marker.getPosition(); + for (var i = 0, cluster; cluster = this.clusters_[i]; i++) { + var center = cluster.getCenter(); + if (center) { + var d = this.distanceBetweenPoints_(center, marker.getPosition()); + if (d < distance) { + distance = d; + clusterToAddTo = cluster; + } + } + } + + if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) { + clusterToAddTo.addMarker(marker); + } else { + var cluster = new Cluster(this); + cluster.addMarker(marker); + this.clusters_.push(cluster); + } +}; + + +/** + * Creates the clusters. + * + * @private + */ +MarkerClusterer.prototype.createClusters_ = function() { + if (!this.ready_) { + return; + } + + // Get our current map view bounds. + // Create a new bounds object so we don't affect the map. + var mapBounds = new google.maps.LatLngBounds(this.map_.getBounds().getSouthWest(), + this.map_.getBounds().getNorthEast()); + var bounds = this.getExtendedBounds(mapBounds); + + for (var i = 0, marker; marker = this.markers_[i]; i++) { + if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) { + this.addToClosestCluster_(marker); + } + } +}; + + +/** + * A cluster that contains markers. + * + * @param {MarkerClusterer} markerClusterer The markerclusterer that this + * cluster is associated with. + * @constructor + * @ignore + */ +function Cluster(markerClusterer) { + this.markerClusterer_ = markerClusterer; + this.map_ = markerClusterer.getMap(); + this.gridSize_ = markerClusterer.getGridSize(); + this.minClusterSize_ = markerClusterer.getMinClusterSize(); + this.averageCenter_ = markerClusterer.isAverageCenter(); + this.center_ = null; + this.markers_ = []; + this.bounds_ = null; + this.clusterIcon_ = new ClusterIcon(this, markerClusterer.getStyles(), + markerClusterer.getGridSize()); +} + +/** + * Determins if a marker is already added to the cluster. + * + * @param {google.maps.Marker} marker The marker to check. + * @return {boolean} True if the marker is already added. + */ +Cluster.prototype.isMarkerAlreadyAdded = function(marker) { + if (this.markers_.indexOf) { + return this.markers_.indexOf(marker) != -1; + } else { + for (var i = 0, m; m = this.markers_[i]; i++) { + if (m == marker) { + return true; + } + } + } + return false; +}; + + +/** + * Add a marker the cluster. + * + * @param {google.maps.Marker} marker The marker to add. + * @return {boolean} True if the marker was added. + */ +Cluster.prototype.addMarker = function(marker) { + if (this.isMarkerAlreadyAdded(marker)) { + return false; + } + + if (!this.center_) { + this.center_ = marker.getPosition(); + this.calculateBounds_(); + } else { + if (this.averageCenter_) { + var l = this.markers_.length + 1; + var lat = (this.center_.lat() * (l-1) + marker.getPosition().lat()) / l; + var lng = (this.center_.lng() * (l-1) + marker.getPosition().lng()) / l; + this.center_ = new google.maps.LatLng(lat, lng); + this.calculateBounds_(); + } + } + + marker.isAdded = true; + this.markers_.push(marker); + + var len = this.markers_.length; + if (len < this.minClusterSize_ && marker.getMap() != this.map_) { + // Min cluster size not reached so show the marker. + marker.setMap(this.map_); + } + + if (len == this.minClusterSize_) { + // Hide the markers that were showing. + for (var i = 0; i < len; i++) { + this.markers_[i].setMap(null); + } + } + + if (len >= this.minClusterSize_) { + marker.setMap(null); + } + + this.updateIcon(); + return true; +}; + + +/** + * Returns the marker clusterer that the cluster is associated with. + * + * @return {MarkerClusterer} The associated marker clusterer. + */ +Cluster.prototype.getMarkerClusterer = function() { + return this.markerClusterer_; +}; + + +/** + * Returns the bounds of the cluster. + * + * @return {google.maps.LatLngBounds} the cluster bounds. + */ +Cluster.prototype.getBounds = function() { + var bounds = new google.maps.LatLngBounds(this.center_, this.center_); + var markers = this.getMarkers(); + for (var i = 0, marker; marker = markers[i]; i++) { + bounds.extend(marker.getPosition()); + } + return bounds; +}; + + +/** + * Removes the cluster + */ +Cluster.prototype.remove = function() { + this.clusterIcon_.remove(); + this.markers_.length = 0; + delete this.markers_; +}; + + +/** + * Returns the center of the cluster. + * + * @return {number} The cluster center. + */ +Cluster.prototype.getSize = function() { + return this.markers_.length; +}; + + +/** + * Returns the center of the cluster. + * + * @return {Array.} The cluster center. + */ +Cluster.prototype.getMarkers = function() { + return this.markers_; +}; + + +/** + * Returns the center of the cluster. + * + * @return {google.maps.LatLng} The cluster center. + */ +Cluster.prototype.getCenter = function() { + return this.center_; +}; + + +/** + * Calculated the extended bounds of the cluster with the grid. + * + * @private + */ +Cluster.prototype.calculateBounds_ = function() { + var bounds = new google.maps.LatLngBounds(this.center_, this.center_); + this.bounds_ = this.markerClusterer_.getExtendedBounds(bounds); +}; + + +/** + * Determines if a marker lies in the clusters bounds. + * + * @param {google.maps.Marker} marker The marker to check. + * @return {boolean} True if the marker lies in the bounds. + */ +Cluster.prototype.isMarkerInClusterBounds = function(marker) { + return this.bounds_.contains(marker.getPosition()); +}; + + +/** + * Returns the map that the cluster is associated with. + * + * @return {google.maps.Map} The map. + */ +Cluster.prototype.getMap = function() { + return this.map_; +}; + + +/** + * Updates the cluster icon + */ +Cluster.prototype.updateIcon = function() { + var zoom = this.map_.getZoom(); + var mz = this.markerClusterer_.getMaxZoom(); + + if (mz && zoom > mz) { + // The zoom is greater than our max zoom so show all the markers in cluster. + for (var i = 0, marker; marker = this.markers_[i]; i++) { + marker.setMap(this.map_); + } + return; + } + + if (this.markers_.length < this.minClusterSize_) { + // Min cluster size not yet reached. + this.clusterIcon_.hide(); + return; + } + + var numStyles = this.markerClusterer_.getStyles().length; + var sums = this.markerClusterer_.getCalculator()(this.markers_, numStyles); + this.clusterIcon_.setCenter(this.center_); + this.clusterIcon_.setSums(sums); + this.clusterIcon_.show(); +}; + + +/** + * A cluster icon + * + * @param {Cluster} cluster The cluster to be associated with. + * @param {Object} styles An object that has style properties: + * 'url': (string) The image url. + * 'height': (number) The image height. + * 'width': (number) The image width. + * 'anchor': (Array) The anchor position of the label text. + * 'textColor': (string) The text color. + * 'textSize': (number) The text size. + * 'backgroundPosition: (string) The background postition x, y. + * @param {number=} opt_padding Optional padding to apply to the cluster icon. + * @constructor + * @extends google.maps.OverlayView + * @ignore + */ +function ClusterIcon(cluster, styles, opt_padding) { + cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView); + + this.styles_ = styles; + this.padding_ = opt_padding || 0; + this.cluster_ = cluster; + this.center_ = null; + this.map_ = cluster.getMap(); + this.div_ = null; + this.sums_ = null; + this.visible_ = false; + + this.setMap(this.map_); +} + + +/** + * Triggers the clusterclick event and zoom's if the option is set. + */ +ClusterIcon.prototype.triggerClusterClick = function() { + var markerClusterer = this.cluster_.getMarkerClusterer(); + + // Trigger the clusterclick event. + google.maps.event.trigger(markerClusterer, 'clusterclick', this.cluster_); + + if (markerClusterer.isZoomOnClick()) { + // Zoom into the cluster. + this.map_.fitBounds(this.cluster_.getBounds()); + } +}; + + +/** + * Adding the cluster icon to the dom. + * @ignore + */ +ClusterIcon.prototype.onAdd = function() { + this.div_ = document.createElement('DIV'); + if (this.visible_) { + var pos = this.getPosFromLatLng_(this.center_); + this.div_.style.cssText = this.createCss(pos); + this.div_.innerHTML = this.sums_.text; + } + + var panes = this.getPanes(); + panes.overlayMouseTarget.appendChild(this.div_); + + var that = this; + google.maps.event.addDomListener(this.div_, 'click', function() { + that.triggerClusterClick(); + }); +}; + + +/** + * Returns the position to place the div dending on the latlng. + * + * @param {google.maps.LatLng} latlng The position in latlng. + * @return {google.maps.Point} The position in pixels. + * @private + */ +ClusterIcon.prototype.getPosFromLatLng_ = function(latlng) { + var pos = this.getProjection().fromLatLngToDivPixel(latlng); + pos.x -= parseInt(this.width_ / 2, 10); + pos.y -= parseInt(this.height_ / 2, 10); + return pos; +}; + + +/** + * Draw the icon. + * @ignore + */ +ClusterIcon.prototype.draw = function() { + if (this.visible_) { + var pos = this.getPosFromLatLng_(this.center_); + this.div_.style.top = pos.y + 'px'; + this.div_.style.left = pos.x + 'px'; + } +}; + + +/** + * Hide the icon. + */ +ClusterIcon.prototype.hide = function() { + if (this.div_) { + this.div_.style.display = 'none'; + } + this.visible_ = false; +}; + + +/** + * Position and show the icon. + */ +ClusterIcon.prototype.show = function() { + if (this.div_) { + var pos = this.getPosFromLatLng_(this.center_); + this.div_.style.cssText = this.createCss(pos); + this.div_.style.display = ''; + } + this.visible_ = true; +}; + + +/** + * Remove the icon from the map + */ +ClusterIcon.prototype.remove = function() { + this.setMap(null); +}; + + +/** + * Implementation of the onRemove interface. + * @ignore + */ +ClusterIcon.prototype.onRemove = function() { + if (this.div_ && this.div_.parentNode) { + this.hide(); + this.div_.parentNode.removeChild(this.div_); + this.div_ = null; + } +}; + + +/** + * Set the sums of the icon. + * + * @param {Object} sums The sums containing: + * 'text': (string) The text to display in the icon. + * 'index': (number) The style index of the icon. + */ +ClusterIcon.prototype.setSums = function(sums) { + this.sums_ = sums; + this.text_ = sums.text; + this.index_ = sums.index; + if (this.div_) { + this.div_.innerHTML = sums.text; + } + + this.useStyle(); +}; + + +/** + * Sets the icon to the the styles. + */ +ClusterIcon.prototype.useStyle = function() { + var index = Math.max(0, this.sums_.index - 1); + index = Math.min(this.styles_.length - 1, index); + var style = this.styles_[index]; + this.url_ = style['url']; + this.height_ = style['height']; + this.width_ = style['width']; + this.textColor_ = style['textColor']; + this.anchor_ = style['anchor']; + this.textSize_ = style['textSize']; + this.backgroundPosition_ = style['backgroundPosition']; +}; + + +/** + * Sets the center of the icon. + * + * @param {google.maps.LatLng} center The latlng to set as the center. + */ +ClusterIcon.prototype.setCenter = function(center) { + this.center_ = center; +}; + + +/** + * Create the css text based on the position of the icon. + * + * @param {google.maps.Point} pos The position. + * @return {string} The css style text. + */ +ClusterIcon.prototype.createCss = function(pos) { + var style = []; + style.push('background-image:url(' + this.url_ + ');'); + var backgroundPosition = this.backgroundPosition_ ? this.backgroundPosition_ : '0 0'; + style.push('background-position:' + backgroundPosition + ';'); + + if (typeof this.anchor_ === 'object') { + if (typeof this.anchor_[0] === 'number' && this.anchor_[0] > 0 && + this.anchor_[0] < this.height_) { + style.push('height:' + (this.height_ - this.anchor_[0]) + + 'px; padding-top:' + this.anchor_[0] + 'px;'); + } else { + style.push('height:' + this.height_ + 'px; line-height:' + this.height_ + + 'px;'); + } + if (typeof this.anchor_[1] === 'number' && this.anchor_[1] > 0 && + this.anchor_[1] < this.width_) { + style.push('width:' + (this.width_ - this.anchor_[1]) + + 'px; padding-left:' + this.anchor_[1] + 'px;'); + } else { + style.push('width:' + this.width_ + 'px; text-align:center;'); + } + } else { + style.push('height:' + this.height_ + 'px; line-height:' + + this.height_ + 'px; width:' + this.width_ + 'px; text-align:center;'); + } + + var txtColor = this.textColor_ ? this.textColor_ : 'black'; + var txtSize = this.textSize_ ? this.textSize_ : 11; + + style.push('cursor:pointer; top:' + pos.y + 'px; left:' + + pos.x + 'px; color:' + txtColor + '; position:absolute; font-size:' + + txtSize + 'px; font-family:Arial,sans-serif; font-weight:bold'); + return style.join(''); +}; + + +// Export Symbols for Closure +// If you are not going to compile with closure then you can remove the +// code below. +window['MarkerClusterer'] = MarkerClusterer; +MarkerClusterer.prototype['addMarker'] = MarkerClusterer.prototype.addMarker; +MarkerClusterer.prototype['addMarkers'] = MarkerClusterer.prototype.addMarkers; +MarkerClusterer.prototype['clearMarkers'] = + MarkerClusterer.prototype.clearMarkers; +MarkerClusterer.prototype['fitMapToMarkers'] = + MarkerClusterer.prototype.fitMapToMarkers; +MarkerClusterer.prototype['getCalculator'] = + MarkerClusterer.prototype.getCalculator; +MarkerClusterer.prototype['getGridSize'] = + MarkerClusterer.prototype.getGridSize; +MarkerClusterer.prototype['getExtendedBounds'] = + MarkerClusterer.prototype.getExtendedBounds; +MarkerClusterer.prototype['getMap'] = MarkerClusterer.prototype.getMap; +MarkerClusterer.prototype['getMarkers'] = MarkerClusterer.prototype.getMarkers; +MarkerClusterer.prototype['getMaxZoom'] = MarkerClusterer.prototype.getMaxZoom; +MarkerClusterer.prototype['getStyles'] = MarkerClusterer.prototype.getStyles; +MarkerClusterer.prototype['getTotalClusters'] = + MarkerClusterer.prototype.getTotalClusters; +MarkerClusterer.prototype['getTotalMarkers'] = + MarkerClusterer.prototype.getTotalMarkers; +MarkerClusterer.prototype['redraw'] = MarkerClusterer.prototype.redraw; +MarkerClusterer.prototype['removeMarker'] = + MarkerClusterer.prototype.removeMarker; +MarkerClusterer.prototype['removeMarkers'] = + MarkerClusterer.prototype.removeMarkers; +MarkerClusterer.prototype['resetViewport'] = + MarkerClusterer.prototype.resetViewport; +MarkerClusterer.prototype['repaint'] = + MarkerClusterer.prototype.repaint; +MarkerClusterer.prototype['setCalculator'] = + MarkerClusterer.prototype.setCalculator; +MarkerClusterer.prototype['setGridSize'] = + MarkerClusterer.prototype.setGridSize; +MarkerClusterer.prototype['setMaxZoom'] = + MarkerClusterer.prototype.setMaxZoom; +MarkerClusterer.prototype['onAdd'] = MarkerClusterer.prototype.onAdd; +MarkerClusterer.prototype['draw'] = MarkerClusterer.prototype.draw; + +Cluster.prototype['getCenter'] = Cluster.prototype.getCenter; +Cluster.prototype['getSize'] = Cluster.prototype.getSize; +Cluster.prototype['getMarkers'] = Cluster.prototype.getMarkers; + +ClusterIcon.prototype['onAdd'] = ClusterIcon.prototype.onAdd; +ClusterIcon.prototype['draw'] = ClusterIcon.prototype.draw; +ClusterIcon.prototype['onRemove'] = ClusterIcon.prototype.onRemove; + +Object.keys = Object.keys || function(o) { + var result = []; + for(var name in o) { + if (o.hasOwnProperty(name)) + result.push(name); + } + return result; +}; diff --git a/js/skip-link-focus-fix.js b/js/skip-link-focus-fix.js new file mode 100644 index 0000000..ae8a5da --- /dev/null +++ b/js/skip-link-focus-fix.js @@ -0,0 +1,36 @@ +/** + * Makes "skip to content" link work correctly in IE9, Chrome, and Opera + * for better accessibility. + * + * @link http://www.nczonline.net/blog/2013/01/15/fixing-skip-to-content-links/ + */ + + ( function() { + var isWebkit = navigator.userAgent.toLowerCase().indexOf( 'webkit' ) > -1, + isOpera = navigator.userAgent.toLowerCase().indexOf( 'opera' ) > -1, + isIE = navigator.userAgent.toLowerCase().indexOf( 'msie' ) > -1; + + if ( ( isWebkit || isOpera || isIE ) && document.getElementById && window.addEventListener ) { + window.addEventListener( 'hashchange', function() { + var id = location.hash.substring( 1 ), + element; + + if ( ! ( /^[A-z0-9_-]+$/.test( id ) ) ) { + return; + } + + element = document.getElementById( id ); + + if ( element ) { + if ( ! ( /^(?:a|select|input|button|textarea)$/i.test( element.tagName ) ) ) { + element.tabIndex = -1; + } + + element.focus(); + + // Repositions the window on jump-to-anchor to account for admin bar and border height. + window.scrollBy( 0, -53 ); + } + }, false ); + } +} )(); diff --git a/languages/twentysixteen.pot b/languages/twentysixteen.pot new file mode 100644 index 0000000..8d4beb1 --- /dev/null +++ b/languages/twentysixteen.pot @@ -0,0 +1,346 @@ +# Copyright (C) 2015 the WordPress team +# This file is distributed under the GNU General Public License v2 or later. +msgid "" +msgstr "" +"Project-Id-Version: Twenty Sixteen 0.1.20150828\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/theme/twentysixteen\n" +"POT-Creation-Date: 2015-11-20 12:58:54+00:00\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2015-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" + +#: 404.php:17 +msgid "Oops! That page can’t be found." +msgstr "" + +#: 404.php:21 +msgid "It looks like nothing was found at this location. Maybe try a search?" +msgstr "" + +#: archive.php:49 index.php:46 search.php:37 +msgid "Previous page" +msgstr "" + +#: archive.php:50 index.php:47 search.php:38 +msgid "Next page" +msgstr "" + +#: archive.php:51 image.php:60 index.php:48 search.php:39 +#: template-parts/content-page.php:27 template-parts/content-single.php:29 +#: template-parts/content.php:37 +msgid "Page" +msgstr "" + +#. translators: %s: post title +#: comments.php:31 +msgctxt "comments title" +msgid "One thought on “%s”" +msgstr "" + +#. translators: 1: number of comments, 2: post title +#: comments.php:35 +msgctxt "comments title" +msgid "%1$s thought on “%2$s”" +msgid_plural "%1$s thoughts on “%2$s”" +msgstr[0] "" +msgstr[1] "" + +#: comments.php:69 +msgid "Comments are closed." +msgstr "" + +#: footer.php:17 +msgid "Footer Primary Menu" +msgstr "" + +#: footer.php:28 +msgid "Footer Social Links Menu" +msgstr "" + +#. #-#-#-#-# twentysixteen.pot (Twenty Sixteen 0.1.20150828) #-#-#-#-# +#. Author URI of the plugin/theme +#: footer.php:51 +msgid "https://wordpress.org/" +msgstr "" + +#: footer.php:51 +msgid "Proudly powered by %s" +msgstr "" + +#: functions.php:77 header.php:49 +msgid "Primary Menu" +msgstr "" + +#: functions.php:78 header.php:60 +msgid "Social Links Menu" +msgstr "" + +#: functions.php:142 +msgid "Sidebar" +msgstr "" + +#: functions.php:144 +msgid "Add widgets here to appear in your sidebar." +msgstr "" + +#: functions.php:152 +msgid "Content Bottom 1" +msgstr "" + +#: functions.php:154 functions.php:164 +msgid "Appears at the bottom of the content on posts and pages." +msgstr "" + +#: functions.php:162 +msgid "Content Bottom 2" +msgstr "" + +#. translators: If there are characters in your language that are not supported +#. by Merriweather, translate this to 'off'. Do not translate into your own +#. language. +#: functions.php:189 +msgctxt "Merriweather font: on or off" +msgid "on" +msgstr "" + +#. translators: If there are characters in your language that are not supported +#. by Montserrat, translate this to 'off'. Do not translate into your own +#. language. +#: functions.php:194 +msgctxt "Montserrat font: on or off" +msgid "on" +msgstr "" + +#. translators: If there are characters in your language that are not supported +#. by Inconsolata, translate this to 'off'. Do not translate into your own +#. language. +#: functions.php:199 +msgctxt "Inconsolata font: on or off" +msgid "on" +msgstr "" + +#: functions.php:270 +msgid "expand child menu" +msgstr "" + +#: functions.php:271 +msgid "collapse child menu" +msgstr "" + +#: header.php:27 +msgid "Skip to content" +msgstr "" + +#: header.php:45 +msgid "Menu" +msgstr "" + +#: image.php:24 +msgid "Previous Image" +msgstr "" + +#: image.php:25 +msgid "Next Image" +msgstr "" + +#: image.php:56 template-parts/content-page.php:23 +#: template-parts/content-single.php:25 template-parts/content.php:33 +msgid "Pages:" +msgstr "" + +#: image.php:73 +msgctxt "Used before full size attachment link." +msgid "Full size" +msgstr "" + +#. translators: %s: Name of current post +#: image.php:84 template-parts/content-page.php:37 +#: template-parts/content-search.php:28 template-parts/content-search.php:43 +#: template-parts/content-single.php:45 template-parts/content.php:49 +msgid "Edit \"%s\"" +msgstr "" + +#: image.php:102 single.php:29 +msgctxt "Parent post link" +msgid "" +"Published in" +"%title" +msgstr "" + +#: inc/back-compat.php:41 inc/back-compat.php:53 inc/back-compat.php:68 +msgid "" +"Twenty Sixteen requires at least WordPress version 4.4. You are running " +"version %s. Please upgrade and try again." +msgstr "" + +#: inc/customizer.php:117 +msgid "Base Color Scheme" +msgstr "" + +#: inc/customizer.php:132 +msgid "Page Background Color" +msgstr "" + +#: inc/customizer.php:147 +msgid "Link Color" +msgstr "" + +#: inc/customizer.php:159 +msgid "Main Text Color" +msgstr "" + +#: inc/customizer.php:171 +msgid "Secondary Text Color" +msgstr "" + +#: inc/customizer.php:216 +msgid "Default" +msgstr "" + +#: inc/customizer.php:226 +msgid "Dark" +msgstr "" + +#: inc/customizer.php:236 +msgid "Gray" +msgstr "" + +#: inc/customizer.php:246 +msgid "Red" +msgstr "" + +#: inc/customizer.php:256 +msgid "Yellow" +msgstr "" + +#: inc/template-tags.php:25 +msgctxt "Used before post author name." +msgid "Author" +msgstr "" + +#: inc/template-tags.php:38 +msgctxt "Used before post format." +msgid "Format" +msgstr "" + +#: inc/template-tags.php:50 +msgid "Leave a comment on %s" +msgstr "" + +#: inc/template-tags.php:79 +msgctxt "Used before publish date." +msgid "Posted on" +msgstr "" + +#: inc/template-tags.php:95 inc/template-tags.php:103 +msgctxt "Used between list items, there is a space after the comma." +msgid ", " +msgstr "" + +#: inc/template-tags.php:98 +msgctxt "Used before category names." +msgid "Categories" +msgstr "" + +#: inc/template-tags.php:106 +msgctxt "Used before tag names." +msgid "Tags" +msgstr "" + +#. translators: %s: Name of current post +#: inc/template-tags.php:184 template-parts/content.php:28 +msgid "Continue reading \"%s\"" +msgstr "" + +#: search.php:18 +msgid "Search Results for: %s" +msgstr "" + +#: searchform.php:13 searchform.php:14 +msgctxt "label" +msgid "Search for:" +msgstr "" + +#: searchform.php:14 +msgctxt "placeholder" +msgid "Search …" +msgstr "" + +#: searchform.php:16 +msgctxt "submit button" +msgid "Search" +msgstr "" + +#: single.php:34 +msgid "Next" +msgstr "" + +#: single.php:35 +msgid "Next post:" +msgstr "" + +#: single.php:37 +msgid "Previous" +msgstr "" + +#: single.php:38 +msgid "Previous post:" +msgstr "" + +#: template-parts/biography.php:28 +msgid "Author:" +msgstr "" + +#: template-parts/biography.php:33 +msgid "View all posts by %s" +msgstr "" + +#: template-parts/content-none.php:13 +msgid "Nothing Found" +msgstr "" + +#: template-parts/content-none.php:19 +msgid "" +"Ready to publish your first post? Get started here." +msgstr "" + +#: template-parts/content-none.php:23 +msgid "" +"Sorry, but nothing matched your search terms. Please try again with some " +"different keywords." +msgstr "" + +#: template-parts/content-none.php:28 +msgid "" +"It seems we can’t find what you’re looking for. Perhaps " +"searching can help." +msgstr "" + +#: template-parts/content.php:14 +msgid "Featured" +msgstr "" + +#. Theme Name of the plugin/theme +msgid "Twenty Sixteen" +msgstr "" + +#. Theme URI of the plugin/theme +msgid "https://wordpress.org/themes/twentysixteen/" +msgstr "" + +#. Description of the plugin/theme +msgid "" +"Twenty Sixteen is a modernized take on an ever-popular WordPress layout — " +"the horizontal masthead with an optional right sidebar that works perfectly " +"for blogs and websites. It has custom color options with beautiful default " +"color schemes, a harmonious fluid grid using a mobile-first approach, and " +"impeccable polish in every detail. Twenty Sixteen will make your WordPress " +"look beautiful everywhere." +msgstr "" + +#. Author of the plugin/theme +msgid "the WordPress team" +msgstr "" diff --git a/page-experience-by-companies.php b/page-experience-by-companies.php new file mode 100644 index 0000000..99dd454 --- /dev/null +++ b/page-experience-by-companies.php @@ -0,0 +1,139 @@ + + +
+ +
+

Experience

+ +
+ +
+ +
+

Settings

+
+ + +
+
+

Display only organisations with associated:

+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + +
+ +
+ + + + +
+ + diff --git a/page-experience-by-locations.php b/page-experience-by-locations.php new file mode 100644 index 0000000..1d3108f --- /dev/null +++ b/page-experience-by-locations.php @@ -0,0 +1,112 @@ + + + + + +
+
+

Experience

+

by location

+ +
+ + +
+ +
+
+ + 0)); + // Gets all of the top-level location terms. + $terms = get_terms(array('taxonomy' => 'location', 'term_args' => array('parent' => 0))); +?> + +
+
+
+
+
+ + + parent != 0 && get_term($t->parent, 'location')->parent == 0; + }); + ?> + + + + parent != 0 && get_term($t->parent, 'location')->parent != 0 && get_term(get_term($t->parent, 'location')->parent, 'location')->parent != 0 && get_term(get_term(get_term($t->parent, 'location')->parent, 'location')->parent, 'location')->parent == 0; + }); + ?> + + + + + +
+
+ + diff --git a/page.php b/page.php new file mode 100644 index 0000000..ae5fbcc --- /dev/null +++ b/page.php @@ -0,0 +1,32 @@ + + + + +
+ +
+ + diff --git a/plugins/akismet/.htaccess b/plugins/akismet/.htaccess new file mode 100644 index 0000000..49d72d7 --- /dev/null +++ b/plugins/akismet/.htaccess @@ -0,0 +1,34 @@ +# Only allow direct access to specific Web-available files. + +# Apache 2.2 + + Order Deny,Allow + Deny from all + + +# Apache 2.4 + + Require all denied + + +# Akismet CSS and JS + + + Allow from all + + + + Require all granted + + + +# Akismet images + + + Allow from all + + + + Require all granted + + \ No newline at end of file diff --git a/plugins/akismet/LICENSE.txt b/plugins/akismet/LICENSE.txt new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/plugins/akismet/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/plugins/akismet/_inc/akismet.css b/plugins/akismet/_inc/akismet.css new file mode 100644 index 0000000..d38e14b --- /dev/null +++ b/plugins/akismet/_inc/akismet.css @@ -0,0 +1,474 @@ + +#submitted-on { + position: relative; +} +#the-comment-list .author .akismet-user-comment-count { + display: inline; +} +#the-comment-list .author a span { + text-decoration: none; + color: #999; +} +#the-comment-list .author a span.akismet-span-link { + text-decoration: inherit; + color: inherit; +} +#the-comment-list .remove_url { + margin-left: 3px; + color: #999; + padding: 2px 3px 2px 0; +} +#the-comment-list .remove_url:hover { + color: #A7301F; + font-weight: bold; + padding: 2px 2px 2px 0; +} +#dashboard_recent_comments .akismet-status { + display: none; +} +.akismet-status { + float: right; +} +.akismet-status a { + color: #AAA; + font-style: italic; +} +table.comments td.comment p a { + text-decoration: underline; +} +table.comments td.comment p a:after { + content: attr(href); + color: #aaa; + display: inline-block; /* Show the URL without the link's underline extending under it. */ + padding: 0 1ex; /* Because it's inline block, we can't just use spaces in the content: attribute to separate it from the link text. */ +} +.mshot-arrow { + width: 0; + height: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + border-right: 10px solid #5C5C5C; + position: absolute; + left: -6px; + top: 91px; +} +.mshot-container { + background: #5C5C5C; + position: absolute; + top: -94px; + padding: 7px; + width: 450px; + height: 338px; + z-index: 20000; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-border-radius: 6px; +} +.akismet-mshot { + position: absolute; + z-index: 100; +} +.akismet-mshot .mshot-image { + margin: 0; + height: 338px; + width: 450px; +} +h2.ak-header { + padding: 30px; + background: #649316 url('img/logo-full-2x.png') no-repeat 20px center; + background-size: 185px 33px; + height: 33px; + text-indent: -9999em; + margin-right: 10px; +} +.checkforspam { + display: inline-block !important; +} +.checkforspam-spinner { + display: inline-block; + margin-top: 7px; +} + +.config-wrap { + margin-top: 2em; + max-width: 700px; +} + +.activate-option { + background: #e3e3e3; + border-radius: 3px; + margin-bottom: 30px; + overflow: hidden; + padding: 20px; +} +.activate-option.clicked { + background: #649316; + color: #fff; +} +.activate-option.clicked:hover { + background: #68802E; + color: #fff; +} + +.activate-option .button.button-secondary { + margin: 15px 0; +} + +.activate-option p { + margin: 10px 0 10px; +} + +.activate-highlight { + background: #fff; + padding: 30px; + margin-right: 10px; +} + +.activate-highlight.secondary { + background: #ddd; + padding: 20px 30px; +} + +.activate-highlight h3 { + margin: 0 0 0.3em; +} +.activate-highlight p { + color: #777; +} +.activate-highlight .button-primary { + margin-top: 15px; +} + +#akismet-enter-api-key .regular-text { + width: 18em; + margin-top: 15px; +} + +.right { + float: right; +} + +.alert-text { + color: #dd3d36; +} +.success { + color: #649316; +} +.option-description { + float: left; + font-size: 16px; +} +.option-description span { + color: #666; + display: block; + font-size: 14px; + margin-top: 5px; +} +.option-action { + float: right; +} +.key-config-link { + font-size: 14px; + margin-left: 20px; +} +.jetpack-account { + float: left; + font-size: 18px; + margin-right: 40px; +} +.small-heading { + color: #777; + display: block; + font-size: 12px; + font-weight: bold; + margin-bottom: 5px; + text-transform: uppercase; +} +.inline-label { + background: #ddd; + border-radius: 3px; + font-size: 11px; + padding: 3px 8px; + text-transform: uppercase; +} +.inline-label.alert { + background: #e54747; + color: #fff; +} +.jetpack-account .inline-label { + margin-left: 5px; +} +.option-action .manual-key { + margin-top: 7px; +} + +.alert { + border: 1px solid #e5e5e5; + padding: 0.4em 1em 1.4em 1em; + border-radius: 3px; + -webkit-border-radius: 3px; + border-width: 1px; + border-style: solid; +} + +.alert h3.key-status { + color: #fff; + margin: 1em 0 0.5em 0; +} + +.alert.critical { + background-color: #993300; +} + +.alert.active { + background-color: #649316; +} + +.alert p.key-status { + font-size: 24px; +} + +.alert p.description { + color:#fff; + font-size: 14px; + margin: 0 0; + font-style: normal; +} + +.alert p.description a, +.alert p.description a, +.alert p.description a, +.alert p.description a { + color: #fff; +} + +.new-snapshot { + margin-top: 1em; + padding: 1em; + text-align: center; +} + +.new-snapshot.stats { + background: #fff; + border: 1px solid #e5e5e5; +} + +.new-snapshot h3 { + background: #f5f5f5; + color: #888; + font-size: 11px; + margin: 0; + padding: 3px; +} + +.new-snapspot ul { + font-size: 12px; + width: 100%; +} + +.new-snapshot ul li { + color: #999; + float: left; + font-size: 11px; + padding: 0 20px; + text-transform: uppercase; + width: 33%; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; +} + +.new-snapshot.stats ul li:first-child, +.new-snapshot.stats ul li:nth-child(2) { + border-right:1px dotted #ccc; +} + +.new-snapshot.account ul li:nth-child(2) { + border-right: none; +} + +.new-snapshot ul li span { + color: #52accc; + display: block; + font-size: 32px; + font-weight: lighter; + line-height: 1.5em; +} + +.new-snapshot.stats { +} + +.new-snapshot.account, +.new-snapshot.settings { + float: left; + padding: 0; + text-align: left; + width: 50%; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; +} + +.account-container { + background: #fff; + border: 1px solid #e5e5e5; + margin-right: 0.5em; +} + +.settings-container { + background: #fff; + border: 1px solid #e5e5e5; + margin-left: 0.5em; +} + +.new-snapshot.account ul li { + width:100% +} + +.new-snapshot.account ul li span { + font-size: 14px; + font-weight: normal; +} + + +.new-snapshot.settings ul li { + border: none; + display: block; + width:100% +} + +.new-snapshot.settings ul li span { + display: block; + font-size: 14px; + font-weight: normal; +} + +.new-snapshot.settings p.submit { + margin: 0; + text-align: center; +} + +.akismet-settings th:first-child { + vertical-align: top; + padding-top: 15px; +} + +.akismet-settings th.akismet-api-key { + vertical-align: middle; + padding-top: 0; +} + +.akismet-settings input[type=text] { + width: 75%; +} + +.akismet-settings span.note{ + float: left; + padding-left: 23px; + font-size: 75%; + margin-top: -10px; +} + +.clearfix { + clear:both; +} + +/** + * For the activation notice on the plugins page. + */ +.akismet_activate { + min-width: 825px; + border: 1px solid #4F800D; + padding: 5px; + margin: 15px 0; + background: #83AF24; + background-image: -webkit-gradient(linear, 0% 0, 80% 100%, from(#83AF24), to(#4F800D)); + background-image: -moz-linear-gradient(80% 100% 120deg, #4F800D, #83AF24); + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-border-radius: 3px; + position: relative; + overflow: hidden; +} + +.akismet_activate .aa_a { + position: absolute; + top: -5px; + right: 10px; + font-size: 140px; + color: #769F33; + font-family: Georgia, "Times New Roman", Times, serif; + z-index: 1; +} + +.akismet_activate .aa_button { + font-weight: bold; + border: 1px solid #029DD6; + border-top: 1px solid #06B9FD; + font-size: 15px; + text-align: center; + padding: 9px 0 8px 0; + color: #FFF; + background: #029DD6; + background-image: -webkit-gradient(linear, 0% 0, 0% 100%, from(#029DD6), to(#0079B1)); + background-image: -moz-linear-gradient(0% 100% 90deg, #0079B1, #029DD6); + -moz-border-radius: 2px; + border-radius: 2px; + -webkit-border-radius: 2px; + width: 100%; + cursor: pointer; + margin: 0; +} + +.akismet_activate .aa_button:hover { + text-decoration: none !important; + border: 1px solid #029DD6; + border-bottom: 1px solid #00A8EF; + font-size: 15px; + text-align: center; + padding: 9px 0 8px 0; + color: #F0F8FB; + background: #0079B1; + background-image: -webkit-gradient(linear, 0% 0, 0% 100%, from(#0079B1), to(#0092BF)); + background-image: -moz-linear-gradient(0% 100% 90deg, #0092BF, #0079B1); + -moz-border-radius: 2px; + border-radius: 2px; + -webkit-border-radius: 2px; +} + +.akismet_activate .aa_button_border { + border: 1px solid #006699; + -moz-border-radius: 2px; + border-radius: 2px; + -webkit-border-radius: 2px; + background: #029DD6; + background-image: -webkit-gradient(linear, 0% 0, 0% 100%, from(#029DD6), to(#0079B1)); + background-image: -moz-linear-gradient(0% 100% 90deg, #0079B1, #029DD6); +} + +.akismet_activate .aa_button_container { + display: inline-block; + background: #DEF1B8; + padding: 5px; + -moz-border-radius: 2px; + border-radius: 2px; + -webkit-border-radius: 2px; + width: 266px; +} + +.akismet_activate .aa_description { + position: absolute; + top: 22px; + left: 285px; + margin-left: 25px; + color: #E5F2B1; + font-size: 15px; + z-index: 1000; +} + +.akismet_activate .aa_description strong { + color: #FFF; + font-weight: normal; +} \ No newline at end of file diff --git a/plugins/akismet/_inc/akismet.js b/plugins/akismet/_inc/akismet.js new file mode 100644 index 0000000..246c858 --- /dev/null +++ b/plugins/akismet/_inc/akismet.js @@ -0,0 +1,197 @@ +jQuery( function ( $ ) { + var mshotRemovalTimer = null; + var mshotSecondTryTimer = null + var mshotThirdTryTimer = null + + $( 'a.activate-option' ).click( function(){ + var link = $( this ); + if ( link.hasClass( 'clicked' ) ) { + link.removeClass( 'clicked' ); + } + else { + link.addClass( 'clicked' ); + } + $( '.toggle-have-key' ).slideToggle( 'slow', function() {}); + return false; + }); + $('.akismet-status').each(function () { + var thisId = $(this).attr('commentid'); + $(this).prependTo('#comment-' + thisId + ' .column-comment'); + }); + $('.akismet-user-comment-count').each(function () { + var thisId = $(this).attr('commentid'); + $(this).insertAfter('#comment-' + thisId + ' .author strong:first').show(); + }); + $('#the-comment-list') + .find('tr.comment, tr[id ^= "comment-"]') + .find('.column-author a[href^="http"]:first') // Ignore mailto: links, which would be the comment author's email. + .each(function () { + var linkHref = $(this).attr( 'href' ); + + // Ignore any links to the current domain, which are diagnostic tools, like the IP address link + // or any other links another plugin might add. + var currentHostParts = document.location.href.split( '/' ); + var currentHost = currentHostParts[0] + '//' + currentHostParts[2] + '/'; + + if ( linkHref.indexOf( currentHost ) != 0 ) { + var thisCommentId = $(this).parents('tr:first').attr('id').split("-"); + + $(this) + .attr("id", "author_comment_url_"+ thisCommentId[1]) + .after( + $( 'x' ) + .attr( 'commentid', thisCommentId[1] ) + .attr( 'title', WPAkismet.strings['Remove this URL'] ) + ); + } + }); + $('.remove_url').live('click', function () { + var thisId = $(this).attr('commentid'); + var data = { + action: 'comment_author_deurl', + _wpnonce: WPAkismet.comment_author_url_nonce, + id: thisId + }; + $.ajax({ + url: ajaxurl, + type: 'POST', + data: data, + beforeSend: function () { + // Removes "x" link + $("a[commentid='"+ thisId +"']").hide(); + // Show temp status + $("#author_comment_url_"+ thisId).html( $( '' ).text( WPAkismet.strings['Removing...'] ) ); + }, + success: function (response) { + if (response) { + // Show status/undo link + $("#author_comment_url_"+ thisId) + .attr('cid', thisId) + .addClass('akismet_undo_link_removal') + .html( + $( '' ).text( WPAkismet.strings['URL removed'] ) + ) + .append( ' ' ) + .append( + $( '' ) + .text( WPAkismet.strings['(undo)'] ) + .addClass( 'akismet-span-link' ) + ); + } + } + }); + + return false; + }); + $('.akismet_undo_link_removal').live('click', function () { + var thisId = $(this).attr('cid'); + var thisUrl = $(this).attr('href'); + var data = { + action: 'comment_author_reurl', + _wpnonce: WPAkismet.comment_author_url_nonce, + id: thisId, + url: thisUrl + }; + $.ajax({ + url: ajaxurl, + type: 'POST', + data: data, + beforeSend: function () { + // Show temp status + $("#author_comment_url_"+ thisId).html( $( '' ).text( WPAkismet.strings['Re-adding...'] ) ); + }, + success: function (response) { + if (response) { + // Add "x" link + $("a[commentid='"+ thisId +"']").show(); + // Show link. Core strips leading http://, so let's do that too. + $("#author_comment_url_"+ thisId).removeClass('akismet_undo_link_removal').text( thisUrl.replace( /^http:\/\/(www\.)?/ig, '' ) ); + } + } + }); + + return false; + }); + + // Show a preview image of the hovered URL. Applies to author URLs and URLs inside the comments. + $( 'a[id^="author_comment_url"], tr.pingback td.column-author a:first-of-type, table.comments td.comment p a' ).mouseover( function () { + clearTimeout( mshotRemovalTimer ); + + if ( $( '.akismet-mshot' ).length > 0 ) { + if ( $( '.akismet-mshot:first' ).data( 'link' ) == this ) { + // The preview is already showing for this link. + return; + } + else { + // A new link is being hovered, so remove the old preview. + $( '.akismet-mshot' ).remove(); + } + } + + clearTimeout( mshotSecondTryTimer ); + clearTimeout( mshotThirdTryTimer ); + + var thisHref = $.URLEncode( $( this ).attr( 'href' ) ); + + var mShot = $( '
' ); + mShot.data( 'link', this ); + + var offset = $( this ).offset(); + + mShot.offset( { + left : Math.min( $( window ).width() - 475, offset.left + $( this ).width() + 10 ), // Keep it on the screen if the link is near the edge of the window. + top: offset.top + ( $( this ).height() / 2 ) - 101 // 101 = top offset of the arrow plus the top border thickness + } ); + + mshotSecondTryTimer = setTimeout( function () { + mShot.find( '.mshot-image' ).attr( 'src', '//s0.wordpress.com/mshots/v1/'+thisHref+'?w=450&r=2' ); + }, 6000 ); + + mshotThirdTryTimer = setTimeout( function () { + mShot.find( '.mshot-image' ).attr( 'src', '//s0.wordpress.com/mshots/v1/'+thisHref+'?w=450&r=3' ); + }, 12000 ); + + $( 'body' ).append( mShot ); + } ).mouseout( function () { + mshotRemovalTimer = setTimeout( function () { + clearTimeout( mshotSecondTryTimer ); + clearTimeout( mshotThirdTryTimer ); + + $( '.akismet-mshot' ).remove(); + }, 200 ); + } ); + + $('.checkforspam:not(.button-disabled)').click( function(e) { + $('.checkforspam:not(.button-disabled)').addClass('button-disabled'); + $('.checkforspam-spinner').addClass( 'spinner' ); + akismet_check_for_spam(0, 100); + e.preventDefault(); + }); + + function akismet_check_for_spam(offset, limit) { + $.post( + ajaxurl, + { + 'action': 'akismet_recheck_queue', + 'offset': offset, + 'limit': limit + }, + function(result) { + if (result.processed < limit) { + window.location.reload(); + } + else { + // Account for comments that were caught as spam and moved out of the queue. + akismet_check_for_spam(offset + limit - result.counts.spam, limit); + } + } + ); + } +}); +// URL encode plugin +jQuery.extend({URLEncode:function(c){var o='';var x=0;c=c.toString();var r=/(^[a-zA-Z0-9_.]*)/; + while(x1 && m[1]!=''){o+=m[1];x+=m[1].length; + }else{if(c[x]==' ')o+='+';else{var d=c.charCodeAt(x);var h=d.toString(16); + o+='%'+(h.length<2?'0':'')+h.toUpperCase();}x++;}}return o;} +}); diff --git a/plugins/akismet/_inc/form.js b/plugins/akismet/_inc/form.js new file mode 100644 index 0000000..3a5be8a --- /dev/null +++ b/plugins/akismet/_inc/form.js @@ -0,0 +1,30 @@ +var ak_js = document.getElementById( "ak_js" ); + +if ( ! ak_js ) { + ak_js = document.createElement( 'input' ); + ak_js.setAttribute( 'id', 'ak_js' ); + ak_js.setAttribute( 'name', 'ak_js' ); + ak_js.setAttribute( 'type', 'hidden' ); +} +else { + ak_js.parentNode.removeChild( ak_js ); +} + +ak_js.setAttribute( 'value', ( new Date() ).getTime() ); + +var commentForm = document.getElementById( 'commentform' ); + +if ( commentForm ) { + commentForm.appendChild( ak_js ); +} +else { + var replyRowContainer = document.getElementById( 'replyrow' ); + + if ( replyRowContainer ) { + var children = replyRowContainer.getElementsByTagName( 'td' ); + + if ( children.length > 0 ) { + children[0].appendChild( ak_js ); + } + } +} \ No newline at end of file diff --git a/plugins/akismet/_inc/img/logo-full-2x.png b/plugins/akismet/_inc/img/logo-full-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a9bed8b6d27bf9cff94534fef076b0b8ab5356aa GIT binary patch literal 4970 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 F{|De`@8|#k literal 0 HcmV?d00001 diff --git a/plugins/akismet/akismet.php b/plugins/akismet/akismet.php new file mode 100644 index 0000000..a65a0d6 --- /dev/null +++ b/plugins/akismet/akismet.php @@ -0,0 +1,60 @@ +protect your blog from spam. It keeps your site protected even while you sleep. To get started: 1) Click the "Activate" link to the left of this description, 2) Sign up for an Akismet plan to get an API key, and 3) Go to your Akismet configuration page, and save your API key. +Version: 3.1.11 +Author: Automattic +Author URI: https://automattic.com/wordpress-plugins/ +License: GPLv2 or later +Text Domain: akismet +*/ + +/* +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +Copyright 2005-2015 Automattic, Inc. +*/ + +// Make sure we don't expose any info if called directly +if ( !function_exists( 'add_action' ) ) { + echo 'Hi there! I\'m just a plugin, not much I can do when called directly.'; + exit; +} + +define( 'AKISMET_VERSION', '3.1.11' ); +define( 'AKISMET__MINIMUM_WP_VERSION', '3.2' ); +define( 'AKISMET__PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); +define( 'AKISMET_DELETE_LIMIT', 100000 ); + +register_activation_hook( __FILE__, array( 'Akismet', 'plugin_activation' ) ); +register_deactivation_hook( __FILE__, array( 'Akismet', 'plugin_deactivation' ) ); + +require_once( AKISMET__PLUGIN_DIR . 'class.akismet.php' ); +require_once( AKISMET__PLUGIN_DIR . 'class.akismet-widget.php' ); + +add_action( 'init', array( 'Akismet', 'init' ) ); + +if ( is_admin() ) { + require_once( AKISMET__PLUGIN_DIR . 'class.akismet-admin.php' ); + add_action( 'init', array( 'Akismet_Admin', 'init' ) ); +} + +//add wrapper class around deprecated akismet functions that are referenced elsewhere +require_once( AKISMET__PLUGIN_DIR . 'wrapper.php' ); + diff --git a/plugins/akismet/class.akismet-admin.php b/plugins/akismet/class.akismet-admin.php new file mode 100644 index 0000000..c9e82eb --- /dev/null +++ b/plugins/akismet/class.akismet-admin.php @@ -0,0 +1,1011 @@ + array( + 'href' => true, + 'title' => true, + ), + 'b' => array(), + 'code' => array(), + 'del' => array( + 'datetime' => true, + ), + 'em' => array(), + 'i' => array(), + 'q' => array( + 'cite' => true, + ), + 'strike' => array(), + 'strong' => array(), + ); + + public static function init() { + if ( ! self::$initiated ) { + self::init_hooks(); + } + + if ( isset( $_POST['action'] ) && $_POST['action'] == 'enter-key' ) { + self::enter_api_key(); + } + } + + public static function init_hooks() { + // The standalone stats page was removed in 3.0 for an all-in-one config and stats page. + // Redirect any links that might have been bookmarked or in browser history. + if ( isset( $_GET['page'] ) && 'akismet-stats-display' == $_GET['page'] ) { + wp_safe_redirect( esc_url_raw( self::get_page_url( 'stats' ) ), 301 ); + die; + } + + self::$initiated = true; + + add_action( 'admin_init', array( 'Akismet_Admin', 'admin_init' ) ); + add_action( 'admin_menu', array( 'Akismet_Admin', 'admin_menu' ), 5 ); # Priority 5, so it's called before Jetpack's admin_menu. + add_action( 'admin_notices', array( 'Akismet_Admin', 'display_notice' ) ); + add_action( 'admin_enqueue_scripts', array( 'Akismet_Admin', 'load_resources' ) ); + add_action( 'activity_box_end', array( 'Akismet_Admin', 'dashboard_stats' ) ); + add_action( 'rightnow_end', array( 'Akismet_Admin', 'rightnow_stats' ) ); + add_action( 'manage_comments_nav', array( 'Akismet_Admin', 'check_for_spam_button' ) ); + add_action( 'admin_action_akismet_recheck_queue', array( 'Akismet_Admin', 'recheck_queue' ) ); + add_action( 'wp_ajax_akismet_recheck_queue', array( 'Akismet_Admin', 'recheck_queue' ) ); + add_action( 'wp_ajax_comment_author_deurl', array( 'Akismet_Admin', 'remove_comment_author_url' ) ); + add_action( 'wp_ajax_comment_author_reurl', array( 'Akismet_Admin', 'add_comment_author_url' ) ); + add_action( 'jetpack_auto_activate_akismet', array( 'Akismet_Admin', 'connect_jetpack_user' ) ); + + add_filter( 'plugin_action_links', array( 'Akismet_Admin', 'plugin_action_links' ), 10, 2 ); + add_filter( 'comment_row_actions', array( 'Akismet_Admin', 'comment_row_action' ), 10, 2 ); + + add_filter( 'plugin_action_links_'.plugin_basename( plugin_dir_path( __FILE__ ) . 'akismet.php'), array( 'Akismet_Admin', 'admin_plugin_settings_link' ) ); + + add_filter( 'wxr_export_skip_commentmeta', array( 'Akismet_Admin', 'exclude_commentmeta_from_export' ), 10, 3 ); + } + + public static function admin_init() { + load_plugin_textdomain( 'akismet' ); + add_meta_box( 'akismet-status', __('Comment History', 'akismet'), array( 'Akismet_Admin', 'comment_status_meta_box' ), 'comment', 'normal' ); + } + + public static function admin_menu() { + if ( class_exists( 'Jetpack' ) ) + add_action( 'jetpack_admin_menu', array( 'Akismet_Admin', 'load_menu' ) ); + else + self::load_menu(); + } + + public static function admin_head() { + if ( !current_user_can( 'manage_options' ) ) + return; + } + + public static function admin_plugin_settings_link( $links ) { + $settings_link = ''.__('Settings', 'akismet').''; + array_unshift( $links, $settings_link ); + return $links; + } + + public static function load_menu() { + if ( class_exists( 'Jetpack' ) ) + $hook = add_submenu_page( 'jetpack', __( 'Akismet' , 'akismet'), __( 'Akismet' , 'akismet'), 'manage_options', 'akismet-key-config', array( 'Akismet_Admin', 'display_page' ) ); + else + $hook = add_options_page( __('Akismet', 'akismet'), __('Akismet', 'akismet'), 'manage_options', 'akismet-key-config', array( 'Akismet_Admin', 'display_page' ) ); + + if ( version_compare( $GLOBALS['wp_version'], '3.3', '>=' ) ) { + add_action( "load-$hook", array( 'Akismet_Admin', 'admin_help' ) ); + } + } + + public static function load_resources() { + global $hook_suffix; + + if ( in_array( $hook_suffix, array( + 'index.php', # dashboard + 'edit-comments.php', + 'comment.php', + 'post.php', + 'settings_page_akismet-key-config', + 'jetpack_page_akismet-key-config', + 'plugins.php', + ) ) ) { + wp_register_style( 'akismet.css', plugin_dir_url( __FILE__ ) . '_inc/akismet.css', array(), AKISMET_VERSION ); + wp_enqueue_style( 'akismet.css'); + + wp_register_script( 'akismet.js', plugin_dir_url( __FILE__ ) . '_inc/akismet.js', array('jquery','postbox'), AKISMET_VERSION ); + wp_enqueue_script( 'akismet.js' ); + wp_localize_script( 'akismet.js', 'WPAkismet', array( + 'comment_author_url_nonce' => wp_create_nonce( 'comment_author_url_nonce' ), + 'strings' => array( + 'Remove this URL' => __( 'Remove this URL' , 'akismet'), + 'Removing...' => __( 'Removing...' , 'akismet'), + 'URL removed' => __( 'URL removed' , 'akismet'), + '(undo)' => __( '(undo)' , 'akismet'), + 'Re-adding...' => __( 'Re-adding...' , 'akismet'), + ) + ) ); + } + } + + /** + * Add help to the Akismet page + * + * @return false if not the Akismet page + */ + public static function admin_help() { + $current_screen = get_current_screen(); + + // Screen Content + if ( current_user_can( 'manage_options' ) ) { + if ( !Akismet::get_api_key() || ( isset( $_GET['view'] ) && $_GET['view'] == 'start' ) ) { + //setup page + $current_screen->add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' , 'akismet'), + 'content' => + '

' . esc_html__( 'Akismet Setup' , 'akismet') . '

' . + '

' . esc_html__( 'Akismet filters out spam, so you can focus on more important things.' , 'akismet') . '

' . + '

' . esc_html__( 'On this page, you are able to set up the Akismet plugin.' , 'akismet') . '

', + ) + ); + + $current_screen->add_help_tab( + array( + 'id' => 'setup-signup', + 'title' => __( 'New to Akismet' , 'akismet'), + 'content' => + '

' . esc_html__( 'Akismet Setup' , 'akismet') . '

' . + '

' . esc_html__( 'You need to enter an API key to activate the Akismet service on your site.' , 'akismet') . '

' . + '

' . sprintf( __( 'Sign up for an account on %s to get an API Key.' , 'akismet'), 'Akismet.com' ) . '

', + ) + ); + + $current_screen->add_help_tab( + array( + 'id' => 'setup-manual', + 'title' => __( 'Enter an API Key' , 'akismet'), + 'content' => + '

' . esc_html__( 'Akismet Setup' , 'akismet') . '

' . + '

' . esc_html__( 'If you already have an API key' , 'akismet') . '

' . + '
    ' . + '
  1. ' . esc_html__( 'Copy and paste the API key into the text field.' , 'akismet') . '
  2. ' . + '
  3. ' . esc_html__( 'Click the Use this Key button.' , 'akismet') . '
  4. ' . + '
', + ) + ); + } + elseif ( isset( $_GET['view'] ) && $_GET['view'] == 'stats' ) { + //stats page + $current_screen->add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' , 'akismet'), + 'content' => + '

' . esc_html__( 'Akismet Stats' , 'akismet') . '

' . + '

' . esc_html__( 'Akismet filters out spam, so you can focus on more important things.' , 'akismet') . '

' . + '

' . esc_html__( 'On this page, you are able to view stats on spam filtered on your site.' , 'akismet') . '

', + ) + ); + } + else { + //configuration page + $current_screen->add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' , 'akismet'), + 'content' => + '

' . esc_html__( 'Akismet Configuration' , 'akismet') . '

' . + '

' . esc_html__( 'Akismet filters out spam, so you can focus on more important things.' , 'akismet') . '

' . + '

' . esc_html__( 'On this page, you are able to enter/remove an API key, view account information and view spam stats.' , 'akismet') . '

', + ) + ); + + $current_screen->add_help_tab( + array( + 'id' => 'settings', + 'title' => __( 'Settings' , 'akismet'), + 'content' => + '

' . esc_html__( 'Akismet Configuration' , 'akismet') . '

' . + '

' . esc_html__( 'API Key' , 'akismet') . ' - ' . esc_html__( 'Enter/remove an API key.' , 'akismet') . '

' . + '

' . esc_html__( 'Comments' , 'akismet') . ' - ' . esc_html__( 'Show the number of approved comments beside each comment author in the comments list page.' , 'akismet') . '

' . + '

' . esc_html__( 'Strictness' , 'akismet') . ' - ' . esc_html__( 'Choose to either discard the worst spam automatically or to always put all spam in spam folder.' , 'akismet') . '

', + ) + ); + + $current_screen->add_help_tab( + array( + 'id' => 'account', + 'title' => __( 'Account' , 'akismet'), + 'content' => + '

' . esc_html__( 'Akismet Configuration' , 'akismet') . '

' . + '

' . esc_html__( 'Subscription Type' , 'akismet') . ' - ' . esc_html__( 'The Akismet subscription plan' , 'akismet') . '

' . + '

' . esc_html__( 'Status' , 'akismet') . ' - ' . esc_html__( 'The subscription status - active, cancelled or suspended' , 'akismet') . '

', + ) + ); + } + } + + // Help Sidebar + $current_screen->set_help_sidebar( + '

' . esc_html__( 'For more information:' , 'akismet') . '

' . + '

' . esc_html__( 'Akismet FAQ' , 'akismet') . '

' . + '

' . esc_html__( 'Akismet Support' , 'akismet') . '

' + ); + } + + public static function enter_api_key() { + if ( function_exists('current_user_can') && !current_user_can('manage_options') ) + die(__('Cheatin’ uh?', 'akismet')); + + if ( !wp_verify_nonce( $_POST['_wpnonce'], self::NONCE ) ) + return false; + + foreach( array( 'akismet_strictness', 'akismet_show_user_comments_approved' ) as $option ) { + update_option( $option, isset( $_POST[$option] ) && (int) $_POST[$option] == 1 ? '1' : '0' ); + } + + if ( defined( 'WPCOM_API_KEY' ) ) + return false; //shouldn't have option to save key if already defined + + $new_key = preg_replace( '/[^a-f0-9]/i', '', $_POST['key'] ); + $old_key = Akismet::get_api_key(); + + if ( empty( $new_key ) ) { + if ( !empty( $old_key ) ) { + delete_option( 'wordpress_api_key' ); + self::$notices[] = 'new-key-empty'; + } + } + elseif ( $new_key != $old_key ) { + self::save_key( $new_key ); + } + + return true; + } + + public static function save_key( $api_key ) { + $key_status = Akismet::verify_key( $api_key ); + + if ( $key_status == 'valid' ) { + $akismet_user = self::get_akismet_user( $api_key ); + + if ( $akismet_user ) { + if ( in_array( $akismet_user->status, array( 'active', 'active-dunning', 'no-sub' ) ) ) + update_option( 'wordpress_api_key', $api_key ); + + if ( $akismet_user->status == 'active' ) + self::$notices['status'] = 'new-key-valid'; + elseif ( $akismet_user->status == 'notice' ) + self::$notices['status'] = $akismet_user; + else + self::$notices['status'] = $akismet_user->status; + } + else + self::$notices['status'] = 'new-key-invalid'; + } + elseif ( in_array( $key_status, array( 'invalid', 'failed' ) ) ) + self::$notices['status'] = 'new-key-'.$key_status; + } + + public static function dashboard_stats() { + if ( !function_exists('did_action') || did_action( 'rightnow_end' ) ) + return; // We already displayed this info in the "Right Now" section + + if ( !$count = get_option('akismet_spam_count') ) + return; + + global $submenu; + + echo '

' . esc_html( _x( 'Spam', 'comments' , 'akismet') ) . '

'; + + echo '

'.sprintf( _n( + 'Akismet has protected your site from %3$s spam comment.', + 'Akismet has protected your site from %3$s spam comments.', + $count + , 'akismet'), 'https://akismet.com/wordpress/', esc_url( add_query_arg( array( 'page' => 'akismet-admin' ), admin_url( isset( $submenu['edit-comments.php'] ) ? 'edit-comments.php' : 'edit.php' ) ) ), number_format_i18n($count) ).'

'; + } + + // WP 2.5+ + public static function rightnow_stats() { + if ( $count = get_option('akismet_spam_count') ) { + $intro = sprintf( _n( + 'Akismet has protected your site from %2$s spam comment already. ', + 'Akismet has protected your site from %2$s spam comments already. ', + $count + , 'akismet'), 'https://akismet.com/wordpress/', number_format_i18n( $count ) ); + } else { + $intro = sprintf( __('Akismet blocks spam from getting to your blog. ', 'akismet'), 'https://akismet.com/wordpress/' ); + } + + $link = add_query_arg( array( 'comment_status' => 'spam' ), admin_url( 'edit-comments.php' ) ); + + if ( $queue_count = self::get_spam_count() ) { + $queue_text = sprintf( _n( + 'There’s %1$s comment in your spam queue right now.', + 'There are %1$s comments in your spam queue right now.', + $queue_count + , 'akismet'), number_format_i18n( $queue_count ), esc_url( $link ) ); + } else { + $queue_text = sprintf( __( "There’s nothing in your spam queue at the moment." , 'akismet'), esc_url( $link ) ); + } + + $text = $intro . '
' . $queue_text; + echo "

$text

\n"; + } + + public static function check_for_spam_button( $comment_status ) { + // The "Check for Spam" button should only appear when the page might be showing + // a comment with comment_approved=0, which means an un-trashed, un-spammed, + // not-yet-moderated comment. + if ( 'all' != $comment_status && 'moderated' != $comment_status ) { + return; + } + + if ( function_exists('plugins_url') ) + $link = add_query_arg( array( 'action' => 'akismet_recheck_queue' ), admin_url( 'admin.php' ) ); + else + $link = add_query_arg( array( 'page' => 'akismet-admin', 'recheckqueue' => 'true', 'noheader' => 'true' ), admin_url( 'edit-comments.php' ) ); + + echo '
' . esc_html__('Check for Spam', 'akismet') . ''; + } + + public static function recheck_queue() { + global $wpdb; + + Akismet::fix_scheduled_recheck(); + + if ( ! ( isset( $_GET['recheckqueue'] ) || ( isset( $_REQUEST['action'] ) && 'akismet_recheck_queue' == $_REQUEST['action'] ) ) ) + return; + + $paginate = ''; + if ( isset( $_POST['limit'] ) && isset( $_POST['offset'] ) ) { + $paginate = $wpdb->prepare( " LIMIT %d OFFSET %d", array( $_POST['limit'], $_POST['offset'] ) ); + } + $moderation = $wpdb->get_results( "SELECT * FROM {$wpdb->comments} WHERE comment_approved = '0'{$paginate}", ARRAY_A ); + + $result_counts = array( + 'spam' => 0, + 'ham' => 0, + 'error' => 0, + ); + + foreach ( (array) $moderation as $c ) { + $c['user_ip'] = $c['comment_author_IP']; + $c['user_agent'] = $c['comment_agent']; + $c['referrer'] = ''; + $c['blog'] = get_bloginfo('url'); + $c['blog_lang'] = get_locale(); + $c['blog_charset'] = get_option('blog_charset'); + $c['permalink'] = get_permalink($c['comment_post_ID']); + + $c['user_role'] = ''; + if ( isset( $c['user_ID'] ) ) + $c['user_role'] = Akismet::get_user_roles($c['user_ID']); + + if ( Akismet::is_test_mode() ) + $c['is_test'] = 'true'; + + add_comment_meta( $c['comment_ID'], 'akismet_rechecking', true ); + + $response = Akismet::http_post( Akismet::build_query( $c ), 'comment-check' ); + + if ( 'true' == $response[1] ) { + wp_set_comment_status( $c['comment_ID'], 'spam' ); + update_comment_meta( $c['comment_ID'], 'akismet_result', 'true' ); + delete_comment_meta( $c['comment_ID'], 'akismet_error' ); + delete_comment_meta( $c['comment_ID'], 'akismet_delayed_moderation_email' ); + Akismet::update_comment_history( $c['comment_ID'], '', 'recheck-spam' ); + ++$result_counts['spam']; + } elseif ( 'false' == $response[1] ) { + update_comment_meta( $c['comment_ID'], 'akismet_result', 'false' ); + delete_comment_meta( $c['comment_ID'], 'akismet_error' ); + delete_comment_meta( $c['comment_ID'], 'akismet_delayed_moderation_email' ); + Akismet::update_comment_history( $c['comment_ID'], '', 'recheck-ham' ); + ++$result_counts['ham']; + } else { + // abnormal result: error + update_comment_meta( $c['comment_ID'], 'akismet_result', 'error' ); + Akismet::update_comment_history( + $c['comment_ID'], + '', + 'recheck-error', + array( 'response' => substr( $response[1], 0, 50 ) ) + ); + ++$result_counts['error']; + } + + delete_comment_meta( $c['comment_ID'], 'akismet_rechecking' ); + } + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { + wp_send_json( array( + 'processed' => count((array) $moderation), + 'counts' => $result_counts, + )); + } + else { + $redirect_to = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : admin_url( 'edit-comments.php' ); + wp_safe_redirect( $redirect_to ); + exit; + } + } + + // Adds an 'x' link next to author URLs, clicking will remove the author URL and show an undo link + public static function remove_comment_author_url() { + if ( !empty( $_POST['id'] ) && check_admin_referer( 'comment_author_url_nonce' ) ) { + $comment = get_comment( intval( $_POST['id'] ), ARRAY_A ); + if ( $comment && current_user_can( 'edit_comment', $comment['comment_ID'] ) ) { + $comment['comment_author_url'] = ''; + do_action( 'comment_remove_author_url' ); + print( wp_update_comment( $comment ) ); + die(); + } + } + } + + public static function add_comment_author_url() { + if ( !empty( $_POST['id'] ) && !empty( $_POST['url'] ) && check_admin_referer( 'comment_author_url_nonce' ) ) { + $comment = get_comment( intval( $_POST['id'] ), ARRAY_A ); + if ( $comment && current_user_can( 'edit_comment', $comment['comment_ID'] ) ) { + $comment['comment_author_url'] = esc_url( $_POST['url'] ); + do_action( 'comment_add_author_url' ); + print( wp_update_comment( $comment ) ); + die(); + } + } + } + + public static function comment_row_action( $a, $comment ) { + + // failsafe for old WP versions + if ( !function_exists('add_comment_meta') ) + return $a; + + $akismet_result = get_comment_meta( $comment->comment_ID, 'akismet_result', true ); + $akismet_error = get_comment_meta( $comment->comment_ID, 'akismet_error', true ); + $user_result = get_comment_meta( $comment->comment_ID, 'akismet_user_result', true); + $comment_status = wp_get_comment_status( $comment->comment_ID ); + $desc = null; + if ( $akismet_error ) { + $desc = __( 'Awaiting spam check' , 'akismet'); + } elseif ( !$user_result || $user_result == $akismet_result ) { + // Show the original Akismet result if the user hasn't overridden it, or if their decision was the same + if ( $akismet_result == 'true' && $comment_status != 'spam' && $comment_status != 'trash' ) + $desc = __( 'Flagged as spam by Akismet' , 'akismet'); + elseif ( $akismet_result == 'false' && $comment_status == 'spam' ) + $desc = __( 'Cleared by Akismet' , 'akismet'); + } else { + $who = get_comment_meta( $comment->comment_ID, 'akismet_user', true ); + if ( $user_result == 'true' ) + $desc = sprintf( __('Flagged as spam by %s', 'akismet'), $who ); + else + $desc = sprintf( __('Un-spammed by %s', 'akismet'), $who ); + } + + // add a History item to the hover links, just after Edit + if ( $akismet_result ) { + $b = array(); + foreach ( $a as $k => $item ) { + $b[ $k ] = $item; + if ( + $k == 'edit' + || ( $k == 'unspam' && $GLOBALS['wp_version'] >= 3.4 ) + ) { + $b['history'] = ' '. esc_html__('History', 'akismet') . ''; + } + } + + $a = $b; + } + + if ( $desc ) + echo ''.esc_html( $desc ).''; + + $show_user_comments = apply_filters( 'akismet_show_user_comments_approved', get_option('akismet_show_user_comments_approved') ); + $show_user_comments = $show_user_comments === 'false' ? false : $show_user_comments; //option used to be saved as 'false' / 'true' + + if ( $show_user_comments ) { + $comment_count = Akismet::get_user_comments_approved( $comment->user_id, $comment->comment_author_email, $comment->comment_author, $comment->comment_author_url ); + $comment_count = intval( $comment_count ); + echo ''; + } + + return $a; + } + + public static function comment_status_meta_box( $comment ) { + $history = Akismet::get_comment_history( $comment->comment_ID ); + + if ( $history ) { + echo '
'; + + foreach ( $history as $row ) { + $time = date( 'D d M Y @ h:i:m a', $row['time'] ) . ' GMT'; + + $message = ''; + + if ( ! empty( $row['message'] ) ) { + // Old versions of Akismet stored the message as a literal string in the commentmeta. + // New versions don't do that for two reasons: + // 1) Save space. + // 2) The message can be translated into the current language of the blog, not stuck + // in the language of the blog when the comment was made. + $message = $row['message']; + } + + // If possible, use a current translation. + switch ( $row['event'] ) { + case 'recheck-spam'; + $message = __( 'Akismet re-checked and caught this comment as spam.', 'akismet' ); + break; + case 'check-spam': + $message = __( 'Akismet caught this comment as spam.', 'akismet' ); + break; + case 'recheck-ham': + $message = __( 'Akismet re-checked and cleared this comment.', 'akismet' ); + break; + case 'check-ham': + $message = __( 'Akismet cleared this comment.', 'akismet' ); + break; + case 'wp-blacklisted': + $message = __( 'Comment was caught by wp_blacklist_check.', 'akismet' ); + break; + case 'report-spam': + if ( isset( $row['user'] ) ) { + $message = sprintf( __( '%s reported this comment as spam.', 'akismet' ), $row['user'] ); + } + else if ( ! $message ) { + $message = __( 'This comment was reported as spam.', 'akismet' ); + } + break; + case 'report-ham': + if ( isset( $row['user'] ) ) { + $message = sprintf( __( '%s reported this comment as not spam.', 'akismet' ), $row['user'] ); + } + else if ( ! $message ) { + $message = __( 'This comment was reported as not spam.', 'akismet' ); + } + break; + case 'cron-retry-spam': + $message = __( 'Akismet caught this comment as spam during an automatic retry.' , 'akismet'); + break; + case 'cron-retry-ham': + $message = __( 'Akismet cleared this comment during an automatic retry.', 'akismet'); + break; + case 'check-error': + if ( isset( $row['meta'], $row['meta']['response'] ) ) { + $message = sprintf( __( 'Akismet was unable to check this comment (response: %s) but will automatically retry later.', 'akismet'), $row['meta']['response'] ); + } + break; + case 'recheck-error': + if ( isset( $row['meta'], $row['meta']['response'] ) ) { + $message = sprintf( __( 'Akismet was unable to recheck this comment (response: %s).', 'akismet'), $row['meta']['response'] ); + } + break; + default: + if ( preg_match( '/^status-changed/', $row['event'] ) ) { + // Half of these used to be saved without the dash after 'status-changed'. + // See https://plugins.trac.wordpress.org/changeset/1150658/akismet/trunk + $new_status = preg_replace( '/^status-changed-?/', '', $row['event'] ); + $message = sprintf( __( 'Comment status was changed to %s', 'akismet' ), $new_status ); + } + else if ( preg_match( '/^status-/', $row['event'] ) ) { + $new_status = preg_replace( '/^status-/', '', $row['event'] ); + + if ( isset( $row['user'] ) ) { + $message = sprintf( __( '%1$s changed the comment status to %2$s.', 'akismet' ), $row['user'], $new_status ); + } + } + break; + + } + + echo '
'; + echo '' . sprintf( esc_html__('%s ago', 'akismet'), human_time_diff( $row['time'] ) ) . ''; + echo ' - '; + echo esc_html( $message ); + echo '
'; + } + + echo '
'; + } + } + + public static function plugin_action_links( $links, $file ) { + if ( $file == plugin_basename( plugin_dir_url( __FILE__ ) . '/akismet.php' ) ) { + $links[] = ''.esc_html__( 'Settings' , 'akismet').''; + } + + return $links; + } + + // Total spam in queue + // get_option( 'akismet_spam_count' ) is the total caught ever + public static function get_spam_count( $type = false ) { + global $wpdb; + + if ( !$type ) { // total + $count = wp_cache_get( 'akismet_spam_count', 'widget' ); + if ( false === $count ) { + if ( function_exists('wp_count_comments') ) { + $count = wp_count_comments(); + $count = $count->spam; + } else { + $count = (int) $wpdb->get_var("SELECT COUNT(comment_ID) FROM {$wpdb->comments} WHERE comment_approved = 'spam'"); + } + wp_cache_set( 'akismet_spam_count', $count, 'widget', 3600 ); + } + return $count; + } elseif ( 'comments' == $type || 'comment' == $type ) { // comments + $type = ''; + } + + return (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(comment_ID) FROM {$wpdb->comments} WHERE comment_approved = 'spam' AND comment_type = %s", $type ) ); + } + + // Check connectivity between the WordPress blog and Akismet's servers. + // Returns an associative array of server IP addresses, where the key is the IP address, and value is true (available) or false (unable to connect). + public static function check_server_ip_connectivity() { + + $servers = $ips = array(); + + // Some web hosts may disable this function + if ( function_exists('gethostbynamel') ) { + + $ips = gethostbynamel( 'rest.akismet.com' ); + if ( $ips && is_array($ips) && count($ips) ) { + $api_key = Akismet::get_api_key(); + + foreach ( $ips as $ip ) { + $response = Akismet::verify_key( $api_key, $ip ); + // even if the key is invalid, at least we know we have connectivity + if ( $response == 'valid' || $response == 'invalid' ) + $servers[$ip] = 'connected'; + else + $servers[$ip] = $response ? $response : 'unable to connect'; + } + } + } + + return $servers; + } + + // Simpler connectivity check + public static function check_server_connectivity($cache_timeout = 86400) { + + $debug = array(); + $debug[ 'PHP_VERSION' ] = PHP_VERSION; + $debug[ 'WORDPRESS_VERSION' ] = $GLOBALS['wp_version']; + $debug[ 'AKISMET_VERSION' ] = AKISMET_VERSION; + $debug[ 'AKISMET__PLUGIN_DIR' ] = AKISMET__PLUGIN_DIR; + $debug[ 'SITE_URL' ] = site_url(); + $debug[ 'HOME_URL' ] = home_url(); + + $servers = get_option('akismet_available_servers'); + if ( (time() - get_option('akismet_connectivity_time') < $cache_timeout) && $servers !== false ) { + $servers = self::check_server_ip_connectivity(); + update_option('akismet_available_servers', $servers); + update_option('akismet_connectivity_time', time()); + } + + $response = wp_remote_get( 'http://rest.akismet.com/1.1/test' ); + + $debug[ 'gethostbynamel' ] = function_exists('gethostbynamel') ? 'exists' : 'not here'; + $debug[ 'Servers' ] = $servers; + $debug[ 'Test Connection' ] = $response; + + Akismet::log( $debug ); + + if ( $response && 'connected' == wp_remote_retrieve_body( $response ) ) + return true; + + return false; + } + + // Check the server connectivity and store the available servers in an option. + public static function get_server_connectivity($cache_timeout = 86400) { + return self::check_server_connectivity( $cache_timeout ); + } + + public static function get_number_spam_waiting() { + global $wpdb; + return (int) $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->commentmeta} WHERE meta_key = 'akismet_error'" ); + } + + public static function get_page_url( $page = 'config' ) { + + $args = array( 'page' => 'akismet-key-config' ); + + if ( $page == 'stats' ) + $args = array( 'page' => 'akismet-key-config', 'view' => 'stats' ); + elseif ( $page == 'delete_key' ) + $args = array( 'page' => 'akismet-key-config', 'view' => 'start', 'action' => 'delete-key', '_wpnonce' => wp_create_nonce( self::NONCE ) ); + + $url = add_query_arg( $args, class_exists( 'Jetpack' ) ? admin_url( 'admin.php' ) : admin_url( 'options-general.php' ) ); + + return $url; + } + + public static function get_akismet_user( $api_key ) { + $akismet_user = false; + + $subscription_verification = Akismet::http_post( Akismet::build_query( array( 'key' => $api_key, 'blog' => get_bloginfo( 'url' ) ) ), 'get-subscription' ); + + if ( ! empty( $subscription_verification[1] ) ) { + if ( 'invalid' !== $subscription_verification[1] ) { + $akismet_user = json_decode( $subscription_verification[1] ); + } + } + + return $akismet_user; + } + + public static function get_stats( $api_key ) { + $stat_totals = array(); + + foreach( array( '6-months', 'all' ) as $interval ) { + $response = Akismet::http_post( Akismet::build_query( array( 'blog' => get_bloginfo( 'url' ), 'key' => $api_key, 'from' => $interval ) ), 'get-stats' ); + + if ( ! empty( $response[1] ) ) { + $stat_totals[$interval] = json_decode( $response[1] ); + } + } + + return $stat_totals; + } + + public static function verify_wpcom_key( $api_key, $user_id, $extra = array() ) { + $akismet_account = Akismet::http_post( Akismet::build_query( array_merge( array( + 'user_id' => $user_id, + 'api_key' => $api_key, + 'get_account_type' => 'true' + ), $extra ) ), 'verify-wpcom-key' ); + + if ( ! empty( $akismet_account[1] ) ) + $akismet_account = json_decode( $akismet_account[1] ); + + Akismet::log( compact( 'akismet_account' ) ); + + return $akismet_account; + } + + public static function connect_jetpack_user() { + + if ( $jetpack_user = self::get_jetpack_user() ) { + if ( isset( $jetpack_user['user_id'] ) && isset( $jetpack_user['api_key'] ) ) { + $akismet_user = self::verify_wpcom_key( $jetpack_user['api_key'], $jetpack_user['user_id'], array( 'action' => 'connect_jetpack_user' ) ); + + if ( is_object( $akismet_user ) ) { + self::save_key( $akismet_user->api_key ); + return in_array( $akismet_user->status, array( 'active', 'active-dunning', 'no-sub' ) ); + } + } + } + + return false; + } + + public static function display_alert() { + Akismet::view( 'notice', array( + 'type' => 'alert', + 'code' => (int) get_option( 'akismet_alert_code' ), + 'msg' => get_option( 'akismet_alert_msg' ) + ) ); + } + + public static function display_spam_check_warning() { + Akismet::fix_scheduled_recheck(); + + if ( wp_next_scheduled('akismet_schedule_cron_recheck') > time() && self::get_number_spam_waiting() > 0 ) { + $link_text = apply_filters( 'akismet_spam_check_warning_link_text', sprintf( __( 'Please check your Akismet configuration and contact your web host if problems persist.', 'akismet'), esc_url( self::get_page_url() ) ) ); + Akismet::view( 'notice', array( 'type' => 'spam-check', 'link_text' => $link_text ) ); + } + } + + public static function display_invalid_version() { + Akismet::view( 'notice', array( 'type' => 'version' ) ); + } + + public static function display_api_key_warning() { + Akismet::view( 'notice', array( 'type' => 'plugin' ) ); + } + + public static function display_page() { + if ( !Akismet::get_api_key() || ( isset( $_GET['view'] ) && $_GET['view'] == 'start' ) ) + self::display_start_page(); + elseif ( isset( $_GET['view'] ) && $_GET['view'] == 'stats' ) + self::display_stats_page(); + else + self::display_configuration_page(); + } + + public static function display_start_page() { + if ( isset( $_GET['action'] ) ) { + if ( $_GET['action'] == 'delete-key' ) { + if ( isset( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], self::NONCE ) ) + delete_option( 'wordpress_api_key' ); + } + } + + if ( $api_key = Akismet::get_api_key() && ( empty( self::$notices['status'] ) || 'existing-key-invalid' != self::$notices['status'] ) ) { + self::display_configuration_page(); + return; + } + + //the user can choose to auto connect their API key by clicking a button on the akismet done page + //if jetpack, get verified api key by using connected wpcom user id + //if no jetpack, get verified api key by using an akismet token + + $akismet_user = false; + + if ( isset( $_GET['token'] ) && preg_match('/^(\d+)-[0-9a-f]{20}$/', $_GET['token'] ) ) + $akismet_user = self::verify_wpcom_key( '', '', array( 'token' => $_GET['token'] ) ); + elseif ( $jetpack_user = self::get_jetpack_user() ) + $akismet_user = self::verify_wpcom_key( $jetpack_user['api_key'], $jetpack_user['user_id'] ); + + if ( isset( $_GET['action'] ) ) { + if ( $_GET['action'] == 'save-key' ) { + if ( is_object( $akismet_user ) ) { + self::save_key( $akismet_user->api_key ); + self::display_notice(); + self::display_configuration_page(); + return; + } + } + } + + echo '

'.esc_html__('Akismet', 'akismet').'

'; + + self::display_status(); + + Akismet::view( 'start', compact( 'akismet_user' ) ); + } + + public static function display_stats_page() { + Akismet::view( 'stats' ); + } + + public static function display_configuration_page() { + $api_key = Akismet::get_api_key(); + $akismet_user = self::get_akismet_user( $api_key ); + + if ( ! $akismet_user ) { + // This could happen if the user's key became invalid after it was previously valid and successfully set up. + self::$notices['status'] = 'existing-key-invalid'; + self::display_start_page(); + return; + } + + $stat_totals = self::get_stats( $api_key ); + + // If unset, create the new strictness option using the old discard option to determine its default + if ( get_option( 'akismet_strictness' ) === false ) + add_option( 'akismet_strictness', (get_option('akismet_discard_month') === 'true' ? '1' : '0') ); + + if ( empty( self::$notices ) ) { + //show status + if ( ! empty( $stat_totals['all'] ) && isset( $stat_totals['all']->time_saved ) && $akismet_user->status == 'active' && $akismet_user->account_type == 'free-api-key' ) { + + $time_saved = false; + + if ( $stat_totals['all']->time_saved > 1800 ) { + $total_in_minutes = round( $stat_totals['all']->time_saved / 60 ); + $total_in_hours = round( $total_in_minutes / 60 ); + $total_in_days = round( $total_in_hours / 8 ); + $cleaning_up = __( 'Cleaning up spam takes time.' , 'akismet'); + + if ( $total_in_days > 1 ) + $time_saved = $cleaning_up . ' ' . sprintf( _n( 'Akismet has saved you %s day!', 'Akismet has saved you %s days!', $total_in_days, 'akismet' ), number_format_i18n( $total_in_days ) ); + elseif ( $total_in_hours > 1 ) + $time_saved = $cleaning_up . ' ' . sprintf( _n( 'Akismet has saved you %d hour!', 'Akismet has saved you %d hours!', $total_in_hours, 'akismet' ), $total_in_hours ); + elseif ( $total_in_minutes >= 30 ) + $time_saved = $cleaning_up . ' ' . sprintf( _n( 'Akismet has saved you %d minute!', 'Akismet has saved you %d minutes!', $total_in_minutes, 'akismet' ), $total_in_minutes ); + } + + Akismet::view( 'notice', array( 'type' => 'active-notice', 'time_saved' => $time_saved ) ); + } + + if ( !empty( $akismet_user->limit_reached ) && in_array( $akismet_user->limit_reached, array( 'yellow', 'red' ) ) ) { + Akismet::view( 'notice', array( 'type' => 'limit-reached', 'level' => $akismet_user->limit_reached ) ); + } + } + + if ( !isset( self::$notices['status'] ) && in_array( $akismet_user->status, array( 'cancelled', 'suspended', 'missing', 'no-sub' ) ) ) + Akismet::view( 'notice', array( 'type' => $akismet_user->status ) ); + + Akismet::log( compact( 'stat_totals', 'akismet_user' ) ); + Akismet::view( 'config', compact( 'api_key', 'akismet_user', 'stat_totals' ) ); + } + + public static function display_notice() { + global $hook_suffix; + + if ( in_array( $hook_suffix, array( 'jetpack_page_akismet-key-config', 'settings_page_akismet-key-config', 'edit-comments.php' ) ) && (int) get_option( 'akismet_alert_code' ) > 0 ) { + Akismet::verify_key( Akismet::get_api_key() ); //verify that the key is still in alert state + + if ( get_option( 'akismet_alert_code' ) > 0 ) + self::display_alert(); + } + elseif ( $hook_suffix == 'plugins.php' && !Akismet::get_api_key() ) { + self::display_api_key_warning(); + } + elseif ( $hook_suffix == 'edit-comments.php' && wp_next_scheduled( 'akismet_schedule_cron_recheck' ) ) { + self::display_spam_check_warning(); + } + elseif ( in_array( $hook_suffix, array( 'jetpack_page_akismet-key-config', 'settings_page_akismet-key-config' ) ) && Akismet::get_api_key() ) { + self::display_status(); + } + } + + public static function display_status() { + $type = ''; + + if ( !self::get_server_connectivity() ) + $type = 'servers-be-down'; + + if ( !empty( $type ) ) + Akismet::view( 'notice', compact( 'type' ) ); + elseif ( !empty( self::$notices ) ) { + foreach ( self::$notices as $type ) { + if ( is_object( $type ) ) { + $notice_header = $notice_text = ''; + + if ( property_exists( $type, 'notice_header' ) ) + $notice_header = wp_kses( $type->notice_header, self::$allowed ); + + if ( property_exists( $type, 'notice_text' ) ) + $notice_text = wp_kses( $type->notice_text, self::$allowed ); + + if ( property_exists( $type, 'status' ) ) { + $type = wp_kses( $type->status, self::$allowed ); + Akismet::view( 'notice', compact( 'type', 'notice_header', 'notice_text' ) ); + } + } + else + Akismet::view( 'notice', compact( 'type' ) ); + } + } + } + + private static function get_jetpack_user() { + if ( !class_exists('Jetpack') ) + return false; + + Jetpack::load_xml_rpc_client(); + $xml = new Jetpack_IXR_ClientMulticall( array( 'user_id' => get_current_user_id() ) ); + + $xml->addCall( 'wpcom.getUserID' ); + $xml->addCall( 'akismet.getAPIKey' ); + $xml->query(); + + Akismet::log( compact( 'xml' ) ); + + if ( !$xml->isError() ) { + $responses = $xml->getResponse(); + if ( count( $responses ) > 1 ) { + $api_key = array_shift( $responses[0] ); + $user_id = (int) array_shift( $responses[1] ); + return compact( 'api_key', 'user_id' ); + } + } + return false; + } + + /** + * Some commentmeta isn't useful in an export file. Suppress it (when supported). + * + * @param bool $exclude + * @param string $key The meta key + * @param object $meta The meta object + * @return bool Whether to exclude this meta entry from the export. + */ + public static function exclude_commentmeta_from_export( $exclude, $key, $meta ) { + if ( in_array( $key, array( 'akismet_as_submitted', 'akismet_rechecking', 'akismet_delayed_moderation_email' ) ) ) { + return true; + } + + return $exclude; + } +} \ No newline at end of file diff --git a/plugins/akismet/class.akismet-widget.php b/plugins/akismet/class.akismet-widget.php new file mode 100644 index 0000000..a2c4f30 --- /dev/null +++ b/plugins/akismet/class.akismet-widget.php @@ -0,0 +1,110 @@ + __( 'Display the number of spam comments Akismet has caught' , 'akismet') ) + ); + + if ( is_active_widget( false, false, $this->id_base ) ) { + add_action( 'wp_head', array( $this, 'css' ) ); + } + } + + function css() { +?> + + + + + +

+ + +

+ + + + + + '', 'blog_charset' => '', 'blog_lang' => '', 'blog_ua' => '', 'comment_agent' => '', 'comment_author' => '', 'comment_author_IP' => '', 'comment_author_email' => '', 'comment_author_url' => '', 'comment_content' => '', 'comment_date_gmt' => '', 'comment_tags' => '', 'comment_type' => '', 'guid' => '', 'is_test' => '', 'permalink' => '', 'reporter' => '', 'site_domain' => '', 'submit_referer' => '', 'submit_uri' => '', 'user_ID' => '', 'user_agent' => '', 'user_id' => '', 'user_ip' => '' ); + + public static function init() { + if ( ! self::$initiated ) { + self::init_hooks(); + } + } + + /** + * Initializes WordPress hooks + */ + private static function init_hooks() { + self::$initiated = true; + + add_action( 'wp_insert_comment', array( 'Akismet', 'auto_check_update_meta' ), 10, 2 ); + add_filter( 'preprocess_comment', array( 'Akismet', 'auto_check_comment' ), 1 ); + add_action( 'akismet_scheduled_delete', array( 'Akismet', 'delete_old_comments' ) ); + add_action( 'akismet_scheduled_delete', array( 'Akismet', 'delete_old_comments_meta' ) ); + add_action( 'akismet_schedule_cron_recheck', array( 'Akismet', 'cron_recheck' ) ); + + /** + * To disable the Akismet comment nonce, add a filter for the 'akismet_comment_nonce' tag + * and return any string value that is not 'true' or '' (empty string). + * + * Don't return boolean false, because that implies that the 'akismet_comment_nonce' option + * has not been set and that Akismet should just choose the default behavior for that + * situation. + */ + $akismet_comment_nonce_option = apply_filters( 'akismet_comment_nonce', get_option( 'akismet_comment_nonce' ) ); + + if ( $akismet_comment_nonce_option == 'true' || $akismet_comment_nonce_option == '' ) + add_action( 'comment_form', array( 'Akismet', 'add_comment_nonce' ), 1 ); + + add_action( 'admin_head-edit-comments.php', array( 'Akismet', 'load_form_js' ) ); + add_action( 'comment_form', array( 'Akismet', 'load_form_js' ) ); + add_action( 'comment_form', array( 'Akismet', 'inject_ak_js' ) ); + + add_filter( 'comment_moderation_recipients', array( 'Akismet', 'disable_moderation_emails_if_unreachable' ), 1000, 2 ); + add_filter( 'pre_comment_approved', array( 'Akismet', 'last_comment_status' ), 10, 2 ); + + add_action( 'transition_comment_status', array( 'Akismet', 'transition_comment_status' ), 10, 3 ); + + // Run this early in the pingback call, before doing a remote fetch of the source uri + add_action( 'xmlrpc_call', array( 'Akismet', 'pre_check_pingback' ) ); + + // Jetpack compatibility + add_filter( 'jetpack_options_whitelist', array( 'Akismet', 'add_to_jetpack_options_whitelist' ) ); + add_action( 'update_option_wordpress_api_key', array( 'Akismet', 'updated_option' ), 10, 2 ); + } + + public static function get_api_key() { + return apply_filters( 'akismet_get_api_key', defined('WPCOM_API_KEY') ? constant('WPCOM_API_KEY') : get_option('wordpress_api_key') ); + } + + public static function check_key_status( $key, $ip = null ) { + return self::http_post( Akismet::build_query( array( 'key' => $key, 'blog' => get_option('home') ) ), 'verify-key', $ip ); + } + + public static function verify_key( $key, $ip = null ) { + $response = self::check_key_status( $key, $ip ); + + if ( $response[1] != 'valid' && $response[1] != 'invalid' ) + return 'failed'; + + return $response[1]; + } + + public static function deactivate_key( $key ) { + $response = self::http_post( Akismet::build_query( array( 'key' => $key, 'blog' => get_option('home') ) ), 'deactivate' ); + + if ( $response[1] != 'deactivated' ) + return 'failed'; + + return $response[1]; + } + + /** + * Add the akismet option to the Jetpack options management whitelist. + * + * @param array $options The list of whitelisted option names. + * @return array The updated whitelist + */ + public static function add_to_jetpack_options_whitelist( $options ) { + $options[] = 'wordpress_api_key'; + return $options; + } + + /** + * When the akismet option is updated, run the registration call. + * + * This should only be run when the option is updated from the Jetpack/WP.com + * API call, and only if the new key is different than the old key. + * + * @param mixed $old_value The old option value. + * @param mixed $value The new option value. + */ + public static function updated_option( $old_value, $value ) { + // Not an API call + if ( ! class_exists( 'WPCOM_JSON_API_Update_Option_Endpoint' ) ) { + return; + } + // Only run the registration if the old key is different. + if ( $old_value !== $value ) { + self::verify_key( $value ); + } + } + + public static function auto_check_comment( $commentdata ) { + self::$last_comment_result = null; + + $comment = $commentdata; + + $comment['user_ip'] = self::get_ip_address(); + $comment['user_agent'] = self::get_user_agent(); + $comment['referrer'] = self::get_referer(); + $comment['blog'] = get_option('home'); + $comment['blog_lang'] = get_locale(); + $comment['blog_charset'] = get_option('blog_charset'); + $comment['permalink'] = get_permalink( $comment['comment_post_ID'] ); + + if ( !empty( $comment['user_ID'] ) ) + $comment['user_role'] = Akismet::get_user_roles( $comment['user_ID'] ); + + /** See filter documentation in init_hooks(). */ + $akismet_nonce_option = apply_filters( 'akismet_comment_nonce', get_option( 'akismet_comment_nonce' ) ); + $comment['akismet_comment_nonce'] = 'inactive'; + if ( $akismet_nonce_option == 'true' || $akismet_nonce_option == '' ) { + $comment['akismet_comment_nonce'] = 'failed'; + if ( isset( $_POST['akismet_comment_nonce'] ) && wp_verify_nonce( $_POST['akismet_comment_nonce'], 'akismet_comment_nonce_' . $comment['comment_post_ID'] ) ) + $comment['akismet_comment_nonce'] = 'passed'; + + // comment reply in wp-admin + if ( isset( $_POST['_ajax_nonce-replyto-comment'] ) && check_ajax_referer( 'replyto-comment', '_ajax_nonce-replyto-comment' ) ) + $comment['akismet_comment_nonce'] = 'passed'; + + } + + if ( self::is_test_mode() ) + $comment['is_test'] = 'true'; + + foreach( $_POST as $key => $value ) { + if ( is_string( $value ) ) + $comment["POST_{$key}"] = $value; + } + + foreach ( $_SERVER as $key => $value ) { + if ( ! is_string( $value ) ) { + continue; + } + + if ( preg_match( "/^HTTP_COOKIE/", $key ) ) { + continue; + } + + // Send any potentially useful $_SERVER vars, but avoid sending junk we don't need. + if ( preg_match( "/^(HTTP_|REMOTE_ADDR|REQUEST_URI|DOCUMENT_URI)/", $key ) ) { + $comment[ "$key" ] = $value; + } + } + + $post = get_post( $comment['comment_post_ID'] ); + $comment[ 'comment_post_modified_gmt' ] = $post->post_modified_gmt; + + $response = self::http_post( Akismet::build_query( $comment ), 'comment-check' ); + + do_action( 'akismet_comment_check_response', $response ); + + $commentdata['comment_as_submitted'] = array_intersect_key( $comment, self::$comment_as_submitted_allowed_keys ); + $commentdata['akismet_result'] = $response[1]; + + if ( isset( $response[0]['x-akismet-pro-tip'] ) ) + $commentdata['akismet_pro_tip'] = $response[0]['x-akismet-pro-tip']; + + if ( isset( $response[0]['x-akismet-error'] ) ) { + // An error occurred that we anticipated (like a suspended key) and want the user to act on. + // Send to moderation. + self::$last_comment_result = '0'; + } + else if ( 'true' == $response[1] ) { + // akismet_spam_count will be incremented later by comment_is_spam() + self::$last_comment_result = 'spam'; + + $discard = ( isset( $commentdata['akismet_pro_tip'] ) && $commentdata['akismet_pro_tip'] === 'discard' && self::allow_discard() ); + + do_action( 'akismet_spam_caught', $discard ); + + if ( $discard ) { + // akismet_result_spam() won't be called so bump the counter here + if ( $incr = apply_filters('akismet_spam_count_incr', 1) ) + update_option( 'akismet_spam_count', get_option('akismet_spam_count') + $incr ); + $redirect_to = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : get_permalink( $post ); + wp_safe_redirect( esc_url_raw( $redirect_to ) ); + die(); + } + } + + // if the response is neither true nor false, hold the comment for moderation and schedule a recheck + if ( 'true' != $response[1] && 'false' != $response[1] ) { + if ( !current_user_can('moderate_comments') ) { + // Comment status should be moderated + self::$last_comment_result = '0'; + } + if ( function_exists('wp_next_scheduled') && function_exists('wp_schedule_single_event') ) { + if ( !wp_next_scheduled( 'akismet_schedule_cron_recheck' ) ) { + wp_schedule_single_event( time() + 1200, 'akismet_schedule_cron_recheck' ); + do_action( 'akismet_scheduled_recheck', 'invalid-response-' . $response[1] ); + } + } + + self::$prevent_moderation_email_for_these_comments[] = $commentdata; + } + + if ( function_exists('wp_next_scheduled') && function_exists('wp_schedule_event') ) { + // WP 2.1+: delete old comments daily + if ( !wp_next_scheduled( 'akismet_scheduled_delete' ) ) + wp_schedule_event( time(), 'daily', 'akismet_scheduled_delete' ); + } + elseif ( (mt_rand(1, 10) == 3) ) { + // WP 2.0: run this one time in ten + self::delete_old_comments(); + } + + self::set_last_comment( $commentdata ); + self::fix_scheduled_recheck(); + + return $commentdata; + } + + public static function get_last_comment() { + return self::$last_comment; + } + + public static function set_last_comment( $comment ) { + if ( is_null( $comment ) ) { + self::$last_comment = null; + } + else { + // We filter it here so that it matches the filtered comment data that we'll have to compare against later. + // wp_filter_comment expects comment_author_IP + self::$last_comment = wp_filter_comment( + array_merge( + array( 'comment_author_IP' => self::get_ip_address() ), + $comment + ) + ); + } + } + + // this fires on wp_insert_comment. we can't update comment_meta when auto_check_comment() runs + // because we don't know the comment ID at that point. + public static function auto_check_update_meta( $id, $comment ) { + + // failsafe for old WP versions + if ( !function_exists('add_comment_meta') ) + return false; + + if ( !isset( self::$last_comment['comment_author_email'] ) ) + self::$last_comment['comment_author_email'] = ''; + + // wp_insert_comment() might be called in other contexts, so make sure this is the same comment + // as was checked by auto_check_comment + if ( is_object( $comment ) && !empty( self::$last_comment ) && is_array( self::$last_comment ) ) { + if ( self::matches_last_comment( $comment ) ) { + + load_plugin_textdomain( 'akismet' ); + + // normal result: true or false + if ( self::$last_comment['akismet_result'] == 'true' ) { + update_comment_meta( $comment->comment_ID, 'akismet_result', 'true' ); + self::update_comment_history( $comment->comment_ID, '', 'check-spam' ); + if ( $comment->comment_approved != 'spam' ) + self::update_comment_history( + $comment->comment_ID, + '', + 'status-changed-'.$comment->comment_approved + ); + } + elseif ( self::$last_comment['akismet_result'] == 'false' ) { + update_comment_meta( $comment->comment_ID, 'akismet_result', 'false' ); + self::update_comment_history( $comment->comment_ID, '', 'check-ham' ); + // Status could be spam or trash, depending on the WP version and whether this change applies: + // https://core.trac.wordpress.org/changeset/34726 + if ( $comment->comment_approved == 'spam' || $comment->comment_approved == 'trash' ) { + if ( wp_blacklist_check($comment->comment_author, $comment->comment_author_email, $comment->comment_author_url, $comment->comment_content, $comment->comment_author_IP, $comment->comment_agent) ) + self::update_comment_history( $comment->comment_ID, '', 'wp-blacklisted' ); + else + self::update_comment_history( $comment->comment_ID, '', 'status-changed-'.$comment->comment_approved ); + } + } // abnormal result: error + else { + update_comment_meta( $comment->comment_ID, 'akismet_error', time() ); + self::update_comment_history( + $comment->comment_ID, + '', + 'check-error', + array( 'response' => substr( self::$last_comment['akismet_result'], 0, 50 ) ) + ); + } + + // record the complete original data as submitted for checking + if ( isset( self::$last_comment['comment_as_submitted'] ) ) + update_comment_meta( $comment->comment_ID, 'akismet_as_submitted', self::$last_comment['comment_as_submitted'] ); + + if ( isset( self::$last_comment['akismet_pro_tip'] ) ) + update_comment_meta( $comment->comment_ID, 'akismet_pro_tip', self::$last_comment['akismet_pro_tip'] ); + } + } + } + + public static function delete_old_comments() { + global $wpdb; + + /** + * Determines how many comments will be deleted in each batch. + * + * @param int The default, as defined by AKISMET_DELETE_LIMIT. + */ + $delete_limit = apply_filters( 'akismet_delete_comment_limit', defined( 'AKISMET_DELETE_LIMIT' ) ? AKISMET_DELETE_LIMIT : 10000 ); + $delete_limit = max( 1, intval( $delete_limit ) ); + + /** + * Determines how many days a comment will be left in the Spam queue before being deleted. + * + * @param int The default number of days. + */ + $delete_interval = apply_filters( 'akismet_delete_comment_interval', 15 ); + $delete_interval = max( 1, intval( $delete_interval ) ); + + while ( $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_id FROM {$wpdb->comments} WHERE DATE_SUB(NOW(), INTERVAL %d DAY) > comment_date_gmt AND comment_approved = 'spam' LIMIT %d", $delete_interval, $delete_limit ) ) ) { + if ( empty( $comment_ids ) ) + return; + + $wpdb->queries = array(); + + foreach ( $comment_ids as $comment_id ) { + do_action( 'delete_comment', $comment_id ); + } + + $comma_comment_ids = implode( ', ', array_map('intval', $comment_ids) ); + + $wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_id IN ( $comma_comment_ids )"); + $wpdb->query("DELETE FROM {$wpdb->commentmeta} WHERE comment_id IN ( $comma_comment_ids )"); + + clean_comment_cache( $comment_ids ); + } + + if ( apply_filters( 'akismet_optimize_table', ( mt_rand(1, 5000) == 11), $wpdb->comments ) ) // lucky number + $wpdb->query("OPTIMIZE TABLE {$wpdb->comments}"); + } + + public static function delete_old_comments_meta() { + global $wpdb; + + $interval = apply_filters( 'akismet_delete_commentmeta_interval', 15 ); + + # enfore a minimum of 1 day + $interval = absint( $interval ); + if ( $interval < 1 ) + $interval = 1; + + // akismet_as_submitted meta values are large, so expire them + // after $interval days regardless of the comment status + while ( $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT m.comment_id FROM {$wpdb->commentmeta} as m INNER JOIN {$wpdb->comments} as c USING(comment_id) WHERE m.meta_key = 'akismet_as_submitted' AND DATE_SUB(NOW(), INTERVAL %d DAY) > c.comment_date_gmt LIMIT 10000", $interval ) ) ) { + if ( empty( $comment_ids ) ) + return; + + $wpdb->queries = array(); + + foreach ( $comment_ids as $comment_id ) { + delete_comment_meta( $comment_id, 'akismet_as_submitted' ); + } + } + + if ( apply_filters( 'akismet_optimize_table', ( mt_rand(1, 5000) == 11), $wpdb->commentmeta ) ) // lucky number + $wpdb->query("OPTIMIZE TABLE {$wpdb->commentmeta}"); + } + + // how many approved comments does this author have? + public static function get_user_comments_approved( $user_id, $comment_author_email, $comment_author, $comment_author_url ) { + global $wpdb; + + if ( !empty( $user_id ) ) + return (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->comments} WHERE user_id = %d AND comment_approved = 1", $user_id ) ); + + if ( !empty( $comment_author_email ) ) + return (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->comments} WHERE comment_author_email = %s AND comment_author = %s AND comment_author_url = %s AND comment_approved = 1", $comment_author_email, $comment_author, $comment_author_url ) ); + + return 0; + } + + // get the full comment history for a given comment, as an array in reverse chronological order + public static function get_comment_history( $comment_id ) { + + // failsafe for old WP versions + if ( !function_exists('add_comment_meta') ) + return false; + + $history = get_comment_meta( $comment_id, 'akismet_history', false ); + usort( $history, array( 'Akismet', '_cmp_time' ) ); + return $history; + } + + /** + * Log an event for a given comment, storing it in comment_meta. + * + * @param int $comment_id The ID of the relevant comment. + * @param string $message The string description of the event. No longer used. + * @param string $event The event code. + * @param array $meta Metadata about the history entry. e.g., the user that reported or changed the status of a given comment. + */ + public static function update_comment_history( $comment_id, $message, $event=null, $meta=null ) { + global $current_user; + + // failsafe for old WP versions + if ( !function_exists('add_comment_meta') ) + return false; + + $user = ''; + + $event = array( + 'time' => self::_get_microtime(), + 'event' => $event, + ); + + if ( is_object( $current_user ) && isset( $current_user->user_login ) ) { + $event['user'] = $current_user->user_login; + } + + if ( ! empty( $meta ) ) { + $event['meta'] = $meta; + } + + // $unique = false so as to allow multiple values per comment + $r = add_comment_meta( $comment_id, 'akismet_history', $event, false ); + } + + public static function check_db_comment( $id, $recheck_reason = 'recheck_queue' ) { + global $wpdb; + + $c = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->comments} WHERE comment_ID = %d", $id ), ARRAY_A ); + if ( !$c ) + return; + + $c['user_ip'] = $c['comment_author_IP']; + $c['user_agent'] = $c['comment_agent']; + $c['referrer'] = ''; + $c['blog'] = get_option('home'); + $c['blog_lang'] = get_locale(); + $c['blog_charset'] = get_option('blog_charset'); + $c['permalink'] = get_permalink($c['comment_post_ID']); + $c['recheck_reason'] = $recheck_reason; + + if ( self::is_test_mode() ) + $c['is_test'] = 'true'; + + $response = self::http_post( Akismet::build_query( $c ), 'comment-check' ); + + return ( is_array( $response ) && ! empty( $response[1] ) ) ? $response[1] : false; + } + + + + public static function transition_comment_status( $new_status, $old_status, $comment ) { + + if ( $new_status == $old_status ) + return; + + # we don't need to record a history item for deleted comments + if ( $new_status == 'delete' ) + return; + + if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) && !current_user_can( 'moderate_comments' ) ) + return; + + if ( defined('WP_IMPORTING') && WP_IMPORTING == true ) + return; + + // if this is present, it means the status has been changed by a re-check, not an explicit user action + if ( get_comment_meta( $comment->comment_ID, 'akismet_rechecking' ) ) + return; + + global $current_user; + $reporter = ''; + if ( is_object( $current_user ) ) + $reporter = $current_user->user_login; + + // Assumption alert: + // We want to submit comments to Akismet only when a moderator explicitly spams or approves it - not if the status + // is changed automatically by another plugin. Unfortunately WordPress doesn't provide an unambiguous way to + // determine why the transition_comment_status action was triggered. And there are several different ways by which + // to spam and unspam comments: bulk actions, ajax, links in moderation emails, the dashboard, and perhaps others. + // We'll assume that this is an explicit user action if certain POST/GET variables exist. + if ( ( isset( $_POST['status'] ) && in_array( $_POST['status'], array( 'spam', 'unspam' ) ) ) || + ( isset( $_POST['spam'] ) && (int) $_POST['spam'] == 1 ) || + ( isset( $_POST['unspam'] ) && (int) $_POST['unspam'] == 1 ) || + ( isset( $_POST['comment_status'] ) && in_array( $_POST['comment_status'], array( 'spam', 'unspam' ) ) ) || + ( isset( $_GET['action'] ) && in_array( $_GET['action'], array( 'spam', 'unspam', 'spamcomment', 'unspamcomment', ) ) ) || + ( isset( $_POST['action'] ) && in_array( $_POST['action'], array( 'editedcomment' ) ) ) || + ( isset( $_GET['for'] ) && ( 'jetpack' == $_GET['for'] ) ) // Moderation via WP.com notifications/WP app/etc. + ) { + if ( $new_status == 'spam' && ( $old_status == 'approved' || $old_status == 'unapproved' || !$old_status ) ) { + return self::submit_spam_comment( $comment->comment_ID ); + } elseif ( $old_status == 'spam' && ( $new_status == 'approved' || $new_status == 'unapproved' ) ) { + return self::submit_nonspam_comment( $comment->comment_ID ); + } + } + + self::update_comment_history( $comment->comment_ID, '', 'status-' . $new_status ); + } + + public static function submit_spam_comment( $comment_id ) { + global $wpdb, $current_user, $current_site; + + $comment_id = (int) $comment_id; + + $comment = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->comments} WHERE comment_ID = %d", $comment_id ) ); + + if ( !$comment ) // it was deleted + return; + + if ( 'spam' != $comment->comment_approved ) + return; + + // use the original version stored in comment_meta if available + $as_submitted = self::sanitize_comment_as_submitted( get_comment_meta( $comment_id, 'akismet_as_submitted', true ) ); + + if ( $as_submitted && is_array( $as_submitted ) && isset( $as_submitted['comment_content'] ) ) + $comment = (object) array_merge( (array)$comment, $as_submitted ); + + $comment->blog = get_bloginfo('url'); + $comment->blog_lang = get_locale(); + $comment->blog_charset = get_option('blog_charset'); + $comment->permalink = get_permalink($comment->comment_post_ID); + + if ( is_object($current_user) ) + $comment->reporter = $current_user->user_login; + + if ( is_object($current_site) ) + $comment->site_domain = $current_site->domain; + + $comment->user_role = ''; + if ( isset( $comment->user_ID ) ) + $comment->user_role = Akismet::get_user_roles( $comment->user_ID ); + + if ( self::is_test_mode() ) + $comment->is_test = 'true'; + + $post = get_post( $comment->comment_post_ID ); + $comment->comment_post_modified_gmt = $post->post_modified_gmt; + + $response = Akismet::http_post( Akismet::build_query( $comment ), 'submit-spam' ); + if ( $comment->reporter ) { + self::update_comment_history( $comment_id, '', 'report-spam' ); + update_comment_meta( $comment_id, 'akismet_user_result', 'true' ); + update_comment_meta( $comment_id, 'akismet_user', $comment->reporter ); + } + + do_action('akismet_submit_spam_comment', $comment_id, $response[1]); + } + + public static function submit_nonspam_comment( $comment_id ) { + global $wpdb, $current_user, $current_site; + + $comment_id = (int) $comment_id; + + $comment = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->comments} WHERE comment_ID = %d", $comment_id ) ); + if ( !$comment ) // it was deleted + return; + + // use the original version stored in comment_meta if available + $as_submitted = self::sanitize_comment_as_submitted( get_comment_meta( $comment_id, 'akismet_as_submitted', true ) ); + + if ( $as_submitted && is_array($as_submitted) && isset($as_submitted['comment_content']) ) + $comment = (object) array_merge( (array)$comment, $as_submitted ); + + $comment->blog = get_bloginfo('url'); + $comment->blog_lang = get_locale(); + $comment->blog_charset = get_option('blog_charset'); + $comment->permalink = get_permalink( $comment->comment_post_ID ); + $comment->user_role = ''; + + if ( is_object($current_user) ) + $comment->reporter = $current_user->user_login; + + if ( is_object($current_site) ) + $comment->site_domain = $current_site->domain; + + if ( isset( $comment->user_ID ) ) + $comment->user_role = Akismet::get_user_roles($comment->user_ID); + + if ( Akismet::is_test_mode() ) + $comment->is_test = 'true'; + + $post = get_post( $comment->comment_post_ID ); + $comment->comment_post_modified_gmt = $post->post_modified_gmt; + + $response = self::http_post( Akismet::build_query( $comment ), 'submit-ham' ); + if ( $comment->reporter ) { + self::update_comment_history( $comment_id, '', 'report-ham' ); + update_comment_meta( $comment_id, 'akismet_user_result', 'false' ); + update_comment_meta( $comment_id, 'akismet_user', $comment->reporter ); + } + + do_action('akismet_submit_nonspam_comment', $comment_id, $response[1]); + } + + public static function cron_recheck() { + global $wpdb; + + $api_key = self::get_api_key(); + + $status = self::verify_key( $api_key ); + if ( get_option( 'akismet_alert_code' ) || $status == 'invalid' ) { + // since there is currently a problem with the key, reschedule a check for 6 hours hence + wp_schedule_single_event( time() + 21600, 'akismet_schedule_cron_recheck' ); + do_action( 'akismet_scheduled_recheck', 'key-problem-' . get_option( 'akismet_alert_code' ) . '-' . $status ); + return false; + } + + delete_option('akismet_available_servers'); + + $comment_errors = $wpdb->get_col( "SELECT comment_id FROM {$wpdb->commentmeta} WHERE meta_key = 'akismet_error' LIMIT 100" ); + + load_plugin_textdomain( 'akismet' ); + + foreach ( (array) $comment_errors as $comment_id ) { + // if the comment no longer exists, or is too old, remove the meta entry from the queue to avoid getting stuck + $comment = get_comment( $comment_id ); + if ( !$comment || strtotime( $comment->comment_date_gmt ) < strtotime( "-15 days" ) ) { + delete_comment_meta( $comment_id, 'akismet_error' ); + delete_comment_meta( $comment_id, 'akismet_delayed_moderation_email' ); + continue; + } + + add_comment_meta( $comment_id, 'akismet_rechecking', true ); + $status = self::check_db_comment( $comment_id, 'retry' ); + + $event = ''; + if ( $status == 'true' ) { + $event = 'cron-retry-spam'; + } elseif ( $status == 'false' ) { + $event = 'cron-retry-ham'; + } + + // If we got back a legit response then update the comment history + // other wise just bail now and try again later. No point in + // re-trying all the comments once we hit one failure. + if ( !empty( $event ) ) { + delete_comment_meta( $comment_id, 'akismet_error' ); + self::update_comment_history( $comment_id, '', $event ); + update_comment_meta( $comment_id, 'akismet_result', $status ); + // make sure the comment status is still pending. if it isn't, that means the user has already moved it elsewhere. + $comment = get_comment( $comment_id ); + if ( $comment && 'unapproved' == wp_get_comment_status( $comment_id ) ) { + if ( $status == 'true' ) { + wp_spam_comment( $comment_id ); + } elseif ( $status == 'false' ) { + // comment is good, but it's still in the pending queue. depending on the moderation settings + // we may need to change it to approved. + if ( check_comment($comment->comment_author, $comment->comment_author_email, $comment->comment_author_url, $comment->comment_content, $comment->comment_author_IP, $comment->comment_agent, $comment->comment_type) ) + wp_set_comment_status( $comment_id, 1 ); + else if ( get_comment_meta( $comment_id, 'akismet_delayed_moderation_email', true ) ) + wp_notify_moderator( $comment_id ); + } + } + + delete_comment_meta( $comment_id, 'akismet_delayed_moderation_email' ); + } else { + // If this comment has been pending moderation for longer than MAX_DELAY_BEFORE_MODERATION_EMAIL, + // send a moderation email now. + if ( ( intval( gmdate( 'U' ) ) - strtotime( $comment->comment_date_gmt ) ) < self::MAX_DELAY_BEFORE_MODERATION_EMAIL ) { + delete_comment_meta( $comment_id, 'akismet_delayed_moderation_email' ); + wp_notify_moderator( $comment_id ); + } + + delete_comment_meta( $comment_id, 'akismet_rechecking' ); + wp_schedule_single_event( time() + 1200, 'akismet_schedule_cron_recheck' ); + do_action( 'akismet_scheduled_recheck', 'check-db-comment-' . $status ); + return; + } + delete_comment_meta( $comment_id, 'akismet_rechecking' ); + } + + $remaining = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->commentmeta} WHERE meta_key = 'akismet_error'" ); + if ( $remaining && !wp_next_scheduled('akismet_schedule_cron_recheck') ) { + wp_schedule_single_event( time() + 1200, 'akismet_schedule_cron_recheck' ); + do_action( 'akismet_scheduled_recheck', 'remaining' ); + } + } + + public static function fix_scheduled_recheck() { + $future_check = wp_next_scheduled( 'akismet_schedule_cron_recheck' ); + if ( !$future_check ) { + return; + } + + if ( get_option( 'akismet_alert_code' ) > 0 ) { + return; + } + + $check_range = time() + 1200; + if ( $future_check > $check_range ) { + wp_clear_scheduled_hook( 'akismet_schedule_cron_recheck' ); + wp_schedule_single_event( time() + 300, 'akismet_schedule_cron_recheck' ); + do_action( 'akismet_scheduled_recheck', 'fix-scheduled-recheck' ); + } + } + + public static function add_comment_nonce( $post_id ) { + echo '

'; + wp_nonce_field( 'akismet_comment_nonce_' . $post_id, 'akismet_comment_nonce', FALSE ); + echo '

'; + } + + public static function is_test_mode() { + return defined('AKISMET_TEST_MODE') && AKISMET_TEST_MODE; + } + + public static function allow_discard() { + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) + return false; + if ( is_user_logged_in() ) + return false; + + return ( get_option( 'akismet_strictness' ) === '1' ); + } + + public static function get_ip_address() { + return isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : null; + } + + /** + * Do these two comments, without checking the comment_ID, "match"? + * + * @param mixed $comment1 A comment object or array. + * @param mixed $comment2 A comment object or array. + * @return bool Whether the two comments should be treated as the same comment. + */ + private static function comments_match( $comment1, $comment2 ) { + $comment1 = (array) $comment1; + $comment2 = (array) $comment2; + + $comments_match = ( + isset( $comment1['comment_post_ID'], $comment2['comment_post_ID'] ) + && intval( $comment1['comment_post_ID'] ) == intval( $comment2['comment_post_ID'] ) + && ( + // The comment author length max is 255 characters, limited by the TINYTEXT column type. + // If the comment author includes multibyte characters right around the 255-byte mark, they + // may be stripped when the author is saved in the DB, so a 300+ char author may turn into + // a 253-char author when it's saved, not 255 exactly. The longest possible character is + // theoretically 6 bytes, so we'll only look at the first 248 bytes to be safe. + substr( $comment1['comment_author'], 0, 248 ) == substr( $comment2['comment_author'], 0, 248 ) + || substr( stripslashes( $comment1['comment_author'] ), 0, 248 ) == substr( $comment2['comment_author'], 0, 248 ) + || substr( $comment1['comment_author'], 0, 248 ) == substr( stripslashes( $comment2['comment_author'] ), 0, 248 ) + // Certain long comment author names will be truncated to nothing, depending on their encoding. + || ( ! $comment1['comment_author'] && strlen( $comment2['comment_author'] ) > 248 ) + || ( ! $comment2['comment_author'] && strlen( $comment1['comment_author'] ) > 248 ) + ) + && ( + // The email max length is 100 characters, limited by the VARCHAR(100) column type. + // Same argument as above for only looking at the first 93 characters. + substr( $comment1['comment_author_email'], 0, 93 ) == substr( $comment2['comment_author_email'], 0, 93 ) + || substr( stripslashes( $comment1['comment_author_email'] ), 0, 93 ) == substr( $comment2['comment_author_email'], 0, 93 ) + || substr( $comment1['comment_author_email'], 0, 93 ) == substr( stripslashes( $comment2['comment_author_email'] ), 0, 93 ) + // Very long emails can be truncated and then stripped if the [0:100] substring isn't a valid address. + || ( ! $comment1['comment_author_email'] && strlen( $comment2['comment_author_email'] ) > 100 ) + || ( ! $comment2['comment_author_email'] && strlen( $comment1['comment_author_email'] ) > 100 ) + ) + ); + + return $comments_match; + } + + // Does the supplied comment match the details of the one most recently stored in self::$last_comment? + public static function matches_last_comment( $comment ) { + if ( is_object( $comment ) ) + $comment = (array) $comment; + + return self::comments_match( self::$last_comment, $comment ); + } + + private static function get_user_agent() { + return isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : null; + } + + private static function get_referer() { + return isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : null; + } + + // return a comma-separated list of role names for the given user + public static function get_user_roles( $user_id ) { + $roles = false; + + if ( !class_exists('WP_User') ) + return false; + + if ( $user_id > 0 ) { + $comment_user = new WP_User( $user_id ); + if ( isset( $comment_user->roles ) ) + $roles = join( ',', $comment_user->roles ); + } + + if ( is_multisite() && is_super_admin( $user_id ) ) { + if ( empty( $roles ) ) { + $roles = 'super_admin'; + } else { + $comment_user->roles[] = 'super_admin'; + $roles = join( ',', $comment_user->roles ); + } + } + + return $roles; + } + + // filter handler used to return a spam result to pre_comment_approved + public static function last_comment_status( $approved, $comment ) { + if ( is_null( self::$last_comment_result ) ) { + // We didn't have reason to store the result of the last check. + return $approved; + } + + // Only do this if it's the correct comment + if ( ! self::matches_last_comment( $comment ) ) { + self::log( "comment_is_spam mismatched comment, returning unaltered $approved" ); + return $approved; + } + + // bump the counter here instead of when the filter is added to reduce the possibility of overcounting + if ( $incr = apply_filters('akismet_spam_count_incr', 1) ) + update_option( 'akismet_spam_count', get_option('akismet_spam_count') + $incr ); + + return self::$last_comment_result; + } + + /** + * If Akismet is temporarily unreachable, we don't want to "spam" the blogger with + * moderation emails for comments that will be automatically cleared or spammed on + * the next retry. + * + * For comments that will be rechecked later, empty the list of email addresses that + * the moderation email would be sent to. + * + * @param array $emails An array of email addresses that the moderation email will be sent to. + * @param int $comment_id The ID of the relevant comment. + * @return array An array of email addresses that the moderation email will be sent to. + */ + public static function disable_moderation_emails_if_unreachable( $emails, $comment_id ) { + if ( ! empty( self::$prevent_moderation_email_for_these_comments ) && ! empty( $emails ) ) { + $comment = get_comment( $comment_id ); + + foreach ( self::$prevent_moderation_email_for_these_comments as $possible_match ) { + if ( self::comments_match( $possible_match, $comment ) ) { + update_comment_meta( $comment_id, 'akismet_delayed_moderation_email', true ); + return array(); + } + } + } + + return $emails; + } + + public static function _cmp_time( $a, $b ) { + return $a['time'] > $b['time'] ? -1 : 1; + } + + public static function _get_microtime() { + $mtime = explode( ' ', microtime() ); + return $mtime[1] + $mtime[0]; + } + + /** + * Make a POST request to the Akismet API. + * + * @param string $request The body of the request. + * @param string $path The path for the request. + * @param string $ip The specific IP address to hit. + * @return array A two-member array consisting of the headers and the response body, both empty in the case of a failure. + */ + public static function http_post( $request, $path, $ip=null ) { + + $akismet_ua = sprintf( 'WordPress/%s | Akismet/%s', $GLOBALS['wp_version'], constant( 'AKISMET_VERSION' ) ); + $akismet_ua = apply_filters( 'akismet_ua', $akismet_ua ); + + $content_length = strlen( $request ); + + $api_key = self::get_api_key(); + $host = self::API_HOST; + + if ( !empty( $api_key ) ) + $host = $api_key.'.'.$host; + + $http_host = $host; + // use a specific IP if provided + // needed by Akismet_Admin::check_server_connectivity() + if ( $ip && long2ip( ip2long( $ip ) ) ) { + $http_host = $ip; + } + + $http_args = array( + 'body' => $request, + 'headers' => array( + 'Content-Type' => 'application/x-www-form-urlencoded; charset=' . get_option( 'blog_charset' ), + 'Host' => $host, + 'User-Agent' => $akismet_ua, + ), + 'httpversion' => '1.0', + 'timeout' => 15 + ); + + $akismet_url = $http_akismet_url = "http://{$http_host}/1.1/{$path}"; + + /** + * Try SSL first; if that fails, try without it and don't try it again for a while. + */ + + $ssl = $ssl_failed = false; + + // Check if SSL requests were disabled fewer than X hours ago. + $ssl_disabled = get_option( 'akismet_ssl_disabled' ); + + if ( $ssl_disabled && $ssl_disabled < ( time() - 60 * 60 * 24 ) ) { // 24 hours + $ssl_disabled = false; + delete_option( 'akismet_ssl_disabled' ); + } + else if ( $ssl_disabled ) { + do_action( 'akismet_ssl_disabled' ); + } + + if ( ! $ssl_disabled && function_exists( 'wp_http_supports') && ( $ssl = wp_http_supports( array( 'ssl' ) ) ) ) { + $akismet_url = set_url_scheme( $akismet_url, 'https' ); + + do_action( 'akismet_https_request_pre' ); + } + + $response = wp_remote_post( $akismet_url, $http_args ); + + Akismet::log( compact( 'akismet_url', 'http_args', 'response' ) ); + + if ( $ssl && is_wp_error( $response ) ) { + do_action( 'akismet_https_request_failure', $response ); + + // Intermittent connection problems may cause the first HTTPS + // request to fail and subsequent HTTP requests to succeed randomly. + // Retry the HTTPS request once before disabling SSL for a time. + $response = wp_remote_post( $akismet_url, $http_args ); + + Akismet::log( compact( 'akismet_url', 'http_args', 'response' ) ); + + if ( is_wp_error( $response ) ) { + $ssl_failed = true; + + do_action( 'akismet_https_request_failure', $response ); + + do_action( 'akismet_http_request_pre' ); + + // Try the request again without SSL. + $response = wp_remote_post( $http_akismet_url, $http_args ); + + Akismet::log( compact( 'http_akismet_url', 'http_args', 'response' ) ); + } + } + + if ( is_wp_error( $response ) ) { + do_action( 'akismet_request_failure', $response ); + + return array( '', '' ); + } + + if ( $ssl_failed ) { + // The request failed when using SSL but succeeded without it. Disable SSL for future requests. + update_option( 'akismet_ssl_disabled', time() ); + + do_action( 'akismet_https_disabled' ); + } + + $simplified_response = array( $response['headers'], $response['body'] ); + + self::update_alert( $simplified_response ); + + return $simplified_response; + } + + // given a response from an API call like check_key_status(), update the alert code options if an alert is present. + private static function update_alert( $response ) { + $code = $msg = null; + if ( isset( $response[0]['x-akismet-alert-code'] ) ) { + $code = $response[0]['x-akismet-alert-code']; + $msg = $response[0]['x-akismet-alert-msg']; + } + + // only call update_option() if the value has changed + if ( $code != get_option( 'akismet_alert_code' ) ) { + if ( ! $code ) { + delete_option( 'akismet_alert_code' ); + delete_option( 'akismet_alert_msg' ); + } + else { + update_option( 'akismet_alert_code', $code ); + update_option( 'akismet_alert_msg', $msg ); + } + } + } + + public static function load_form_js() { + // WP < 3.3 can't enqueue a script this late in the game and still have it appear in the footer. + // Once we drop support for everything pre-3.3, this can change back to a single enqueue call. + wp_register_script( 'akismet-form', plugin_dir_url( __FILE__ ) . '_inc/form.js', array(), AKISMET_VERSION, true ); + add_action( 'wp_footer', array( 'Akismet', 'print_form_js' ) ); + add_action( 'admin_footer', array( 'Akismet', 'print_form_js' ) ); + } + + public static function print_form_js() { + wp_print_scripts( 'akismet-form' ); + } + + public static function inject_ak_js( $fields ) { + echo '

'; + echo ''; + echo '

'; + } + + private static function bail_on_activation( $message, $deactivate = true ) { +?> + + + + + + +

+ + + $plugin ) { + if ( $plugin === $akismet ) { + $plugins[$i] = false; + $update = true; + } + } + + if ( $update ) { + update_option( 'active_plugins', array_filter( $plugins ) ); + } + } + exit; + } + + public static function view( $name, array $args = array() ) { + $args = apply_filters( 'akismet_view_arguments', $args, $name ); + + foreach ( $args AS $key => $val ) { + $$key = $val; + } + + load_plugin_textdomain( 'akismet' ); + + $file = AKISMET__PLUGIN_DIR . 'views/'. $name . '.php'; + + include( $file ); + } + + /** + * Attached to activate_{ plugin_basename( __FILES__ ) } by register_activation_hook() + * @static + */ + public static function plugin_activation() { + if ( version_compare( $GLOBALS['wp_version'], AKISMET__MINIMUM_WP_VERSION, '<' ) ) { + load_plugin_textdomain( 'akismet' ); + + $message = ''.sprintf(esc_html__( 'Akismet %s requires WordPress %s or higher.' , 'akismet'), AKISMET_VERSION, AKISMET__MINIMUM_WP_VERSION ).' '.sprintf(__('Please upgrade WordPress to a current version, or downgrade to version 2.4 of the Akismet plugin.', 'akismet'), 'https://codex.wordpress.org/Upgrading_WordPress', 'https://wordpress.org/extend/plugins/akismet/download/'); + + Akismet::bail_on_activation( $message ); + } + } + + /** + * Removes all connection options + * @static + */ + public static function plugin_deactivation( ) { + return self::deactivate_key( self::get_api_key() ); + } + + /** + * Essentially a copy of WP's build_query but one that doesn't expect pre-urlencoded values. + * + * @param array $args An array of key => value pairs + * @return string A string ready for use as a URL query string. + */ + public static function build_query( $args ) { + return _http_build_query( $args, '', '&' ); + } + + /** + * Log debugging info to the error log. + * + * Enabled when WP_DEBUG_LOG is enabled (and WP_DEBUG, since according to + * core, "WP_DEBUG_DISPLAY and WP_DEBUG_LOG perform no function unless + * WP_DEBUG is true), but can be disabled via the akismet_debug_log filter. + * + * @param mixed $akismet_debug The data to log. + */ + public static function log( $akismet_debug ) { + if ( apply_filters( 'akismet_debug_log', defined( 'WP_DEBUG' ) && WP_DEBUG && defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) ) { + error_log( print_r( compact( 'akismet_debug' ), true ) ); + } + } + + public static function pre_check_pingback( $method ) { + if ( $method !== 'pingback.ping' ) + return; + + global $wp_xmlrpc_server; + + if ( !is_object( $wp_xmlrpc_server ) ) + return false; + + // Lame: tightly coupled with the IXR class. + $args = $wp_xmlrpc_server->message->params; + + if ( !empty( $args[1] ) ) { + $post_id = url_to_postid( $args[1] ); + + // If this gets through the pre-check, make sure we properly identify the outbound request as a pingback verification + Akismet::pingback_forwarded_for( null, $args[0] ); + add_filter( 'http_request_args', array( 'Akismet', 'pingback_forwarded_for' ), 10, 2 ); + + $comment = array( + 'comment_author_url' => $args[0], + 'comment_post_ID' => $post_id, + 'comment_author' => '', + 'comment_author_email' => '', + 'comment_content' => '', + 'comment_type' => 'pingback', + 'akismet_pre_check' => '1', + 'comment_pingback_target' => $args[1], + ); + + $comment = Akismet::auto_check_comment( $comment ); + + if ( isset( $comment['akismet_result'] ) && 'true' == $comment['akismet_result'] ) { + // Lame: tightly coupled with the IXR classes. Unfortunately the action provides no context and no way to return anything. + $wp_xmlrpc_server->error( new IXR_Error( 0, 'Invalid discovery target' ) ); + } + } + } + + public static function pingback_forwarded_for( $r, $url ) { + static $urls = array(); + + // Call this with $r == null to prime the callback to add headers on a specific URL + if ( is_null( $r ) && !in_array( $url, $urls ) ) { + $urls[] = $url; + } + + // Add X-Pingback-Forwarded-For header, but only for requests to a specific URL (the apparent pingback source) + if ( is_array( $r ) && is_array( $r['headers'] ) && !isset( $r['headers']['X-Pingback-Forwarded-For'] ) && in_array( $url, $urls ) ) { + $remote_ip = preg_replace( '/[^a-fx0-9:.,]/i', '', $_SERVER['REMOTE_ADDR'] ); + + // Note: this assumes REMOTE_ADDR is correct, and it may not be if a reverse proxy or CDN is in use + $r['headers']['X-Pingback-Forwarded-For'] = $remote_ip; + + // Also identify the request as a pingback verification in the UA string so it appears in logs + $r['user-agent'] .= '; verifying pingback from ' . $remote_ip; + } + + return $r; + } + + /** + * Ensure that we are loading expected scalar values from akismet_as_submitted commentmeta. + * + * @param mixed $meta_value + * @return mixed + */ + private static function sanitize_comment_as_submitted( $meta_value ) { + if ( empty( $meta_value ) ) { + return $meta_value; + } + + $meta_value = (array) $meta_value; + + foreach ( $meta_value as $key => $value ) { + if ( ! isset( self::$comment_as_submitted_allowed_keys[$key] ) || ! is_scalar( $value ) ) { + unset( $meta_value[$key] ); + } + } + + return $meta_value; + } +} diff --git a/plugins/akismet/index.php b/plugins/akismet/index.php new file mode 100644 index 0000000..cf879a5 --- /dev/null +++ b/plugins/akismet/index.php @@ -0,0 +1,2 @@ + + +

+ +
+ + spam > 0 ) : ?> + +
+ + + + + + +
    +
  • +

    + spam );?> + spam, 'akismet' ) ); ?> +
  • +
  • +

    + spam );?> + spam, 'akismet' ) ); ?> +
  • +
  • +

    + accuracy; ?>% + missed_spam, 'akismet' ), number_format( $stat_totals['all']->missed_spam ) ); ?> + | + false_positives, 'akismet' ), number_format( $stat_totals['all']->false_positives ) ); ?> +
  • +
+
+
+ + + + +
+ +
+
+
+

+

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

+ wp_http_supports' ); ?> +

+
+

+ +

+
+
+

+

+
+ + spam folder older than 1 day is deleted automatically.', + 'Spam in the spam folder older than %2$d days is deleted automatically.', + $delete_interval, + 'akismet' + ), + admin_url( 'edit-comments.php?comment_status=spam' ), + $delete_interval + ); + + ?> +
+
+
+ +
+ +
+ + +
+ + + +
+
+
+
+
+
+
+
+
+
+

+

+
+ + + + + + + + + + + next_billing_date ) : ?> + + + + + + +
+ + account_name; ?> +
+ + status ) : + esc_html_e( 'Cancelled', 'akismet' ); + elseif ( 'suspended' == $akismet_user->status ) : + esc_html_e( 'Suspended', 'akismet' ); + elseif ( 'missing' == $akismet_user->status ) : + esc_html_e( 'Missing', 'akismet' ); + elseif ( 'no-sub' == $akismet_user->status ) : + esc_html_e( 'No Subscription Found', 'akismet' ); + else : + esc_html_e( 'Active', 'akismet' ); + endif; ?> +
+ + next_billing_date ); ?> +
+
+
+
+ ( $akismet_user->account_type == 'free-api-key' && $akismet_user->status == 'active' ? __( 'Upgrade' , 'akismet') : __( 'Change' , 'akismet') ), 'redirect' => 'upgrade' ) ); ?> +
+
+
+
+
+
+
+ + + +
+
\ No newline at end of file diff --git a/plugins/akismet/views/get.php b/plugins/akismet/views/get.php new file mode 100644 index 0000000..72a3b6e --- /dev/null +++ b/plugins/akismet/views/get.php @@ -0,0 +1,6 @@ +
+ + + + +
\ No newline at end of file diff --git a/plugins/akismet/views/notice.php b/plugins/akismet/views/notice.php new file mode 100644 index 0000000..8e6e508 --- /dev/null +++ b/plugins/akismet/views/notice.php @@ -0,0 +1,123 @@ + +
+
+
+
A
+
+
+ +
+
+
Almost done - activate Akismet and say goodbye to spam', 'akismet');?>
+
+
+
+ +
+

+

+ +

+ +
+ +

upgrade WordPress to a current version, or downgrade to version 2.4 of the Akismet plugin.', 'akismet'), 'https://codex.wordpress.org/Upgrading_WordPress', 'https://wordpress.org/extend/plugins/akismet/download/');?>

+ +
+

+

+

https://akismet.com/errors/' . $code . '' ); + + ?> +

+
+ +
+

+

+ +

+
+ +
+

+

gethostbynamel function. Akismet cannot work correctly until this is fixed. Please contact your web host or firewall administrator and give them this information about Akismet’s system requirements.', 'akismet'), 'https://blog.akismet.com/akismet-hosting-faq/'); ?>

+
+ +
+

+

our guide about firewalls.', 'akismet'), 'https://blog.akismet.com/akismet-hosting-faq/'); ?>

+
+ +
+

+

update your payment details.', 'akismet'), 'https://akismet.com/account/'); ?>

+
+ +
+

+

Akismet account page to reactivate your subscription.', 'akismet'), 'https://akismet.com/account/'); ?>

+
+ +
+

+

Akismet support for assistance.', 'akismet'), 'https://akismet.com/contact/'); ?>

+
+ +
+

+

contributing a token amount.', 'akismet'), 'https://akismet.com/account/upgrade/'); ?>

+
+ +
+

+

Akismet support for assistance.', 'akismet'), 'https://akismet.com/contact/'); ?>

+
+ +
+

+

+ sign into your account and choose one.', 'akismet'), 'https://akismet.com/account/upgrade/' ); ?> +

+ contact our support team with any questions.', 'akismet' ), 'https://akismet.com/contact/' ); ?> +

+
+ +
+

+
+ +
+

+
+ +
+

+
+ +
+

+

our guide about firewalls and check your server configuration.', 'akismet'), 'https://blog.akismet.com/akismet-hosting-faq/'); ?>

+
+ +
+ +

+

+ purchase additional Pro subscriptions or upgrade to an Enterprise subscription that allows the use of Akismet on unlimited sites.', 'akismet' ), 'https://docs.akismet.com/billing/add-more-sites/' ); ?> +

+ contact our support team with any questions.', 'akismet' ), 'https://akismet.com/contact/'); ?> +

+ +

+

+ upgrade to an Enterprise subscription, which covers an unlimited number of sites.', 'akismet'), 'https://akismet.com/account/upgrade/' ); ?>

+

+ contact our support team with any questions.', 'akismet' ), 'https://akismet.com/contact/'); ?>

+

+ +
+ \ No newline at end of file diff --git a/plugins/akismet/views/start.php b/plugins/akismet/views/start.php new file mode 100644 index 0000000..75eb032 --- /dev/null +++ b/plugins/akismet/views/start.php @@ -0,0 +1,97 @@ +
status, array( 'active', 'active-dunning', 'no-sub', 'missing', 'cancelled', 'suspended' ) ) ) : + if ( in_array( $akismet_user->status, array( 'no-sub', 'missing' ) ) ) :?> +

+
+
+ + user_email ); ?> +
+
+ + + + + +
+
+status == 'cancelled' ) :?> +

+
+
+ + user_email ); ?> +
+
+ + + + + +
+
+status == 'suspended' ) : ?> +

+
+ +

user_email ); ?>

+

+ +
+ +

+
+
+ + user_email ); ?> +
+
+ + + + +
+
+ +
+
+ +

+
+ __( 'Sign up with a different email address' , 'akismet'), 'classes' => array( 'right', 'button', 'button-secondary' ) ) ); ?> +
+
+
+ +

+
+
+ + + + +
+
+ +

+
+
+ +

+
+ __( 'Get your API key' , 'akismet'), 'classes' => array( 'right', 'button', 'button-primary' ) ) ); ?> +
+
+
+ +

+
+
+ + + + +
+
+
\ No newline at end of file diff --git a/plugins/akismet/views/stats.php b/plugins/akismet/views/stats.php new file mode 100644 index 0000000..1ca7661 --- /dev/null +++ b/plugins/akismet/views/stats.php @@ -0,0 +1,4 @@ +
+

+ +
\ No newline at end of file diff --git a/plugins/akismet/views/strict.php b/plugins/akismet/views/strict.php new file mode 100644 index 0000000..83d7a50 --- /dev/null +++ b/plugins/akismet/views/strict.php @@ -0,0 +1,17 @@ +
+ + + +

+ +

+

+ +

+
diff --git a/plugins/akismet/wrapper.php b/plugins/akismet/wrapper.php new file mode 100644 index 0000000..a77d4ce --- /dev/null +++ b/plugins/akismet/wrapper.php @@ -0,0 +1,213 @@ +K0>geC++?jfsCGyKVa`5Gu9Q?mT0ft->n1X`x zKSV)IO+!OXP5b{6h>V;Z0)|jiP*Bs+P|?uQLobP*{=c36_d@$WrT=%_|1JIN2Vhjd z@5`A%Fn|mOB8P$g4FPqR{9V?7F8Tcb2tq+g1tJ5JQ(xASk^lc&05AkZMnTR102Cl{ za&i!aoEie5B%{3K4SYEYfH4X%QOUxYSx^``K~^Vi>VWiS^LIj7ST^Sjc?U4*6dOKx8m-0a-?{69k0`fHQrSGmlDd)@J^< z4A5S3bJ++3w1D#<_w=lUhS!tY+HolkvV@~DBJFNc)J6?L1RQA;YgQAua!idTKO&hI zq!zH|*9Y(v96V9BuKVfvmL)(eIJqdPAc%7s@_H#O#RX;vi36LWSRk^p1d}(Tjy#Z| zte0>3iDgnu3m)t=t8XzH=!^19CCN4N*a6G?5Zd25j8EBsq+POdzYx{NDO)4$D z!N+N$XKnSd0zJQjMyChXQnY~!dS3O?gyQ>(oB8{-$%*7r-ubr$J6^}D@@E;;LfwxT zjd)54%vJPlrRuvHd8>OZneVXHy$`sHE7_m#NJt6UG{Q+Q)Ve$};%#L1`S2ygZw|+X z-mcmOJDd={kmH2)3-}i z+6)+_g}zLoevb8q5)*t9uJyyY3hyF$DAU&9jx|m5_YX5#vA?Fdt}N+RaFx-0vlE`| zSlVo@#4^ctepEklj{i;dbmZcd*W}xL`R_@V%swM(J-xLL2pdOs`hA8J)jcN5`oRdL z2^Pl{Cx(?7l;RD$nmOzym#r@;J6GO|!0>E)%cdE#QPQ#Hchd+Vo~I0rT@7X!ekEnM zA8FvsZRBB~Z)x`orm(Ksj9GG9>WlS}wh~Kx={Qyd#yJ$lti4jn2D9&iV7iN_jse4l+Rgh|KP_qw`YzVN!d)fh)(lfHH0GR+4}n-t=G zvv*ueSM06LX#pnww|h(V>Ia3<14K+ow zUAGBi;+z^)LkYCRz#N}vbg7cme|x|ZL^l~?wI@`?D_J_PUMpH2ln;0c(tr97kkq&T z`!?qv;7B)l=D{Q zoneo7|MjB8_wer(2d&L>W3f>5Ty{?ITBb9HPPAv%q^c?vg={PU=vSZ8kv+gJ=c-Gd zkwG^h%9@-6KOrZ~N>1#q~8h8RSTg`u0U^JKGYezew_15S`Eq%KP{5Ou1^#? zs~YO!_BdR)EBLtqV+0_*AwYB^$?r&xFR1^aD8Az@;x;te+Bq$56{#$fU{4<2&Bn_sHMD;9d*+~m z$KxMC!nrA|i3OU9hDHZ+Wd89=L)sCVzb8H5@t+S>E;R8Y-{%ovp+ zhP7M0K9&aCsmii27z)#n39Fuo#gKxz>jRb4vl?G?=-vJ-r)d3(5NH+Oay+T8toqQX zwQZi+g5d*cgpT6nzNyMTfTT2rjrwzQNPNXu|Iz+~>;txsf5Uzx&z@1<&Fx+JJcCR| zKELX1^hNZ@x#(}_6{TLU)j4M;RiR||OxNrq!)h|I&Oi#;Uum?$WC2Qlf?>>8(;7Zq zIK*d#<39pq%V4xcf3?`|p^?LHoP5wA~>o{ECZnODG9L9_>F6mAw zB~UR}(6^yONs59e*EDi*Iqk1*dk10j7;Ep<(LQLqpCbig3}c3@mNsV?8=0-%%Tu6R zRV)zY*h%I|lbvlc&@rGX$7GE7-JF^=3}HBY?iXDbY8ts%gmYRQVo+Wo-n(vB^OZ4O zCTM=wK(%`_AUZxh-FI3%)N8D0C%l?nbYq^c z&FQ45umq#CE&4P7bxvbHii$h@&f4U6aP-XoS)J^TS?U2{OhG7u($HZr4!e{E#tT_2 zIx}m$na_1H|$BU0#4g8+*dU{)+#TAqJGePnRC)%`H2%LIxg4jC8-h@l2hDMpwtXQ=1nurfqa!%9> zMtLd}T|Y}Tp6-t*{m5AzV6gtj;y{g#Yt{3Mq+iX{VN=TCfyEciniBZ5A=+XkSCIpT zva48W*tlT=cDs2Z4_#@Bnj<^%RQ>a2LDz?j2MrR?bk1v`8#0{=U?qM%%kwYNR+?a>d~H=aM{(#B;w?QL7La0pY9lCoHkb%kdL1c^y`Svb&Lt=qYGq3%rV zVPEF$%q-{WZw-1I4zKReq+^wNqlU`5c6lObN-{L?FK1dUuQAs;X5T$IQ~Oq@7-^T| zF6+@S99{1BrNEC^MAmp0anpMf5$|M^Lt^)1rcnI4_mQG)Eh~7oFVccCBQ%&m$cR$^#{1YDCX%Vu{ z;1hH)JkgDe7xgn+TnnQkU)KAjoAAU1o7cNg>dW|mOsVY*^Y|Vc&zpfIkCqDSi@w*w zJb$Mti=OC=l2R(HO>TSpe<9w=p8d@B?)WgrHR>Ng(_mraoDYYtH>UvP#1G%U({J4@ zi0p2-sEcrHH|(6V4imOeURNgz3k$@YL-=Jp*vhvB1q9z;pEguTNK7%fnU?*a$D~l% zps!ZEWkih1>>ND^BHq<^m3%0R7-WQ>-^wY-cDG@#4mE#!#M9&MoH(%!hFMRDre%SV z+aT$+FjDaNnx}szCcCCCmRU2!2XOL!Q=YFB`4x;VIbNTwEf4U^Yy|ggkk3K46-A%;34UW{gl$>%vhMToj&8o}Pu#1y=|d@u1O2 za%8e~m!LNM3= z4_P8^qFq-wDFjbu;pYq_pw8Q9{FNpu>Kor!wdpL4vwoZwrf2w5_R;6#%S4vAT0-b7 z{r=@{xHrD)#gJj*KFZRV;OW=1sOL~=#V28`6zwLpc?1R;FgF)oFpaHp;}mFde6FMmcnhVG1~ z7sm-zJ3LCh8vuV-7TUPH_6pBxQ?F3Q0pY}_^j}FYt);o2dc&V0`sF>IEu*}6fx;ei zob-Ytq3PAg`|1ofE!2XtLC4FxeGaGl9-Dh}&_422nAW zlf`d1@!-^UISyLf6*B^8-l+>>U3r#_0~a_u3X*MX$PvVHe|PjeleDlZx@-lsh}2m? zKD**uvt&0Z_iWke;3_}c&zY%>4{hOfEI(G-c9XMI)3t64`h!S;%6%AK8@9@}-i6{- z&ZwmQ@}x3|FcTTYC#Dv7X?Hj-WVKjObD26N>> zF%Zf{eu0H*4_0>T&n-=fOQrR&jF1X5`K)?hUL^;OF{VhPnDP|Y*to^8OJjr@wdt{t zo-TS(vGVbVc1dC}{D?-kD8rzx<4-$uS{JBXIe>jYC91beGa8U)!q`PUqgyo6OK*?M z`RsBCQ80Bg-?Xec$f8ky>L<{2q^ZD7o^jlyH)x!Kt^;f4_qRQpq@D6mO!v14V77Vo z{$meL6I_GGL!+l*^7fXHE91xq@J)Al@D-uCb!G z&coJyeBzrs*}dh|J0(k#94pzc3l4<0%u-Ckzb|rIs1icD{hS!_lqQrd91+V4=FP{usx7?BpYHK8p zOlg@)58D(N=}GMFva4Tt5gtTlsIsA6i&SO|{!F|#f7q^G6h3M3Oy+EtXlBl#qJJoK zD;fvDQP=_kQyPFf?E6hgfg^E}BQqT%UMs!S_^Z1t$u6H9TG!cNDQ-}%-FaJ6<)eQ4ab%h;pFpwQGvd9^a1L=2&9fQvB9#R%y@8G*q z7lg|7+a))J4y<`%>uB1<3X}}*%NueqTbMn&b#OaFZxtMRRT@sg8$)b}lyup!Uiz7R zN7~?3`*p1I0|x^|=jn5w1nHl9U6QkwgP+w^y6jOqZYXrWvM9R}Ku7+DL;1M*h`L4o zMA3cvThK+7bn@wR8l+LHCVrkcN)A^xyz}Z8e*(z3)Zz6e>3JL5=gEHnF*PZF*XJK_ zgW`6XyDpG^a29#zmBr@QFTqDYl-4`#|0poml;@}wjQypn%PtoX3ZVS0Eaa7$nAz?C zxfS8rtm`ZtMkY$L*Gm4C+|N0WGUZiYwEb6}Kj7($0{m#BbNurend>Ssj~`>My)$O< zSY*O56V$WGxoN=+Q1wXOLJx_QTXhDj&r41Upuf};i7T27$hNBPNlAxpIc$Z?jq!;6 z@gBbdcwvcZ5j9|X1w`w#YY*#XNVFaG#LXJqeLJt{iv_)rUZ*|i@jrBoS}{nx;q0E0h@jJxD# ze<&}C_`L6`N@e%)Cx#khTLBMT)gU-;=t=;Rk5=AA1JcV&x|McRbv5)K@EG;YgeC>@ zWa!b*ywfRG@gR$CWTV2=SX*OK?m&k;?+vc17I`O5rfPX5{TJY;zKft>nyqv9IaUi& zG}3wFVq?cydg`gVZQB*&u-z(?$ub*=K-!c0IXdW!QRY#8@sQXqZ=3m7faKDjF znzK!Lo4-3{4thLhroweh-;3hC);TZyT=*-+fK&6(^JZPw2tkYMFM?N(R!S#O6ViC` zYA02Y0v>s@5xJ7PMEs4~E)?B+#L>FW(|#ARDB9YvoNW$s4l_^1y0VDyGi+G^?3MJW zMI98fZhMHX_#Z&G{q^qNpqnyO@Vc**2j|7G(+z7-p~84Uq(?baiHT2mF;t9og(yyQcIHaF1Tqs(1FjdCVU1dIe@t z+$1w(d^<<+Ek}dnQ$5#8@qR+#NpOZPIl_h6R2#?M8?mb@+rqw)p8x#(u7GVSb!CG^ zmWxHQA;rv9;zBL|-hklPQ(p%tR42q33I6jim?bp9yDr7@E8O`ROJcw>6BB$X&hIgN z`%hFo*CGot$>-{=JYCj7^S*5Y-$R&^m^5L7c)5y)?oh7Pq;keuh!$&orA|UMR zmg%M@v_+{wCx2z%2g`^ZoPLNbpi-)5x0ZW)OeUovUXpqxX+1K)Iz}drn!yP!9spdV z*uUmF-h1=s*(udr&Z1ZHh5FZRqO5P=uJ=7pQCqw;H3#ob_?H>+8O%an zxb2mbDF*~kOdXk?<(EjaUssacZX~bGH(EzXNw_`Yrm1R_J{7i8P#e@2GG+-Sh~qf4 z+59v#>G}plZ@jgzMXrx;U* zlD=r^u8D=mu^L;1>Tx+K>prBOgukZ)Mvw-pYZ+%`;w(f8{W+L#DIUL)(*JOD0p;|W zUIu*km|}R(X*9TN$DBRTx2~z4Bih8u-&3#3IqyOr}bS%ccga2NaE&xA1y6#hJ)vEkp9~)F|=68isUbLXLh$f$aRQhN}dU*4jUPO(3 z|GeRqI020Wviemn#|G7i`e2VPTN`+LfaoEEO!)wdlG=IJu&idKXx1xY)lY#T+Rof= z^K!@G*NaO{(IPEYvem_2-$tjan9;-*KXc<0?#eX>ge-NZj}dv(5$6@qh59(wcVnAV ziJ{rUdSfoz`=Rp`gTxSDnc79HDKgO~u-5X7EV?-ScQDDk@K9X)ACRLlj~mOm&@st* zq(KL-lJjPpFddzzXHR|0hg26Vx6ozoDT>Yqqnz=Dkx|5_94(_s7xktha}$O5b?3~Q=fBuZb(*#e_kefD?MM*B@(mysF%oqpS-o1+vZC&2yN z8DRP_t=5HyltVRM?-?)6(r2mm!iZjp$C9(V>GL^vT$9RzvwC?L%VWxiSWV<*n0(CH z$=kbQDmRHe&+<2)2kl%4-=>SquM_a@&v2JikX=&t6_k8!_tXFryn<(OJ4eW5jeukm zyS~#wZXD0>zUY{L5LxgrBY;jsV4;P6PI%sb0@Y`H&rz~;JL7R?U|qA^gxacsGlw+d zMrRWM3TESj%^jcLkkFW^RgGzEYF>OyRT0P%dhjmr=$an=`P-FB=cp9I1di}r$4SP| zuZJeK;v0KH>@^AOZR?NY52{_o>)4vE*WwL_8V27%(!|FLzj1+>K;(&CI2`U_3Gx0f znjA@7$33TD`5p@Q_{d+;9AO-GpefCHg)Qf3k213y#+vuWdqs6{bA;KEANXcY%x8$# z+Ra>y_^E3xNQ;f0OHc%hHBZWEV7%f<7G`t?%&yefAFOh)u~@np&n$=miX!GoFwD|CeY!-O zBCyV1UVbbUvMo!W^0qg@G*O;Erc6HzSsF5gGv`X^^~FVah$?(vPC4t1uWuLckQtWZ z`ji**N>@Bp)3CH7 z)JtC5IN9C~>#+xfrbQ1KxXkj5S%6TQ34UrQCcNfx$Q<%#4bP8YQSc6{`H@6gX;K7DbVeNq%engYnS07qsGs~dcyH;YIAME z{bdL=jro3@aj6Eup3*5$)6|7IoY9c5E&VMZuc|)F3OUv?A!re6tH#3o6t-s$-wNU{ zb%Yoy(p)AM*=aE!P*f$pjl%1xdB-5<`c8sN@updw?m!o_(>tI03QXTJ1lY8(Gz+D* z%u1)^TqFgi4qxZ9^&OUh7twc^lTB|ik3toKvh%w$q8&6}W%t$A%aQ`u7<*xiG*uwk z;cM#mgSiYgdk%Q6zUpH8HOhC(FF0JC@#m-Sb;^w%q2V($hELDeUu*G9T25&biG&2k zs15;K8PS_|4)WmE#+eDBbaZ3CL-XVwrbol?%T9mOk$T|L=fxWGbh#XXS22}h0b)#7 zwQ)XXJmhD0`JLV5-#oFHO7~3rEHd!*u?@e3^hCk8+w2*TbhxQa9#n*ky8`PvWSj^6 zThbA&Jd)!vdr^I?Yt*8WQF#)Peb%gB&utGF#t+6`Zsvg z@VZ~J2a+$O>kSv@o|SE30%zEi7Xta%b1d&@?@*+FDOyn#7rNWIxmcuhu0*nV%I|Ca z-bLEoAah36-0#+AHMYK+OXOv6cO|=q*Rh_cm9?^=nXLKh{W^HyiJ1WfIkkb>75jB` z_Z~S%QVKFf?v6~(V?V-<^`MxT2m+C=mNAq2* zXF&Yq$^QH^+SkKkO76nXU(zNORr1&B%4`HIBa9>Y)zBwq<)q1+^ zj#$7~6;8=SsVgLkhc?>Qv4)JTBDtl7A+-6)-N{D`u+PNu8x5zrAN_S}pWYl{&wi}& z0a_21lk@xFYE>?rcKEa_Kd{sdY|s_Rl8M#HqH$)vObY?jwyW%(5jT(7ZY%wL%DsGx zd0A$Bk!DpmBT-UY_t`@sEMUi^LX~)5Q}yn7F#V}hKuC;AI1@{ti(OX4CkDfZrqX7d zqG3=_(w!OnI?JPtl#5};BFbt%m1Gy!fh1=t z!-wi_H*L~VN0Lky6LT1|3?O0zVTM%&`lq~~*o8ky#$Kn)8&0hBCp}Yz5ppa^buaE{ zAa$OLS0-8o6KJSFc+`3LS1j}Q^^>P+jtS1F0{lkRWs{; zaNMJQ3qOn&@h-96=lDk|jqW2RA$whm`MWo4?XnP$uYmN}tLiUK3WNoC>Gb#AVIcIC z9wOxXr8>&zajw19*hlfkog=*az(oRIEWsfxS9eFo>pg`Sj_*_PSUxD2IxI^1;|ck< z&4q_xEzjI%!{JNYav^(4>0M5*AH~v&W3WOl*&bP|wkJ-EWc(J2f@zimD`)W|d?pZ* zW&`odn`NEAB{+BXd)f?ibtgs zv?3$qs_+M1$P#C4Io}vZ@IsQO^mzUlpHZmmPy!Qs;^9KBNvzbPL?)I`99m;kN~gBL zkaq%{-F~bWUdQ^1)NSYVy6J_b!7~(%FtJ(j@$*=u0Xztx7=xMg+B-%AA;nBB-I|!Js#}wWGoTmfcDT02Dzny33=$^DX=5 z6^(lvk|a!rO17yk^W$ufwa+d*vRgU?X@fv&f+jL_Re|d9W>M(=^Y^8n`R45{^XsKK zu~zsL4X^9$J7!pu{B&lc0NE+HqbPJk@GK?D2vKGp_2A5uqUH)jSSZ85U~E*s)nk3o zfSD%4t9DI}dz&8sAqV;S++&`M>y_Ij4gKJ>gLECcGwJdA$!0|rvcKvgzz>DNh4{#$ zWqJCBru4(QQ_Lo#KVd@`Y)>bxy+XSfg<9uzs<#x+3N%}%)L zU{(Ene{&ojx@A8+EaP4mO&zVlXEQROXqm0D)@w@xk8!3M`xqVbmT^VzdNl9@gfF8#5Zyqi^ zJ@Ob~KZBaA^)jQw8e0TahxnCj28;|kj;v}(CkhGl0v>Ah3Tjd>LK~j75x&>VFi&NQ z$jkcNt|qw4a1R+Dy)zpY%~NIotwi>Kziq5Kl+`HjyQpQPRua119iBiXCp9P$J6$Sf zW?PNHYd6O9(|&&;e!U5E#^wufc8FI#L*q;U*;<4&B)dj?%ovm1@Shg-125YK; ze+Z4Q2tR*YA8$zmK8!-`R($|AXO1s@#(NMbfmQI_={s@Bow43!Nyr*G{i`9&MR>ax*=H<7T zjlK@Umh(U?GCDC`E?-A9KxxB`GPfamNTFhe9obdeR5c)1r@kZoS!&Zpn7g{x&xj_O zDi7`?6TjIVkrHE2pa}mq2~ofa{oSjN^ek$&$^GRaW5SUevD7hOkBP*`sBgOH|hejWw7E}xK8iKk{X zhh(h)L_1S3UUO_80f*x~6OZ4Z;K*G4s|S#c`tYcXeuk3TNUhq1&~ ziL$HW4;(??>Bx%@9y};yg9Qd0x|Z<@iK-`u61+RH0(8Az@ET(swkl%$GFX%##o5;u zlt*I{Nj;?Q#xbOl^4R&UUUIhCMD^n!VmfWX9n~Zk=28F-7u;8aE*1>C_wCpmK>QGp zt>6Cu@q4S@h-sDwU3Xg=QdVPGZp=O$h4GdV*PoWW^}Xw|b!bWW^TbH-A5cCvIo$kU zy*ltyi+GR04u2repHiNPUAWzs$8r>gQm!5yGzwzGI2ZO@+e~j+bGr?U?h4F$i*>(j zlt|gOrhH10a5knl8O{r2qE*r5T6>6BaR{(EOD?Js{q?Q&W$3zlZPp$j+7mB(y(uaJ zi0}}m>Um}hWuEIY8q$#R-%`8NDC0QSN)AIVZnIWbTE^0y;c^>Sh=Tj=9(X})skbZ) z8zj_1QQzu3N40J^@@H$f6fLfeRi&3wFyVU7MfXv z?Edv39moGz3*izBwVU~lk!Ev@rzZnO@PMo>z94IQFj8DV=gBx z^;qc$XC%a6kJw`%09k0weoabbhK~usG}hZ?V>zHuJ1Ux|tACir7uf$XMK>Yp^JM@2 zXv+Jez8;AFshUuI!MDJyh=Zb;N-ur2{4nN$Ft1jutghauy=78KhAh}f2(}^26RSiD zU}E1?_|Tq>P_AV(A)rxNY1(?^vF0Yy1573kqwuVnQ~=W!Lrhz59qUS| z{J0{t9tvq3BBQh+<594bbNqlWmaFv_#rv7b;=Sq&w^hK zPvbMF84TY|tG>ptWEiz?040~K@=LqaHFjmUrq@q3#h)mIo1c`Dti$yeAB~OWm zvM3vxsHpUQTHc`X`jSmPQ(JT2W5@O1`hI>M>?t`06Im9@=2TqE*9twXL17U3wMNI+nrAxbnrPeLxk8!A&xGh>)9 zmK_<#GQNDrF2z`%d~wY@-*Su?)d`X{x@!g^1&bvemo~Z9)uo8n&NBsGwRrY~RpIS+ z;N77vMdtfR;-AXRu0OwN4P3bINJ>-OK+n2zG!vvI3&GUeV98VF28usftqMZxFE>>YK;rk9+oO@g(?YUH=WsBhmMmL+!zPC-#HVHLTmDw3Bu?PUQUO6 zZ3?`wpPzWp9QmaI-E>84EjFS=(Y%n zYt#5?#9SgAdnii$|H1`@1q}&et|{2yH3?qZ3nahWTjM>UnoNod^cK8I%vhiclmsHZ zA|B~*Y+ALz-W>)^W82zP&4tjVGR=wIUYE{B8h%SnO@wqxnlxDM1<(q&;Q9tlpSA_Pode5Em?SPh~5=Dh3D+LaVB?u9rB+(CHGw55c>9O1j_inbfiYJ@ zWR)F6R+T?@#8e{Uba3Xf9-NAybROtzZ5EH+N;=bN;n(7lg+cu3y6|cjsyr%w3K)#f z9&}Z^)Y{GVjkW0ay}fzxy%zWBXvBCrH(fgdaUZY?n1N8oaRRdgL{*4PguScMVNsW%K=dzvlUdl$}0{% znasrGkvW6inzpg5Sr==Ap<5azvM>Q|p#nhH2m@P$l6NiC7Y4>G>&VBJ>jakEXd6&%l%LcMSlmWEq2HvNVl>%Z^d-2;C_K z=BXKjoAbgOHuZ-pDkP+Rubg4x0Qi~_zGC&-3R^*(^xslW3O()#f16fLY+$xqY^)tm zyNGymN{$Khld@xn`T^~Fy?sffjA+zL>e0$&sNFz8^ATko>tSa3?ZLT7BVX=mg~yqh zx-En}s=RLYSvF<^7b<3GtuT{rt#g<-s2)2bKzsvfbXUA*H z2j=-DAcOcLp!6e@hp4pr=StTu!m9RSr2ajEuqX5jE*b3y!>}N0nQ0+vMp33Z@qdgQ zL7-iMzG#67jwd3_HUYj7k&T-CA0(_{^}36jnXaLdLPhjji1WT}VFFEpfM{j@E9aDR z=t}(T!6cLaM7KTz#5t5~l2E93E$bdakAM1HHAvDbg}t~gJH?r+$%(-%Rwj6_?;Jel zIx7m~#f#Dt@l9vJsEY==4O}SB{Q$uQHNJ9EMJJ?SnRi+b4y$|Vzubf1wPDpCQiU2UE1JWlAl6T+^ zYbFzXR{w+_sQ&|$aAMGh{jstg-xtA;%1~8Rs9gc#qJh6Cy8%DuR0el=@tZc&0|r4yV1XooeSl2;kx~?y>DycJIgQBcubY#KI;C5^+H|sKOoj;4X>1aR zIe97$3q(44hYWXMwi+P>FSQ%xI>E5oAEYu7nOKYb5U$I$f ztB$CA)Ox_zIfIHaL4sh${g7QJ2HvNWM4J3JU1{+$l>dD+S`gF`CPwQBT0{evs80TZ zXt+VWI*djRki> zv%y@Uv#ZzpS0B#~FNV=?lUx$JzHMkcRP~+tb;>Y(u7GxV9z&>RQcPTM$#rE-Y_!dX zC2n%PM76vg?rp}5b2ATSz#SRk&flSZz2GUZ3NDWdZvHzD2&DtexzE4y7v8nU>Hk*X z+!cIKoOAq_C-#n3nn+~YJZ4?6#D;%u^3w@Dl+3x)bv(nX%fGT8E^Hjl&!b-%CBgMc zGALWf?PKl9jpe0}T;)ezWtwcl)RJp0JB)~rQ*P-fC-ewNR20I9KmG6!+~>?qBy(mb zUW?|xR1rLrzcQ}U3L4#ath-@6WG^Y{jn2oL6yWurX9Q;I#fL-fi2f#6=0ym+NC$re zn(@!;VmB57nApKOj-U64-~>@nk`8m(E}RTR1QHk%`{NlYYdUydK1F3z2H_H^T!08X zkb3GN+rI+pN`>*@R-h}pAc6i>bSVX&HvYeQ{*A9G(v)IH6WROUVt?9t$Cgasg*xv0 zUlYJNFQ$1yn6FFc?j8vu@TQ9)I)MJa3k5LjC^KfEKg!wngrijkGD zYP=oVDyA`VZS*c%6gJww$Fnzs{S@`;4Iwd>w$Vu*G`m4QL>WN38udStNRI(v0Exfm zPJ^K99aF0SLg+ZvcE#d+QZs0OimTR=H5jeDBL>sSs+6JVhl7Z>4{OG*^smM$lO3qz zJpdEbDl(qoKjQo_@{ppGjErBPDFFo{xelo+ZK0$ubz1yC;0e5b&Vaq$QJHrFaS@}cUDy75V!c3Jece9p9Ssk1Qs5JV=B;XIV|VClGreC$rg z1D3R9q-z4p`E11FPxnI#-jCR_1|-$ntO}i|sj_Hw<%=Nr%c+=)EY7$BJ`+EsI|OKf zE)vqXDk@Z0?bH3Ju=QGY>5_%F%NPF&D(&|k{jd~ZS}e_ehd%G@^FGmeqn{|li+1G3i!qF6SukU2(v`DaAusj&zT*FYbv^x?LM!z%PxLzc zCuMXe$Hg}UPEsYrO%Qbk>wxalQGeuNG?I6k;QJdNBW>WT%EkB#yLC`$-8S2zC(yZ^ zw^@lfIV#XbwN=-mm*pKKV-^FxA;DM{e1NjQ3f`BPR;Sx^?|MO_aii6W8$yuP#Ym&w ztIR4VgjVZj$Ivs$--ct#|9})R_BdpmMLM}(#fMo$>z$Uw%)-=FnRY6OWK?GD+l`eoFMsVbfCL`~Ne)4JiiIbj8 zq_l}7aV|#s?cozOLy4)iiQhS~(*oqHJb#X_JPq#Gf0PnPdE_BAEGKs7ug$M?o%^a9 zFC5(SZ$xAnR@@G7FYjSYyk@0vzp#zzm_AS=JP*(zDX^GUNnO?2r2qOeyD@(ZcNKmC))Bda}ffrNvpVo!vZ85r4ti@2ld}V-Sq}5wADlyW*quD%JZ@2 zQmhBtbC_c$6?R(pZP9870|QKY#Y4hRu^{J}J3Slk?8|x9cG~5#pVv)dgp9+MSMsGO z%C=lrMjm9R3F;|iu?h)M$=ITj*)$U!-acVi!z2kTMN$@p=8_IF+(qQuT;>OC*t{iV;mVsSoI;v7urlev&>yuSk|ZX#LC`P1xz$bGKy=(`!l=? zTr~@)6kmm0W)3M}muTE7CV(Q^zxR2zckVwR!FW?$=$(Xp<~=SC*P_fOH_uU&cjsUzf>f&RnJfzuI)M zFj9w8115bRsZw(aZuH-luxI@2DcK=9&K4}zakXLmA*Mv&PKM6_dEe2G6zy_#YFa09 z;J1fx(edqI8#Z2>4z4*rBWLIb z%X}fW{_NOY)wqr8o0m?N+rZ3*1vYi6>itQ`q;#Hhsgx#NUAKhh`f7i92~Wj*Cp|bl zeyb(y+aLq=jcahV5xf4p%tqr?P*I0Wm}O3*5zH*qDosf12gb+AV0u7~d6Q$QhW7OA!L$h529; z;%@V%dUns33(YrMWHZOV-1b`;ItNFmRei^fWv|+G2J+odWs-z3}1!gtJ=(e`TG_a9(^)e8i6CJLy|p#zaS(lCel`Q$O7gPW1NVx8RRQ-rM|i zSbrAn)ayMRxy|PmZ)CV6__Q;nj_0!*v#Uk49!9Y!Z|%LtOZwZM!LTn$)=?FM>suoG zK5=OkCC7jDimNTWAKPqS6IA)(Q&?LQ+fNj)C5rG;sE&4?7ly1#nCK=CzSxlFJ$Xpm z{wRGsD^RyI?u8#}^JpO1BA z6?M#}84XJpM91Wc$hrHK{+U%tWKp5maQ1EPiI3Td{{Fd5i*R ze;%TC{0(tza`-`4;tp+5VrD2$*%9J)+6l0TRP&IQl4EtD{$(}t_)18poi_(P{rKvg z_4;>p6Zkhn#)>{SO^iSN1E5zBTibG;$B1(uP)Bq}OK!LB&lgD#R&>N{h2*7L=9o_+ zBu`$?HEMcFxhbg4otBvNy3Xj*Wr}7IiJ}-~O$f0DNX>SLILJ?Yq4fBG&+H#?;k$rZ zIV9b5PwY$j`mO)ErN-8*P_KldG=F41|6y5}q?^!v)3nfNN-;Kp2{V8kcX;N(?SLM> zB^c=7)#rMhRr`K&DPc(sVK5vDFw2sZTy->7ol z<^B00LoN^1&M;rdwn~i8{`^|KGyxfGh!d)`*s(O zK^9^r-dcQ<-Zm?Qe6IXIOuc1XlkXe;KVWo?(b7FecgJAV2jJKiPHfx?ksYo#%19kCH!~aBE~vP@sE!&KL-^tx>C(CwHQNFL(&H+icCyLl^*B6Vg(!A|Xd0R=nZkpQ zDASrng?o7uyprFDYa$$Y*lr-N^KrpJJAJb&b#YSjks056$XSGM43aWc$RRUx(mfi+ zCkF9F`RYtrGYAPniSc)gO>~hcKM_5LY=i+R5Z4>IV4TGulxF)Mz-no8Mf8=yC4;Hu zw2(`g^7L$*)7Sj;1l-V|RK5OM2)`rQq~IYt!Xp4F3V{TYmosxC`ATGV^?XtnU8y zj?KQ>OcY+bNWah7L>F)P#?z79Htr7v1zUH8s6la4jb#~T#=CsS+) z%W&3y&`=y^1rt;y`J9_Cu6N*-&45;$>=>Z{I&tJy5@d9V}8vy-R0Z+Z-D&x zpXm5RMYEITXqtRR{wpEYYNv8+y|La+%eRzJC#qe=_gPFoNgv3`k4c$784QWkAL~zb zP&Jy}d4E0JT^PrB-#KEd%c?7MXvmZ@sSOWvY7*(;^M<7`0X6^S|C>5W$@~Z33NYzj ze2$TkED-X6&GnzdnnY;~8Pg5Yq(c}U6i|l0lUih51m3!C0+aHJ_d59x`6Tnkh=39h<^JT8J|(=|$21W{em8S%n_`!4aV0y!OON|P3dHT4mfl2D&(?_WX)^W4#v zFZz6#UPy;MFQ+pWJ~1`GC%67g&p`p-8(3>q>7p4yo97qO^bcNXe*+m)fT>UU(OYbu zGe&qq4(Ks$=GFxrwNMQ(<54@xjx2dc`F*GSkRv&{@I-fe@LQ_@+PuJg2=VxRU%Py~ zZtYIl&z{L1PG|Q5H-|jG$}}-J!_4_CrnfCj0QBfT7|ksTN%0ZKK+U3-62f z0zA2XLAE)aqfBbBjx)NHgUXcDY55SW9oQ$Yl<s%G1 zyj(oeU!B%tK91o~I3qS2@)LOk0UW)tXB-n%UWI($GGfHcJGdyd7-#OMqQ_tqP90%EaFS-u=jkK`DsH%@DP{2s z*l4!oLH}H(3T$OT8>tv>;P9sW=VH;n@SMuCa{KD$%P)UI*VUu5&$gHid(vIlymcJ; zKm^0mTH@6&NBHgV)%B}*{DKko(hyrl<;q@*wJPnB zmsCiFvJ8X!&q)PNL36!zjgjz6!aM-$eMDwlT+oD<%a50_z|P|toeIG}qK6AstfM+I zJ|B$jS+fK7cAm#J)Tlxnz1s8s1E8?RA2}77qWsAb^CiABL0?QRvUufC+&Qfd)E+c- zeiXr0LOJgPRCA9vD=&|N;2Nbj{3AnZk~d_ zfj!Dsjk~M@>)_e?l(&<@k6qo$9sP)6U=Trz)ilG@yF+ra(|uQnl3D|PShM;j?=FCfJvH#}D9?xpTdZ_ZW?W<9=F=5XW(EzBoq$K#gH7!&Ix5o&|BFs^PTaW$F?E?D zrYb$WKnKwo1IbqX-w5Llpgjb3L_Vp#pDlq*b!O6LVBUiuV0Dx8)$}b%-SW6q-H|z? z*VBjCjS0m?4&U0`6ryqo_(GgiGR;Z?emG=R7i#|%o&rCE*^`vM-UW5OK1P0QD;b^S zHPE6Y9CNz!`yxv;;NtUJI;{4iz!b;gCYONV^`M%my2W61p{I=JjoHQhEDlG0{C7&_ zSmL5x11xY>ZxD-XsR%-(*=?1q38_(|epWG>Vq(Cqc7Xi|z9>EgkyUZ@W+qfCyUCYJ z!FGbTWnogfHk?5=66WZjRb7=-GS&Q@IFua))}veoh!4L?qj2;D+Qe70NRHc)9Iv6S ze-ZZRx2s&#LHDtFXREuEfn;_7b~{`wkl+Z~*D^}t>iRQpaBkb`%YF?uX@kGrSoD2` z%Yro~5Uk^v^1T^`oP$*5y+aWB?A|-UetbFKCs%>mH%dI*G)aQ_(lzLFaI>WsqJZug zg?n2M(}>S)Y#hf`)~~yy15E8I<143HUeN+qKe3%2@)>gLy@9%K*ScTqj!jFKh&2Q! z9T61i=`Hu8gMkxZZbps9kR^{I zl=sR*`>&uS`==Cbqp3&Ya~ZwFDJaesWrvP*T?0zJI1sktXH3PbQR=FabFwU5@I~f{5n@-zG zIp|clIQn;tDtSA)(t$i@V6zC7k_&xCWB$m4G#fy`ZXE@u8-DQr2KR1=Jk+U<8_6P~}zddAXRh>UnD7NQfJgjk#IX2*k=~B( zNl~vl-mDMPN`|n`v+n@4V3yD!l}To{-OKX5#r+es?(_%Q!}3P&tihei{fx@=uyG+C zN&z0QP_>%Dvx8|Gi6F%1cVYx_)HwJC;|JV2I8_dg-vOuIBd1f77lxC+{ipu};035GXFHM;2gzr|`~Q%k z`%&d`uofa%!PK71MqPfKwa)DQ6OV z9s}Rh`ZAf0NjCU>+|PT@b*2dexNN zmGE!)eG|h4IzK+fnz&6y`v?#6*COjRG^QocZDMXzF%NRM<7{r(&2rmVj#2=(5aUf) z_2OMp5gA=$$GUNnRH7h#nf*x)e?j4pU!nxsa5;~YS=!}mQn(tv*9%cuZFIX7Q+mm8 z2nE)eoEy}KV7L&$?09W4_)knk_|nOhWTK{KB0~;msy4~(DlK6erYXUC>ZjEg%aQuBk8@N#3XGjW3^-Wsb4pqZOZ) zC<~0?<6{43P=6X1JJnR=ZmLR07Q@=DuP~`;c;FbBC=pi@d&XOwD%HZX?DFV?L4~8!N2& zzMh_1jt@jRP{ltumdS7g$Zf{mO|Y`W41C*AZnnEJBDY{1o>uU5cISKcx~B>3BfDtt zaCgCHL^mUv8?g3~IzlBirRh|rKg+fnUHYW}y2sp3tkb9}5#MZ9l9MRU;ee&D)(23H zr3&4T9@l->fJELf0i{f?e8~*GF8FW4N{VxkIsQU~W{3zk&kGhgXp&7xTU`Kuu1K8G zPpC3hFB0I3uK%YNR_QboVx3}vwwGKxo2%en-d#5`{dq;l-VlIx?U-GqfPk*mz~za; zpxqQyoiqa)cdvlcS59VyE-30&82TmJg*@srhID#=aE4-E($(Awhgf zEI3@dJE3Fw=v1i3_$+7((ukK6HZtp)&(ogUp~LBD=CM0ZDQie-#t}!MdCGRj7!J7a zSwe^vY-$UHnAY26A{+)}m|Kj;t=g!K0+xf+a4F4R9QweS65*lukDlE1Hy?)x8W)Vb zzF*O>wjZ6$)k+4>SB;;n0QIub{3`~b$t*}-WVSxj3W#F&e~6u+XAJF`Qob?1PZ@N4 z|C9#4^7ngHH+~Yl+t|yrtt}H4h&~>cBbp(6+6D;N#8IASA#UUOPjmjVPi(ZVQX5}{wI4}v-2avIQ|()@VN=;iH1x~rG#T(PHku|1<}#%;9&8E4B6 z{{s~N(BE4rih0yxr~=B-viN1s8AKAI63j5ll0~$rAVW~L;ib2!1V;0il1)*xf&cpq ze`%FUh5loqE0=kh(|-ou46BGg@}Bo0ZEC$={^4Qa2>pV=@Y%SFHzt0{@x`k;oRGq{ zrwo9ywI}K@f82*%DheL@u5QsBK3zj@i4F+We>i^My_F|7IqZOPf>4}c+f)_BI}}qH zu@)z8)(I1^%6#9zm8~`w>2DE$=~QZ#T2_)(3@sIlg!Vg>tmtRO>E=)kPv`4)sBlva zS2_9+nLY>mB@IPHj7SlRHm!g6{_}zBZM=V%)72JQeY%l@pZGY@0E#fm2qHeT34O4N7I8z6vlt`C+ZC4 zk}gpK?(MQRWA$nW1LH*j-@mYaR=L2l;Gl*91W$h@$JIP1`7T?0$^lMyM)&^1b3AXS zKD6>WVJDBB&__|L4B<-GRYpEuQ8@MCCjepO8KdND8o#&e{%=t;xV&r-3IWzSD#Drk zypk*jBkB$@-kRguZ0ta$q-jQtm};~JPs*kYL( zRh6ujq?qzo5e8-T2G=65-(&GIi9}7ni+maYNWwg6A0~XiB`Nx_yEMzA0T=#ovOiP$ zZ!6S%2o^C~v+^+=u}|kse%!42&prCFXuQW)OU){9C;W8+CzBTB- zIPw;{2wZ#togYD{iicG9ctjPRVB-S|j#Yxeu>_fM%Xz}gva^Lm!Bt=KuUDvWhfLJm z27tQ=on0g{ExwxWGjPHlhY)xQDb|#idR%jo&((ACJ%NDVywZKeTg?zj;&8kAy2?`B z2T^SAdC0m5hM-@B2w;n#f+GM16hgY#g&J2I)F-^=Gxv2haMGhqoV&g*_(h4fQm-uiF7G_5O<4Q1kaa(w)?!u07TBrTC7 z;HMN$3hSBN8AFgSlfMAg+Y#yh>mQld#CFc%rJe7hmDr%G1WqHJMFC%08?ym2-A`k% zdVekjIzDG;_kol-E9iSGno*DxX0*2Dx6NbPP){ILu2o?at%|W>e8dlqR{{K zwzIJFp8{B-LerFzMW9u((=T|&f|5W<2~N_7A<96iVdYawg5slJmvU!pPZ=I88V&hw zTlWHM-XSqTbb;#a$Y`f%Ia<)82V6t&u(TwYUQ(=zw&=Ld079p|(i*Q?d?kjfx5Khi z>j@`(W5-dHzTUt58Xb7@{})))TZ zr8qDGLpzG?7ekG^rLiX+{*H`GyqW3#=98EXuTKG4Sd#jSpRJ} z26KOIHc)bJ)8zlYKncfErFty+ys>Z+oS``Po~+_Z61Wc4>CmYsT~#*wdm;yQbv2h` zU409H&($GDMpIu#*#Hc|E*u%l+{TsnOl~Z$)hd!GaD6##PO!&oVMTR3cwSwz@^VVE zSzFqATvzd9H!l$9wQWCet|C^X&ayDAZM#^jvs1OhQlOyftq>0`r^qGgybEFgY17}- zBYpF=9FA5{1_TjyGK<-VM+7rx7HF<*M!ESLvB!y6_814*qBLng`=8em_mK8}=n8H~{*hV(Z$ z|9Ox&(`?vsn)R;#-@A=3^&u^`GmtM%xxbp9#O`%Cvr*~7Gk>EWg)?P&x2a*DVdR{Nj{rEVU8?^R4=f9AfD(Ao$4APIAIK?y$Yo z>$%%)Z-2uKFFg*$Q~?nzF+RM(^k*VQ2h&fuMp?K36imq1tfW)kJxusE%~RzD-mj1T ztd#!wF4EhmY{bOe`}ZdYGWM|;fmIyLbA5w0Omw2p!g;Q6&`vN}HQL$wL3gC+Uae}&rA5*2&-ZvY8^bjg2{3t>?0{zV-vRK@o zq+NtTn970X)}%?`L|ZHuc=%hg=<++2?6eB)%D$uvjS6Q?Ixl*q@^jz3w_rZ{>3 zuP0R|q7nnVW~G{H+d`4doAHKE{}ta1bHj%$j?@f1ufwGiJ8 z{yn4b3`gHfvz04m6y~ShwI`WhVx?Vc2&URd;gUIqtl`l5vkV3i+8=(P=H}5LWU~s} zVQMcXyw$9!ttA?CN@XPOD#{Aq|Muo9l-&uFgE736!yA<)TwoU&55g74*9LcPz2a)?P*b8SFFkxrLE^(N*fYzkxBNbBb91iR(8-6)x9-FA3 z_gIgENsJMJNWgRBDp@i_^yus7E#uaWf!-|z?muJT;zuxH^hZ|VY#lvk-hMiuY|0i| zW7;8K6*Gt3rCdT3v>D3q3^knFEb%H)cZAy;jjG z_HX0c9X!n10(HZQ1ofqn)GC44W%eM@7c8`&8_0{M>8);)kavh1YJdm&i$T6PYAqhY zH?F(GwpSrqyaUJ_mivlUPR8_hPq8N|L~^gXp6sQ@wHSLHTlGLw5j?`&X~7GDUiuVF z2}|PSyiymHjx}5-m?rO7ja1D?g|h+Zm=_r@6irSSRI8r3r<^aN^K~96^U;hum<|cjYL_a>Isjd0ys`_w;{~ESP z`La8n5Y@zjvU4N{=W95`BLBvry_ZFCg?QF2tlR&lzG`~SUiDeD)O8n_Z_qL6)2>X- zOMGhz4A4Zp8Dh@;$YyC2U}pHdfhV896z@(E#)lvD&q zyD~gxcuCbWoHuUgy}hW)ogx>M3#IdYX+4j6f864aM+IdMWk@L7@aN*8?+_n`h%?R} z+9#db=`jj{vRe#;T~?_L+cSy#TyDS8sQWJw09$#2%Hisb=$~XZkCJh`xHr%GOkVj4 zP~6N+u8_MM)+cmJ`S4H*=ju}JGBxd@u;vIFbyxh(&(Q&A|I?V0Fec=;UqUj|i>7~d z7ZCK701uCxSg8HAG|~Vlcfw_z1A|AsT$$ay)V}gz*UYr?M%^h#RZQ1EuBz4?B=z*p z+ifyep>Snzkwa{j{=MXV@TW*!Pce#euG{|R9&dNgknshv^rJu0jfDYL?k16_jCcV# zMlr46Cl$&fRs|~#z2FkqCXfJcQ{$I!i^scY_I>Hu=TejZ0m`CpTonpSKYdD_)bti3 zW6KWOOC#w-MBIEtnWpb-I#8Jy(S<-jiGJL|$Uk0BZeW_D|5qj0K$h^ozxscxqX!oQ zfCyH+2X?llkozvW|FZ}F_W&<0DH0=nPggh?`M0*#Le44I@8-mo!k?oagQONG3Nn&G zI11v0ftDQq-+*Zo+tQEHrgGD1FhoFc^F&NkLbD=CY&X;ckYLZ7 z(~v=!-t~3N7~T=hb_>OL-pJWll?mMj*Qp9qb0RmQe#YR6sLJ!@%ahDQy+?V3F{(41 z-0r%E{}4~cgIh5nvvmEH3w1L;O^!+WNZ|=6cS451Fh=v*`dGF?HS@!xU200xYdm+z z7a~)B{x)U$m!!z0S$w*ABc=zL9(n`N)fZ7t*1nEWdJz8N_nRz1gZ^He_wZX9J)XoD z6UjbaFmK8As*UTp*4h>}QA1vSWl3GowAvbklZPrD{#dz_eBanKJU!*_qiHU* zEc8B#C{$^p-~{KQbO^WPPG5~1`TR_w%rTy6qqRH38HyMF$0m}~p~!Yp%QF6^&{PI8 zMKL3zB>_zPYu^Yk6pfW9v7-=T-9g`cM(@xb(J|P>H#@z&QX`?Yo6;&YObhh+*W254 zw}Z=(f0_{;NUsvlN4IMY$n(c~fT3dtLp)2^g@2b)PRzMP3fR2+@GpO$L3(Y4vt0Gj z87co2ipS%=jMH=V>uVj8Cc_zL(OunbPnNCl2gXyVEl7jYtnBUE9nR{q{%n)&<+GNx z+8EXenlE%;=nfnFn1R?=LIz8!ix2e+j4YvmqiR*_am zD`DJwz3`SQ2Q@~*#2Osm>9Jnme}KbNoi`_pwp|53EoAyvzDg3=G$CXtyq53#A4=14 z4>f&!miSfjN0li6lJ{N=03gN9e*lQj3s^XA^5?Bqns(aE!}IkggVozLfuEG!Pro$f z2P8}<(j1Gb;OmczR^faViCI!^3YRPBjKWV3hRR;`zW)zU>ezB^L9|&7Jf0yc5SgiV zA{a^Q{FPo^?+nl}p^PKo=q0$21xD^?Z>_&hjH=VJ@^bX*JIp`g-01C2c5w-DD{5r@ z*j||RtUu30Pi>s)D>)28s0@IMGus*rfBNY^L=);TKlksgSkXC@&YtfTeU}?paGM%M z7~ceKY7{X>l}FYy-||lAZ`P6mM_zW2!D=m=CDh~#>prgg@HrV&e-d`n-SVPrY}~eS zgqNqVQ+%AtE&+d=9@Ph5kpkZwPFfc&6jQP|6aMnH)Z4V|*R!BecG`iQB&=1hnt&VF zIoazpimBjX|5N=ygURJwBWa8sahx$Gr2<=#v&HrQL@dwuHK_TtWDThH#ufwtT?y4_ z!&U<=)$DuZV;>=2b}+m>&$PqYlj+IkwnDOCk96yr-}AG^)WGd+wO)?URwi=>RtIsL zK*D=YofF`2<)Xjj0S%tv&aw0CjCLU_`lJ_QW2w!cwtucy^W}n*MHO=O*#bv2K-8{X z&yGTWHZBnWCv1x)i)ViQ$lP5i7ty@7jae~OuVn~y)){d4<(G5Wcot*q~T_29mC?1zkRxj>^ccsdmsbdo;iX$})-!@+`2)hcy>SQp*N;^FYSL zQ_(%-`b&mCPLu?SXTmTI$Cim5ipG=BxtuSi$b^WppH)VsVyBb3Q{lgV2Q&dnC$U2T zN7)>P+iP{7m3x4 zwJA;#MSE=1^h|NR-Rfcs{}|WwMn9)QZ;T$0&wI#uxB-&@!AvLE1-DvE5)t;tcAE!IE*V zEY25i++Llm9mwalI0cwq-OuEIc+s{FUbO7!mN8~0Lz}V5h?)o<`1D7i0%EZ;R)dHQ z!^Z@Zq2IH(#k;z^TAg0J8guG3NOKB$N#kAGN@YS#qNke<(?;{O1uuyW=3Vn~IW!J- z3NRfrkx~DX0^~LwgtWc02*`h`jwa zZBFkg@%}jM=ZSu*y*1g&lHJVKfQtd8&v)KW=TrGVr6=oU;7lEyG2G<~#m91r2VhSAVMD@^lMO_EP{6-LO5FPCCzlY@6@}_TP%e7}!UQsb>Gk2i~n~ zu=h?_@h1Fm(JBY&q{UvdJYr&CrU_9cifm=~DIeO4W%VjLq0yZzr2Uck<15iT2X3S* zvBc3$1jA_$g5qa~{{%D-ZTm;my`}*g(BQ{P2ONYesC>H4a-#CE>ge^V_3vUU(E(uZ2lozClgyxUrRHz?EB^`DBpwncabm2<% zmiUvDXJ&vGw%k6RN-x3WXV%4vtxp<@?+=PL`zEswc1h>U>Qva~;U0A@?C{p|NNvmw;yM@1KnCT&82HI_RMEp>eLh(aYQHF)++{ui4ZiBY9b)e{4h*5xis-nGBz9Q`EZM z*LQbPUL|>hBk4(PxBL}XMIkMdZ*{lkcUIV7dURsh)n|07XGy5S)RB@nlS;RDL5I(i zX>vP=n?$nLnpwv5q=LVJi+|G7joA8#L|M*f@+{QF_!Y}@yGogA@WK|=eF1nYB0B;xj8S)yR)4_PKJ$_D%KOj9T z%Vhe#B4CQ;NjfxF$N7njae8^Tmm{YUd#4|SaexrT&avU0U~XMl{q`!XD&xK$2T(sAmS4LI#JLby9_+;YEy$-deeJw2 z=C_vMx?t?KJ7pb@M5WavHQt^^R5wcR=s4i2sqB}Xqx zUf(77QYkO2U!90Hy1O%{zlz|kQ61IjH#s*!ErYvpiK@PCmpK#Jj90zX{k8j{|N83O z!xOdBqON2E{<{(L>YwR+f1OKD*G@5NQLNm7drxt22w}i>_5Nm`?~M1hM52h_FkEtT z@)a+kRVH2ctYEHtm!=CN|8C1je;p1oKlJGpZEH;v<*ZS-NoM_n&eh*!8)Qbo+oKZG z?mJ#h)6V4d+@>iJlTd*onH+;{R8*Xf+|Ijf+TEpY=kajljpu6F^+XB{{AoN6c#PTUArXO7_|Ir zW{E1^Ui_tn0z1O;3jJFrGMpX2w-_$jGcNge*&W7(UQ-|B51Scesa~O8@rLz0tC+0h z?=+tz2WP;Vxm%~&pe_CJJhDlW6GF=S(Kuuu^9FOOOxsT-+GJbt>@asS5du=2HRH)n z)IYbMDD!NfprgfdKqLK%OglY0oN?7v3a5_lz$WrMy5vY!k-T>fI#Gp)sV!$ZZUUx< z@UlJ|^{0npWy<=fH&pkD*q25Dhj?V@aczM+uNiWhdXwn_!sHm^PJ1u~VtoY$9Z$G@ z+FZ{bx9n$POGwE!{u$y>=a@W!O{Gi(rsCFLKpIC4p*I6a0xwFAI{gcqPw=vJ^!a`f zjlS@v+EXhlv(v{FW4DJykPF!W{dR=z{MN-LJXK1_UWzVaLavsoiQagNQ@qmD8clB! z)oe(MZ@MsIcNKZBk0_aAprYiBB_f}+)pCkb)4#r{v&_w!S${^q;>c#((UGOc$Ze%7 zhHJro)vQY7Ucxm8l*!x4k^RYpec_|NSe*Mik^a=GMp3QhlYYd=z2>IrGLh+N4pM&B zsibL7mAJ5}fD0@Y20Ym$pMA}QYk-j=IVu_SuKHA_`<{MCdfGz0?(}VHPJ)(1HG8U` zZc9XM0rc$&~tQ%07?hlfFbR*eZ?F$K%v;_-2nlI|Hc%T!Xz7!`uz zNsT3pOa*?ObMWCGJ|G~lJW~vAfwIqPh?ePw2Ud9)4Fz}>S1FV&4hXjyx=&ZdeUij zd}e46DKO3!W055P`Dk8t%{lftah`vE*G&iW&|b&YzImESCDv{bGPX739Qz@*%10?w z7wG4;e{4l!alHNgygvJzbUiP)5?_29OTxqvyNcf|m{mk178X)1UJj`TU{QLn0%hH} zed$D*T5m6}$;E=7$s1N-#`)Hfo5%J%B}4k;Kj?MTSdB*jf)k=DPScOQ7uCA>o&VDe z`(Gyy$e`m?v*r==1nl*uFWi*4E9<40p(36Ke{mgglw(7V$sxAlvh;Jo_{xnaDNAC| zQM#W@1k6g0=7sn#)|vUrlI~D&Frt#i>tk_iliref8bl4C0|O(ySh;ppJB-G!p7&9W#q0MpI!V2*z3B3X+1tn{>*6su(tOUgM_Vtob!Q`zNz4 zO;@d44*GGe_x}?2nl#^}QT~;t4Aan1;*3l=wtxCV>U;_|yfL*S5HVZs0@?Dmoa6Sj z81MWui{$R$%6J(z--#~@k(SF(uQXO0+RLK?koYM3lo3ck{|WB%(#?`D^ZtX+DbLw! zkj+}Qa}cGBKBxOiHY{9}iXWTTrrn4{H{kK6_yL%!$Qgr=R$qvugnZ~J;LL5?5fygQ zsde~c>`$mzHC*ajtvUCuaAqKJS*JXY5@OQ_Kt8GoY}M@>`R~%XL?Y!5i~q?+hn!aA zsff@^6u~;i1K>u`b9UpY{t_MT^Ip82;C_1Si08l(bK7Tsuyj_6`8VG|W|`sI>pV6~cISB$dD77qr&sNM_lo?A2+;gYVhG zefNM0l;bre?Z;B>Ig{@qQ)2p__=_~TcLZ^q;H3WRTx8LYEIXdZ*teJkhhrXjSV*i@i zs74Jq#5?wNj}@l@4Y6+U6)LnGzvxaiEUl#UEP0xHPSB7e}KQ7 zi#oFP|4J1z|}4oTrhDXUtnjr;#XHq%mU#m3?62YP7k|MNz)G;29Ap&sOokRSiNUdG{YN) z;rPyr?K0^cHcw5`4BQP3yVqtz(kYZMzJCuE34)Dvmr##n`v7v6VWuF^`xvlg?r`le z{F-#wEPh?Gvgk=QTL6@#(KU{A=s7d%?c2To0L>RWKK;bn`66psT=sVt4xVSqI@^`0 zqz(hs;Iudk2?O9WNFFXDD3v&tl2EnR=fhtaZ*)BMmF3UZe`Of{Mv0hQ4L8NSH2YaC z@+WT1tHwV4Krzh!-=UwX!@uvL3K~efwA-lD;KkgTy^ft`MwUEHDXv1^E(W(7j-o7h zhGUUOpN+s`Tf8$HGQeM7HT%(fd>MZga>J4Xu|PylyEEuEvkW8F9T;9&rF+tu-{IA0 zG4H6)=4&<~YD(*c%l8)KCE22}nDNKhJW>2%qbo(6UVQR>WU!h&I@K;z_G|OZhieZx zc&*I{E!&3T-_9!l_woK-FR-SS0V7GI`=>eTS~AAP@L;VuOim(#x58hOvdg@c=ws!R zmW~t?)od(VPk)h62-V{Vu0-c*3ry72Lv0C6szw#LD=pQi&ZWpc?U*Kio^8j{Eqj) zc2fL&1)u;4m!Sps9;BYTN&2P6El>tU@MM$OVD>$9*g4AiYnmqsJ1h(}dzB&&8@G8g z_p|ERvyX8I&KO$*?DbNjO>N3cz}O(6_O>S=wFk^t zFO2sW!M372hx}gQ7Uf8oX)q7=DXKhXouTX4{6Z0*S>^oCsK_H~T+L_Yx}kak9*!O9 z`*p`|lgmr{=;yj5hW6r>T;WLo{GWDmdPY|*&y)EQtZ|F1Eemv)(s9)zNQeSl=48W?%Z-ghk}{Flpc)wFhMW!~E31ju3X>{C%*o;=&C{%c9ABG7K-&W>+LJfqQQ zn!~2-VuHyvseekhb$;*kd||^lV?ii+2LH!C0-+4=fYveMe0%);DiA41;gI_Xg7 zRD2Tpt4$zmQ$?a}>PCQRxD%6z=@|RbqdmAE@60Q8z(pCGCCEyV|1Cl2n0I~9neb)3 zr}>b_TqcMCzKIXcNo9;`+iJ6fy83kW9A^Ul;*1!Bz$4pFirrj zNih(~RICOORC;$0pNj>PDJDNG+Ln@ZT+unbxC6b=m}&md%&ftky>$Re@&-5Kr!Q%h z;d@oooeanAptGp}?BIU6-Yi%Iz?cZ{p5k;jqC{JE%j7(Ch4=b?F_eYVasZ8AMaYO`1V%} zi@f&uH+WOrTZI0{?#I!@G#&WjlcK?oxgjV1^dyyzS0?k$vMVlM_eH}3`Xbod6l8K` zXS3_Eu*+icL0C6S;to-|FXijR)&B#$cr&PoTA zD$I9dgY*CZeFI2IgDh!DmqEIWP@8>cmrAAO>Q$Tf2#7 zxTF}DN|QSFEq=~n6_r`gZ{D_SBNDF`ap7s|r*&gR)NDk?bPP>fkY>Ea+S1DY7|`ddws{3|+yd+vLu~;e{u}O7WY(P0sRm z%-zzLb^qe7(UZ(_;Qc(zGf1y@B2W4(@b$it+qiYswDlp!HQg=b`!wUfOp z3>tTM)!ep9IufN#TBN$UP1631Y6e;OTw>p`*m(s5iUHC0vB>0Ye2k)yZ1&97i?1Ow zEGoMXBMw`~#;dzwudli)$P~~Ql+h+v(te!uXktA$ zs!p>a=uUr9&AEyp?t^FMtQwPCkmysT+p|gEYqZAwL_>HR2pR}lIEC5Uii$yp%qxU& z)xxn2@3Cmyz^iY#=HFBPBx{vdMWK>a+WNZswKUbQ*w=N>Vh3bhV3>zIX)3fKL1f5- z>QI7I6oX5TYm|MdrL#!9XIhz(Gp!Z@_hp{n2fKz^sG4oXG8y(qaRQ()&z%ZGEQ9iV ze^||*v7p&svUScSQ+^ho<8?(V0u-S#M=2haPih=Ix^hD74cc`|VyScp?1TYV2aW+t zVVzehhyl{13WMu&Ox@GbH%9L{0x0ZD`+NnSDPi4;iXfzUb%3&P{bcqDkThZcw>F#) zBgp}Y<7DzQw(6T4qFh9}$GIDhYMpZQ@k5%^73GOgV%GSK$GA#2T$l(@CV(<{NrdA2 z_P`&!iD%(4#b&JLqF@WVKHX|{oeg_GFCa(g+)>_M9|arX@N}{6T%8n$kM}Th?xrLE z)>SK_%IYE6Ux6owo(58gy>_%CiLwjIOsLszo$u2x~HO*K6fD8 zQjvqBEz>t!(shrCL!k-7hTU=Y0XnoQR`(;!*us%Oc4&t;T(BrII9;@W zy85hPz>*(S;Pr(Yt{E!wt+>~K)kN{oSw9(?BtpXCMz)P-oQ3+VeKZZdsI%yrIqsjI z-XeQfyierwLac)kjtl1~lqsXg@={}UF#rz7%Ms9pE(K6d%+wzIaBM6e{^H8->Xz6X zQeIrc0AF$iqKL#fqoQDpA@3oa9WQ?HI}*;%g+40lmi3-ee&Gv##Be?Y#cC^6h!6UPY@OH)uWl7DQaNmCp1$N% z3&+|6CH1x{|*(Q(|=$y5rJ*qcq*{t#;?EHp!RiD%+>H$4=l`&52Qb zMlMqyk>lI}KIk!3Gt_Xn0?eyhSlcO8U2K3t? z(s%szAU0KhVcP674#H=6F4hKGspyBKve@x#8mgAf>s*jXYZlq(!E9~TEwd(m6DDyr ze-UJH9R6#g%xyx;wWEUeznDPwr9jUM_mFpHM+X7pW#-(Xr1f|Llu~YgX%>ngq9M5+ zj7cJTm0?Ig{%+`!?q&~z$@hQqjYrVHV563mVjQ~b0i|%~*eTIjXkQ|LBsgFHlag+a z@c+l$TSm3jx9h&ar9g3a_u?+WEl?~t6qgnaE`{Lk7PP_LDc%CbwNTvMttG4I_~bZ<=VHPDgTa)Z7q(BJ>ziAdtYKd1 z*(E=tt+M#?SL@_>OC71I*of3VGZicLJa^P~TK4s1x;;%pOsa3rvjQfoDYHz$}GrW!=0tFZFg2Yg!MhF5S zet8DJB_ZbbgB=n^7b&W^9nLtxhqsZ@2mpMy$iGYA)BkxebW|Xm(Fz$F5c3lk-HS4I z6df6B9D^3FIpFaZ(DILD?%%qf|CD5ja3sjBM-e7(qO|{XoifdPA%s9U zm{4zmHDFR%92!xMu)Q&B5r$35G$9hwZ#e6W|DTG6kV3w{0K(+ER*cht`^UYP*X(}* z?|{MoH*S#I|5!*r#L3OPB9#JhmzORgQ$5tN`N{6V5uu1O@ACxkq9Ch#7oVUwSgk0A zPiB3xTFQ{6I?(hNKpwTLaEa0m$MT~6P<6I-lps4;^1BY{SK+5Wegn_yva2(6|JS^2 z%e}CJh>-aAFHswJ+ySbFSCN8tI*A#eL-@bLXoP52|5N$(-$i-<`d_SdjA;$bpQqjW zwR!rGS1!F|*x9Ep$TQ@khgD*6Z$}_5mOhkAWV|h(u+ZVhfec)Q0e^dk5yrA4Pr>1Z z(_gb~BGYyu+Px&R$w11=G+XqfY@i-zg*Zt2o*GK!N{T|^5dSf3HnVA3eaNn2zsCt@ zdUCoGi9P=tkq#lClZv8vHqRqGz8d3IEh4O1W!L}?9W3ixJwY}zEsI8hvAYg zS_TqdGHOe`!tIsQ(DiBqIfA@#LNTfx#E5qWy>Q|ka>zWJ~&U26&*xBT??cWLwWGp-;FEWQR7r^_(I?uO2J4)OEEB{KWyABcoPo1n;SV4)*6T0XQL4xuH;9p<#fi$oHibP2zpL0(k3 zQT|Pqeg5D{xcd+|l$2;;W!1!D*;s+xeKVE{rV$E)QV1@UA=1%&~a`C_1sl%9oe zG?n$QOWc0KEn8%?a&jY*N7|}pQ`NCSsqLQ*ys$XXIOD)ykST;Ok7|5 zv3Bt^V2%1la{JVR!7(ve39gS=KG)yI#smp_;!|Ckz)C*#J{)}jMBb@_oTI>BK)PTi zP7>uuVdk`u#?4VG$mQi2(n2{=2}GV z6@rEzsw6+UjbeQP>%>`Du@ZXxsHX8kszgc`^d@4QGGLe|!A2TH6-Am6OYL4EyKz8S zghbIb448B4bDUtB2AMszpDNUbRifs5XrC9yjnSpagA^AvF<;-y7JI$`8Yzmla(Fx zdhbVcsz|p@)whvP?>YNB!9E7KlGwx-d9VY{X#T!|%WXYO7kJiNiq%<%$*XJ5R@fnj z*wA$jYn7B5i@sp-Xcy*RK-2*NP*RGT1bB!pvX7kSGS!G`FgL}Lw}aZu69=6wRLB@j zBmdH#ObKH7zA?=o^Z0X?^8<%3c+JLGOm3D^)pSx zb_+8uv)F~4o4wvwYjBq;rEIzEo?JnWz^oM4<0~R|>5NrtZ^`KN(I%y9WO;jk{B@O( zW}Vtjf7*D(tm0@@0wj3AZSFlhX|B;4EOX+vUh1tK| z))U!gM#GjQ2Pi7Y;kEqmaF)KD&l`;5yzXlDs+9;awNPHy^Or>g*bY zLhzAjTCs0vL7T@9d&nb3r+kEuOG3g%-`!ogF;%_> zl~^elEmHCR`kyC#QnGq;w-(OG&S}N|9)rVZt3@ zb@j9O5i)w~-nQYfOMZ~BV)Ch688uh;wV864eR^2!&q{nE*9NB8Kua5Eq$R5pcn#T> zxVeFSvwqz>I>i-!5%OFibfs3w=BDI)<29|V`6x;XZK5tFe*H4O{Cy%A4%W>YaMvnZ z(5oWnqLQGtXnm&&$8~yg3f{{=OzLV2))a@bw_XL6oa;w+)bwFe-ygtxauL86s_6yI z^&V!4ow3%qQ0(K(^R=8M{bN8$JY2t=JKwjL>7z|9t`c zFR43pMx-+Qb)no!awEFiH9?DpGP#rr8tmo>Y)=tLSAv1~d~pM93tw0mXB>RJPcpB>S&=XDY33vAWN3!Xn|#JC-#jq-HHo*%fAO(}_ld8Md(z%5aGt=rv<83UbTm z`ty4E<`is_H*Ql48O|n-%OZ0eqZu?5J?3skOVAM-ZwbHC0u(*jKKBtNx5#0P_zmq7 zB~$0``nN5x>YhVPvK>h73^){&Oc?33UJ2ddsjYHTi8;gK`n1$Co*$qw#Hbo@jrfty zhGDGQg#!8}R~fl?3noowCDy;ve&FfKJ8`%>D^IH%oa9(jh@$JL(0f6}yg?}S;it%n zdZ|g09QI?Cd3T>;l>?E|@r`+3ur;->e^Qh<=I~7n=A77F4*E!vT0ylU3vQ9dOE}4m z2K$izPLbfYVIc+!ICrZ5+;#`>VIT)4-l348`E|Y<{K`&ZY{nApP||ev%||dtAEH6D z=saylUQe)vgT#Rxt9J@i zHesT>Ces`Y1g^EkaIAAgS6=Tut)k1Oc4%u`oIoHByP`Hq6%29 zr&YARc~j5Y<(Jzj*0Acq2ZPE`@K{GhbmT)0;Is-7}?F6g5Dw`xl#i*Ba1B7 zN776w=0b)N4$0fF;?7yVN_xg3h4&aDD%ba%CQ>fVHrO&OL$J*Sujb~UKZK;rQqWlYK%V=5vo4R`SK_T89_@Y>PMH{;QcY-&3!jYN47{UO6JWHVA%Ml zqKT_X+^!FSQf)eONA+BOqD*St37s}~#nRTF;4M;d4aAC;qj|)YpMWu;`iCRosM{uyjU}Hou=IX({cD^M%UP4-+Ys??ICS{_?qc_16o*?!qZ}h6vqbs!#$-zj{ACS!T(P)tBZk?Q)Y|f=F(Y4!{V~V7K3+raiQ*kvDo*sqr zuo@#iKtvnQ1~WZs1j~VUcYQWZ&Ctzi5Z1yBj;dAGC5~M&)XWDOjl(l+Z7T2+1S3-f zOkL$ui2zVcyq(XXB{X|~0jc1sm$(B*h7k2&Nt~AW$h5cKPol{$#c5mRR$D=nG_aFq zIr$u662r6}U^#Ly4_d;FB;oQ+fqm{>BJ1!ghTRD-yVbbT1}~;{=_LL*pQK4B`M#!C z62y}O#6qwY^UING!j)@!Q*N(zNqO=HTpMW7D=(Y?pF88M;{REN9-nz_M>|%(ksBYo z&YHcS5y_!y5w-8~lbYaRZWI)n*2ME9prprOYH1I74W~a#yDCIW8@-V|Iq7z<$#Q%~ zAIli#BgSrO=ez0vxZ?Nz7WHS`8%!91QX4wPtP0rGo0un5`#2oguH>)xX}($~h(U>q zp@ycaBQ^E;$7H)Q5@y*Au2gX3@_dTN-<`O9zo1hiw8P3uEA-x=Ia8_MclHOa4cbK3 zA;a8q(Fz}VUesDrXr}cw@?EZstZC`DYJU>np^UNV^#V0NKS8D0p1qsRq^!mtnlfL|?c^n1=!!>1R#omehEb%KU#>)i7rBNm zXn%=~DH@Fh0u*9ZT;V0&Bab)MAtUDtNQM<`>DS>DqZ&Tq@5O#H7N|_oZ{Y12+b+jN zf{BC~`f#?a_N}ijknrONM*aerqA4Du^+G5VQkx!`SOxfA=Yd9BZAY1zbd$VtPpW7; z2X-^*x9P2}Ug})9wS`^oI3Vw{q5iz4I4XzuY2o?x{a$t)*-}Vr&L2%8_cxn4oFn z6jPI`0<~B~x8RL}uwMFs$5-l;#FgXEbxK26I3ZrKez$)21TpOyLSb$;bDCZIW@QY6 z1tsK#k@o?|Y+YgZ4g|?B-zP=I!?^Qy`P|TV2Fec;ICpWt+Ltjop`K-p)!KM0qVh3O zp)(%K2-`IAu4n+vZLa4B!pl@2_GX6vDu*^ZVUJQ{!+rv9QE7!-sZ`&r3v%%-l7Bqh zzIG05mx1td#$qxxV*YZJKE6M#SBdzoq@Aj(%w137*tGceB5h1e5lF0NaFwQ{OWhr{ zZH*qf2X`}ab~%fPmW(+Or_af7BaTrPG~O;QDKs;1$AsRcu+arX-DQ{m!dW`kJXf1w z-;_`nV`QNj;xrbC7b3~9Z*ZItMT1IKQU{b5y)VZrLKtvyF_?~~Y>awRgDUCArO~K+ z%z(q&X^JFxE^){RFQ^Iv@~c^E48H^)zcY7wP+L03C4B#qQI`|Oyp)Z~|ns-|! ziXAW1_kVd0(bwy`y0N4UYRA<`N)Hws91X~^-;tZM4;5{Ru~SFzWAzh~Z(j2voLR}5 zD9VPs3)>49pq89CG@d#qX9Hi_E{^Wh02q7h8VwKt?zqJ}@#WoSxN~IT`Ij%U$)eMs z&h>oq-A!bwuU3W>Pb$8q?H|GYZ5&Vql^}xyD((_tKXW?5JfmO*GAJW z_!sa;PUwXThFAP^E?(U~2mG&{{-w*QF^Kbt_xH_55QyFxFU5gD zph{azSeyeE;UsG9?lOJ4{RsdDqR&;$C}qctNe14|u>b!rz8x!eXi(@s{Jz%v3)qwX z3mD~s!&*u7#)mV?-nCY}2+Yg$aHO~yHMrs7Py1@vAj1UKW6HKwVrh4U)3sXX2m)@- z+IInU0wU*S{sSPxQ5%~!>t*V!cuDWiye#|7A9GWbqxhtB#bKEcX1qz=SF6ZB82pLh zRL4})CaS@)lW%vHYvSKfB-&My&*HpbPrqeMMiIsX(_2G@gj>Nlh z+xP_M2kkQQOY;tUw+ePtV7b0l(>(x*oyzl^9%V@mZ$K9VXU&5on$FPv@X&R+c)aX3 zu7Me>>#EEvA^ZaXX+9ETJU(Oh8hsB1qN-~zi_9o2he_UwDClB$BZt3TlpAWPG&^gW ztaVh07!6}ps*TUNeR=by*oM5^2vB}|@OcM*)}W%l_uT>~)Y~}UCccI!gls&9yiH(g zgHpfoOS+A;W(SFPF3FDSi#XGCch*0-cq1UY#JH=G>Y;VLYp)d%Gd+c%<7yaG*Y{A_upnx z2+RoiwPgv<(TH5pa9fFli+?zd`!n$`yT4Pr8O6f{XL5S@;O&j?8rkE(Q!A!GAM$e) zQQo&7&B$UNi%Tg(4S%cK2!qp;qGIj9lFspl$?x15wp2Nb-)9rPT_)g^)mD;c#~}QW z106UuZzZ2DA3VH?JI;C+-w4u;PhdbxcWgb#c2wifNIQ>1mK;f(L=9oItC9w@r4dMTkADKz8z7F(q+3M zwAwVjuZ0?GOGtYNjV)%Vk+fL{MzX$8xxw?KguwV^X0Yb!p#c>YqscrjA#6`vYll9g zcK#2-4k9+Z>xeQ_q_E7!k)T6Bp?xMGnOL&inMi=61%U2g#^>)^j){+S5pg%n0`MHs$0#u|_b-^X_!F)`_*I;Eno{Y?eOIr=x_KI(o|S13wZh$F z9mQh{c=kWEGL-JG{NN-}Gx_lIZ35Z3U9|8;l#KR?6&?Z)))?}(D)K?OL9 zFp~x8{{=jJ4Y|QSX5~Q(nqHy(3s4D(wQQO<+gpAba%!s$Xvwx9HH8m+wD^Y7?#i^7)#iB|vEuQ&m8Z|@QO!Xt%7fW|d>jHsF zj6>RD^FD;!fooK%pE`uz;riT8SmHx+#DnfRx61ol3ef?|{Mby@iws6bMxYT?KEIeV zh8!@6Al-8~j}#u&5qa0XBhq*^AHZgOcKK(&7_B5!_? zX<8(Aj&h%uz3z2aMN09`F9RD|UMtLdU0ZX8hy7Q6IH(HAOhgTQ1iK8Z7m|z=ivE?=yqW|br(833@kFwA0zpY;m zylIuz{)$~%=8Z9B9Gh2Z9p>WetQ(^OZ_x~)FBEm^jwn^*jWSWjOG+Tpp_=1TLh z&rsL-;_R{?Z*C>@I5$FI_Q)BufEcQAm(jWaIe#JJ(nJ*^;|k>KPq#XA`P5{TQf8#^0FN{oq`_ za{P1~msful!!R{C9zloq1W7MYl1!#7IK$l7q`#r zrE}B%r_;PZ-$eTL1@f=+?-J}T2bf$JA71~+HE;;Kxomr7XH3wDX zO1IJ=OaIzWyPQO_y8x9~SaT&6;Sgy~374`Vl); z6tzFUUvsc_AF(Kgd1yAPSEk~@p|@Scmo=G%wB)<`bq`Rkr<2d+t4dG*Nd z>{#nTK*xw#)c z%R~6Fixd^Rvm5F|m;XC64uI)N6+`?l#NMyqDRenu)GykgFV?@Zt=47FXB=7^S|#n* zw<1Jnd&l5?tZifBwemDqtBI52gR+Ort2T3CO@85 zG<%B5oIC!X0#vF@Pp*7JuYud_R$o27PS+qVRg;vUFqWhg9TGEUun9Y?K$kq0+@HAr z-jR(@Qx1tRWtihV2*5}qMCm9>JP$y@wg=G3A<(YxkyihOk9FxqyzWg0BCC@F)N>M0 zW>67IcI3C1m|^z#2x1>ixC^=%opmybb4Z`$%QyS~5CVCralih``xkw%Kh7F&m^~wS z2e-FEuH8;&%{ECgYUhHs2)-2B*E1M}XqlQ?tvw=;gY$e4PJ4cZ`95TZf3TldeZ}uT z`9Tq^L%~&T-xWbG+!6Rsq$e+Oemu?2l)ffqrRzZPn6XuL=fhXEiG=j> zWCo%}^F!>uK4*kd=@fSXoZw!G8I-9i$4_vXUykg_hvbimiT-o}kL8oGcr7+F<)u}B zTDa4C{wYAd=VbgfvC_KWT$4xhC~>5?;yz8=OHI^KuZ(A!7Ed~PXGz458=8VuY5GYO zq(F@3(2WU=E+GMW5&j9yb0}K6`1UhrEMrOXIfUE4`Xtrp1iyZI${v|B;}h{K7tbe^ z@~4+8aCJw=NnN->Ta1td;zLyOuLx3q8PnawrTuGV+}bRkHGG zhZb1K1dc8WBGgEkg0X%fJTRLtJHsn~KDFYK(u(ehEiZb2X0zp5u+@doUHNTcIQC8c@6J^rJuF3rU zMKO(@IP@3^9(S?HurrZgRw%E7b(m295{paLBncMqjm1fxJPM00BDS9o!U!ayb92AN zNA&dqH7(yt&E3c1Q8!@)uaU8LM%dy|RIVr=vR5?AHHBA!q(LZfZ(Wb6 zKpL<)`1GU$)uR6TIsAU2V4}TYi(KFRen8hV@!YUNEw7&XKgU2Ur%Yi zJg79rTV2CjqRi;JYNtOz4Ki=L$6IrQ`?d5x+!l%z3^7sfY={i+Javk=npGDUx5f{s zazc1IsKdaClVK`EQSq+CcGnCIpX4BydLa$eW8JHha} zxUdvbHSYi(YrqOnpV)3#8JhYWTiuI9%1ME$;*z0EMs_V;@J1?7EZK7%hzxmVfFEUC z?@^B{jgL@>JKhWU9A#(yxW3^v8Eec7xiB9muSw+BTX+^-XvSuSrUk=<HPWUAMRqvaec3 zPVy_^qPJn{gj+x;<< zF&%|RP^2quhvFe38!0EPuzrQfc0(xJ^2U6;zVO+%3X{63+75&c@_j`U?iva=s(<*M z_;#wYu4r$Q@h$4w1hwgc1ur7XwHepI{$xFD95w{{JI@QJbkGqj-df6_+!+oZW*>yHLzoC!C`u+Ltc6Urv{_I<($%XmA#*>nsa?Q~% z-l8!5*@lIUHZ=jlz`R3*lphN6#3bL`CZe*!{YkYZfkA*`O8(kHBjnztM9{hpIG~?q0zd!R%VEB#dDExN!Qd>@Oji8bs zS3M>ZwWA!FnI3^a*erp2|3?ojjQ>;0sg|C44vr@zWCqSC`yK1vQOt$xZM|fedhi)v zK`@QVq;=eH+idM#0kv5QA(eQqc|PnKc3r?lquV@Chz7D`(n``?qm%{H%xt?<83!}q zc*0D|IqV>{n zuaTaVR(^H8I4Ho14@&}YOcSLk55O9=hWA|(r?|wLp7AGiNhQ5Wa;niB znyZQkKZN$l8QjO`>%|?_*32i2h8st`Z-v_zc@S?tXKC4NxvDtpWCV$t;S`w)kzt3& zA^Rtr=P%$VUhmD(Oi=bUBE-TWVQ1$;g^bIyblyF2NOX#oPSA$^X0cSqe$m+eByPNX zj0H^SP9h>kT+%_TBF8qieeVD6N1H*(E9%F${f+bBg5NGZrSS%CWiaFPWXGLdO+ygL z1#?;;@#ZXH21sX3&bSAbUM~y1apT`x^={T(OXP`5O-}jI*2NGXEMO~zTx zuaZ)>CP0s|?>5wkiJF;db=5gH7SyYrHgaqW>+#m8sY)(>V_q;f7b7(9vC&odHr-bL zQAJr(YoZKHSoK-6KoCP2phzDScz<$JB6C!R3N;`6iD5>@oKPptK8 z49xVoaNSB93ITTWICPr$Mn~>UUs^-HuQ1p*^e}(&QSRPEXI==7WR*C^iE3{gWbk62 zd>5=w;N?TUU2Z=j-z1cFA?5f^jcU zU?6n-_2A#FG})YWo+AG5eTE;Q6RJ8MccKxwBl90Ey6nd$a#WJy*?3u;tAWK+lW~rr ziM@cI%K?ZIMjkL!xU{pBd%mk#@YV^D#iIZwx*>fFXftU_?lR-NdJhyomDJ! z0G1&RL8AFW`H`P<6X_8P^HlC>r*B0EW3D=Z(g&e{@N8u?U;fWPOnfDo%^~DyIQTJ2`0m3%GJ>{k7Vax{ z#AdQK_f2w0eOG*d%UW}}G&Z5aGnFbY7MoEr!;4guclRy$eu9p6r&e=|lJ`F0XrV`? zDLuF^9W7R!&zSkUF?VWGuDvKPJ;Q`03Is7IdU=$~%*@j*ZTnP1W~@NFxH&BFF7<@8 z>7CP{6QAw;2P`oME=JgQ{_$-kBJx9yku>`mBMC)2+fB10SUa!e!g^>lr|xumaOXGf z9O|4WL)XDL@@@)w4>VLb&3i2dxGf?9MUU$^De0U2BdXCP2$4roE4}KzfD_+`@XK-%+0XVA0!Cxk|K*M|y@D}Wv5Z@%2>maNv1K5M&k{80SV#O|}eQBJ_KPCwo@NTz8= z^x9qf;KI2&j$E7^wFsWGHmu@Lv~Ne5nMWsGVWn%!iiN$&REz*j?TTpn?a7Zt8vYDPL zUooVX@`aUdE!Z6+%UCy6E0E1#Snt8hwN1?WbI?PbEv(nP`I~0wY7#M5I3pEIWBv<3 z67!hzfMw9z`hMrL((t?n4@DBVMF8n_jygh3b-eblspFWjS zCWS)>VkLTdsz~9pj+X8b1L!fOa4~H&0A{@nhGIYelNTwC&%H=a?}Jy%=+)Y|EqZGY zG;vz3xvDljmeJ5!bw`);L+iFDG@1Tb0*h&qGoj$JH-YoobLKSX;FIXfCgRD}+n)_} zYl2`fgI>@wj=OfZFSJ;PqvJd{7yIqa02Wq^!}Uj@wr2$r{(T;U_&g3m-M(XvYfm&q zW{QFFCUb2jj3BHl#-jG1oeKoRkKb-};q|ck>$D#-Qg2A=*7mMFYwb`I zCbiXubPX%%fR5Pc*#WWs0atM4>k9n+(=5#)!|DqWkx==@1q(8^E>@t2lfk+J4}sSg z{d2@48p$lRE31B9GKu0RfJ6iln{|8Rb#9(c?L97T`g1|6fg2VZXDNZX@++(0-aZ3! zLh8wHKGn9Wr+}9V9#39G`RK%5^VcES3uk2lBC#>H9ISb8>o$>(=Vg(3$q7C?6A@;W z`i8DbU^S9Bt;j=^c7*A-=S{_4zFquxWpI{Pi@&7Z+ZHabE-f`lA8$ID`XKZ}i3Tt~ zf$9gLG2$}hlroyO6ZkJ(WOM+(A}T@<{!$KM-uWNL!vF5R|9c0Fudf9ROV@8$$p_Pf zL^~mi-A)sPM%UsIR!qp!Lb~?8-?WyDkz<%Wol^lISJPx#s020<6E02A_nOG5>U1m{ z?z=>TQirrSbxH{m(-KyDdqS+L7Q}e5Agz*-p${b{S`+Q_)Po^u-ozDNZk>TEP8jc( zA>^Ea6!x^w3vB#ONZmypa4RAV^O5`Z8GBNex)6!K00Q>W7Z9UQ-Eo@oM(t!T@+swd zQzNq756$|j9?G$*rT1c-X@qdTQoSQN2j}wR>W;n67+Im5)k>G7vh$gKNAsFF6+M>y zP-iDwc2sS6??(5s_{}g23Jf4bWDuBOlO~ndZ)EbPYcJNm+Ta~m+_t#;LhbVp3|v$C z+1b2GShc~_g2Vwx#pPEFUKrWvwQxYk;eYhU&1b!H<1GwF?4t*|ahXgy3P)cQMPR`QMb*hE|qpg}IKLH_=fMk2i&uy0YKStMdFCEaqm1?S zHqbyXFpF)d4@5ul&$wk+^FH2>NgWtSlTc^kCRHyq{QTJR)Y9c|rJIu=dBBZJ)s9I2 zW$EieBuX)?U1WqmbfN6xRoIOghof(AvD=4$MQV4Dmp}BCF;*%sJC|mV-wSZo4=Ji2 zUzny!cVb2}!JgcffD2#!vI)BemL+%+J0QQUy9;1T)(#t^ygyD-AwB@Lb^LC$X*MPx zgK21zD-ad1UII6mUO1ywxcN9tfaAW!yqE8pQ2b%Gse3JcJYJyk#G6tqT~qml+c&@D zdRPu{31%$C{e4$wFe2P3Y9*(X8k`dmUVgR4m(khzc0Wd34an!IN!*7c8RLP3i?Jf1 zMB0$ZIjbLFW;w8Esb1~jF>F3if=^;}mJjOwNCH+MKO!Ka-j#muh4%?rItrO_0qvDZ zqu{Ry>N7Bf2LEMkvOk(a?AW@i*F5jeT}Gd5J8*8;FOSBm1MO|caBZY~S4+B-lq9&I zI))n(3bIBi0~5NnYqLY$mRx>faah)>C%x7aECT^^l&pO+JHk8ZQfx!%Ra!aXlfJse zV6;Tj{9c2c!Ch9KjjmUZESpwcjFRvmKI?jsnR_YT{X5h0<#zMHcoN!&3^>g;Jx9Bi z2^v*M61mK;L=P?>DF@!S8CF)7w9h%{m$QlN#7H?C!tQBj3>UbgRny3l$p~0jz*>;c z7sD)J)iV)^B)`Rk8Jm;c6_o^%BzqR*oaPrJwPEmBXwhhx6{0nXtqT);37WBKa*mRS z(xX$T&Wj27qMFmiy`(0mpG3vJJ_u%k4)b?Mh*2vJuW#$W`(X1#Cgo4-HoL0ysay~YTJ)VEc~)z$SkB@tR0f6%TkP)BLP>l*YD zCunzCSoY~^3vmh8kHb`$U{vj_!X5!3`Sb|n`>`bS=2m2H3An@-waH&$0jtU;ZNj4$9!V5!2nV4Tof>u9#4Xx5Plo)cOP!_D;S9~&zQJN39t%bSTK-|-B z7uoX_*J1~3t{QLFQ7ql}^4a1%I6blUx-=+HYU$;*x(*NavYkqG7#(YO<-iL9itI5Y zGG-{3Gb%_s4e@0}*najD1dltc^STylvQfv?G#1W&;xA*6?Qj?op+>1Q zDYYkN^{{Eyemh1N#I7D*K%YE@jixt@VWn!zEKdbDbcpO>6gk1WvHb1!;~xk_m5J(=RXf0nxtVeV z`j3_^Jc-e%F`4 zb=VS@6|<@%w_BN&*W}-hCCYexJxFLlzuxC`Ndw^>tFv&ZYV(m}6mI@8dC5hV(1Ew% z8W_;L`%o1xRXi#V^Xp1R!k7>NaB@o7E5)t!kD>vPz)S&-q|JDk11knv=8ehtVwlV*+YZLPmwq% z%*8Hq9q%INn_0E67&InWE(Q_kL`d?2O8eT2GxPbqft^9DdH<%AT!Z_mI0O!$@qJNm zM`El401#Dr;vw)NNxdh&NWV>fNRc0O+6$PxD+@~Dj_B9V&>Rn|j`SE>20&wy`Tzj! zyKL*9Gc1zVFNT+9NUB?E4W`s@g}u$e)?xCFRVwvOPto8Gl5MP)6IF^BkUy7e$7DRg z{0M?fK+}Y2J$W(VfK{O@t^=JU1}oPW62MypF<^Bj2{9uOjWdcqzvux(iCH7{@SyhV zk8tD&xq5iOyX4hZ6nKj(f};4lJg{=b8KsirA2i;kPbwX075MmTE*QM8zBf=Q?F1MI zPl6w6!#T{;GaBoC>_g}%S9Ptfw`y^;9lNCT6jJq65o{$g_cf0h&5P&20UiidP<hTO!Bx+0TqppGpg2DitoQ5yLO>Zy2bnv9{6m-MiyN}K02gP zB#Cz`_!*5t_N`3;2_@COYpA+SY@|>}ib`dMB8sKA<+I|~7jva&suQ%q$^#AsZOeyA zsoEHXM9mlh4XE)Q_z~{H}8E1 zcG1LKa7iQLTIRoDOYX4Yo)9h^HTsWQS zzKEb`zY=$@+$^o+A^kX$_I5LyJ1++nouAd3CS#2`Jd9ZvN(|^9uz@-U%fUTu&5V;F z^9t-ziQsomiHUy3n9aQ2v*40uVs-GEm}9X9GaL{DVd(RjVOF-Blzyp@JIw!ZO2J8z zqAwiRR;^;rfkv{+X1tn&<85FHA(m6f*Fx5fAxA}#J4ybY#X3~$U{mR3^dPdBl%+>) z7}Oey#IH!?)e{$AU2Q2x7>Z-X4*2Cr_?a6GZ6n^!r zVIK(|i<=b|!R-gI!Cl(=;gg6fi?Cg@b#FPyhBOh8+(T`Arcrsj=Aco^X#J|?;{w8W z5TQB6&(Rs!z7FuBQhAsQ+dU<%X2J>+@qif)`YI8T@izae<~?S-F(IgsOn{(|06kaCMtWJKgr3((Y7^Wv7O zIe?x{>x#SUZFw$08=1Uf9RY_NdKt-u&&#+mR3Z{zXEzi!n zFPl)lcJDLeMi<4EsyEF&sh6kjG?PCeE*&*o9a!}+ShpDLrO|uN_PWId!#tTt-Zb4Y zGgjR9q=|oezDjGE;+hDG6rmJ8kGghF7ythA6td&?ubk2e0Up*U)tGQd$8Qw}^5{Fit~gzd)H zvxtv6PZ4<%nZf)16XonhpkA>ihs0d6)vPlq@i!!TXC2Zp8BTQkm!J55cOMJA!C74Y z%H?2;l|Ehf7eI1syxZGQnB)>n5|aMSRiCh%y>fI`B6-vK~QKPx}q%M*gfN&uc4B1Xc0 zN}$A(Sfqhga$W>nv*uJI^l5~4=cHuaP`qt4jIUY9(2!;%_#`hav_V}qCx&^>iGt^k z$@nriuc}mZYDekGO>DZy*#&!uNO%*DIr%C?c{H^A1wUsD{qMf1X&S*4k(cj0yNOk$ zrB#767`TDBOVtguvY}c|CGBhBnWT+I1yE=*Pn=3a7K1|Y=NViKQ))c|$~%Y>Y_j}v zl-gd)e`P@x?o2O51l~bNKmGzXkPuLHJ|%fRqj-^)2qBvm8EZT4#Yn~Y4>4HL-HeuE z&OiXiJ-f@vyf2!>CVj)a*75CpIXT6(x{7@5@5m#1`b#R5`-#wizW_tTA1!`WL!wb{LEzrl(W3nV~`2M_KJ0RjZqU^9ecwyGo!@Xya*vI`-ayVn?(hfOR`V=SD9 zBLH6Xzg~UobV}^C4+qI9h>gTHR2kdO{+i znpn9}&;L-Nbd0E0O&fXh}Z`f}x zs)kqVJ(iCdp8i3SV2*S01Cpv=+lJt&9(V~wyIO;gtZmxGeJNKnaK$u3U8+M{Ew8)r z8u?AjY}>#lRr=qR=#_T~4)r9yHkYo2(QR9UEvgP7T&vyy#(4|8Ls4eonPB|sH$Tdn zePDr~D4W22S$J6+hbaZ$LFti9Xc6yP$e#qoyWY4+VRrUo67D2UcG-;r!aPK@TPKY- zMV%#8jPozPK9tIk=+<=*72(nKP^_nkxA%%|@W-dIJ}&vOk`q};?_n1)B;GgG{vw8& zGSqN|YW}+oa?bp;HRV)^opc)~e%Fpyf0ia6oh0P?iU*$UYETR&ny=FnWD7*M4+3Ds zGPDap2HPpx&dsLve#@0S4wutWiWTL(bp$>SdjNV^%^h2!G%bQPYz~{+LJ$=x5e=(Y z%Jb^YfT!sX!fX29`Hmm*wkMJj@P66}7D>*rl~d5>Ozwe|8zd361;<6Nvf+ayec*L9 z;y;zsTl8;D9Ajz%_Qp0lWU$53ia+uhj?#vD=yvgkov*X4SsHrz5mRWY`BQfnhSP)5 zLMM^vI4?O0#|Ae8kdD7TeoW;3AChMn;Zw124kP9=T6)&uI7xHT9;35_PKl_RU`zVM z-tqy}*RRU_^6hPi6XsdI=1B7{rj=iw@&?>TSK92bS<=k(6)wqBs|8+PkZkl)xB!R* zJ3nuACqzVt9VXf1lvoJ47KNy5d(;zh4D2e3qsDeB=Hh6 z(d41A>P`;%Del2Pvj!W+4f`L=&di$IC_7Wv6MB7kM?8wv#;<5=$% z&m3uSl`)<7>ib!3wLc?)It_8qa`e-J2oiDFA0}m(KWi3~8NKeFv-h79Vx7xm|3#g5 z;!<sS)0`;}Wfl@r9@|51v_9gR^yc%h)hu@>4-$Uvo^~c0*>YXh(x;1<_nK@K4Cm%dw`xsrMx@(K0=JVBt-HIde{pkRWoIuj5h%9WU+2mp9NAgb<1%HRK=4jSHsL1nqB zdloQ!FX8;-XuGx5hpc#4i)O>D)QT~QZgFg;xTZLNy*O zK3p_dI2BGxU2f(BTzl>CVOGOHNY|ph2m}re=`zMnUP(GRtJgoG8 zbkuy#a%tn_;BY|5>9p^W#)*#faOPm3v%8nS@m} zv}dXafl4IN1Q{Q!QJCfs!?hQrSj6bRTGS$Xd0d~oiTWUeZQeQ9Tj7dp&QRS!f=z(} zQ>qRTN8tZ^e}JVX)8Cb(>1h-*aBoINW~XH1+_*n0sQrcqA8i*Ad%Kb~l7SAzK-4XC z7m6?XqxAm;{5bt@NgNe*p&>Jq?1E2W6fY3SPyL%pr6~Rf5iCra=Hy^uH@J;Lz0QluG5Po_(Th7%f{-dnsG~e#r zeslNcP0^vtfbcc*DkcpGuHjU7_9H(xlr+8PDf2%uF%C>vwd9SR%r=-4(K7iGOJU3$jdh&(IcssDQ;)=`IZtPMlH; zv$mPso0wlJ;t9CpC@6Wa7Pe9@@pUkf_kuzP)#H_Si+${@p;ZGGbYyuN64%YIR1Hmb z*1$%&n`eF(85&*lrJpa9LXKE%{uljvWRJJwZ`~?4rw0mGZIE5zHL*7BD9CwM6?_76 z6dlDXE)Q4m<&TTr4{+jr$!vQ$LUr><`3<*-PMsq7!K?9$J;*|87};-shdC50XsR2- zSZGc{;lQ7M_jw4__DPUe=gqs9U$p#k_$cBO0zm!JB~X0=+(X}YPg+?SzGM#K49udO zFLFi(-**4gA4MypJ#P_ew+*hQm!7ilEL>E#{O3Y5#&0|=c1EwOCPUJ%^6@_cKL>;; z9J4b(`gl#@@QCSS=cHeG(Q(yRqd#`5JE?R-!|PK*JQ$w${XuA8s)dbtr=W(qOyv-m z{Di~ib7Dpd%wK)|;2!_i=IuuI7e8!2NgKCfi^bD}oS*9_8q?+I zt@`=172OB!=8mhcm1-i^KU_FQ#fPz_m@!LPE}sARvFzd3>n5|g_l_z@40OaqM>RcN z*FPB57mIn2*OJ>Z^mLk`h5fRZX@z%K77TW=v*-Y((711)I9_B4hD} zBJf}i3OpM0QHO_R8l+ zm52MLuC7UTY`JaDV5A|;k{8MiRUY=G>g3(Rzfz$QW51GrrG19F-X@ZU6m?tkwR3-h zbW9;Dw4bl*Ds-?WwTHz`R+e8NIb(JU$|7os1z>OcqlO(eJD;^ZLd(c!b?pm;aOV=d z3})#GXpn4~RkxaId;rT=?59NK8?~>!h1i%4b^o1 z*4iy|TdQ~PO7J`w>5epz_^y!n3n+@Aj|^dc0$c+G;o>Yt*7T;G`S>RIKHrA+bk;6j zpi@2?1dSGJ7Nx9YdSU1dG&&hIt^ufU9s>MYulHkeW zt+V0Tn4`qMVzsPyzYgbr;j!jgqUcih7uzdg7=iuc`5%ll_D$joK|boT`@Jp%DkUCN zTYQ&)AV_+#Z*&=?;V1=i`-6U$wwJP6TQ3$>iPa4$Ik0U-B0NwAPS@iP!7X&q>6;wQ!A_x9Nk) zap;VbgK0sE%9!ZD3%kY@n)fukB~g?K<>Q1Mh*4||Ys?TT?N)7i+2h;@Q{rdrf8tme z>CC>~w&YT*>b|3!la1tgBm?o)fpq-}ShDWXPW!yDpkZZ%dCl3>sl*}Pw zJt@T~g)3a*MDghQ@m@Sciv2^r9{%`)M!|nrAB+xEM6=CHLhS>okA;q{F+$En#Rd}{B%H8qwjD9NzZspLeRFScdaP(h=uK&g=XAPG#uZ6Y zBv}dW3VtmNGRS!rL}DVfBymBEG#(Ypi2x8>e1SF57y52|R=9s#nB&~q*r=uT@T0Xv zV6%VYipOE!*|-cC(nyjQ&_kwVCQpjbGF znwCGWJ?C}c`KP`}Q?9Zgfgop>Xi3eGRQM$+YkFUi^T*Tdyok!Z)}Fny-oQq5RM9h; zSu-%!I0JYl=k*p)57HD9hw0<*s;neA@9fcn%&XB?lr6r(yApLdDHv(T$^~m3rgyRX zLz6QC6fu^4#<%wf|HGB9JH#Xef0AxJ|Ik^6cSW3~O3_xoo?EBZzz7Di)o-HjDYZC3 zN0pMUf=?P_^VGHMeRxHJ3bVbBO48Xp^o=@}Z1jWH|KS-NBg_E=%8a1GcCo2h2cdCe$hzdSoLo!J z>!Yc29(!wEnOn6$@6 zCFEHarK)|eS=i&rbS$kUkE z^1h5kvo&1_^Xx`ZaVzyNxs>-*8K4=Tm6}qDKC&z|ru#KcC-|>=O|eSZLdCfqc>M!P zbNXPEJfie8D(|N?AdjZlIi90$?sF~Re3=s|!hU?G5~Lh5%X)2`oe-BT^eU&)1^(e{ zaF1dV`4oPlK_UwLv0xj_N9uQ|c{lk{(y1ltG%4AS>L6L?ooA;#;+3z1bPWlsi4&$dS=^~8h@?q^rS@oMmj% zw0wOK9nM-mq5|aOlGY#TZid_meM{>?BD6(M{zYVgqTI0}s=ypuURJ%G?Kk;X&B{AJ zGu&WR(l(W|3OcJyl-|}ZcQm$VmJpLAglNWH(Bp#_m7PF`htr9q>8%=SE_H#^w=Frp zN__v`@V`@kL_4@%4vCeC0MezeBC{?Yl+fY0&PV_tdI0m;rkdr-m8Fv716_-Xm%$r?r=XH8a;mc#hC7j~f z6Zf%+i$k-`dG@=+Nk)sY@12xwjv=2w5&0rvJu!h8K^I^Fkw@lZ&7H(s|ma$8L#cdBj;CNysw;;-PO`~+zvqNZnTAZ%||&SizPp!ci^_y2qWaBpJIF^V>j?b<|gjuS%Z-i z`wH^aekTc;9!T}nR4iHG)P z4KCLkmao-3V7q$;T_n?iTEs${Z3%RGqBC_lM&P(b1WxitP0GnXD4_J?_g|Fn0uZbz90`t1U}n-;4K6<>0}H-922EXf zrq@W8%D2#I1q91Uo_*>?Opp*Sg}=>#c+EKf3lL09wKi}uaf>A&37ca|3C$ThGp>WY= zx>uf!R8uXjL0gqNp@~+)2PEi2j0wE^8{v0)Kmq_CRKpt`@>6lTMW)iJnycZX_;qQ{ zfy$7WiIN}5$0v|-!%`4&xie6XU>QJ*MJbTI0w4B<2D%R|3b$7^$SaIfJrVPv_fW7z^&$N(>aA)^6y?JP)a^sY|I<XnEYl6$8eox6PSxT$^B=wX zT5WX#DG>ceJ_@=3jq(5XUQ>u2eCF0Sa#Q9%k@h0JvX-U|Vrlh$Ch0jrrG8?gpeA{y z2{)#;lKd?OcE~=8pB>b`OXm>ven~^D;)GL ziPdmk0Us914yIimO+M(+(-H``%(Uunv0(hft8ZdJ6l0eJJ5OyNgB^k?wMn)KAG_oI zl6i;r2d^fwpZmeTNkllOm@+16q?;^+ z#hRlu%{f9q!vwd*M@s*1dypvb3rD4a;XHTFqnok9F+~NjMa2F5xio&JSe^GAoUJT{%l6q_hM0be_X#z0%$v+z!v?9)zwkyzG}@>)h%BC@7s+wl`Y9pb;^EX}w`r?l z?5>*;v9&$HBlq3=u`f*IA;++P0cKne$6P4(pYCbR)R;PA&zbq#@;vL0pm3wjgDvyPg{XCpImSkzM;sxM?xS4mLQ>ukfT1p{yitI z%4!u9y!+UaxzqBq#OYO&mO_+rUSk6t^e^Y`WVdy4$Cpmu!bB_r#1RP_Rqd`or9HWo zYqWHikRlVRd7bK6^;JSSWLSG~Pk>$l;s^D&eNb>4lP3`eCOc!mAmD;nOTW;>XE(G|)JufoTy?R5nKOsk8@MSftQbo#@r;K{Xs_E!L zRkJyNiaKZkmnaT2SkesFBe7#@RwMM2eO>VU#+5hn6MVSs`jiv*>_gy|93rLY*0siG zV|euI(exWoas5qew70KDEj&8&)vy}tL|WuP*yTr&!%XDl!VTR{s;BS5^9D;IBx{F< zbwOux{SI*n>xfG(0tZepMiNzfi^614M_e-f^s7z+*N&;=1){ABRu2bHrqv+qH6ZgA zTY2Op$y6F72dtaWT!$c9hV9MhbC>`^IxpW?Sd$7lSIeWn&y5v8iZ#}Bi;$6OXdyEG zHc53h?%+3QH+c#^dM{F-D(5Z-8Bm2~`K?c$%!H?}Feb~&)kH^0FN?q`r^X=?9!uY$ zKf6}F9yl(Lc8@E@9CwdaENyI;j<^}%@_aO?Q9JWWxR(o!f$$b~=yy9?-#dgR3Z)Nn z@nSkX&5`gV+Dh$o4(#Cb2{nOF4NKsYWC~pBip{FjY&}NcWwt@2bDoJt$*3*PV~ZF2 zkq7`%R3rn*6U1jESn3YM=M?B$XSDu^I`*&b8BIU%gTXD|cXBHN!WGdp3^d}W&mPylT+j_o$ zwBsRuodK7kWE!B`Ee{ROxvcB7=`G6SM{X3^!CENGO`7KdSSG4lmIy?qYK+I}ABY>v zuGIjJQNJw5GVMoVg{Ix^pJWAdX3f+?1U?O>Q5;J@>{0v}1M`z;GPF3@8wJD&Bmqzb z2Q+eD@TE*%&=arT4POvxrr_=LU7))ootI^d09kaNhi02Q8p;9B7El#~$$|bOl_7m& zM6uCe;JT@L#mx06?Jv1I86Q2xP}#9S!$k6^sk*#WiIPzS0n%SH#EXz^&kHDj%O5R6 z7dIF?D^Hx$%}g$2a-sM8*&*1uG)#w^#3Yd}i8~O|P0FVJWKEy@=MgWt{=<|w{fQo* zel@h_*0Gp#qamV`teFAf`++-gLl+Y0s2;h>$0_N67{Uyii0rh&WxkNrt#sekSnwJT zSX}noW(LSRk7v?Ud`vd9J4tNZ*}aD>N{-+!4;z65P~!7N3!;}CURCYc)a_HaTFX4^ zYr-Qg$qmvy{Toz)!HZB{@B0~T98XM!F+jh9YLN-5#L?1OB1$E`co`_>IxO@{2KE!W zDR!*rbK7t;^{0>pDM_NO^qbzYK zt7b~_Fl%N>t@6HNgx57WTrS^{X-rJ!aw4^Ati{3VlOO9Hl=S(9dTIT91ku}F|$2er(6#;4vn$4WDKIHd$+H^!b-(Z#sNGje%Hud1;Jn{j zUP#7+>`76AVS8S6P&2Eho;8C!-Z_rtczx`gLKcXCZP7bR^z#yV0){XNm~c3!F(E(q zS+qAFTXER?dvu=}heehoIr=>?7xsroh$E#pV&^klT}E_ikOVM1?L-;|GmM&oaO)FD zWNh-Plk0Na{}>MC;@79W@7l1Td;Q%}0O6e#5Fs(e`(-;Na*4j1AVPcH_6=2<+Hn38$wga(&BN(<#0;F9V<~jb4Uf54)wp^BD6+Ju6j?1## zToJY`0LDRoGEf;pArc0xt=5J4`r~rd^@xm790%K0GU``X@F}aSjBJTZW;3`kKeLTWeHG3c zaB`kmJ5>6bTtPvv3lGqfhoNxBc4G2+JrN-n)Kk^uGTP^B2T67KnLiQ~=Wt}*tl%!7wX~hgi3L-0Vunco z*f1j4!c-2Si_&YiiH7z4dLiMN+|>O1n0t`#)^Z$`JA{Tx(&}`1gX|#&+QjC99#`?)p zY*SKCX~I9bZR4~aIS<-W*r`~bh-8pd?}S`>2uzlrQXCiJv%KUyYb3nX?%DFi`Cr>U zCP^7se%0_VV9`QjQ@m+Mv)s72S+^eD%z#WfD}WSY>Q;>nHJ6O5iO2)@mSAV-;6qOT zv98d^K6C5$M$^=-R86h1Y-DUioL*GR>F$wE;asjK06=j^1dG9H>8@f_Xif5XLCJ6+ zW8wR2iC|8VEu?yl72$jNq`;H<>j9m$1CzGMo^Eeye3&s|af#Z-3-*SxlRz!Z(>0e# zV1D@|bGCS9KShSbfkFHd1>P=&og+havEAEl1%2rwLhX&MksJuVexxNU?M(h#S^%9= zcfDeb^V!{y0>u(Ps&5EVj2@Ry4O?TvvTJbgGmif6|O>|7n10 z-q4RM@c`<^Z~KVe{G=-{>P64GZ2I~_TS8Zr&$I8{gmI>3Lo@y^V|rVJnD$OJ zNvmST>|Rn}3%!RKi*9)h`#&7D1(c3>(8#8mqEiveKBqv%8alT@VA7yDYYMTRHdy6h zZg!r_``mF;$}3Ty)d2mfASB_4>)Ef=ww2SWxI2qUOG+KbK6qy|CJm}LQLQtspX6VZ z9EFkcC+}91rY?F`F{GXme09W3C|xo7K4nyew&|0|N{W-s<=wDRtysX9irV~Hc(s1> z8#e3YF|e`j+riJ<0zC!)bx*PFB>vs$7cw4izA)^41*FOfyeHS9(AJhA zgz~|oNB0%N6lfKW7@qW5{MJ0i=PfAUo~9)883yRRcF(k@n(U{KSHI*j_H1FMd)^tT?hCdDqLiYcofe|r4^-BZo8AQ+=+q)#pGtGwA;kLyr@)v+qCpz zVc813K|cZO#tW~czn-ARPJ>ro zQlG7Y-gQuo_0wyf!nbvxB7egN>zIlD1td|wR@}QS{UW-xcfKHhe=h{%jD4HS) z{}Y)+W^KV=Wg{u0znSYO#w8&La*9Bc%x{3HePr-GS?q$C!HyE+Z&B?bgzKw6HeSka z)Wf^?#TsvSn`c+&U9*x(Ibf4r-n{0$`FIJ^u44p<5W$z0AXsQID{-T{sVwrdQEF1R zcl2~WF@OS6j&ESfrW$zv{aTlgL&C5V&;Nwa61zOu{$Vd&Dwjk#mbnGnSs(YaLihKs zRiNXq-Q+TROcW>9M@}9Z zNhVbN;vZ=+q>_Xl=dgwohf{KJC{P3?`Rq3fPE*dToP#s3Nbv35G^^!O=RbZ7lWn2< z4e`(qYSLVoEn=HOlEH+iry%0ne*wYpVVV^c;4s=PwL)9oc|yF~<9Xvaf4Uu3qILvW z?oqDgP?R|?7!xZ^prRMKETBumIYk(*_Qm&WeVMnmpjw>KfCayGni_U%f^}HcaYO7I zjhT-07us?6AVNNnt{-=Req!o%HtjJgK>K>i9b3$pyD)2+**3C7m@rnC)p)Bu2IL}q zR1M^Sls`+5C-OZ(0hmaXF&rb7!%UiAZ~N(eimxD_$a_^!CZ@?O2)6qqM<$_#NFf-2 zyP}=&fLbv!31C9#%O5+N;Ci6|m5)9SGW*9`79vu^mfOS9D^K*q+Ofj`1UvY_MxHa^ zeJ@h`e+_A*mdO&IpSzTy6MkIB(%PA6fIb#-J&lCzW(^jmaH|Xxjc!uo&*cA(680I$ zN=t&Lxp3Qzb(%OASMTp0%j!=Hc^hyKo-(2MswYdG`&JQ)GXC?_v5%Av0j*C1!r*%xkJ5*=gHrB@gc zdw@O=xQ{0?%CeO!x+{(QQqm^-O8RVXc;j?|nD<`f9~5HgGg6J_T~Zt)5(tRl8u;le zYBz}I;gAKtYNq?xOU=JRHX@cf^gWLg$~q#=#VF!;P1ty_fiwoBUJ(mEa#?Av`_X*9 z!Zyme@=Hms?Zrn*d&USDJre~{YXDmj_11s>PmvsX6u;Y{t8}HQrlVUN zb|E+RvXWQa9QQ~lmua>L6UeA{?K)3Ur*1r~9BwY@na?=fe~dLo+B9bkN9_Z|v&`wm zyIBA*c=g(A*XSxFMUsb5*fqBX%O5~NAitL)AOLt*G&;v@!Mg-xr)TJS?eZjBo&PI3 zL!{Da+=dqI9tF9~G$)=x(fdfa5{QvyY~KUWvcgw!n&&C{u96R~hyMl4{!G5!ICQqp zPufIpwU=%NjE9S#vbb>M@))ut6{fHU0}?!(N*yL^4PtQOvfr`9sx@kZS6T{k4^vX2 zt-glr$auznoGiaDZxyIR+#4qL{cSMY)BKl`}1>;t)Vh9ljc zBD#GcO?l8`5rQ*u>bDWq1V8Y3S9;*k%R(EMMtPGd^Q0VQS=9+0xk{y$4;cYGv_ECU zc>W62y#XaOeb(?6$Pj>06Ai!!#3X!Ma^x%MRPx^0oD}SGu@7%Bj|!;yD4@H7GUguh z4$0>YMwPFAh7zJ8D*3jV$s_#lCvASKFAd_-b5gx0*Ar@-8mllop1t#R-ceF5gg?_* z@1*3e~h)>>d`mKdzB67Erb#SNgLrbWb9kJy@Va^%xlJ-J>%ZTT5mzyvTcNiMUmDpJBbK^ znd)60c9_gIz((Q#-uRLaIcBtuthj9YTqdn(`%Zy7v8+f7$YCes$-6W2kr5FF`{J1A3^Tqcry${#$f9iKg&w613CFT;2 zKK$pc)RA=_m>ymFF;&)!9!QVIFJ*yYQ)DURO`-@6#hq1gj@8eCF4jj(S725gpHYI*)~nv%-KvE zf|@C{ycw7eF8WQ;1^O6|^AjjH;5eF_7o`^@TMV#8CB=%MVKt=&%jf+COvth>)aXHNG@+R!`sAJiEX`v&#cDd7Y)`JWs809Qmb)Ut&rRoejZHcPdsJ(BH2s+i?tZz_32f|a z>dWF?!vL5%W$(WLTG`g@2Mp78Ml7N!;&ug});$`>BF_KGo_y!4)q>+J01e{(nG-+* zX#}r%rQF41uN@&HHyZBG`?qb0mt$rRr`Zb4(t1~F4r~oknibq2JEWce_E=JH_hk0i zM1bNe>OU6%#`_ABM(R6fnWDBSQN@`_ks;?+kDy-2O$-y^_}>9vd_2cxG;mZ)dnZIhYZU4eK4Q-Fg2UBoMi>`#geJ z=NM&@Ja=>L^VzJsJ7vsL3v9!j{6?1ZBaYkNlBLH{qbG>^2Yt6>h7}Mo4v8_QP>koG zu38Y8d=&7mm+7H6#cl{w$Xc;fu(XH-}azQw>GNmt5XiSh8qRwqX2W&o=3**Jd!$WJk$ z!~MVs&Zj9+Jf(|@@?d1;>WVprb4FBirRSBBf)fDvQ@WK4%xGBbh*(nPhz`}={m>g_3# zxzp?x<$bTG{mwYwK9UH4JhN4Nny=+T&&9b#lTc@2Ou=UW$w8RqI~BtcEqXtBv+4YW z$WzV810yO2TJ%M!Sl|ncf<>K)k=%nsiH19VkuS-@xqMlPt8C`1(Y@iLKZK6;>eRIl z<1Vtxb&yzH{@}zMraO41#C|y8eWqhy>JufROt{>6>yc#SH{S56AZ$F5Q-g7N-F4cr zxIy>)gj@mRJhlT~-znv%If~PNi{dUk<%x>Z6Dv%}ZU0hi3VUU*RHkd_?C7*-EqDEo zX#s&ggZF!F2^Y}`;wc|lQFs3ZzxUtdw}K{~3cYzzH>QolJZdj-{9UU<&q*c|_|Y{L ztb#fMOo|i6W8~9Vl3;Wf5atA~R7_vOd8UdmO(y=>Gji|{6KYuc5@rAj~pp1W7{LP!vmWh5RiM4+~{>Mc#SqdJL z{9h00`@~0g-zK(^R^v_d_Ve=LubJyop&-OP2BpG6A>QVXHZwwKpn+zuS%2WoO);R+ z*#uD*shr|OMhf|T1Zfb>xXA{adyV8=dg`6dc;1D#CvUA_RkR4#IbFp~-Qk)y=5_<) z#&DL1f`0)q!8FDT&>>g-b>@tNui-iom2H#goC!;oM{dzlJ*Q}5=T_Ok*eLKUV>y}n%} zKiMWnPsri2a%AbW8NM&F24l_^ZDYS;v2syGFlXzy4vQ8s@m8|(6rUZDo>_j8WcN)@FB39yl=M9HUUni^;{ z^UFboU%wC&=%QUf+$2x-hD(-?%jIy3=P+1z!Ma;*&hrIiGo{JKo2bo+fd_SVLJhg8 zV~`+OfIteqbfe|fz6uh+oS|{g}$ix&*Gx!v^~h*1BMvW@o`-_^-_Ej^&Y*PE0ckF@nJ)&g#51Iz!c`ycYx+$4ByZ2*uW}rvEmW^?{ zfN&O=cHW=Z@W<0i<4a?WiEnc2KVofsgs)7SJR|gZ5{AAZdMY{7D(D|zYKtZmwjIEf zJZlPZQKwF_JrcU_MXwrNycohxvzv#Ztvjck7%>wGR^nCf>%>BB0K`E)K|LeHhl)hG z^G3VSXDsalSBA&+0q+~-prXZN#p1c0eeps4D)4StPuuwkYtfdD1j1&o7W zzv!ykU=r`$5>5BnA}n+n4-OP?fA*)>=AVQsdnDp*mR+BTG3REvFqtn6&lEmIbJO9( z*aLZv4zN|bmECADs@ts3d-p73_~dDCl}kAfC_y3>=QyWHk>mz(k%#M>uzgT?fd|I< z$!1@z7t8KGB+-7TV#y#G_a?2h$WI~CR(rO5-?ecCf5bzMwz06OoH704aH1;!zm)lv zfM*dK@bL(%1?#HBheda{6h2emUEd}bkFDMNEf3qM;kp9JE@nhbB{7uj!AGFR&qfDs zFSUhC+umqJ{qWS`P4Nhxn}=S;j<1zH;nV#P$Ip_wK?hC8P^6f(5f4u)wt-pKhm1Mjh+BAKm{TxjrW%~??s;OUD$naK31Bv$AAlL zX8!WL=!Lx&z>s2&)W8MUL${P2%&o zUC8sLnn2a8qMKr?3AZcNu{yn6y0PHY4sm>*>T3P$KKnqHu845a;-FB4xxlg@(w5~< z#48wF8|Cq7_&uLHWt(MsINUY;Vc|xbQpcT@nQ29!mW|YSee zFQ2cdqh1PkXQ0qfV)L|^)n0B%jm3exfMaKatg$tImLx2ZO87q}<)76!Br#{<_i1H#vc^~D1Nos=t+ua-j}rPgr1G*~ zB4cF#;uVI?_%0!3&afFl@`A2n#NUMl^Ay=V0v|)KsT=qTv5Vk}kF}DWImCnZ+4Cy< zBKzkY^rXNWBZC>af7)O~FicJGL}puP-#gzVxq2tYDVr^;ihbb>FE(pOn@J_cxjhr& z>@zt5ko+GCR?|dS*w`^D6z-U^NrVfuo%OkrlHL(Tx=L@H(Z}-Y9(NB@OpVtc9e2^u z_-Mv35|W+Sb$cn0X?5-VAI{z~sI4yy_YE$^NpKAif);m4fZ$MEiaQi3UT7)BB{&3^ z;_hy3ad#c4n`vwby#z=XrhwnhueI>D(T( zDqhLI{pN3a7&Jho;bUsp`;z>ooe9zFUDrPg82obyY9na|E} zGM3vvs32LX^wnuln#2e>H%Gq@w2KU9Q;O1$lRZWuYG>t)*h%0^vOe{5>NA_?iMsy* z;3=Mgw_$->f8mQ?xd$b12Z%?*9GuxDC2!6zF>V3)5v+c{^{2Pb)qnRHl0;ci}D zNn`vE>vg$tgmT)9p zDiIaRlX&fCuy=MNb+JdULY~HOOaR50m|%L6Fu_vmB=+hHCM8fiqRh};^6gCiNS!?4 zH~2A)90nYeEu)~;2~v&|f4wdk`|B>(nj{SHbHGw|or~80Ae%2-wR&uwXWE)k=b}Z$ zoz=X0bLTsq>D?q4Tr+>L&J`-Knj4ZexCEa(ki$xwy;cp78ZJe>EAw!WB)sYDD~$6$ z*Ol?DW=7!(JY{G=3)bB~uOCtRkR~{rxvm;?9-F9Yh$nfBmCM`N+CR76Y|@he7mSXH zYZ6&&`NGPvl8M+QVX%^0T;c@bqdk{)vX<3ZMti50Q+CrL({SVK$C&ack|%?#PLmG)h)&|iuxX6{cNIRDK!Ym!vA4gCEp)wpiu1Y7vtF-|PpGo1aHyhF zMcgFMZ&+W|Ivs>z+SYd` zjDBX0C?nejOP`X&nv3p7Fj-EThEs0}UeWS)JhO^V4*BTH-^|M}IPzpC3-=$!Vn&V# zqzF^nr6sX)b<9CNEEpCfB?fuM3>iZkZb(PDsJ#U*zh<0k(TWLkNwSYKq-S!Z{Hi=X zf!JPB!~jVCbz_&xcwdr3{uy)z`i?GKS!yX1k2}PFcc=-7CPXlS`tcPYRp|&3ASJ|x zOfZpY8x5A!DUfy?o4AYj`AvmXko+(zQAIZgxsbG5;n*p)TZlIxvW1YOn(MzphOoe) z%*lTI-*D|eBD4Sg#hUozTCb7{Jydf41%=mQ%6LJ5_S2PHTHIUzL#jtIN;oDXi+I&gpL<;6 zk*r`M^Cb_H+$GqLo=WmBJgW|B#)AZLbr73K0z8I&86mz4f{RqnNt9&kVI@lvN1XAS zx}8={#FufJZwN;wy(7Hv)d*%Yh{(16Sb-*riN^ethBbcx2i+sqF(RjOff`rKQIgzlqJvoOVx z6-nIoFY)6hW>bPjK)3I^g_~r-&xUlENWRrPtXQTCY&-rD<$QZB5dsX5kshLb0h`kzj$K&6> zYwc<+Z`&oGJnrOR&%pWE>bk0_=Nt1eW#JqOhvuT$_Wt5Sk`u!64z>NXY)P}Efn}^Z z_3-+@V*U*_qMd-7ylk=E7v723ROp3GhlD;cjQaI%MGCP@;BbI0y|$R13Z0dyxrWq- zhIDE*gc_Ai4rZ1(C2-XIgdBd2iJ|m)hcWEbLH*$HAeJwkZs9jkeMTh$Z14u+R051G zU|aPqLUcQt_vr{m3Q$Dtb?~(^OI(?~)26Qspp83SsW#Wv7+s;@q~}){<0BJ1Ey`Ev z@IT{-$r;wNBhb}R{GIohnSu7D)cRx2K9imfg#Xj8H)P2h;+!Ass zfqN3-rCQD!4-v@f!BAqH`Yjf0Cw?$gteOcEg_?jLa9{?sV4ahfiu^t)m+EYp+;IQCz`OThPY*I(D6oTX41vtx~gv#4~ zj9xEn{*JJ@%Whz1H4p!&UFTM}3a)E)xr3s;)CWa*PZ@p3>_Zhognr-<-7WMWM;86| z2+o-$z9P|Y+Uruyt_{9oSU(|C)ht_0@VsAOY2nzUyh@iUImdy8;E)5htjTeg#F3Kj zui6FrJ2Yd>()(yK21Xn?)*-W#ud-YSPc4U3T zy|peVr&kUofxPp;G0<#PfgZ<_k3rUGE#QHDUWZVrUq71VsSiNv91|kx+9@u!_PjH7 zJ)gggtDJ_hC%uZiErNYfX6W0gvP5e0NDzR4fP$RqoB7`n@`Lu!$-P95iGcPu5^DBb zFHyNNEq;D)Y|}l_n!rstR$bHPkFx9&_DH4Jp+4!D*bd_MIj+MEpG=PyuWJ1*9X=q= z&c?_$FFDl&!wtRjB@-ko6q#UF+YkswjsF%KqR4tr+!Vq>z)a!&#Kds%2-1BHl2qL3 z8GQE?k&kLVE-h*IV5tAbFAIq<9~aPM%oe&5KnHC4lUm?}7*lQ)Kc%C|MLa?`dtd98 zX-*1M8pg4xYLtU z2oYyBnQdM0WJh8QW2hL{kg-{SS36Hp))ehKbSO8vip`6i2%Xg{P~JN|Jk($+U8qobua_38 zrPii%t`ztK8!5#O$Q->G><96N@kX9Qv?j zs6vVuD>b_0=2p^Y$;`%9@+a-&*tm${rDZjD@+^MQSZ_ZiX(Jkyabf|=i1WLor%fAq zKCue7R^P~^FNbfb?A z)tBTNt2n>Ck9|MDg2CcAg^@2z=zsDwHNxMb*Fbh^CTi!53^?8tQl;}}XEgo_$E7NGBE?zvT#)G#lhlfdg_|YK?>IKwGSzuDW(?xmwEQUi z;grDsA=m+9#G9XmzAqca5O3XBQ@DLv$28ZX1`H|NwI$cN<8x^*{Y$f+{PR{|5@C+u zLR=>MeU3X{Ql4Pk$p?9?{RtBF30=KF!aLrt9vF*MoZ6o(Mcl$&aCOgOIC#p|z1I17#US8{)$}S10e*cG0`Z67Wur4;@c^mNQlg%t#V@ z#^{(MmX%<(AM$_Prf7)ihbiE9%(WqK36vQ8~i=>W)>ALd-2z02hFSW1FoL z%@lo)SH~uk?m^yGI;CN&E{p9rOX4t`CCLp#;8f+Ike(apW=)}daQLDA7Pfb>;c&HQ zJJCx6@ULSl@UIs|rNB0AZq(5fdFxU#aO6b@shf7p$1DII1@2?SPy34>BBSfVVOixj zI#DGLl*50g6C(5CGUu9qDrfLrRW`aeYvXsjB=;FckH$lJxyH2tO$MX4-)d87FsIrU zrbQhIL^fx%WTexiDL_bdkjRTG5JgN9%WCf5Zjz_9J&5x(iHBeIPY=2D(p5*j)Y8oZ zusQJrYPFiZu_em1SS@(~J#M8{8C>DXR|m(1?^Xp8T`KqE(?0YWzpTNSYVvY#AUdzx zr`AQa3JWH>3iO>4+Ey2K2w=<`5b6r5%b?TUfA?&kqU9kM!IRW)>rBT(63-5hZx>YR z4mh{eN10eJi&6Ss95EI7>AInw5Yoh`=If4d#I7m$W*NPxT)SjY&6Z}priP)wzj|+S`pSAkCPM^rS=hF>?-X|%6znJ&B~ld)oH1xgx04F*r(~c zObVS=SB5zdCk9EEyrOS{$&F^L3{x{kn%~&xN8NE9G`{f|YRk?PD*^{NS4RMI+=BsU z`9)_;9O|k4Nnc|xCc1mEC%`UW(%99+>h`v(HxMN3g5(~!N+hz{U_7)Vmi)_c!SoJEnZ2!cYWBfya)6Xvs>zKpjUBFucf?~Cjkz)x>-hee-~H0`1e zUoTc~0o8hA>xfIzTcwhz@Y7z$dwQfY4h;1FVsDZ)}j_ox&aIxmcvDW}o?oQuNa zF4Cnzh$*cx#J1KooPHZztb|qGl#a0#ynS}>OR+plX=!}PADZu+Muzb(C`Q1t(H)lL3Q#s4S)kx=V;y;uS_>}Jawvh1eT=YpG%77uRv z-1_*qf6;nd|Nku}6Z=1fO2VB{JDnkDMSvh$!}aa|5HX?e$-speF5ds8gR~D{#vUkH zS_dQIIiD1`frT~)x94a*-~al~q5n844A+%qyfs|^pV&-_mhb56USw$8|A@RiO;uw_ zb!JI*pHnJS(orn~+e6<1%UA$_;67s9KmYf8+B~-6h9fAo>}OKPQ|t|)DFy~mnrNIawPdpWposEkd)-gWT=Fr*9KDJTbiO3lQto7O+4TAMR zuk-vUeVWH_6A1|@H({Ke>U0EzNeAz>e+5_QO(HtJ+IolMrAkDzOtq-t$4T*;Jq-sl zgNT}K9sdL5eGG^^)QXT*gx$^tj);$*yrbXvtKh$Are|1czgS7pZfG+1wu>ITV_>8c ztrMjSgMwHDBi_0fMgy-TbEw97J@zp6mxKxhlwVaPYK})w=f)UJBws>#Nu=??DJc{m zKYM2pH;ElA!v4A(fQ0mk6%Qq(>gt2ieBj2eNm(k$mT?n|oz)te9Wo~Td=7m9MnxJ* zz|Tn=Vl0z~RB4e#pL#h|&8FvfrO{;A?c4U7RTcFP__{;B%4Y{Q!tG(9SF~Lr2vI3F z4hg??*vg2UA}8V^dW3+7jR#^hA!*dv|H-3*vSn?2bl90czuwQHQV$plVOTb`3x&z5 zz<&P+s8uHyT#PG0CRCMGwJm=ZHzVU-rdSQz_+=*^i;4Wmpjm9U!To7wHLZaUk7zW@ zYq^?Vq4TBZr`t9*Wa%!=7T0WwwXwU|bmBBSnYZC^O~$|89(9`GM@2ZVy5s6m(6GYb z?1`|N)HvCT3Rkh;RN*wz`sK`!jgZkEvRQlKe;;t%`)u9Ou=zv z54}NjF4fH=uW^?rS6=Vi1J$r2Ms)D}46vX!$DQbsiNIIuhQscX9(G>yGWToVmdayl*D z@x$PJMm~u$D{mqxn%5i#Ft1ACaXgMo(3K6e!76l5*HZUv!k+2oAk3uly4WNU$M(eQP_NEjzUfi_us(K7! zS8h0_D}ejG8}BxFrYTr<8O;Bc(D$ak`;SW=Z%q~^dWP=Fo7Bx&7#QnB8&v3Q!?qDw4h5fMI1ky*;86dZ-rW z*KH|~%&6b^-TtCOM+V^(-`sF^3hosjvvK;{ZT4KuPZcUsRltp9u7sZ}^ zv!B&zji4#A>AlSbZ{x;9Y|TbHedF$x-AO8(jS*~&7Po@a?K_`CU8x^L5>;9ZT~j53 zZxU0+1kO2|4v_C#5Nroo?MjK7)`nq|L3T)PkU~l@gp4WQm(=`IuFVB^8;zb3rx57! z-|^r}ZRtAp)aDocIk28lOeZ`ob{!8m79)ZLhxisfPp6-TDkLL|r!t~lJ;Z9mXg<$U z97AGcYD^IdoEHvyQk$@Mkz_(Led;W%KMPazW@5QAg{bIMm|xVm6@8^>SK*qD9w~5a zjzX}nW*Kc%2$fOLzLj#fz6|<_;^6c4nVk9Z z`ua*r3N69b-n3lJhjEd!YJAbcT>1}?b>YYRA@I|;-=F^Umh)vNBF9CYR2v^soF_1d zzQT|oFZjC89YEZ}hX&h!y*@nKN`%eKY-#j`fU>4j$^lzi*632Yi4dNV#1&0nO~wRP z;-YsUHYGQSCj5Ctedq=AL9mctgw+q~Gf0sg*de2KVj*ATKqeubx`;u*dYM&#aV=92 z-R>iJdx_|m2WT~+l z#^bx#x6X3qq?P{x_``o(&^qRRL_IXnDnD>}RvL1P#yk`Cm(4TO8rQLO87xJ)+4xa8 z0O9=o0f4I6%1enOhSph5#`&u3{Q5xeyicQ8=Jbo^s>Y@aaWB);wQ!1vCgij4rTj?< zv(vC*VcT|qP^>~#Py>X1R`RoveG}qy3F>Hht}TsnGQx|!teD7$T}5z)!u-qtL#H@9 z!~lb}o8BG!ozYcBk)s3h^wsXWn|DkH*~;lhZb|I(*>-f(pG?k@Z95@N8Dv63zePZLf%Xx%SD93&G#Sy|dt#(|w}!4_3Tr<9q=3)eaZX0yK1z?l4>gV$CCD7vPw*^V@=NX2^urwKc2mO#Ef~ zg>uLY>@xUnj@!N7x+Wo=_sJ(i)Uz?^! zT=0~g{pMLuP$z}ffXm%iZ#$?R1|iNJ$zKr$F?nGw!v`Lp)=F`LQ;WnO^4j(?D|Bm3 z+qUd6MdY5@V}9z#_TTaq(j6!?hgp(zkEBSZKJDXpa`I;Rcd35bABWtOLY_CT-fxGc zudXT0IBH~n^Pq3oGKmn1P3c7DDJJ8Fb?oI0?IcArvCZsfN>U7n=MpJ$$wXUbf}f|Q z=nd`Qa!pG3H@x>x)CA;|0>r`5t_3^8S6Pm1q9iBKZAZw$r^s&AF5HOkmtw2W{*rxb8sgtkiJz=cBI zM?}4_!9u-7!C>!2m_=Kh(g^pj1^hlT8F~9jmA5<83@m#$lNcs8m}W^9sO5$6h&!UO zLw?BQFe@&82tb~6NIG&iZbs|iQv2nwJJjbtK(&`957#-aG?}`4X|yLjQDDy}BA-(4 z;MZt8U}$ZymO(@3B*s2#^}hOFJGT9?EXcVHbCdOnkOjfViozMEu)*)PJJynhT5>RN zAnd&&{9W|YhfKJcOwlLv>LpdFa(=Y`od4h_`+IQ)HAaz4Tz-Zu3)vJY9*{!5nA^Oe zqK7W={q>yhPW;ls_}+%4;aG!S$b0>`peQp_PfRMQm%YXDjy(}9cx2pXGq#zp(N6Of z*jnL(9qF5z=FPO^6tH*~gIhNdV%(r-LJG|=Hm`rwLNc1v><^8g*T-%~~P*n(I3 zAmjX5m+pv}^iXwr43(1Bg1R!_Sk9$?3C z;10A2Dgy%mf2A7?E4)p!*=O`6`;ke)QFst!*VMPh$zs_(4a!+6F}=~_G+5GexxxR6|5_# zQ(x_53VYrCLklx+NK=vq3)bLy>D@yvX;EW0fyfm9=4OcUuz9AVRe#2F-hSVZSNqq1 zf~9lIKJ8#?-Io}_fiU^NNr#GkiE7_FCD}Xdh}VCHUP9@wz9}e8$O($x zdGm;N%+UE+WWZZmhgWhfg+?w%8nh2oGp44=0weOvhaD@!CR1#{8r;}I1KO+f>yuu@ z*q=xX=w>WhaOE7}jlpF@Iu}>buY8&?r`u3!elOq4Y@UUTp3=yRCk_@mDF<3%$sz^Y zwd?Gp%hLZDrTBpiMw_P1Y9J)p&}I+#x4(0*HbowB$)%7OA3XkGFZcF^xW_eHs=SG- z=iP6dN-4Q)7xz@XF1JA%9R%>tK&%>DykG}9TiEmJqDs)z zekIYlq#43BR(L=ODNKv)Q~SIX0egD{Rgg61vpe!7(aW2_NSZ3dxjW*WUY~mFAU5dboG9P*?MPxq4H{pO#hP7Mi;cAy z=4i+fagy%$PtcI19!j>I`TWg#;cFH0!7U+g2gI|;lx6U7G>vuvOIoV!d`}mFIPc6k z@29hDhA~vHW;8kU5#8yg`!4sxXmx9-I)9Q?ZSDEh0yV*(Ha*_z20`0`WO~J~g7atb z`@4SWXXQ8>hpT1$yDS)m$s2*Ogab+GybJdk$HZ;}5gxzTcPkoEjT1gIQMP@H? zn$O~M9La!7JN;!dJE*IG$5&tnF(t-6U@6JJZA*^DlfmqGQik(=u*Xj1&Zn!wJtr{a*c-twweD)k`1`O0HWG;+r*JQbOQPLkUpRdh;qbvWI^1F;#p*FF+;M}0VJVlPn$5x(&U3@ zopgnXU^%R?a)~eC&s-{YaQK^jq4@9YB?u70@h1imj+7JG1~y)OnCG0>xte-|P8%y8 zaNw;=Ky>U-|HQA~Or6p`AhGlIpKCfQvHteb87$ZI%|Uf_v^WdFHbLP5!K0Fod+a(2?!h zp(gLye}Edd%1eOPDLKhFx{MY$E)=nK_{sm#dyu)LX+%DKO#iaoM115m%`RWn%Z`|I z1vNt|nVR;Zhe%ab7$@t&eP^@6Q=q0O1-o!jWwK;B6UT3Q5EL|QrE1b@2?qYw&)ykEPjsFypo_g`SvNfDbLLU%&$C6D$U<=8`tGl zVw}jViXu1fJEg)5ol4PX{UTzp8bw(ubfH9 zdn)FyI_vej->`w42rLYsXLh1Cj0LNGhxa3~Nc_MeuPYOHT-wg&2wJw~`5%1PDks5}rvr#?TW;uhUR z)e1x0P)+bBoVAJc-FkKlU>-Dp3`Jk{LPEZ7ibW??3rC%`!2*XjVX$dDD+b1ugwd-1Py zYm6GKVupJKg;|^}yHJO8sUV5GNeCR>ZzskAL!R@i*vm`sKC?D^HE$X$#_?HJCy9Gk zh)@YuWhFtN#f_O6aB`P+4hS|O<>y=tBk%UD-D8e?qN>Uq{b|?r1d?TDOU^3%SIrm! z&VJ6|F}{?}We6Jf)D^&ZVv)JewIWAqygi^j8dM?m%pGhO{^2V;Z|KJbm$bh(962Mwho-7^{o6o_lv z{2jY7Iq<+2Yi9Y?8$(3ChT`PJ_eokft|RkZ{6BU-W4}=yPQB~U@)@f8 z<`*ertwJ65S#q^QS5{>#A&UntWvpyZWLqG4Hbda+4_{U;+%|x~e{38=Rmt|$p}KJ{ z`v!Wt-RCb$pUx3oAf2kjar`UjV}P3t;jHoCceqr?{i0jjZcsR%>*z|9kZHkzUFYz4 z>4hOp*Q=dVC2JXM)p1eak50^2sA4^GwsRXmr=|PX=XY-MwECko|MXdAx;l*=GF|`2 z1UD0nNLSXfs}5Arf}t%t?3x5)fx-N&E3oeY=6QQl&hed^)b4~*60yVZsm|`&I|4{= zl^YqP#A7z_OJSxri z=ybi)_F_S;OABX6UOrSh*Ug616T9KL$z;dRTgTak-y1h>bEM>gZpfj84;WgLvF#WH{E$zXD$);;Zu~?6wM;rC!y|hKZs$eBq}=~7S^X6z z;E)$zJ(ZX$8-aMy+Xu5DXN4LUKbQ_))|*uKRNKAtCmtB<8!Jm|YO8-AF{N8J6=uWq za?pQft8$GUcrZ5LJHhn`%ROR{GqVnKy;UAGwaDi;hV;$TY4mSGb%b_^1^m5Xh~)PS z+vju;pW^Cw(CiFOaFW(2Y%IG^Xu2`NEd$cO&>E-Z#4~80wnwmb+i*~!!0L-%wH)O1 ztOGG|Lg_WNv^3=^IWZ_LjFeNj_oNHRvBUg^}sZ{|C^k?@Yy;Pg;I|vB|D- zpe4$1wVO$q6*^}iDbB=7u5(fUBI!aZKmPT1e%X%hhOJV|b(dKOn>iG(CaO1nLhoiJ z-ab@F&e@3zC>_Tx9hUcoI0DYUoDh_rdeI?cSANY?Rt~%Yf+3@7{m>wWBY(5`4JNwI>?+ z4^Bc!b|&ndSMl}8h$`6VeJ-HRG^E8(aoOR&{}B90psY>W(<&gIK3F$J&MzdZLs))) zIF|PmPI$UYS}xR8ou}*mn3J~6E7ODQ?TjN zjFD;kaIWibbt%2a76Fzf`5=TRf>zS(f?PYzPTIc>5j*y<%;;6F)>B7%9vd=bF{*=< z)@!z&V*nqnnUsjJ)Y0wiabZ}S{Tj_`dQ0B9W5Z$Cp5rW`BOuaQbvggT$uqK2p@AtP zaAh*Vcjm^=+jx(vnpJP7zP@IK{60P7hoIv(xR&w)j`!)>xsD~p5uOKH-+F~b*2@Wi zv3KTx*a)pT5i+>fxxed90or(f1S*@p4Gj!SYgFQ7HQvpI5-dzrc2UbzsajhIBV7Qb z{0`y*tp0+bM*ji!dSiV&tj4}-68lWH)vhj37~!N_PJIRK^Tw%$A$pKGYHDIt(40I% z+uH1OF05>SvQ;Gx2f?ygyaNWObisPY_iiO(!_d9)4J!h4*nThOwB>t5VY{WNV`ZlY zX4QfL9PL-fTh&;EyL$;gh4SdSJWs1m5s@}1S@HNF0p<}8(Rr<#YBjkaWPzpaW6gbV%>wS zQA~5#Y=aX`19Av55y5$sXl%c~ahsl(RJh=Dtu%H0I%Knph(8`{zPNH{_~Ky;U4zM; zq=R}&DXurrg4O+#Y!$pfyp*#gH`owC6cXV90f$RI5%685@t) zCIlO5($ilK4FFgkf2TIQE4+WuEw)E0{^2VxIJi=&wUkWsRZ%is`<^~&XqP8}p#%@c z*w_w6h_|>$D732EZrr>alH3~(;MHu)Z#QjSWi${bw+E+%xsbXBlbZ8zr$zQ3N!jB{ z29$^8_iu9uybonlTJZjkF(s*ORDonZlxjDxF(}!o0Ph#C@=$ZWjHD4IPp1{t*WcsT z!HFs6&`~=l!L$L)!4F0P52B+AWNiBSGMqYk9o~hfx2P2UYs7zoavea>#W_?um-e&r z2JG;nF2EIL)BvlEx$+^AbhdE*pOPpJ@3s$eLQz>^uNhg1ruTXGXued`4p^O#=mFe3 z*aZz>6QQy@L+c?i8Ua{@>U*R#+%yXP(6F?rpF)By&6<6P?&pq%zGr=`bH!YRB`v`4 zMi0G^Q>Gk3g_F$vTwbhj0m&erjI`7~YGi5NW?95^KrLj~m691+qm(i@gc6#eSRG*t zQ6-dqjCkwJTe{(IGWt(_^>W#YWMUt^ER4>z-K;mK#5nE}T5|2B_oX5Nwu>%iRN&)E zIJ(f}b>R2SffnHr$v?~^GK>kCeeGQIby%X!J*HWsV_)Ofk5l|PAc-Xo8{=%VpAns4 zTrRD#k|}(84`!X8x6(vYe~ZP8qFIfjqqPN9=_yy-sMxy-I;3XOv~ZEoVu-zWI)`*V z31m}{BI*y}hcqv~U(ye7d{+_oUktlJ8YY2%u)xL~B{YmTNQA-Ijcs;K89KM4eU1GA z%+M~+&pMi{k`gSnA8>1FeSg46`^qcMN91MdHSZ_q)WjeR#}8Bn4xy{1N3+^#=`krG zBQV)v9c(d*tp2sVbC8W$>)!YzX`HzF@)qr2m*M7Dy^RGu-qgxQTt{|#ebssg_-}7a zWNe`x07cxsiIFJ6d-7{&i@hnd_d}alw|#DUlyVJ4ZKR2Mi8Q*~LBQ{)#%)VR4-7F3 zQORV>Y{w%}&@mY^p&J%YKUr%ZkEnn1_N;^fVd!Q6CAby1eRV}B|Y z%Hl-)oc=E?0Kt$?3dCL!!b?W@mv5Mx`l&d62-Pda7L==0SVy3CXktwz1UJ=GKYJ7- zIWG{xmyo9^fVL9J+hl;9>E%#7CxGiwmM$QFed!`bxu%B z6=9<%Isf+%Rw2>it=`}%4{tfSL2p{Z$TuTx-N@_iYm|-sPj66arBNke+Ot+Ie0ni_WS40Ch__s0~Geu1+UyM(J0jN?Foe7+(Ut zk&#ld+_oW6{e|x0gMpuUs2{qF975}G0`t~KiW2tHn-r#a?KfagI5C^|OXj_zuN`mVaS);qycE6fW9=W-x&c!#UlU05-B zIc3R^)CB-~EkK9Z34qY~P)(($8Mtwyv>qhH_>))_2_@9&Z0+OWek*L{8d5LfLZ1s|ReSHsZ9^Y@ zL4sSz4;A&2!S=E9v2^JjZP&}ZH3k&E?XW4Yv0~l3g&!Ot&-$CH+;>=0erCSK<~#x0F}P~ z0R(!`u~>Xq|1^keS8yL7>(l|C0&2`J+x)oWeWY;`A?lVoQ663T-d`qArc~28jQRj{ zXq!+J#%)D==%#c0<}p((<^ojLzG zWlM>G%dbtc(IpK`B4(`h5>qibW>A@q;y=yt5w2|F+6o-Wa;A3a^KoaY)2U~`NBl>B zvV(+?uC8*mu>4Vzmp-`PNs~YOYZt^eHi=2(*Ty5GeYfZF0uJnY{n3~u;xs{{J0HND zK#Pc&;lOvXKvyL5t|`H{x+w2yr-p;C-sDPg_@*mm!8SpuHCS6Y8`}2wAWGmPwH>Mu zGH2SQDwCb$Q->#^-xQH(TDR6D;wR)G2D-KrZ%WFkSHqpGG)2s@u2<{FYTD9h>XHsf z5w8CS&@xS247IgBlW5yB^AMV8Hf4P!r0d#NWP>PuYec$*mbNOp|5*o$LB zLY4jl&?*h}(I>$fzc_}zZFw0{zOu{RRxYm@66!$=X6r{}VCzC-kud4-yj_gWv$4TK z3$!Q?9!^urmFRnRp$pj@4qeMff1-5HG&vb@hBxU@GzAWJ$7v#f$L$iJB4yeKrS_VVCNr zU6vTPYgUxNKQczF9!MZgl;_VwuRzGZkrwWUs*fG9zycXxq6sh68I*z~H6eQl4YqVO zuyg}&bIzZXM?A$uEN3F0%W1rEo@@=L>ASuYO6WvI9)_;Cd&?q(JD#@|v*1Z8`LANV z$0I_U-vX%Ww5zRZY5Ar2Yu>UhReUzY+wDcVP^VV2j3rDR>1#^m?Ir^YSs-K>!~+)f zCWU;zb;aJ+4r+k>1DhBJwN$DN*CpXE27G6<`V>#eZZJ0RY%qwil|Mj!Q@oiUQJK&= zKnsv4#VHC4s`)w$7ze2Ni8Nn-h{H<;dA2ii? zYxL$nKonvzVo}(Cg6}cHRDotas((p@V1<+`D0uWLLuz`KQ)Q*rP-O9?Kl!A~^VFPI z7!lR%Iqva1$$(<8ePAdITa$&3I44kTuQxKWLO*Hp=Eq_OO6O(ua`!}aTB9#qir^^~ z0%flb(cMk02Eo^VA2DTzo)z;@Ta{I{xEP(0CD-p4b8HB!U8+Hc1^sOqn+I?tpaxS} zzm6x9{Qz@HOS5d%WSv-q_D^fx3H6%$$SI8*{G4amDhnj5DH8_{O#PxO5`ZivxDY8B zn!(z%Hb^#U_eS!4lwy<_ZHpFyX@jJ(bPYpwJ7v+N28blLmI#$rW`RP;pwwP~Igy+P zzDT#$xasz)w7sbr)X>R`FVeJZ4P*{!WNrr=FYCrmb@y4^AI&u}?pq1wnUr=<(%C4x z#@8}%_UmC0Y-732ZkEajt!xpZ=6bV`a^GCwFiWhyE=*iI_nZz-%V|tT@@=I>J!
  • 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.push(a[d]);else b.push(a);return b}function e(a,c){function e(a,c,g){if(!(this instanceof e))return new e(a,c);"string"==typeof a&&(a=document.querySelectorAll(a)),this.elements=d(a),this.options=b({},this.options),"function"==typeof c?g=c:b(this.options,c),g&&this.on("always",g),this.getImages(),f&&(this.jqDeferred=new f.Deferred);var h=this;setTimeout(function(){h.check()})}function i(a){this.img=a}e.prototype=new a,e.prototype.options={},e.prototype.getImages=function(){this.images=[];for(var a=0,b=this.elements.length;b>a;a++){var c=this.elements[a];"IMG"===c.nodeName&&this.addImage(c);for(var d=c.querySelectorAll("img"),e=0,f=d.length;f>e;e++){var g=d[e];this.addImage(g)}}},e.prototype.addImage=function(a){var b=new i(a);this.images.push(b)},e.prototype.check=function(){function a(a,e){return b.options.debug&&h&&g.log("confirm",a,e),b.progress(a),c++,c===d&&b.complete(),!0}var b=this,c=0,d=this.images.length;if(this.hasAnyBroken=!1,!d)return void this.complete();for(var e=0;d>e;e++){var f=this.images[e];f.on("confirm",a),f.check()}},e.prototype.progress=function(a){this.hasAnyBroken=this.hasAnyBroken||!a.isLoaded,this.emit("progress",this,a),this.jqDeferred&&this.jqDeferred.notify(this,a)},e.prototype.complete=function(){var a=this.hasAnyBroken?"fail":"done";if(this.isComplete=!0,this.emit(a,this),this.emit("always",this),this.jqDeferred){var b=this.hasAnyBroken?"reject":"resolve";this.jqDeferred[b](this)}},f&&(f.fn.imagesLoaded=function(a,b){var c=new e(this,a,b);return c.jqDeferred.promise(f(this))});var j={};return i.prototype=new a,i.prototype.check=function(){var a=j[this.img.src];if(a)return void this.useCached(a);if(j[this.img.src]=this,this.img.complete&&void 0!==this.img.naturalWidth)return void this.confirm(0!==this.img.naturalWidth,"naturalWidth");var b=this.proxyImage=new Image;c.bind(b,"load",this),c.bind(b,"error",this),b.src=this.img.src},i.prototype.useCached=function(a){if(a.isConfirmed)this.confirm(a.isLoaded,"cached was confirmed");else{var b=this;a.on("confirm",function(a){return b.confirm(a.isLoaded,"cache emitted confirmed"),!0})}},i.prototype.confirm=function(a,b){this.isConfirmed=!0,this.isLoaded=a,this.emit("confirm",this,b)},i.prototype.handleEvent=function(a){var b="on"+a.type;this[b]&&this[b](a)},i.prototype.onload=function(){this.confirm(!0,"onload"),this.unbindProxyEvents()},i.prototype.onerror=function(){this.confirm(!1,"onerror"),this.unbindProxyEvents()},i.prototype.unbindProxyEvents=function(){c.unbind(this.proxyImage,"load",this),c.unbind(this.proxyImage,"error",this)},e}var f=a.jQuery,g=a.console,h="undefined"!=typeof g,i=Object.prototype.toString;"function"==typeof define&&define.amd?define(["eventEmitter","eventie"],e):a.imagesLoaded=e(a.EventEmitter,a.eventie)}(window); +//# sourceMappingURL=//cdn.jsdelivr.net/qtip2/2.2.1//var/www/qtip2/build/tmp/tmp-656464emu9s/imagesloaded.pkg.min.map \ No newline at end of file diff --git a/plugins/easy-footnotes/assets/qtip/imagesloaded.pkgd.min.js b/plugins/easy-footnotes/assets/qtip/imagesloaded.pkgd.min.js new file mode 100644 index 0000000..d66f658 --- /dev/null +++ b/plugins/easy-footnotes/assets/qtip/imagesloaded.pkgd.min.js @@ -0,0 +1,7 @@ +/*! + * imagesLoaded PACKAGED v3.1.8 + * JavaScript is all like "You images are done yet or what?" + * MIT License + */ + +(function(){function e(){}function t(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function n(e){return function(){return this[e].apply(this,arguments)}}var i=e.prototype,r=this,o=r.EventEmitter;i.getListeners=function(e){var t,n,i=this._getEvents();if("object"==typeof e){t={};for(n in i)i.hasOwnProperty(n)&&e.test(n)&&(t[n]=i[n])}else t=i[e]||(i[e]=[]);return t},i.flattenListeners=function(e){var t,n=[];for(t=0;e.length>t;t+=1)n.push(e[t].listener);return n},i.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},i.addListener=function(e,n){var i,r=this.getListenersAsObject(e),o="object"==typeof n;for(i in r)r.hasOwnProperty(i)&&-1===t(r[i],n)&&r[i].push(o?n:{listener:n,once:!1});return this},i.on=n("addListener"),i.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},i.once=n("addOnceListener"),i.defineEvent=function(e){return this.getListeners(e),this},i.defineEvents=function(e){for(var t=0;e.length>t;t+=1)this.defineEvent(e[t]);return this},i.removeListener=function(e,n){var i,r,o=this.getListenersAsObject(e);for(r in o)o.hasOwnProperty(r)&&(i=t(o[r],n),-1!==i&&o[r].splice(i,1));return this},i.off=n("removeListener"),i.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},i.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},i.manipulateListeners=function(e,t,n){var i,r,o=e?this.removeListener:this.addListener,s=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(i=n.length;i--;)o.call(this,t,n[i]);else for(i in t)t.hasOwnProperty(i)&&(r=t[i])&&("function"==typeof r?o.call(this,i,r):s.call(this,i,r));return this},i.removeEvent=function(e){var t,n=typeof e,i=this._getEvents();if("string"===n)delete i[e];else if("object"===n)for(t in i)i.hasOwnProperty(t)&&e.test(t)&&delete i[t];else delete this._events;return this},i.removeAllListeners=n("removeEvent"),i.emitEvent=function(e,t){var n,i,r,o,s=this.getListenersAsObject(e);for(r in s)if(s.hasOwnProperty(r))for(i=s[r].length;i--;)n=s[r][i],n.once===!0&&this.removeListener(e,n.listener),o=n.listener.apply(this,t||[]),o===this._getOnceReturnValue()&&this.removeListener(e,n.listener);return this},i.trigger=n("emitEvent"),i.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},i.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},i._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},i._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return r.EventEmitter=o,e},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return e}):"object"==typeof module&&module.exports?module.exports=e:this.EventEmitter=e}).call(this),function(e){function t(t){var n=e.event;return n.target=n.target||n.srcElement||t,n}var n=document.documentElement,i=function(){};n.addEventListener?i=function(e,t,n){e.addEventListener(t,n,!1)}:n.attachEvent&&(i=function(e,n,i){e[n+i]=i.handleEvent?function(){var n=t(e);i.handleEvent.call(i,n)}:function(){var n=t(e);i.call(e,n)},e.attachEvent("on"+n,e[n+i])});var r=function(){};n.removeEventListener?r=function(e,t,n){e.removeEventListener(t,n,!1)}:n.detachEvent&&(r=function(e,t,n){e.detachEvent("on"+t,e[t+n]);try{delete e[t+n]}catch(i){e[t+n]=void 0}});var o={bind:i,unbind:r};"function"==typeof define&&define.amd?define("eventie/eventie",o):e.eventie=o}(this),function(e,t){"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],function(n,i){return t(e,n,i)}):"object"==typeof exports?module.exports=t(e,require("wolfy87-eventemitter"),require("eventie")):e.imagesLoaded=t(e,e.EventEmitter,e.eventie)}(window,function(e,t,n){function i(e,t){for(var n in t)e[n]=t[n];return e}function r(e){return"[object Array]"===d.call(e)}function o(e){var t=[];if(r(e))t=e;else if("number"==typeof e.length)for(var n=0,i=e.length;i>n;n++)t.push(e[n]);else t.push(e);return t}function s(e,t,n){if(!(this instanceof s))return new s(e,t);"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=o(e),this.options=i({},this.options),"function"==typeof t?n=t:i(this.options,t),n&&this.on("always",n),this.getImages(),a&&(this.jqDeferred=new a.Deferred);var r=this;setTimeout(function(){r.check()})}function f(e){this.img=e}function c(e){this.src=e,v[e]=this}var a=e.jQuery,u=e.console,h=u!==void 0,d=Object.prototype.toString;s.prototype=new t,s.prototype.options={},s.prototype.getImages=function(){this.images=[];for(var e=0,t=this.elements.length;t>e;e++){var n=this.elements[e];"IMG"===n.nodeName&&this.addImage(n);var i=n.nodeType;if(i&&(1===i||9===i||11===i))for(var r=n.querySelectorAll("img"),o=0,s=r.length;s>o;o++){var f=r[o];this.addImage(f)}}},s.prototype.addImage=function(e){var t=new f(e);this.images.push(t)},s.prototype.check=function(){function e(e,r){return t.options.debug&&h&&u.log("confirm",e,r),t.progress(e),n++,n===i&&t.complete(),!0}var t=this,n=0,i=this.images.length;if(this.hasAnyBroken=!1,!i)return this.complete(),void 0;for(var r=0;i>r;r++){var o=this.images[r];o.on("confirm",e),o.check()}},s.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded;var t=this;setTimeout(function(){t.emit("progress",t,e),t.jqDeferred&&t.jqDeferred.notify&&t.jqDeferred.notify(t,e)})},s.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";this.isComplete=!0;var t=this;setTimeout(function(){if(t.emit(e,t),t.emit("always",t),t.jqDeferred){var n=t.hasAnyBroken?"reject":"resolve";t.jqDeferred[n](t)}})},a&&(a.fn.imagesLoaded=function(e,t){var n=new s(this,e,t);return n.jqDeferred.promise(a(this))}),f.prototype=new t,f.prototype.check=function(){var e=v[this.img.src]||new c(this.img.src);if(e.isConfirmed)return this.confirm(e.isLoaded,"cached was confirmed"),void 0;if(this.img.complete&&void 0!==this.img.naturalWidth)return this.confirm(0!==this.img.naturalWidth,"naturalWidth"),void 0;var t=this;e.on("confirm",function(e,n){return t.confirm(e.isLoaded,n),!0}),e.check()},f.prototype.confirm=function(e,t){this.isLoaded=e,this.emit("confirm",this,t)};var v={};return c.prototype=new t,c.prototype.check=function(){if(!this.isChecked){var e=new Image;n.bind(e,"load",this),n.bind(e,"error",this),e.src=this.src,this.isChecked=!0}},c.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},c.prototype.onload=function(e){this.confirm(!0,"onload"),this.unbindProxyEvents(e)},c.prototype.onerror=function(e){this.confirm(!1,"onerror"),this.unbindProxyEvents(e)},c.prototype.confirm=function(e,t){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,t)},c.prototype.unbindProxyEvents=function(e){n.unbind(e.target,"load",this),n.unbind(e.target,"error",this)},s}); \ No newline at end of file diff --git a/plugins/easy-footnotes/assets/qtip/jquery.qtip.css b/plugins/easy-footnotes/assets/qtip/jquery.qtip.css new file mode 100644 index 0000000..70f7843 --- /dev/null +++ b/plugins/easy-footnotes/assets/qtip/jquery.qtip.css @@ -0,0 +1,617 @@ +/* + * qTip2 - Pretty powerful tooltips - v2.2.1 + * http://qtip2.com + * + * Copyright (c) 2014 + * Released under the MIT licenses + * http://jquery.org/license + * + * Date: Sat Sep 6 2014 06:25 EDT-0400 + * Plugins: tips viewport imagemap svg modal ie6 + * Styles: core basic css3 + */ +.qtip{ + position: absolute; + left: -28000px; + top: -28000px; + display: none; + + max-width: 280px; + min-width: 50px; + + font-size: 10.5px; + line-height: 12px; + + direction: ltr; + + box-shadow: none; + padding: 0; +} + + .qtip-content{ + position: relative; + padding: 5px 9px; + overflow: hidden; + + text-align: left; + word-wrap: break-word; + } + + .qtip-titlebar{ + position: relative; + padding: 5px 35px 5px 10px; + overflow: hidden; + + border-width: 0 0 1px; + font-weight: bold; + } + + .qtip-titlebar + .qtip-content{ border-top-width: 0 !important; } + + /* Default close button class */ + .qtip-close{ + position: absolute; + right: -9px; top: -9px; + z-index: 11; /* Overlap .qtip-tip */ + + cursor: pointer; + outline: medium none; + + border: 1px solid transparent; + } + + .qtip-titlebar .qtip-close{ + right: 4px; top: 50%; + margin-top: -9px; + } + + * html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */ + + .qtip-titlebar .ui-icon, + .qtip-icon .ui-icon{ + display: block; + text-indent: -1000em; + direction: ltr; + } + + .qtip-icon, .qtip-icon .ui-icon{ + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + text-decoration: none; + } + + .qtip-icon .ui-icon{ + width: 18px; + height: 14px; + + line-height: 14px; + text-align: center; + text-indent: 0; + font: normal bold 10px/13px Tahoma,sans-serif; + + color: inherit; + background: transparent none no-repeat -100em -100em; + } + +/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */ +.qtip-focus{} + +/* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */ +.qtip-hover{} + +/* Default tooltip style */ +.qtip-default{ + border: 1px solid #F1D031; + + background-color: #FFFFA3; + color: #555; +} + + .qtip-default .qtip-titlebar{ + background-color: #FFEF93; + } + + .qtip-default .qtip-icon{ + border-color: #CCC; + background: #F1F1F1; + color: #777; + } + + .qtip-default .qtip-titlebar .qtip-close{ + border-color: #AAA; + color: #111; + } + + +/*! Light tooltip style */ +.qtip-light{ + background-color: white; + border-color: #E2E2E2; + color: #454545; +} + + .qtip-light .qtip-titlebar{ + background-color: #f1f1f1; + } + + +/*! Dark tooltip style */ +.qtip-dark{ + background-color: #505050; + border-color: #303030; + color: #f3f3f3; +} + + .qtip-dark .qtip-titlebar{ + background-color: #404040; + } + + .qtip-dark .qtip-icon{ + border-color: #444; + } + + .qtip-dark .qtip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/*! Cream tooltip style */ +.qtip-cream{ + background-color: #FBF7AA; + border-color: #F9E98E; + color: #A27D35; +} + + .qtip-cream .qtip-titlebar{ + background-color: #F0DE7D; + } + + .qtip-cream .qtip-close .qtip-icon{ + background-position: -82px 0; + } + + +/*! Red tooltip style */ +.qtip-red{ + background-color: #F78B83; + border-color: #D95252; + color: #912323; +} + + .qtip-red .qtip-titlebar{ + background-color: #F06D65; + } + + .qtip-red .qtip-close .qtip-icon{ + background-position: -102px 0; + } + + .qtip-red .qtip-icon{ + border-color: #D95252; + } + + .qtip-red .qtip-titlebar .ui-state-hover{ + border-color: #D95252; + } + + +/*! Green tooltip style */ +.qtip-green{ + background-color: #CAED9E; + border-color: #90D93F; + color: #3F6219; +} + + .qtip-green .qtip-titlebar{ + background-color: #B0DE78; + } + + .qtip-green .qtip-close .qtip-icon{ + background-position: -42px 0; + } + + +/*! Blue tooltip style */ +.qtip-blue{ + background-color: #E5F6FE; + border-color: #ADD9ED; + color: #5E99BD; +} + + .qtip-blue .qtip-titlebar{ + background-color: #D0E9F5; + } + + .qtip-blue .qtip-close .qtip-icon{ + background-position: -2px 0; + } + + +.qtip-shadow{ + -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); + box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); +} + +/* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */ +.qtip-rounded, +.qtip-tipsy, +.qtip-bootstrap{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +.qtip-rounded .qtip-titlebar{ + -moz-border-radius: 4px 4px 0 0; + -webkit-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +/* Youtube tooltip style */ +.qtip-youtube{ + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + + -webkit-box-shadow: 0 0 3px #333; + -moz-box-shadow: 0 0 3px #333; + box-shadow: 0 0 3px #333; + + color: white; + border: 0 solid transparent; + + background: #4A4A4A; + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black)); + background-image: -webkit-linear-gradient(top,#4A4A4A 0,black 100%); + background-image: -moz-linear-gradient(top,#4A4A4A 0,black 100%); + background-image: -ms-linear-gradient(top,#4A4A4A 0,black 100%); + background-image: -o-linear-gradient(top,#4A4A4A 0,black 100%); +} + + .qtip-youtube .qtip-titlebar{ + background-color: #4A4A4A; + background-color: rgba(0,0,0,0); + } + + .qtip-youtube .qtip-content{ + padding: .75em; + font: 12px arial,sans-serif; + + filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000); + -ms-filter: "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"; + } + + .qtip-youtube .qtip-icon{ + border-color: #222; + } + + .qtip-youtube .qtip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/* jQuery TOOLS Tooltip style */ +.qtip-jtools{ + background: #232323; + background: rgba(0, 0, 0, 0.7); + background-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323)); + background-image: -moz-linear-gradient(top, #717171, #232323); + background-image: -webkit-linear-gradient(top, #717171, #232323); + background-image: -ms-linear-gradient(top, #717171, #232323); + background-image: -o-linear-gradient(top, #717171, #232323); + + border: 2px solid #ddd; + border: 2px solid rgba(241,241,241,1); + + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + + -webkit-box-shadow: 0 0 12px #333; + -moz-box-shadow: 0 0 12px #333; + box-shadow: 0 0 12px #333; +} + + /* IE Specific */ + .qtip-jtools .qtip-titlebar{ + background-color: transparent; + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"; + } + .qtip-jtools .qtip-content{ + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"; + } + + .qtip-jtools .qtip-titlebar, + .qtip-jtools .qtip-content{ + background: transparent; + color: white; + border: 0 dashed transparent; + } + + .qtip-jtools .qtip-icon{ + border-color: #555; + } + + .qtip-jtools .qtip-titlebar .ui-state-hover{ + border-color: #333; + } + + +/* Cluetip style */ +.qtip-cluetip{ + -webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); + -moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); + box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); + + background-color: #D9D9C2; + color: #111; + border: 0 dashed transparent; +} + + .qtip-cluetip .qtip-titlebar{ + background-color: #87876A; + color: white; + border: 0 dashed transparent; + } + + .qtip-cluetip .qtip-icon{ + border-color: #808064; + } + + .qtip-cluetip .qtip-titlebar .ui-state-hover{ + border-color: #696952; + color: #696952; + } + + +/* Tipsy style */ +.qtip-tipsy{ + background: black; + background: rgba(0, 0, 0, .87); + + color: white; + border: 0 solid transparent; + + font-size: 11px; + font-family: 'Lucida Grande', sans-serif; + font-weight: bold; + line-height: 16px; + text-shadow: 0 1px black; +} + + .qtip-tipsy .qtip-titlebar{ + padding: 6px 35px 0 10px; + background-color: transparent; + } + + .qtip-tipsy .qtip-content{ + padding: 6px 10px; + } + + .qtip-tipsy .qtip-icon{ + border-color: #222; + text-shadow: none; + } + + .qtip-tipsy .qtip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/* Tipped style */ +.qtip-tipped{ + border: 3px solid #959FA9; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + + background-color: #F9F9F9; + color: #454545; + + font-weight: normal; + font-family: serif; +} + + .qtip-tipped .qtip-titlebar{ + border-bottom-width: 0; + + color: white; + background: #3A79B8; + background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D)); + background-image: -webkit-linear-gradient(top, #3A79B8, #2E629D); + background-image: -moz-linear-gradient(top, #3A79B8, #2E629D); + background-image: -ms-linear-gradient(top, #3A79B8, #2E629D); + background-image: -o-linear-gradient(top, #3A79B8, #2E629D); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"; + } + + .qtip-tipped .qtip-icon{ + border: 2px solid #285589; + background: #285589; + } + + .qtip-tipped .qtip-icon .ui-icon{ + background-color: #FBFBFB; + color: #555; + } + + +/** + * Twitter Bootstrap style. + * + * Tested with IE 8, IE 9, Chrome 18, Firefox 9, Opera 11. + * Does not work with IE 7. + */ +.qtip-bootstrap{ + /** Taken from Bootstrap body */ + font-size: 14px; + line-height: 20px; + color: #333333; + + /** Taken from Bootstrap .popover */ + padding: 1px; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + + .qtip-bootstrap .qtip-titlebar{ + /** Taken from Bootstrap .popover-title */ + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; + } + + .qtip-bootstrap .qtip-titlebar .qtip-close{ + /** + * Overrides qTip2: + * .qtip-titlebar .qtip-close{ + * [...] + * right: 4px; + * top: 50%; + * [...] + * border-style: solid; + * } + */ + right: 11px; + top: 45%; + border-style: none; + } + + .qtip-bootstrap .qtip-content{ + /** Taken from Bootstrap .popover-content */ + padding: 9px 14px; + } + + .qtip-bootstrap .qtip-icon{ + /** + * Overrides qTip2: + * .qtip-default .qtip-icon { + * border-color: #CCC; + * background: #F1F1F1; + * color: #777; + * } + */ + background: transparent; + } + + .qtip-bootstrap .qtip-icon .ui-icon{ + /** + * Overrides qTip2: + * .qtip-icon .ui-icon{ + * width: 18px; + * height: 14px; + * } + */ + width: auto; + height: auto; + + /* Taken from Bootstrap .close */ + float: right; + font-size: 20px; + font-weight: bold; + line-height: 18px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); + } + + .qtip-bootstrap .qtip-icon .ui-icon:hover{ + /* Taken from Bootstrap .close:hover */ + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); + } + + +/* IE9 fix - removes all filters */ +.qtip:not(.ie9haxors) div.qtip-content, +.qtip:not(.ie9haxors) div.qtip-titlebar{ + filter: none; + -ms-filter: none; +} + + +.qtip .qtip-tip{ + margin: 0 auto; + overflow: hidden; + z-index: 10; + +} + + /* Opera bug #357 - Incorrect tip position + https://github.com/Craga89/qTip2/issues/367 */ + x:-o-prefocus, .qtip .qtip-tip{ + visibility: hidden; + } + + .qtip .qtip-tip, + .qtip .qtip-tip .qtip-vml, + .qtip .qtip-tip canvas{ + position: absolute; + + color: #123456; + background: transparent; + border: 0 dashed transparent; + } + + .qtip .qtip-tip canvas{ top: 0; left: 0; } + + .qtip .qtip-tip .qtip-vml{ + behavior: url(#default#VML); + display: inline-block; + visibility: visible; + } + + +#qtip-overlay{ + position: fixed; + left: 0; top: 0; + width: 100%; height: 100%; +} + + /* Applied to modals with show.modal.blur set to true */ + #qtip-overlay.blurs{ cursor: pointer; } + + /* Change opacity of overlay here */ + #qtip-overlay div{ + position: absolute; + left: 0; top: 0; + width: 100%; height: 100%; + + background-color: black; + + opacity: 0.7; + filter:alpha(opacity=70); + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + } + + +.qtipmodal-ie6fix{ + position: absolute !important; +} diff --git a/plugins/easy-footnotes/assets/qtip/jquery.qtip.js b/plugins/easy-footnotes/assets/qtip/jquery.qtip.js new file mode 100644 index 0000000..5eb9a8a --- /dev/null +++ b/plugins/easy-footnotes/assets/qtip/jquery.qtip.js @@ -0,0 +1,3451 @@ +/* + * qTip2 - Pretty powerful tooltips - v2.2.1 + * http://qtip2.com + * + * Copyright (c) 2014 + * Released under the MIT licenses + * http://jquery.org/license + * + * Date: Sat Sep 6 2014 06:25 EDT-0400 + * Plugins: tips viewport imagemap svg modal ie6 + * Styles: core basic css3 + */ +/*global window: false, jQuery: false, console: false, define: false */ + +/* Cache window, document, undefined */ +(function( window, document, undefined ) { + +// Uses AMD or browser globals to create a jQuery plugin. +(function( factory ) { + "use strict"; + if(typeof define === 'function' && define.amd) { + define(['jquery'], factory); + } + else if(jQuery && !jQuery.fn.qtip) { + factory(jQuery); + } +} +(function($) { + "use strict"; // Enable ECMAScript "strict" operation for this function. See more: http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/ +;// Munge the primitives - Paul Irish tip +var TRUE = true, +FALSE = false, +NULL = null, + +// Common variables +X = 'x', Y = 'y', +WIDTH = 'width', +HEIGHT = 'height', + +// Positioning sides +TOP = 'top', +LEFT = 'left', +BOTTOM = 'bottom', +RIGHT = 'right', +CENTER = 'center', + +// Position adjustment types +FLIP = 'flip', +FLIPINVERT = 'flipinvert', +SHIFT = 'shift', + +// Shortcut vars +QTIP, PROTOTYPE, CORNER, CHECKS, +PLUGINS = {}, +NAMESPACE = 'qtip', +ATTR_HAS = 'data-hasqtip', +ATTR_ID = 'data-qtip-id', +WIDGET = ['ui-widget', 'ui-tooltip'], +SELECTOR = '.'+NAMESPACE, +INACTIVE_EVENTS = 'click dblclick mousedown mouseup mousemove mouseleave mouseenter'.split(' '), + +CLASS_FIXED = NAMESPACE+'-fixed', +CLASS_DEFAULT = NAMESPACE + '-default', +CLASS_FOCUS = NAMESPACE + '-focus', +CLASS_HOVER = NAMESPACE + '-hover', +CLASS_DISABLED = NAMESPACE+'-disabled', + +replaceSuffix = '_replacedByqTip', +oldtitle = 'oldtitle', +trackingBound, + +// Browser detection +BROWSER = { + /* + * IE version detection + * + * Adapted from: http://ajaxian.com/archives/attack-of-the-ie-conditional-comment + * Credit to James Padolsey for the original implemntation! + */ + ie: (function(){ + for ( + var v = 4, i = document.createElement("div"); + (i.innerHTML = "") && i.getElementsByTagName("i")[0]; + v+=1 + ) {} + return v > 4 ? v : NaN; + }()), + + /* + * iOS version detection + */ + iOS: parseFloat( + ('' + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0,''])[1]) + .replace('undefined', '3_2').replace('_', '.').replace('_', '') + ) || FALSE +}; +;function QTip(target, options, id, attr) { + // Elements and ID + this.id = id; + this.target = target; + this.tooltip = NULL; + this.elements = { target: target }; + + // Internal constructs + this._id = NAMESPACE + '-' + id; + this.timers = { img: {} }; + this.options = options; + this.plugins = {}; + + // Cache object + this.cache = { + event: {}, + target: $(), + disabled: FALSE, + attr: attr, + onTooltip: FALSE, + lastClass: '' + }; + + // Set the initial flags + this.rendered = this.destroyed = this.disabled = this.waiting = + this.hiddenDuringWait = this.positioning = this.triggering = FALSE; +} +PROTOTYPE = QTip.prototype; + +PROTOTYPE._when = function(deferreds) { + return $.when.apply($, deferreds); +}; + +PROTOTYPE.render = function(show) { + if(this.rendered || this.destroyed) { return this; } // If tooltip has already been rendered, exit + + var self = this, + options = this.options, + cache = this.cache, + elements = this.elements, + text = options.content.text, + title = options.content.title, + button = options.content.button, + posOptions = options.position, + namespace = '.'+this._id+' ', + deferreds = [], + tooltip; + + // Add ARIA attributes to target + $.attr(this.target[0], 'aria-describedby', this._id); + + // Create public position object that tracks current position corners + cache.posClass = this._createPosClass( + (this.position = { my: posOptions.my, at: posOptions.at }).my + ); + + // Create tooltip element + this.tooltip = elements.tooltip = tooltip = $('
    ', { + 'id': this._id, + 'class': [ NAMESPACE, CLASS_DEFAULT, options.style.classes, cache.posClass ].join(' '), + 'width': options.style.width || '', + 'height': options.style.height || '', + 'tracking': posOptions.target === 'mouse' && posOptions.adjust.mouse, + + /* ARIA specific attributes */ + 'role': 'alert', + 'aria-live': 'polite', + 'aria-atomic': FALSE, + 'aria-describedby': this._id + '-content', + 'aria-hidden': TRUE + }) + .toggleClass(CLASS_DISABLED, this.disabled) + .attr(ATTR_ID, this.id) + .data(NAMESPACE, this) + .appendTo(posOptions.container) + .append( + // Create content element + elements.content = $('
    ', { + 'class': NAMESPACE + '-content', + 'id': this._id + '-content', + 'aria-atomic': TRUE + }) + ); + + // Set rendered flag and prevent redundant reposition calls for now + this.rendered = -1; + this.positioning = TRUE; + + // Create title... + if(title) { + this._createTitle(); + + // Update title only if its not a callback (called in toggle if so) + if(!$.isFunction(title)) { + deferreds.push( this._updateTitle(title, FALSE) ); + } + } + + // Create button + if(button) { this._createButton(); } + + // Set proper rendered flag and update content if not a callback function (called in toggle) + if(!$.isFunction(text)) { + deferreds.push( this._updateContent(text, FALSE) ); + } + this.rendered = TRUE; + + // Setup widget classes + this._setWidget(); + + // Initialize 'render' plugins + $.each(PLUGINS, function(name) { + var instance; + if(this.initialize === 'render' && (instance = this(self))) { + self.plugins[name] = instance; + } + }); + + // Unassign initial events and assign proper events + this._unassignEvents(); + this._assignEvents(); + + // When deferreds have completed + this._when(deferreds).then(function() { + // tooltiprender event + self._trigger('render'); + + // Reset flags + self.positioning = FALSE; + + // Show tooltip if not hidden during wait period + if(!self.hiddenDuringWait && (options.show.ready || show)) { + self.toggle(TRUE, cache.event, FALSE); + } + self.hiddenDuringWait = FALSE; + }); + + // Expose API + QTIP.api[this.id] = this; + + return this; +}; + +PROTOTYPE.destroy = function(immediate) { + // Set flag the signify destroy is taking place to plugins + // and ensure it only gets destroyed once! + if(this.destroyed) { return this.target; } + + function process() { + if(this.destroyed) { return; } + this.destroyed = TRUE; + + var target = this.target, + title = target.attr(oldtitle), + timer; + + // Destroy tooltip if rendered + if(this.rendered) { + this.tooltip.stop(1,0).find('*').remove().end().remove(); + } + + // Destroy all plugins + $.each(this.plugins, function(name) { + this.destroy && this.destroy(); + }); + + // Clear timers + for(timer in this.timers) { + clearTimeout(this.timers[timer]); + } + + // Remove api object and ARIA attributes + target.removeData(NAMESPACE) + .removeAttr(ATTR_ID) + .removeAttr(ATTR_HAS) + .removeAttr('aria-describedby'); + + // Reset old title attribute if removed + if(this.options.suppress && title) { + target.attr('title', title).removeAttr(oldtitle); + } + + // Remove qTip events associated with this API + this._unassignEvents(); + + // Remove ID from used id objects, and delete object references + // for better garbage collection and leak protection + this.options = this.elements = this.cache = this.timers = + this.plugins = this.mouse = NULL; + + // Delete epoxsed API object + delete QTIP.api[this.id]; + } + + // If an immediate destory is needed + if((immediate !== TRUE || this.triggering === 'hide') && this.rendered) { + this.tooltip.one('tooltiphidden', $.proxy(process, this)); + !this.triggering && this.hide(); + } + + // If we're not in the process of hiding... process + else { process.call(this); } + + return this.target; +}; +;function invalidOpt(a) { + return a === NULL || $.type(a) !== 'object'; +} + +function invalidContent(c) { + return !( $.isFunction(c) || (c && c.attr) || c.length || ($.type(c) === 'object' && (c.jquery || c.then) )); +} + +// Option object sanitizer +function sanitizeOptions(opts) { + var content, text, ajax, once; + + if(invalidOpt(opts)) { return FALSE; } + + if(invalidOpt(opts.metadata)) { + opts.metadata = { type: opts.metadata }; + } + + if('content' in opts) { + content = opts.content; + + if(invalidOpt(content) || content.jquery || content.done) { + content = opts.content = { + text: (text = invalidContent(content) ? FALSE : content) + }; + } + else { text = content.text; } + + // DEPRECATED - Old content.ajax plugin functionality + // Converts it into the proper Deferred syntax + if('ajax' in content) { + ajax = content.ajax; + once = ajax && ajax.once !== FALSE; + delete content.ajax; + + content.text = function(event, api) { + var loading = text || $(this).attr(api.options.content.attr) || 'Loading...', + + deferred = $.ajax( + $.extend({}, ajax, { context: api }) + ) + .then(ajax.success, NULL, ajax.error) + .then(function(content) { + if(content && once) { api.set('content.text', content); } + return content; + }, + function(xhr, status, error) { + if(api.destroyed || xhr.status === 0) { return; } + api.set('content.text', status + ': ' + error); + }); + + return !once ? (api.set('content.text', loading), deferred) : loading; + }; + } + + if('title' in content) { + if($.isPlainObject(content.title)) { + content.button = content.title.button; + content.title = content.title.text; + } + + if(invalidContent(content.title || FALSE)) { + content.title = FALSE; + } + } + } + + if('position' in opts && invalidOpt(opts.position)) { + opts.position = { my: opts.position, at: opts.position }; + } + + if('show' in opts && invalidOpt(opts.show)) { + opts.show = opts.show.jquery ? { target: opts.show } : + opts.show === TRUE ? { ready: TRUE } : { event: opts.show }; + } + + if('hide' in opts && invalidOpt(opts.hide)) { + opts.hide = opts.hide.jquery ? { target: opts.hide } : { event: opts.hide }; + } + + if('style' in opts && invalidOpt(opts.style)) { + opts.style = { classes: opts.style }; + } + + // Sanitize plugin options + $.each(PLUGINS, function() { + this.sanitize && this.sanitize(opts); + }); + + return opts; +} + +// Setup builtin .set() option checks +CHECKS = PROTOTYPE.checks = { + builtin: { + // Core checks + '^id$': function(obj, o, v, prev) { + var id = v === TRUE ? QTIP.nextid : v, + new_id = NAMESPACE + '-' + id; + + if(id !== FALSE && id.length > 0 && !$('#'+new_id).length) { + this._id = new_id; + + if(this.rendered) { + this.tooltip[0].id = this._id; + this.elements.content[0].id = this._id + '-content'; + this.elements.title[0].id = this._id + '-title'; + } + } + else { obj[o] = prev; } + }, + '^prerender': function(obj, o, v) { + v && !this.rendered && this.render(this.options.show.ready); + }, + + // Content checks + '^content.text$': function(obj, o, v) { + this._updateContent(v); + }, + '^content.attr$': function(obj, o, v, prev) { + if(this.options.content.text === this.target.attr(prev)) { + this._updateContent( this.target.attr(v) ); + } + }, + '^content.title$': function(obj, o, v) { + // Remove title if content is null + if(!v) { return this._removeTitle(); } + + // If title isn't already created, create it now and update + v && !this.elements.title && this._createTitle(); + this._updateTitle(v); + }, + '^content.button$': function(obj, o, v) { + this._updateButton(v); + }, + '^content.title.(text|button)$': function(obj, o, v) { + this.set('content.'+o, v); // Backwards title.text/button compat + }, + + // Position checks + '^position.(my|at)$': function(obj, o, v){ + 'string' === typeof v && (this.position[o] = obj[o] = new CORNER(v, o === 'at')); + }, + '^position.container$': function(obj, o, v){ + this.rendered && this.tooltip.appendTo(v); + }, + + // Show checks + '^show.ready$': function(obj, o, v) { + v && (!this.rendered && this.render(TRUE) || this.toggle(TRUE)); + }, + + // Style checks + '^style.classes$': function(obj, o, v, p) { + this.rendered && this.tooltip.removeClass(p).addClass(v); + }, + '^style.(width|height)': function(obj, o, v) { + this.rendered && this.tooltip.css(o, v); + }, + '^style.widget|content.title': function() { + this.rendered && this._setWidget(); + }, + '^style.def': function(obj, o, v) { + this.rendered && this.tooltip.toggleClass(CLASS_DEFAULT, !!v); + }, + + // Events check + '^events.(render|show|move|hide|focus|blur)$': function(obj, o, v) { + this.rendered && this.tooltip[($.isFunction(v) ? '' : 'un') + 'bind']('tooltip'+o, v); + }, + + // Properties which require event reassignment + '^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)': function() { + if(!this.rendered) { return; } + + // Set tracking flag + var posOptions = this.options.position; + this.tooltip.attr('tracking', posOptions.target === 'mouse' && posOptions.adjust.mouse); + + // Reassign events + this._unassignEvents(); + this._assignEvents(); + } + } +}; + +// Dot notation converter +function convertNotation(options, notation) { + var i = 0, obj, option = options, + + // Split notation into array + levels = notation.split('.'); + + // Loop through + while( option = option[ levels[i++] ] ) { + if(i < levels.length) { obj = option; } + } + + return [obj || options, levels.pop()]; +} + +PROTOTYPE.get = function(notation) { + if(this.destroyed) { return this; } + + var o = convertNotation(this.options, notation.toLowerCase()), + result = o[0][ o[1] ]; + + return result.precedance ? result.string() : result; +}; + +function setCallback(notation, args) { + var category, rule, match; + + for(category in this.checks) { + for(rule in this.checks[category]) { + if(match = (new RegExp(rule, 'i')).exec(notation)) { + args.push(match); + + if(category === 'builtin' || this.plugins[category]) { + this.checks[category][rule].apply( + this.plugins[category] || this, args + ); + } + } + } + } +} + +var rmove = /^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i, + rrender = /^prerender|show\.ready/i; + +PROTOTYPE.set = function(option, value) { + if(this.destroyed) { return this; } + + var rendered = this.rendered, + reposition = FALSE, + options = this.options, + checks = this.checks, + name; + + // Convert singular option/value pair into object form + if('string' === typeof option) { + name = option; option = {}; option[name] = value; + } + else { option = $.extend({}, option); } + + // Set all of the defined options to their new values + $.each(option, function(notation, value) { + if(rendered && rrender.test(notation)) { + delete option[notation]; return; + } + + // Set new obj value + var obj = convertNotation(options, notation.toLowerCase()), previous; + previous = obj[0][ obj[1] ]; + obj[0][ obj[1] ] = value && value.nodeType ? $(value) : value; + + // Also check if we need to reposition + reposition = rmove.test(notation) || reposition; + + // Set the new params for the callback + option[notation] = [obj[0], obj[1], value, previous]; + }); + + // Re-sanitize options + sanitizeOptions(options); + + /* + * Execute any valid callbacks for the set options + * Also set positioning flag so we don't get loads of redundant repositioning calls. + */ + this.positioning = TRUE; + $.each(option, $.proxy(setCallback, this)); + this.positioning = FALSE; + + // Update position if needed + if(this.rendered && this.tooltip[0].offsetWidth > 0 && reposition) { + this.reposition( options.position.target === 'mouse' ? NULL : this.cache.event ); + } + + return this; +}; +;PROTOTYPE._update = function(content, element, reposition) { + var self = this, + cache = this.cache; + + // Make sure tooltip is rendered and content is defined. If not return + if(!this.rendered || !content) { return FALSE; } + + // Use function to parse content + if($.isFunction(content)) { + content = content.call(this.elements.target, cache.event, this) || ''; + } + + // Handle deferred content + if($.isFunction(content.then)) { + cache.waiting = TRUE; + return content.then(function(c) { + cache.waiting = FALSE; + return self._update(c, element); + }, NULL, function(e) { + return self._update(e, element); + }); + } + + // If content is null... return false + if(content === FALSE || (!content && content !== '')) { return FALSE; } + + // Append new content if its a DOM array and show it if hidden + if(content.jquery && content.length > 0) { + element.empty().append( + content.css({ display: 'block', visibility: 'visible' }) + ); + } + + // Content is a regular string, insert the new content + else { element.html(content); } + + // Wait for content to be loaded, and reposition + return this._waitForContent(element).then(function(images) { + if(self.rendered && self.tooltip[0].offsetWidth > 0) { + self.reposition(cache.event, !images.length); + } + }); +}; + +PROTOTYPE._waitForContent = function(element) { + var cache = this.cache; + + // Set flag + cache.waiting = TRUE; + + // If imagesLoaded is included, ensure images have loaded and return promise + return ( $.fn.imagesLoaded ? element.imagesLoaded() : $.Deferred().resolve([]) ) + .done(function() { cache.waiting = FALSE; }) + .promise(); +}; + +PROTOTYPE._updateContent = function(content, reposition) { + this._update(content, this.elements.content, reposition); +}; + +PROTOTYPE._updateTitle = function(content, reposition) { + if(this._update(content, this.elements.title, reposition) === FALSE) { + this._removeTitle(FALSE); + } +}; + +PROTOTYPE._createTitle = function() +{ + var elements = this.elements, + id = this._id+'-title'; + + // Destroy previous title element, if present + if(elements.titlebar) { this._removeTitle(); } + + // Create title bar and title elements + elements.titlebar = $('
    ', { + 'class': NAMESPACE + '-titlebar ' + (this.options.style.widget ? createWidgetClass('header') : '') + }) + .append( + elements.title = $('
    ', { + 'id': id, + 'class': NAMESPACE + '-title', + 'aria-atomic': TRUE + }) + ) + .insertBefore(elements.content) + + // Button-specific events + .delegate('.qtip-close', 'mousedown keydown mouseup keyup mouseout', function(event) { + $(this).toggleClass('ui-state-active ui-state-focus', event.type.substr(-4) === 'down'); + }) + .delegate('.qtip-close', 'mouseover mouseout', function(event){ + $(this).toggleClass('ui-state-hover', event.type === 'mouseover'); + }); + + // Create button if enabled + if(this.options.content.button) { this._createButton(); } +}; + +PROTOTYPE._removeTitle = function(reposition) +{ + var elements = this.elements; + + if(elements.title) { + elements.titlebar.remove(); + elements.titlebar = elements.title = elements.button = NULL; + + // Reposition if enabled + if(reposition !== FALSE) { this.reposition(); } + } +}; +;PROTOTYPE._createPosClass = function(my) { + return NAMESPACE + '-pos-' + (my || this.options.position.my).abbrev(); +}; + +PROTOTYPE.reposition = function(event, effect) { + if(!this.rendered || this.positioning || this.destroyed) { return this; } + + // Set positioning flag + this.positioning = TRUE; + + var cache = this.cache, + tooltip = this.tooltip, + posOptions = this.options.position, + target = posOptions.target, + my = posOptions.my, + at = posOptions.at, + viewport = posOptions.viewport, + container = posOptions.container, + adjust = posOptions.adjust, + method = adjust.method.split(' '), + tooltipWidth = tooltip.outerWidth(FALSE), + tooltipHeight = tooltip.outerHeight(FALSE), + targetWidth = 0, + targetHeight = 0, + type = tooltip.css('position'), + position = { left: 0, top: 0 }, + visible = tooltip[0].offsetWidth > 0, + isScroll = event && event.type === 'scroll', + win = $(window), + doc = container[0].ownerDocument, + mouse = this.mouse, + pluginCalculations, offset, adjusted, newClass; + + // Check if absolute position was passed + if($.isArray(target) && target.length === 2) { + // Force left top and set position + at = { x: LEFT, y: TOP }; + position = { left: target[0], top: target[1] }; + } + + // Check if mouse was the target + else if(target === 'mouse') { + // Force left top to allow flipping + at = { x: LEFT, y: TOP }; + + // Use the mouse origin that caused the show event, if distance hiding is enabled + if((!adjust.mouse || this.options.hide.distance) && cache.origin && cache.origin.pageX) { + event = cache.origin; + } + + // Use cached event for resize/scroll events + else if(!event || (event && (event.type === 'resize' || event.type === 'scroll'))) { + event = cache.event; + } + + // Otherwise, use the cached mouse coordinates if available + else if(mouse && mouse.pageX) { + event = mouse; + } + + // Calculate body and container offset and take them into account below + if(type !== 'static') { position = container.offset(); } + if(doc.body.offsetWidth !== (window.innerWidth || doc.documentElement.clientWidth)) { + offset = $(document.body).offset(); + } + + // Use event coordinates for position + position = { + left: event.pageX - position.left + (offset && offset.left || 0), + top: event.pageY - position.top + (offset && offset.top || 0) + }; + + // Scroll events are a pain, some browsers + if(adjust.mouse && isScroll && mouse) { + position.left -= (mouse.scrollX || 0) - win.scrollLeft(); + position.top -= (mouse.scrollY || 0) - win.scrollTop(); + } + } + + // Target wasn't mouse or absolute... + else { + // Check if event targetting is being used + if(target === 'event') { + if(event && event.target && event.type !== 'scroll' && event.type !== 'resize') { + cache.target = $(event.target); + } + else if(!event.target) { + cache.target = this.elements.target; + } + } + else if(target !== 'event'){ + cache.target = $(target.jquery ? target : this.elements.target); + } + target = cache.target; + + // Parse the target into a jQuery object and make sure there's an element present + target = $(target).eq(0); + if(target.length === 0) { return this; } + + // Check if window or document is the target + else if(target[0] === document || target[0] === window) { + targetWidth = BROWSER.iOS ? window.innerWidth : target.width(); + targetHeight = BROWSER.iOS ? window.innerHeight : target.height(); + + if(target[0] === window) { + position = { + top: (viewport || target).scrollTop(), + left: (viewport || target).scrollLeft() + }; + } + } + + // Check if the target is an element + else if(PLUGINS.imagemap && target.is('area')) { + pluginCalculations = PLUGINS.imagemap(this, target, at, PLUGINS.viewport ? method : FALSE); + } + + // Check if the target is an SVG element + else if(PLUGINS.svg && target && target[0].ownerSVGElement) { + pluginCalculations = PLUGINS.svg(this, target, at, PLUGINS.viewport ? method : FALSE); + } + + // Otherwise use regular jQuery methods + else { + targetWidth = target.outerWidth(FALSE); + targetHeight = target.outerHeight(FALSE); + position = target.offset(); + } + + // Parse returned plugin values into proper variables + if(pluginCalculations) { + targetWidth = pluginCalculations.width; + targetHeight = pluginCalculations.height; + offset = pluginCalculations.offset; + position = pluginCalculations.position; + } + + // Adjust position to take into account offset parents + position = this.reposition.offset(target, position, container); + + // Adjust for position.fixed tooltips (and also iOS scroll bug in v3.2-4.0 & v4.3-4.3.2) + if((BROWSER.iOS > 3.1 && BROWSER.iOS < 4.1) || + (BROWSER.iOS >= 4.3 && BROWSER.iOS < 4.33) || + (!BROWSER.iOS && type === 'fixed') + ){ + position.left -= win.scrollLeft(); + position.top -= win.scrollTop(); + } + + // Adjust position relative to target + if(!pluginCalculations || (pluginCalculations && pluginCalculations.adjustable !== FALSE)) { + position.left += at.x === RIGHT ? targetWidth : at.x === CENTER ? targetWidth / 2 : 0; + position.top += at.y === BOTTOM ? targetHeight : at.y === CENTER ? targetHeight / 2 : 0; + } + } + + // Adjust position relative to tooltip + position.left += adjust.x + (my.x === RIGHT ? -tooltipWidth : my.x === CENTER ? -tooltipWidth / 2 : 0); + position.top += adjust.y + (my.y === BOTTOM ? -tooltipHeight : my.y === CENTER ? -tooltipHeight / 2 : 0); + + // Use viewport adjustment plugin if enabled + if(PLUGINS.viewport) { + adjusted = position.adjusted = PLUGINS.viewport( + this, position, posOptions, targetWidth, targetHeight, tooltipWidth, tooltipHeight + ); + + // Apply offsets supplied by positioning plugin (if used) + if(offset && adjusted.left) { position.left += offset.left; } + if(offset && adjusted.top) { position.top += offset.top; } + + // Apply any new 'my' position + if(adjusted.my) { this.position.my = adjusted.my; } + } + + // Viewport adjustment is disabled, set values to zero + else { position.adjusted = { left: 0, top: 0 }; } + + // Set tooltip position class if it's changed + if(cache.posClass !== (newClass = this._createPosClass(this.position.my))) { + tooltip.removeClass(cache.posClass).addClass( (cache.posClass = newClass) ); + } + + // tooltipmove event + if(!this._trigger('move', [position, viewport.elem || viewport], event)) { return this; } + delete position.adjusted; + + // If effect is disabled, target it mouse, no animation is defined or positioning gives NaN out, set CSS directly + if(effect === FALSE || !visible || isNaN(position.left) || isNaN(position.top) || target === 'mouse' || !$.isFunction(posOptions.effect)) { + tooltip.css(position); + } + + // Use custom function if provided + else if($.isFunction(posOptions.effect)) { + posOptions.effect.call(tooltip, this, $.extend({}, position)); + tooltip.queue(function(next) { + // Reset attributes to avoid cross-browser rendering bugs + $(this).css({ opacity: '', height: '' }); + if(BROWSER.ie) { this.style.removeAttribute('filter'); } + + next(); + }); + } + + // Set positioning flag + this.positioning = FALSE; + + return this; +}; + +// Custom (more correct for qTip!) offset calculator +PROTOTYPE.reposition.offset = function(elem, pos, container) { + if(!container[0]) { return pos; } + + var ownerDocument = $(elem[0].ownerDocument), + quirks = !!BROWSER.ie && document.compatMode !== 'CSS1Compat', + parent = container[0], + scrolled, position, parentOffset, overflow; + + function scroll(e, i) { + pos.left += i * e.scrollLeft(); + pos.top += i * e.scrollTop(); + } + + // Compensate for non-static containers offset + do { + if((position = $.css(parent, 'position')) !== 'static') { + if(position === 'fixed') { + parentOffset = parent.getBoundingClientRect(); + scroll(ownerDocument, -1); + } + else { + parentOffset = $(parent).position(); + parentOffset.left += (parseFloat($.css(parent, 'borderLeftWidth')) || 0); + parentOffset.top += (parseFloat($.css(parent, 'borderTopWidth')) || 0); + } + + pos.left -= parentOffset.left + (parseFloat($.css(parent, 'marginLeft')) || 0); + pos.top -= parentOffset.top + (parseFloat($.css(parent, 'marginTop')) || 0); + + // If this is the first parent element with an overflow of "scroll" or "auto", store it + if(!scrolled && (overflow = $.css(parent, 'overflow')) !== 'hidden' && overflow !== 'visible') { scrolled = $(parent); } + } + } + while((parent = parent.offsetParent)); + + // Compensate for containers scroll if it also has an offsetParent (or in IE quirks mode) + if(scrolled && (scrolled[0] !== ownerDocument[0] || quirks)) { + scroll(scrolled, 1); + } + + return pos; +}; + +// Corner class +var C = (CORNER = PROTOTYPE.reposition.Corner = function(corner, forceY) { + corner = ('' + corner).replace(/([A-Z])/, ' $1').replace(/middle/gi, CENTER).toLowerCase(); + this.x = (corner.match(/left|right/i) || corner.match(/center/) || ['inherit'])[0].toLowerCase(); + this.y = (corner.match(/top|bottom|center/i) || ['inherit'])[0].toLowerCase(); + this.forceY = !!forceY; + + var f = corner.charAt(0); + this.precedance = (f === 't' || f === 'b' ? Y : X); +}).prototype; + +C.invert = function(z, center) { + this[z] = this[z] === LEFT ? RIGHT : this[z] === RIGHT ? LEFT : center || this[z]; +}; + +C.string = function(join) { + var x = this.x, y = this.y; + + var result = x !== y ? + (x === 'center' || y !== 'center' && (this.precedance === Y || this.forceY) ? + [y,x] : [x,y] + ) : + [x]; + + return join !== false ? result.join(' ') : result; +}; + +C.abbrev = function() { + var result = this.string(false); + return result[0].charAt(0) + (result[1] && result[1].charAt(0) || ''); +}; + +C.clone = function() { + return new CORNER( this.string(), this.forceY ); +}; + +; +PROTOTYPE.toggle = function(state, event) { + var cache = this.cache, + options = this.options, + tooltip = this.tooltip; + + // Try to prevent flickering when tooltip overlaps show element + if(event) { + if((/over|enter/).test(event.type) && cache.event && (/out|leave/).test(cache.event.type) && + options.show.target.add(event.target).length === options.show.target.length && + tooltip.has(event.relatedTarget).length) { + return this; + } + + // Cache event + cache.event = $.event.fix(event); + } + + // If we're currently waiting and we've just hidden... stop it + this.waiting && !state && (this.hiddenDuringWait = TRUE); + + // Render the tooltip if showing and it isn't already + if(!this.rendered) { return state ? this.render(1) : this; } + else if(this.destroyed || this.disabled) { return this; } + + var type = state ? 'show' : 'hide', + opts = this.options[type], + otherOpts = this.options[ !state ? 'show' : 'hide' ], + posOptions = this.options.position, + contentOptions = this.options.content, + width = this.tooltip.css('width'), + visible = this.tooltip.is(':visible'), + animate = state || opts.target.length === 1, + sameTarget = !event || opts.target.length < 2 || cache.target[0] === event.target, + identicalState, allow, showEvent, delay, after; + + // Detect state if valid one isn't provided + if((typeof state).search('boolean|number')) { state = !visible; } + + // Check if the tooltip is in an identical state to the new would-be state + identicalState = !tooltip.is(':animated') && visible === state && sameTarget; + + // Fire tooltip(show/hide) event and check if destroyed + allow = !identicalState ? !!this._trigger(type, [90]) : NULL; + + // Check to make sure the tooltip wasn't destroyed in the callback + if(this.destroyed) { return this; } + + // If the user didn't stop the method prematurely and we're showing the tooltip, focus it + if(allow !== FALSE && state) { this.focus(event); } + + // If the state hasn't changed or the user stopped it, return early + if(!allow || identicalState) { return this; } + + // Set ARIA hidden attribute + $.attr(tooltip[0], 'aria-hidden', !!!state); + + // Execute state specific properties + if(state) { + // Store show origin coordinates + this.mouse && (cache.origin = $.event.fix(this.mouse)); + + // Update tooltip content & title if it's a dynamic function + if($.isFunction(contentOptions.text)) { this._updateContent(contentOptions.text, FALSE); } + if($.isFunction(contentOptions.title)) { this._updateTitle(contentOptions.title, FALSE); } + + // Cache mousemove events for positioning purposes (if not already tracking) + if(!trackingBound && posOptions.target === 'mouse' && posOptions.adjust.mouse) { + $(document).bind('mousemove.'+NAMESPACE, this._storeMouse); + trackingBound = TRUE; + } + + // Update the tooltip position (set width first to prevent viewport/max-width issues) + if(!width) { tooltip.css('width', tooltip.outerWidth(FALSE)); } + this.reposition(event, arguments[2]); + if(!width) { tooltip.css('width', ''); } + + // Hide other tooltips if tooltip is solo + if(!!opts.solo) { + (typeof opts.solo === 'string' ? $(opts.solo) : $(SELECTOR, opts.solo)) + .not(tooltip).not(opts.target).qtip('hide', $.Event('tooltipsolo')); + } + } + else { + // Clear show timer if we're hiding + clearTimeout(this.timers.show); + + // Remove cached origin on hide + delete cache.origin; + + // Remove mouse tracking event if not needed (all tracking qTips are hidden) + if(trackingBound && !$(SELECTOR+'[tracking="true"]:visible', opts.solo).not(tooltip).length) { + $(document).unbind('mousemove.'+NAMESPACE); + trackingBound = FALSE; + } + + // Blur the tooltip + this.blur(event); + } + + // Define post-animation, state specific properties + after = $.proxy(function() { + if(state) { + // Prevent antialias from disappearing in IE by removing filter + if(BROWSER.ie) { tooltip[0].style.removeAttribute('filter'); } + + // Remove overflow setting to prevent tip bugs + tooltip.css('overflow', ''); + + // Autofocus elements if enabled + if('string' === typeof opts.autofocus) { + $(this.options.show.autofocus, tooltip).focus(); + } + + // If set, hide tooltip when inactive for delay period + this.options.show.target.trigger('qtip-'+this.id+'-inactive'); + } + else { + // Reset CSS states + tooltip.css({ + display: '', + visibility: '', + opacity: '', + left: '', + top: '' + }); + } + + // tooltipvisible/tooltiphidden events + this._trigger(state ? 'visible' : 'hidden'); + }, this); + + // If no effect type is supplied, use a simple toggle + if(opts.effect === FALSE || animate === FALSE) { + tooltip[ type ](); + after(); + } + + // Use custom function if provided + else if($.isFunction(opts.effect)) { + tooltip.stop(1, 1); + opts.effect.call(tooltip, this); + tooltip.queue('fx', function(n) { + after(); n(); + }); + } + + // Use basic fade function by default + else { tooltip.fadeTo(90, state ? 1 : 0, after); } + + // If inactive hide method is set, active it + if(state) { opts.target.trigger('qtip-'+this.id+'-inactive'); } + + return this; +}; + +PROTOTYPE.show = function(event) { return this.toggle(TRUE, event); }; + +PROTOTYPE.hide = function(event) { return this.toggle(FALSE, event); }; +;PROTOTYPE.focus = function(event) { + if(!this.rendered || this.destroyed) { return this; } + + var qtips = $(SELECTOR), + tooltip = this.tooltip, + curIndex = parseInt(tooltip[0].style.zIndex, 10), + newIndex = QTIP.zindex + qtips.length, + focusedElem; + + // Only update the z-index if it has changed and tooltip is not already focused + if(!tooltip.hasClass(CLASS_FOCUS)) { + // tooltipfocus event + if(this._trigger('focus', [newIndex], event)) { + // Only update z-index's if they've changed + if(curIndex !== newIndex) { + // Reduce our z-index's and keep them properly ordered + qtips.each(function() { + if(this.style.zIndex > curIndex) { + this.style.zIndex = this.style.zIndex - 1; + } + }); + + // Fire blur event for focused tooltip + qtips.filter('.' + CLASS_FOCUS).qtip('blur', event); + } + + // Set the new z-index + tooltip.addClass(CLASS_FOCUS)[0].style.zIndex = newIndex; + } + } + + return this; +}; + +PROTOTYPE.blur = function(event) { + if(!this.rendered || this.destroyed) { return this; } + + // Set focused status to FALSE + this.tooltip.removeClass(CLASS_FOCUS); + + // tooltipblur event + this._trigger('blur', [ this.tooltip.css('zIndex') ], event); + + return this; +}; +;PROTOTYPE.disable = function(state) { + if(this.destroyed) { return this; } + + // If 'toggle' is passed, toggle the current state + if(state === 'toggle') { + state = !(this.rendered ? this.tooltip.hasClass(CLASS_DISABLED) : this.disabled); + } + + // Disable if no state passed + else if('boolean' !== typeof state) { + state = TRUE; + } + + if(this.rendered) { + this.tooltip.toggleClass(CLASS_DISABLED, state) + .attr('aria-disabled', state); + } + + this.disabled = !!state; + + return this; +}; + +PROTOTYPE.enable = function() { return this.disable(FALSE); }; +;PROTOTYPE._createButton = function() +{ + var self = this, + elements = this.elements, + tooltip = elements.tooltip, + button = this.options.content.button, + isString = typeof button === 'string', + close = isString ? button : 'Close tooltip'; + + if(elements.button) { elements.button.remove(); } + + // Use custom button if one was supplied by user, else use default + if(button.jquery) { + elements.button = button; + } + else { + elements.button = $('', { + 'class': 'qtip-close ' + (this.options.style.widget ? '' : NAMESPACE+'-icon'), + 'title': close, + 'aria-label': close + }) + .prepend( + $('', { + 'class': 'ui-icon ui-icon-close', + 'html': '×' + }) + ); + } + + // Create button and setup attributes + elements.button.appendTo(elements.titlebar || tooltip) + .attr('role', 'button') + .click(function(event) { + if(!tooltip.hasClass(CLASS_DISABLED)) { self.hide(event); } + return FALSE; + }); +}; + +PROTOTYPE._updateButton = function(button) +{ + // Make sure tooltip is rendered and if not, return + if(!this.rendered) { return FALSE; } + + var elem = this.elements.button; + if(button) { this._createButton(); } + else { elem.remove(); } +}; +;// Widget class creator +function createWidgetClass(cls) { + return WIDGET.concat('').join(cls ? '-'+cls+' ' : ' '); +} + +// Widget class setter method +PROTOTYPE._setWidget = function() +{ + var on = this.options.style.widget, + elements = this.elements, + tooltip = elements.tooltip, + disabled = tooltip.hasClass(CLASS_DISABLED); + + tooltip.removeClass(CLASS_DISABLED); + CLASS_DISABLED = on ? 'ui-state-disabled' : 'qtip-disabled'; + tooltip.toggleClass(CLASS_DISABLED, disabled); + + tooltip.toggleClass('ui-helper-reset '+createWidgetClass(), on).toggleClass(CLASS_DEFAULT, this.options.style.def && !on); + + if(elements.content) { + elements.content.toggleClass( createWidgetClass('content'), on); + } + if(elements.titlebar) { + elements.titlebar.toggleClass( createWidgetClass('header'), on); + } + if(elements.button) { + elements.button.toggleClass(NAMESPACE+'-icon', !on); + } +}; +;function delay(callback, duration) { + // If tooltip has displayed, start hide timer + if(duration > 0) { + return setTimeout( + $.proxy(callback, this), duration + ); + } + else{ callback.call(this); } +} + +function showMethod(event) { + if(this.tooltip.hasClass(CLASS_DISABLED)) { return; } + + // Clear hide timers + clearTimeout(this.timers.show); + clearTimeout(this.timers.hide); + + // Start show timer + this.timers.show = delay.call(this, + function() { this.toggle(TRUE, event); }, + this.options.show.delay + ); +} + +function hideMethod(event) { + if(this.tooltip.hasClass(CLASS_DISABLED) || this.destroyed) { return; } + + // Check if new target was actually the tooltip element + var relatedTarget = $(event.relatedTarget), + ontoTooltip = relatedTarget.closest(SELECTOR)[0] === this.tooltip[0], + ontoTarget = relatedTarget[0] === this.options.show.target[0]; + + // Clear timers and stop animation queue + clearTimeout(this.timers.show); + clearTimeout(this.timers.hide); + + // Prevent hiding if tooltip is fixed and event target is the tooltip. + // Or if mouse positioning is enabled and cursor momentarily overlaps + if(this !== relatedTarget[0] && + (this.options.position.target === 'mouse' && ontoTooltip) || + (this.options.hide.fixed && ( + (/mouse(out|leave|move)/).test(event.type) && (ontoTooltip || ontoTarget)) + )) + { + try { + event.preventDefault(); + event.stopImmediatePropagation(); + } catch(e) {} + + return; + } + + // If tooltip has displayed, start hide timer + this.timers.hide = delay.call(this, + function() { this.toggle(FALSE, event); }, + this.options.hide.delay, + this + ); +} + +function inactiveMethod(event) { + if(this.tooltip.hasClass(CLASS_DISABLED) || !this.options.hide.inactive) { return; } + + // Clear timer + clearTimeout(this.timers.inactive); + + this.timers.inactive = delay.call(this, + function(){ this.hide(event); }, + this.options.hide.inactive + ); +} + +function repositionMethod(event) { + if(this.rendered && this.tooltip[0].offsetWidth > 0) { this.reposition(event); } +} + +// Store mouse coordinates +PROTOTYPE._storeMouse = function(event) { + (this.mouse = $.event.fix(event)).type = 'mousemove'; + return this; +}; + +// Bind events +PROTOTYPE._bind = function(targets, events, method, suffix, context) { + if(!targets || !method || !events.length) { return; } + var ns = '.' + this._id + (suffix ? '-'+suffix : ''); + $(targets).bind( + (events.split ? events : events.join(ns + ' ')) + ns, + $.proxy(method, context || this) + ); + return this; +}; +PROTOTYPE._unbind = function(targets, suffix) { + targets && $(targets).unbind('.' + this._id + (suffix ? '-'+suffix : '')); + return this; +}; + +// Global delegation helper +function delegate(selector, events, method) { + $(document.body).delegate(selector, + (events.split ? events : events.join('.'+NAMESPACE + ' ')) + '.'+NAMESPACE, + function() { + var api = QTIP.api[ $.attr(this, ATTR_ID) ]; + api && !api.disabled && method.apply(api, arguments); + } + ); +} +// Event trigger +PROTOTYPE._trigger = function(type, args, event) { + var callback = $.Event('tooltip'+type); + callback.originalEvent = (event && $.extend({}, event)) || this.cache.event || NULL; + + this.triggering = type; + this.tooltip.trigger(callback, [this].concat(args || [])); + this.triggering = FALSE; + + return !callback.isDefaultPrevented(); +}; + +PROTOTYPE._bindEvents = function(showEvents, hideEvents, showTargets, hideTargets, showMethod, hideMethod) { + // Get tasrgets that lye within both + var similarTargets = showTargets.filter( hideTargets ).add( hideTargets.filter(showTargets) ), + toggleEvents = []; + + // If hide and show targets are the same... + if(similarTargets.length) { + + // Filter identical show/hide events + $.each(hideEvents, function(i, type) { + var showIndex = $.inArray(type, showEvents); + + // Both events are identical, remove from both hide and show events + // and append to toggleEvents + showIndex > -1 && toggleEvents.push( showEvents.splice( showIndex, 1 )[0] ); + }); + + // Toggle events are special case of identical show/hide events, which happen in sequence + if(toggleEvents.length) { + // Bind toggle events to the similar targets + this._bind(similarTargets, toggleEvents, function(event) { + var state = this.rendered ? this.tooltip[0].offsetWidth > 0 : false; + (state ? hideMethod : showMethod).call(this, event); + }); + + // Remove the similar targets from the regular show/hide bindings + showTargets = showTargets.not(similarTargets); + hideTargets = hideTargets.not(similarTargets); + } + } + + // Apply show/hide/toggle events + this._bind(showTargets, showEvents, showMethod); + this._bind(hideTargets, hideEvents, hideMethod); +}; + +PROTOTYPE._assignInitialEvents = function(event) { + var options = this.options, + showTarget = options.show.target, + hideTarget = options.hide.target, + showEvents = options.show.event ? $.trim('' + options.show.event).split(' ') : [], + hideEvents = options.hide.event ? $.trim('' + options.hide.event).split(' ') : []; + + // Catch remove/removeqtip events on target element to destroy redundant tooltips + this._bind(this.elements.target, ['remove', 'removeqtip'], function(event) { + this.destroy(true); + }, 'destroy'); + + /* + * Make sure hoverIntent functions properly by using mouseleave as a hide event if + * mouseenter/mouseout is used for show.event, even if it isn't in the users options. + */ + if(/mouse(over|enter)/i.test(options.show.event) && !/mouse(out|leave)/i.test(options.hide.event)) { + hideEvents.push('mouseleave'); + } + + /* + * Also make sure initial mouse targetting works correctly by caching mousemove coords + * on show targets before the tooltip has rendered. Also set onTarget when triggered to + * keep mouse tracking working. + */ + this._bind(showTarget, 'mousemove', function(event) { + this._storeMouse(event); + this.cache.onTarget = TRUE; + }); + + // Define hoverIntent function + function hoverIntent(event) { + // Only continue if tooltip isn't disabled + if(this.disabled || this.destroyed) { return FALSE; } + + // Cache the event data + this.cache.event = event && $.event.fix(event); + this.cache.target = event && $(event.target); + + // Start the event sequence + clearTimeout(this.timers.show); + this.timers.show = delay.call(this, + function() { this.render(typeof event === 'object' || options.show.ready); }, + options.prerender ? 0 : options.show.delay + ); + } + + // Filter and bind events + this._bindEvents(showEvents, hideEvents, showTarget, hideTarget, hoverIntent, function() { + if(!this.timers) { return FALSE; } + clearTimeout(this.timers.show); + }); + + // Prerendering is enabled, create tooltip now + if(options.show.ready || options.prerender) { hoverIntent.call(this, event); } +}; + +// Event assignment method +PROTOTYPE._assignEvents = function() { + var self = this, + options = this.options, + posOptions = options.position, + + tooltip = this.tooltip, + showTarget = options.show.target, + hideTarget = options.hide.target, + containerTarget = posOptions.container, + viewportTarget = posOptions.viewport, + documentTarget = $(document), + bodyTarget = $(document.body), + windowTarget = $(window), + + showEvents = options.show.event ? $.trim('' + options.show.event).split(' ') : [], + hideEvents = options.hide.event ? $.trim('' + options.hide.event).split(' ') : []; + + + // Assign passed event callbacks + $.each(options.events, function(name, callback) { + self._bind(tooltip, name === 'toggle' ? ['tooltipshow','tooltiphide'] : ['tooltip'+name], callback, null, tooltip); + }); + + // Hide tooltips when leaving current window/frame (but not select/option elements) + if(/mouse(out|leave)/i.test(options.hide.event) && options.hide.leave === 'window') { + this._bind(documentTarget, ['mouseout', 'blur'], function(event) { + if(!/select|option/.test(event.target.nodeName) && !event.relatedTarget) { + this.hide(event); + } + }); + } + + // Enable hide.fixed by adding appropriate class + if(options.hide.fixed) { + hideTarget = hideTarget.add( tooltip.addClass(CLASS_FIXED) ); + } + + /* + * Make sure hoverIntent functions properly by using mouseleave to clear show timer if + * mouseenter/mouseout is used for show.event, even if it isn't in the users options. + */ + else if(/mouse(over|enter)/i.test(options.show.event)) { + this._bind(hideTarget, 'mouseleave', function() { + clearTimeout(this.timers.show); + }); + } + + // Hide tooltip on document mousedown if unfocus events are enabled + if(('' + options.hide.event).indexOf('unfocus') > -1) { + this._bind(containerTarget.closest('html'), ['mousedown', 'touchstart'], function(event) { + var elem = $(event.target), + enabled = this.rendered && !this.tooltip.hasClass(CLASS_DISABLED) && this.tooltip[0].offsetWidth > 0, + isAncestor = elem.parents(SELECTOR).filter(this.tooltip[0]).length > 0; + + if(elem[0] !== this.target[0] && elem[0] !== this.tooltip[0] && !isAncestor && + !this.target.has(elem[0]).length && enabled + ) { + this.hide(event); + } + }); + } + + // Check if the tooltip hides when inactive + if('number' === typeof options.hide.inactive) { + // Bind inactive method to show target(s) as a custom event + this._bind(showTarget, 'qtip-'+this.id+'-inactive', inactiveMethod, 'inactive'); + + // Define events which reset the 'inactive' event handler + this._bind(hideTarget.add(tooltip), QTIP.inactiveEvents, inactiveMethod); + } + + // Filter and bind events + this._bindEvents(showEvents, hideEvents, showTarget, hideTarget, showMethod, hideMethod); + + // Mouse movement bindings + this._bind(showTarget.add(tooltip), 'mousemove', function(event) { + // Check if the tooltip hides when mouse is moved a certain distance + if('number' === typeof options.hide.distance) { + var origin = this.cache.origin || {}, + limit = this.options.hide.distance, + abs = Math.abs; + + // Check if the movement has gone beyond the limit, and hide it if so + if(abs(event.pageX - origin.pageX) >= limit || abs(event.pageY - origin.pageY) >= limit) { + this.hide(event); + } + } + + // Cache mousemove coords on show targets + this._storeMouse(event); + }); + + // Mouse positioning events + if(posOptions.target === 'mouse') { + // If mouse adjustment is on... + if(posOptions.adjust.mouse) { + // Apply a mouseleave event so we don't get problems with overlapping + if(options.hide.event) { + // Track if we're on the target or not + this._bind(showTarget, ['mouseenter', 'mouseleave'], function(event) { + if(!this.cache) {return FALSE; } + this.cache.onTarget = event.type === 'mouseenter'; + }); + } + + // Update tooltip position on mousemove + this._bind(documentTarget, 'mousemove', function(event) { + // Update the tooltip position only if the tooltip is visible and adjustment is enabled + if(this.rendered && this.cache.onTarget && !this.tooltip.hasClass(CLASS_DISABLED) && this.tooltip[0].offsetWidth > 0) { + this.reposition(event); + } + }); + } + } + + // Adjust positions of the tooltip on window resize if enabled + if(posOptions.adjust.resize || viewportTarget.length) { + this._bind( $.event.special.resize ? viewportTarget : windowTarget, 'resize', repositionMethod ); + } + + // Adjust tooltip position on scroll of the window or viewport element if present + if(posOptions.adjust.scroll) { + this._bind( windowTarget.add(posOptions.container), 'scroll', repositionMethod ); + } +}; + +// Un-assignment method +PROTOTYPE._unassignEvents = function() { + var options = this.options, + showTargets = options.show.target, + hideTargets = options.hide.target, + targets = $.grep([ + this.elements.target[0], + this.rendered && this.tooltip[0], + options.position.container[0], + options.position.viewport[0], + options.position.container.closest('html')[0], // unfocus + window, + document + ], function(i) { + return typeof i === 'object'; + }); + + // Add show and hide targets if they're valid + if(showTargets && showTargets.toArray) { + targets = targets.concat(showTargets.toArray()); + } + if(hideTargets && hideTargets.toArray) { + targets = targets.concat(hideTargets.toArray()); + } + + // Unbind the events + this._unbind(targets) + ._unbind(targets, 'destroy') + ._unbind(targets, 'inactive'); +}; + +// Apply common event handlers using delegate (avoids excessive .bind calls!) +$(function() { + delegate(SELECTOR, ['mouseenter', 'mouseleave'], function(event) { + var state = event.type === 'mouseenter', + tooltip = $(event.currentTarget), + target = $(event.relatedTarget || event.target), + options = this.options; + + // On mouseenter... + if(state) { + // Focus the tooltip on mouseenter (z-index stacking) + this.focus(event); + + // Clear hide timer on tooltip hover to prevent it from closing + tooltip.hasClass(CLASS_FIXED) && !tooltip.hasClass(CLASS_DISABLED) && clearTimeout(this.timers.hide); + } + + // On mouseleave... + else { + // When mouse tracking is enabled, hide when we leave the tooltip and not onto the show target (if a hide event is set) + if(options.position.target === 'mouse' && options.position.adjust.mouse && + options.hide.event && options.show.target && !target.closest(options.show.target[0]).length) { + this.hide(event); + } + } + + // Add hover class + tooltip.toggleClass(CLASS_HOVER, state); + }); + + // Define events which reset the 'inactive' event handler + delegate('['+ATTR_ID+']', INACTIVE_EVENTS, inactiveMethod); +}); +;// Initialization method +function init(elem, id, opts) { + var obj, posOptions, attr, config, title, + + // Setup element references + docBody = $(document.body), + + // Use document body instead of document element if needed + newTarget = elem[0] === document ? docBody : elem, + + // Grab metadata from element if plugin is present + metadata = (elem.metadata) ? elem.metadata(opts.metadata) : NULL, + + // If metadata type if HTML5, grab 'name' from the object instead, or use the regular data object otherwise + metadata5 = opts.metadata.type === 'html5' && metadata ? metadata[opts.metadata.name] : NULL, + + // Grab data from metadata.name (or data-qtipopts as fallback) using .data() method, + html5 = elem.data(opts.metadata.name || 'qtipopts'); + + // If we don't get an object returned attempt to parse it manualyl without parseJSON + try { html5 = typeof html5 === 'string' ? $.parseJSON(html5) : html5; } catch(e) {} + + // Merge in and sanitize metadata + config = $.extend(TRUE, {}, QTIP.defaults, opts, + typeof html5 === 'object' ? sanitizeOptions(html5) : NULL, + sanitizeOptions(metadata5 || metadata)); + + // Re-grab our positioning options now we've merged our metadata and set id to passed value + posOptions = config.position; + config.id = id; + + // Setup missing content if none is detected + if('boolean' === typeof config.content.text) { + attr = elem.attr(config.content.attr); + + // Grab from supplied attribute if available + if(config.content.attr !== FALSE && attr) { config.content.text = attr; } + + // No valid content was found, abort render + else { return FALSE; } + } + + // Setup target options + if(!posOptions.container.length) { posOptions.container = docBody; } + if(posOptions.target === FALSE) { posOptions.target = newTarget; } + if(config.show.target === FALSE) { config.show.target = newTarget; } + if(config.show.solo === TRUE) { config.show.solo = posOptions.container.closest('body'); } + if(config.hide.target === FALSE) { config.hide.target = newTarget; } + if(config.position.viewport === TRUE) { config.position.viewport = posOptions.container; } + + // Ensure we only use a single container + posOptions.container = posOptions.container.eq(0); + + // Convert position corner values into x and y strings + posOptions.at = new CORNER(posOptions.at, TRUE); + posOptions.my = new CORNER(posOptions.my); + + // Destroy previous tooltip if overwrite is enabled, or skip element if not + if(elem.data(NAMESPACE)) { + if(config.overwrite) { + elem.qtip('destroy', true); + } + else if(config.overwrite === FALSE) { + return FALSE; + } + } + + // Add has-qtip attribute + elem.attr(ATTR_HAS, id); + + // Remove title attribute and store it if present + if(config.suppress && (title = elem.attr('title'))) { + // Final attr call fixes event delegatiom and IE default tooltip showing problem + elem.removeAttr('title').attr(oldtitle, title).attr('title', ''); + } + + // Initialize the tooltip and add API reference + obj = new QTip(elem, config, id, !!attr); + elem.data(NAMESPACE, obj); + + return obj; +} + +// jQuery $.fn extension method +QTIP = $.fn.qtip = function(options, notation, newValue) +{ + var command = ('' + options).toLowerCase(), // Parse command + returned = NULL, + args = $.makeArray(arguments).slice(1), + event = args[args.length - 1], + opts = this[0] ? $.data(this[0], NAMESPACE) : NULL; + + // Check for API request + if((!arguments.length && opts) || command === 'api') { + return opts; + } + + // Execute API command if present + else if('string' === typeof options) { + this.each(function() { + var api = $.data(this, NAMESPACE); + if(!api) { return TRUE; } + + // Cache the event if possible + if(event && event.timeStamp) { api.cache.event = event; } + + // Check for specific API commands + if(notation && (command === 'option' || command === 'options')) { + if(newValue !== undefined || $.isPlainObject(notation)) { + api.set(notation, newValue); + } + else { + returned = api.get(notation); + return FALSE; + } + } + + // Execute API command + else if(api[command]) { + api[command].apply(api, args); + } + }); + + return returned !== NULL ? returned : this; + } + + // No API commands. validate provided options and setup qTips + else if('object' === typeof options || !arguments.length) { + // Sanitize options first + opts = sanitizeOptions($.extend(TRUE, {}, options)); + + return this.each(function(i) { + var api, id; + + // Find next available ID, or use custom ID if provided + id = $.isArray(opts.id) ? opts.id[i] : opts.id; + id = !id || id === FALSE || id.length < 1 || QTIP.api[id] ? QTIP.nextid++ : id; + + // Initialize the qTip and re-grab newly sanitized options + api = init($(this), id, opts); + if(api === FALSE) { return TRUE; } + else { QTIP.api[id] = api; } + + // Initialize plugins + $.each(PLUGINS, function() { + if(this.initialize === 'initialize') { this(api); } + }); + + // Assign initial pre-render events + api._assignInitialEvents(event); + }); + } +}; + +// Expose class +$.qtip = QTip; + +// Populated in render method +QTIP.api = {}; +;$.each({ + /* Allow other plugins to successfully retrieve the title of an element with a qTip applied */ + attr: function(attr, val) { + if(this.length) { + var self = this[0], + title = 'title', + api = $.data(self, 'qtip'); + + if(attr === title && api && 'object' === typeof api && api.options.suppress) { + if(arguments.length < 2) { + return $.attr(self, oldtitle); + } + + // If qTip is rendered and title was originally used as content, update it + if(api && api.options.content.attr === title && api.cache.attr) { + api.set('content.text', val); + } + + // Use the regular attr method to set, then cache the result + return this.attr(oldtitle, val); + } + } + + return $.fn['attr'+replaceSuffix].apply(this, arguments); + }, + + /* Allow clone to correctly retrieve cached title attributes */ + clone: function(keepData) { + var titles = $([]), title = 'title', + + // Clone our element using the real clone method + elems = $.fn['clone'+replaceSuffix].apply(this, arguments); + + // Grab all elements with an oldtitle set, and change it to regular title attribute, if keepData is false + if(!keepData) { + elems.filter('['+oldtitle+']').attr('title', function() { + return $.attr(this, oldtitle); + }) + .removeAttr(oldtitle); + } + + return elems; + } +}, function(name, func) { + if(!func || $.fn[name+replaceSuffix]) { return TRUE; } + + var old = $.fn[name+replaceSuffix] = $.fn[name]; + $.fn[name] = function() { + return func.apply(this, arguments) || old.apply(this, arguments); + }; +}); + +/* Fire off 'removeqtip' handler in $.cleanData if jQuery UI not present (it already does similar). + * This snippet is taken directly from jQuery UI source code found here: + * http://code.jquery.com/ui/jquery-ui-git.js + */ +if(!$.ui) { + $['cleanData'+replaceSuffix] = $.cleanData; + $.cleanData = function( elems ) { + for(var i = 0, elem; (elem = $( elems[i] )).length; i++) { + if(elem.attr(ATTR_HAS)) { + try { elem.triggerHandler('removeqtip'); } + catch( e ) {} + } + } + $['cleanData'+replaceSuffix].apply(this, arguments); + }; +} +;// qTip version +QTIP.version = '2.2.1'; + +// Base ID for all qTips +QTIP.nextid = 0; + +// Inactive events array +QTIP.inactiveEvents = INACTIVE_EVENTS; + +// Base z-index for all qTips +QTIP.zindex = 15000; + +// Define configuration defaults +QTIP.defaults = { + prerender: FALSE, + id: FALSE, + overwrite: TRUE, + suppress: TRUE, + content: { + text: TRUE, + attr: 'title', + title: FALSE, + button: FALSE + }, + position: { + my: 'top left', + at: 'bottom right', + target: FALSE, + container: FALSE, + viewport: FALSE, + adjust: { + x: 0, y: 0, + mouse: TRUE, + scroll: TRUE, + resize: TRUE, + method: 'flipinvert flipinvert' + }, + effect: function(api, pos, viewport) { + $(this).animate(pos, { + duration: 200, + queue: FALSE + }); + } + }, + show: { + target: FALSE, + event: 'mouseenter', + effect: TRUE, + delay: 90, + solo: FALSE, + ready: FALSE, + autofocus: FALSE + }, + hide: { + target: FALSE, + event: 'mouseleave', + effect: TRUE, + delay: 0, + fixed: FALSE, + inactive: FALSE, + leave: 'window', + distance: FALSE + }, + style: { + classes: '', + widget: FALSE, + width: FALSE, + height: FALSE, + def: TRUE + }, + events: { + render: NULL, + move: NULL, + show: NULL, + hide: NULL, + toggle: NULL, + visible: NULL, + hidden: NULL, + focus: NULL, + blur: NULL + } +}; +;var TIP, + +// .bind()/.on() namespace +TIPNS = '.qtip-tip', + +// Common CSS strings +MARGIN = 'margin', +BORDER = 'border', +COLOR = 'color', +BG_COLOR = 'background-color', +TRANSPARENT = 'transparent', +IMPORTANT = ' !important', + +// Check if the browser supports elements +HASCANVAS = !!document.createElement('canvas').getContext, + +// Invalid colour values used in parseColours() +INVALID = /rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i; + +// Camel-case method, taken from jQuery source +// http://code.jquery.com/jquery-1.8.0.js +function camel(s) { return s.charAt(0).toUpperCase() + s.slice(1); } + +/* + * Modified from Modernizr's testPropsAll() + * http://modernizr.com/downloads/modernizr-latest.js + */ +var cssProps = {}, cssPrefixes = ["Webkit", "O", "Moz", "ms"]; +function vendorCss(elem, prop) { + var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1), + props = (prop + ' ' + cssPrefixes.join(ucProp + ' ') + ucProp).split(' '), + cur, val, i = 0; + + // If the property has already been mapped... + if(cssProps[prop]) { return elem.css(cssProps[prop]); } + + while((cur = props[i++])) { + if((val = elem.css(cur)) !== undefined) { + return cssProps[prop] = cur, val; + } + } +} + +// Parse a given elements CSS property into an int +function intCss(elem, prop) { + return Math.ceil(parseFloat(vendorCss(elem, prop))); +} + + +// VML creation (for IE only) +if(!HASCANVAS) { + var createVML = function(tag, props, style) { + return ''; + }; +} + +// Canvas only definitions +else { + var PIXEL_RATIO = window.devicePixelRatio || 1, + BACKING_STORE_RATIO = (function() { + var context = document.createElement('canvas').getContext('2d'); + return context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || + context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || 1; + }()), + SCALE = PIXEL_RATIO / BACKING_STORE_RATIO; +} + + +function Tip(qtip, options) { + this._ns = 'tip'; + this.options = options; + this.offset = options.offset; + this.size = [ options.width, options.height ]; + + // Initialize + this.init( (this.qtip = qtip) ); +} + +$.extend(Tip.prototype, { + init: function(qtip) { + var context, tip; + + // Create tip element and prepend to the tooltip + tip = this.element = qtip.elements.tip = $('
    ', { 'class': NAMESPACE+'-tip' }).prependTo(qtip.tooltip); + + // Create tip drawing element(s) + if(HASCANVAS) { + // save() as soon as we create the canvas element so FF2 doesn't bork on our first restore()! + context = $('').appendTo(this.element)[0].getContext('2d'); + + // Setup constant parameters + context.lineJoin = 'miter'; + context.miterLimit = 100000; + context.save(); + } + else { + context = createVML('shape', 'coordorigin="0,0"', 'position:absolute;'); + this.element.html(context + context); + + // Prevent mousing down on the tip since it causes problems with .live() handling in IE due to VML + qtip._bind( $('*', tip).add(tip), ['click', 'mousedown'], function(event) { event.stopPropagation(); }, this._ns); + } + + // Bind update events + qtip._bind(qtip.tooltip, 'tooltipmove', this.reposition, this._ns, this); + + // Create it + this.create(); + }, + + _swapDimensions: function() { + this.size[0] = this.options.height; + this.size[1] = this.options.width; + }, + _resetDimensions: function() { + this.size[0] = this.options.width; + this.size[1] = this.options.height; + }, + + _useTitle: function(corner) { + var titlebar = this.qtip.elements.titlebar; + return titlebar && ( + corner.y === TOP || (corner.y === CENTER && this.element.position().top + (this.size[1] / 2) + this.options.offset < titlebar.outerHeight(TRUE)) + ); + }, + + _parseCorner: function(corner) { + var my = this.qtip.options.position.my; + + // Detect corner and mimic properties + if(corner === FALSE || my === FALSE) { + corner = FALSE; + } + else if(corner === TRUE) { + corner = new CORNER( my.string() ); + } + else if(!corner.string) { + corner = new CORNER(corner); + corner.fixed = TRUE; + } + + return corner; + }, + + _parseWidth: function(corner, side, use) { + var elements = this.qtip.elements, + prop = BORDER + camel(side) + 'Width'; + + return (use ? intCss(use, prop) : ( + intCss(elements.content, prop) || + intCss(this._useTitle(corner) && elements.titlebar || elements.content, prop) || + intCss(elements.tooltip, prop) + )) || 0; + }, + + _parseRadius: function(corner) { + var elements = this.qtip.elements, + prop = BORDER + camel(corner.y) + camel(corner.x) + 'Radius'; + + return BROWSER.ie < 9 ? 0 : + intCss(this._useTitle(corner) && elements.titlebar || elements.content, prop) || + intCss(elements.tooltip, prop) || 0; + }, + + _invalidColour: function(elem, prop, compare) { + var val = elem.css(prop); + return !val || (compare && val === elem.css(compare)) || INVALID.test(val) ? FALSE : val; + }, + + _parseColours: function(corner) { + var elements = this.qtip.elements, + tip = this.element.css('cssText', ''), + borderSide = BORDER + camel(corner[ corner.precedance ]) + camel(COLOR), + colorElem = this._useTitle(corner) && elements.titlebar || elements.content, + css = this._invalidColour, color = []; + + // Attempt to detect the background colour from various elements, left-to-right precedance + color[0] = css(tip, BG_COLOR) || css(colorElem, BG_COLOR) || css(elements.content, BG_COLOR) || + css(elements.tooltip, BG_COLOR) || tip.css(BG_COLOR); + + // Attempt to detect the correct border side colour from various elements, left-to-right precedance + color[1] = css(tip, borderSide, COLOR) || css(colorElem, borderSide, COLOR) || + css(elements.content, borderSide, COLOR) || css(elements.tooltip, borderSide, COLOR) || elements.tooltip.css(borderSide); + + // Reset background and border colours + $('*', tip).add(tip).css('cssText', BG_COLOR+':'+TRANSPARENT+IMPORTANT+';'+BORDER+':0'+IMPORTANT+';'); + + return color; + }, + + _calculateSize: function(corner) { + var y = corner.precedance === Y, + width = this.options['width'], + height = this.options['height'], + isCenter = corner.abbrev() === 'c', + base = (y ? width: height) * (isCenter ? 0.5 : 1), + pow = Math.pow, + round = Math.round, + bigHyp, ratio, result, + + smallHyp = Math.sqrt( pow(base, 2) + pow(height, 2) ), + hyp = [ (this.border / base) * smallHyp, (this.border / height) * smallHyp ]; + + hyp[2] = Math.sqrt( pow(hyp[0], 2) - pow(this.border, 2) ); + hyp[3] = Math.sqrt( pow(hyp[1], 2) - pow(this.border, 2) ); + + bigHyp = smallHyp + hyp[2] + hyp[3] + (isCenter ? 0 : hyp[0]); + ratio = bigHyp / smallHyp; + + result = [ round(ratio * width), round(ratio * height) ]; + return y ? result : result.reverse(); + }, + + // Tip coordinates calculator + _calculateTip: function(corner, size, scale) { + scale = scale || 1; + size = size || this.size; + + var width = size[0] * scale, + height = size[1] * scale, + width2 = Math.ceil(width / 2), height2 = Math.ceil(height / 2), + + // Define tip coordinates in terms of height and width values + tips = { + br: [0,0, width,height, width,0], + bl: [0,0, width,0, 0,height], + tr: [0,height, width,0, width,height], + tl: [0,0, 0,height, width,height], + tc: [0,height, width2,0, width,height], + bc: [0,0, width,0, width2,height], + rc: [0,0, width,height2, 0,height], + lc: [width,0, width,height, 0,height2] + }; + + // Set common side shapes + tips.lt = tips.br; tips.rt = tips.bl; + tips.lb = tips.tr; tips.rb = tips.tl; + + return tips[ corner.abbrev() ]; + }, + + // Tip coordinates drawer (canvas) + _drawCoords: function(context, coords) { + context.beginPath(); + context.moveTo(coords[0], coords[1]); + context.lineTo(coords[2], coords[3]); + context.lineTo(coords[4], coords[5]); + context.closePath(); + }, + + create: function() { + // Determine tip corner + var c = this.corner = (HASCANVAS || BROWSER.ie) && this._parseCorner(this.options.corner); + + // If we have a tip corner... + if( (this.enabled = !!this.corner && this.corner.abbrev() !== 'c') ) { + // Cache it + this.qtip.cache.corner = c.clone(); + + // Create it + this.update(); + } + + // Toggle tip element + this.element.toggle(this.enabled); + + return this.corner; + }, + + update: function(corner, position) { + if(!this.enabled) { return this; } + + var elements = this.qtip.elements, + tip = this.element, + inner = tip.children(), + options = this.options, + curSize = this.size, + mimic = options.mimic, + round = Math.round, + color, precedance, context, + coords, bigCoords, translate, newSize, border, BACKING_STORE_RATIO; + + // Re-determine tip if not already set + if(!corner) { corner = this.qtip.cache.corner || this.corner; } + + // Use corner property if we detect an invalid mimic value + if(mimic === FALSE) { mimic = corner; } + + // Otherwise inherit mimic properties from the corner object as necessary + else { + mimic = new CORNER(mimic); + mimic.precedance = corner.precedance; + + if(mimic.x === 'inherit') { mimic.x = corner.x; } + else if(mimic.y === 'inherit') { mimic.y = corner.y; } + else if(mimic.x === mimic.y) { + mimic[ corner.precedance ] = corner[ corner.precedance ]; + } + } + precedance = mimic.precedance; + + // Ensure the tip width.height are relative to the tip position + if(corner.precedance === X) { this._swapDimensions(); } + else { this._resetDimensions(); } + + // Update our colours + color = this.color = this._parseColours(corner); + + // Detect border width, taking into account colours + if(color[1] !== TRANSPARENT) { + // Grab border width + border = this.border = this._parseWidth(corner, corner[corner.precedance]); + + // If border width isn't zero, use border color as fill if it's not invalid (1.0 style tips) + if(options.border && border < 1 && !INVALID.test(color[1])) { color[0] = color[1]; } + + // Set border width (use detected border width if options.border is true) + this.border = border = options.border !== TRUE ? options.border : border; + } + + // Border colour was invalid, set border to zero + else { this.border = border = 0; } + + // Determine tip size + newSize = this.size = this._calculateSize(corner); + tip.css({ + width: newSize[0], + height: newSize[1], + lineHeight: newSize[1]+'px' + }); + + // Calculate tip translation + if(corner.precedance === Y) { + translate = [ + round(mimic.x === LEFT ? border : mimic.x === RIGHT ? newSize[0] - curSize[0] - border : (newSize[0] - curSize[0]) / 2), + round(mimic.y === TOP ? newSize[1] - curSize[1] : 0) + ]; + } + else { + translate = [ + round(mimic.x === LEFT ? newSize[0] - curSize[0] : 0), + round(mimic.y === TOP ? border : mimic.y === BOTTOM ? newSize[1] - curSize[1] - border : (newSize[1] - curSize[1]) / 2) + ]; + } + + // Canvas drawing implementation + if(HASCANVAS) { + // Grab canvas context and clear/save it + context = inner[0].getContext('2d'); + context.restore(); context.save(); + context.clearRect(0,0,6000,6000); + + // Calculate coordinates + coords = this._calculateTip(mimic, curSize, SCALE); + bigCoords = this._calculateTip(mimic, this.size, SCALE); + + // Set the canvas size using calculated size + inner.attr(WIDTH, newSize[0] * SCALE).attr(HEIGHT, newSize[1] * SCALE); + inner.css(WIDTH, newSize[0]).css(HEIGHT, newSize[1]); + + // Draw the outer-stroke tip + this._drawCoords(context, bigCoords); + context.fillStyle = color[1]; + context.fill(); + + // Draw the actual tip + context.translate(translate[0] * SCALE, translate[1] * SCALE); + this._drawCoords(context, coords); + context.fillStyle = color[0]; + context.fill(); + } + + // VML (IE Proprietary implementation) + else { + // Calculate coordinates + coords = this._calculateTip(mimic); + + // Setup coordinates string + coords = 'm' + coords[0] + ',' + coords[1] + ' l' + coords[2] + + ',' + coords[3] + ' ' + coords[4] + ',' + coords[5] + ' xe'; + + // Setup VML-specific offset for pixel-perfection + translate[2] = border && /^(r|b)/i.test(corner.string()) ? + BROWSER.ie === 8 ? 2 : 1 : 0; + + // Set initial CSS + inner.css({ + coordsize: (newSize[0]+border) + ' ' + (newSize[1]+border), + antialias: ''+(mimic.string().indexOf(CENTER) > -1), + left: translate[0] - (translate[2] * Number(precedance === X)), + top: translate[1] - (translate[2] * Number(precedance === Y)), + width: newSize[0] + border, + height: newSize[1] + border + }) + .each(function(i) { + var $this = $(this); + + // Set shape specific attributes + $this[ $this.prop ? 'prop' : 'attr' ]({ + coordsize: (newSize[0]+border) + ' ' + (newSize[1]+border), + path: coords, + fillcolor: color[0], + filled: !!i, + stroked: !i + }) + .toggle(!!(border || i)); + + // Check if border is enabled and add stroke element + !i && $this.html( createVML( + 'stroke', 'weight="'+(border*2)+'px" color="'+color[1]+'" miterlimit="1000" joinstyle="miter"' + ) ); + }); + } + + // Opera bug #357 - Incorrect tip position + // https://github.com/Craga89/qTip2/issues/367 + window.opera && setTimeout(function() { + elements.tip.css({ + display: 'inline-block', + visibility: 'visible' + }); + }, 1); + + // Position if needed + if(position !== FALSE) { this.calculate(corner, newSize); } + }, + + calculate: function(corner, size) { + if(!this.enabled) { return FALSE; } + + var self = this, + elements = this.qtip.elements, + tip = this.element, + userOffset = this.options.offset, + isWidget = elements.tooltip.hasClass('ui-widget'), + position = { }, + precedance, corners; + + // Inherit corner if not provided + corner = corner || this.corner; + precedance = corner.precedance; + + // Determine which tip dimension to use for adjustment + size = size || this._calculateSize(corner); + + // Setup corners and offset array + corners = [ corner.x, corner.y ]; + if(precedance === X) { corners.reverse(); } + + // Calculate tip position + $.each(corners, function(i, side) { + var b, bc, br; + + if(side === CENTER) { + b = precedance === Y ? LEFT : TOP; + position[ b ] = '50%'; + position[MARGIN+'-' + b] = -Math.round(size[ precedance === Y ? 0 : 1 ] / 2) + userOffset; + } + else { + b = self._parseWidth(corner, side, elements.tooltip); + bc = self._parseWidth(corner, side, elements.content); + br = self._parseRadius(corner); + + position[ side ] = Math.max(-self.border, i ? bc : (userOffset + (br > b ? br : -b))); + } + }); + + // Adjust for tip size + position[ corner[precedance] ] -= size[ precedance === X ? 0 : 1 ]; + + // Set and return new position + tip.css({ margin: '', top: '', bottom: '', left: '', right: '' }).css(position); + return position; + }, + + reposition: function(event, api, pos, viewport) { + if(!this.enabled) { return; } + + var cache = api.cache, + newCorner = this.corner.clone(), + adjust = pos.adjusted, + method = api.options.position.adjust.method.split(' '), + horizontal = method[0], + vertical = method[1] || method[0], + shift = { left: FALSE, top: FALSE, x: 0, y: 0 }, + offset, css = {}, props; + + function shiftflip(direction, precedance, popposite, side, opposite) { + // Horizontal - Shift or flip method + if(direction === SHIFT && newCorner.precedance === precedance && adjust[side] && newCorner[popposite] !== CENTER) { + newCorner.precedance = newCorner.precedance === X ? Y : X; + } + else if(direction !== SHIFT && adjust[side]){ + newCorner[precedance] = newCorner[precedance] === CENTER ? + (adjust[side] > 0 ? side : opposite) : (newCorner[precedance] === side ? opposite : side); + } + } + + function shiftonly(xy, side, opposite) { + if(newCorner[xy] === CENTER) { + css[MARGIN+'-'+side] = shift[xy] = offset[MARGIN+'-'+side] - adjust[side]; + } + else { + props = offset[opposite] !== undefined ? + [ adjust[side], -offset[side] ] : [ -adjust[side], offset[side] ]; + + if( (shift[xy] = Math.max(props[0], props[1])) > props[0] ) { + pos[side] -= adjust[side]; + shift[side] = FALSE; + } + + css[ offset[opposite] !== undefined ? opposite : side ] = shift[xy]; + } + } + + // If our tip position isn't fixed e.g. doesn't adjust with viewport... + if(this.corner.fixed !== TRUE) { + // Perform shift/flip adjustments + shiftflip(horizontal, X, Y, LEFT, RIGHT); + shiftflip(vertical, Y, X, TOP, BOTTOM); + + // Update and redraw the tip if needed (check cached details of last drawn tip) + if(newCorner.string() !== cache.corner.string() || cache.cornerTop !== adjust.top || cache.cornerLeft !== adjust.left) { + this.update(newCorner, FALSE); + } + } + + // Setup tip offset properties + offset = this.calculate(newCorner); + + // Readjust offset object to make it left/top + if(offset.right !== undefined) { offset.left = -offset.right; } + if(offset.bottom !== undefined) { offset.top = -offset.bottom; } + offset.user = this.offset; + + // Perform shift adjustments + if(shift.left = (horizontal === SHIFT && !!adjust.left)) { shiftonly(X, LEFT, RIGHT); } + if(shift.top = (vertical === SHIFT && !!adjust.top)) { shiftonly(Y, TOP, BOTTOM); } + + /* + * If the tip is adjusted in both dimensions, or in a + * direction that would cause it to be anywhere but the + * outer border, hide it! + */ + this.element.css(css).toggle( + !((shift.x && shift.y) || (newCorner.x === CENTER && shift.y) || (newCorner.y === CENTER && shift.x)) + ); + + // Adjust position to accomodate tip dimensions + pos.left -= offset.left.charAt ? offset.user : + horizontal !== SHIFT || shift.top || !shift.left && !shift.top ? offset.left + this.border : 0; + pos.top -= offset.top.charAt ? offset.user : + vertical !== SHIFT || shift.left || !shift.left && !shift.top ? offset.top + this.border : 0; + + // Cache details + cache.cornerLeft = adjust.left; cache.cornerTop = adjust.top; + cache.corner = newCorner.clone(); + }, + + destroy: function() { + // Unbind events + this.qtip._unbind(this.qtip.tooltip, this._ns); + + // Remove the tip element(s) + if(this.qtip.elements.tip) { + this.qtip.elements.tip.find('*') + .remove().end().remove(); + } + } +}); + +TIP = PLUGINS.tip = function(api) { + return new Tip(api, api.options.style.tip); +}; + +// Initialize tip on render +TIP.initialize = 'render'; + +// Setup plugin sanitization options +TIP.sanitize = function(options) { + if(options.style && 'tip' in options.style) { + var opts = options.style.tip; + if(typeof opts !== 'object') { opts = options.style.tip = { corner: opts }; } + if(!(/string|boolean/i).test(typeof opts.corner)) { opts.corner = TRUE; } + } +}; + +// Add new option checks for the plugin +CHECKS.tip = { + '^position.my|style.tip.(corner|mimic|border)$': function() { + // Make sure a tip can be drawn + this.create(); + + // Reposition the tooltip + this.qtip.reposition(); + }, + '^style.tip.(height|width)$': function(obj) { + // Re-set dimensions and redraw the tip + this.size = [ obj.width, obj.height ]; + this.update(); + + // Reposition the tooltip + this.qtip.reposition(); + }, + '^content.title|style.(classes|widget)$': function() { + this.update(); + } +}; + +// Extend original qTip defaults +$.extend(TRUE, QTIP.defaults, { + style: { + tip: { + corner: TRUE, + mimic: FALSE, + width: 6, + height: 6, + border: TRUE, + offset: 0 + } + } +}); +;PLUGINS.viewport = function(api, position, posOptions, targetWidth, targetHeight, elemWidth, elemHeight) +{ + var target = posOptions.target, + tooltip = api.elements.tooltip, + my = posOptions.my, + at = posOptions.at, + adjust = posOptions.adjust, + method = adjust.method.split(' '), + methodX = method[0], + methodY = method[1] || method[0], + viewport = posOptions.viewport, + container = posOptions.container, + cache = api.cache, + adjusted = { left: 0, top: 0 }, + fixed, newMy, containerOffset, containerStatic, + viewportWidth, viewportHeight, viewportScroll, viewportOffset; + + // If viewport is not a jQuery element, or it's the window/document, or no adjustment method is used... return + if(!viewport.jquery || target[0] === window || target[0] === document.body || adjust.method === 'none') { + return adjusted; + } + + // Cach container details + containerOffset = container.offset() || adjusted; + containerStatic = container.css('position') === 'static'; + + // Cache our viewport details + fixed = tooltip.css('position') === 'fixed'; + viewportWidth = viewport[0] === window ? viewport.width() : viewport.outerWidth(FALSE); + viewportHeight = viewport[0] === window ? viewport.height() : viewport.outerHeight(FALSE); + viewportScroll = { left: fixed ? 0 : viewport.scrollLeft(), top: fixed ? 0 : viewport.scrollTop() }; + viewportOffset = viewport.offset() || adjusted; + + // Generic calculation method + function calculate(side, otherSide, type, adjust, side1, side2, lengthName, targetLength, elemLength) { + var initialPos = position[side1], + mySide = my[side], + atSide = at[side], + isShift = type === SHIFT, + myLength = mySide === side1 ? elemLength : mySide === side2 ? -elemLength : -elemLength / 2, + atLength = atSide === side1 ? targetLength : atSide === side2 ? -targetLength : -targetLength / 2, + sideOffset = viewportScroll[side1] + viewportOffset[side1] - (containerStatic ? 0 : containerOffset[side1]), + overflow1 = sideOffset - initialPos, + overflow2 = initialPos + elemLength - (lengthName === WIDTH ? viewportWidth : viewportHeight) - sideOffset, + offset = myLength - (my.precedance === side || mySide === my[otherSide] ? atLength : 0) - (atSide === CENTER ? targetLength / 2 : 0); + + // shift + if(isShift) { + offset = (mySide === side1 ? 1 : -1) * myLength; + + // Adjust position but keep it within viewport dimensions + position[side1] += overflow1 > 0 ? overflow1 : overflow2 > 0 ? -overflow2 : 0; + position[side1] = Math.max( + -containerOffset[side1] + viewportOffset[side1], + initialPos - offset, + Math.min( + Math.max( + -containerOffset[side1] + viewportOffset[side1] + (lengthName === WIDTH ? viewportWidth : viewportHeight), + initialPos + offset + ), + position[side1], + + // Make sure we don't adjust complete off the element when using 'center' + mySide === 'center' ? initialPos - myLength : 1E9 + ) + ); + + } + + // flip/flipinvert + else { + // Update adjustment amount depending on if using flipinvert or flip + adjust *= (type === FLIPINVERT ? 2 : 0); + + // Check for overflow on the left/top + if(overflow1 > 0 && (mySide !== side1 || overflow2 > 0)) { + position[side1] -= offset + adjust; + newMy.invert(side, side1); + } + + // Check for overflow on the bottom/right + else if(overflow2 > 0 && (mySide !== side2 || overflow1 > 0) ) { + position[side1] -= (mySide === CENTER ? -offset : offset) + adjust; + newMy.invert(side, side2); + } + + // Make sure we haven't made things worse with the adjustment and reset if so + if(position[side1] < viewportScroll && -position[side1] > overflow2) { + position[side1] = initialPos; newMy = my.clone(); + } + } + + return position[side1] - initialPos; + } + + // Set newMy if using flip or flipinvert methods + if(methodX !== 'shift' || methodY !== 'shift') { newMy = my.clone(); } + + // Adjust position based onviewport and adjustment options + adjusted = { + left: methodX !== 'none' ? calculate( X, Y, methodX, adjust.x, LEFT, RIGHT, WIDTH, targetWidth, elemWidth ) : 0, + top: methodY !== 'none' ? calculate( Y, X, methodY, adjust.y, TOP, BOTTOM, HEIGHT, targetHeight, elemHeight ) : 0, + my: newMy + }; + + return adjusted; +}; +;PLUGINS.polys = { + // POLY area coordinate calculator + // Special thanks to Ed Cradock for helping out with this. + // Uses a binary search algorithm to find suitable coordinates. + polygon: function(baseCoords, corner) { + var result = { + width: 0, height: 0, + position: { + top: 1e10, right: 0, + bottom: 0, left: 1e10 + }, + adjustable: FALSE + }, + i = 0, next, + coords = [], + compareX = 1, compareY = 1, + realX = 0, realY = 0, + newWidth, newHeight; + + // First pass, sanitize coords and determine outer edges + i = baseCoords.length; while(i--) { + next = [ parseInt(baseCoords[--i], 10), parseInt(baseCoords[i+1], 10) ]; + + if(next[0] > result.position.right){ result.position.right = next[0]; } + if(next[0] < result.position.left){ result.position.left = next[0]; } + if(next[1] > result.position.bottom){ result.position.bottom = next[1]; } + if(next[1] < result.position.top){ result.position.top = next[1]; } + + coords.push(next); + } + + // Calculate height and width from outer edges + newWidth = result.width = Math.abs(result.position.right - result.position.left); + newHeight = result.height = Math.abs(result.position.bottom - result.position.top); + + // If it's the center corner... + if(corner.abbrev() === 'c') { + result.position = { + left: result.position.left + (result.width / 2), + top: result.position.top + (result.height / 2) + }; + } + else { + // Second pass, use a binary search algorithm to locate most suitable coordinate + while(newWidth > 0 && newHeight > 0 && compareX > 0 && compareY > 0) + { + newWidth = Math.floor(newWidth / 2); + newHeight = Math.floor(newHeight / 2); + + if(corner.x === LEFT){ compareX = newWidth; } + else if(corner.x === RIGHT){ compareX = result.width - newWidth; } + else{ compareX += Math.floor(newWidth / 2); } + + if(corner.y === TOP){ compareY = newHeight; } + else if(corner.y === BOTTOM){ compareY = result.height - newHeight; } + else{ compareY += Math.floor(newHeight / 2); } + + i = coords.length; while(i--) + { + if(coords.length < 2){ break; } + + realX = coords[i][0] - result.position.left; + realY = coords[i][1] - result.position.top; + + if((corner.x === LEFT && realX >= compareX) || + (corner.x === RIGHT && realX <= compareX) || + (corner.x === CENTER && (realX < compareX || realX > (result.width - compareX))) || + (corner.y === TOP && realY >= compareY) || + (corner.y === BOTTOM && realY <= compareY) || + (corner.y === CENTER && (realY < compareY || realY > (result.height - compareY)))) { + coords.splice(i, 1); + } + } + } + result.position = { left: coords[0][0], top: coords[0][1] }; + } + + return result; + }, + + rect: function(ax, ay, bx, by) { + return { + width: Math.abs(bx - ax), + height: Math.abs(by - ay), + position: { + left: Math.min(ax, bx), + top: Math.min(ay, by) + } + }; + }, + + _angles: { + tc: 3 / 2, tr: 7 / 4, tl: 5 / 4, + bc: 1 / 2, br: 1 / 4, bl: 3 / 4, + rc: 2, lc: 1, c: 0 + }, + ellipse: function(cx, cy, rx, ry, corner) { + var c = PLUGINS.polys._angles[ corner.abbrev() ], + rxc = c === 0 ? 0 : rx * Math.cos( c * Math.PI ), + rys = ry * Math.sin( c * Math.PI ); + + return { + width: (rx * 2) - Math.abs(rxc), + height: (ry * 2) - Math.abs(rys), + position: { + left: cx + rxc, + top: cy + rys + }, + adjustable: FALSE + }; + }, + circle: function(cx, cy, r, corner) { + return PLUGINS.polys.ellipse(cx, cy, r, r, corner); + } +}; +;PLUGINS.imagemap = function(api, area, corner, adjustMethod) +{ + if(!area.jquery) { area = $(area); } + + var shape = (area.attr('shape') || 'rect').toLowerCase().replace('poly', 'polygon'), + image = $('img[usemap="#'+area.parent('map').attr('name')+'"]'), + coordsString = $.trim(area.attr('coords')), + coordsArray = coordsString.replace(/,$/, '').split(','), + imageOffset, coords, i, next, result, len; + + // If we can't find the image using the map... + if(!image.length) { return FALSE; } + + // Pass coordinates string if polygon + if(shape === 'polygon') { + result = PLUGINS.polys.polygon(coordsArray, corner); + } + + // Otherwise parse the coordinates and pass them as arguments + else if(PLUGINS.polys[shape]) { + for(i = -1, len = coordsArray.length, coords = []; ++i < len;) { + coords.push( parseInt(coordsArray[i], 10) ); + } + + result = PLUGINS.polys[shape].apply( + this, coords.concat(corner) + ); + } + + // If no shapre calculation method was found, return false + else { return FALSE; } + + // Make sure we account for padding and borders on the image + imageOffset = image.offset(); + imageOffset.left += Math.ceil((image.outerWidth(FALSE) - image.width()) / 2); + imageOffset.top += Math.ceil((image.outerHeight(FALSE) - image.height()) / 2); + + // Add image position to offset coordinates + result.position.left += imageOffset.left; + result.position.top += imageOffset.top; + + return result; +}; +;PLUGINS.svg = function(api, svg, corner) +{ + var doc = $(document), + elem = svg[0], + root = $(elem.ownerSVGElement), + ownerDocument = elem.ownerDocument, + strokeWidth2 = (parseInt(svg.css('stroke-width'), 10) || 0) / 2, + frameOffset, mtx, transformed, viewBox, + len, next, i, points, + result, position, dimensions; + + // Ascend the parentNode chain until we find an element with getBBox() + while(!elem.getBBox) { elem = elem.parentNode; } + if(!elem.getBBox || !elem.parentNode) { return FALSE; } + + // Determine which shape calculation to use + switch(elem.nodeName) { + case 'ellipse': + case 'circle': + result = PLUGINS.polys.ellipse( + elem.cx.baseVal.value, + elem.cy.baseVal.value, + (elem.rx || elem.r).baseVal.value + strokeWidth2, + (elem.ry || elem.r).baseVal.value + strokeWidth2, + corner + ); + break; + + case 'line': + case 'polygon': + case 'polyline': + // Determine points object (line has none, so mimic using array) + points = elem.points || [ + { x: elem.x1.baseVal.value, y: elem.y1.baseVal.value }, + { x: elem.x2.baseVal.value, y: elem.y2.baseVal.value } + ]; + + for(result = [], i = -1, len = points.numberOfItems || points.length; ++i < len;) { + next = points.getItem ? points.getItem(i) : points[i]; + result.push.apply(result, [next.x, next.y]); + } + + result = PLUGINS.polys.polygon(result, corner); + break; + + // Unknown shape or rectangle? Use bounding box + default: + result = elem.getBBox(); + result = { + width: result.width, + height: result.height, + position: { + left: result.x, + top: result.y + } + }; + break; + } + + // Shortcut assignments + position = result.position; + root = root[0]; + + // Convert position into a pixel value + if(root.createSVGPoint) { + mtx = elem.getScreenCTM(); + points = root.createSVGPoint(); + + points.x = position.left; + points.y = position.top; + transformed = points.matrixTransform( mtx ); + position.left = transformed.x; + position.top = transformed.y; + } + + // Check the element is not in a child document, and if so, adjust for frame elements offset + if(ownerDocument !== document && api.position.target !== 'mouse') { + frameOffset = $((ownerDocument.defaultView || ownerDocument.parentWindow).frameElement).offset(); + if(frameOffset) { + position.left += frameOffset.left; + position.top += frameOffset.top; + } + } + + // Adjust by scroll offset of owner document + ownerDocument = $(ownerDocument); + position.left += ownerDocument.scrollLeft(); + position.top += ownerDocument.scrollTop(); + + return result; +}; +;var MODAL, OVERLAY, + MODALCLASS = 'qtip-modal', + MODALSELECTOR = '.'+MODALCLASS; + +OVERLAY = function() +{ + var self = this, + focusableElems = {}, + current, onLast, + prevState, elem; + + // Modified code from jQuery UI 1.10.0 source + // http://code.jquery.com/ui/1.10.0/jquery-ui.js + function focusable(element) { + // Use the defined focusable checker when possible + if($.expr[':'].focusable) { return $.expr[':'].focusable; } + + var isTabIndexNotNaN = !isNaN($.attr(element, 'tabindex')), + nodeName = element.nodeName && element.nodeName.toLowerCase(), + map, mapName, img; + + if('area' === nodeName) { + map = element.parentNode; + mapName = map.name; + if(!element.href || !mapName || map.nodeName.toLowerCase() !== 'map') { + return false; + } + img = $('img[usemap=#' + mapName + ']')[0]; + return !!img && img.is(':visible'); + } + return (/input|select|textarea|button|object/.test( nodeName ) ? + !element.disabled : + 'a' === nodeName ? + element.href || isTabIndexNotNaN : + isTabIndexNotNaN + ); + } + + // Focus inputs using cached focusable elements (see update()) + function focusInputs(blurElems) { + // Blurring body element in IE causes window.open windows to unfocus! + if(focusableElems.length < 1 && blurElems.length) { blurElems.not('body').blur(); } + + // Focus the inputs + else { focusableElems.first().focus(); } + } + + // Steal focus from elements outside tooltip + function stealFocus(event) { + if(!elem.is(':visible')) { return; } + + var target = $(event.target), + tooltip = current.tooltip, + container = target.closest(SELECTOR), + targetOnTop; + + // Determine if input container target is above this + targetOnTop = container.length < 1 ? FALSE : + (parseInt(container[0].style.zIndex, 10) > parseInt(tooltip[0].style.zIndex, 10)); + + // If we're showing a modal, but focus has landed on an input below + // this modal, divert focus to the first visible input in this modal + // or if we can't find one... the tooltip itself + if(!targetOnTop && target.closest(SELECTOR)[0] !== tooltip[0]) { + focusInputs(target); + } + + // Detect when we leave the last focusable element... + onLast = event.target === focusableElems[focusableElems.length - 1]; + } + + $.extend(self, { + init: function() { + // Create document overlay + elem = self.elem = $('
    ', { + id: 'qtip-overlay', + html: '
    ', + mousedown: function() { return FALSE; } + }) + .hide(); + + // Make sure we can't focus anything outside the tooltip + $(document.body).bind('focusin'+MODALSELECTOR, stealFocus); + + // Apply keyboard "Escape key" close handler + $(document).bind('keydown'+MODALSELECTOR, function(event) { + if(current && current.options.show.modal.escape && event.keyCode === 27) { + current.hide(event); + } + }); + + // Apply click handler for blur option + elem.bind('click'+MODALSELECTOR, function(event) { + if(current && current.options.show.modal.blur) { + current.hide(event); + } + }); + + return self; + }, + + update: function(api) { + // Update current API reference + current = api; + + // Update focusable elements if enabled + if(api.options.show.modal.stealfocus !== FALSE) { + focusableElems = api.tooltip.find('*').filter(function() { + return focusable(this); + }); + } + else { focusableElems = []; } + }, + + toggle: function(api, state, duration) { + var docBody = $(document.body), + tooltip = api.tooltip, + options = api.options.show.modal, + effect = options.effect, + type = state ? 'show': 'hide', + visible = elem.is(':visible'), + visibleModals = $(MODALSELECTOR).filter(':visible:not(:animated)').not(tooltip), + zindex; + + // Set active tooltip API reference + self.update(api); + + // If the modal can steal the focus... + // Blur the current item and focus anything in the modal we an + if(state && options.stealfocus !== FALSE) { + focusInputs( $(':focus') ); + } + + // Toggle backdrop cursor style on show + elem.toggleClass('blurs', options.blur); + + // Append to body on show + if(state) { + elem.appendTo(document.body); + } + + // Prevent modal from conflicting with show.solo, and don't hide backdrop is other modals are visible + if((elem.is(':animated') && visible === state && prevState !== FALSE) || (!state && visibleModals.length)) { + return self; + } + + // Stop all animations + elem.stop(TRUE, FALSE); + + // Use custom function if provided + if($.isFunction(effect)) { + effect.call(elem, state); + } + + // If no effect type is supplied, use a simple toggle + else if(effect === FALSE) { + elem[ type ](); + } + + // Use basic fade function + else { + elem.fadeTo( parseInt(duration, 10) || 90, state ? 1 : 0, function() { + if(!state) { elem.hide(); } + }); + } + + // Reset position and detach from body on hide + if(!state) { + elem.queue(function(next) { + elem.css({ left: '', top: '' }); + if(!$(MODALSELECTOR).length) { elem.detach(); } + next(); + }); + } + + // Cache the state + prevState = state; + + // If the tooltip is destroyed, set reference to null + if(current.destroyed) { current = NULL; } + + return self; + } + }); + + self.init(); +}; +OVERLAY = new OVERLAY(); + +function Modal(api, options) { + this.options = options; + this._ns = '-modal'; + + this.init( (this.qtip = api) ); +} + +$.extend(Modal.prototype, { + init: function(qtip) { + var tooltip = qtip.tooltip; + + // If modal is disabled... return + if(!this.options.on) { return this; } + + // Set overlay reference + qtip.elements.overlay = OVERLAY.elem; + + // Add unique attribute so we can grab modal tooltips easily via a SELECTOR, and set z-index + tooltip.addClass(MODALCLASS).css('z-index', QTIP.modal_zindex + $(MODALSELECTOR).length); + + // Apply our show/hide/focus modal events + qtip._bind(tooltip, ['tooltipshow', 'tooltiphide'], function(event, api, duration) { + var oEvent = event.originalEvent; + + // Make sure mouseout doesn't trigger a hide when showing the modal and mousing onto backdrop + if(event.target === tooltip[0]) { + if(oEvent && event.type === 'tooltiphide' && /mouse(leave|enter)/.test(oEvent.type) && $(oEvent.relatedTarget).closest(OVERLAY.elem[0]).length) { + try { event.preventDefault(); } catch(e) {} + } + else if(!oEvent || (oEvent && oEvent.type !== 'tooltipsolo')) { + this.toggle(event, event.type === 'tooltipshow', duration); + } + } + }, this._ns, this); + + // Adjust modal z-index on tooltip focus + qtip._bind(tooltip, 'tooltipfocus', function(event, api) { + // If focus was cancelled before it reached us, don't do anything + if(event.isDefaultPrevented() || event.target !== tooltip[0]) { return; } + + var qtips = $(MODALSELECTOR), + + // Keep the modal's lower than other, regular qtips + newIndex = QTIP.modal_zindex + qtips.length, + curIndex = parseInt(tooltip[0].style.zIndex, 10); + + // Set overlay z-index + OVERLAY.elem[0].style.zIndex = newIndex - 1; + + // Reduce modal z-index's and keep them properly ordered + qtips.each(function() { + if(this.style.zIndex > curIndex) { + this.style.zIndex -= 1; + } + }); + + // Fire blur event for focused tooltip + qtips.filter('.' + CLASS_FOCUS).qtip('blur', event.originalEvent); + + // Set the new z-index + tooltip.addClass(CLASS_FOCUS)[0].style.zIndex = newIndex; + + // Set current + OVERLAY.update(api); + + // Prevent default handling + try { event.preventDefault(); } catch(e) {} + }, this._ns, this); + + // Focus any other visible modals when this one hides + qtip._bind(tooltip, 'tooltiphide', function(event) { + if(event.target === tooltip[0]) { + $(MODALSELECTOR).filter(':visible').not(tooltip).last().qtip('focus', event); + } + }, this._ns, this); + }, + + toggle: function(event, state, duration) { + // Make sure default event hasn't been prevented + if(event && event.isDefaultPrevented()) { return this; } + + // Toggle it + OVERLAY.toggle(this.qtip, !!state, duration); + }, + + destroy: function() { + // Remove modal class + this.qtip.tooltip.removeClass(MODALCLASS); + + // Remove bound events + this.qtip._unbind(this.qtip.tooltip, this._ns); + + // Delete element reference + OVERLAY.toggle(this.qtip, FALSE); + delete this.qtip.elements.overlay; + } +}); + + +MODAL = PLUGINS.modal = function(api) { + return new Modal(api, api.options.show.modal); +}; + +// Setup sanitiztion rules +MODAL.sanitize = function(opts) { + if(opts.show) { + if(typeof opts.show.modal !== 'object') { opts.show.modal = { on: !!opts.show.modal }; } + else if(typeof opts.show.modal.on === 'undefined') { opts.show.modal.on = TRUE; } + } +}; + +// Base z-index for all modal tooltips (use qTip core z-index as a base) +QTIP.modal_zindex = QTIP.zindex - 200; + +// Plugin needs to be initialized on render +MODAL.initialize = 'render'; + +// Setup option set checks +CHECKS.modal = { + '^show.modal.(on|blur)$': function() { + // Initialise + this.destroy(); + this.init(); + + // Show the modal if not visible already and tooltip is visible + this.qtip.elems.overlay.toggle( + this.qtip.tooltip[0].offsetWidth > 0 + ); + } +}; + +// Extend original api defaults +$.extend(TRUE, QTIP.defaults, { + show: { + modal: { + on: FALSE, + effect: TRUE, + blur: TRUE, + stealfocus: TRUE, + escape: TRUE + } + } +}); +;var IE6, + +/* + * BGIFrame adaption (http://plugins.jquery.com/project/bgiframe) + * Special thanks to Brandon Aaron + */ +BGIFRAME = ''; + +function Ie6(api, qtip) { + this._ns = 'ie6'; + this.init( (this.qtip = api) ); +} + +$.extend(Ie6.prototype, { + _scroll : function() { + var overlay = this.qtip.elements.overlay; + overlay && (overlay[0].style.top = $(window).scrollTop() + 'px'); + }, + + init: function(qtip) { + var tooltip = qtip.tooltip, + scroll; + + // Create the BGIFrame element if needed + if($('select, object').length < 1) { + this.bgiframe = qtip.elements.bgiframe = $(BGIFRAME).appendTo(tooltip); + + // Update BGIFrame on tooltip move + qtip._bind(tooltip, 'tooltipmove', this.adjustBGIFrame, this._ns, this); + } + + // redraw() container for width/height calculations + this.redrawContainer = $('
    ', { id: NAMESPACE+'-rcontainer' }) + .appendTo(document.body); + + // Fixup modal plugin if present too + if( qtip.elements.overlay && qtip.elements.overlay.addClass('qtipmodal-ie6fix') ) { + qtip._bind(window, ['scroll', 'resize'], this._scroll, this._ns, this); + qtip._bind(tooltip, ['tooltipshow'], this._scroll, this._ns, this); + } + + // Set dimensions + this.redraw(); + }, + + adjustBGIFrame: function() { + var tooltip = this.qtip.tooltip, + dimensions = { + height: tooltip.outerHeight(FALSE), + width: tooltip.outerWidth(FALSE) + }, + plugin = this.qtip.plugins.tip, + tip = this.qtip.elements.tip, + tipAdjust, offset; + + // Adjust border offset + offset = parseInt(tooltip.css('borderLeftWidth'), 10) || 0; + offset = { left: -offset, top: -offset }; + + // Adjust for tips plugin + if(plugin && tip) { + tipAdjust = (plugin.corner.precedance === 'x') ? [WIDTH, LEFT] : [HEIGHT, TOP]; + offset[ tipAdjust[1] ] -= tip[ tipAdjust[0] ](); + } + + // Update bgiframe + this.bgiframe.css(offset).css(dimensions); + }, + + // Max/min width simulator function + redraw: function() { + if(this.qtip.rendered < 1 || this.drawing) { return this; } + + var tooltip = this.qtip.tooltip, + style = this.qtip.options.style, + container = this.qtip.options.position.container, + perc, width, max, min; + + // Set drawing flag + this.qtip.drawing = 1; + + // If tooltip has a set height/width, just set it... like a boss! + if(style.height) { tooltip.css(HEIGHT, style.height); } + if(style.width) { tooltip.css(WIDTH, style.width); } + + // Simulate max/min width if not set width present... + else { + // Reset width and add fluid class + tooltip.css(WIDTH, '').appendTo(this.redrawContainer); + + // Grab our tooltip width (add 1 if odd so we don't get wrapping problems.. huzzah!) + width = tooltip.width(); + if(width % 2 < 1) { width += 1; } + + // Grab our max/min properties + max = tooltip.css('maxWidth') || ''; + min = tooltip.css('minWidth') || ''; + + // Parse into proper pixel values + perc = (max + min).indexOf('%') > -1 ? container.width() / 100 : 0; + max = ((max.indexOf('%') > -1 ? perc : 1) * parseInt(max, 10)) || width; + min = ((min.indexOf('%') > -1 ? perc : 1) * parseInt(min, 10)) || 0; + + // Determine new dimension size based on max/min/current values + width = max + min ? Math.min(Math.max(width, min), max) : width; + + // Set the newly calculated width and remvoe fluid class + tooltip.css(WIDTH, Math.round(width)).appendTo(container); + } + + // Set drawing flag + this.drawing = 0; + + return this; + }, + + destroy: function() { + // Remove iframe + this.bgiframe && this.bgiframe.remove(); + + // Remove bound events + this.qtip._unbind([window, this.qtip.tooltip], this._ns); + } +}); + +IE6 = PLUGINS.ie6 = function(api) { + // Proceed only if the browser is IE6 + return BROWSER.ie === 6 ? new Ie6(api) : FALSE; +}; + +IE6.initialize = 'render'; + +CHECKS.ie6 = { + '^content|style$': function() { + this.redraw(); + } +}; +;})); +}( window, document )); diff --git a/plugins/easy-footnotes/assets/qtip/jquery.qtip.min.css b/plugins/easy-footnotes/assets/qtip/jquery.qtip.min.css new file mode 100644 index 0000000..ac501ed --- /dev/null +++ b/plugins/easy-footnotes/assets/qtip/jquery.qtip.min.css @@ -0,0 +1,3 @@ +/* qTip2 v2.2.1 | Plugins: tips viewport imagemap svg modal ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 18:25:07 */ + +.qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr;box-shadow:none;padding:0}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:700}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;z-index:11;cursor:pointer;outline:medium none;border:1px solid transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-titlebar .ui-icon,.qtip-icon .ui-icon{display:block;text-indent:-1000em;direction:ltr}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;line-height:14px;text-align:center;text-indent:0;font:400 bold 10px/13px Tahoma,sans-serif;color:inherit;background:transparent none no-repeat -100em -100em}.qtip-focus{}.qtip-hover{}.qtip-default{border:1px solid #F1D031;background-color:#FFFFA3;color:#555}.qtip-default .qtip-titlebar{background-color:#FFEF93}.qtip-default .qtip-icon{border-color:#CCC;background:#F1F1F1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111} .qtip-light{background-color:#fff;border-color:#E2E2E2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1} .qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030} .qtip-cream{background-color:#FBF7AA;border-color:#F9E98E;color:#A27D35}.qtip-cream .qtip-titlebar{background-color:#F0DE7D}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0} .qtip-red{background-color:#F78B83;border-color:#D95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#F06D65}.qtip-red .qtip-close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon{border-color:#D95252}.qtip-red .qtip-titlebar .ui-state-hover{border-color:#D95252} .qtip-green{background-color:#CAED9E;border-color:#90D93F;color:#3F6219}.qtip-green .qtip-titlebar{background-color:#B0DE78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0} .qtip-blue{background-color:#E5F6FE;border-color:#ADD9ED;color:#5E99BD}.qtip-blue .qtip-titlebar{background-color:#D0E9F5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,.15)}.qtip-rounded,.qtip-tipsy,.qtip-bootstrap{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-rounded .qtip-titlebar{-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:#fff;border:0 solid transparent;background:#4A4A4A;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,#000));background-image:-webkit-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-moz-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-ms-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-o-linear-gradient(top,#4A4A4A 0,#000 100%)}.qtip-youtube .qtip-titlebar{background-color:#4A4A4A;background-color:rgba(0,0,0,0)}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,.7);background-image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid rgba(241,241,241,1);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323)"}.qtip-jtools .qtip-titlebar,.qtip-jtools .qtip-content{background:transparent;color:#fff;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,.4);box-shadow:4px 4px 5px rgba(0,0,0,.4);background-color:#D9D9C2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876A;color:#fff;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:#000;background:rgba(0,0,0,.87);color:#fff;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px;text-shadow:0 1px #000}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10px;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10px}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qtip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959FA9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#F9F9F9;color:#454545;font-weight:400;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:#fff;background:#3A79B8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3A79B8),to(#2E629D));background-image:-webkit-linear-gradient(top,#3A79B8,#2E629D);background-image:-moz-linear-gradient(top,#3A79B8,#2E629D);background-image:-ms-linear-gradient(top,#3A79B8,#2E629D);background-image:-o-linear-gradient(top,#3A79B8,#2E629D);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#FBFBFB;color:#555}.qtip-bootstrap{font-size:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:transparent}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:700;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}x:-o-prefocus,.qtip .qtip-tip{visibility:hidden}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml,.qtip .qtip-tip canvas{position:absolute;color:#123456;background:transparent;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:0;top:0;width:100%;height:100%}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70);-ms-filter:"alpha(Opacity=70)"}.qtipmodal-ie6fix{position:absolute!important} \ No newline at end of file diff --git a/plugins/easy-footnotes/assets/qtip/jquery.qtip.min.js b/plugins/easy-footnotes/assets/qtip/jquery.qtip.min.js new file mode 100644 index 0000000..860b31d --- /dev/null +++ b/plugins/easy-footnotes/assets/qtip/jquery.qtip.min.js @@ -0,0 +1,5 @@ +/* qTip2 v2.2.1 | Plugins: tips viewport imagemap svg modal ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 18:25:06 */ + +!function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=F,this.elements={target:a},this._id=S+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:E,attr:e,onTooltip:E,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=E}function f(a){return a===F||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?E:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?E:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==E,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,F,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(d.isPlainObject(b.title)&&(b.button=b.title.button,b.title=b.title.text),g(b.title||E)&&(b.title=E))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===D?{ready:D}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(R,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d0?setTimeout(d.proxy(a,this),b):void a.call(this)}function m(a){this.tooltip.hasClass(ab)||(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=l.call(this,function(){this.toggle(D,a)},this.options.show.delay))}function n(a){if(!this.tooltip.hasClass(ab)&&!this.destroyed){var b=d(a.relatedTarget),c=b.closest(W)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=l.call(this,function(){this.toggle(E,a)},this.options.hide.delay,this)}}function o(a){!this.tooltip.hasClass(ab)&&this.options.hide.inactive&&(clearTimeout(this.timers.inactive),this.timers.inactive=l.call(this,function(){this.hide(a)},this.options.hide.inactive))}function p(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function q(a,c,e){d(b.body).delegate(a,(c.split?c:c.join("."+S+" "))+"."+S,function(){var a=y.api[d.attr(this,U)];a&&!a.disabled&&e.apply(a,arguments)})}function r(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):F,p="html5"===f.metadata.type&&o?o[f.metadata.name]:F,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(D,{},y.defaults,f,"object"==typeof q?h(q):F,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===E||!j)return E;k.content.text=j}if(i.container.length||(i.container=m),i.target===E&&(i.target=n),k.show.target===E&&(k.show.target=n),k.show.solo===D&&(k.show.solo=i.container.closest("body")),k.hide.target===E&&(k.hide.target=n),k.position.viewport===D&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new A(i.at,D),i.my=new A(i.my),a.data(S))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===E)return E;return a.attr(T,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(cb,l).attr("title",""),g=new e(a,k,c,!!j),a.data(S,g),g}function s(a){return a.charAt(0).toUpperCase()+a.slice(1)}function t(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+rb.join(f+" ")+f).split(" "),h=0;if(qb[b])return a.css(qb[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return qb[b]=d,e}function u(a,b){return Math.ceil(parseFloat(t(a,b)))}function v(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.init(this.qtip=a)}function w(a,b){this.options=b,this._ns="-modal",this.init(this.qtip=a)}function x(a){this._ns="ie6",this.init(this.qtip=a)}var y,z,A,B,C,D=!0,E=!1,F=null,G="x",H="y",I="width",J="height",K="top",L="left",M="bottom",N="right",O="center",P="flipinvert",Q="shift",R={},S="qtip",T="data-hasqtip",U="data-qtip-id",V=["ui-widget","ui-tooltip"],W="."+S,X="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),Y=S+"-fixed",Z=S+"-default",$=S+"-focus",_=S+"-hover",ab=S+"-disabled",bb="_replacedByqTip",cb="oldtitle",db={ie:function(){for(var a=4,c=b.createElement("div");(c.innerHTML="")&&c.getElementsByTagName("i")[0];a+=1);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||E};z=e.prototype,z._when=function(a){return d.when.apply(d,a)},z.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),f.posClass=this._createPosClass((this.position={my:k.my,at:k.at}).my),this.tooltip=g.tooltip=b=d("
    ",{id:this._id,"class":[S,Z,e.style.classes,f.posClass].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":E,"aria-describedby":this._id+"-content","aria-hidden":D}).toggleClass(ab,this.disabled).attr(U,this.id).data(S,this).appendTo(k.container).append(g.content=d("
    ",{"class":S+"-content",id:this._id+"-content","aria-atomic":D})),this.rendered=-1,this.positioning=D,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,E))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,E)),this.rendered=D,this._setWidget(),d.each(R,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=E,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(D,f.event,E),c.hiddenDuringWait=E}),y.api[this.id]=this,this},z.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=D;var a,b=this.target,c=b.attr(cb);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()});for(a in this.timers)clearTimeout(this.timers[a]);b.removeData(S).removeAttr(U).removeAttr(T).removeAttr("aria-describedby"),this.options.suppress&&c&&b.attr("title",c).removeAttr(cb),this._unassignEvents(),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=F,delete y.api[this.id]}}return this.destroyed?this.target:(a===D&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},B=z.checks={builtin:{"^id$":function(a,b,c,e){var f=c===D?y.nextid:c,g=S+"-"+f;f!==E&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(this.position[b]=a[b]=new A(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(D)||this.toggle(D))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(Z,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},z.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var eb=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,fb=/^prerender|show\.ready/i;z.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=E,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&fb.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=eb.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=D,d.each(a,d.proxy(j,this)),this.positioning=E,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?F:this.cache.event),this},z._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=D,a.then(function(a){return e.waiting=E,c._update(a,b)},F,function(a){return c._update(a,b)})):a===E||!a&&""!==a?E:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):E},z._waitForContent=function(a){var b=this.cache;return b.waiting=D,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=E}).promise()},z._updateContent=function(a,b){this._update(a,this.elements.content,b)},z._updateTitle=function(a,b){this._update(a,this.elements.title,b)===E&&this._removeTitle(E)},z._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("
    ",{"class":S+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("
    ",{id:b,"class":S+"-title","aria-atomic":D})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},z._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=F,a!==E&&this.reposition())},z._createPosClass=function(a){return S+"-pos-"+(a||this.options.position.my).abbrev()},z.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=D;var f,g,h,i,j=this.cache,k=this.tooltip,l=this.options.position,m=l.target,n=l.my,o=l.at,p=l.viewport,q=l.container,r=l.adjust,s=r.method.split(" "),t=k.outerWidth(E),u=k.outerHeight(E),v=0,w=0,x=k.css("position"),y={left:0,top:0},z=k[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=q[0].ownerDocument,F=this.mouse;if(d.isArray(m)&&2===m.length)o={x:L,y:K},y={left:m[0],top:m[1]};else if("mouse"===m)o={x:L,y:K},(!r.mouse||this.options.hide.distance)&&j.origin&&j.origin.pageX?c=j.origin:!c||c&&("resize"===c.type||"scroll"===c.type)?c=j.event:F&&F.pageX&&(c=F),"static"!==x&&(y=q.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),y={left:c.pageX-y.left+(g&&g.left||0),top:c.pageY-y.top+(g&&g.top||0)},r.mouse&&A&&F&&(y.left-=(F.scrollX||0)-B.scrollLeft(),y.top-=(F.scrollY||0)-B.scrollTop());else{if("event"===m?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?j.target=d(c.target):c.target||(j.target=this.elements.target):"event"!==m&&(j.target=d(m.jquery?m:this.elements.target)),m=j.target,m=d(m).eq(0),0===m.length)return this;m[0]===b||m[0]===a?(v=db.iOS?a.innerWidth:m.width(),w=db.iOS?a.innerHeight:m.height(),m[0]===a&&(y={top:(p||m).scrollTop(),left:(p||m).scrollLeft()})):R.imagemap&&m.is("area")?f=R.imagemap(this,m,o,R.viewport?s:E):R.svg&&m&&m[0].ownerSVGElement?f=R.svg(this,m,o,R.viewport?s:E):(v=m.outerWidth(E),w=m.outerHeight(E),y=m.offset()),f&&(v=f.width,w=f.height,g=f.offset,y=f.position),y=this.reposition.offset(m,y,q),(db.iOS>3.1&&db.iOS<4.1||db.iOS>=4.3&&db.iOS<4.33||!db.iOS&&"fixed"===x)&&(y.left-=B.scrollLeft(),y.top-=B.scrollTop()),(!f||f&&f.adjustable!==E)&&(y.left+=o.x===N?v:o.x===O?v/2:0,y.top+=o.y===M?w:o.y===O?w/2:0)}return y.left+=r.x+(n.x===N?-t:n.x===O?-t/2:0),y.top+=r.y+(n.y===M?-u:n.y===O?-u/2:0),R.viewport?(h=y.adjusted=R.viewport(this,y,l,v,w,t,u),g&&h.left&&(y.left+=g.left),g&&h.top&&(y.top+=g.top),h.my&&(this.position.my=h.my)):y.adjusted={left:0,top:0},j.posClass!==(i=this._createPosClass(this.position.my))&&k.removeClass(j.posClass).addClass(j.posClass=i),this._trigger("move",[y,p.elem||p],c)?(delete y.adjusted,e===E||!z||isNaN(y.left)||isNaN(y.top)||"mouse"===m||!d.isFunction(l.effect)?k.css(y):d.isFunction(l.effect)&&(l.effect.call(k,this,d.extend({},y)),k.queue(function(a){d(this).css({opacity:"",height:""}),db.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=E,this):this},z.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!db.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var gb=(A=z.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,O).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?H:G}).prototype;gb.invert=function(a,b){this[a]=this[a]===L?N:this[a]===N?L:b||this[a]},gb.string=function(a){var b=this.x,c=this.y,d=b!==c?"center"===b||"center"!==c&&(this.precedance===H||this.forceY)?[c,b]:[b,c]:[b];return a!==!1?d.join(" "):d},gb.abbrev=function(){var a=this.string(!1);return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},gb.clone=function(){return new A(this.string(),this.forceY)},z.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&e.event&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=d.event.fix(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=D),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",l=this.options[k],m=(this.options[a?"hide":"show"],this.options.position),n=this.options.content,o=this.tooltip.css("width"),p=this.tooltip.is(":visible"),q=a||1===l.target.length,r=!c||l.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!p),h=!g.is(":animated")&&p===a&&r,i=h?F:!!this._trigger(k,[90]),this.destroyed?this:(i!==E&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(this.mouse&&(e.origin=d.event.fix(this.mouse)),d.isFunction(n.text)&&this._updateContent(n.text,E),d.isFunction(n.title)&&this._updateTitle(n.title,E),!C&&"mouse"===m.target&&m.adjust.mouse&&(d(b).bind("mousemove."+S,this._storeMouse),C=D),o||g.css("width",g.outerWidth(E)),this.reposition(c,arguments[2]),o||g.css("width",""),l.solo&&("string"==typeof l.solo?d(l.solo):d(W,l.solo)).not(g).not(l.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,C&&!d(W+'[tracking="true"]:visible',l.solo).not(g).length&&(d(b).unbind("mousemove."+S),C=E),this.blur(c)),j=d.proxy(function(){a?(db.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof l.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),l.effect===E||q===E?(g[k](),j()):d.isFunction(l.effect)?(g.stop(1,1),l.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&l.target.trigger("qtip-"+this.id+"-inactive"),this))},z.show=function(a){return this.toggle(D,a)},z.hide=function(a){return this.toggle(E,a)},z.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(W),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=y.zindex+b.length;return c.hasClass($)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+$).qtip("blur",a)),c.addClass($)[0].style.zIndex=f),this},z.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass($),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},z.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(ab):this.disabled):"boolean"!=typeof a&&(a=D),this.rendered&&this.tooltip.toggleClass(ab,a).attr("aria-disabled",a),this.disabled=!!a,this)},z.enable=function(){return this.disable(E)},z._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("",{"class":"qtip-close "+(this.options.style.widget?"":S+"-icon"),title:g,"aria-label":g}).prepend(d("",{"class":"ui-icon ui-icon-close",html:"×"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(ab)||a.hide(b),E})},z._updateButton=function(a){if(!this.rendered)return E;var b=this.elements.button;a?this._createButton():b.remove()},z._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(ab);c.removeClass(ab),ab=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(ab,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Z,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(S+"-icon",!a)},z._storeMouse=function(a){return(this.mouse=d.event.fix(a)).type="mousemove",this},z._bind=function(a,b,c,e,f){if(a&&c&&b.length){var g="."+this._id+(e?"-"+e:"");return d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this)),this}},z._unbind=function(a,b){return a&&d(a).unbind("."+this._id+(b?"-"+b:"")),this},z._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||F,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=E,!e.isDefaultPrevented()},z._bindEvents=function(a,b,c,e,f,g){var h=c.filter(e).add(e.filter(c)),i=[];h.length&&(d.each(b,function(b,c){var e=d.inArray(c,a);e>-1&&i.push(a.splice(e,1)[0])}),i.length&&(this._bind(h,i,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)}),c=c.not(h),e=e.not(h))),this._bind(c,a,f),this._bind(e,b,g)},z._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?E:(this.cache.event=a&&d.event.fix(a),this.cache.target=a&&d(a.target),clearTimeout(this.timers.show),void(this.timers.show=l.call(this,function(){this.render("object"==typeof a||c.show.ready)},c.prerender?0:c.show.delay)))}var c=this.options,e=c.show.target,f=c.hide.target,g=c.show.event?d.trim(""+c.show.event).split(" "):[],h=c.hide.event?d.trim(""+c.hide.event).split(" "):[];this._bind(this.elements.target,["remove","removeqtip"],function(){this.destroy(!0)},"destroy"),/mouse(over|enter)/i.test(c.show.event)&&!/mouse(out|leave)/i.test(c.hide.event)&&h.push("mouseleave"),this._bind(e,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=D}),this._bindEvents(g,h,e,f,b,function(){return this.timers?void clearTimeout(this.timers.show):E}),(c.show.ready||c.prerender)&&b.call(this,a)},z._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),q=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(Y)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0,e=b.parents(W).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",o,"inactive"),this._bind(i.add(g),y.inactiveEvents,o)),this._bindEvents(r,s,h,i,m,n),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){return this.cache?void(this.cache.onTarget="mouseenter"===a.type):E}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:q,"resize",p),f.adjust.scroll&&this._bind(q.add(f.container),"scroll",p)},z._unassignEvents=function(){var c=this.options,e=c.show.target,f=c.hide.target,g=d.grep([this.elements.target[0],this.rendered&&this.tooltip[0],c.position.container[0],c.position.viewport[0],c.position.container.closest("html")[0],a,b],function(a){return"object"==typeof a});e&&e.toArray&&(g=g.concat(e.toArray())),f&&f.toArray&&(g=g.concat(f.toArray())),this._unbind(g)._unbind(g,"destroy")._unbind(g,"inactive")},d(function(){q(W,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(Y)&&!c.hasClass(ab)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.position.adjust.mouse&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(_,b)}),q("["+U+"]",X,o)}),y=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=F,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],S):F;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,S);if(!a)return D;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),E;a.set(b,e)}}),g!==F?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(D,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===E||c.length<1||y.api[c]?y.nextid++:c,b=r(d(this),c,k),b===E?D:(y.api[c]=b,d.each(R,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,y.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,cb):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(cb,b))}return d.fn["attr"+bb].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+bb].apply(this,arguments));return a||b.filter("["+cb+"]").attr("title",function(){return d.attr(this,cb)}).removeAttr(cb),b}},function(a,b){if(!b||d.fn[a+bb])return D;var c=d.fn[a+bb]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+bb]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(T))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+bb].apply(this,arguments)}),y.version="2.2.1",y.nextid=0,y.inactiveEvents=X,y.zindex=15e3,y.defaults={prerender:E,id:E,overwrite:D,suppress:D,content:{text:D,attr:"title",title:E,button:E},position:{my:"top left",at:"bottom right",target:E,container:E,viewport:E,adjust:{x:0,y:0,mouse:D,scroll:D,resize:D,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:E})}},show:{target:E,event:"mouseenter",effect:D,delay:90,solo:E,ready:E,autofocus:E},hide:{target:E,event:"mouseleave",effect:D,delay:0,fixed:E,inactive:E,leave:"window",distance:E},style:{classes:"",widget:E,width:E,height:E,def:D},events:{render:F,move:F,show:F,hide:F,toggle:F,visible:F,hidden:F,focus:F,blur:F}};var hb,ib="margin",jb="border",kb="color",lb="background-color",mb="transparent",nb=" !important",ob=!!b.createElement("canvas").getContext,pb=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,qb={},rb=["Webkit","O","Moz","ms"];if(ob)var sb=a.devicePixelRatio||1,tb=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),ub=sb/tb;else var vb=function(a,b,c){return"'};d.extend(v.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("
    ",{"class":S+"-tip"}).prependTo(a.tooltip),ob?(b=d("").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=vb("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(b+b),a._bind(d("*",c).add(c),["click","mousedown"],function(a){a.stopPropagation()},this._ns)),a._bind(a.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(a){var b=this.qtip.elements.titlebar;return b&&(a.y===K||a.y===O&&this.element.position().top+this.size[1]/2+this.options.offsetl&&!pb.test(e[1])&&(e[0]=e[1]),this.border=l=p.border!==D?p.border:l):this.border=l=0,k=this.size=this._calculateSize(b),n.css({width:k[0],height:k[1],lineHeight:k[1]+"px"}),j=b.precedance===H?[s(r.x===L?l:r.x===N?k[0]-q[0]-l:(k[0]-q[0])/2),s(r.y===K?k[1]-q[1]:0)]:[s(r.x===L?k[0]-q[0]:0),s(r.y===K?l:r.y===M?k[1]-q[1]-l:(k[1]-q[1])/2)],ob?(g=o[0].getContext("2d"),g.restore(),g.save(),g.clearRect(0,0,6e3,6e3),h=this._calculateTip(r,q,ub),i=this._calculateTip(r,this.size,ub),o.attr(I,k[0]*ub).attr(J,k[1]*ub),o.css(I,k[0]).css(J,k[1]),this._drawCoords(g,i),g.fillStyle=e[1],g.fill(),g.translate(j[0]*ub,j[1]*ub),this._drawCoords(g,h),g.fillStyle=e[0],g.fill()):(h=this._calculateTip(r),h="m"+h[0]+","+h[1]+" l"+h[2]+","+h[3]+" "+h[4]+","+h[5]+" xe",j[2]=l&&/^(r|b)/i.test(b.string())?8===db.ie?2:1:0,o.css({coordsize:k[0]+l+" "+(k[1]+l),antialias:""+(r.string().indexOf(O)>-1),left:j[0]-j[2]*Number(f===G),top:j[1]-j[2]*Number(f===H),width:k[0]+l,height:k[1]+l}).each(function(a){var b=d(this);b[b.prop?"prop":"attr"]({coordsize:k[0]+l+" "+(k[1]+l),path:h,fillcolor:e[0],filled:!!a,stroked:!a}).toggle(!(!l&&!a)),!a&&b.html(vb("stroke",'weight="'+2*l+'px" color="'+e[1]+'" miterlimit="1000" joinstyle="miter"'))})),a.opera&&setTimeout(function(){m.tip.css({display:"inline-block",visibility:"visible"})},1),c!==E&&this.calculate(b,k)},calculate:function(a,b){if(!this.enabled)return E;var c,e,f=this,g=this.qtip.elements,h=this.element,i=this.options.offset,j=(g.tooltip.hasClass("ui-widget"),{});return a=a||this.corner,c=a.precedance,b=b||this._calculateSize(a),e=[a.x,a.y],c===G&&e.reverse(),d.each(e,function(d,e){var h,k,l; +e===O?(h=c===H?L:K,j[h]="50%",j[ib+"-"+h]=-Math.round(b[c===H?0:1]/2)+i):(h=f._parseWidth(a,e,g.tooltip),k=f._parseWidth(a,e,g.content),l=f._parseRadius(a),j[e]=Math.max(-f.border,d?k:i+(l>h?l:-h)))}),j[a[c]]-=b[c===G?0:1],h.css({margin:"",top:"",bottom:"",left:"",right:""}).css(j),j},reposition:function(a,b,d){function e(a,b,c,d,e){a===Q&&j.precedance===b&&k[d]&&j[c]!==O?j.precedance=j.precedance===G?H:G:a!==Q&&k[d]&&(j[b]=j[b]===O?k[d]>0?d:e:j[b]===d?e:d)}function f(a,b,e){j[a]===O?p[ib+"-"+b]=o[a]=g[ib+"-"+b]-k[b]:(h=g[e]!==c?[k[b],-g[b]]:[-k[b],g[b]],(o[a]=Math.max(h[0],h[1]))>h[0]&&(d[b]-=k[b],o[b]=E),p[g[e]!==c?e:b]=o[a])}if(this.enabled){var g,h,i=b.cache,j=this.corner.clone(),k=d.adjusted,l=b.options.position.adjust.method.split(" "),m=l[0],n=l[1]||l[0],o={left:E,top:E,x:0,y:0},p={};this.corner.fixed!==D&&(e(m,G,H,L,N),e(n,H,G,K,M),(j.string()!==i.corner.string()||i.cornerTop!==k.top||i.cornerLeft!==k.left)&&this.update(j,E)),g=this.calculate(j),g.right!==c&&(g.left=-g.right),g.bottom!==c&&(g.top=-g.bottom),g.user=this.offset,(o.left=m===Q&&!!k.left)&&f(G,L,N),(o.top=n===Q&&!!k.top)&&f(H,K,M),this.element.css(p).toggle(!(o.x&&o.y||j.x===O&&o.y||j.y===O&&o.x)),d.left-=g.left.charAt?g.user:m!==Q||o.top||!o.left&&!o.top?g.left+this.border:0,d.top-=g.top.charAt?g.user:n!==Q||o.left||!o.left&&!o.top?g.top+this.border:0,i.cornerLeft=k.left,i.cornerTop=k.top,i.corner=j.clone()}},destroy:function(){this.qtip._unbind(this.qtip.tooltip,this._ns),this.qtip.elements.tip&&this.qtip.elements.tip.find("*").remove().end().remove()}}),hb=R.tip=function(a){return new v(a,a.options.style.tip)},hb.initialize="render",hb.sanitize=function(a){if(a.style&&"tip"in a.style){var b=a.style.tip;"object"!=typeof b&&(b=a.style.tip={corner:b}),/string|boolean/i.test(typeof b.corner)||(b.corner=D)}},B.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){this.create(),this.qtip.reposition()},"^style.tip.(height|width)$":function(a){this.size=[a.width,a.height],this.update(),this.qtip.reposition()},"^content.title|style.(classes|widget)$":function(){this.update()}},d.extend(D,y.defaults,{style:{tip:{corner:D,mimic:E,width:6,height:6,border:D,offset:0}}}),R.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],s=u[a],t=v[a],w=c===Q,x=s===f?j:s===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=q[f]+r[f]-(n?0:m[f]),A=z-k,B=k+j-(h===I?o:p)-z,C=x-(u.precedance===a||s===u[b]?y:0)-(t===O?i/2:0);return w?(C=(s===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-m[f]+r[f],k-C,Math.min(Math.max(-m[f]+r[f]+(h===I?o:p),k+C),d[f],"center"===s?k-x:1e9))):(e*=c===P?2:0,A>0&&(s!==f||B>0)?(d[f]-=C+e,l.invert(a,f)):B>0&&(s!==g||A>0)&&(d[f]-=(s===O?-C:C)+e,l.invert(a,g)),d[f]B&&(d[f]=k,l=u.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s=e.target,t=c.elements.tooltip,u=e.my,v=e.at,w=e.adjust,x=w.method.split(" "),y=x[0],z=x[1]||x[0],A=e.viewport,B=e.container,C=(c.cache,{left:0,top:0});return A.jquery&&s[0]!==a&&s[0]!==b.body&&"none"!==w.method?(m=B.offset()||C,n="static"===B.css("position"),k="fixed"===t.css("position"),o=A[0]===a?A.width():A.outerWidth(E),p=A[0]===a?A.height():A.outerHeight(E),q={left:k?0:A.scrollLeft(),top:k?0:A.scrollTop()},r=A.offset()||C,("shift"!==y||"shift"!==z)&&(l=u.clone()),C={left:"none"!==y?j(G,H,y,w.x,L,N,I,f,h):0,top:"none"!==z?j(H,G,z,w.y,K,M,J,g,i):0,my:l}):C},R.polys={polygon:function(a,b){var c,d,e,f={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:E},g=0,h=[],i=1,j=1,k=0,l=0;for(g=a.length;g--;)c=[parseInt(a[--g],10),parseInt(a[g+1],10)],c[0]>f.position.right&&(f.position.right=c[0]),c[0]f.position.bottom&&(f.position.bottom=c[1]),c[1]0&&e>0&&i>0&&j>0;)for(d=Math.floor(d/2),e=Math.floor(e/2),b.x===L?i=d:b.x===N?i=f.width-d:i+=Math.floor(d/2),b.y===K?j=e:b.y===M?j=f.height-e:j+=Math.floor(e/2),g=h.length;g--&&!(h.length<2);)k=h[g][0]-f.position.left,l=h[g][1]-f.position.top,(b.x===L&&k>=i||b.x===N&&i>=k||b.x===O&&(i>k||k>f.width-i)||b.y===K&&l>=j||b.y===M&&j>=l||b.y===O&&(j>l||l>f.height-j))&&h.splice(g,1);f.position={left:h[0][0],top:h[0][1]}}return f},rect:function(a,b,c,d){return{width:Math.abs(c-a),height:Math.abs(d-b),position:{left:Math.min(a,c),top:Math.min(b,d)}}},_angles:{tc:1.5,tr:7/4,tl:5/4,bc:.5,br:.25,bl:.75,rc:2,lc:1,c:0},ellipse:function(a,b,c,d,e){var f=R.polys._angles[e.abbrev()],g=0===f?0:c*Math.cos(f*Math.PI),h=d*Math.sin(f*Math.PI);return{width:2*c-Math.abs(g),height:2*d-Math.abs(h),position:{left:a+g,top:b+h},adjustable:E}},circle:function(a,b,c,d){return R.polys.ellipse(a,b,c,c,d)}},R.imagemap=function(a,b,c){b.jquery||(b=d(b));var e,f,g,h,i,j=(b.attr("shape")||"rect").toLowerCase().replace("poly","polygon"),k=d('img[usemap="#'+b.parent("map").attr("name")+'"]'),l=d.trim(b.attr("coords")),m=l.replace(/,$/,"").split(",");if(!k.length)return E;if("polygon"===j)h=R.polys.polygon(m,c);else{if(!R.polys[j])return E;for(g=-1,i=m.length,f=[];++gparseInt(h[0].style.zIndex,10),b||e.closest(W)[0]===h[0]||c(e),g=a.target===k[k.length-1]}}var f,g,h,i,j=this,k={};d.extend(j,{init:function(){return i=j.elem=d("
    ",{id:"qtip-overlay",html:"
    ",mousedown:function(){return E}}).hide(),d(b.body).bind("focusin"+zb,e),d(b).bind("keydown"+zb,function(a){f&&f.options.show.modal.escape&&27===a.keyCode&&f.hide(a)}),i.bind("click"+zb,function(a){f&&f.options.show.modal.blur&&f.hide(a)}),j},update:function(b){f=b,k=b.options.show.modal.stealfocus!==E?b.tooltip.find("*").filter(function(){return a(this)}):[]},toggle:function(a,e,g){var k=(d(b.body),a.tooltip),l=a.options.show.modal,m=l.effect,n=e?"show":"hide",o=i.is(":visible"),p=d(zb).filter(":visible:not(:animated)").not(k);return j.update(a),e&&l.stealfocus!==E&&c(d(":focus")),i.toggleClass("blurs",l.blur),e&&i.appendTo(b.body),i.is(":animated")&&o===e&&h!==E||!e&&p.length?j:(i.stop(D,E),d.isFunction(m)?m.call(i,e):m===E?i[n]():i.fadeTo(parseInt(g,10)||90,e?1:0,function(){e||i.hide()}),e||i.queue(function(a){i.css({left:"",top:""}),d(zb).length||i.detach(),a()}),h=e,f.destroyed&&(f=F),j)}}),j.init()},xb=new xb,d.extend(w.prototype,{init:function(a){var b=a.tooltip;return this.options.on?(a.elements.overlay=xb.elem,b.addClass(yb).css("z-index",y.modal_zindex+d(zb).length),a._bind(b,["tooltipshow","tooltiphide"],function(a,c,e){var f=a.originalEvent;if(a.target===b[0])if(f&&"tooltiphide"===a.type&&/mouse(leave|enter)/.test(f.type)&&d(f.relatedTarget).closest(xb.elem[0]).length)try{a.preventDefault()}catch(g){}else(!f||f&&"tooltipsolo"!==f.type)&&this.toggle(a,"tooltipshow"===a.type,e)},this._ns,this),a._bind(b,"tooltipfocus",function(a,c){if(!a.isDefaultPrevented()&&a.target===b[0]){var e=d(zb),f=y.modal_zindex+e.length,g=parseInt(b[0].style.zIndex,10);xb.elem[0].style.zIndex=f-1,e.each(function(){this.style.zIndex>g&&(this.style.zIndex-=1)}),e.filter("."+$).qtip("blur",a.originalEvent),b.addClass($)[0].style.zIndex=f,xb.update(c);try{a.preventDefault()}catch(h){}}},this._ns,this),void a._bind(b,"tooltiphide",function(a){a.target===b[0]&&d(zb).filter(":visible").not(b).last().qtip("focus",a)},this._ns,this)):this},toggle:function(a,b,c){return a&&a.isDefaultPrevented()?this:void xb.toggle(this.qtip,!!b,c)},destroy:function(){this.qtip.tooltip.removeClass(yb),this.qtip._unbind(this.qtip.tooltip,this._ns),xb.toggle(this.qtip,E),delete this.qtip.elements.overlay}}),wb=R.modal=function(a){return new w(a,a.options.show.modal)},wb.sanitize=function(a){a.show&&("object"!=typeof a.show.modal?a.show.modal={on:!!a.show.modal}:"undefined"==typeof a.show.modal.on&&(a.show.modal.on=D))},y.modal_zindex=y.zindex-200,wb.initialize="render",B.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},d.extend(D,y.defaults,{show:{modal:{on:E,effect:D,blur:D,stealfocus:D,escape:D}}});var Ab,Bb='';d.extend(x.prototype,{_scroll:function(){var b=this.qtip.elements.overlay;b&&(b[0].style.top=d(a).scrollTop()+"px")},init:function(c){var e=c.tooltip;d("select, object").length<1&&(this.bgiframe=c.elements.bgiframe=d(Bb).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("
    ",{id:S+"-rcontainer"}).appendTo(b.body),c.elements.overlay&&c.elements.overlay.addClass("qtipmodal-ie6fix")&&(c._bind(a,["scroll","resize"],this._scroll,this._ns,this),c._bind(e,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var a,b,c=this.qtip.tooltip,d={height:c.outerHeight(E),width:c.outerWidth(E)},e=this.qtip.plugins.tip,f=this.qtip.elements.tip;b=parseInt(c.css("borderLeftWidth"),10)||0,b={left:-b,top:-b},e&&f&&(a="x"===e.corner.precedance?[I,L]:[J,K],b[a[1]]-=f[a[0]]()),this.bgiframe.css(b).css(d)},redraw:function(){if(this.qtip.rendered<1||this.drawing)return this;var a,b,c,d,e=this.qtip.tooltip,f=this.qtip.options.style,g=this.qtip.options.position.container;return this.qtip.drawing=1,f.height&&e.css(J,f.height),f.width?e.css(I,f.width):(e.css(I,"").appendTo(this.redrawContainer),b=e.width(),1>b%2&&(b+=1),c=e.css("maxWidth")||"",d=e.css("minWidth")||"",a=(c+d).indexOf("%")>-1?g.width()/100:0,c=(c.indexOf("%")>-1?a:1)*parseInt(c,10)||b,d=(d.indexOf("%")>-1?a:1)*parseInt(d,10)||0,b=c+d?Math.min(Math.max(b,d),c):b,e.css(I,Math.round(b)).appendTo(g)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([a,this.qtip.tooltip],this._ns)}}),Ab=R.ie6=function(a){return 6===db.ie?new x(a):E},Ab.initialize="render",B.ie6={"^content|style$":function(){this.redraw()}}})}(window,document); +//# sourceMappingURL=//cdn.jsdelivr.net/qtip2/2.2.1//var/www/qtip2/build/tmp/tmp-656464emu9s/jquery.qtip.min.map \ No newline at end of file diff --git a/plugins/easy-footnotes/assets/qtip/jquery.qtip.min.map b/plugins/easy-footnotes/assets/qtip/jquery.qtip.min.map new file mode 100644 index 0000000..66766cf --- /dev/null +++ b/plugins/easy-footnotes/assets/qtip/jquery.qtip.min.map @@ -0,0 +1 @@ +{"version":3,"file":"/var/www/qtip2/build/tmp/tmp-656464emu9s/jquery.qtip.min.js","sources":["/var/www/qtip2/build/tmp/tmp-656464emu9s/jquery.qtip.js"],"names":["window","document","undefined","factory","define","amd","jQuery","fn","qtip","$","QTip","target","options","id","attr","this","tooltip","NULL","elements","_id","NAMESPACE","timers","img","plugins","cache","event","disabled","FALSE","onTooltip","lastClass","rendered","destroyed","waiting","hiddenDuringWait","positioning","triggering","invalidOpt","a","type","invalidContent","c","isFunction","length","jquery","then","sanitizeOptions","opts","content","text","ajax","once","metadata","done","api","loading","deferred","extend","context","success","error","set","xhr","status","isPlainObject","title","button","position","my","at","show","TRUE","ready","hide","style","classes","each","PLUGINS","sanitize","convertNotation","notation","obj","i","option","levels","split","pop","setCallback","args","category","rule","match","checks","RegExp","exec","push","apply","createWidgetClass","cls","WIDGET","concat","join","delay","callback","duration","setTimeout","proxy","call","showMethod","hasClass","CLASS_DISABLED","clearTimeout","toggle","hideMethod","relatedTarget","ontoTooltip","closest","SELECTOR","ontoTarget","fixed","test","preventDefault","stopImmediatePropagation","e","inactiveMethod","inactive","repositionMethod","offsetWidth","reposition","delegate","selector","events","method","body","QTIP","ATTR_ID","arguments","init","elem","posOptions","config","docBody","newTarget","metadata5","name","html5","data","parseJSON","defaults","container","solo","viewport","eq","CORNER","overwrite","ATTR_HAS","suppress","removeAttr","oldtitle","camel","s","charAt","toUpperCase","slice","vendorCss","prop","cur","val","ucProp","props","cssPrefixes","cssProps","css","intCss","Math","ceil","parseFloat","Tip","_ns","offset","size","width","height","Modal","Ie6","PROTOTYPE","CHECKS","trackingBound","X","Y","WIDTH","HEIGHT","TOP","LEFT","BOTTOM","RIGHT","CENTER","FLIPINVERT","SHIFT","INACTIVE_EVENTS","CLASS_FIXED","CLASS_DEFAULT","CLASS_FOCUS","CLASS_HOVER","replaceSuffix","BROWSER","ie","v","createElement","innerHTML","getElementsByTagName","NaN","iOS","navigator","userAgent","replace","prototype","_when","deferreds","when","render","self","posClass","_createPosClass","class","tracking","adjust","mouse","role","aria-live","aria-atomic","aria-describedby","aria-hidden","toggleClass","appendTo","append","_createTitle","_updateTitle","_createButton","_updateContent","_setWidget","instance","initialize","_unassignEvents","_assignEvents","_trigger","destroy","immediate","process","timer","stop","find","remove","end","removeData","one","builtin","^id$","o","prev","nextid","new_id","^prerender","^content.text$","^content.attr$","^content.title$","_removeTitle","^content.button$","_updateButton","^content.title.(text|button)$","^position.(my|at)$","^position.container$","^show.ready$","^style.classes$","p","removeClass","addClass","^style.(width|height)","^style.widget|content.title","^style.def","^events.(render|show|move|hide|focus|blur)$","^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)","get","toLowerCase","result","precedance","string","rmove","rrender","value","previous","nodeType","_update","element","empty","display","visibility","html","_waitForContent","images","imagesLoaded","Deferred","resolve","promise","titlebar","widget","insertBefore","substr","abbrev","effect","pluginCalculations","adjusted","newClass","tooltipWidth","outerWidth","tooltipHeight","outerHeight","targetWidth","targetHeight","left","top","visible","isScroll","win","doc","ownerDocument","isArray","x","y","distance","origin","pageX","innerWidth","documentElement","clientWidth","pageY","scrollX","scrollLeft","scrollY","scrollTop","innerHeight","imagemap","is","svg","ownerSVGElement","adjustable","isNaN","queue","next","opacity","removeAttribute","pos","scroll","scrolled","parentOffset","overflow","quirks","compatMode","parent","getBoundingClientRect","offsetParent","C","Corner","corner","forceY","f","invert","z","center","clone","state","add","has","fix","identicalState","allow","after","contentOptions","animate","sameTarget","search","focus","bind","_storeMouse","not","Event","unbind","blur","autofocus","trigger","n","fadeTo","qtips","curIndex","parseInt","zIndex","newIndex","zindex","filter","disable","enable","isString","close","aria-label","prepend","click","on","def","_bind","targets","suffix","ns","_unbind","originalEvent","isDefaultPrevented","_bindEvents","showEvents","hideEvents","showTargets","hideTargets","similarTargets","toggleEvents","showIndex","inArray","splice","_assignInitialEvents","hoverIntent","prerender","showTarget","hideTarget","trim","onTarget","containerTarget","viewportTarget","documentTarget","windowTarget","leave","nodeName","indexOf","enabled","isAncestor","parents","inactiveEvents","limit","abs","resize","special","grep","toArray","currentTarget","newValue","command","returned","makeArray","timeStamp","keepData","elems","func","old","ui","cleanData","triggerHandler","version","move","hidden","TIP","MARGIN","BORDER","COLOR","BG_COLOR","TRANSPARENT","IMPORTANT","HASCANVAS","getContext","INVALID","PIXEL_RATIO","devicePixelRatio","BACKING_STORE_RATIO","backingStorePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","SCALE","createVML","tag","tip","prependTo","lineJoin","miterLimit","save","stopPropagation","create","_swapDimensions","_resetDimensions","_useTitle","_parseCorner","_parseWidth","side","use","_parseRadius","_invalidColour","compare","_parseColours","borderSide","colorElem","color","_calculateSize","bigHyp","ratio","isCenter","base","pow","round","smallHyp","sqrt","hyp","border","reverse","_calculateTip","scale","width2","height2","tips","br","bl","tr","tl","tc","bc","rc","lc","lt","rt","lb","rb","_drawCoords","coords","beginPath","moveTo","lineTo","closePath","update","bigCoords","translate","newSize","inner","children","curSize","mimic","lineHeight","restore","clearRect","fillStyle","fill","coordsize","antialias","Number","$this","path","fillcolor","filled","stroked","opera","calculate","corners","userOffset","b","max","margin","bottom","right","shiftflip","direction","popposite","opposite","newCorner","shiftonly","xy","shift","horizontal","vertical","cornerTop","cornerLeft","user","^position.my|style.tip.(corner|mimic|border)$","^style.tip.(height|width)$","^content.title|style.(classes|widget)$","elemWidth","elemHeight","otherSide","side1","side2","lengthName","targetLength","elemLength","initialPos","mySide","atSide","isShift","myLength","atLength","sideOffset","viewportScroll","viewportOffset","containerStatic","containerOffset","overflow1","overflow2","viewportWidth","viewportHeight","min","newMy","methodX","methodY","polys","polygon","baseCoords","newWidth","newHeight","compareX","compareY","realX","realY","floor","rect","ax","ay","bx","by","_angles","ellipse","cx","cy","rx","ry","rxc","cos","PI","rys","sin","circle","r","area","imageOffset","len","shape","image","coordsString","coordsArray","frameOffset","mtx","transformed","points","root","strokeWidth2","getBBox","parentNode","baseVal","x1","y1","x2","y2","numberOfItems","getItem","createSVGPoint","getScreenCTM","matrixTransform","defaultView","parentWindow","frameElement","MODAL","OVERLAY","MODALCLASS","MODALSELECTOR","focusable","expr","map","mapName","isTabIndexNotNaN","href","focusInputs","blurElems","focusableElems","first","stealFocus","targetOnTop","current","onLast","prevState","mousedown","modal","escape","keyCode","stealfocus","visibleModals","detach","overlay","modal_zindex","oEvent","last","^show.modal.(on|blur)$","IE6","BGIFRAME","_scroll","bgiframe","adjustBGIFrame","redrawContainer","redraw","tipAdjust","dimensions","plugin","drawing","perc","ie6","^content|style$"],"mappings":"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"} \ No newline at end of file diff --git a/plugins/easy-footnotes/assets/qtip/jquery.qtipcall.js b/plugins/easy-footnotes/assets/qtip/jquery.qtipcall.js new file mode 100644 index 0000000..acddbff --- /dev/null +++ b/plugins/easy-footnotes/assets/qtip/jquery.qtipcall.js @@ -0,0 +1,18 @@ +jQuery(document).ready(function($){ + $('.easy-footnote a').qtip({ + position: { + my: 'top center', // Position my top left... + at: 'bottom center', // at the bottom right of... + //target: $('.container-post') // my target + //viewport: $('.post_copy') + }, + style: { + classes: 'qtip-bootstrap' + }, + hide: { + fixed: true, + delay: 400, + event: 'unfocus mouseleave' + } + }); +}); \ No newline at end of file diff --git a/plugins/easy-footnotes/easy-footnotes-admin.php b/plugins/easy-footnotes/easy-footnotes-admin.php new file mode 100644 index 0000000..9c3ad61 --- /dev/null +++ b/plugins/easy-footnotes/easy-footnotes-admin.php @@ -0,0 +1,48 @@ + $easyFootnoteLabel, + 'useLabel' => $easyFootnoteCheck, + ); + + update_option('easy_footnotes_options', $updateOptions); + + ?> +

    + + +
    + " . __( 'Easy Footnotes Settings', 'easy_footnotes_trdom' ) . ""; ?> + +
    + + " . __( 'Easy Footnotes Settings', 'easy_footnotes_trdom' ) . ""; ?> +

    +

    + +

    size="20">

    + +

    + +

    +
    + +
    +

    Shortcode: [note]Insert your note here.[/note]

    +
    +
    diff --git a/plugins/easy-footnotes/easy-footnotes.php b/plugins/easy-footnotes/easy-footnotes.php new file mode 100644 index 0000000..7f39761 --- /dev/null +++ b/plugins/easy-footnotes/easy-footnotes.php @@ -0,0 +1,140 @@ + 'Footnotes', + 'useLabel' => false, + ); + + add_option('easy_footnotes_options', $footnoteSettings); + add_shortcode( 'note', array($this, 'easy_footnote_shortcode') ); + add_filter('the_content', array($this, 'easy_footnote_after_content'), 20); + add_action('wp_enqueue_scripts', array($this, 'register_qtip_scripts')); + add_action('admin_menu', array($this, 'easy_footnotes_admin_actions')); + } + + public function register_qtip_scripts() { + wp_register_script( 'imagesloaded', plugins_url( '/assets/qtip/imagesloaded.pkgd.min.js' , __FILE__ ), null, false, true ); + wp_register_script( 'qtip', plugins_url( '/assets/qtip/jquery.qtip.min.js' , __FILE__ ), array('jquery', 'imagesloaded'), false, true ); + wp_register_script( 'qtipcall', plugins_url( '/assets/qtip/jquery.qtipcall.js' , __FILE__ ), array('jquery', 'qtip'), false, true ); + wp_register_style( 'qtipstyles', plugins_url( '/assets/qtip/jquery.qtip.min.css' , __FILE__ ), null, false, false ); + wp_register_style( 'easyfootnotescss', plugins_url( '/assets/easy-footnotes.css' , __FILE__ ), null, false, false ); + } + + public function easy_footnote_shortcode($atts, $content = null) { + wp_enqueue_style( 'qtipstyles' ); + wp_enqueue_style( 'easyfootnotescss' ); + wp_enqueue_script( 'imagesloaded' ); + wp_enqueue_script( 'qtip' ); + wp_enqueue_script( 'qtipcall' ); + wp_enqueue_style( 'dashicons' ); + + extract (shortcode_atts(array( + ), $atts)); + + $this->easy_footnote_count($this->footnoteCount, get_the_ID()); + $this->easy_footnote_content($content); + + if (is_singular() && is_main_query()) { + $footnoteLink = '#easy-footnote-bottom-'.$this->footnoteCount; + } else { + $footnoteLink = get_permalink(get_the_ID()).'#easy-footnote-bottom-'.$this->footnoteCount; + } + + $footnoteContent = "
    $this->footnoteCount"; + + return $footnoteContent; + } + + public function easy_footnote_content($content) { + $this->footnotes[$this->footnoteCount] = $content; + + return $this->footnotes; + } + + public function easy_footnote_count($count, $currentPost) { + if ($this->prevPost != $currentPost) { + $count = 0; + } + + $this->prevPost = $currentPost; + + $count++; + + $this->footnoteCount = $count; + + return $this->footnoteCount; + } + + // Calculate reading time by running it through the_content + public function easy_footnote_after_content($content) { + if (is_singular() && is_main_query()) { + $footnotesInsert = $this->footnotes; + global $footnoteCopy; + + $footnoteOptions = get_option('easy_footnotes_options'); + $useLabel = $footnoteOptions['useLabel']; + $efLabel = $footnoteOptions['footnoteLabel']; + + foreach ($footnotesInsert as $count => $footnote) { + $footnoteCopy .= '
  • '.$footnote.'
  • '; + } + if (!empty($footnotesInsert)) { + if ($useLabel === true) { + $content .= '

    '.$efLabel.'

      '.$footnoteCopy.'
    '; + } else { + $content .= '
      '.$footnoteCopy.'
    '; + } + } + + + } + return $content; + } + + // Functions to create Reading Time admin pages + public function easy_footnotes_admin() { + include('easy-footnotes-admin.php'); + } + + public function easy_footnotes_admin_actions() { + add_options_page("Easy Footnotes Settings", "Easy Footnotes", "manage_options", "easy-footnotes-settings", array($this, "easy_footnotes_admin")); + } + +} + +$easyFootnotes = new easyFootnotes(); + +?> \ No newline at end of file diff --git a/plugins/easy-footnotes/readme.txt b/plugins/easy-footnotes/readme.txt new file mode 100644 index 0000000..08347c1 --- /dev/null +++ b/plugins/easy-footnotes/readme.txt @@ -0,0 +1,115 @@ +=== Easy Footnotes === +Contributors: yingling017 +Donate link: http://jasonyingling.me +Tags: footnotes, read, blogging, hover, tooltips, editing, endnotes, Formatting, writing, bibliography, notes, reference +Requires at least: 3.0.1 +Tested up to: 4.1 +Stable tag: 1.0.8 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +Easy Footnotes let's you quickly and easily add footnotes throughout your WordPress posts using a simple shortcode in the text editor. + +== Description == + +Easy Footnotes let's you add footnotes throughout your WordPress posts by using the shortcode [note]Footnote content.[/note]. Easy Footnotes will automatically add the number of the footnote where the shortcode was entered and add the full footnote text to the bottom of your post in an ordered list with a corresponding number. + +Hovering the footnote label will show the user the full text of the footnote using the jQuery Qtip2 plugin. Clicking on the footnote label will take the user down the page to the corresponding footnote at the bottom of the WordPress post. Each footnote at the bottom of the post has a icon that can be clicked to return to that particular footnote within the post copy. + +That's all it takes to start adding footnotes to your WordPress blog! + +== Installation == + +1. Upload the 'easy-footnotes' folder to the '/wp-content/plugins/' directory. +2. Activate the plugin through the 'Plugins' menu in WordPress +3. That's it! Now simply start using the [note]Footnote content goes here.[/note] shortcode within your posts. + +== Frequently Asked Questions == + += How do I insert a footnote into my post. = + +Simply use the shortcode [note]Footnote content goes here[/note] and Easy Footnotes will enter numeric footnotes into your post that open on hover and take the user to the footnote at the bottom of the page on click. + += That's awesome! = + +I know, but that's not really a question. + += Oh right, why is that so awesome? = + +Because it's easy. And it's integrated with the qTip2 jQuery plugin to display your footnotes in lovely tooltips on hover. Plus it automatically numbers your footnotes in the order you enter them into your post. + += Any plans for the future? = + +Yeah, I'll be integrating more of qTip's options for displaying the tooltips. Give users the ability to set their own icons and labels. And much more as I get user feedback. + += That sounds great, but I was thinking more personally. You know, are you up to anything tonight? Want to grab some pizza? = + +How did you even get in here? + += It's cool I'll let myself out. One last question though. Any advice on filling up a new plugins FAQ section? = + +Maecenas sed diam eget risus varius blandit sit amet non magna. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Maecenas faucibus mollis interdum. + + +== Screenshots == + +1. Displaying a footnote on hover. +2. Several footnotes (feetnote?) at the bottom of the post. + +== Changelog == + += 1.0.7 = +* Added the Qtip2 unfocus event for hiding footnotes on iPad and other touch devices. + += 1.0.7 = +* Fixed issue where Footnote title was showing on pages without any footnotes once activated through the settings. Also changed the priority of the add_filter('the_content') call to be 20 in order to show above Jetpack Related Posts + += 1.0.6 = +* Added the ability to insert a title above the footnote section at the bottom of the post content. This is controlled in the Easy Footnotes Settings page that can be found under Settings in the WordPress Dashboard. + += 1.0.5 = +* Updating logic for appending footnotes to the bottom of posts. Now only appends to single posts, custom post types and pages that are using the main post query. Also fixed footnote count when multiple posts are shown in the content on one page, such as the home page. Footnotes outside of the single post also now link to the footnote within the single post. + += 1.0.4 = +* Fixed bug where footnotes were being appended to the end of the content on home pages and ignoring the more tag + += 1.0.3 = +* Added a delay of 400ms to the footnote closing so it stays open better when hovered + += 1.0.2 = +* I messed up the version tag on 1.0.1. Just upping ti 1.0.2 for precautions. + += 1.0.1 = +* Footnotes now stay open when moused over for interacting with links + += 1.0.0 = +* Initial release + +== Upgrade Notice == + += 1.0.0 = +Initial release + += 1.0.1 = +Footnotes now stay open when moused over. Allows for adding links into footnotes. + += 1.0.2 = +I messed up the version tag on 1.0.1. Just upping it 1.0.2 for precautions. + += 1.0.3 = +Added a 400ms delay to the footnote closing via qTip. This allows the footnote to stay open better when mousing into for access to links. + += 1.0.4 = +Fixed bug where footnotes were being appended to the end of the content on home pages and ignoring the more tag + += 1.0.5 = +Updated logic for appending footnotes to the bottom of single posts and pages. Now using is_singular and is_main_query as opposed to just is_single. This allows for appending posts to the bottom of posts, custom post types, and pages. Also fixed logic for numbering posts on the home page when showing multiple posts. Footnotes outside of the single post also now link to the footnote within the single post. + += 1.0.6 = +Added the ability to insert a title above the footnote section at the bottom of the post content. This is controlled in the Easy Footnotes Settings page that can be found under Settings in the WordPress Dashboard. + += 1.0.7 = +Fixed issue where Footnote title was showing on pages without any footnotes once activated through the settings. Also changed the priority of the add_filter('the_content') call to be 20 in order to show above Jetpack Related Posts + += 1.0.8 = +Improved footnote usability on touch devices. \ No newline at end of file diff --git a/plugins/easy-footnotes/screenshot-1.jpg b/plugins/easy-footnotes/screenshot-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..74f55072617b0b621161bbeab8370cbcbf5ff711 GIT binary patch literal 58078 zcmeFYWmFtd(=OV>;K3Or!QF#91owg94#5fTlHiu$PH=|-26u;n;3N>-VF(a{C4|5b zAdt)Zo%5Y_&iQ%Qy8mv?TGQRTr@No3UAuNy?Pvb2{zC#p>dI=$00<2L>>fYBzf*u% z(a+Z94FCer0RYf>Z2AEZ$k}<=*aLQm#}?4P4Immo`(FZn+ykROeuL5fr(mLEJPJA{ zCf0uh69)$u7Y7IL{}d1!7>t3AfrE*OgO7`ii%&@KD1?On^`rl}!TTRa|L1l8>*yZ> zAjSq(z#3o>F@Q!40uzJ&jR4h;upg0tK#xHGr(j}XU_WBR0X;T8p84O33;>SmTz+g0Vtp9!t2#uH@jLtxUA*W-V#zmo?Mbn0{1{gKpMz0smb>^Q0edu2ESCy#U z(_5QS_%zznlt1=)QYSNnF{46H1}Igxp^Mlrp$8+(CxaYMzIF-=&xt&1MTw7!_4yUSxV}AhWWkIQ5OlO$Up`>jV86-Kp?VQ|ay}<& zKm*?v#=>RZEJH(s$8ZLR-|v7CLGD3!T3?)nYnSr=4B_^F(ZTgWVR*4ubaiRW6d#?H zEqL}8>D>)xDtOW{MJ!>RvVLfG$vx|&Xl9&kigv{bP zBsqX0R%8k&KKz?J136gQoKx61R|VV4cbbE=^GVhS9XlWHWx zJ!NE9?=<0^stwZ{ZogemvZ^u10t7|wb<4JTm~V3qMaL&%0jxzuS#TN=9`3Bk9T_YD zz4i}Hn7_JdsBo^Gg>0`Q6Zsz#>IcSN&AL|qDflLoo>qU##+&7C0J+ak7Umoh(!H7g z#YIv?LU-b3`kf9(7DY`1Z`Q@=$co*V<8lBviZ8DzQfHe`y(>-{^#QMx-Cn<;Qfft* ze#MWNs;7Y;G}AI}iKEYxhx(D|zvEg*;rb1}q-B;^^ud_5JTRr&R|0H9O}=jg(dyPv!AjH%)H2M7#TZ~rj-7V$QXmU9y{ ze=MT%+ej14I-*skLJuxymdf1e^5nrU>=FKu??m*|)-*kw3LNtcp~AYgcl|RP)o;tNi|8o-)UwM@R8t%XvdD{QS>uZD zin0Tw4OnNWtFvDbpk<;Y zD&p^Zn>=ODAaD{VYYSNAJK(^;DoC{S5C5b@m7+MOVCq#_v^y2&9-Df!ZJ zz@NyOMZ2QbbSBY6=;|!4r{ABiaRhd;tmup4`gGwZ6XDplb+qem?~LNAp_;EodxQ3! zV9uvHarr*K6SY0V|>l?zAW8GBV%@ChJqf?97a1FaCgz7WYn4zk(A3 zQ_;7*PP!tD?~O@)(^+NTLrG+8*u8Ter|LeWgO#XqOY3^$Vs(NXq5aYbWA^HyW>E|F zekK_ZU+7p}kv30W-#<5&eG#~Ilv{|P5xV6* zgJ?yCWocY=Pf&YHo$Fy^*rfCfGC&E5E$mzFpTR_0yC?X5p-EQ-8KLHq*9%TA~od_7kkQ(m1=(7ke zdfD0-mPjblxO1D}-B*yfVuYrtu{@QYk?NkSIy&f{{`b!ZL2-w(Y)H!ZdI^!L%pe-> zD<5e)son_zx9TN2!3-@*0_AyS*Mr+ey%fw(g;`A{r^uE{FxaQK#M{SHJ_kYDE7}>_ zy8t`$t9?GgZ4jScL(+sOdj9$+HrqukO|Nfmu8LYXqZer>1};DoEh|Qi)3R}*)w%TP zT6Y7JIj={Fc`2pq4Ia-589DjBngA#mW^4d@If8x>0OGYoFhq1VOY~IrOQ-I3UN;FBfXMXwf~{Q2A0U&%1?PTO=j1aeph(L8Tc9 zsB>ArXZO56Z)c1zuEvsrl!-wyc3j&aAp%)V7F#P?#m$yQB3S~)YFAI_zr)dF)16pH zroyXj0k+i=+_0!laKzc_i-p(tCax^B_pMB|%T`SGulOZiQfNkc;Gw&}q2SRmz*N#p zB}vGDJ-&in5>aFGT>Nh03SEEuQzx;v`q0d6LNaneXh9%B0H@I+$$7Umnl_7Y`oXF2 z!ir3B@U3{tkN;ivPM=wVf=$u zR*LMjLr49Eq^@~Y+qpfq^3Ym~VI>N$Cm+jvwU7xiZhRRA`4x8a;^D_cxb%9SGOy1m zlir+R#;$iTbNaePt{V>Dz*B5&saw;NrK0QqjWBnz89p zioTTV5M3zjm$e)T8ry43h~m&iR~T~%3x6hBP8q{OeWwy@(1TlNO%GA?LXAM_ZMitR zJ=cC!$+pyci`tm&ipXSOSdaHW`vtJ2fCPg@>-ux%sor@x&kXdl@mndqKdyM^JEqGs zbt)B}ebAw0(rPQF&>Sum=g&J4{P!KY8=bfGYcCP!TPjm&C*mCSfiEL2tPYLL%Yn)m zuA@kizX6UInH-u(ZKUj7BE2>#V9XyhZS+~y%{Zs`Sqh798b~w$nd*_Or4USWYJ>#l zfN+$anA2g~i!8jo??dr2B(gR4K-Y5{ev2S%b_@n|^o`dyE6%!&Oeo;vG?4t~Y1DwO%bhUpiy`A*IOcJL$HmbV`Ckd*PShb4%VB*2&jH81Gpf3`W1(VgWo;qNv$dFZ9 z!=M$jFG3w%t5l?Joz05tOy#<91JR~u<|Z@}uDEFqsh@~-JaxRoYj)KbNU&t6F)<`h zv6}HuU(}tRO`f=~W0I^-j9Y9h|Em9>Pu;OAY|Bh({OqanSNd)UtuAA+Qy^^_JwwlV z1Nj?5lCz=ShNHYE&qD!m@p+C!DJ+0G_TdvQqu_>&1?)Lbb=ro!_-MpsX~~}cxeT*Q zw*a*sxu$)lY#qg`X2p^`mz-gbHgFn%xPH}N`lV;!OTEbN=3IH>Jm#%84pv)t6??h? z{{U+>HoR05au)3u>d&=uu(7GW(~HrbtTeB`G?_&hHX1EwO=>`GGRPLX-2Z&q7E)vR zK+1RnAy^zIDe>a8YE0dE4Jl)zrxbX*5_D|Qk8fSPa&4HwpT&md;w*3^k!&igxIm_P zle9nY-oo-7&5C~lg9wBS#X{qdLv^m)7dl(3SGYRNqtqfLbV2Ef6>Dtl%8F#v&xEH@ z6D5~5sW7nwpW-u+=ofTPN!mNTll{<9eC^+kV@!efnqms$xbCBHZ}@xW6kWyY1V%}| z`;xd17?L6VLBUo*9WPtf6?A6UOb55;VvEV;n7^{LigU2!wGfj;RmCK@AO6xI2JI@{ zLIP>A_Rv~3iVlzO4IJjb3^$otcl;XU?#L-g^9@2@goK=kWRh8Q&v z9EG}<|Flj!{e4T2iHfkrAFO`bR?d*_L2fv^-K7~zH-6);nalTlQHRb(&#;k7 zi#E8mjdZE!Wr5{2fL|wXq`P5fZhFdCv>F?^8F{MdLsIO{Qvhh1x<08G^{A-lox=We zv81_rM-RRAd4XZSpTar%+ z)NCe7_u{gVdn&9(Zg{3=5e`dGCcr(XDfp^@>-;_%+*9ln1$N~V);jF)&#H2tIpV>a zYFpNgfeahHK9%(5-BuaRGl$bkh}Q+b{jBeOrk_DJ0_`Sc5Iby6LSS`}`fU3BwVd@k zZG(n5vzgXV!X+izhTV+SK6pFj48!q0<#%$>z@xt-OUf$QSojK_L}VtTR#w!U58yj= z?MxK4^9u>m?}ByTD%a%MRS7~!3>0yV2q3?5%HpM$7@|ri^gJm^>KzB$$&pWp{q859 zItnwqyv^g^F#7eS!*3OON>>t>Eh94 zXRn^GQnTA+#+W$7!W98U1YoaN`44EoFyGiBG`6U+lb~{!oHY1rooVOa;?$$xNPyER zNIoUPIU8Rc>nEto37#O7vNCQm+k3et9F;Un+{Bo@jF)EOh`P#@bU2IXDPmDYCadSg zvFn|`dOCr%FDr4uFro5#;LGd&^lu|$g>P{$OqkHm+t}vuY4Tg%UgcEokI~RmR~Phqh7U7O=x{53f_-gOq6}je{CIU5 zr|MHW`#bb;LM90FWbgcGRE|0hA|7x2$vr$JZ6?t~VyIZclF7)M<;qbv#9YYAfem{S z2Vx)%f&Bo?@sro7?sSf-wCC=~w~d|5aL5dwk=1fMRXHhpPirt#pb@|o$$a=jdjt*Z zOay&95F){ z_6Js(y_$E;fAK=VpW&;{Z|A32$0{n4=IZF~4>}NnQFs{}fojVL(R~Re34Y73dy>pDnMLf6ukPWXsh8gmNS z5@183@6bf05^NAB*c!2xT62O z(1l}>#DcKEEL?{3rWuBB{pauxY%3+;MT8j z*I~e;FJ_Sl`-=PZAHW;3LEAQKMiOTg9m2G#>U6ifR4L1C=zsgyRF$#6hTRCcchQH& z{!}+5i!{oMh!_exrU=0_)Bgt;oqfJxI@{A+V#0wh)vnn`aI^ zAocnc5niEa3<~hUggR z7=PRa+Ov}SZ%Iw}o>yEe{jLh{?y60`$4z|ERhsg?61~b=c)G^Htd&c!B_t<&N2AsM zw;;PyjC`hVqX!z2|A0(p{kaq#A4IC7IsKm349&SMwxO1c+w!YNSJEb2-vFR%`-YY> zfpq?4Ilb64xY4-uPIa^P*Kchq#*W>O@;$N*&nCu9Nwc!VW5KKNlC@n!eMNB&2z$y< zRO%+A^LcT={l_n98a9TTqI9pOY3KgDaJBmfaHEKe&eOCu11Nv}Edt*B3fY0;t0oQ} zG2fG4=dm)bm~edSP@4D!CHCIwP0LIbXu^aRpk($LN5szuKk7FEMk_Iv9s7k8`Smr`@i2c-S{QEl9&VRvFzx#(4O*J8I$01g5gv~5#3doM z#hKTtI0qazZASji*eiTG-(dRhv57Tqoh;s+>*Gl zzLK<`D_Jr%vQ~Ae@^X3*i>;o%(naoP|;3q1Wwp}d#bL|nNEI8WavKkb&M0qiM95PopP9I;+;c(+ZF9FN^;W? zBlz1cwByJ)Wh5zHQ(n47Nku42-RM%jjy<6{;o> zWLpdIoRL1FCryo(d-ATyb$+1SVUK}{;-e)rHh~4VMGbCE3yj~F`uqbtUHWMojlV#7 zmc_b!BsVYDyzCi!)Z){;NNQ@B_f<>&mTktT8i-Ou@Tl)S8N)6tGwFWFJC*hzqRg6Q-9|!>c`-8pV3?x9lWe8xvXI$ zOVM0mAT=%9ZS^B6w*?);h*!o*V|C}_`Lm6>Yfb7uQ@@-~TYpJJ(NWBOPIxA&u? zUv1FV*725S*VbVH-WHTt9Yz6!V_4H$9MGno9pOe}2c}Je{>%AE={NC#T{vHYXFN;Z zN?7~@oD(xrL;eA>Bw9Qz4ysa8ky+3^86e>1@a__5bw!b8GKEI+0SoAjP4o>D%=?U)Fcs|~Ny>i7*G zvy@Gdop``i1{1$xAfS7r&^T-JE_EH&LHlcd;Kbkrgw?~6gD_Z#+wskbDbw_^ncUr{ z`N*y~)1zhH=5DY6dhJ6Lyd@iM3sMy2tnZih*}QwAJ?tX#ZeWwEnWV+w4kD-{Y0Ai@ z6iPh(oRd9ek7iQy&xow5Pu#~J41gpucz+>_J&s34_iDrAPW2yPX2H-9E$<>v+f358 z?vKtr7P_<%py({{oYcD{4I#lXQY08l`M@U%YF##q#u(q&arV2SJ%hN#y`ICUUVO@U zMbbq@^>S&+03PP)*=r@PuibYcdqXQmjT^M`J>G8_Ye_TA36*vt>0VR(n9p5(a!%7^ z**$dG7q@5%^iRURXI7MYOw1zCs`UcIqlYP}BuhjHx(lzfHr;)_w?8JA$l)?vx-TMbT*<*VjV*9f1G8BxzZCY{)rk~o|l^$_*28euR zs1pkIz962AL%_jC=Kg#aviyO3lrQFR{QCxt8zqTReHEw9JFTB}m;Ci>%x0c5h^^&i zRAG0@^|@xCSpTww@$IVyGU)2#72Bo)eX+WnXCYd9ON2U?efsfG{}?u#lVu7TU-**` zhKyPgfw5DZH(+KxVGL@@ub6t(l=^6yP^O5Evko^pg`l+4{QgEUGV>*aHUOiRzNpo)&LLRoc*auwZTHbt4=eI(mB~U-z?zxuQ{&+pGk z#hvj7;<*u17A%g|Up$a_O><7{YG#>4C=0+&m#h&%x}N{ULhu1O&@HdNzN=jrS7pjX zNV_`>^g4;Rj(-py)FWiJn3F_P`ooV1By7M?YY^oZ^$sQ3c4pi@$1J*`TpL%XeORwX%C4^pQ0lZ=WokY|X%j zpMJ}>gS9t_^Y+f#+&CzGABM>dkkv&)(w}9m4Y;t>8lgnm*#4D^(10 zE(G&zaEHI8YX0K;a@e3b_ z$Gnx^--J+S)=yafxk!~QpY-HbJ$WcjN9FIl-8g!Oaxj$k!kZe`4);uNnLmC6nXB3C zkOrZzzUpDbj*~?&^Mzw)qtL_TU1JezMeQf`K}|Lx*(-Q^+vy;2Y(=6j7tGIG$0F_m zB>cg``xCJ(+O^DiFk&QL*!r{UMyFqme$*@V8?Ecv>kaGmyT5~!^Q0|V7JDcCxTBcI zG^2_~r4m{s#2CA&S#2RtP}je*!QS*DANsC#!tR1QZa!$if7(pSt+HRFtHG_BhZxY6 z(QTj6KnciRH|wiTWCnSM?d~0dKXz0cK~!JKbv!c&=<#{E_?)J2bXD)KAD8R?32(Yx zW}KW6En$}|?6f2TT^2?}mxw#??MB_BJ#=i=ygz|89PaiG{bU%)hQjy0-yQ%ESl?2E6m?Pi8+FZlQCsu zF;b2fbh($Z7IA@T5arx|y;&dB-JfM7-?}a;?!|&47!_UXVx1FD#(f`~n@EPp%CqA^=UUZMr{Sl0p^jvj+uK`i)eSoJ%j-UqCqS_h9pTuzzPKeg-GNivoaEn8x8TU(3_1}v(s8IVE~%J=zI zZBS?_Rwoh1s}EE2yz7$d-OB1LbhRf26x!{Yb!Yb4iOrLr6vP$J%15WLGao3h)Bp)b zZ8(kAlW{r*13G8L<-yL!3fhMrJU6YyZL)^J*vuC7mZz`ZMxpkdqmEV**W&aA=G^1i z_#mU=WOpNvs|=08Nk95sQM2~F&8}rXDa|MvX4Vonxd|_C*ybI@dXm=_$_%3Ea7f5- z4Knn1Jab?C1Ez_AA9KC5#FgXA(q46q&D&!x@?HOcZ_bMQRK5*8L*(Z(q)O9Al%<&a zNRU}T&p@w+^mZCmBD2#9_6Jn8^Uuq_YDKu*TY3EX8Qe|M+TpYc zZ2SD_`~6*{Nb~JR4P_o})F71j7GoXS!8(!Zqb80>iO4L!!boU>{`HQ0u<_M?F?V

    z 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 jscie#Rue5X9<`z0E$lxvparent = &$parent; + + add_action( 'admin_menu', array( &$this, 'options_menu_init' ) ); + add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueue' ) ); + + //upload helers + add_filter( 'get_media_item_args', array( &$this, 'send_to_editor'), 10, 1); + + } + + /** + * Register our menu with WordPress + */ + function options_menu_init() { + add_options_page( __( 'Infinite Scroll Options', 'infinite-scroll' ), __( 'Infinite Scroll', 'infinite-scroll' ), 'manage_options', 'infinite_scroll_options', array( &$this, 'options' ) ); + } + + + /** + * Callback to load options template + */ + function options() { + + //toggle presets page + $file = isset( $_GET['manage-presets'] ) ? 'manage-presets' : 'options'; + $file = isset( $_GET['submit'] ) ? 'submit' : $file; + + require dirname( $this->parent->file ) . '/templates/' . $file . '.php'; + } + + /** + * Enqueue admin JS on options page + */ + function admin_enqueue() { + + if ( get_current_screen()->id != 'settings_page_infinite_scroll_options' && !defined( 'IFRAME_REQUEST' ) ) + return; + + $suffix = ( WP_DEBUG || SCRIPT_DEBUG ) ? '.dev' : ''; + $file = "/js/admin/infinite-scroll{$suffix}.js"; + + wp_enqueue_script( $this->parent->slug, plugins_url( $file, $this->parent->file ), array( 'jquery', 'media-upload', 'thickbox' ), $this->parent->version, true ); + wp_enqueue_style('thickbox'); + + wp_localize_script( $this->parent->slug, $this->parent->slug_, array( 'confirm' => __( 'Are you sure you want to delete the preset "%s"?', 'infinite-scroll' ) ) ); + + } + + /** + * If image is sucessfully uploaded, automatically close the editor + * and store the image URL in the image input + * @param array $args the default args + * @return array the original args, unmodified + * @uses media_send_to_editor() + & @uses send_to_editor() (javascript) + */ + function send_to_editor( $args ) { + global $wpdb; + + if ( $args['errors'] !== null ) + return $args; + + if ( isset( $_GET['attachment_id'] ) ) { + + $id = $_GET['attachment_id']; + + //workaround for WP 3.2 non-flash upload + //not ideal, but works for an edge case + } else { + + //because we can't get the attachment ID at this point, try to pull it from the database + //look for the most recent parent-less attachment with same title and mime-type + $upload = $GLOBALS['HTTP_POST_FILES']['async-upload']; + $title = substr( $upload['name'], 0, strrpos( $upload['name'], '.' ) ); + $id = $wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' AND post_mime_type = '" . $upload['type'] . "' AND post_parent = '0' AND post_title = '$title' ORDER BY ID DESC LIMIT 1" ); + + //if for some reason we couldn't pull the ID, simply kick + //the user will just have to click insert to close the dialog + if ( !$id ) + return $args; + + } + + //rely on WordPress's internal function to output script tags and call send_to_editor() + media_send_to_editor( wp_get_attachment_url( $id ) ); + + return $args; + + } + + /** + * Wrapper function to load the tinyMCE Editor + * Used to allow fallback to pre-3.3 function + * @param string $field the field to load the editor for + */ + function editor( $field ) { + + //3.3 + if ( function_exists( 'wp_editor' ) ) + wp_editor( $this->parent->options->loading[ $field ], "infinite_scroll[loading][{$field}]", array( 'media_buttons' => false, 'textarea_rows' => 5, 'teeny' => true ) ); + + //3.2 + else + the_editor( $this->parent->options->loading[ $field ], "infinite_scroll[loading][{$field}]", null, false ); + + } + + +} \ No newline at end of file diff --git a/plugins/infinite-scroll/includes/options.php b/plugins/infinite-scroll/includes/options.php new file mode 100644 index 0000000..bfbbbbd --- /dev/null +++ b/plugins/infinite-scroll/includes/options.php @@ -0,0 +1,191 @@ +parent = &$parent; + + add_action( 'admin_init', array( &$this, 'options_init' ) ); + add_filter( $this->parent->prefix . 'options', array( &$this, 'default_options_filter' ), 20 ); + add_filter( $this->parent->prefix . 'js_options', array( &$this, 'db_version_filter' ) ); + + } + + + /** + * Tells WP that we're using a custom settings field + */ + function options_init() { + + register_setting( $this->parent->slug_, $this->parent->slug_, array( &$this, 'validate' ) ); + + } + + + /** + * Runs options through filter prior to saving + * @param array $options the options array + * @return array sanitized options array + */ + function validate( $options ) { + + //add slashes to JS selectors + $js = array ( 'nextSelector', 'navSelector', 'itemSelector', 'contentSelector' ); + foreach ( $js as $field ) { + + if ( !isset( $options[$field] ) ) + continue; + + $options[$field] = addslashes( $options[ $field ] ); + + } + + //force post-style kses on messages + foreach ( array( 'finishedMsg', 'msgText' ) as $field ) { + + if ( !isset( $options['loading'][$field] ) ) + continue; + + // wp_filter_post_kses will add slashes to something like "you've" -> "you\'ve" but not added slashes to other slashes + // Escaping the slashes and then stripping them, gets past this problem and allows preservation of intentionally inserted slashes + $options['loading'][$field] = stripslashes(wp_filter_post_kses( addslashes($options['loading'][$field] ))); + } + + //handle image resets + if ( isset( $_POST[ 'reset_default_image'] ) ) + $options["loading"]['img'] = $this->defaults["loading"]['img']; + + //pull existing image if none is given + if ( empty( $options["loading"]['img'] ) ) + $options["loading"]['img'] = $this->loading["img"]; + + // force `debug` to be a bool + $options["debug"] = (bool)$options["debug"]; + + return apply_filters( $this->parent->prefix . 'options_validate', $options ); + + } + + + /** + * Allows overloading to get option value + * Usage: $value = $object->{option name} + * @param string $name the option name + * @return mixed the option value + */ + function __get( $name ) { + + return $this->get_option( $name ); + + } + + + /** + * Allows overloading to set option value + * Usage: $object->{option name} = $value + * @param string $name unique option key + * @param mixed $value the value to store + * @return bool success/fail + */ + function __set( $name, $value ) { + + return $this->set_option( $name, $value ); + + } + + + /** + * Retreive the options array + * @return array the options + */ + function get_options( ) { + + if ( !$options = wp_cache_get( 'options', $this->parent->slug ) ) { + $options = get_option( $this->parent->slug_ ); + wp_cache_set( 'options', $options, $this->parent->slug ); + } + + return apply_filters( $this->parent->prefix . 'options', $options ); + } + + + /** + * If any options are not set, merge with defaults + * @param array $options the saved options + * @return array the merged options with defaults + */ + function default_options_filter( $options ) { + + $options = wp_parse_args( $options, $this->defaults ); + wp_cache_set( 'options', $options, $this->parent->slug ); + return $options; + + } + + + /** + * Retreives a specific option + * @param string $option the unique option key + * @return mixed the value + */ + function get_option( $option ) { + $options = $this->get_options( ); + $value = ( isset( $options[ $option ] ) ) ? $options[ $option ] : false; + return apply_filters( $this->parent->prefix . $option, $value ); + } + + + /** + * Sets a specific option + * @return bool success/fail + * @param string $key the unique option key + * @param mixed $value the value + */ + function set_option( $key, $value ) { + $options = array( $key => $value ); + $this->set_options( $options ); + } + + + /** + * Sets all plugin options + * @param array $options the options array + * @param bool $merge (optional) whether or not to merge options arrays or overwrite + * @return bool success/fail + */ + function set_options( $options, $merge = true ) { + + if ( $merge ) { + $defaults = $this->get_options(); + $options = wp_parse_args( $options, $defaults ); + } + + wp_cache_set( 'options', $options, $this->parent->slug ); + + return update_option( $this->parent->slug_, $options ); + + } + + /** + * Don't output db_version to front end when passing args to javascript function + */ + function db_version_filter( $options ) { + unset( $options['db_version'] ); + return $options; + } + +} diff --git a/plugins/infinite-scroll/includes/presets.php b/plugins/infinite-scroll/includes/presets.php new file mode 100644 index 0000000..9cc0728 --- /dev/null +++ b/plugins/infinite-scroll/includes/presets.php @@ -0,0 +1,759 @@ +parent = &$parent; + + add_action( 'admin_init', array( &$this, 'set_presets' ) ); + add_action( 'wp_ajax_infinite-scroll-edit-preset', array( &$this, 'process_ajax_edit' ) ); + add_action( 'wp_ajax_infinite-scroll-delete-preset', array( &$this, 'process_ajax_delete' ) ); + add_filter( $this->parent->prefix . 'presets', array( &$this, 'merge_custom_presets' ) ); + add_filter( $this->parent->prefix . 'options', array( &$this, 'default_to_presets'), 9 ); + add_action( $this->parent->prefix . 'refresh_cache', array( &$this, 'get_presets' ) ); + + } + + + /** + * Allow for class overloading + * @param string $preset the theme slug to retrieve + * @return array|bool the presets or false on failure + */ + function __get( $preset ) { + return $this->get_preset( $preset ); + } + + function getThemes($args) { + if (function_exists("wp_get_themes")) { + return wp_get_themes($args); + } else { + return get_themes(); + } + } + + function getTheme($theme) { + if (function_exists("wp_get_theme")) { + return wp_get_theme($theme); + } else { + return get_theme($theme); + } + } + + + /** + * Pulls preset array from cache, or retrieves and parses + * @return array an array of preset objects + * @todo Consider using TLC Transients in case cron isn't working + */ + function get_presets() { + + //check cache + if ( $cache = get_transient( $this->parent->prefix . 'presets' ) ) + return apply_filters( $this->parent->prefix . 'presets', $cache ); + + $data = wp_remote_get( $this->preset_url ); + + if ( is_wp_error( $data ) ) + return array(); + + $data = wp_remote_retrieve_body( $data ); + + //parse CSV string into array + $presets = $this->parse_csv( $data ); + + //sort by key alpha ascending + asort( $presets ); + + set_transient( $this->parent->prefix . 'presets', $presets, $this->ttl ); + + return apply_filters( $this->parent->prefix . 'presets', $presets ); + + } + + + /** + * Return a theme's preset object + * @param string $theme the slug of theme to retrieve + * @return object the preset object + */ + function get_preset( $theme = null ) { + + if ( $theme == null ) + $theme = get_stylesheet(); + + $presets = $this->get_presets(); + + //direct match found, return + if ( array_key_exists( $theme, $presets ) ) + return $presets[ $theme ]; + + //no direct match found, permahps this is a child theme? + + //theme isn't installed, no way to know if it's a child, so skip + if ( !$this->theme_installed( $theme ) ) + return false; + + //WP version 3.4+, use the new wp_get_themes function + if ( function_exists( 'wp_get_theme' ) ) { + + $theme = $this->getTheme($theme); + + //not a theme or not a child + if ( is_wp_error( $theme ) || !is_object( $theme->parent() ) ) + return false; + + return $this->get_preset( $theme->parent()->stylesheet ); + + } + + //pre 3.4 back compat.. + //get theme by slug + $name = $this->get_name( $theme ); + $themes = $this->getThemes(array()); + $child = $themes[ $name ]; + + //not a child theme + if ( !isset( $child['Template'] ) || empty( $child['Template'] ) || $child['Template'] == $child['Stylesheet'] ) + return false; + + //pull up parent data to get its name + $parent = $themes[$name]['Template']; + $parent = get_theme_data( get_theme_root( $child['Template'] ) . '/' . $child['Template'] . '/style.css' ); + $preset = $this->get_preset( $parent['Stylesheet'] ); + + //no parent preset + if ( !$preset ) + return false; + + //rename the theme of the parent preset object for consistent return + $preset->theme = $theme; + $preset->parentPreset = $parent['Stylesheet']; + + return $preset; + + } + + /** + * On plugin activation register with WP_Cron API to asynchronously refresh cache every 24 hours + * This will also asynchronously prime the cache on activation + */ + function schedule() { + wp_schedule_event( time(), 'daily', $this->parent->prefix . 'refresh_cache' ); + } + + + /** + * Clear chron schedule on deactivation + */ + function unschedule() { + wp_clear_scheduled_hook( $this->parent->prefix . 'refresh_cache' ); + } + + + /** + * Conditionally prompts users on options page to use the default selectors + * @uses get_preset + */ + function preset_prompt() { + + $preset = $this->get_preset( ); + + if ( !$preset ) + return; + + unset( $preset->theme ); + unset( $preset->parentPreset ); + + //if they are already using the preset, don't prompt + $using_default = true; + foreach ( $preset as $key => $value ) { + + if ( $this->parent->options->$key != $value ) + $using_default = false; + + } + + if ( $using_default ) + return; + + require dirname( $this->parent->file ) . '/templates/preset-prompt.php'; + + } + + + /** + * Reset selectors to default + */ + function set_presets() { + + if ( !isset( $_GET['set_presets'] ) ) + return; + + if ( !current_user_can( 'manage_options' ) ) + return; + + check_admin_referer( 'infinite-scroll-presets', 'nonce' ); + + //don't delete options if we don't have a preset + $preset = $this->get_preset( ); + + if ( !$preset ) + return; + + foreach ( $this->keys as $key ) + $this->parent->options->$key = null; + + wp_redirect( admin_url( 'options-general.php?page=infinite_scroll_options&settings-updated=true' ) ); + exit(); + + } + + + /** + * Handles AJAX edits from the manage presets form + */ + function process_ajax_edit() { + + if ( !current_user_can( 'manage_options' ) ) + wp_die( -1 ); + + if ( is_multisite() && !is_super_admin() ) + wp_die( -1 ); + + $data = new stdClass; + + foreach ( $this->keys as $key ) + $data->$key = addslashes( trim( $_POST[ $key . '_column-' . $key ] ) ); + + $this->set_custom_preset( $data->theme, $data ); + + wp_die( 1 ); + + } + + + /** + * Handles AJAX requests to delete presets from the manage presets form + */ + function process_ajax_delete() { + + if ( !current_user_can( 'manage_options' ) ) + wp_die( -1 ); + + if ( is_multisite() && !is_super_admin() ) + wp_die( -1 ); + + if ( !isset( $_GET['theme'] ) ) + wp_die( -1 ); + + $this->delete_custom_preset( $_GET['theme'] ); + + } + + + /** + * Retreive global custom presets + * @return array the custom preset array + */ + function get_custom_presets( ) { + $presets = get_site_option( $this->custom_preset_key, array(), true ); + return apply_filters( $this->parent->prefix . 'custom_presets', $presets ); + } + + + /** + * Update global custom presets + * @param array $presets the presets (all) + * @return bool success/fail + */ + function set_custom_presets( $presets ) { + return update_site_option( $this->custom_preset_key, $presets ); + } + + + /** + * Store a theme's global presets + * @param string $theme the theme name + * @param array $preset the presets + * @return bool success/fail + */ + function set_custom_preset( $theme, $preset ) { + $presets = $this->get_custom_presets(); + $presets[ $theme ] = $preset; + return $this->set_custom_presets( $presets ); + } + + + /** + * Removes a custom preset from the database + * @param string $theme the theme to remove + * @return bool success/fail + */ + function delete_custom_preset( $theme ) { + $presets = $this->get_custom_presets(); + unset( $presets[ $theme ] ); + return $this->set_custom_presets( $presets ); + + } + + + /** + * Allow custom presets to merge/override community presets + * @param unknown $presets + * @return unknown + */ + function merge_custom_presets( $presets ) { + + // 2nd array overrides keys that overlap with first array + $presets = array_merge( $presets, $this->get_custom_presets() ); + + //sort by key alpha ascending + asort( $presets ); + + return $presets; + + } + + + /** + * If a selector is not set, try to grab a preset to save the user trouble + * @param array $options the options array + * @return array the defaulted options array + */ + function default_to_presets( $options ) { + + //we don't have a preset, no need to go any further + if ( !( $preset = $this->get_preset( ) ) ) + return $options; + + foreach ( $this->keys as $key ) { + if ( empty( $options[$key] ) ) + $options[$key] = $preset->$key; + } + + return $options; + + + } + /** + * Converts legacy csv.php format + * Removes first two lines and last line + * @param string $data the contents of the CSV (usually via wp_remote_get) + * @param string the equivalent standard CSV + */ + function parse_legacy_csv( $data ) { + + if ( is_string( $data ) ) + $data = explode( "\n", $data ); + + //remove first two lines + $data = array_slice( $data, 2 ); + + //remove the last line + array_pop( $data ); + + $presets = $this->parse_csv( $data ); + + $output = array(); + + //convert Theme Name to stylesheet and stuff into output array + foreach( $presets as $theme ) { + $theme->theme = $this->get_stylesheet( $theme->theme ); + $output[ $theme->theme ] = $theme; + } + + return $output; + + } + + /** + * Parse CSV into array of preset objects + * @param string|array the CSV data, either as a string or as an array of lines + * @return array array of preset objects + */ + function parse_csv( $data ) { + + if ( is_string( $data ) ) + $data = explode( "\n", $data ); + + //php 5.3+ + if ( function_exists( 'str_getcsv' ) ) { + + foreach ( $data as &$line ) + $line = str_getcsv( $line ); + + //php 5.2 + // fgetcsv needs a file handle, + // so write the string to a temp file before parsing + } else { + + $fh = tmpfile(); + fwrite( $fh, implode( "\n", $data ) ); + fseek( $fh, 0 ); + $data = array(); + + while( $line = fgetcsv( $fh ) ) + $data[] = $line; + + fclose( $fh ); + + } + + $presets = array(); + + //build preset objects and stuff into keyed array + foreach ( $data as &$line ) { + + $lineObj = new stdClass; + + foreach ( $this->keys as $id => $key ) + $lineObj->$key = $line[ $id ]; + + $presets[ $lineObj->theme ] = $lineObj; + + } + + return $presets; + + } + + /** + * Return object representing current theme's selectors + * @return object the same as would be returned from get_preset() + */ + function current_selectors() { + + $theme = new stdClass(); + foreach ( $this->keys as $key ) + $theme->$key = $this->parent->options->$key; + + $theme->theme = get_stylesheet(); + + return $theme; + + } + + /** + * Export CSS Selectors as CSV + * @param bool $all (optional) whether to include community selectors in output + * @return string CSV of selectors + */ + function export( $all = false ) { + + $presets = array(); + + //if the current theme is not a known preset or they want all + if ( !$this->get_preset( ) || $all ) + $presets[ get_stylesheet() ] = $this->current_selectors(); + + //user has access to global custom presets + if ( is_multisite() && is_super_admin() ) { + + if ( $custom = $this->get_custom_presets() ); + $presets = array_merge( $presets, $custom ); + + } + + //include community presets, if asked + if ( $all ) + $presets = array_merge( $this->get_presets(), $presets ); + + asort( $presets ); + + //workaround because fputcsv needs a file handle by default + $fh = tmpfile(); + $length = 0; + + foreach ( $presets as &$preset ) + $length += fputcsv( $fh, (array) $preset ); + + if ( $length == 0 ) + return false; + + fseek( $fh, 0 ); + $csv = fread( $fh, $length ); + fclose( $fh ); + + return $csv; + + } + + /** + * Migrates legacy csv.php files to 2.5's custom presets format + * @uses parse_legacy_csv + */ + function migrate() { + + //no preset file to migrate + if ( !file_exists( dirname( $this->parent->file ) . '/PresetDB.csv.php' ) ) + return; + + $data = file_get_contents( dirname( $this->parent->file ) . '/PresetDB.csv.php' ); + $presets = $this->parse_legacy_csv( $data ); + + //this wiill override any existing presets, + // but is okay as is only being fired when no presets exist + $this->set_custom_presets( $presets ); + + return $presets; + + } + + /** + * Determines whether a given theme is installed + * @param string|object $theme either the theme slug or the preset object + * @return bool true if insalled, otherwise false + */ + function theme_installed( $theme ) { + // get theme name if $theme is an preset object + if ( is_object( $theme ) ) { + $theme = $theme->theme; + } + + //3.4+ + if ( function_exists( 'wp_get_theme' ) ) { + return wp_get_theme( $theme )->exists(); + } else { + //pre 3.4 + $themes = get_themes(); + $name = $this->get_name( $theme ); + + return array_key_exists( $name, $themes ); + } + } + + /** + * Given a theme name, returns the coresponding theme stylesheet + * + * Used for converting legacy CSVs which were name based to new CSVs which are stylesheet based + * since 3.4 returns themes keyed to stylesheets, not names as it did pre-3.4 + * + * @param string $theme the theme name + * @return string the stylesheet + */ + function get_stylesheet( $name ) { + + //pre 3.4 + if ( !function_exists( 'wp_get_themes' ) ) { + + if ( $theme = get_theme( $name ) ) + return $theme->stylesheet; + + //3.4+ + } else { + + //we can't use wp_filter_list_object with WP_Theme objects, so filter manually + foreach ( $this->getThemes(null) as $theme ) + if ( $theme->name = $name ) + return $theme->stylesheet; + + } + + return false; + + } + + /** + * Given a theme stylesheet, return the coresponding theme name + * + * Used to normalize data between 3.3 and 3.4 where keying of themes switched from name to stylesheet + * + * @param string $stylesheet the theme stylesheet (slug) + * @return string the theme name + */ + function get_name( $stylesheet ) { + + //3.4+ + if ( function_exists( 'wp_get_theme' ) ) { + + if ( $theme = wp_get_theme( $stylesheet ) ) + return $theme->name; + + + //pre 3.4 + } else { + + foreach ( get_themes() as $theme ) + if ( $theme->stylesheet == $stylesheet ) + return $theme->name; + + } + + //theme isn't installed, use the WP.org API to grab the name rather than risk losing data on upgrade + $api = themes_api( 'theme_information', array( 'slug' => $stylesheet, 'fields' => array( 'sections' => false, 'tags' => false ) ) ); + + if ( is_wp_error( $api ) ) + return false; + + return $api->name; + + + } + +} + + +if (!class_exists('WP_List_Table')) { + require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php'; +} + +/** + * List table for manage custom presets page + */ +class Infinite_Scroll_Presets_Table extends WP_List_Table { + + /** + * Register with Parent + */ + function __construct( $args = array() ) { + + parent::__construct( array( + 'singular' => 'preset', + 'plural' => 'presets', + 'ajax' => true, + ) ); + + } + + + /** + * Default column callback + * @param object $item the item to display + * @param string $column_name the column name + * @return string the HTML to display + */ + function column_default( $item, $column_name ) { + return $item->$column_name; + } + + + /** + * Callback to display the theme column + * @param object $item the preset object + * @return string the HTML to display + */ + function column_theme( $item ) { + global $infinite_scroll; + + $s = '' . $item->theme . ''; + $s .= '

    '; + $s .= ''; + return $s; + } + + + /** + * Callaback to return list of columns to display + * @return array the columns to display + */ + function get_columns() { + return array( + 'theme' => 'Theme', + 'contentSelector' => 'Content Selector', + 'navSelector' => 'Navigation Selector', + 'nextSelector' => 'Next Selector', + 'itemSelector' => 'Item Selector', + ); + } + + + /** + * Grab data and filter prior to passing to table class + */ + function prepare_items() { + global $infinite_scroll; + + $per_page = 25; + + $columns = $this->get_columns(); + $hidden = array(); + $sortable = array(); + + $this->_column_headers = array($columns, $hidden, $sortable); + + $data = $infinite_scroll->presets->get_presets(); + + //only display installed themes + $data = array_filter( $data, array( &$infinite_scroll->presets, 'theme_installed' ) ); + + //merge in themes + $themes = $infinite_scroll->presets->getThemes(null); + + foreach ( $themes as $theme => $theme_data ) { + + if ( array_key_exists( $theme, $data) ) + continue; + + //check for parent theme's preset, if any + if ( $preset = $infinite_scroll->presets->get_preset( $theme ) ) { + $data[ $theme ] = $preset; + continue; + } + + $themeObj = new stdClass; + + foreach ( $infinite_scroll->presets->keys as $key ) + $themeObj->$key = null; + + $themeObj->theme = $theme; + + $data[ $theme ] = $themeObj; + + } + + asort( $data ); + + $current_page = $this->get_pagenum(); + + $total_items = count($data); + + $data = array_slice($data, (($current_page-1)*$per_page), $per_page); + + $this->items = $data; + + $this->set_pagination_args( array( + 'total_items' => $total_items, //WE have to calculate the total number of items + 'per_page' => $per_page, //WE have to determine how many items to show on a page + 'total_pages' => ceil($total_items/$per_page) //WE have to calculate the total number of pages + ) ); + + } + +} diff --git a/plugins/infinite-scroll/includes/submit.php b/plugins/infinite-scroll/includes/submit.php new file mode 100644 index 0000000..a59f31b --- /dev/null +++ b/plugins/infinite-scroll/includes/submit.php @@ -0,0 +1,67 @@ +parent = &$parent; + add_action( 'wp_ajax_' . $this->parent->slug_ . '_hide_submit', array( &$this, 'hide') ); + + } + + /** + * Conditionally prompts users to submit selectors to community DB when appropriate + */ + function prompt() { + + //user has globally opted out + if ( get_user_option( 'infinite-scroll-hide-submit', get_current_user_ID() ) ) + return; + + //their current theme's preset selectors, false if none found (good) + $preset = $this->parent->presets->get_preset( get_stylesheet() ); + + //their network-wide custom presets, false if none found (bad) + $custom = $this->parent->presets->get_custom_presets( ); + + //the site's current theme is a preset + // and there are no custom presets, kick + if ( $preset && !$custom ) + return; + + //we already have their current theme, + // and they can't submit custom presets b/c multisite and not superadmin + if ( $preset && is_multisite() && !is_super_admin() ) + return; + + require dirname( $this->parent->file ) . '/templates/submit-prompt.php'; + + } + + /** + * Stores user's preference to hide the submit message via AJAX + */ + function hide() { + + check_ajax_referer( $this->parent->slug_ . '_hide_submit' , '_ajax_nonce-' . $this->parent->slug . '-hide-submit' ); + + //note: option will be global + update_user_option( get_current_user_ID(), 'infinite-scroll-hide-submit', true, true ); + + die( 1 ); + + } + +} \ No newline at end of file diff --git a/plugins/infinite-scroll/infinite-scroll.php b/plugins/infinite-scroll/infinite-scroll.php new file mode 100644 index 0000000..c8d6fcb --- /dev/null +++ b/plugins/infinite-scroll/infinite-scroll.php @@ -0,0 +1,316 @@ +. + * + * @copyright 2008-2012 + * @license GPL v3 + * @version 2.6.2 + * @package Infinite Scroll + * @author Beaver6813, dirkhaim, Paul Irish, Benjamin J. Balter, Glenn Nelson + */ + +require_once dirname( __FILE__ ) . '/includes/options.php'; +require_once dirname( __FILE__ ) . '/includes/admin.php'; +require_once dirname( __FILE__ ) . '/includes/presets.php'; +require_once dirname( __FILE__ ) . '/includes/submit.php'; + +class Infinite_Scroll { + + static $instance; + public $options; + public $admin; + public $submit; + public $name = 'Infinite Scroll'; //Human-readable name of plugin + public $slug = 'infinite-scroll'; //plugin slug, generally base filename and in url on wordpress.org + public $slug_ = 'infinite_scroll'; //slug with underscores (PHP/JS safe) + public $prefix = 'infinite_scroll_'; //prefix to append to all options, API calls, etc. w/ trailing underscore + public $file = null; + public $version = '2.6.1'; + public $behaviors = array( //array of behaviors as key => array( label => js file ) (without extension) + 'twitter' => array( 'label' => 'Manual Trigger', 'src' => 'manual-trigger' ), + 'local' => array( 'label' => 'Local', 'src' => 'local' ), + 'cufon' => array( 'label' => 'Cufon', 'src' => 'cufon' ), + 'masonry' => array( 'label' => 'Masonry/Isotope', 'src' => 'masonry-isotope') + ); + /** + * Construct the primary class and auto-load all child classes + */ + function __construct() { + self::$instance = &$this; + $this->file = __FILE__; + $this->admin = new Infinite_Scroll_Admin( $this ); + $this->options = new Infinite_Scroll_Options( $this ); + $this->presets = new Infinite_Scroll_Presets( $this ); + $this->submit = new Infinite_Scroll_Submit( $this ); + + //upgrade db + add_action( 'admin_init', array( &$this, 'upgrade_check' ) ); + + //i18n + add_action( 'init', array( &$this, 'i18n' ) ); + + //default options + add_action( 'init', array( &$this, 'init_defaults' ) ); + + //js + add_action( 'wp_enqueue_scripts', array( &$this, 'enqueue_js' ) ); + add_action( 'wp_footer', array( &$this, 'footer' ), 100 ); //low priority will load after i18n and script loads + + //preset cron + register_activation_hook( __FILE__, array( &$this->presets, 'schedule' ) ); + register_deactivation_hook( __FILE__, array( &$this->presets, 'unschedule' ) ); + + //404 fix + add_action( 'wp', array( &$this, 'paged_404_fix' ) ); + } + + + /** + * Init default options + */ + function init_defaults() { + //option keys map to javascript options and are passed directly via wp_localize_script + $this->options->defaults = array( + 'loading' => array( + 'msgText' => '' . __( 'Loading...', 'infinite-scroll' ) . '', + 'finishedMsg' => '' . __( 'No additional posts.', 'infinite-scroll' ) . '', + 'img' => plugins_url( 'img/ajax-loader.gif', __FILE__ ) + ), + 'nextSelector' => '#nav-below a:first', + 'navSelector' => '#nav-below', + 'itemSelector' => '.post', + 'contentSelector' => '#content', + 'debug' => WP_DEBUG, + 'behavior' => '' + ); + } + + + /** + * Enqueue front-end JS and pass options to json_encoded array + */ + function enqueue_js() { + if (!$this->shouldLoadJavascript()) { + return; + } + + $suffix = ( WP_DEBUG ) ? '.dev' : ''; + + $file = "/js/front-end/jquery.infinitescroll{$suffix}.js"; + wp_enqueue_script( $this->slug, plugins_url( $file, __FILE__ ), array( 'jquery' ), $this->version, true ); + + $options = apply_filters( $this->prefix . 'js_options', $this->options->get_options() ); + wp_localize_script($this->slug, $this->slug_, json_encode($options)); + + // If no behavior, we're done, kick + if ( !$options['behavior'] ) + return; + + //sanity check + if ( !array_key_exists( $options['behavior'], $this->behaviors ) ) + return _doing_it_wrong( 'Infinite Scroll behavior', "Behavior {$options['behavior']} not found", $this->version ); + + $src = 'behaviors/' . $this->behaviors[ $options['behavior'] ]['src'] . '.js'; + wp_enqueue_script( $this->slug . "-behavior", plugins_url( $src, __FILE__ ), array( "jquery", $this->slug ), $this->version, true ); + + } + + /** + * Load footer template to pass options array to JS + */ + function footer() { + if (!$this->shouldLoadJavascript()) { + return; + } + + require dirname( __FILE__ ) . '/templates/footer.php'; + } + + + /** + * Init i18n files + */ + function i18n() { + load_plugin_textdomain( $this->slug, false, plugin_basename( dirname( __FILE__ ) ) . '/languages/' ); + } + + + /** + * Upgrades DB + * Fires on admin init to support SVN + */ + function upgrade_check() { + if ($this->options->db_version == $this->version) { + return; + } + + $this->upgrade( $this->options->db_version, $this->version ); + + do_action( $this->prefix . 'upgrade', $this->version, $this->options->db_version ); + + $this->options->db_version = $this->version; + } + + + /** + * Upgrade DB to latest version + * @param int $from version coming from + * @param int $to version going to + */ + function upgrade( $from , $to ) { + if ($from < "2.5") { + //array of option conversions in the form of from => to + $map = array( + 'js_calls' => 'callback', + 'image' => 'img', + 'text' => 'msgText', + 'donetext' => 'finishedMsg', + 'content_selector' => 'contentSelector', + 'post_selector' => 'itemSelector', + 'nav_selector' => 'navSelector', + 'next_selector' => 'nextSelector', + 'behavior' => 'behavior', + 'debug' => 'debug', + ); + + $old = get_option( 'infscr_options' ); + $new = array(); + + //really old legacy options storage + //each option is stored as its own option in the options table + if ( !$old ) { + //loop through options and attempt to find + foreach ( array_keys( $map ) as $option ) { + $legacy = get_option( 'infscr_' . $option ); + + if ( !$legacy ) + continue; + + //move to new option array and delete old + $new[ $map[ $option ] ] = $legacy; + delete_option( 'infscr_' . $option ); + } + } + + //pre 2.5 options storage + //all stuffed in a single array, but not properly keyed + foreach ( $map as $from => $to ) { + + if ( !$old || !isset( $old[ 'infscr_' . $from ] ) ) + continue; + + $new[ $to ] = $old[ 'infscr_' . $from ]; + + } + + //pre 2.5 we html encoded selectors, we don't do this anymore + foreach ( array( 'contentSelector', 'itemSelector', 'navSelector', 'nextSelector' ) as $field ) { + if ( isset( $new[$field] ) ) { + $new[$field] = html_entity_decode($new[$field]); + } + } + + //regardless of which upgrade we did, move loading string to array + $new['loading'] = array( ); + + foreach ( array( 'finishedMsg', 'msgText', "img" ) as $field ) { + if ( isset( $new[$field] ) ) { + $new['loading'][$field] = $new[$field]; + unset( $new[$field] ); + } + } + + //if the user is still using the default ajax-loader.gif then update the location + if( isset($new["loading"]['img']) && !strstr($new["loading"]["img"], "/img/ajax-loader.gif") ) + $new["loading"]['img'] = str_replace("/ajax-loader.gif", + "/img/ajax-loader.gif", + $new["loading"]['img']); + + //regardless of which upgrade, ensure that debug is now set to boolean string rather than int + //if it wasn't originally on then just set it to the plugin default + if( isset($new['debug']) && $new['debug'] == 1 ) + $new['debug'] = "true"; + else + unset( $new['debug'] ); + + //don't pass an empty array so the default filter can properly set defaults + if ( empty( $new['loading'] ) ) + unset( $new['loading'] ); + + $this->options->set_options( $new ); + delete_option( 'infscr_options' ); + + $this->presets->migrate(); + } + + //migrate loading image + if ($from < '2.6') { + $old = get_option("infinite_scroll"); + $new = $old; + $new["loading"]["img"] = $old["img"]; + unset($new["img"]); + + $this->options->set_options($new); + } + } + + + /** + * If we go beyond the last page and request a page that doesn't exist, + * force WordPress to return a 404. + * See http://core.trac.wordpress.org/ticket/15770 + */ + function paged_404_fix( ) { + global $wp_query; + + if ( is_404() || !is_paged() || 0 != count( $wp_query->posts ) ) + return; + + $wp_query->set_404(); + status_header( 404 ); + nocache_headers(); + + } + + /** + * Determines if the jQuery plugin and corresponding options should + * be output onto the page. + * + * @return bool + */ + function shouldLoadJavascript() { + // Don't need to load the plugin on single pages + if (is_singular()) { + return false; + } + + return true; + } +} + + +$infinite_scroll = new Infinite_Scroll(); diff --git a/plugins/infinite-scroll/js/admin/infinite-scoll.js b/plugins/infinite-scroll/js/admin/infinite-scoll.js new file mode 100644 index 0000000..e60c030 --- /dev/null +++ b/plugins/infinite-scroll/js/admin/infinite-scoll.js @@ -0,0 +1,5 @@ +jQuery(document).ready(function(a){a("#upload_image_button").click(function(){formfield=a("#upload_image").attr("name");tb_show("","media-upload.php?type=image&infinite_scroll=true&TB_iframe=true");return!1});window.send_to_editor=function(b){a("#upload_image").val(b);tb_remove()};a("#the-list td").hover(function(){a(this).children(".edit-link").css("visibility","visible")},function(){a(this).children(".edit-link").css("visibility","hidden")});a('#the-list tr:not(".editing")').live("click",function(b){b.preventDefault(); +a(this).addClass("editing");a(this).find(".edit-link").hide();a(this).find(".save-link").show();a(this).css("height","50px");a(this).children("td:not(:first)").each(function(){a(this).html('')});b=a(this).children(".theme");a(b).html(a(b).html()+'');return!1});a("#the-list .save-link a").live("click",function(b){b.preventDefault(); +var c=a(this).siblings(".loader");a(c).show();a.ajax({url:ajaxurl+"?action=infinite-scroll-edit-preset",type:"POST",data:a("#ajax-form").serialize(),success:function(){a(c).hide();tr=a(c).parent().parent().parent();a(tr).removeClass("editing");a(tr).find(".edit-link").show();a(tr).find(".save-link").hide();a(tr).css("height","auto");a(tr).children("td:not(:first)").each(function(){a(this).html(a(this).children("input").val())})}});return!1});a("#the-list .save-link a.cancel").live("click",function(b){b.preventDefault(); +tr=a(this).parent().parent().parent();a(tr).removeClass("editing");a(tr).find(".edit-link").show();a(tr).find(".save-link").hide();a(tr).css("height","auto");a(tr).children("td:not(:first)").each(function(){a(this).html(a(this).children("input").val())});return!1});a(".delete").live("click",function(b){b.preventDefault();b=a(this).parent().siblings("strong").children("a").text();if(!confirm(infinite_scroll.confirm.replace("%s",b)))return!1;var c=a(this).parent().parent().parent();a.ajax({url:ajaxurl+ +"?action=infinite-scroll-delete-preset&theme="+b,type:"POST",data:a("#ajax-form").serialize(),success:function(){a(c).children("td:not(:first)").each(function(){a(this).html("")})}});return!1});a("#use_default").click(function(b){b.preventDefault();a("#infinite_scroll_form").append('').submit();return!1})}); \ No newline at end of file diff --git a/plugins/infinite-scroll/js/admin/infinite-scroll.dev.js b/plugins/infinite-scroll/js/admin/infinite-scroll.dev.js new file mode 100644 index 0000000..4a3d002 --- /dev/null +++ b/plugins/infinite-scroll/js/admin/infinite-scroll.dev.js @@ -0,0 +1,128 @@ +jQuery(document).ready(function( $) { + + //open upload dialog + $('#upload_image_button').click(function() { + formfield = $('#upload_image').attr('name'); + tb_show('', 'media-upload.php?type=image&infinite_scroll=true&TB_iframe=true'); + return false; + }); + + //close upload dialog CB + //overrides native WP function + window.send_to_editor = function(html) { + $('#upload_image').val( html ); + tb_remove(); + } + + //list table hover + $('#the-list td').hover( + function() { $(this).children('.edit-link').css('visibility', 'visible'); }, + function() { $(this).children('.edit-link').css('visibility', 'hidden'); } + ); + + //list table edit link click + $( '#the-list tr:not(".editing")' ).live( 'click', function(event) { + event.preventDefault(); + + $(this).addClass( 'editing' ); + $(this).find('.edit-link').hide(); + $(this).find('.save-link').show(); + $(this).css('height', '50px' ); + $(this).children('td:not(:first)').each( function() { + $(this).html( '' ); + }); + var theme = $(this).children('.theme'); + $(theme).html( $(theme).html() + '' ); + return false; + }); + + //save-link + $( '#the-list .save-link a' ).live( 'click', function(event){ + event.preventDefault(); + + var loader = $(this).siblings( '.loader' ); + $(loader).show(); + + $.ajax( { + url: ajaxurl + '?action=infinite-scroll-edit-preset', + type: 'POST', + data: $('#ajax-form').serialize(), + success: function() { + $(loader).hide(); + tr = $(loader).parent().parent().parent(); + $(tr).removeClass( 'editing' ); + $(tr).find('.edit-link').show(); + $(tr).find('.save-link').hide(); + $(tr).css('height', 'auto' ); + $(tr).children('td:not(:first)').each( function() { + $(this).html( $(this).children('input').val() ); + }); + } + }); + return false; + }); + + //cancel button + $( '#the-list .save-link a.cancel' ).live( 'click', function(event){ + + event.preventDefault(); + + tr = $(this).parent().parent().parent(); + $(tr).removeClass( 'editing' ); + $(tr).find('.edit-link').show(); + $(tr).find('.save-link').hide(); + $(tr).css('height', 'auto' ); + $(tr).children('td:not(:first)').each( function() { + $(this).html( $(this).children('input').val() ); + }); + + return false; + }); + + //delete button + $( '.delete' ).live( 'click', function( event ) { + event.preventDefault(); + + var theme = $(this).parent().siblings('strong').children('a').text(); + + if ( !confirm( infinite_scroll.confirm.replace( '%s', theme ) ) ) + return false; + + var tr = $(this).parent().parent().parent(); + + $.ajax( { + url: ajaxurl + '?action=infinite-scroll-delete-preset&theme=' + theme, + type: 'POST', + data: $('#ajax-form').serialize(), //serialize nonce + success: function() { + $(tr).children('td:not(:first)').each( function() { + $(this).html( '' ); + }); + } + }); + + return false; + + }); + + //reset to default image + $('#use_default').click( function(event) { + event.preventDefault(); + $('#infinite_scroll_form').append( '' ).submit(); + return false; + }); + + //hide submit button + $('#hide-submit').click( function(event){ + event.preventDefault(); + $.ajax({ + url: ajaxurl + '?action=' + submit.action + '&' + submit.nonce + '=' + $('#'+submit.nonce).val(), + success: function() { $('tr#submit').fadeOut(); } + }); + return false; + }); + + //submit textarea select + $('textarea#submit').select(); + +}); diff --git a/plugins/infinite-scroll/js/front-end/jquery.infinitescroll.dev.js b/plugins/infinite-scroll/js/front-end/jquery.infinitescroll.dev.js new file mode 100644 index 0000000..6f53432 --- /dev/null +++ b/plugins/infinite-scroll/js/front-end/jquery.infinitescroll.dev.js @@ -0,0 +1,810 @@ +/*jshint undef: true */ +/*global jQuery: true */ + +/* + -------------------------------- + Infinite Scroll + -------------------------------- + + https://github.com/paulirish/infinite-scroll + + version 2.0b2.120519 + + Copyright 2011/12 Paul Irish & Luke Shumard + + Licensed under the MIT license + + + Documentation: http://infinite-scroll.com/ +*/ + +(function (window, $, undefined) { + "use strict"; + + $.infinitescroll = function infscr(options, callback, element) { + this.element = $(element); + + // Flag the object in the event of a failed creation + if (!this._create(options, callback)) { + this.failed = true; + } + }; + + $.infinitescroll.defaults = { + loading: { + finished: undefined, + finishedMsg: "Congratulations, you've reached the end of the internet.", + img: "data:image/gif;base64,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", + msg: null, + msgText: "Loading the next set of posts...", + selector: null, + speed: 'fast', + start: undefined + }, + state: { + isDuringAjax: false, + isInvalidPage: false, + isDestroyed: false, + isDone: false, // For when it goes all the way through the archive. + isPaused: false, + currPage: 1 + }, + debug: false, + behavior: undefined, + binder: $(window), // used to cache the selector + nextSelector: "div.navigation a:first", + navSelector: "div.navigation", + contentSelector: null, // rename to pageFragment + extraScrollPx: 150, + itemSelector: "div.post", + animate: false, + pathParse: undefined, + dataType: 'html', + appendCallback: true, + bufferPx: 40, + errorCallback: function () { }, + infid: 0, //Instance ID + pixelsFromNavToBottom: undefined, + path: undefined, // Either parts of a URL as an array (e.g. ["/page/", "/"] or a function that takes in the page number and returns a URL + prefill: false, // When the document is smaller than the window, load data until the document is larger or links are exhausted + maxPage: undefined // to manually control maximum page (when maxPage is undefined, maximum page limitation is not work) + }; + + $.infinitescroll.prototype = { + + /* + ---------------------------- + Private methods + ---------------------------- + */ + + // Bind or unbind from scroll + _binding: function infscr_binding(binding) { + + var instance = this, + opts = instance.options; + + opts.v = '2.0b2.120520'; + + // if behavior is defined and this function is extended, call that instead of default + if (!!opts.behavior && this['_binding_'+opts.behavior] !== undefined) { + this['_binding_'+opts.behavior].call(this); + return; + } + + if (binding !== 'bind' && binding !== 'unbind') { + this._debug('Binding value ' + binding + ' not valid'); + return false; + } + + if (binding === 'unbind') { + (this.options.binder).unbind('smartscroll.infscr.' + instance.options.infid); + } else { + (this.options.binder)[binding]('smartscroll.infscr.' + instance.options.infid, function () { + instance.scroll(); + }); + } + + this._debug('Binding', binding); + }, + + // Fundamental aspects of the plugin are initialized + _create: function infscr_create(options, callback) { + + // Add custom options to defaults + var opts = $.extend(true, {}, $.infinitescroll.defaults, options); + this.options = opts; + var $window = $(window); + var instance = this; + + // Validate selectors + if (!instance._validate(options)) { + return false; + } + + // Validate page fragment path + var path = $(opts.nextSelector).attr('href'); + if (!path) { + this._debug('Navigation selector not found'); + return false; + } + + // Set the path to be a relative URL from root. + opts.path = opts.path || this._determinepath(path); + + // contentSelector is 'page fragment' option for .load() / .ajax() calls + opts.contentSelector = opts.contentSelector || this.element; + + // loading.selector - if we want to place the load message in a specific selector, defaulted to the contentSelector + opts.loading.selector = opts.loading.selector || opts.contentSelector; + + // Define loading.msg + opts.loading.msg = opts.loading.msg || $('
    Loading...
    ' + opts.loading.msgText + '
    '); + + // Preload loading.img + (new Image()).src = opts.loading.img; + + // distance from nav links to bottom + // computed as: height of the document + top offset of container - top offset of nav link + if(opts.pixelsFromNavToBottom === undefined) { + opts.pixelsFromNavToBottom = $(document).height() - $(opts.navSelector).offset().top; + } + + var self = this; + + // determine loading.start actions + opts.loading.start = opts.loading.start || function() { + $(opts.navSelector).hide(); + opts.loading.msg + .appendTo(opts.loading.selector) + .show(opts.loading.speed, $.proxy(function() { + this.beginAjax(opts); + }, self)); + }; + + // determine loading.finished actions + opts.loading.finished = opts.loading.finished || function() { + opts.loading.msg.fadeOut(opts.loading.speed); + }; + + // callback loading + opts.callback = function(instance, data, url) { + if (!!opts.behavior && instance['_callback_'+opts.behavior] !== undefined) { + instance['_callback_'+opts.behavior].call($(opts.contentSelector)[0], data, url); + } + + if (callback) { + callback.call($(opts.contentSelector)[0], data, opts, url); + } + + if (opts.prefill) { + $window.bind("resize.infinite-scroll", instance._prefill); + } + }; + + if (options.debug) { + // Tell IE9 to use its built-in console + if (Function.prototype.bind && (typeof console === 'object' || typeof console === 'function') && typeof console.log === "object") { + ["log","info","warn","error","assert","dir","clear","profile","profileEnd"] + .forEach(function (method) { + console[method] = this.call(console[method], console); + }, Function.prototype.bind); + } + } + + this._setup(); + + // Setups the prefill method for use + if (opts.prefill) { + this._prefill(); + } + + // Return true to indicate successful creation + return true; + }, + + _prefill: function infscr_prefill() { + var instance = this; + var $document = $(document); + var $window = $(window); + + function needsPrefill() { + return ($document.height() <= $window.height()); + } + + this._prefill = function() { + if (needsPrefill()) { + instance.scroll(); + } + + $window.bind("resize.infinite-scroll", function() { + if (needsPrefill()) { + $window.unbind("resize.infinite-scroll"); + instance.scroll(); + } + }); + }; + + // Call self after setting up the new function + this._prefill(); + }, + + // Console log wrapper + _debug: function infscr_debug() { + if (true !== this.options.debug) { + return; + } + + if (typeof console !== 'undefined' && typeof console.log === 'function') { + // Modern browsers + // Single argument, which is a string + if ((Array.prototype.slice.call(arguments)).length === 1 && typeof Array.prototype.slice.call(arguments)[0] === 'string') { + console.log( (Array.prototype.slice.call(arguments)).toString() ); + } else { + console.log( Array.prototype.slice.call(arguments) ); + } + } else if (!Function.prototype.bind && typeof console !== 'undefined' && typeof console.log === 'object') { + // IE8 + Function.prototype.call.call(console.log, console, Array.prototype.slice.call(arguments)); + } + }, + + // find the number to increment in the path. + _determinepath: function infscr_determinepath(path) { + + var opts = this.options; + + // if behavior is defined and this function is extended, call that instead of default + if (!!opts.behavior && this['_determinepath_'+opts.behavior] !== undefined) { + return this['_determinepath_'+opts.behavior].call(this,path); + } + + if (!!opts.pathParse) { + + this._debug('pathParse manual'); + return opts.pathParse(path, this.options.state.currPage+1); + + } else if (path.match(/^(.*?)\b2\b(.*?$)/)) { + path = path.match(/^(.*?)\b2\b(.*?$)/).slice(1); + + // if there is any 2 in the url at all. + } else if (path.match(/^(.*?)2(.*?$)/)) { + + // page= is used in django: + // http://www.infinite-scroll.com/changelog/comment-page-1/#comment-127 + if (path.match(/^(.*?page=)2(\/.*|$)/)) { + path = path.match(/^(.*?page=)2(\/.*|$)/).slice(1); + return path; + } + + path = path.match(/^(.*?)2(.*?$)/).slice(1); + + } else { + + // page= is used in drupal too but second page is page=1 not page=2: + // thx Jerod Fritz, vladikoff + if (path.match(/^(.*?page=)1(\/.*|$)/)) { + path = path.match(/^(.*?page=)1(\/.*|$)/).slice(1); + return path; + } else { + this._debug('Sorry, we couldn\'t parse your Next (Previous Posts) URL. Verify your the css selector points to the correct A tag. If you still get this error: yell, scream, and kindly ask for help at infinite-scroll.com.'); + // Get rid of isInvalidPage to allow permalink to state + opts.state.isInvalidPage = true; //prevent it from running on this page. + } + } + this._debug('determinePath', path); + return path; + + }, + + // Custom error + _error: function infscr_error(xhr) { + + var opts = this.options; + + // if behavior is defined and this function is extended, call that instead of default + if (!!opts.behavior && this['_error_'+opts.behavior] !== undefined) { + this['_error_'+opts.behavior].call(this,xhr); + return; + } + + if (xhr !== 'destroy' && xhr !== 'end') { + xhr = 'unknown'; + } + + this._debug('Error', xhr); + + if (xhr === 'end') { + this._showdonemsg(); + } + + opts.state.isDone = true; + opts.state.currPage = 1; // if you need to go back to this instance + opts.state.isPaused = false; + this._binding('unbind'); + + }, + + // Load Callback + _loadcallback: function infscr_loadcallback(box, data, url) { + var opts = this.options, + callback = this.options.callback, // GLOBAL OBJECT FOR CALLBACK + result = (opts.state.isDone) ? 'done' : (!opts.appendCallback) ? 'no-append' : 'append', + frag; + + // if behavior is defined and this function is extended, call that instead of default + if (!!opts.behavior && this['_loadcallback_'+opts.behavior] !== undefined) { + this['_loadcallback_'+opts.behavior].call(this,box,data); + return; + } + + switch (result) { + case 'done': + this._showdonemsg(); + return false; + + case 'no-append': + if (opts.dataType === 'html') { + data = '
    ' + data + '
    '; + data = $(data).find(opts.itemSelector); + } + break; + + case 'append': + var children = box.children(); + // if it didn't return anything + if (children.length === 0) { + return this._error('end'); + } + + // use a documentFragment because it works when content is going into a table or UL + frag = document.createDocumentFragment(); + while (box[0].firstChild) { + frag.appendChild(box[0].firstChild); + } + + this._debug('contentSelector', $(opts.contentSelector)[0]); + $(opts.contentSelector)[0].appendChild(frag); + // previously, we would pass in the new DOM element as context for the callback + // however we're now using a documentfragment, which doesn't have parents or children, + // so the context is the contentContainer guy, and we pass in an array + // of the elements collected as the first argument. + + data = children.get(); + break; + } + + // loadingEnd function + opts.loading.finished.call($(opts.contentSelector)[0],opts); + + // smooth scroll to ease in the new content + if (opts.animate) { + var scrollTo = $(window).scrollTop() + $('#infscr-loading').height() + opts.extraScrollPx + 'px'; + $('html,body').animate({ scrollTop: scrollTo }, 800, function () { opts.state.isDuringAjax = false; }); + } + + if (!opts.animate) { + // once the call is done, we can allow it again. + opts.state.isDuringAjax = false; + } + + callback(this, data, url); + + if (opts.prefill) { + this._prefill(); + } + }, + + _nearbottom: function infscr_nearbottom() { + + var opts = this.options, + pixelsFromWindowBottomToBottom = 0 + $(document).height() - (opts.binder.scrollTop()) - $(window).height(); + + // if behavior is defined and this function is extended, call that instead of default + if (!!opts.behavior && this['_nearbottom_'+opts.behavior] !== undefined) { + return this['_nearbottom_'+opts.behavior].call(this); + } + + this._debug('math:', pixelsFromWindowBottomToBottom, opts.pixelsFromNavToBottom); + + // if distance remaining in the scroll (including buffer) is less than the orignal nav to bottom.... + return (pixelsFromWindowBottomToBottom - opts.bufferPx < opts.pixelsFromNavToBottom); + + }, + + // Pause / temporarily disable plugin from firing + _pausing: function infscr_pausing(pause) { + + var opts = this.options; + + // if behavior is defined and this function is extended, call that instead of default + if (!!opts.behavior && this['_pausing_'+opts.behavior] !== undefined) { + this['_pausing_'+opts.behavior].call(this,pause); + return; + } + + // If pause is not 'pause' or 'resume', toggle it's value + if (pause !== 'pause' && pause !== 'resume' && pause !== null) { + this._debug('Invalid argument. Toggling pause value instead'); + } + + pause = (pause && (pause === 'pause' || pause === 'resume')) ? pause : 'toggle'; + + switch (pause) { + case 'pause': + opts.state.isPaused = true; + break; + + case 'resume': + opts.state.isPaused = false; + break; + + case 'toggle': + opts.state.isPaused = !opts.state.isPaused; + break; + } + + this._debug('Paused', opts.state.isPaused); + return false; + + }, + + // Behavior is determined + // If the behavior option is undefined, it will set to default and bind to scroll + _setup: function infscr_setup() { + + var opts = this.options; + + // if behavior is defined and this function is extended, call that instead of default + if (!!opts.behavior && this['_setup_'+opts.behavior] !== undefined) { + this['_setup_'+opts.behavior].call(this); + return; + } + + this._binding('bind'); + + return false; + + }, + + // Show done message + _showdonemsg: function infscr_showdonemsg() { + + var opts = this.options; + + // if behavior is defined and this function is extended, call that instead of default + if (!!opts.behavior && this['_showdonemsg_'+opts.behavior] !== undefined) { + this['_showdonemsg_'+opts.behavior].call(this); + return; + } + + opts.loading.msg + .find('img') + .hide() + .parent() + .find('div').html(opts.loading.finishedMsg).animate({ opacity: 1 }, 2000, function () { + $(this).parent().fadeOut(opts.loading.speed); + }); + + // user provided callback when done + opts.errorCallback.call($(opts.contentSelector)[0],'done'); + }, + + // grab each selector option and see if any fail + _validate: function infscr_validate(opts) { + for (var key in opts) { + if (key.indexOf && key.indexOf('Selector') > -1 && $(opts[key]).length === 0) { + this._debug('Your ' + key + ' found no elements.'); + return false; + } + } + + return true; + }, + + /* + ---------------------------- + Public methods + ---------------------------- + */ + + // Bind to scroll + bind: function infscr_bind() { + this._binding('bind'); + }, + + // Destroy current instance of plugin + destroy: function infscr_destroy() { + this.options.state.isDestroyed = true; + this.options.loading.finished(); + return this._error('destroy'); + }, + + // Set pause value to false + pause: function infscr_pause() { + this._pausing('pause'); + }, + + // Set pause value to false + resume: function infscr_resume() { + this._pausing('resume'); + }, + + beginAjax: function infscr_ajax(opts) { + var instance = this, + path = opts.path, + box, desturl, method, condition; + + // increment the URL bit. e.g. /page/3/ + opts.state.currPage++; + + // Manually control maximum page + if ( opts.maxPage != undefined && opts.state.currPage > opts.maxPage ){ + this.destroy(); + return; + } + + // if we're dealing with a table we can't use DIVs + box = $(opts.contentSelector).is('table') ? $('') : $('
    '); + + desturl = (typeof path === 'function') ? path(opts.state.currPage) : path.join(opts.state.currPage); + instance._debug('heading into ajax', desturl); + + method = (opts.dataType === 'html' || opts.dataType === 'json' ) ? opts.dataType : 'html+callback'; + if (opts.appendCallback && opts.dataType === 'html') { + method += '+callback'; + } + + switch (method) { + case 'html+callback': + instance._debug('Using HTML via .load() method'); + box.load(desturl + ' ' + opts.itemSelector, undefined, function infscr_ajax_callback(responseText) { + instance._loadcallback(box, responseText, desturl); + }); + + break; + + case 'html': + instance._debug('Using ' + (method.toUpperCase()) + ' via $.ajax() method'); + $.ajax({ + // params + url: desturl, + dataType: opts.dataType, + complete: function infscr_ajax_callback(jqXHR, textStatus) { + condition = (typeof (jqXHR.isResolved) !== 'undefined') ? (jqXHR.isResolved()) : (textStatus === "success" || textStatus === "notmodified"); + if (condition) { + instance._loadcallback(box, jqXHR.responseText, desturl); + } else { + instance._error('end'); + } + } + }); + + break; + case 'json': + instance._debug('Using ' + (method.toUpperCase()) + ' via $.ajax() method'); + $.ajax({ + dataType: 'json', + type: 'GET', + url: desturl, + success: function (data, textStatus, jqXHR) { + condition = (typeof (jqXHR.isResolved) !== 'undefined') ? (jqXHR.isResolved()) : (textStatus === "success" || textStatus === "notmodified"); + if (opts.appendCallback) { + // if appendCallback is true, you must defined template in options. + // note that data passed into _loadcallback is already an html (after processed in opts.template(data)). + if (opts.template !== undefined) { + var theData = opts.template(data); + box.append(theData); + if (condition) { + instance._loadcallback(box, theData); + } else { + instance._error('end'); + } + } else { + instance._debug("template must be defined."); + instance._error('end'); + } + } else { + // if appendCallback is false, we will pass in the JSON object. you should handle it yourself in your callback. + if (condition) { + instance._loadcallback(box, data, desturl); + } else { + instance._error('end'); + } + } + }, + error: function() { + instance._debug("JSON ajax request failed."); + instance._error('end'); + } + }); + + break; + } + }, + + // Retrieve next set of content items + retrieve: function infscr_retrieve(pageNum) { + pageNum = pageNum || null; + + var instance = this, + opts = instance.options; + + // if behavior is defined and this function is extended, call that instead of default + if (!!opts.behavior && this['retrieve_'+opts.behavior] !== undefined) { + this['retrieve_'+opts.behavior].call(this,pageNum); + return; + } + + // for manual triggers, if destroyed, get out of here + if (opts.state.isDestroyed) { + this._debug('Instance is destroyed'); + return false; + } + + // we dont want to fire the ajax multiple times + opts.state.isDuringAjax = true; + + opts.loading.start.call($(opts.contentSelector)[0],opts); + }, + + // Check to see next page is needed + scroll: function infscr_scroll() { + + var opts = this.options, + state = opts.state; + + // if behavior is defined and this function is extended, call that instead of default + if (!!opts.behavior && this['scroll_'+opts.behavior] !== undefined) { + this['scroll_'+opts.behavior].call(this); + return; + } + + if (state.isDuringAjax || state.isInvalidPage || state.isDone || state.isDestroyed || state.isPaused) { + return; + } + + if (!this._nearbottom()) { + return; + } + + this.retrieve(); + + }, + + // Toggle pause value + toggle: function infscr_toggle() { + this._pausing(); + }, + + // Unbind from scroll + unbind: function infscr_unbind() { + this._binding('unbind'); + }, + + // update options + update: function infscr_options(key) { + if ($.isPlainObject(key)) { + this.options = $.extend(true,this.options,key); + } + } + }; + + + /* + ---------------------------- + Infinite Scroll function + ---------------------------- + + Borrowed logic from the following... + + jQuery UI + - https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.widget.js + + jCarousel + - https://github.com/jsor/jcarousel/blob/master/lib/jquery.jcarousel.js + + Masonry + - https://github.com/desandro/masonry/blob/master/jquery.masonry.js + +*/ + + $.fn.infinitescroll = function infscr_init(options, callback) { + + + var thisCall = typeof options; + + switch (thisCall) { + + // method + case 'string': + var args = Array.prototype.slice.call(arguments, 1); + + this.each(function () { + var instance = $.data(this, 'infinitescroll'); + + if (!instance) { + // not setup yet + // return $.error('Method ' + options + ' cannot be called until Infinite Scroll is setup'); + return false; + } + + if (!$.isFunction(instance[options]) || options.charAt(0) === "_") { + // return $.error('No such method ' + options + ' for Infinite Scroll'); + return false; + } + + // no errors! + instance[options].apply(instance, args); + }); + + break; + + // creation + case 'object': + + this.each(function () { + + var instance = $.data(this, 'infinitescroll'); + + if (instance) { + + // update options of current instance + instance.update(options); + + } else { + + // initialize new instance + instance = new $.infinitescroll(options, callback, this); + + // don't attach if instantiation failed + if (!instance.failed) { + $.data(this, 'infinitescroll', instance); + } + + } + + }); + + break; + + } + + return this; + }; + + + + /* + * smartscroll: debounced scroll event for jQuery * + * https://github.com/lukeshumard/smartscroll + * Based on smartresize by @louis_remi: https://github.com/lrbabe/jquery.smartresize.js * + * Copyright 2011 Louis-Remi & Luke Shumard * Licensed under the MIT license. * + */ + + var event = $.event, + scrollTimeout; + + event.special.smartscroll = { + setup: function () { + $(this).bind("scroll", event.special.smartscroll.handler); + }, + teardown: function () { + $(this).unbind("scroll", event.special.smartscroll.handler); + }, + handler: function (event, execAsap) { + // Save the context + var context = this, + args = arguments; + + // set correct event type + event.type = "smartscroll"; + + if (scrollTimeout) { clearTimeout(scrollTimeout); } + scrollTimeout = setTimeout(function () { + $(context).trigger('smartscroll', args); + }, execAsap === "execAsap" ? 0 : 100); + } + }; + + $.fn.smartscroll = function (fn) { + return fn ? this.bind("smartscroll", fn) : this.trigger("smartscroll", ["execAsap"]); + }; + + +})(window, jQuery); diff --git a/plugins/infinite-scroll/js/front-end/jquery.infinitescroll.js b/plugins/infinite-scroll/js/front-end/jquery.infinitescroll.js new file mode 100644 index 0000000..2bef20b --- /dev/null +++ b/plugins/infinite-scroll/js/front-end/jquery.infinitescroll.js @@ -0,0 +1 @@ +(function(o,i,k){i.infinitescroll=function z(D,F,E){this.element=i(E);if(!this._create(D,F)){this.failed=true}};i.infinitescroll.defaults={loading:{finished:k,finishedMsg:"Congratulations, you've reached the end of the internet.",img:"data:image/gif;base64,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",msg:null,msgText:"Loading the next set of posts...",selector:null,speed:"fast",start:k},state:{isDuringAjax:false,isInvalidPage:false,isDestroyed:false,isDone:false,isPaused:false,currPage:1},debug:false,behavior:k,binder:i(o),nextSelector:"div.navigation a:first",navSelector:"div.navigation",contentSelector:null,extraScrollPx:150,itemSelector:"div.post",animate:false,pathParse:k,dataType:"html",appendCallback:true,bufferPx:40,errorCallback:function(){},infid:0,pixelsFromNavToBottom:k,path:k,prefill:false,maxPage:k};i.infinitescroll.prototype={_binding:function g(F){var D=this,E=D.options;E.v="2.0b2.120520";if(!!E.behavior&&this["_binding_"+E.behavior]!==k){this["_binding_"+E.behavior].call(this);return}if(F!=="bind"&&F!=="unbind"){this._debug("Binding value "+F+" not valid");return false}if(F==="unbind"){(this.options.binder).unbind("smartscroll.infscr."+D.options.infid)}else{(this.options.binder)[F]("smartscroll.infscr."+D.options.infid,function(){D.scroll()})}this._debug("Binding",F)},_create:function t(F,J){var G=i.extend(true,{},i.infinitescroll.defaults,F);this.options=G;var I=i(o);var D=this;if(!D._validate(F)){return false}var H=i(G.nextSelector).attr("href");if(!H){this._debug("Navigation selector not found");return false}G.path=G.path||this._determinepath(H);G.contentSelector=G.contentSelector||this.element;G.loading.selector=G.loading.selector||G.contentSelector;G.loading.msg=G.loading.msg||i('
    Loading...
    '+G.loading.msgText+"
    ");(new Image()).src=G.loading.img;if(G.pixelsFromNavToBottom===k){G.pixelsFromNavToBottom=i(document).height()-i(G.navSelector).offset().top}var E=this;G.loading.start=G.loading.start||function(){i(G.navSelector).hide();G.loading.msg.appendTo(G.loading.selector).show(G.loading.speed,i.proxy(function(){this.beginAjax(G)},E))};G.loading.finished=G.loading.finished||function(){G.loading.msg.fadeOut(G.loading.speed)};G.callback=function(K,M,L){if(!!G.behavior&&K["_callback_"+G.behavior]!==k){K["_callback_"+G.behavior].call(i(G.contentSelector)[0],M,L)}if(J){J.call(i(G.contentSelector)[0],M,G,L)}if(G.prefill){I.bind("resize.infinite-scroll",K._prefill)}};if(F.debug){if(Function.prototype.bind&&(typeof console==="object"||typeof console==="function")&&typeof console.log==="object"){["log","info","warn","error","assert","dir","clear","profile","profileEnd"].forEach(function(K){console[K]=this.call(console[K],console)},Function.prototype.bind)}}this._setup();if(G.prefill){this._prefill()}return true},_prefill:function n(){var D=this;var G=i(document);var F=i(o);function E(){return(G.height()<=F.height())}this._prefill=function(){if(E()){D.scroll()}F.bind("resize.infinite-scroll",function(){if(E()){F.unbind("resize.infinite-scroll");D.scroll()}})};this._prefill()},_debug:function q(){if(true!==this.options.debug){return}if(typeof console!=="undefined"&&typeof console.log==="function"){if((Array.prototype.slice.call(arguments)).length===1&&typeof Array.prototype.slice.call(arguments)[0]==="string"){console.log((Array.prototype.slice.call(arguments)).toString())}else{console.log(Array.prototype.slice.call(arguments))}}else{if(!Function.prototype.bind&&typeof console!=="undefined"&&typeof console.log==="object"){Function.prototype.call.call(console.log,console,Array.prototype.slice.call(arguments))}}},_determinepath:function A(E){var D=this.options;if(!!D.behavior&&this["_determinepath_"+D.behavior]!==k){return this["_determinepath_"+D.behavior].call(this,E)}if(!!D.pathParse){this._debug("pathParse manual");return D.pathParse(E,this.options.state.currPage+1)}else{if(E.match(/^(.*?)\b2\b(.*?$)/)){E=E.match(/^(.*?)\b2\b(.*?$)/).slice(1)}else{if(E.match(/^(.*?)2(.*?$)/)){if(E.match(/^(.*?page=)2(\/.*|$)/)){E=E.match(/^(.*?page=)2(\/.*|$)/).slice(1);return E}E=E.match(/^(.*?)2(.*?$)/).slice(1)}else{if(E.match(/^(.*?page=)1(\/.*|$)/)){E=E.match(/^(.*?page=)1(\/.*|$)/).slice(1);return E}else{this._debug("Sorry, we couldn't parse your Next (Previous Posts) URL. Verify your the css selector points to the correct A tag. If you still get this error: yell, scream, and kindly ask for help at infinite-scroll.com.");D.state.isInvalidPage=true}}}}this._debug("determinePath",E);return E},_error:function v(E){var D=this.options;if(!!D.behavior&&this["_error_"+D.behavior]!==k){this["_error_"+D.behavior].call(this,E);return}if(E!=="destroy"&&E!=="end"){E="unknown"}this._debug("Error",E);if(E==="end"){this._showdonemsg()}D.state.isDone=true;D.state.currPage=1;D.state.isPaused=false;this._binding("unbind")},_loadcallback:function c(H,G,E){var D=this.options,J=this.options.callback,L=(D.state.isDone)?"done":(!D.appendCallback)?"no-append":"append",K;if(!!D.behavior&&this["_loadcallback_"+D.behavior]!==k){this["_loadcallback_"+D.behavior].call(this,H,G);return}switch(L){case"done":this._showdonemsg();return false;case"no-append":if(D.dataType==="html"){G="
    "+G+"
    ";G=i(G).find(D.itemSelector)}break;case"append":var F=H.children();if(F.length===0){return this._error("end")}K=document.createDocumentFragment();while(H[0].firstChild){K.appendChild(H[0].firstChild)}this._debug("contentSelector",i(D.contentSelector)[0]);i(D.contentSelector)[0].appendChild(K);G=F.get();break}D.loading.finished.call(i(D.contentSelector)[0],D);if(D.animate){var I=i(o).scrollTop()+i("#infscr-loading").height()+D.extraScrollPx+"px";i("html,body").animate({scrollTop:I},800,function(){D.state.isDuringAjax=false})}if(!D.animate){D.state.isDuringAjax=false}J(this,G,E);if(D.prefill){this._prefill()}},_nearbottom:function u(){var E=this.options,D=0+i(document).height()-(E.binder.scrollTop())-i(o).height();if(!!E.behavior&&this["_nearbottom_"+E.behavior]!==k){return this["_nearbottom_"+E.behavior].call(this)}this._debug("math:",D,E.pixelsFromNavToBottom);return(D-E.bufferPx-1&&i(E[D]).length===0){this._debug("Your "+D+" found no elements.");return false}}return true},bind:function p(){this._binding("bind")},destroy:function C(){this.options.state.isDestroyed=true;this.options.loading.finished();return this._error("destroy")},pause:function e(){this._pausing("pause")},resume:function h(){this._pausing("resume")},beginAjax:function B(G){var E=this,I=G.path,F,D,K,J;G.state.currPage++;if(G.maxPage!=k&&G.state.currPage>G.maxPage){this.destroy();return}F=i(G.contentSelector).is("table")?i(""):i("
    ");D=(typeof I==="function")?I(G.state.currPage):I.join(G.state.currPage);E._debug("heading into ajax",D);K=(G.dataType==="html"||G.dataType==="json")?G.dataType:"html+callback";if(G.appendCallback&&G.dataType==="html"){K+="+callback"}switch(K){case"html+callback":E._debug("Using HTML via .load() method");F.load(D+" "+G.itemSelector,k,function H(L){E._loadcallback(F,L,D)});break;case"html":E._debug("Using "+(K.toUpperCase())+" via $.ajax() method");i.ajax({url:D,dataType:G.dataType,complete:function H(L,M){J=(typeof(L.isResolved)!=="undefined")?(L.isResolved()):(M==="success"||M==="notmodified");if(J){E._loadcallback(F,L.responseText,D)}else{E._error("end")}}});break;case"json":E._debug("Using "+(K.toUpperCase())+" via $.ajax() method");i.ajax({dataType:"json",type:"GET",url:D,success:function(N,O,M){J=(typeof(M.isResolved)!=="undefined")?(M.isResolved()):(O==="success"||O==="notmodified");if(G.appendCallback){if(G.template!==k){var L=G.template(N);F.append(L);if(J){E._loadcallback(F,L)}else{E._error("end")}}else{E._debug("template must be defined.");E._error("end")}}else{if(J){E._loadcallback(F,N,D)}else{E._error("end")}}},error:function(){E._debug("JSON ajax request failed.");E._error("end")}});break}},retrieve:function b(F){F=F||null;var D=this,E=D.options;if(!!E.behavior&&this["retrieve_"+E.behavior]!==k){this["retrieve_"+E.behavior].call(this,F);return}if(E.state.isDestroyed){this._debug("Instance is destroyed");return false}E.state.isDuringAjax=true;E.loading.start.call(i(E.contentSelector)[0],E)},scroll:function f(){var D=this.options,E=D.state;if(!!D.behavior&&this["scroll_"+D.behavior]!==k){this["scroll_"+D.behavior].call(this);return}if(E.isDuringAjax||E.isInvalidPage||E.isDone||E.isDestroyed||E.isPaused){return}if(!this._nearbottom()){return}this.retrieve()},toggle:function y(){this._pausing()},unbind:function m(){this._binding("unbind")},update:function j(D){if(i.isPlainObject(D)){this.options=i.extend(true,this.options,D)}}};i.fn.infinitescroll=function d(F,G){var E=typeof F;switch(E){case"string":var D=Array.prototype.slice.call(arguments,1);this.each(function(){var H=i.data(this,"infinitescroll");if(!H){return false}if(!i.isFunction(H[F])||F.charAt(0)==="_"){return false}H[F].apply(H,D)});break;case"object":this.each(function(){var H=i.data(this,"infinitescroll");if(H){H.update(F)}else{H=new i.infinitescroll(F,G,this);if(!H.failed){i.data(this,"infinitescroll",H)}}});break}return this};var x=i.event,s;x.special.smartscroll={setup:function(){i(this).bind("scroll",x.special.smartscroll.handler)},teardown:function(){i(this).unbind("scroll",x.special.smartscroll.handler)},handler:function(G,D){var F=this,E=arguments;G.type="smartscroll";if(s){clearTimeout(s)}s=setTimeout(function(){i(F).trigger("smartscroll",E)},D==="execAsap"?0:100)}};i.fn.smartscroll=function(D){return D?this.bind("smartscroll",D):this.trigger("smartscroll",["execAsap"])}})(window,jQuery); \ No newline at end of file diff --git a/plugins/infinite-scroll/languages/infinite-scroll.pot b/plugins/infinite-scroll/languages/infinite-scroll.pot new file mode 100644 index 0000000..a0a29d5 --- /dev/null +++ b/plugins/infinite-scroll/languages/infinite-scroll.pot @@ -0,0 +1,173 @@ +# Copyright (C) 2012 Infinite Scroll +# This file is distributed under the same license as the Infinite Scroll project. +msgid "" +msgstr "" +"Project-Id-Version: Infinite Scroll 2.5\n" +"Report-Msgid-Bugs-To: http://wordpress.org/tag/infinite-scroll\n" +"POT-Creation-Date: 2012-02-12 14:02-0500\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2012-02-12 14:02-0500\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" + +#: infinite-scroll.php:91 +msgid "Loading..." +msgstr "" + +#: infinite-scroll.php:92 +msgid "No additional posts." +msgstr "" + +#: includes/admin.php:33 +#: HD/Applications/MAMP/htdocs/trunk/wp-content/plugins/infinite-scroll/templates/options.php:8 +msgid "Infinite Scroll Options" +msgstr "" + +#: includes/admin.php:33 +msgid "Infinite Scroll" +msgstr "" + +#: includes/admin.php:62 +#, php-format +msgid "Are you sure you want to delete the preset \"%s\"?" +msgstr "" + +#: includes/presets.php:467 +msgid "Edit" +msgstr "" + +#: includes/presets.php:467 +msgid "Delete" +msgstr "" + +#: includes/presets.php:468 +msgid "Save" +msgstr "" + +#: includes/presets.php:468 +msgid "Cancel" +msgstr "" + +#: templates/manage-presets.php:15 +msgid "Mange Infinite Scroll Presets" +msgstr "" + +#: templates/manage-presets.php:16 +msgid "Many theme's CSS selector's are stored in a community contributed database maintained by the plugin. If the current theme's CSS selectors are known, the plugin will automatically use them if the site administrator has not set any. This list will update automatically as additional theme's are added. You can add to and/or override those community defaults below. Changes entered here will affect only your site on a single-site install, and only your network's site on a multisite install." +msgstr "" + +#: templates/manage-presets.php:19 +msgid "Back to General Options" +msgstr "" + +#: templates/options.php:12 +msgid "Infinite scroll uses CSS selectors to identify various parts of your site's unique theme. In most cases, identifying each of your theme's elements below simply requires entering either the element's ID indicated with a hashmark, (e.g.,#content), or the element's class indicated by a period, (e.g.,.post). For more information, please see jQuery's CSS Selector documentation." +msgstr "" + +#: templates/options.php:17 +msgid "Content Selector" +msgstr "" + +#: templates/options.php:21 +msgid "Div containing your theme's content" +msgstr "" + +#: templates/options.php:26 +msgid "Navigation Selector" +msgstr "" + +#: templates/options.php:30 +msgid "Div containing your theme's navigation" +msgstr "" + +#: templates/options.php:35 +msgid "Next Selector" +msgstr "" + +#: templates/options.php:39 +msgid "Link to next page of content" +msgstr "" + +#: templates/options.php:44 +msgid "Item Selector" +msgstr "" + +#: templates/options.php:48 +msgid "Div containing an individual post" +msgstr "" + +#: templates/options.php +msgid "Callback" +msgstr "" + +#: templates/options.php +msgid "Code that is called after each new page is loaded" +msgstr " + +#: templates/options.php:53 +msgid "Loading Message" +msgstr "" + +#: templates/options.php:58 +msgid "Text to display as new posts are retrieved" +msgstr "" + +#: templates/options.php:64 +msgid "Finished Message" +msgstr "" + +#: templates/options.php:69 +msgid "Text to display when no additional posts are available" +msgstr "" + +#: templates/options.php:75 +msgid "Loading Image" +msgstr "" + +#: templates/options.php:78 +msgid "Current Image:" +msgstr "" + +#: templates/options.php:78 +msgid "Current Loading Image" +msgstr "" + +#: templates/options.php:79 +msgid "New Image:" +msgstr "" + +#: templates/options.php:81 +msgid "Upload New Image" +msgstr "" + +#: templates/options.php:82 +msgid "Use Default" +msgstr "" + +#: templates/options.php:85 +msgid "URL of existing or uploaded image to display as new posts are retrieved" +msgstr "" + +#: templates/options.php +mgsid "Behavior" +msgstr "" + +#: templates/options.php +mgsid "Debug" +msgstr "" + +#: templates/options.php:90 +msgid "Save Options" +msgstr "" + +#: templates/options.php:93 +msgid "Manage Defaults" +msgstr "" + +#: templates/preset-prompt.php:7 +#, php-format +msgid "Other users have submitted default CSS selectors for your theme. Would you like to use your theme's default selectors?" +msgstr "" + diff --git a/plugins/infinite-scroll/license.html b/plugins/infinite-scroll/license.html new file mode 100644 index 0000000..c039212 --- /dev/null +++ b/plugins/infinite-scroll/license.html @@ -0,0 +1,694 @@ + + + + + GNU General Public License v3.0 - GNU Project - Free Software Foundation (FSF) + + + +

    GNU GENERAL PUBLIC LICENSE

    +

    Version 3, 29 June 2007

    + +

    Copyright © 2007 Free Software Foundation, Inc. + <http://fsf.org/>

    + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed.

    + +

    Preamble

    + +

    The GNU General Public License is a free, copyleft license for +software and other kinds of works.

    + +

    The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too.

    + +

    When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things.

    + +

    To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others.

    + +

    For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights.

    + +

    Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it.

    + +

    For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions.

    + +

    Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users.

    + +

    Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free.

    + +

    The precise terms and conditions for copying, distribution and +modification follow.

    + +

    TERMS AND CONDITIONS

    + +

    0. Definitions.

    + +

    “This License” refers to version 3 of the GNU General Public License.

    + +

    “Copyright” also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks.

    + +

    “The Program” refers to any copyrightable work licensed under this +License. Each licensee is addressed as “you”. “Licensees” and +“recipients” may be individuals or organizations.

    + +

    To “modify” a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a “modified version” of the +earlier work or a work “based on” the earlier work.

    + +

    A “covered work” means either the unmodified Program or a work based +on the Program.

    + +

    To “propagate” a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well.

    + +

    To “convey” a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying.

    + +

    An interactive user interface displays “Appropriate Legal Notices” +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion.

    + +

    1. Source Code.

    + +

    The “source code” for a work means the preferred form of the work +for making modifications to it. “Object code” means any non-source +form of a work.

    + +

    A “Standard Interface” means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language.

    + +

    The “System Libraries” of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +“Major Component”, in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it.

    + +

    The “Corresponding Source” for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work.

    + +

    The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source.

    + +

    The Corresponding Source for a work in source code form is that +same work.

    + +

    2. Basic Permissions.

    + +

    All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law.

    + +

    You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you.

    + +

    Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary.

    + +

    3. Protecting Users' Legal Rights From Anti-Circumvention Law.

    + +

    No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures.

    + +

    When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures.

    + +

    4. Conveying Verbatim Copies.

    + +

    You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program.

    + +

    You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee.

    + +

    5. Conveying Modified Source Versions.

    + +

    You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions:

    + +
      +
    • a) The work must carry prominent notices stating that you modified + it, and giving a relevant date.
    • + +
    • b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + “keep intact all notices”.
    • + +
    • c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it.
    • + +
    • d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so.
    • +
    + +

    A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +“aggregate” if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate.

    + +

    6. Conveying Non-Source Forms.

    + +

    You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways:

    + +
      +
    • a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange.
    • + +
    • b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge.
    • + +
    • c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b.
    • + +
    • d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements.
    • + +
    • e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d.
    • +
    + +

    A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work.

    + +

    A “User Product” is either (1) a “consumer product”, which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, “normally used” refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product.

    + +

    “Installation Information” for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made.

    + +

    If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM).

    + +

    The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network.

    + +

    Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying.

    + +

    7. Additional Terms.

    + +

    “Additional permissions” are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions.

    + +

    When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission.

    + +

    Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms:

    + +
      +
    • a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or
    • + +
    • b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or
    • + +
    • c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or
    • + +
    • d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or
    • + +
    • e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or
    • + +
    • f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors.
    • +
    + +

    All other non-permissive additional terms are considered “further +restrictions” within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying.

    + +

    If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms.

    + +

    Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way.

    + +

    8. Termination.

    + +

    You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11).

    + +

    However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation.

    + +

    Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice.

    + +

    Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10.

    + +

    9. Acceptance Not Required for Having Copies.

    + +

    You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so.

    + +

    10. Automatic Licensing of Downstream Recipients.

    + +

    Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License.

    + +

    An “entity transaction” is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts.

    + +

    You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it.

    + +

    11. Patents.

    + +

    A “contributor” is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's “contributor version”.

    + +

    A contributor's “essential patent claims” are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, “control” includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License.

    + +

    Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version.

    + +

    In the following three paragraphs, a “patent license” is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To “grant” such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party.

    + +

    If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. “Knowingly relying” means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid.

    + +

    If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it.

    + +

    A patent license is “discriminatory” if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007.

    + +

    Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law.

    + +

    12. No Surrender of Others' Freedom.

    + +

    If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program.

    + +

    13. Use with the GNU Affero General Public License.

    + +

    Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such.

    + +

    14. Revised Versions of this License.

    + +

    The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns.

    + +

    Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License “or any later version” applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation.

    + +

    If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program.

    + +

    Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version.

    + +

    15. Disclaimer of Warranty.

    + +

    THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

    + +

    16. Limitation of Liability.

    + +

    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES.

    + +

    17. Interpretation of Sections 15 and 16.

    + +

    If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee.

    + +

    END OF TERMS AND CONDITIONS

    + +

    How to Apply These Terms to Your New Programs

    + +

    If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms.

    + +

    To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the “copyright” line and a pointer to where the full notice is found.

    + +
        <one line to give the program's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This program is free software: you can redistribute it and/or modify
    +    it under the terms of the GNU General Public License as published by
    +    the Free Software Foundation, either version 3 of the License, or
    +    (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU General Public License for more details.
    +
    +    You should have received a copy of the GNU General Public License
    +    along with this program.  If not, see <http://www.gnu.org/licenses/>.
    +
    + +

    Also add information on how to contact you by electronic and paper mail.

    + +

    If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode:

    + +
        <program>  Copyright (C) <year>  <name of author>
    +    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    +    This is free software, and you are welcome to redistribute it
    +    under certain conditions; type `show c' for details.
    +
    + +

    The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an “about box”.

    + +

    You should also get your employer (if you work as a programmer) or school, +if any, to sign a “copyright disclaimer” for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>.

    + +

    The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>.

    + + diff --git a/plugins/infinite-scroll/readme.md b/plugins/infinite-scroll/readme.md new file mode 100644 index 0000000..34c9311 --- /dev/null +++ b/plugins/infinite-scroll/readme.md @@ -0,0 +1,246 @@ +# Infinite-Scroll # +**Contributors:** beaver6813, dirkhaim, paul.irish, benbalter +**Donate link:** http://www.infinite-scroll.com +**Tags:** ajax, pagination, scrolling, scroll, endless, reading +**Requires at least:** 3.2 +**Tested up to:** 3.5 +**Stable tag:** 2.6.2 + +Automatically append the next page of posts (via AJAX) to your page when a user scrolls to the bottom. + +## Description ## + +Infinite scroll has been called autopagerize, unpaginate, endless pages. But essentially it is pre-fetching content from a subsequent page and adding it directly to the user’s current page. + +When a user scrolls towards the bottom of the page, the next page of posts is automatically retrieved and appended. This means they never need to click "Next Page", which *dramatically increases stickiness*. + +Features: + +* Works out-of-the-box for many popular WordPress themes -- just activate the plugin and scroll +* Fully customizable to adapt to your site and theme +* Requires no (hopefully) template hacking, only a knowledge of CSS selectors. +* Relies on shared database of common themes to simplify installation process +* Maintain local database of theme presets for all installed themes (shared across network on multisite installs) +* Countless API endpoints to modify the behavior. +* Backwards compatible: Will not break RSS readers, mobile devices, or browsers with javascript + +Full information on [infinite-scroll.com](http://www.infinite-scroll.com) + +## Screenshots ## + +### 1. CSS Selector (theme) configuration options ### +![CSS Selector (theme) configuration options](https://github.com/benbalter/Infinite-Scroll/raw/develop/screenshot-1.png) + +### 2. Text and image options (to display as additional posts load) ### +![Text and image options (to display as additional posts load)](https://github.com/benbalter/Infinite-Scroll/raw/develop/screenshot-2.png) + +### 3. Edit theme presets screen ### +![Edit theme presets screen](https://github.com/benbalter/Infinite-Scroll/raw/develop/screenshot-3.png) + +## Changelog ## + +### 2.5 ### +* Plugin completely rewritten from the bottom up +* **Note: you will need to manually reactivate this plugin after upgrading** +* Minimum WordPress version required now to **3.2** +* Added support for internationalization (see FAQ for information on translating) +* Added support for custom post types (now works on all pages but `is_singular()`) +* Options screens significantly simplified with additional help text +* Presets screen now uses standard WordPress administrative interface +* Ability to submit your theme's CSS Selectors to the community CSS selector database to aid others with installation +* Changes to presets are now made inline; saved via AJAX without page reload +* Added additional API endpoints for developers to modify and customize plugin behavior +* Loading image now uses native WordPress uploader and can accept arbitrary URL or image from media gallery +* Loading and finished text now uses native WordPress TinyMCE editor +* If site administrator has not entered CSS selectors and preset is known, plugin will default to preset +* Any preset entered by site (or network) administrator will now override community contributed presets by default +* Community contributed CSS selector presets are now stored in the database allowing for plugin directory to be unwritable (security enhancement) +* Prompts users to default to CSS selector preset when available +* Presets now support child themes +* Community contributed CSS selected asynchronously update daily (performance enhancement) +* Site (or network) specific CSS selector presets are now stored in the database (security enhancement) +* CSS Preset updater now uses WP_HTTP class (compatibility enhancement) +* Javascript file now served directly to user (rather than proxied via PHP) to allow for browser caching, minification, serving via CDN, and better integration with caching plugins (performance enhancement) +* Javascript options stored natively in database and passed directly to script via WordPress's `wp_localize_script` function (performance and customizability enhancement) +* No longer relies on deprecated user levels to determine permissions +* Default loading and fished messages changed +* Fixes for error and warnings when run with `WP_DEBUG` enabled +* Removed prompt for option to activate infinite scrolling for only certain users (defaults to all) +* Removed prompt for option to toggle debug mode (defaults to `WP_DEBUG` or `SCRIPT_DEBUG`) +* Removed prompt for option to toggle scrolling behavior (defaults to automatic) +* Removed prompt for additional callbacks +* Removed prompt to select image alignment (defaults to left, can override via CSS) +* Significant code clean up, file reorganization, and in-line documentation to conform to WordPress coding and style standards (whitespace, double v. single quotes, tab drift, trailing commas, closing PHP tags, etc.) +* Classes loaded as sub-classes (rather than extending parent class) to prevent classes from becoming out of sync +* Added phpdoc style documentation +* Plugin file name changed to conform to standard WordPress naming conventions +* License (GPL) included with distribution +* Version numbering simplified + +### 2.0b2.120111 ### +* Added infinite_scroll_load_override filter to manually force infinite-scroll to load on a page. +* Thanks to https://github.com/samargulies for the above patch. + +### 2.0b2.111218 ### +* Updated preset DB with basic themes +* Made a few fixes in options/presets to prep for main release. +* Changed hook used by 404 detection to template_redirect from wp. + +### 2.0b2.110822 ### +* Removed registration/enqueuing script in favor of just enqueueing +* Fixed bug/typo in compressed init script + +### 2.0b2.110821 ### +* Converted options pages to use Settings API +* Added behavior selection (Manual triggering) + +### 2.0b2.110818 ### +* Completely revamped admin panel adding more modular management +* Added ability to center loading image +* Added WYSIWYG editor to HTML allowed fields in admin panel +* Updated Javascript callback to pass DOM for new elements added +* Added Preset manager +* Added ability to auto-fill selector fields from theme preset +* Overhaul of underlying code, separating out into classes to cut down +on code processed (and hence load time) for the end-user. + +### 2.0b2.110723 ### +* Improved escaping on settings to allow greater flexibility. +* Fixed issue with jQuery not loading if WP version is up to date. +* Fixed issue with plugin showing twice on plugin list. + +### 2.0b2.110716 ### +* Moved init script from direct page insertion to separate script. +* Cleaned up unneeded declared constants. +* Combined init script and library into one minified script. +* This fixes an incompatibility with HeadJS plugin. + +### 2.0b2.110713 ### +* Fixed multiple jQuery loaded conflicts. +* Now uses standard WordPress javascript insertion. +* Loads locally stored jQuery 1.6.2 if current version is < 1.6 + this can only be detected through WordPress now, hence the fix + for multiple versions conflicting (some naughty themes don't + use WordPress's javascript loading). + +### 2.0b2.110709 ### +* FIX: Default options not being recursively copied. +* Updated to new options layout. +* Callback fix. + +### 2.0b2.110706 ### +* HTTPS loading image fix. +* Better debug support (switches between minified and non). + +### 2.0b2.110629 ### +* Callback (custom javascript) fix. +* IE9 binding bug fix. + +### 2.0b2.110628 ### +* Modified the method used to determine the link paths (bug fix) + +### 2.0b2.110617 ### +* Updated core javascript to version 2.0b2.110617 (full revamp). +* General cleanup/tidy of plugin itself. +* Fixed bugs with numerical sub-domains (now uses site_url to determine path). +* Supports archives, tags, searches. +* Wider theme support. +* Simplified plugin options page, added loading image upload ability, added option for debug mode. +* Removed annoying reminder that showed on all admin pages. +* Forces 404 header when no more posts are available. + +### 1.5.100504 ### +* New appending technique using document fragments. +* Callback receives the contentSelector elem as its first argument, + and an array of the new elements as the second argument + +### 1.4.100210 ### +Fixed small bug that jQuery 1.4 introduced. + +### 1.4 ### +Proper WordPress method (enqueue_script) removed because it just breaks too often +JS updated with some custom method action. + +### 1.3 ### +Use proper WordPress function to register the javascript +Use plugins_url to determine plugin url + +### 1.2 ### +* 2009 August 4th +* `get_option('siteurl')` fix made. +* jQuery plugin version updated. many more options available. +* Release backwards compatible + +### 1.1 ### +* 2008 September 25 +* JavaScript rewritten as a proper jQuery plugin. +* Added animation + +### 1.0 ### +* June 29 - 1.0 release. + +## Frequently Asked Questions ## + +### What exactly is infinite scrolling? ### + +Essentially it is pre-fetching content from a subsequent page and adding it directly to the user’s current page. [More Information](http://www.infinite-scroll.com/the-interaction-design-pattern/) + +### Can I change the number of posts loaded? ### + +Yes. Go to Settings -> Reading in your WordPress administrative dashboard. + +### How do I change the alignment of the loading image? ### + +Add the following to your theme's css: `#infscr-loading img { text-align: ALIGNMENT; }` where "ALIGNMENT" is either `left`, `right`, or `center`. + +### How can I pass additional arguments such as behavior or callbacks to the script? ### + +Add a filter to `infinite_scroll_options` and adds additional options to the options array. + +### Is the plugin available in my language? ### + +If you enjoy the plugin and are interested in contributing a translation (it's super easy), please take a look at the [Translating WordPress](http://codex.wordpress.org/Translating_WordPress) page. + +### Is it SEO-Friendly? ### +Yes all enhancements are made via javascript only, so search spiders see no difference. + +### Is it accessible? ### + +Things won’t change for screen-readers. This technique degrades gracefully. + +### Does it still keep going, even at the end of the blog? ### + +Infinite scroll is configured to die when it hits a 404 Not Found status code, so when it goes through all your archives it should hit a /page/43/ (or something) that doesn’t exist, then show a message "Congrats, you’ve reached the end of the internet." Some WordPress themes don’t report not found pages with a 404. Try a different theme or contacting the theme author. + +### Do I need to edit my theme to make this work? ### + +Probably not, nope. + +### How do I pass additional arguments such as callbacks to the Infinite Scroll script? ### + +To pass additional arguments to the Infinite Scroll script, add the following code to either your theme's `functions.php` or to a stand-alone plugin file. + +``` +function my_infinite_scroll_options_filter( $options ) { + $options['callback'] = 'my_callback'; + $options['another_parameter'] = 'another_value'; + return $options; +} + +add_filter( 'infinite_scroll_js_options', 'my_infinite_scroll_options_filter' ); +``` + +## Installation ## + +### Automatic Install ### +1. Login to your WordPress site as an Administrator +2. Navigate to Plugins->Add New from the menu on the left +3. Search for "Infinite Scroll" +4. Click "Install" +5. Click "Activate Now" + +### Manual Install ### +1. Download the plugin from the link in the top left corner +2. Unzip the file, and upload the resulting "infinite-scroll" folder to your "/wp-content/plugins directory" as "/wp-content/plugins/infinite-scroll" +3. Log into your WordPress install as an administrator, and navigate to the plugins screen from the left-hand menu +4. Activate Infinite Scroll diff --git a/plugins/infinite-scroll/readme.txt b/plugins/infinite-scroll/readme.txt new file mode 100644 index 0000000..94595f0 --- /dev/null +++ b/plugins/infinite-scroll/readme.txt @@ -0,0 +1,241 @@ +=== Infinite-Scroll === +Contributors: beaver6813, dirkhaim, paul.irish, benbalter +Donate link: http://www.infinite-scroll.com +Tags: ajax, pagination, scrolling, scroll, endless, reading +Requires at least: 3.2 +Tested up to: 3.5 +Stable tag: 2.6.2 + +Automatically append the next page of posts (via AJAX) to your page when a user scrolls to the bottom. + +== Description == + +Infinite scroll has been called autopagerize, unpaginate, endless pages. But essentially it is pre-fetching content from a subsequent page and adding it directly to the user’s current page. + +When a user scrolls towards the bottom of the page, the next page of posts is automatically retrieved and appended. This means they never need to click "Next Page", which *dramatically increases stickiness*. + +Features: + +* Works out-of-the-box for many popular WordPress themes -- just activate the plugin and scroll +* Fully customizable to adapt to your site and theme +* Requires no (hopefully) template hacking, only a knowledge of CSS selectors. +* Relies on shared database of common themes to simplify installation process +* Maintain local database of theme presets for all installed themes (shared across network on multisite installs) +* Countless API endpoints to modify the behavior. +* Backwards compatible: Will not break RSS readers, mobile devices, or browsers with javascript + +Full information on [infinite-scroll.com](http://www.infinite-scroll.com) + +== Changelog == + += 2.5 = +* Plugin completely rewritten from the bottom up +* **Note: you will need to manually reactivate this plugin after upgrading** +* Minimum WordPress version required now to **3.2** +* Added support for internationalization (see FAQ for information on translating) +* Added support for custom post types (now works on all pages but `is_singular()`) +* Options screens significantly simplified with additional help text +* Presets screen now uses standard WordPress administrative interface +* Ability to submit your theme's CSS Selectors to the community CSS selector database to aid others with installation +* Changes to presets are now made inline; saved via AJAX without page reload +* Added additional API endpoints for developers to modify and customize plugin behavior +* Loading image now uses native WordPress uploader and can accept arbitrary URL or image from media gallery +* Loading and finished text now uses native WordPress TinyMCE editor +* If site administrator has not entered CSS selectors and preset is known, plugin will default to preset +* Any preset entered by site (or network) administrator will now override community contributed presets by default +* Community contributed CSS selector presets are now stored in the database allowing for plugin directory to be unwritable (security enhancement) +* Prompts users to default to CSS selector preset when available +* Presets now support child themes +* Community contributed CSS selectors now stored as standard CSV and asynchronously update daily (performance and compatibility enhancement) +* Site (or network) specific CSS selector presets are now stored in the database (security enhancement) +* CSS Preset updater now uses WP_HTTP class (compatibility enhancement) +* Javascript file now served directly to user (rather than proxied via PHP) to allow for browser caching, minification, serving via CDN, and better integration with caching plugins (performance enhancement) +* Javascript options stored natively in database and passed directly to script via WordPress's `wp_localize_script` function (performance and customizability enhancement) +* No longer relies on deprecated user levels to determine permissions +* Default loading and fished messages changed +* Fixes for error and warnings when run with `WP_DEBUG` enabled +* Removed prompt for option to activate infinite scrolling for only certain users (defaults to all) +* Removed prompt for option to toggle debug mode (defaults to `WP_DEBUG` or `SCRIPT_DEBUG`) +* Removed prompt for option to toggle scrolling behavior (defaults to automatic) +* Removed prompt for additional callbacks +* Removed prompt to select image alignment (defaults to left, can override via CSS) +* Significant code clean up, file reorganization, and in-line documentation to conform to WordPress coding and style standards (whitespace, double v. single quotes, tab drift, trailing commas, closing PHP tags, etc.) +* Classes loaded as sub-classes (rather than extending parent class) to prevent classes from becoming out of sync +* Added phpdoc style documentation +* Plugin file name changed to conform to standard WordPress naming conventions +* License (GPL) included with distribution +* Version numbering simplified + += 2.0b2.120111 = +* Added infinite_scroll_load_override filter to manually force infinite-scroll to load on a page. +* Thanks to https://github.com/samargulies for the above patch. + += 2.0b2.111218 = +* Updated preset DB with basic themes +* Made a few fixes in options/presets to prep for main release. +* Changed hook used by 404 detection to template_redirect from wp. + += 2.0b2.110822 = +* Removed registration/enqueuing script in favor of just enqueueing +* Fixed bug/typo in compressed init script + += 2.0b2.110821 = +* Converted options pages to use Settings API +* Added behavior selection (Manual triggering) + += 2.0b2.110818 = +* Completely revamped admin panel adding more modular management +* Added ability to center loading image +* Added WYSIWYG editor to HTML allowed fields in admin panel +* Updated Javascript callback to pass DOM for new elements added +* Added Preset manager +* Added ability to auto-fill selector fields from theme preset +* Overhaul of underlying code, separating out into classes to cut down +on code processed (and hence load time) for the end-user. + += 2.0b2.110723 = +* Improved escaping on settings to allow greater flexibility. +* Fixed issue with jQuery not loading if WP version is up to date. +* Fixed issue with plugin showing twice on plugin list. + += 2.0b2.110716 = +* Moved init script from direct page insertion to separate script. +* Cleaned up unneeded declared constants. +* Combined init script and library into one minified script. +* This fixes an incompatibility with HeadJS plugin. + += 2.0b2.110713 = +* Fixed multiple jQuery loaded conflicts. +* Now uses standard WordPress javascript insertion. +* Loads locally stored jQuery 1.6.2 if current version is < 1.6 + this can only be detected through WordPress now, hence the fix + for multiple versions conflicting (some naughty themes don't + use WordPress's javascript loading). + += 2.0b2.110709 = +* FIX: Default options not being recursively copied. +* Updated to new options layout. +* Callback fix. + += 2.0b2.110706 = +* HTTPS loading image fix. +* Better debug support (switches between minified and non). + += 2.0b2.110629 = +* Callback (custom javascript) fix. +* IE9 binding bug fix. + += 2.0b2.110628 = +* Modified the method used to determine the link paths (bug fix) + += 2.0b2.110617 = +* Updated core javascript to version 2.0b2.110617 (full revamp). +* General cleanup/tidy of plugin itself. +* Fixed bugs with numerical sub-domains (now uses site_url to determine path). +* Supports archives, tags, searches. +* Wider theme support. +* Simplified plugin options page, added loading image upload ability, added option for debug mode. +* Removed annoying reminder that showed on all admin pages. +* Forces 404 header when no more posts are available. + += 1.5.100504 = +* New appending technique using document fragments. +* Callback receives the contentSelector elem as its first argument, + and an array of the new elements as the second argument + += 1.4.100210 = +Fixed small bug that jQuery 1.4 introduced. + += 1.4 = +Proper WordPress method (enqueue_script) removed because it just breaks too often +JS updated with some custom method action. + += 1.3 = +Use proper WordPress function to register the javascript +Use plugins_url to determine plugin url + += 1.2 = +* 2009 August 4th +* `get_option('siteurl')` fix made. +* jQuery plugin version updated. many more options available. +* Release backwards compatible + += 1.1 = +* 2008 September 25 +* JavaScript rewritten as a proper jQuery plugin. +* Added animation + += 1.0 = +* June 29 - 1.0 release. + +== Screenshots == + +1. CSS Selector (theme) configuration options +2. Text and image options (to display as additional posts load) +3. Edit theme presets screen + +== Frequently Asked Questions == + += What exactly is infinite scrolling? = + +Essentially it is pre-fetching content from a subsequent page and adding it directly to the user’s current page. [More Information](http://www.infinite-scroll.com/the-interaction-design-pattern/) + += Can I change the number of posts loaded? = + +Yes. Go to Settings -> Reading in your WordPress administrative dashboard. + += How do I change the alignment of the loading image? = + +Add the following to your theme's css: `#infscr-loading img { text-align: ALIGNMENT; }` where "ALIGNMENT" is either `left`, `right`, or `center`. + += How can I pass additional arguments such as behavior or callbacks to the script? = + +Add a filter to `infinite_scroll_options` and adds additional options to the options array. + += Is the plugin available in my language? = + +If you enjoy the plugin and are interested in contributing a translation (it's super easy), please take a look at the [Translating WordPress](http://codex.wordpress.org/Translating_WordPress) page. + += Is it SEO-Friendly? = +Yes all enhancements are made via javascript only, so search spiders see no difference. + += Is it accessible? = + +Things won’t change for screen-readers. This technique degrades gracefully. + += Does it still keep going, even at the end of the blog? = + +Infinite scroll is configured to die when it hits a 404 Not Found status code, so when it goes through all your archives it should hit a /page/43/ (or something) that doesn’t exist, then show a message "Congrats, you’ve reached the end of the internet." Some WordPress themes don’t report not found pages with a 404. Try a different theme or contacting the theme author. + += Do I need to edit my theme to make this work? = + +Probably not, nope. + += How do I pass additional arguments such as callbacks to the Infinite Scroll script? = + +To pass additional arguments to the Infinite Scroll script, add the following code to either your theme's `functions.php` or to a stand-alone plugin file. + +``` +function my_infinite_scroll_options_filter( $options ) { + $options['callback'] = 'my_callback'; + $options['another_parameter'] = 'another_value'; + return $options; +} + +add_filter( 'infinite_scroll_js_options', 'my_infinite_scroll_options_filter' ); +``` + +== Installation == + += Automatic Install = +1. Login to your WordPress site as an Administrator +2. Navigate to Plugins->Add New from the menu on the left +3. Search for "Infinite Scroll" +4. Click "Install" +5. Click "Activate Now" + += Manual Install = +1. Download the plugin from the link in the top left corner +2. Unzip the file, and upload the resulting "infinite-scroll" folder to your "/wp-content/plugins directory" as "/wp-content/plugins/infinite-scroll" +3. Log into your WordPress install as an administrator, and navigate to the plugins screen from the left-hand menu +4. Activate Infinite Scroll diff --git a/plugins/infinite-scroll/screenshot-1.png b/plugins/infinite-scroll/screenshot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..987424131477948573e861a03d01eddd91d55bbf GIT binary patch literal 63879 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

    R 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 ?&R8K8UK&p%2Pl`c9Q{yQx2^xPC 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%0D1enr24 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 Hbp8GpHBJ)& literal 0 HcmV?d00001 diff --git a/plugins/infinite-scroll/screenshot-2.png b/plugins/infinite-scroll/screenshot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..83ce72d52edb2e4e7ad1c23e36e1f4b0388ebdb9 GIT binary patch literal 68151 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 Yk!FtUBusS7&!@NODq4;P$T0#@FiaQ7RB zzvH5(sSm+yQ~_=j=bBSj%dD`9XuFt>3z0AovuH@{v@bh-MSXXr3V(gM+IV}+ZJmb? z|CZ5ObF^qg74S=gj$J48aK2l#?P|W%Q?(3m^K#JMsP?!$f40S|hfYNJJt?L3dPeTF zf%&39xv~BbQ2S_TBLv7>m3;Zh&4EL4uj!gaagULRC(_mU{6vV}w)bq&67=}~n>T)I zhY$|%xPOV(K{eIbWd57l5)@Y&FY%Dp_^UL4{XUd^O&7bM zAy?6Z>9}!ZE*(IMb@fV)8^1bzzIDn@ zL0>Dm0~HHL=a!;M z9qd_@gSAP_i-X6#0TG^Jl$LViy8+m#?e&$~gBX#n&g&J9kvdSFx9c!9C4aKu?N_{q z+D15*Vz`b~Gtl;)ZjZ+2H_a?s7~%=^|F^%X1)8`t=D|WE!l(uY8K0h zZvDDA_X}5t@kPO%KhO9P{q*)nB3vW#={t`_2lZ%{M(TZY1#KA+ur7I9^OyI@u`TTl zX0tRE>5<7NX~P{fVa;$?Xch2B_2{Jhg#N*O`V~|sjZ`LpRO^c#T8h`Klu7Inu=WSo z3`Q9|7{oln6V$iK7w-WVzWK*a_=s)!FZmdNSRhTYT?9sqkZIk<6+5)XM5F$i0Cd`@?g|?8!?0mrkJU1sC1y4F3xRY)J5ilrbyJHznYm9o4=Gm zh~`p{0sT2{L=n+Y-sMM7o;F)$%qQz3rdGTY>&B03bX`~)TgXT=A9I;1EcrPIft@?a z?#nBIvoe~jg4Uo9A#5f|gpi>6k$eYh_-W5PXlkQ@UIG5g$Qy;GUNioy7)nOc3Iwh>O6mPI^_sozFcSG*UgUh z-#@~mVG%v)eK?D-_jYRcI>e6TIOik4-Y@x`@|H^+BPEKC9HX&TyQ^Z?F%2GEGGh(y zR_?V}*10{&gB$Hu^SQ~@qq+0tS|)ALvAjnM&hgpvjfOOE+&vNZS?0p?H{XMjB{cRS zP9|*oJdEg~Xv?WDG4^gN_cOv&7o5-7>f>#0kQ)?Npe3>v=Tv{$=jV%~+WlG#UQg|%a& za9Q)7>nulSYnb*P6)E)9@z_oV?6sZx-qm2cw+HmJEl(YGf>6#@wkDbBDGGDUFtLdq zcE$#@ZWsejLyX$Qwp`^)4Q4f%$<`0nr2;UYd`-6juyzgRilfIm^CG_|_@QrOb(Js? zw_MrcpYf2WAG0Bh8W8ZK(K|@y=>3M9;tg|Y1*x@tW6SlU=go#_VvMr0!sL7ee)B`) z3JKWbfmh3L;snu5N{@bHO}C_VlHPnHo6?j&#=kHC{+F*R%e{)C@Qa8!BS6 z)8eW91)S-g$$-4-Pn81Dr%+y=2hZEjWqU_|E~bK_5PBp`GoVou%qwTCI z!UprVIf#|T_(*Bb*ose(#XrTVZYSJh@UU9-YI>F=pmQ*~9o}9xJU2`x+1DBqbb9g* zBA_kAQiHs`@EeW9lxd@RcfZ`(7sWNut!+;XTs-R<-c~`g<2-}ILUz`WJP{tUo_7GK zHk_nNpAHE57W5?qW-B;&4t_&|11q=2~rDBMpD|EYZkUK=Y0JcNi) z^%wa4TVXHP^-(nV|E-GereKMJ4H2m8?G&uKx|)H3!N$hs?eu%&yVNELgp-R4kh&MC zBAi7*K|v;+D=9twe6g1~kMvV3wMOmb-5qtCM3NYgkbwk!3E~6#S1Caml1SsQ*NW=^ z8~a#W&I+Vb$(x;38fZ{(aJVm0ELg5H|Cuzw%W zo7m#M4=kA2>U@=bfb&lAT9Y7?zZh zLypxAD%#Z4l(p33M=-Fs@W-m!2qeTVZaU^SI+wR`H&?14^MbFTI;K?_>ysToAoMdy zxpX7Gw#q-r0`F@AVEMdrlu=8A*C&OT!@eC=yz%e4^R3X^*JI6NNZX}-E;TA@8Nf$Q zO5znayA9VEuSS+nLm7 zWGt6QNF7EY&V2}-L>{L`=FJyq${}DO-(NvBCeGCnvAHgU;DXts^zk!9(?!I8@XdZB zIJnK9#MnZh?AFs)JB;QAC+tx&XH)^CJ4&<52>F+wX#4w(ayo(BR}{so{@;MEqFG@d z%*Qn(-2FpUtj`I+WvOJMpz56I?uS`RuD|f?H_43GYv8%*TP|A*FG9I%@LWuG(@V4K z@_0sqlO84oC(b7|CYI^1vjWl|2cX>evI&jX#bQ34D(t@-kGgJW{X96MM{9Q11ahXh z4}=qayH#tQ}FyxRY^ zyWQT9JqQNu&TXxj&9OeJqys^o-r~wh9D7vi0Oh68sa>hvr+zorft0cZ8}!H)m(95$fH3uKM_Qi3k`+a z#nLDN{S74WwQY#}w4SDVQ!WwEq-ra)l~g*9%JAE1YfhRzCWkR%X7o?S#G3vJTB<8^ zPVT4LF7yO_Mnc7WzJ7)VOX`b;wvSeVgM<{$0k>>Lcz;BO6+ea{Z~kxxOTxnNI#{m|@Z#5=PdjqUqR+W(oH?|Jz6nHk(dbh<-2cu@QM zrLzv>lA%!Qolt8A=%BS=6hp=E8Isy2hotlK=6AdpOKn!LixvQQ>&X9PZ|up{3{Xln z+DIN!PN@67Srq5jUyAhjvQg@NHRHcpvyw@KAz=NISS@3k{eWTC`I(!nl3wTbQ1pz) zx^dcK79*)NR+C6Q6I6&0I?3KheEo ztgT%qojohbg4J>kwvR)zhl;$uU7|!t_spwvF!FceV=_V4%k9ciZJ9C*Uik`q>NP;a zE)y1IiitCrB9W64?@6=i+0>Dl!KqMd*CFr{s- zAhaW@Zcv>3iQQgkSdY)=j1q~op7Xlr(?W9*fLk9FV^F!-%Go`>pUqy7zVFrB4_RW< zvHUoQdwVKve>2GD1Wi4B?I;ldO-qy9>2jMnWBj-=?mCYxkXU%rEc^lm^^W!_+_A_%!o4#?JzrjtZ{8AuzHfShQ zmMyZ=_XGQ(oatt2M!1fjNpTZf6Qx+aQScp2|9;S_&EsKk39Dy0gXz0gc4NmuPtRc2 z<3ug;tziB2UI?>x=$zSEdYHuqs0;tasYPG6P%$fEPtI|N!Do&`A1oq4+ZON}cIBly+1zIu3&Gy`HO7bKUx6Iuudkwshnu$6AXf2{4TG; zvfHN~QRu=S!-18eId2}ea>GZV`ni6a_DZus>WwOww!4k&JQ&a82^&C?wySeusTYum z0J~4EXq>ayTaK!s-ADi7Z%w{OXFT^cl$#5UhmFfDx*H^FXgriDpm!3{l7w+X_;YS zikaY`VrgQ^Irc%}&@~S&(D|qWoU1h(C;k3dzr0k?XC!Jfq?=hqQc4%?h6dtA(ltcE zHjKhfGT}{rv^`D>;H-m{=YVzw)`1t!Ik&u9&KK)p&eL5h`uy!IuKN{j7;Q3-xsL`l z;Fj-sOEYS=Hu%?G6kc;;N}xjhp#^qMqpVQ*h#PgmTgL)uayD0%*jhGr<-12ZSgkf> z9dKj1)#@%kqC}sk9|kExLi4dcHxI8w$0MO)BzrIkHa8-5IEwp^_@7niHc0}QOikMP z@4k}pd~Y@P_3=4NvGP?jW?R3hUd$OeUPx42VHk>&=gEgZ(_K`sG!{#W(dV? zQLFr2`?_@E>R?6e$g_CUrC&>XcKtZ7*Z(AGN`>vLLfi=)^P{eJ;L#I6T9{C$)S19= za5SsqFaoOhUvZn4Ab_i=zV*~|IbP7YT-`T_dBzD-!o)_e{mXvbUDqxM~2XXoFs@gj-n7! zc|&jxXWMoLdRo#VM;$y>&t*09Fo=;>*~Bk|wNd0;HPb~UBA^_$6v&(>OKbD&24{7> zlH2|mLzH{hE}+r-8G)Mjmn5l3tEmhxWW~c7?~$F2k4#^yi&%NjU@q5Umi~U-(>_6b zExIywCrtMbxzS@J(rQq!j{R!88RNB|^Q%;Y`Q;K4j8qHf0NZtZn`XbUn5wgOUFWos z?4SF#bRAt3Mx{!miKdD8sg%39U6!k5rw(YtA$m>f)L_VrKrlul*&FOGvdY-YGil#2 zR4Z}(osh0y7iYIA>aM|;#OPYg5n|iCB;1}5NyUs>r>v(BkQl#|u&tUEZwL`67avpT z@8I>XPC%AUEa!f+sR*UCmw>81?zl-mpYFtw+DV0~8}ECYo6@UAHBZ;y;o7$13*L$4 z=&PkAnEK_dL6Gr6QRv(5UoXVnZ1g)fOgEBImFF+mtXpZm%8Gv9t8L*ppV; zWMKV99csVua@Z;!zqRLjOr$xYMzg62*Ie#XkooFd1H?DvcsUJa$4s0bZ92SvsP z_ko8Z|Fm`1)G9tGt3JiN^h9=LGTtNn<|pJ~0DUYzf(Ej?q|6=E4&mp{lvniUeXfjw zYCOEq=g!P<3;;PF@t$s;6#x#0Hz^8_FoL!skPlcd^P2(!G;_x$s0^~&jK>xTlFK&$ zxeQ_T3#-b;XS;5b1f1}RuN{5xtE!Efg6{i4aa1`uUG8IQ4#pecfmqh_S8r~;9TV-@ zIxayBo38s|_69$j@Ao*7XTyxs{H7)aUGY|xF zjB=A2H3AEjMWN7!iTP&xIHJJXY`saR1r`#h!#i5(U~4b?P34E4(FB3^tRLMkJx?uk z^e0_(qng5ovwhY>)tiaG`k`{Ti%BmGo_Ao>f`VJWf8W}}!2m)ab#nZlp|FUEh|tjb zsOL7Hl8634Er|LBx^>rNMC4aER~qUVcQGF5OAB)^|5=Ps{0jzbO-8A9q>6FgzzNg<`@8O73?GPT>FJoB z7@nnfFOIwV^^(=jRlrpty1I;PcvwW;w&2&vYF{BYgDNG8{|Ppc-$x9RtzWGEu7$9A zpAsDYNrlm9lGDbk?!dLdZCVTkaX`;kaPzHh3~$i;6m7_&Fod5V#A;@ZD~zCE^OSZb8#$96}1rtn=y30nk0X zAymqnDk|W66p3>24}>7RAedqy`XZm7;I)!dQm`;F!-sx!v0v~DfcKv6?UA9^cM-f^ zckz26M{5#hW9g8Bllw#d-*nD|f=$El<6UUc{%dZ*;E2J=uZ|#@3_M*lEF%8h>A6eXspK}fF1W#GG*JjHlHie9o;$=vcuOT_~IA$oJ z`tpS(PROm%;(i!kv^}fj2*pWbW7vi^+pRYwL{paP+{CLlG9;8|e<#pxK0ZrtL}@m6 z4UCW%$&+5~AB>1#vN6OUmUj)`1IUY`zkQByw{q=ZQrj!#1*dY7a;?W@y1-U*M<})3 zJoft6YvtR}9Y`L2Z+R-cu|_HLFhO8Q8gMwN-|6uuX2jb^bpF8okWSD>1=4$~PXoxg zcQ#~GtmBg~HB2rmOIUKD1)o9GSl|`F9hNqu-6Xk1`NCQPJV>o-m1|@ls+Y#--68XW znzEm3mR)6;=`_W2yh&EWyIzM^61ucKZqbA-IPlpcB9e z$2lsSR~=G8tuH5b*AvRvnjjH=7#+gMgH9_&GsD#l;CP=+`EDNq>-_sBf@xAa^H^Dc z6@`dy_u_;<(4=sop}Z2bJj27lTUI-L%;gJE9@lg;{X+ zkQq>+nc>+Ljfa_MjqwK8$nQKM;gJ5u+leh_aF zIXTRXK4%wzfP0i>nSO2g@C~J3pIa>Txd+9U@ag&n)$ZhlJuJ98b{YM5axf9k`P*{8 zUib;}pm+DidT-Cy$X`l!L(MCfzOhrKPq3m?UAL=wvC*ToEf-;8Eew5$r087zNr^Dw z1@5fj1!kRiU-vES{+JfwkXvzRPm@4v+74^xo*lfnQcEeIIcJkm#w3yxN=>FYWs3?v zJ+YSsJMAQQ?7L3O`yK#k|63w>e3(3&TEs0g0QJ-gUPL?$K^U^RPdIqn9e z#fFurU=91-Yz2p#0?JYgI7NZ<4vSM-KJEqZ&H1$A%$lY(AdB1@oM&+cJsoxR z<)<}rxVS7E{6Nb=`R1W(^ww%y-3yNovG#|V1@Fh{|M8?!03I>qlAvU&`I_`QTP@N(C0aZ$2v5_*u~$5&X>}5Lvy^?2CI!q zks{x{ndCRTR6*}S+kg~HbjNsTS9RCEMY0o(`e>{y6CDH*O(S8Y4%w||74Eja@X)|H zp5n2yK$4Pp0Ti{GT=v*ax6eWvLGY2WHmiw+qyj!27?$sSPm{aOnT30eUUJ@Z)qFI? z)VbCZXjDEe%m+Fv(IJ;J;mOz(7aaz_nd`oA-5d!rOfm%3CtwwsMMR5QCUUJogk;n#k;PW-g-Jw$x=Yup)S_C(G}c~h0BVGdPd=m zNkDduhvMD87J>0NC~P6FU9+Kjg3nB;Z1vd8cX$1@vVT73@F({JKuek2ZEN?u3&4$0Ove``vXHnjJ+iKW!qf`|+U3t)&YYHEC;DN4f&L z$WV8mFKrEHgDmI*>{)G0CMesA3fA3NH0E|Y?Z9xlTNmtonRg3?29CxsG88v%;XXUa zACxoFQOA~r>n>04M3CSTha_mP$t#y1jdwsTRSW^!cR<#z)`i=|@om4rWO58 z>%t`McXL^?O(d^3E^6i{K{vxpT1Ybxk`Ot{lB4Yjfnb(vu?TpLnB zzlmkOuw^L(L1W6Ydd^Q3(KP%-Uhb57=w@ND7$;7WSjMeiij8+()nK*JjuTeJk<)lv zf>l3C|JM>>D*J&zZ#;DN(uh zp@P5q(w<;5)NJU74Ge`&Gawxg`~qs^qpF^j1fZ^EE{hLso_2n_*wNcl4Yks?ESCA zYN0%BesD*)l++Ay-ADs>1oTw(5;v6k^h)+O{29>|aco-)#-*h+5@&rEZ1`Ox@i0&J z1_yB!`rrHYBj9CHPO#Uj`3I1?lkas*#lJG8p>5~G$xRa}lGrIb2)2RG1?iHntFY;2 zHzmf;{>hbxYf|rXU;8`wBaC5Ts+sTmBH>9#45leo5-bj>LYTMmCav^$LO9(XQ#sG? z)8&SRdl(M}gjgj77l5P?9lX|rfO>OG))oqBMOB_q=wAPzpRhm>lUJl7x$FjMmkW;V z7po!OhGaW5g3s%lq9gYG(1kn!Sc&&8D3UW6qE3OLti|kkv>9V;kh>u>X1|oJ*txZ* z;)oU@vb~66YdEsM)CYTUW{lSOIWUF*f@d5)Ho(+-(A9YHHyBHx? zSZx<~U)d#bNQF@iF@bPatLV-drE2CzNrRG+U13Bt+Y=S0xtHgczP7*bIjk<{C+!%Imq7T|pP(|;(2gplf z_%t(tGvc;USZj}P*(Kg^~-S>vEe+|YQXvfyt zaALo=QbB(u*Po(W8vA8=I!-aaH^RCjk?wg``I8j=9U{6}%4lVnTZvaNuem#0d9)ra zS%0(R`|>**4Ngw(yUnvfx%on52%1>>%|x4%7WJ3DsM@&3*Mod{Lpnuj4emD36PK=N z^j~^RoP7)};erBN@6K%Y;mP$>I!1kIhz{5N6`ua($Lm(L^dgUsaYZAUG0t9jU4ieK zfR3bUHkQIOincs4ni{3@$Vcz){OEWgYGv=zOG!xniVm>uX~bHXo}orv3~17Qef{2=RKcsf&M#&;>){(UMt7)O-k$Zj>G9F#iDAA!Noj%`!fv2LWT*Y? zLHj;5=J&7#j zY^0mTR>;vamHClszCdSIhk+6TPU+$+Qx zRHeA$C)4QUgzIi!tl;H#u#PGU!#HX7$VLzKi>h#)awEwCRbzd5^;AiyNuE+Q+8fOg;m$}* z#17f zYIs&7r^v5}m2I;8mw)N6c7IyqG9@8l&NO{GTB_J@nGA+wn&!oe@R6&u-%q$zSc~$9eFRpbqd}qYN zl5wYsF+dVcG8k+M5q2+L6R|awjadun#)tC>X%`6JN=6&rkzwen8)^+hW!D`kV@@kN z-U)-Af)oP^>bIuNkGl9;p>Qm%-ouAY*Pi!6q#6wFhiu(F{V-0oa*cVQMOc1baAo}= z%F8(*B86uTR(J%eonu3i2rAb${`ZwN73}R*_jkLP{l88XB}LYGJib>|bzNDTZ2gdo zOg87pd-^1#>>ttTjk`CyIuy%&f24&*ZjnqAA|?Rp_z6lD19Ls&OLa>65?+!TPNi86 zHsUo3d5H?jV}G&va#Bd>_s*K7nR}LAB$1HwG*l^Vb?PHNM3w`9Y`6US*K@hHV!P}`< zYgKFAWZ;B3kDzLNC_V5z+N)KXk!8FFYf5coa9-<+X@#|tt-y^EU9`DIW2l$Yo|>!p z-t-=Nug71v$d7REGO{npJRyumOw4o08hJ`X5E(*FU@{t|1n>bJ1h{v&^V-ws9JTI zPR|bYyeCRFHzUVF(7kHek_);!nr?4TxhbEHN+`;Sd(kVwm*2}Dphy?H^{GnR#3af4C-DhF~^_wRWr0` zK=3fWx9s|*CFcmBB@Y}FHUF5XtizbmvhAWSunqoSs5%P|XVf_lj|W9T z@?Z8U@i{K${s5SNW7kh0D+D0-zm@^mU?vCu7ro-5^?D4!!VrFf+5aHh>UgkWKy{t6 z68e98HxdKe!y?1?_)m+^4x2Wz^!G&lD_*4>47b=eT;&Ep+iWE z39J2Uw*5(!lAM{J*3{-XuI76N#J-V_yW+X|sj6`PjVaHCzS8-Y#OHT3;)i`C`&ZG+ z_b6lb;RW(H|M3Xk!#P7a-uw9ekpaZ-B%6_xuce?@2m4d1q)>;Vk=j(K#~YV=tKD9x z!=RO3<8S}@X9K7x^3=x5tFT&pJ8E4?y55YX3GheN7cNt`gyKJX13;UEZ+lf}_ArhQ zL_9D3*FdE4vPv!$70#>Y2wkrmyr%EmB$Xw!nlBIUf~snCrMWD}Bzu76i}epykiq=< zIG$-@DP8%!`Q-r}>@oQ_qJ_ETKi&70;vxTDG_&n+3vVv(n+x>|OcG0fqiJ;jlbOA# z9=rQ%BhDlther)wW+rODiHyJrWf%Y%&v=VIElKdlL)CRur!C1yNKz>x{YZ1r7P3k-V` z#>w7Ai}P|n#vua|Fuw(hd5mjCxZd}cX4dUsv_7UL$?GtO6;nuhs*Q^!6kmS@B{bFr zG>M2?TXPpPqacK4@8{%kI!|&Ow!6Gl6+Cc}|HYku>(9k;N#r+tLuqD(0#4p5RZKrY(vhgi2(Y2@r z)KVE8vQAD4^EtbbM~cdv{{z?YnzmA3ZfD#-neQ!x}t% zUVK=W_TrKYCKD6!9lQj6j#_Y{Hh|uo)<(TS>wa&KgSO6d(4xGeqC!zc;rwLw4wtdP zS}~t-eC|J39Od(g=rkt9v>KILrLoocr6~6Y%AP^^wYl1Us@-QX^;`UxKK$2{nPaFd z{ENecwcb7tOR^nF7aG#iT^T|PcX2P}nxaGbFJL?6vp>xKZBCwGFmRcO<4ebjOM;6$ zK}1?pxU z8{H-9O%Seb;&CXntU#x79PxGP8~%XLIF-G_Pn1DG!WVDMg(k$T10-0akGGh<#`P5! zK80@+-l*%PoQ8Bt%YvEQzedouY<}I1+xde*b%OK`%>d8@WdCO)d$&^j$2W(7iRaH7 zV~?S{CZiD}KVx4nkK1*etL#d%FP&eLOAdZ%+;tIMv=O4ks(mAnQ$i40q5Dh4a_S*$ zTYWsqr+a{b{Hcauvl`>zNqyT=~U9rnCmhARxZ_{|HwE)zrA4cn#WEg#O3=`ga0cj$fZDDw zC!!O=R8HW0Xeu9M!gZ!$DHbyZ`3wG+nS zr#qYtKuZ#C7YEhNpjvvqlaz;yQiI98%k*g&dcF)1Vp8Sh%#Q{BR#koF**M0_k)AC| zdU=|1_7=~IWUurF^1_%C-_}CDELu`gniTeK-0iH4zXd3r}#hvOwTaSJt!S1Z9f3n*9aafJ}Z>o9y$`-*ad! zL5mYE8Ck7X)sW`+08Ybd>K9S+J6-h#o~G)B|DNR3-N_QD3Do(6!daOuDnXzC`Mk~q*N;uqJ~gb}LQsy^Ek2Eo1+noG$3XR}J8Z#(U5j^|&j$8ILA=4{d5=fI-C zjlr#Ndf-}LEE$gBcu#2%5poW?+Z#@?pnDVPK_Jycc;Ma@w=Suj6p zxcgG_wOJV~6RfsL6R2R7*#TVc-XQk(3YBhgJj+)?7W5bG-tsj%*Ue|h#E_&93Ww(i zQ!F{zg~@)~JJ<5p(~q5bZ*2oPb!TK;GjHI(1u}H+%c|Wh6u_uhccAiAa5X(X7IQbd zED$gXxb>pEEX#M_zsQcnEtaB?)#?FXw)gUgOXYQKQ3p-0N%8UW`lxY1jszRH&rrnI3OXTN@W9 zHg&x}GX>DvZzr;@ABwmmUuvbNyzJI@ShZ>SULr?#p#HGm=*vDOCWf!?eC>u(G|I11 zTdbgaV&F5UlAU;IuRs?UN24#{Z;1hngqnUshSbt>EV+AlweX0iLF1G7&jHda(R(#) z<&?v1s$AQuUsH#(8s#BIk^=DHNJ$t1JF>YFWg}M{B58cEk&$ZE&$HQy(5t||E19YHwkWqva1ne&P^ z^Z3o9(`^yP?l^+m)(aYHMSF8XKBuG6>^e~CBn9|+jvXv8bdhWJu6gc9dJXybZPjei zW$xO2xlc6gaoD{NO6m6{;SFtHOilr;xgetI$c#4#Jnfvom3uuPDBIsVVmO2sHM~A< zDbi2Xw3z57ewo8FV%`gY`^T`Xz&+ts0Zm&xP8MuO?ipSfOoy57XsVqV&8H?y(abPw z*XgSBv1{vWpZ~&3VME1s{3;;lX1$!W7i=q*vf1E$z$JX11EbQK_AXWVqp*K>VqMtS z!{w{{nMvm?>55iOUxm9?=?nxW>Zoise}pqi0)tE~*)6G@G9Nb)hOGCHm#iQ?qRNCR zqzw*AMC6;Aj^nb@?cIVr`d3$Lx?)5@B>d9){Phhkm-sKgdv0!tsf$}UY|ny85$qF0 zfmC?;nwMm?uBESP%TDLE9glH*Hl9uj<=Gvh0lje|HQNqiH37MbWjPstUkv;>hk_yj z?41U73K&#zopl@x(9ot@zr5fP{%2-mgf9F(?kz&&Y=;nyOiYXX($pL(D{Aa}-X~sE ztVMIo)_3d0`3ezNuaWexk?7>RT$#_)Iu_pa_Rm;$+h$X4x9DEn#u4*nihLcOr@LB3 zVYXJi9+0t4w78v4{o3^qffw0p2*v#Z(@X=Z*SF$BlftM~@uwpw$iT}mu9MI3@wL8q zyLfFjf0?-hCQDFpw-b+3gC)jfsd-h!MKtKFx9+E2cqSx)r{U|R3XMrw8^7J&5Cny3 z9`U`gNZCm7O%3I}j-Siyg^S1CT34DOr$-24R#z_X+3iob>$_Q`kp@4o#a@|^C$ZP# zFElN&l!p;;6X?b z4LwI`-s#~zD(kJ*pMg?PWgW5(mL_%iPfO45J*fQ0zW2zpLUCb9j z@coj_@v2%zIY8$Zx2#`XZ*-P^MM$t_4-1`OR94j&UArm{z@DbiZ)m$s2nAc8yIxZV zHdVz7EkVa;-y1ww4#GV5u_P`BcfHMCSKX8Q9-sXbrM2&$rvyXy2!&+(%^V%bFdcZx z{$q(IU;7q^;ktf`yWaVzFM1=@)$U8dboW_d-S#BVRVK->a&-wDX z)AdxAVCVRzxHh&>ql|h1o(JEOQEmKks}Yq;Rn|%ReroLm?y5XBMW)Ct!(Tkru$uVX zrkdPz97d&CPwKFeCgpc7KI~7SpOj6OfUf3KkCeug=IS)bR>{nV&8}3$ZjcV?8mp-W zey>PM1l~U$lex@xF4N_2RHH(V;;^W<81G6ic6O%k4aJ+~Bm%z#L=AaQQxhmL?vMf< zF-XhHTP#JtR#+Ef3=80xed&;C7Ax1#ee*8A+Uo^783NwS`*2z>7Cm_6yC{JP+8D)I zLX4Gt7mmMN2^av`tA2;K30bZoz}sP7HDI!TPTb){kcOEN(n>?%@Y4ev-1!p-rzKDw zcu?~^t3ah{QeM+hA3oR-A-jPB2-(1~#-7!Q8!n?5&o6#boUCHeVTrqcB(E_-%UYGQ z^RtRwq7d@C<%Ff|KQtrx88`xc9SlETjn#yVSe7)LSsa38#H=tt_V0_qr)Qcc4u?Ah zgY;l&ZaG!>ZjO4ds`$YKIze!x(ln^_7aHCWG%~3J;vu&sWj?Gj9!u7&Lv?MyNK7KQ z(iNNO;*0RKJEMn?-PjA&N#pGlYhpZt--%3M;zEq?s z{6otErA|$4Q@`o0BIJRtEU~W%v)K`4u=HRoB2P6gZZq89sJMar5l9_AUtZ4GrAPn~ zUzS(uW0l2#>GwZuqA1mS^aj`_Bjwq7*x2==m_S8PhuEs==^#Ta43~|nQMNWamfv46 z9Hbeir&*w6yE)$6gv%jGRZl%?#MABQ=z!$b8i4;BXf>)fB03*CD*%dIFsJPN3jbg~aJsp< z6LN9E&-2R``tb<;KQ{N%8i_!lL}=#B0?ht-=zp2w-)Kx;A2PqSP{!^i7!Sczm z*uKiR{EvvSVSI9|3^=-f@xuRe(fuJaqCb(Cd?-4>|5nM=ClX6BgNU;Gw|w)nVE`rB zCtXX*7yIw<x$-o5r{78!{ Kh}DP~1^z#YhSzlf literal 0 HcmV?d00001 diff --git a/plugins/infinite-scroll/screenshot-3.png b/plugins/infinite-scroll/screenshot-3.png new file mode 100644 index 0000000000000000000000000000000000000000..754547bde4a34d9441b726c0ded843b28c9c2269 GIT binary patch literal 81085 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 + diff --git a/plugins/infinite-scroll/templates/manage-presets.php b/plugins/infinite-scroll/templates/manage-presets.php new file mode 100644 index 0000000..370c4ba --- /dev/null +++ b/plugins/infinite-scroll/templates/manage-presets.php @@ -0,0 +1,21 @@ +prepare_items(); +?> +

    +

    +

    +
    + display(); ?> +
    |
    +
    + diff --git a/plugins/infinite-scroll/templates/options.php b/plugins/infinite-scroll/templates/options.php new file mode 100644 index 0000000..793c09d --- /dev/null +++ b/plugins/infinite-scroll/templates/options.php @@ -0,0 +1,174 @@ + +
    +

    +
    + +parent->slug_ ); ?> +

    CSS selectors to identify various parts of your site\'s unique theme. In most cases, identifying each of your theme\'s elements below simply requires entering either the element\'s ID indicated with a hashmark, (e.g.,#content), or the element\'s class indicated by a period, (e.g.,.post). For more information, please see jQuery\'s CSS Selector documentation.', 'infinite-scroll' ); ?>

    +parent->presets->preset_prompt(); ?> + + + + + + + + + + + + + + + + + + + + + + + + parent->submit->prompt(); ?> + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + parent->admin->editor( 'msgText' ); ?> + +
    +
    + + +
    + parent->admin->editor( 'finishedMsg' ); ?> + +
    +
    + + + " alt="" />
    + + + parent->options->loading["img"] + != $this->parent->options->defaults["loading"]['img'] ) { ?> + ( ) + +
    + +
    + + + +
    + + + parent->options->debug) ?> /> +
    +

    + +

    + +
    + +
    +
    + + + + + diff --git a/plugins/infinite-scroll/templates/preset-prompt.php b/plugins/infinite-scroll/templates/preset-prompt.php new file mode 100644 index 0000000..f897cec --- /dev/null +++ b/plugins/infinite-scroll/templates/preset-prompt.php @@ -0,0 +1,7 @@ + +

    use your theme\'s default selectors?'), esc_url( add_query_arg( 'nonce', wp_create_nonce( 'infinite-scroll-presets' ), add_query_arg( 'set_presets', true ) ) ) ); ?>

    \ No newline at end of file diff --git a/plugins/infinite-scroll/templates/submit-prompt.php b/plugins/infinite-scroll/templates/submit-prompt.php new file mode 100644 index 0000000..ced1f85 --- /dev/null +++ b/plugins/infinite-scroll/templates/submit-prompt.php @@ -0,0 +1,23 @@ + + +   + +

    submitting your theme\'s CSS selectors to the global CSS selector database to make installation and configuration easier for other users', 'infinite-scroll'), esc_url( add_query_arg( 'submit', true ) ) ); ?> + + + () + +

    + parent->slug_ . '_hide_submit' , '_ajax_nonce-' . $this->parent->slug . '-hide-submit' ); ?> + + $this->parent->slug_ . '_hide_submit', 'nonce' => '_ajax_nonce-' . $this->parent->slug . '-hide-submit' ); ?> + + + + +
    \ No newline at end of file diff --git a/plugins/infinite-scroll/templates/submit.php b/plugins/infinite-scroll/templates/submit.php new file mode 100644 index 0000000..5282c73 --- /dev/null +++ b/plugins/infinite-scroll/templates/submit.php @@ -0,0 +1,31 @@ + +
    +

    +

    + +
      +
    1. CTRL-C (PC) or Command-C (Mac) to copy the below CSS selectors to your computer\'s clipboard.', 'infinite-scroll' );?>
    2. +
    3. Infinite Scroll Support Forum CSS Selectors Page, and if you don\'t already have one, create a WordPress.org account (it takes 30 seconds!).', 'infinite-scroll'), $this->parent->submit->url, 'http://wordpress.org/support/register.php' );?>
    4. +
    5. +
    6. CTRL-V (PC) or Command-V (Mac) to paste the selectors into the message box', 'infinite-scroll' ); ?>
    7. +
    8. +
    9. Post"', 'infinite-scroll' ); ?>
    10. +
    + + + + + + + + + +
    \ No newline at end of file diff --git a/plugins/jetpack/.svnignore b/plugins/jetpack/.svnignore new file mode 100644 index 0000000..5c764ee --- /dev/null +++ b/plugins/jetpack/.svnignore @@ -0,0 +1,8 @@ +.git/ +.gitignore +.travis.yml +readme.md +tests/ +_inc/lib/icalendar-reader.php +modules/shortcodes/upcoming-events.php +modules/widgets/upcoming-events.php diff --git a/plugins/jetpack/3rd-party/3rd-party.php b/plugins/jetpack/3rd-party/3rd-party.php new file mode 100644 index 0000000..6ba6a18 --- /dev/null +++ b/plugins/jetpack/3rd-party/3rd-party.php @@ -0,0 +1,12 @@ +og_tags(); + } elseif ( isset( $GLOBALS['posts'] ) && $GLOBALS['posts'][0]->ID > 0 ) { + printf( " \n", esc_attr( $GLOBALS['bitly']->get_bitly_link_for_post_id( $GLOBALS['posts'][0]->ID ) ) ); + } + +} diff --git a/plugins/jetpack/3rd-party/buddypress.php b/plugins/jetpack/3rd-party/buddypress.php new file mode 100644 index 0000000..9ae35f3 --- /dev/null +++ b/plugins/jetpack/3rd-party/buddypress.php @@ -0,0 +1,9 @@ + $post ) { + $lang_information = wpml_get_language_information( $post['post_id'] ); + $post_language = substr( $lang_information['locale'], 0, 2 ); + if ( $post_language !== $sitepress->get_current_language() ) { + unset( $posts[ $k ] ); + } + } + + return $posts; +} + +add_filter( 'grunion_contact_form_field_html', 'grunion_contact_form_field_html_filter', 10, 3 ); +function grunion_contact_form_field_html_filter( $r, $field_label, $id ){ + global $sitepress; + + if ( function_exists( 'icl_translate' ) ) { + if ( $sitepress->get_current_language() !== $sitepress->get_default_language() ) { + $label_translation = icl_translate( 'jetpack ', $field_label . '_label', $field_label ); + $r = str_replace( $field_label, $label_translation, $r ); + } + } + + return $r; +} + +endif; diff --git a/plugins/jetpack/_inc/facebook-embed.js b/plugins/jetpack/_inc/facebook-embed.js new file mode 100644 index 0000000..580aef6 --- /dev/null +++ b/plugins/jetpack/_inc/facebook-embed.js @@ -0,0 +1,36 @@ +/* global FB, jpfbembed */ +(function( window ) { + var facebookEmbed = function() { + var fbroot, src; + + if ( 'undefined' !== typeof FB && FB.XFBML ) { + FB.XFBML.parse(); + } else { + fbroot = document.createElement( 'div' ); + fbroot.id = 'fb-root'; + document.getElementsByTagName( 'body' )[0].appendChild( fbroot ); + + src = '//connect.facebook.net/' + jpfbembed.locale + '/sdk.js#xfbml=1'; + if ( jpfbembed.appid ) { + src += '&appId=' + jpfbembed.appid; + } + src += '&version=v2.3'; + jQuery.getScript( src ); + } + }; + + window.fbAsyncInit = function() { + FB.init( { + appId : jpfbembed.appid, + version: 'v2.3' + } ); + + FB.XFBML.parse(); + }; + + if ( 'undefined' !== typeof infiniteScroll ) { + jQuery( document.body ).on( 'post-load', facebookEmbed ); + } + + facebookEmbed(); +})( this ); diff --git a/plugins/jetpack/_inc/fonts/automatticons/automatticons.eot b/plugins/jetpack/_inc/fonts/automatticons/automatticons.eot new file mode 100644 index 0000000000000000000000000000000000000000..1c11732ffd162bc943fa51bc959fc22924e2b83e GIT binary patch literal 8292 zcmaKRWl$VIv+c6@ve@FjEFRoF_~H)13GNUaLI^I4yCt|g3&DcBy9Eg(ivA%{Fth#v4a8tFa`hs_#_yB{~DP8SpfhvKq?yG3DeN|Z{UB_ z6a1fX6BI`MKj8lu)BrhvAHWyz3g8Z~e$u`GXMpXK=K=6};t&Az0QLaKCx+Wo)cXku z1iW}cyq}`Z|6xG^`~V&R-;?kIBmp`AeE{^oz5jz5!7G z0ub*)W{=}1tk#Vtoz%V5LIYuj65d?A*+S;;Ka&xF-JF-Umah;~?+CF9l*TpSnyqwW ztDDUV&r3T8YP8m?(#+CLg0)P+RnVC>so%KZ&7DNjw@jS11+z=I#O{2l9vS>;G?hDJ zk*gT*H8LuZrDstzT0aHuBx=F*QNQW!wJ^_L@a!c83G9W{I$4axxirY~>06|>H<$=Q zO-BeFS`}i&0kYL8m3q5GD`saaxbe*zV5~v5@itov4i3Rl9h-}Ejcv@YEjGUU7_x=(!4OO*jP6?> zYlnnVZ`OiWT4>eOrG5(bQgxR5OP|~G_a<}C)4#qG#iZaEa*!Nf`B66n!@bTnP;3&b zyG<~kx4%ShN?cNg*K<9a*msVb&=HT`axC@=mzc==NSPA;-snA`^I+}YnQ=dczh%kj zs}N0zRS%px;3W+{rjX@K<^36>?^L5n6*4V)8tcGWwzTS`Gtj*e4T_shJd7~t(fC5_ z zuR+BSJ0vq761e>lswje6evWr~vzhvXf#(LNt8bRH*W##Xg2MnmC}_4!nQTVF6;`@dpjCv9L7Bd_SX23YqtcbFe&hiO#;WlYGE_lXM(EKLNN8i;w z)6L+)vm2h82)ZJ`oo-h)sY_H`2qJ~=YL<#Q`l@_qs^QX*$QSi{K(1xO-B;FxuYHxy z2WV|1g-ggJPK|Qr#42b;O5~*lK3ctOkhPNkq_+AMWhzm)+a1d?MuT1A=T$kcqY5l1 z2r>SM+-ce!3D+EtxqC~Rp;tWxoK|y#`+QAGSfr51eH$D2+~d2QI5E?Pp6Fl8WB=#h zwN8U4d#%*(k(Y8($~MYxXad4_V7-WSS_=TBp6=U`Sp-H6zzc_oZ&I?jx&Goc+kVA| z#4VXx(muK$hefTVz8bm#xMp+qOn-LKat(vvZB7(r3rQz#&#{t4%H`72{d-ZP}dmyQw_vSQrUM9Nw0iU?)=bc;q;Dm!PRT008*^CYQ=mhtstB+W5 zvd$}5Ny~n^_!J|juSbAQk3^Cq#JrzHA3$Esad)4*U+Eo=o z9!ChUW!;guQi%?7wI&@anQ<@y4qa$IdsPzAlm}JIj<9AQpdD{Jpqn+PQHO-I%ZL0y zf?tSbf#}6y@}(qMw$}Jx01iMA0UF!B>ZD+#OV&grGrk*@nzveLnCaXm#5zc-BB#d< z&u*Z&jwTe}m%KTpTAs=@E`p&DeI=^vr%(n`yEU|R=40>oQ)`}ZuM=}uf!8K++E)nZ z;Sb;5*Y**HLs_5IW=^YaxN4n@O)>#)vVAQgMdQya9NOdV5lZ{Fderf@BZTTevTJAQ zJhM2HW#OY6=b#f0{_%RulF=zkko7pm36tp>04_?N>xW6kPq}!ENfW|nFafm7 zM4y?+AbB#7A6;_MhQ-z%N~Id)1&uKZc6QXk@6Ngih8pEQV@GSt6!gc)em@Je>HT@I zQWltg)KRKZHH7w1jz^7iMI~uSfjZ8j(_SDW9l}FdNOMo0Go(|bWV^+><=JG zfzNZ~yjN2@okW@$?8fa3W`rx;ROJLsSH;??=?@w5u}|SSeqpc~Jf?zMzu%u052*2I zOv1`?P?fVmvPolI;Jj~zN`a5@8rJ4teynqb%5Irgi3rtyITK-BIZi!&2rJ;!6U)x} zR527Oi~|Kyc+RGA$U2fPj`!z$*{`!mI?ZlC}LlYR-3o@a9<-Q{o#$g@6OosdEB>#?MUEv)1J zYlYe`ZlVP?sEEq4f2$bj?JuS{lYHUPmIjki%8dRAry<#Ke+yB`$Ww(fVtu0uM!^!W z1cd<{Nqq`DhHcJ#l~+Fl2IRL8*@K4RM(YqdIperY~DeqM^1 z8IVQzh#+$Lcdw{Ato` zY#+Yr(@r@xR9F{BoRY7ugCDZRZ=o#DiwmR{{aD;O$LuF=MN_Qqukx|a{Ev&;MjPHN z=~mQW(={jSae_mH6Y#D|9=(4c(8`z{VH%dbCn6W79zd`AozP2uU%V(DZXL^~S{fU!; zq@1gu_Rk_)B;t+jlDBC&+?Px(wtYDmducMPgtMr>@!rcAabmL55y^Wr8sj^1HZFB$NaHL|y?3HJ{-itwRi4&<`M zjHEYgu*!;M2$andsS~d@=70s!n~S4hJ&{N4rJ}LUh;J`=+Z!+XGuOyVbXT_JZz&=W zkshgf$8d85hxVwpx0iXsucG(bgZUgBL5}ZNm-bm?13Mzmzs6`bC?=T&kqhIngO-yX2R+k*LhD0pOFNNz3p!&P^x+|uh-<=W@M0H|0B?~;h9Yip-R8%v z5IFyiH`xORi0|gFQi1COR+)=`J=i;SV`_-{RT{SFg$J7^S>tmz+a{e`QsUbrFY*Nl zMqr~!Jp_Es4sOLTv?)i*@in$|zA1KS9yIkfsr{@)5krF8475I8#KH~NZE{h{uJAC9 z$ZRl*5)m#rw?U6_py8`|^>Kg#(xzvdE}(}475C)Iqbt{4$^%wOQ&EH~aWeuzuKG2{ z1dw<0ez&#G42u5B&nu(-bb-je;zP7f*LOSxPH*Ww{o_>oLZ5{bkE!QT@=ZlqonBU#j=y8If8-E<>=6 zf?a6H2-zX@<%4}+TzLGQhxTjf1YxcRC-u>gho7|xDFZHY!a~~L{GbJ7o8h7Ik=YF} zvLd;WPQN#$!%zUt3vPUuR8H$MRcg@_l1vuNu;vRxuDT&#V4~3)*bP%yo*3_UKy{d| zpdnE*iaVRtH$D;5cU!skti<$9sk$F=@tU)Feu-2hpE?XS@5`l6<$$yItX1w1-{F|% zA_zflp$oFf2|^c!dLB1Q-r__YyeAZauPVqfQ`h3|-v11!n!ujRjc~QL6Ks|ro5l1N za!2|`n|dYiw)>wp#6rC)8q?!0jV@^^deC2gl6da}>>xWNbRg`a`|DhzQSvyn@xEyU zrzy=d>Fu}-_3ffz=RM~!7VTndj6f&7p8HCp?9ga{XDPphE>kOMq8#o>pc2;8)vu{8QV=I1MQ)(! zh!w<}dtdRhVFF4ZgjmT9N|EhwQpR#NR8b}LrXyFk(&|r{b)oT{!S=TI6K0(ogV-VZx$A$MJh=ThvP3T*fkAH4;@hZoaA*i`R%Xv1K!9pHY^g zETIjI;7bMyH>S7xNTb7B1DM7g&&IWg;t%|phyIb#U;9jFw8AnSx4nL?wpEJrTKz7A zY*Mvo#!auA=bG?)J{PI?P@en=GS_Dfk@0^=t%wL_*{ZzRb zAd^x*yR2>Z+h#SZ%%-S&z$cIbkMDt95#t;TGq5F<$;j|4{x<8vStM<+EAJm+hYrH0 zFW9?H6AV?UMR}iKaDLh3kb@TnvUo@*{R!k0GKkqwVXSx?4c^OF&XQ5qx$;5d$8yetw#xhvdp-E$?YOq zA4Gd95Q^pGQZ46PpY%-IeSehdfT$0Wad%s@wM3{6Uib<|vAA?o_>P{`g=;tUVpfDZ z*(5D3?mC+vJS)ULWgbqIc)WpFcc9sI#&mW%T*fR}OJl3#7Ls0$z`T$6hVh|V;ii(n zsGIyR8}DI}OIfc-taVsIY*5Z_a0N$|$EcW1AQ*mEN9GQ6o}s%VSPE zNz1?c-h;!-g7y<8nXH(7`eN#2F2LdwwD=9@50j1y%?XNmoQY9*?qIt^x<`rAW!f(b zi)o6DWej72O&J#~wc~PEoM^F#nsVo&a8s-`XTf^&!{op34lg=B1#LdV zy!X!1AP))-GMyAmdz`}g-U+_K$k3t~ftFO;lo=_+Wa%QGUgtU8N>ZO!pj8*%hop zi-}#Uzt$a%1N)Rv)0!^U)*sd!`8dM$cb@QZI~shd?7ajHa;))GtBq?%8^j-|sN_4? zK3dTJ>wPqX^c$XMYR3@zt${FAz5GTQl_<_4#lDaaWh-eQvKLw_6mC)>ARGfVzw3;| zA-5~J__Vw8vae}T01=hTpcCTE?)Pzpha2rn<@r3` zPwJVP0S?~n61HaC_O|R|enpW2Jq%MBRY+SnK)^#U9X;9i!j*t=VB?r+ox8x-%{l)X z=JZj^Z)_z^T;$vOPjaV39wVL=rLuN)d4XDT-Mv@2*$l;WZf_(2ugs0E#7N7--LhAR z!+sQxm{Xf!)g(CUL}TN}#{?`Qv2ne`W<<#>7qCCi#sDpN`~Lh{a^KnCbLItUa|t>E7EL%=}p zilN;AlPt(V4s_iS^-PSqtAwM+pn#NHmUdkDn+W9<*`kzNdpYJDMzf|~4gGY-kp)AI zcr9%jfhQs|06Ba;IX%I!Fn!)2sA#3x1o-UCihi{I$6>&hC%AYlF5#TgN2H5lv^9 znsC4GyMA`_5iuiqYWo(_3ND_JVJ)4)F#aU4-d5ZjR(NI$rt@s($v1%V$c1%~elil| zd{C^`$Y-!-6Fo0xkWof0-f+mog|7(l|>SJ z21@6eBJ1vS=Y(Q(l2yz%&~Do((fOyanTEo0mPk{-^t{&WuG|<{GWh*$QDoS9{4%$T z4qLjBR`N51;xzoz2uEnq^ETfwk0aX%6zI!GOlC;-{{Q0+CFYXWQkrL8Rll1^K+C&|EteG!jPm26%j_J@f-=LEdb_= z=4P#KXnn8S`2aTj*NblUH#v#n#;e zn|Dlmrs~SsvF|{?!Mgf&J05k$c8%-h{uVh`9Di)_(z2Q%grg?5;LJ(qLAx!r zghlWx5}vVDu%sDfDF_gLRPz6Oem2@e z0x48>TAan`Sq2}mFuG4pz+Ld5hF#SPngM{{J{c~W`A93V{8_?7?X%L7WAH2`34tw% zs*lL5i}5v9Mat75 zMKU8s5;ugaC8?)@8vURoU}HT7vTsh1#As7w;+Iry7UQrYYj09#WWO03ECI4+1TST3O#09gW7DvHYm@8iwpmap0T#<%TV)i7rvwtb<4})LzlSQ$86yur z*lH+;E`hiP{;kW{j;AR8shl>Y)C`kX(wSE%jm}foDz$b=Wq^YtS2<)LI@xDOmwh&D zd8FK&{v-iwylEab4#X76waok-F+aZYXrqB%fBV(CD0te_pb6ng5q;(Y#jol3oQaqZ zN286v&42;g?ztqV03o-;I884vV5uIC-??puUB5-L!|9rLk$ZHmu#-h#$WCM4E=IIq?}gOg8PCqqvg$d{gozpRvPStkcD53dr8#F39@b3FqxvP*W^RSfB@j#E z)V*jNLV&@snj!9iCQ}u2L9KGWZiu^&y78#GJ!XH@?nkYVOY@usu?N&6_Imj3ir$NJ z;)t%L^s|@$po6Zq8gk0BvHp;-o=YKu)69C~kkWNB6gfB^TI}cFLx7^x5?!_AA|a+$ zX*T4|t{#!bHr^ z-?AQ;yhG&|>_>V@bt-GIhI6Puu&UzsJ8(eBZ1>-b1?%THyPr>Bd>r-;_p&eS7tjso zOfjxmFDA=r@Lq8G*B5xCjYhK$pXP@?eGa0dSpk3x9K0tvqzTrT7Mh0tu1qlGDUrlf zA5p)qV_~ZVyJ9@CYZ%NFFx$T$nf&uI1Ti3L$nPxk-x}oYHPqta#&NhV+7@iZ(`yi% znuS7*)G6B3Hty812$C7uFW>4MLy zrQ?lF+b>&_lCZCHR1+M^1$TO>bvo84uN?IMy`r8fH#uPttk~#c|C_~vu%`ryzdpJx zO?syuuITzK6N9sNY^PX$jbh`580XE$rijvY{BUkQ08(0;mSAo3L{T>ckYGweUV;nt5#G3ftm74HaykNX{Mt7*T7;_z2%2F;glvuI7MM$B7PGH`X-@c z;G}S1>Ztmu(b2NNcE!Aihq58{gtbutZwqCzsp)sH}IF8^GFvDza7C8kB^Mm>#Urc&N6B6c_itpG9tw~7ku?D(i)Sq$j%-c1L!!1T%3&Jy1T=3Hhgp&4dd@ER1@7;+opw38S z3V_oV=Q-K%8(Dq`^B2rgQN5SAQSCv*C4Pd+o2bpat3J2tSDy>Xg1luAf*|~*0 zS+vJMiIB&9*od|m+q^o$w1#*SJ%zn0HmHerU;k_>SYDN1d9u1Z-9#tAdJ)VR9(w0M zcYV=abeCfg#&0yu9Jr?ypJ8TfEh+Eqrhy+ZC2W<=TJ@L4OvUNum8`Gc9}UBbR3Sbuz|@lU=Oi8t zUyENGloJ|Q2@bzRfRf+___!Oaem7!tnC=Ah*ne#ueLeTY{M+*|$ZwN0*ep>sy!qe! zxSbKsg~0hpJ#D+=Svr+H?{p0Mo*nj5Mu G!u}6i&eNm- literal 0 HcmV?d00001 diff --git a/plugins/jetpack/_inc/fonts/automatticons/automatticons.svg b/plugins/jetpack/_inc/fonts/automatticons/automatticons.svg new file mode 100644 index 0000000..1d59406 --- /dev/null +++ b/plugins/jetpack/_inc/fonts/automatticons/automatticons.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/jetpack/_inc/fonts/automatticons/automatticons.ttf b/plugins/jetpack/_inc/fonts/automatticons/automatticons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5f0d103b9846ff9c4486d87e73554020de538e73 GIT binary patch literal 12012 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 literal 0 HcmV?d00001 diff --git a/plugins/jetpack/_inc/fonts/automatticons/automatticons.woff b/plugins/jetpack/_inc/fonts/automatticons/automatticons.woff new file mode 100644 index 0000000000000000000000000000000000000000..6b07c49f6e7c49e3ecf05d3ab0e30cf709c7db26 GIT binary patch literal 8944 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 literal 0 HcmV?d00001 diff --git a/plugins/jetpack/_inc/fonts/jetpack/jetpack.svg b/plugins/jetpack/_inc/fonts/jetpack/jetpack.svg new file mode 100644 index 0000000..729712a --- /dev/null +++ b/plugins/jetpack/_inc/fonts/jetpack/jetpack.svg @@ -0,0 +1,32 @@ + + + + + +Created by FontForge 20120731 at Mon Jun 30 11:24:39 2014 + By Michael Arestad +Created by Michael Arestad with FontForge 2.0 (http://fontforge.sf.net) + + + + + + + + diff --git a/plugins/jetpack/_inc/fonts/jetpack/jetpack.ttf b/plugins/jetpack/_inc/fonts/jetpack/jetpack.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4f6f7fc3d7e6796c8c25132a3fc81f6f37990e2d GIT binary patch literal 1688 zcmds1&u>&!6#nj;H*YGGwu2QU>EcEVf~Id?-$2#LsIABl6DLd}5H{-x}DB`j~gM!ZRxER%?RCmu1^ zDD9Wa)v#>=%qOnW9+|BdJ$#0f96v&PN7ZXL@IH>w{|0SY^Q!)pk1B7{e+@9cZq!@h z&!zlz&Ob%J3$-@NiFf`koEy$Q#7=_*aO-ydc3&qu_r*=INP7TXw;m%FJNIFC32{?r zQbT&p)QpKywOTe6C^R<(TQjBs@c?nsABcd=@kl?!K76AFSkLJ={ZY&7wL);Lg!L_B z%Mk0Gb=a(J7kz3iy(S?zVN#iDVoI7yRib1pip|neqsCxDQk(3ww+x<<{tkC5rb}?! zdlRVCIxSVd^_+d;e+l$m#;dv)xI#nk@sHvZcQOHcMIe=3O_;dru2}KS>}t#)#7a!j zaYe5tEb&ivm0Nh%O()aISJKJ-$;~{BzS}z?qy!S}L z+Ozld$pb0z!tzqPz0_VSSUU!9P^QEp&GypewM#o+j7iGKTK52k@LT`jj^l?23s(DA zgn7~MIKnaP7x@UANQkc@9LI=Qj<7|3L){!x-OukST`Vw!KO$^k5ceV+Lr%maY+^`! z65%+c_%^~8`D-|eCVY4Z`7QBAUcdssc~nqDnY@o#+S59!#VAil&C?&!FOfqXHDaZk zm|?u+KW@XJKFElWy@3o;>_HT(bT`&Ui>%EIKI0AnN1MJE`XzZ`LFOyPvggmr>89Tb zy^@@-gk_nl*TP)AIpa&$cI3fw7&bDgR6sURtlbLinjbRJ$2wz!^%ilFrXM!EB0-*f ziPg`cO2aQz=BWQ`5g9IIdos!8NdDXo#xY58i6(HEX|@%Ykwe<}DYd`&gl4!w|>2)*k|A6Cn?VN3IG5A literal 0 HcmV?d00001 diff --git a/plugins/jetpack/_inc/fonts/jetpack/jetpack.woff b/plugins/jetpack/_inc/fonts/jetpack/jetpack.woff new file mode 100644 index 0000000000000000000000000000000000000000..2b1e919befe88a9abf59298c959b90134f863653 GIT binary patch literal 1172 zcmXT-cXMN4WB>w|DGaHo2@sfq{X^1}Me?#)6D4>50Wabu2*4zyZSl|1&VB z=TxQv)%gJVvw?WQ+%vVeGEx&$faVwg`T9U?#<2R1b_P%oD3$=^%L1_qa~I=}jNB5S z+Zf*f`2rx!#=zi`lb;M!$K(LybAfRcLr8971<+2$1|VM^h!q$-8C>%cb5nupUI4|D zfOON^*i6fU{NfUz`#^3{0b-;1DZYm)ZY3wABqT5-)&I_C{P@Q#UUJ7w35N%NO7Fie zi2Cq9{n+N7y$*Wp%n?!yzNI`33{drN{{Elo*x$*>B5~fxz-R%J7(;v@b1TqLsC+`A zKw?4~1EZQkS_(s_rNN6v76#TM4Ef^uv$8aE&&dNP zSX5?61TZQe-oVaa*TuFDXb3P4fut4~20;9hBmfMZ87C!99XNB~+=A^BCpz9w6Sn3) z9KE$t_7K$16+i(Xux=NspeTW&P?|v^qRAWX-A@G6#+w zEoSMEm8jNsP?DXUy;F6DXhTGT@dXWrm>SiUz;LXcVDER>K;)SH_w^G3jtc5*JaFNP z?`pogtGp6V-LmzaqZTk}!md?TMw=AgH6G!#U}As3(KCnPqw3ZPR#PIr{oearfBt;l z1?}b>GW(?WM2Nk3bh?OH_D@9Kqo5ztqF;2mpU#cx2tO@*&3=W*TI00yU*ko&=Y7rG z*;rf?op(q$_q6VpBh63EmQ-xIllWJ*c*+HigdJ`ZB9hKub?*}3d@YszY;)Asg<2~@ zt=~z%^R75CapLNTB-g1e-0WQ+ySNSqCUh~n=WP8r|JuUzGp5SYG0dNX*xlTVc22L8 zQfrJm9l6q6t>cNFY3G+uXDTXpUb<8|Wsg^n=CWqTGg&dAbA8{W+`8~$Tba&{{0{47 zw?rI0KD@48cH_~!&b~{!kL#z;D3Y5ko2C5jo8iL}Pv@S@;wyJTZaI4@U!DIY)>LMG zUe3X)lg~X~$EnzAhcE97m5+E)H2K-gkgOLPOP_eIj-R_dKLi^849)-9B~%(kl$os( z7`u%OjW$kymbyz)N`jFg`~`~;FugDW^EneF?WHg@8E@-8*Zku1_1g7^GZ=!JIe + + + +
    + +
    + + + diff --git a/plugins/jetpack/_inc/gallery-settings.js b/plugins/jetpack/_inc/gallery-settings.js new file mode 100644 index 0000000..7e7b29f --- /dev/null +++ b/plugins/jetpack/_inc/gallery-settings.js @@ -0,0 +1,33 @@ +/** + * Jetpack Gallery Settings + */ +(function($) { + var media = wp.media; + + // Wrap the render() function to append controls. + media.view.Settings.Gallery = media.view.Settings.Gallery.extend({ + render: function() { + var $el = this.$el; + + media.view.Settings.prototype.render.apply( this, arguments ); + + // Append the type template and update the settings. + $el.append( media.template( 'jetpack-gallery-settings' ) ); + media.gallery.defaults.type = 'default'; // lil hack that lets media know there's a type attribute. + this.update.apply( this, ['type'] ); + + // Hide the Columns setting for all types except Default + $el.find( 'select[name=type]' ).on( 'change', function () { + var columnSetting = $el.find( 'select[name=columns]' ).closest( 'label.setting' ); + + if ( 'default' === $( this ).val() || 'thumbnails' === $( this ).val() ) { + columnSetting.show(); + } else { + columnSetting.hide(); + } + } ).change(); + + return this; + } + }); +})(jQuery); diff --git a/plugins/jetpack/_inc/genericons.php b/plugins/jetpack/_inc/genericons.php new file mode 100644 index 0000000..fc0e6f4 --- /dev/null +++ b/plugins/jetpack/_inc/genericons.php @@ -0,0 +1,13 @@ + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/plugins/jetpack/_inc/genericons/README.md b/plugins/jetpack/_inc/genericons/README.md new file mode 100644 index 0000000..4aa8cc0 --- /dev/null +++ b/plugins/jetpack/_inc/genericons/README.md @@ -0,0 +1,218 @@ +# Genericons + +Genericons are vector icons embedded in a webfont designed to be clean and simple keeping with a generic aesthetic. + +Use genericons for instant HiDPI, to change icon colors on the fly, or even with CSS effects such as drop-shadows or gradients! + + +## Usage + +To use it, place the `genericons` folder in your stylesheet directory and enqueue the genericons.css file. Now you can create an icon like this: + +``` +.my-icon:before { + content: '\f101'; + font: normal 16px/1 'Genericons'; + display: inline-block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +``` + +This will output a comment icon before every element with the class "my-icon". The `content: '\f101';` part of this CSS is easily copied from the helper tool at http://genericons.com/, or `example.html` in the `font` directory. + +You can also use the bundled example.css if you'd rather insert the icons using HTML tags. + + +## Building your own Genericons + +In the `source` directory, you'll find all Genericons source icons in SVG format. This will allow you to bake your own flavor of Genericons using a tool such as FontCustom (http://fontcustom.com) or Fontello (http://fontello.com). Perhaps you need more logos than are available in the base Genericons package? Just add those logos and bake your own expanded set. Maybe you need just a few of the icons Genericons provides, but would like to trim the fat? Remove the ones you won't need! + + +### FontCustom instructions + +FontCustom is a powerful commandline tool which which bakes icon fonts from the SVG source files. It's the tool Genericons is built on, and it provides highly accurate and perfectly crisp icons, *provided all SVGs have the same pixel height*. + +It's not that hard to use, and once it's installed you'll never think of icon-fonts the same way again. Seriously, you should try it. Icon fonts for everyone! + +1. Install FontCustom. Follow the instructions on the website: http://fontcustom.com/ +2. In the `source` directory from the Genericons download, open the file called `fontcustom.yml` in a text editor. Customize the `font_name` and `css_selector`. +3. Open a terminal. Browse to the `source` directory. Type `fontcustom compile`. + +You'll now receive a brand new subdirectory called `fontcustom-webfont`. Inside here you'll find your very own flavor of Genericons, with only the icons you want, including a handy example page that'll help you copy/paste the necessary glyphs or CSS values. + +*Please note*: In the source directory, there's a hidden file called `.fontcustom-manifest.json`. This file is auto-generated by the FontCustom tool, and holds codepoints (unicode addresses) for every glyph, so its address doesn't change when you add or remove icons. If you feel the need to "start fresh" with the unicode addresses, you should delete this file. + + +### Fontello instructions + +Fontello is very easy to use. Just drop the SVG files of the icons you want onto their website and download the font. The downside is that Fontello seems to ignore the 16px pixelgrid, so you'll end up with fuzzy icons. Buyer beware. + + +## Notes + +**Photoshop mockups** + +The `Genericons.ttf` file can be placed in your system fonts folder and used Photoshop or other graphics apps if you like. + +If you're using Genericons in your Photoshop mockups, please remember to delete the old version of the font from Font Book, and grab the new one from the zip file. This also affects using it in your webdesigns: if you have an old version of the font installed locally, that's the font that'll be used in your website as well, so if you're missing icons, check for old versions of the font on your system. + +**Pixel grid** + +Genericons has been designed for a 16x16px grid. That means it'll look sharp at font-size: 16px exactly. It'll also be crisp at multiples thereof, such as 32px or 64px. It'll look reasonably crisp at in-between font sizes such as 24px or 48px, but not quite as crisp as 16 or 32. Please don't set the font-size to 17px, though, that'll just look terrible blurry. + +**Antialiasing** + +If you keep intact the `-webkit-font-smoothing: antialiased;` and `-moz-osx-font-smoothing: grayscale;` CSS properties. That'll make the icons look their best possible, in Firefox and WebKit based browsers. + +**optimizeLegibility** + +Note: On Android browsers with version 4.2, 4.3, and probably later, Genericons will simply not show up if you're using the CSS property "text-rendering" set to "optimizeLegibility. + +**Updates** + +We don't often update icons, but do very carefully when we get good feedback suggesting improvements. Please be mindful if you upgrade, and check that the updated icons behave as you intended. + +**Base64 encoding** + +By default, Genericons ships with a stylesheet that includes a base64 encoded version of the font. This is to sidestep issues with cross-origin requests for fonts, that happen when a stylesheet loads a font that's stored on a different domain or subdomain. This is very common when using caching plugins. + +Base64 encoding comes with a 25% filesize overhead compared to just loading the WOFF file directly. If you know that you won't be loading fonts across domains, or have the ability to edit your server config files to allow it, you can get slightly faster performance by loading Genericons without the base64 encoding. Simply edit `genericons.css` and edit the `@font-face` declaration to match this: + +``` +@font-face { + font-family: 'Genericons'; + src: url('Genericons.woff') format('woff'), + url('Genericons.ttf') format('truetype'), + url('Genericons.svg#genericonsregular') format('svg'); + font-weight: normal; + font-style: normal; +} +``` + + + +## Changelog + +**3.4.1** + +* IE8 support restored. + +**3.4** + +* Updated: Update Google Plus icon to new geometric version. This also *retires* the "alt" version, so *please be mindful if you choose to update, make sure you use the `f206` glyph, not the `f218` glyph, as it no longer exists! +* New: Added helper rotation classes to the base CSS, thanks to geminorum. Apply `genericon-rotate-90` to rotate 90 degrees, -180, -270. Or `genericon-flip-horizontal` or -vertical. + +*Again, it is important if you choose to update to this version, make sure you're not using `genericon-googleplus-alt` or unicode character `f218`, as that has been retired! Use `genericon-googleplus` and glyph `f206` instead!* + +**3.3.1** + +Security Hardening: Remove Genericons example.html file. Please visit genericons.com instead. + +**3.3** + +The Open Source release. + +You can now build your own flavors of Genericons with all the SVGs provided. + + +**3.2** + +A number of new icons and a couple of quick updates. + +* New: Activity +* New: HTML anchor +* New: Bug +* New: Download +* New: Handset +* New: Microphone +* New: Minus +* New: Plus +* New: Move +* New: Rating stars, empty, half, full +* New: Shuffle +* New: video camera +* New: Spotify +* New: Twitch +* Update: Fixed geometry in Edit icon +* Update: Updated Foursquare icon +* IE8 bugfix, slipstreamed into this. + +Twitch and Spotify mark the last social icons that will be added to Genericons. +Future social icons will have to happen in a separate font. + +**3.1** + +Genericons is now generated using a commandline tool called FontCustom. This makes it far easier to add new icons to the font, but the switch means the download zip now has a different layout, fonts have different filenames, there's now no .otf font included (but the .ttf should suffice), and the font now has slightly different metrics. I've taken great care to ensure this new version should work as a drop-in replacement, but please be mindful and test carefully if you choose to upgrade. + +* Per feedback, the baked-in 16px width and height has been removed from the helper CSS. It wasn't really necessary (the glyph itself has these dimensions naturally), and it caused some headaches. +* Base64 encoding is now included by default in the helper CSS. This makes it drop-in easy to get Genericons working in Firefox even when using a CDN. +* Title attribute on website tool. +* New: Website. +* New: Ellipsis. +* New: Foursquare. +* New: X-post. +* New: Sitemap. +* New: Hierarchy. +* New: Paintbrush. +* Updated: Show and Hide icons were updated for clarity. + +**3.0.3** + +Bunch of updates mostly. + +* Two new icons, Dropbox and Fullscreen. +* Updates to all icons containing an exclamation mark. +* Updates to Image and Quote. +* Nicer "Share" icon. +* Bigger default Linkedin icon. + +**3.0.2** + +A slew of new stuff and updates. + +* Social icons: Skype, Digg, Reddit, Stumbleupon, Pocket. +* New generic icons: heart, lock and print. +* New editing icons: code, bold, italic, image +* New interaction icons: subscribe, unsubscribe, subscribed, reply all, reply, flag. +* The hyperlink icon has been updated to be clearer, chunkier. +* The "home" icon has been updated for style, size and clarity. +* The email icon has been updated for style and clarity, and to fit with the new subscribe icons. +* The document icon has been updated for style. +* The "pin" icon has been updated for style and clarity. +* The Twitter icon has been scaled down to fit with the other social icons. + +**3.0.1** + +Mostly maintenance. + +* Fixed an issue with the example page that showed an old "top" icon instead of the actual NEW "refresh" icon. +* Added inverse Google+ and Path. +* Replaced tabs with spaces in the helper CSS. +* Changed the Genericons.com copy/paste tool to serve span's instead of div's for casual icon insertion. It's being converted to "inline-block" anyway. + +**3.0** + +Mainly maintenance and a few new icons. + +* Fast forward, rewind, PollDaddy, Notice, Info, Help, Portfolio +* Updated the feed icon. It's a bit smaller now for consistency, the previous one was rather big. +* So, the previous version numbering, 2.09, wasn't very PHP version compare friendly. So from now on it'll be 3.0, 3.1 etc. Props Ipstenu. +* Genericons.com now has a mini release blog. +* The CSS has prettier formatting, props Konstantin Obenland. + +**2.09** + +Updated Facebook icon to new version. Updated Instagram logo to use new one-color version. Updated Google+ icon to use same radius as Instagram and Facebook. Added a bunch of new icons, cog, unapprove, cart, media player buttons, tablet, send to tablet. + +**2.06** + +Included Base64 encoded version. This is necessary for Genericons to work with CDNs in Firefox. Firefox blocks fonts linked from a different domain. A CDN (typically s.example.com) usually puts the font on a subdomain, and is hence blocked in Firefox. + +**2.05** + +Added a bunch of new icons, including upload to cloud, download to cloud, many more. + +**2.0** + +Initial public release diff --git a/plugins/jetpack/_inc/genericons/genericons.css b/plugins/jetpack/_inc/genericons/genericons.css new file mode 100644 index 0000000..fe2feba --- /dev/null +++ b/plugins/jetpack/_inc/genericons/genericons.css @@ -0,0 +1,11 @@ +@import url('genericons/genericons.css'); + +/* + + + This file location is deprecated + + Please link to the genericons.css file in the font folder instead + + +*/ \ No newline at end of file diff --git a/plugins/jetpack/_inc/genericons/genericons/Genericons.eot b/plugins/jetpack/_inc/genericons/genericons/Genericons.eot new file mode 100644 index 0000000000000000000000000000000000000000..7322565a01d25b8e3e8a69319593e5d3ccd59689 GIT binary patch literal 22374 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�?tPM9#*mhy-i22XlwWDitjkb7zKQL&(lu66l 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 Phwpv<4P3tWU# + + + + +Created by FontForge 20150618 at Fri Sep 18 10:24:13 2015 + By Joen Asmussen +Copyright (c) 2015, Joen Asmussen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/jetpack/_inc/genericons/genericons/Genericons.ttf b/plugins/jetpack/_inc/genericons/genericons/Genericons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..017443851965255c626a5ad3537d3ed0b7c00f6a GIT binary patch literal 22188 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 Gt^Ws)-B^wQ literal 0 HcmV?d00001 diff --git a/plugins/jetpack/_inc/genericons/genericons/Genericons.woff b/plugins/jetpack/_inc/genericons/genericons/Genericons.woff new file mode 100644 index 0000000000000000000000000000000000000000..0e7212af75273146e900bb3f0dbe2c83b0913e23 GIT binary patch literal 13988 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 literal 0 HcmV?d00001 diff --git a/plugins/jetpack/_inc/genericons/genericons/genericons.css b/plugins/jetpack/_inc/genericons/genericons/genericons.css new file mode 100644 index 0000000..87cf754 --- /dev/null +++ b/plugins/jetpack/_inc/genericons/genericons/genericons.css @@ -0,0 +1,263 @@ +/** + + Genericons + +*/ + + +/* IE8 and below use EOT and allow cross-site embedding. + IE9 uses WOFF which is base64 encoded to allow cross-site embedding. + So unfortunately, IE9 will throw a console error, but it'll still work. + When the font is base64 encoded, cross-site embedding works in Firefox */ +@font-face { + font-family: "Genericons"; + src: url("./Genericons.eot"); + src: url("./Genericons.eot?") format("embedded-opentype"); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: "Genericons"; + src: url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff"), + url("./Genericons.ttf") format("truetype"), + url("./Genericons.svg#Genericons") format("svg"); + font-weight: normal; + font-style: normal; +} + +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: "Genericons"; + src: url("./Genericons.svg#Genericons") format("svg"); + } +} + + +/** + * All Genericons + */ + +.genericon { + font-size: 16px; + vertical-align: top; + text-align: center; + -moz-transition: color .1s ease-in 0; + -webkit-transition: color .1s ease-in 0; + display: inline-block; + font-family: "Genericons"; + font-style: normal; + font-weight: normal; + font-variant: normal; + line-height: 1; + text-decoration: inherit; + text-transform: none; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + speak: none; +} + + +/** + * Helper classes + */ + +.genericon-rotate-90 { + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); +} + +.genericon-rotate-180 { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); +} + +.genericon-rotate-270 { + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); +} + +.genericon-flip-horizontal { + -webkit-transform: scale(-1, 1); + -moz-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); +} + +.genericon-flip-vertical { + -webkit-transform: scale(1, -1); + -moz-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); +} + + +/** + * Individual icons + */ + +.genericon-404:before { content: "\f423"; } +.genericon-activity:before { content: "\f508"; } +.genericon-anchor:before { content: "\f509"; } +.genericon-aside:before { content: "\f101"; } +.genericon-attachment:before { content: "\f416"; } +.genericon-audio:before { content: "\f109"; } +.genericon-bold:before { content: "\f471"; } +.genericon-book:before { content: "\f444"; } +.genericon-bug:before { content: "\f50a"; } +.genericon-cart:before { content: "\f447"; } +.genericon-category:before { content: "\f301"; } +.genericon-chat:before { content: "\f108"; } +.genericon-checkmark:before { content: "\f418"; } +.genericon-close:before { content: "\f405"; } +.genericon-close-alt:before { content: "\f406"; } +.genericon-cloud:before { content: "\f426"; } +.genericon-cloud-download:before { content: "\f440"; } +.genericon-cloud-upload:before { content: "\f441"; } +.genericon-code:before { content: "\f462"; } +.genericon-codepen:before { content: "\f216"; } +.genericon-cog:before { content: "\f445"; } +.genericon-collapse:before { content: "\f432"; } +.genericon-comment:before { content: "\f300"; } +.genericon-day:before { content: "\f305"; } +.genericon-digg:before { content: "\f221"; } +.genericon-document:before { content: "\f443"; } +.genericon-dot:before { content: "\f428"; } +.genericon-downarrow:before { content: "\f502"; } +.genericon-download:before { content: "\f50b"; } +.genericon-draggable:before { content: "\f436"; } +.genericon-dribbble:before { content: "\f201"; } +.genericon-dropbox:before { content: "\f225"; } +.genericon-dropdown:before { content: "\f433"; } +.genericon-dropdown-left:before { content: "\f434"; } +.genericon-edit:before { content: "\f411"; } +.genericon-ellipsis:before { content: "\f476"; } +.genericon-expand:before { content: "\f431"; } +.genericon-external:before { content: "\f442"; } +.genericon-facebook:before { content: "\f203"; } +.genericon-facebook-alt:before { content: "\f204"; } +.genericon-fastforward:before { content: "\f458"; } +.genericon-feed:before { content: "\f413"; } +.genericon-flag:before { content: "\f468"; } +.genericon-flickr:before { content: "\f211"; } +.genericon-foursquare:before { content: "\f226"; } +.genericon-fullscreen:before { content: "\f474"; } +.genericon-gallery:before { content: "\f103"; } +.genericon-github:before { content: "\f200"; } +.genericon-googleplus:before { content: "\f206"; } +.genericon-googleplus-alt:before { content: "\f218"; } +.genericon-handset:before { content: "\f50c"; } +.genericon-heart:before { content: "\f461"; } +.genericon-help:before { content: "\f457"; } +.genericon-hide:before { content: "\f404"; } +.genericon-hierarchy:before { content: "\f505"; } +.genericon-home:before { content: "\f409"; } +.genericon-image:before { content: "\f102"; } +.genericon-info:before { content: "\f455"; } +.genericon-instagram:before { content: "\f215"; } +.genericon-italic:before { content: "\f472"; } +.genericon-key:before { content: "\f427"; } +.genericon-leftarrow:before { content: "\f503"; } +.genericon-link:before { content: "\f107"; } +.genericon-linkedin:before { content: "\f207"; } +.genericon-linkedin-alt:before { content: "\f208"; } +.genericon-location:before { content: "\f417"; } +.genericon-lock:before { content: "\f470"; } +.genericon-mail:before { content: "\f410"; } +.genericon-maximize:before { content: "\f422"; } +.genericon-menu:before { content: "\f419"; } +.genericon-microphone:before { content: "\f50d"; } +.genericon-minimize:before { content: "\f421"; } +.genericon-minus:before { content: "\f50e"; } +.genericon-month:before { content: "\f307"; } +.genericon-move:before { content: "\f50f"; } +.genericon-next:before { content: "\f429"; } +.genericon-notice:before { content: "\f456"; } +.genericon-paintbrush:before { content: "\f506"; } +.genericon-path:before { content: "\f219"; } +.genericon-pause:before { content: "\f448"; } +.genericon-phone:before { content: "\f437"; } +.genericon-picture:before { content: "\f473"; } +.genericon-pinned:before { content: "\f308"; } +.genericon-pinterest:before { content: "\f209"; } +.genericon-pinterest-alt:before { content: "\f210"; } +.genericon-play:before { content: "\f452"; } +.genericon-plugin:before { content: "\f439"; } +.genericon-plus:before { content: "\f510"; } +.genericon-pocket:before { content: "\f224"; } +.genericon-polldaddy:before { content: "\f217"; } +.genericon-portfolio:before { content: "\f460"; } +.genericon-previous:before { content: "\f430"; } +.genericon-print:before { content: "\f469"; } +.genericon-quote:before { content: "\f106"; } +.genericon-rating-empty:before { content: "\f511"; } +.genericon-rating-full:before { content: "\f512"; } +.genericon-rating-half:before { content: "\f513"; } +.genericon-reddit:before { content: "\f222"; } +.genericon-refresh:before { content: "\f420"; } +.genericon-reply:before { content: "\f412"; } +.genericon-reply-alt:before { content: "\f466"; } +.genericon-reply-single:before { content: "\f467"; } +.genericon-rewind:before { content: "\f459"; } +.genericon-rightarrow:before { content: "\f501"; } +.genericon-search:before { content: "\f400"; } +.genericon-send-to-phone:before { content: "\f438"; } +.genericon-send-to-tablet:before { content: "\f454"; } +.genericon-share:before { content: "\f415"; } +.genericon-show:before { content: "\f403"; } +.genericon-shuffle:before { content: "\f514"; } +.genericon-sitemap:before { content: "\f507"; } +.genericon-skip-ahead:before { content: "\f451"; } +.genericon-skip-back:before { content: "\f450"; } +.genericon-skype:before { content: "\f220"; } +.genericon-spam:before { content: "\f424"; } +.genericon-spotify:before { content: "\f515"; } +.genericon-standard:before { content: "\f100"; } +.genericon-star:before { content: "\f408"; } +.genericon-status:before { content: "\f105"; } +.genericon-stop:before { content: "\f449"; } +.genericon-stumbleupon:before { content: "\f223"; } +.genericon-subscribe:before { content: "\f463"; } +.genericon-subscribed:before { content: "\f465"; } +.genericon-summary:before { content: "\f425"; } +.genericon-tablet:before { content: "\f453"; } +.genericon-tag:before { content: "\f302"; } +.genericon-time:before { content: "\f303"; } +.genericon-top:before { content: "\f435"; } +.genericon-trash:before { content: "\f407"; } +.genericon-tumblr:before { content: "\f214"; } +.genericon-twitch:before { content: "\f516"; } +.genericon-twitter:before { content: "\f202"; } +.genericon-unapprove:before { content: "\f446"; } +.genericon-unsubscribe:before { content: "\f464"; } +.genericon-unzoom:before { content: "\f401"; } +.genericon-uparrow:before { content: "\f500"; } +.genericon-user:before { content: "\f304"; } +.genericon-video:before { content: "\f104"; } +.genericon-videocamera:before { content: "\f517"; } +.genericon-vimeo:before { content: "\f212"; } +.genericon-warning:before { content: "\f414"; } +.genericon-website:before { content: "\f475"; } +.genericon-week:before { content: "\f306"; } +.genericon-wordpress:before { content: "\f205"; } +.genericon-xpost:before { content: "\f504"; } +.genericon-youtube:before { content: "\f213"; } +.genericon-zoom:before { content: "\f402"; } + + + + diff --git a/plugins/jetpack/_inc/genericons/genericons/rtl/genericons-rtl.css b/plugins/jetpack/_inc/genericons/genericons/rtl/genericons-rtl.css new file mode 100644 index 0000000..fbf8fac --- /dev/null +++ b/plugins/jetpack/_inc/genericons/genericons/rtl/genericons-rtl.css @@ -0,0 +1,265 @@ +/* This file was automatically generated on Sep 30 2015 12:24:15 */ + +/** + + Genericons + +*/ + + +/* IE8 and below use EOT and allow cross-site embedding. + IE9 uses WOFF which is base64 encoded to allow cross-site embedding. + So unfortunately, IE9 will throw a console error, but it'll still work. + When the font is base64 encoded, cross-site embedding works in Firefox */ +@font-face { + font-family: "Genericons"; + src: url(".././Genericons.eot"); + src: url(".././Genericons.eot?") format("embedded-opentype"); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: "Genericons"; + src: url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff"), + url(".././Genericons.ttf") format("truetype"), + url(".././Genericons.svg#Genericons") format("svg"); + font-weight: normal; + font-style: normal; +} + +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: "Genericons"; + src: url(".././Genericons.svg#Genericons") format("svg"); + } +} + + +/** + * All Genericons + */ + +.genericon { + font-size: 16px; + vertical-align: top; + text-align: center; + -moz-transition: color .1s ease-in 0; + -webkit-transition: color .1s ease-in 0; + display: inline-block; + font-family: "Genericons"; + font-style: normal; + font-weight: normal; + font-variant: normal; + line-height: 1; + text-decoration: inherit; + text-transform: none; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + speak: none; +} + + +/** + * Helper classes + */ + +.genericon-rotate-90 { + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); +} + +.genericon-rotate-180 { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); +} + +.genericon-rotate-270 { + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); +} + +.genericon-flip-horizontal { + -webkit-transform: scale(-1, 1); + -moz-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); +} + +.genericon-flip-vertical { + -webkit-transform: scale(1, -1); + -moz-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); +} + + +/** + * Individual icons + */ + +.genericon-404:before { content: "\f423"; } +.genericon-activity:before { content: "\f508"; } +.genericon-anchor:before { content: "\f509"; } +.genericon-aside:before { content: "\f101"; } +.genericon-attachment:before { content: "\f416"; } +.genericon-audio:before { content: "\f109"; } +.genericon-bold:before { content: "\f471"; } +.genericon-book:before { content: "\f444"; } +.genericon-bug:before { content: "\f50a"; } +.genericon-cart:before { content: "\f447"; } +.genericon-category:before { content: "\f301"; } +.genericon-chat:before { content: "\f108"; } +.genericon-checkmark:before { content: "\f418"; } +.genericon-close:before { content: "\f405"; } +.genericon-close-alt:before { content: "\f406"; } +.genericon-cloud:before { content: "\f426"; } +.genericon-cloud-download:before { content: "\f440"; } +.genericon-cloud-upload:before { content: "\f441"; } +.genericon-code:before { content: "\f462"; } +.genericon-codepen:before { content: "\f216"; } +.genericon-cog:before { content: "\f445"; } +.genericon-collapse:before { content: "\f432"; } +.genericon-comment:before { content: "\f300"; } +.genericon-day:before { content: "\f305"; } +.genericon-digg:before { content: "\f221"; } +.genericon-document:before { content: "\f443"; } +.genericon-dot:before { content: "\f428"; } +.genericon-downarrow:before { content: "\f502"; } +.genericon-download:before { content: "\f50b"; } +.genericon-draggable:before { content: "\f436"; } +.genericon-dribbble:before { content: "\f201"; } +.genericon-dropbox:before { content: "\f225"; } +.genericon-dropdown:before { content: "\f433"; } +.genericon-dropdown-left:before { content: "\f434"; } +.genericon-edit:before { content: "\f411"; } +.genericon-ellipsis:before { content: "\f476"; } +.genericon-expand:before { content: "\f431"; } +.genericon-external:before { content: "\f442"; } +.genericon-facebook:before { content: "\f203"; } +.genericon-facebook-alt:before { content: "\f204"; } +.genericon-fastforward:before { content: "\f458"; } +.genericon-feed:before { content: "\f413"; } +.genericon-flag:before { content: "\f468"; } +.genericon-flickr:before { content: "\f211"; } +.genericon-foursquare:before { content: "\f226"; } +.genericon-fullscreen:before { content: "\f474"; } +.genericon-gallery:before { content: "\f103"; } +.genericon-github:before { content: "\f200"; } +.genericon-googleplus:before { content: "\f206"; } +.genericon-googleplus-alt:before { content: "\f218"; } +.genericon-handset:before { content: "\f50c"; } +.genericon-heart:before { content: "\f461"; } +.genericon-help:before { content: "\f457"; } +.genericon-hide:before { content: "\f404"; } +.genericon-hierarchy:before { content: "\f505"; } +.genericon-home:before { content: "\f409"; } +.genericon-image:before { content: "\f102"; } +.genericon-info:before { content: "\f455"; } +.genericon-instagram:before { content: "\f215"; } +.genericon-italic:before { content: "\f472"; } +.genericon-key:before { content: "\f427"; } +.genericon-leftarrow:before { content: "\f503"; } +.genericon-link:before { content: "\f107"; } +.genericon-linkedin:before { content: "\f207"; } +.genericon-linkedin-alt:before { content: "\f208"; } +.genericon-location:before { content: "\f417"; } +.genericon-lock:before { content: "\f470"; } +.genericon-mail:before { content: "\f410"; } +.genericon-maximize:before { content: "\f422"; } +.genericon-menu:before { content: "\f419"; } +.genericon-microphone:before { content: "\f50d"; } +.genericon-minimize:before { content: "\f421"; } +.genericon-minus:before { content: "\f50e"; } +.genericon-month:before { content: "\f307"; } +.genericon-move:before { content: "\f50f"; } +.genericon-next:before { content: "\f429"; } +.genericon-notice:before { content: "\f456"; } +.genericon-paintbrush:before { content: "\f506"; } +.genericon-path:before { content: "\f219"; } +.genericon-pause:before { content: "\f448"; } +.genericon-phone:before { content: "\f437"; } +.genericon-picture:before { content: "\f473"; } +.genericon-pinned:before { content: "\f308"; } +.genericon-pinterest:before { content: "\f209"; } +.genericon-pinterest-alt:before { content: "\f210"; } +.genericon-play:before { content: "\f452"; } +.genericon-plugin:before { content: "\f439"; } +.genericon-plus:before { content: "\f510"; } +.genericon-pocket:before { content: "\f224"; } +.genericon-polldaddy:before { content: "\f217"; } +.genericon-portfolio:before { content: "\f460"; } +.genericon-previous:before { content: "\f430"; } +.genericon-print:before { content: "\f469"; } +.genericon-quote:before { content: "\f106"; } +.genericon-rating-empty:before { content: "\f511"; } +.genericon-rating-full:before { content: "\f512"; } +.genericon-rating-half:before { content: "\f513"; } +.genericon-reddit:before { content: "\f222"; } +.genericon-refresh:before { content: "\f420"; } +.genericon-reply:before { content: "\f412"; } +.genericon-reply-alt:before { content: "\f466"; } +.genericon-reply-single:before { content: "\f467"; } +.genericon-rewind:before { content: "\f459"; } +.genericon-rightarrow:before { content: "\f501"; } +.genericon-search:before { content: "\f400"; } +.genericon-send-to-phone:before { content: "\f438"; } +.genericon-send-to-tablet:before { content: "\f454"; } +.genericon-share:before { content: "\f415"; } +.genericon-show:before { content: "\f403"; } +.genericon-shuffle:before { content: "\f514"; } +.genericon-sitemap:before { content: "\f507"; } +.genericon-skip-ahead:before { content: "\f451"; } +.genericon-skip-back:before { content: "\f450"; } +.genericon-skype:before { content: "\f220"; } +.genericon-spam:before { content: "\f424"; } +.genericon-spotify:before { content: "\f515"; } +.genericon-standard:before { content: "\f100"; } +.genericon-star:before { content: "\f408"; } +.genericon-status:before { content: "\f105"; } +.genericon-stop:before { content: "\f449"; } +.genericon-stumbleupon:before { content: "\f223"; } +.genericon-subscribe:before { content: "\f463"; } +.genericon-subscribed:before { content: "\f465"; } +.genericon-summary:before { content: "\f425"; } +.genericon-tablet:before { content: "\f453"; } +.genericon-tag:before { content: "\f302"; } +.genericon-time:before { content: "\f303"; } +.genericon-top:before { content: "\f435"; } +.genericon-trash:before { content: "\f407"; } +.genericon-tumblr:before { content: "\f214"; } +.genericon-twitch:before { content: "\f516"; } +.genericon-twitter:before { content: "\f202"; } +.genericon-unapprove:before { content: "\f446"; } +.genericon-unsubscribe:before { content: "\f464"; } +.genericon-unzoom:before { content: "\f401"; } +.genericon-uparrow:before { content: "\f500"; } +.genericon-user:before { content: "\f304"; } +.genericon-video:before { content: "\f104"; } +.genericon-videocamera:before { content: "\f517"; } +.genericon-vimeo:before { content: "\f212"; } +.genericon-warning:before { content: "\f414"; } +.genericon-website:before { content: "\f475"; } +.genericon-week:before { content: "\f306"; } +.genericon-wordpress:before { content: "\f205"; } +.genericon-xpost:before { content: "\f504"; } +.genericon-youtube:before { content: "\f213"; } +.genericon-zoom:before { content: "\f402"; } + + + + diff --git a/plugins/jetpack/_inc/header.php b/plugins/jetpack/_inc/header.php new file mode 100644 index 0000000..0bfe8d9 --- /dev/null +++ b/plugins/jetpack/_inc/header.php @@ -0,0 +1,27 @@ + +