aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.gitignore23
-rw-r--r--app/.htaccess7
-rw-r--r--app/AppCache.php9
-rw-r--r--app/AppKernel.php38
-rw-r--r--app/Resources/views/_global/public/css/jquery-ui-1.10.4.custom.css560
-rw-r--r--app/Resources/views/_global/public/css/jquery-ui-1.10.4.custom.min.css7
-rwxr-xr-xapp/Resources/views/_global/public/img/appicon/apple-touch-icon-114.pngbin0 -> 2281 bytes
-rwxr-xr-xapp/Resources/views/_global/public/img/appicon/apple-touch-icon-120.pngbin0 -> 2318 bytes
-rwxr-xr-xapp/Resources/views/_global/public/img/appicon/apple-touch-icon-144.pngbin0 -> 2718 bytes
-rwxr-xr-xapp/Resources/views/_global/public/img/appicon/apple-touch-icon-152.pngbin0 -> 2835 bytes
-rwxr-xr-xapp/Resources/views/_global/public/img/appicon/apple-touch-icon-57.pngbin0 -> 1582 bytes
-rwxr-xr-xapp/Resources/views/_global/public/img/appicon/apple-touch-icon-72.pngbin0 -> 1709 bytes
-rwxr-xr-xapp/Resources/views/_global/public/img/appicon/apple-touch-icon-76.pngbin0 -> 1838 bytes
-rwxr-xr-xapp/Resources/views/_global/public/img/appicon/apple-touch-icon.pngbin0 -> 1579 bytes
-rwxr-xr-xapp/Resources/views/_global/public/img/appicon/favicon.icobin0 -> 34494 bytes
-rw-r--r--app/Resources/views/_global/public/img/icons/carrot-icon--black.pngbin0 -> 1538 bytes
-rw-r--r--app/Resources/views/_global/public/img/icons/carrot-icon--white.pngbin0 -> 1605 bytes
-rw-r--r--app/Resources/views/_global/public/img/icons/diaspora-icon--black.pngbin0 -> 1555 bytes
-rw-r--r--app/Resources/views/_global/public/img/icons/diaspora-icon--white.pngbin0 -> 612 bytes
-rw-r--r--app/Resources/views/_global/public/js/autoClose.js6
-rwxr-xr-xapp/Resources/views/_global/public/js/autoCompleteTags.js47
-rw-r--r--app/Resources/views/_global/public/js/jquery-2.0.3.min.js1
-rw-r--r--app/Resources/views/_global/public/js/jquery-ui-1.10.4.custom.js2519
-rw-r--r--app/Resources/views/_global/public/js/jquery-ui-1.10.4.custom.min.js6
-rw-r--r--app/Resources/views/_global/public/js/popupForm.js72
-rw-r--r--app/Resources/views/_global/public/js/restoreScroll.js25
-rwxr-xr-xapp/Resources/views/_global/public/js/saveLink.js109
-rwxr-xr-xapp/Resources/views/baggy/README.md3
-rwxr-xr-xapp/Resources/views/baggy/_display-mode.twig5
-rwxr-xr-xapp/Resources/views/baggy/_head.twig39
-rw-r--r--app/Resources/views/baggy/_menu.twig17
-rwxr-xr-xapp/Resources/views/baggy/_pocheit-form.twig10
-rw-r--r--app/Resources/views/baggy/_search-form.twig9
-rwxr-xr-xapp/Resources/views/baggy/_top.twig7
-rwxr-xr-xapp/Resources/views/baggy/about.twig84
-rwxr-xr-xapp/Resources/views/baggy/config.twig187
-rwxr-xr-xapp/Resources/views/baggy/edit-tags.twig29
-rwxr-xr-xapp/Resources/views/baggy/home.twig81
-rw-r--r--app/Resources/views/baggy/layout-login.twig31
-rwxr-xr-xapp/Resources/views/baggy/layout.twig34
-rw-r--r--app/Resources/views/baggy/login.twig34
-rwxr-xr-xapp/Resources/views/baggy/public/css/font.css6
-rwxr-xr-xapp/Resources/views/baggy/public/css/main.css1071
-rwxr-xr-xapp/Resources/views/baggy/public/css/messages.css19
-rwxr-xr-xapp/Resources/views/baggy/public/css/print.css62
-rw-r--r--app/Resources/views/baggy/public/css/ratatouille.css211
-rw-r--r--app/Resources/views/baggy/public/fonts/icomoon.eotbin0 -> 3896 bytes
-rw-r--r--app/Resources/views/baggy/public/fonts/icomoon.svg41
-rw-r--r--app/Resources/views/baggy/public/fonts/icomoon.ttfbin0 -> 3732 bytes
-rw-r--r--app/Resources/views/baggy/public/fonts/icomoon.woffbin0 -> 3664 bytes
-rw-r--r--app/Resources/views/baggy/public/fonts/ptsans.woffbin0 -> 24816 bytes
-rwxr-xr-xapp/Resources/views/baggy/public/img/baggy/blank.pngbin0 -> 141 bytes
-rw-r--r--app/Resources/views/baggy/public/img/baggy/down.pngbin0 -> 216 bytes
-rwxr-xr-xapp/Resources/views/baggy/public/img/baggy/list.pngbin0 -> 201 bytes
-rwxr-xr-xapp/Resources/views/baggy/public/img/baggy/table.pngbin0 -> 229 bytes
-rw-r--r--app/Resources/views/baggy/public/img/baggy/top.pngbin0 -> 212 bytes
-rw-r--r--app/Resources/views/baggy/public/img/bg-select.pngbin0 -> 1095 bytes
-rwxr-xr-xapp/Resources/views/baggy/public/img/logo-other_themes.pngbin0 -> 3922 bytes
-rwxr-xr-xapp/Resources/views/baggy/public/img/logo-w.pngbin0 -> 4916 bytes
-rw-r--r--app/Resources/views/baggy/public/img/logo-wallabag.svg300
-rwxr-xr-xapp/Resources/views/baggy/public/img/logo.pngbin0 -> 1350 bytes
-rw-r--r--app/Resources/views/baggy/public/img/logo.svg8
-rw-r--r--app/Resources/views/baggy/public/js/closeMessage.js17
-rwxr-xr-xapp/Resources/views/baggy/public/js/init.js51
-rwxr-xr-xapp/Resources/views/baggy/public/js/jquery.cookie.js117
-rw-r--r--app/Resources/views/baggy/public/js/restoreScroll.js25
-rwxr-xr-xapp/Resources/views/baggy/screenshot.jpgbin0 -> 256315 bytes
-rwxr-xr-xapp/Resources/views/baggy/tags.twig13
-rw-r--r--app/Resources/views/baggy/theme.ini3
-rwxr-xr-xapp/Resources/views/baggy/view.twig102
-rw-r--r--app/Resources/views/base.html.twig13
-rw-r--r--app/Resources/views/dark/README.md3
-rw-r--r--app/Resources/views/dark/public/css/style-dark.css74
-rw-r--r--app/Resources/views/dark/public/img/dark/backtotop.pngbin0 -> 250 bytes
-rw-r--r--app/Resources/views/dark/public/img/dark/bad-display.pngbin0 -> 403 bytes
-rw-r--r--app/Resources/views/dark/public/img/dark/checkmark-off.pngbin0 -> 339 bytes
-rw-r--r--app/Resources/views/dark/public/img/dark/checkmark-on.pngbin0 -> 288 bytes
-rw-r--r--app/Resources/views/dark/public/img/dark/down.pngbin0 -> 269 bytes
-rw-r--r--app/Resources/views/dark/public/img/dark/envelop.pngbin0 -> 361 bytes
-rw-r--r--app/Resources/views/dark/public/img/dark/flattr.pngbin0 -> 331 bytes
-rw-r--r--app/Resources/views/dark/public/img/dark/left.pngbin0 -> 264 bytes
-rw-r--r--app/Resources/views/dark/public/img/dark/link.pngbin0 -> 404 bytes
-rw-r--r--app/Resources/views/dark/public/img/dark/remove.pngbin0 -> 300 bytes
-rw-r--r--app/Resources/views/dark/public/img/dark/rss.pngbin0 -> 288 bytes
-rw-r--r--app/Resources/views/dark/public/img/dark/shaarli.pngbin0 -> 841 bytes
-rw-r--r--app/Resources/views/dark/public/img/dark/star-off.pngbin0 -> 382 bytes
-rw-r--r--app/Resources/views/dark/public/img/dark/star-on.pngbin0 -> 327 bytes
-rw-r--r--app/Resources/views/dark/public/img/dark/top.pngbin0 -> 250 bytes
-rw-r--r--app/Resources/views/dark/public/img/dark/twitter.pngbin0 -> 375 bytes
l---------app/Resources/views/dark/public/public1
-rw-r--r--app/Resources/views/dark/screenshot.jpgbin0 -> 664859 bytes
-rw-r--r--app/Resources/views/dark/theme.ini2
-rw-r--r--app/Resources/views/default/_bookmarklet.twig3
-rw-r--r--app/Resources/views/default/_footer.twig4
-rwxr-xr-xapp/Resources/views/default/_head.twig36
-rwxr-xr-xapp/Resources/views/default/_highlight.twig4
-rwxr-xr-xapp/Resources/views/default/_import.twig15
-rw-r--r--app/Resources/views/default/_menu.twig14
-rw-r--r--app/Resources/views/default/_messages.twig1
-rwxr-xr-xapp/Resources/views/default/_pocheit-form.twig8
-rwxr-xr-xapp/Resources/views/default/_search-form.twig9
-rwxr-xr-xapp/Resources/views/default/_sorting.twig6
-rwxr-xr-xapp/Resources/views/default/_top.twig7
-rwxr-xr-xapp/Resources/views/default/about.twig74
-rwxr-xr-xapp/Resources/views/default/config.twig188
-rwxr-xr-xapp/Resources/views/default/edit-tags.twig35
-rw-r--r--app/Resources/views/default/error.twig14
-rw-r--r--app/Resources/views/default/export.twig1
-rwxr-xr-xapp/Resources/views/default/home.twig82
-rw-r--r--app/Resources/views/default/index.html.twig5
-rw-r--r--app/Resources/views/default/install.twig28
-rw-r--r--app/Resources/views/default/layout.twig31
-rw-r--r--app/Resources/views/default/login.twig34
-rw-r--r--app/Resources/views/default/public/css/images/animated-overlay.gifbin0 -> 1738 bytes
-rw-r--r--app/Resources/views/default/public/css/images/ui-bg_flat_0_aaaaaa_40x100.pngbin0 -> 212 bytes
-rw-r--r--app/Resources/views/default/public/css/images/ui-bg_flat_75_ffffff_40x100.pngbin0 -> 208 bytes
-rw-r--r--app/Resources/views/default/public/css/images/ui-bg_glass_55_fbf9ee_1x400.pngbin0 -> 335 bytes
-rw-r--r--app/Resources/views/default/public/css/images/ui-bg_glass_65_ffffff_1x400.pngbin0 -> 207 bytes
-rw-r--r--app/Resources/views/default/public/css/images/ui-bg_glass_75_dadada_1x400.pngbin0 -> 262 bytes
-rw-r--r--app/Resources/views/default/public/css/images/ui-bg_glass_75_e6e6e6_1x400.pngbin0 -> 262 bytes
-rw-r--r--app/Resources/views/default/public/css/images/ui-bg_glass_95_fef1ec_1x400.pngbin0 -> 332 bytes
-rw-r--r--app/Resources/views/default/public/css/images/ui-bg_highlight-soft_75_cccccc_1x100.pngbin0 -> 280 bytes
-rw-r--r--app/Resources/views/default/public/css/images/ui-icons_222222_256x240.pngbin0 -> 6922 bytes
-rw-r--r--app/Resources/views/default/public/css/images/ui-icons_2e83ff_256x240.pngbin0 -> 4549 bytes
-rw-r--r--app/Resources/views/default/public/css/images/ui-icons_454545_256x240.pngbin0 -> 6992 bytes
-rw-r--r--app/Resources/views/default/public/css/images/ui-icons_888888_256x240.pngbin0 -> 6999 bytes
-rw-r--r--app/Resources/views/default/public/css/images/ui-icons_cd0a0a_256x240.pngbin0 -> 4549 bytes
-rw-r--r--app/Resources/views/default/public/css/knacss.css1
-rw-r--r--app/Resources/views/default/public/css/messages.css75
-rw-r--r--app/Resources/views/default/public/css/print.css53
-rwxr-xr-xapp/Resources/views/default/public/css/style-default.css69
-rwxr-xr-xapp/Resources/views/default/public/css/style.css447
-rw-r--r--app/Resources/views/default/public/fonts/Roboto.woffbin0 -> 22172 bytes
-rw-r--r--app/Resources/views/default/public/highlightjs/highlight.pack.js1
-rw-r--r--app/Resources/views/default/public/highlightjs/styles/default.css152
-rw-r--r--app/Resources/views/default/public/highlightjs/styles/github.css127
-rw-r--r--app/Resources/views/default/public/highlightjs/styles/googlecode.css148
-rw-r--r--app/Resources/views/default/public/img/default/backtotop.pngbin0 -> 326 bytes
-rwxr-xr-xapp/Resources/views/default/public/img/default/bad-display.pngbin0 -> 343 bytes
-rw-r--r--app/Resources/views/default/public/img/default/checkmark-off.pngbin0 -> 277 bytes
-rw-r--r--app/Resources/views/default/public/img/default/checkmark-on.pngbin0 -> 235 bytes
-rw-r--r--app/Resources/views/default/public/img/default/down.pngbin0 -> 216 bytes
-rw-r--r--app/Resources/views/default/public/img/default/envelop.pngbin0 -> 285 bytes
-rwxr-xr-xapp/Resources/views/default/public/img/default/flattr.pngbin0 -> 270 bytes
-rw-r--r--app/Resources/views/default/public/img/default/left.pngbin0 -> 196 bytes
-rwxr-xr-xapp/Resources/views/default/public/img/default/link.pngbin0 -> 341 bytes
-rwxr-xr-xapp/Resources/views/default/public/img/default/print.pngbin0 -> 321 bytes
-rw-r--r--app/Resources/views/default/public/img/default/remove.pngbin0 -> 252 bytes
-rw-r--r--app/Resources/views/default/public/img/default/rss.pngbin0 -> 288 bytes
-rw-r--r--app/Resources/views/default/public/img/default/shaarli.pngbin0 -> 729 bytes
-rw-r--r--app/Resources/views/default/public/img/default/star-off.pngbin0 -> 314 bytes
-rw-r--r--app/Resources/views/default/public/img/default/star-on.pngbin0 -> 281 bytes
-rw-r--r--app/Resources/views/default/public/img/default/top.pngbin0 -> 212 bytes
-rw-r--r--app/Resources/views/default/public/img/default/twitter.pngbin0 -> 297 bytes
-rw-r--r--app/Resources/views/default/public/img/logo.svg8
-rw-r--r--app/Resources/views/default/public/img/messages/close.pngbin0 -> 662 bytes
-rw-r--r--app/Resources/views/default/public/img/messages/cross.pngbin0 -> 655 bytes
-rw-r--r--app/Resources/views/default/public/img/messages/help.pngbin0 -> 786 bytes
-rw-r--r--app/Resources/views/default/public/img/messages/tick.pngbin0 -> 537 bytes
-rw-r--r--app/Resources/views/default/public/img/messages/warning.pngbin0 -> 666 bytes
-rw-r--r--app/Resources/views/default/public/js/closeMessage.js17
-rwxr-xr-xapp/Resources/views/default/tags.twig18
-rw-r--r--app/Resources/views/default/theme.ini1
-rwxr-xr-xapp/Resources/views/default/view.twig124
-rw-r--r--app/Resources/views/dmagenta/README.md3
-rw-r--r--app/Resources/views/dmagenta/public/css/style-dmagenta.css78
-rwxr-xr-xapp/Resources/views/dmagenta/public/img/dmagenta/backtotop.pngbin0 -> 326 bytes
-rwxr-xr-xapp/Resources/views/dmagenta/public/img/dmagenta/bad-display.pngbin0 -> 343 bytes
-rw-r--r--app/Resources/views/dmagenta/public/img/dmagenta/checkmark-off.pngbin0 -> 277 bytes
-rw-r--r--app/Resources/views/dmagenta/public/img/dmagenta/checkmark-on.pngbin0 -> 235 bytes
-rw-r--r--app/Resources/views/dmagenta/public/img/dmagenta/down.pngbin0 -> 216 bytes
-rw-r--r--app/Resources/views/dmagenta/public/img/dmagenta/envelop.pngbin0 -> 285 bytes
-rwxr-xr-xapp/Resources/views/dmagenta/public/img/dmagenta/flattr.pngbin0 -> 270 bytes
-rw-r--r--app/Resources/views/dmagenta/public/img/dmagenta/left.pngbin0 -> 196 bytes
-rwxr-xr-xapp/Resources/views/dmagenta/public/img/dmagenta/link.pngbin0 -> 341 bytes
-rw-r--r--app/Resources/views/dmagenta/public/img/dmagenta/remove.pngbin0 -> 252 bytes
-rw-r--r--app/Resources/views/dmagenta/public/img/dmagenta/rss.pngbin0 -> 288 bytes
-rw-r--r--app/Resources/views/dmagenta/public/img/dmagenta/shaarli.pngbin0 -> 729 bytes
-rw-r--r--app/Resources/views/dmagenta/public/img/dmagenta/star-off.pngbin0 -> 314 bytes
-rw-r--r--app/Resources/views/dmagenta/public/img/dmagenta/star-on.pngbin0 -> 281 bytes
-rw-r--r--app/Resources/views/dmagenta/public/img/dmagenta/top.pngbin0 -> 212 bytes
-rw-r--r--app/Resources/views/dmagenta/public/img/dmagenta/twitter.pngbin0 -> 297 bytes
-rw-r--r--app/Resources/views/dmagenta/screenshot.jpgbin0 -> 731866 bytes
-rw-r--r--app/Resources/views/dmagenta/theme.ini2
-rw-r--r--app/Resources/views/solarized-dark/README.md6
-rw-r--r--app/Resources/views/solarized-dark/Solarized-LICENSE.txt19
-rw-r--r--app/Resources/views/solarized-dark/public/css/style-solarized-dark.css232
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/backtotop.pngbin0 -> 242 bytes
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/bad-display.pngbin0 -> 419 bytes
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/checkmark-off.pngbin0 -> 464 bytes
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/checkmark-on.pngbin0 -> 164 bytes
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/down.pngbin0 -> 186 bytes
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/envelop.pngbin0 -> 335 bytes
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/flattr.pngbin0 -> 314 bytes
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/left.pngbin0 -> 148 bytes
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/link.pngbin0 -> 424 bytes
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/remove.pngbin0 -> 329 bytes
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/rss.pngbin0 -> 288 bytes
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/shaarli.pngbin0 -> 729 bytes
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/star-off.pngbin0 -> 441 bytes
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/star-on.pngbin0 -> 327 bytes
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/top.pngbin0 -> 173 bytes
-rw-r--r--app/Resources/views/solarized-dark/public/img/solarized-dark/twitter.pngbin0 -> 388 bytes
-rw-r--r--app/Resources/views/solarized-dark/screenshot.jpgbin0 -> 230456 bytes
-rw-r--r--app/Resources/views/solarized-dark/theme.ini2
-rw-r--r--app/Resources/views/solarized/README.md6
-rw-r--r--app/Resources/views/solarized/Solarized-LICENSE.txt19
-rw-r--r--app/Resources/views/solarized/public/css/style-solarized.css232
-rw-r--r--app/Resources/views/solarized/public/img/solarized/backtotop.pngbin0 -> 249 bytes
-rw-r--r--app/Resources/views/solarized/public/img/solarized/bad-display.pngbin0 -> 434 bytes
-rw-r--r--app/Resources/views/solarized/public/img/solarized/checkmark-off.pngbin0 -> 475 bytes
-rw-r--r--app/Resources/views/solarized/public/img/solarized/checkmark-on.pngbin0 -> 163 bytes
-rw-r--r--app/Resources/views/solarized/public/img/solarized/down.pngbin0 -> 189 bytes
-rw-r--r--app/Resources/views/solarized/public/img/solarized/envelop.pngbin0 -> 340 bytes
-rw-r--r--app/Resources/views/solarized/public/img/solarized/flattr.pngbin0 -> 315 bytes
-rw-r--r--app/Resources/views/solarized/public/img/solarized/left.pngbin0 -> 139 bytes
-rw-r--r--app/Resources/views/solarized/public/img/solarized/link.pngbin0 -> 425 bytes
-rw-r--r--app/Resources/views/solarized/public/img/solarized/remove.pngbin0 -> 332 bytes
-rw-r--r--app/Resources/views/solarized/public/img/solarized/rss.pngbin0 -> 288 bytes
-rw-r--r--app/Resources/views/solarized/public/img/solarized/shaarli.pngbin0 -> 729 bytes
-rw-r--r--app/Resources/views/solarized/public/img/solarized/star-off.pngbin0 -> 455 bytes
-rw-r--r--app/Resources/views/solarized/public/img/solarized/star-on.pngbin0 -> 332 bytes
-rw-r--r--app/Resources/views/solarized/public/img/solarized/top.pngbin0 -> 172 bytes
-rw-r--r--app/Resources/views/solarized/public/img/solarized/twitter.pngbin0 -> 407 bytes
-rw-r--r--app/Resources/views/solarized/screenshot.jpgbin0 -> 245928 bytes
-rw-r--r--app/Resources/views/solarized/theme.ini2
-rw-r--r--app/autoload.php13
-rwxr-xr-xapp/config/config.inc.default.php4
-rw-r--r--app/config/config.inc.php78
-rw-r--r--app/config/config.yml73
-rw-r--r--app/config/config_dev.yml48
-rw-r--r--app/config/config_prod.yml25
-rw-r--r--app/config/config_test.yml16
-rwxr-xr-xapp/config/global.inc.php2
-rw-r--r--app/config/parameters.yml.dist20
-rw-r--r--app/config/routing.yml3
-rw-r--r--app/config/routing_dev.yml22
-rw-r--r--app/config/security.yml52
-rw-r--r--app/config/services.yml9
-rwxr-xr-xapp/console27
-rw-r--r--app/db/.gitignore0
-rw-r--r--app/logs/.gitkeep (renamed from app/cache/.gitignore)0
-rw-r--r--app/phpunit.xml.dist37
-rw-r--r--bin/compatibility.php427
-rwxr-xr-xbin/install12
-rw-r--r--bin/mysql.sql49
-rw-r--r--bin/postgres.sql41
-rwxr-xr-xbin/test4
-rwxr-xr-xbin/update4
-rw-r--r--composer.json45
-rw-r--r--composer.lock1775
-rw-r--r--src/Acme/DemoBundle/AcmeDemoBundle.php9
-rw-r--r--src/Acme/DemoBundle/Command/HelloWorldCommand.php48
-rw-r--r--src/Acme/DemoBundle/Controller/DemoController.php56
-rw-r--r--src/Acme/DemoBundle/Controller/SecuredController.php70
-rw-r--r--src/Acme/DemoBundle/Controller/WelcomeController.php19
-rw-r--r--src/Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php22
-rw-r--r--src/Acme/DemoBundle/EventListener/ControllerListener.php24
-rw-r--r--src/Acme/DemoBundle/Form/ContactType.php20
-rw-r--r--src/Acme/DemoBundle/Resources/config/routing.yml12
-rw-r--r--src/Acme/DemoBundle/Resources/config/services.xml18
-rw-r--r--src/Acme/DemoBundle/Resources/public/css/demo.css101
-rw-r--r--src/Acme/DemoBundle/Resources/public/images/blue-arrow.pngbin0 -> 181 bytes
-rw-r--r--src/Acme/DemoBundle/Resources/public/images/field-background.gifbin0 -> 63 bytes
-rw-r--r--src/Acme/DemoBundle/Resources/public/images/logo.gifbin0 -> 1698 bytes
-rw-r--r--src/Acme/DemoBundle/Resources/public/images/search.pngbin0 -> 737 bytes
-rw-r--r--src/Acme/DemoBundle/Resources/public/images/welcome-configure.gifbin0 -> 3530 bytes
-rw-r--r--src/Acme/DemoBundle/Resources/public/images/welcome-demo.gifbin0 -> 4053 bytes
-rw-r--r--src/Acme/DemoBundle/Resources/public/images/welcome-quick-tour.gifbin0 -> 4770 bytes
-rw-r--r--src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig15
-rw-r--r--src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig9
-rw-r--r--src/Acme/DemoBundle/Resources/views/Demo/index.html.twig14
-rw-r--r--src/Acme/DemoBundle/Resources/views/Secured/hello.html.twig11
-rw-r--r--src/Acme/DemoBundle/Resources/views/Secured/helloadmin.html.twig9
-rw-r--r--src/Acme/DemoBundle/Resources/views/Secured/layout.html.twig6
-rw-r--r--src/Acme/DemoBundle/Resources/views/Secured/login.html.twig35
-rw-r--r--src/Acme/DemoBundle/Resources/views/Welcome/index.html.twig83
-rw-r--r--src/Acme/DemoBundle/Resources/views/layout.html.twig37
-rw-r--r--src/Acme/DemoBundle/Tests/Controller/DemoControllerTest.php45
-rw-r--r--src/Acme/DemoBundle/Twig/Extension/DemoExtension.php81
-rw-r--r--src/AppBundle/AppBundle.php9
-rw-r--r--src/AppBundle/Controller/DefaultController.php17
-rw-r--r--src/AppBundle/Tests/Controller/DefaultControllerTest.php18
-rw-r--r--src/WallabagBundle/Controller/DefaultController.php17
-rw-r--r--src/WallabagBundle/Tests/Controller/DefaultControllerTest.php18
-rw-r--r--src/WallabagBundle/WallabagBundle.php9
-rw-r--r--web/app.php30
-rw-r--r--web/app_dev.php30
l---------web/bundles/acmedemo1
l---------web/bundles/framework1
l---------web/bundles/sensiodistribution1
291 files changed, 10960 insertions, 1300 deletions
diff --git a/.gitignore b/.gitignore
index bb0972d8..bb776458 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,22 @@
1/app/SymfonyRequirements.php
2/app/bootstrap.php.cache
3/app/check.php
4/app/cache/*
5/app/config/parameters.yml
6/app/logs/*
7!app/cache/.gitkeep
8!app/logs/.gitkeep
1.idea 9.idea
2.DS_Store 10.DS_Store
3.vagrant 11.vagrant
4app/assets/* 12/vendor/
5app/cache/*
6vendor
7composer.phar
8app/db/poche.sqlite 13app/db/poche.sqlite
9app/config/config.inc.php \ No newline at end of file 14
15/bin/
16!bin/install
17!bin/test
18!bin/symfony
19
20/data/
21
22/web/.htaccess \ No newline at end of file
diff --git a/app/.htaccess b/app/.htaccess
new file mode 100644
index 00000000..fb1de45b
--- /dev/null
+++ b/app/.htaccess
@@ -0,0 +1,7 @@
1<IfModule mod_authz_core.c>
2 Require all denied
3</IfModule>
4<IfModule !mod_authz_core.c>
5 Order deny,allow
6 Deny from all
7</IfModule>
diff --git a/app/AppCache.php b/app/AppCache.php
new file mode 100644
index 00000000..ddb51db0
--- /dev/null
+++ b/app/AppCache.php
@@ -0,0 +1,9 @@
1<?php
2
3require_once __DIR__.'/AppKernel.php';
4
5use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;
6
7class AppCache extends HttpCache
8{
9}
diff --git a/app/AppKernel.php b/app/AppKernel.php
new file mode 100644
index 00000000..5d159df8
--- /dev/null
+++ b/app/AppKernel.php
@@ -0,0 +1,38 @@
1<?php
2
3use Symfony\Component\HttpKernel\Kernel;
4use Symfony\Component\Config\Loader\LoaderInterface;
5
6class AppKernel extends Kernel
7{
8 public function registerBundles()
9 {
10 $bundles = array(
11 new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
12 new Symfony\Bundle\SecurityBundle\SecurityBundle(),
13 new Symfony\Bundle\TwigBundle\TwigBundle(),
14 new Symfony\Bundle\MonologBundle\MonologBundle(),
15 new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
16 new Symfony\Bundle\AsseticBundle\AsseticBundle(),
17 new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
18 new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
19 new AppBundle\AppBundle(),
20 new WallabagBundle\WallabagBundle(),
21 );
22
23 if (in_array($this->getEnvironment(), array('dev', 'test'))) {
24 $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
25 $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
26 $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
27 $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
28 $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
29 }
30
31 return $bundles;
32 }
33
34 public function registerContainerConfiguration(LoaderInterface $loader)
35 {
36 $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
37 }
38}
diff --git a/app/Resources/views/_global/public/css/jquery-ui-1.10.4.custom.css b/app/Resources/views/_global/public/css/jquery-ui-1.10.4.custom.css
new file mode 100644
index 00000000..5690172f
--- /dev/null
+++ b/app/Resources/views/_global/public/css/jquery-ui-1.10.4.custom.css
@@ -0,0 +1,560 @@
1/*! jQuery UI - v1.10.4 - 2014-03-09
2* http://jqueryui.com
3* Includes: jquery.ui.core.css, jquery.ui.autocomplete.css, jquery.ui.menu.css, jquery.ui.theme.css
4* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
6
7/* Layout helpers
8----------------------------------*/
9.ui-helper-hidden {
10 display: none;
11}
12.ui-helper-hidden-accessible {
13 border: 0;
14 clip: rect(0 0 0 0);
15 height: 1px;
16 margin: -1px;
17 overflow: hidden;
18 padding: 0;
19 position: absolute;
20 width: 1px;
21}
22.ui-helper-reset {
23 margin: 0;
24 padding: 0;
25 border: 0;
26 outline: 0;
27 line-height: 1.3;
28 text-decoration: none;
29 font-size: 100%;
30 list-style: none;
31}
32.ui-helper-clearfix:before,
33.ui-helper-clearfix:after {
34 content: "";
35 display: table;
36 border-collapse: collapse;
37}
38.ui-helper-clearfix:after {
39 clear: both;
40}
41.ui-helper-clearfix {
42 min-height: 0; /* support: IE7 */
43}
44.ui-helper-zfix {
45 width: 100%;
46 height: 100%;
47 top: 0;
48 left: 0;
49 position: absolute;
50 opacity: 0;
51 filter:Alpha(Opacity=0);
52}
53
54.ui-front {
55 z-index: 100;
56}
57
58
59/* Interaction Cues
60----------------------------------*/
61.ui-state-disabled {
62 cursor: default !important;
63}
64
65
66/* Icons
67----------------------------------*/
68
69/* states and images */
70.ui-icon {
71 display: block;
72 text-indent: -99999px;
73 overflow: hidden;
74 background-repeat: no-repeat;
75}
76
77
78/* Misc visuals
79----------------------------------*/
80
81/* Overlays */
82.ui-widget-overlay {
83 position: fixed;
84 top: 0;
85 left: 0;
86 width: 100%;
87 height: 100%;
88}
89.ui-autocomplete {
90 position: absolute;
91 top: 0;
92 left: 0;
93 cursor: default;
94}
95.ui-menu {
96 list-style: none;
97 padding: 2px;
98 margin: 0;
99 display: block;
100 outline: none;
101}
102.ui-menu .ui-menu {
103 margin-top: -3px;
104 position: absolute;
105}
106.ui-menu .ui-menu-item {
107 margin: 0;
108 padding: 0;
109 width: 100%;
110 /* support: IE10, see #8844 */
111 list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
112}
113.ui-menu .ui-menu-divider {
114 margin: 5px -2px 5px -2px;
115 height: 0;
116 font-size: 0;
117 line-height: 0;
118 border-width: 1px 0 0 0;
119}
120.ui-menu .ui-menu-item a {
121 text-decoration: none;
122 display: block;
123 padding: 2px .4em;
124 line-height: 1.5;
125 min-height: 0; /* support: IE7 */
126 font-weight: normal;
127}
128.ui-menu .ui-menu-item a.ui-state-focus,
129.ui-menu .ui-menu-item a.ui-state-active {
130 font-weight: normal;
131 margin: -1px;
132}
133
134.ui-menu .ui-state-disabled {
135 font-weight: normal;
136 margin: .4em 0 .2em;
137 line-height: 1.5;
138}
139.ui-menu .ui-state-disabled a {
140 cursor: default;
141}
142
143/* icon support */
144.ui-menu-icons {
145 position: relative;
146}
147.ui-menu-icons .ui-menu-item a {
148 position: relative;
149 padding-left: 2em;
150}
151
152/* left-aligned */
153.ui-menu .ui-icon {
154 position: absolute;
155 top: .2em;
156 left: .2em;
157}
158
159/* right-aligned */
160.ui-menu .ui-menu-icon {
161 position: static;
162 float: right;
163}
164
165/* Component containers
166----------------------------------*/
167.ui-widget {
168 font-family: Verdana,Arial,sans-serif;
169 font-size: 1.1em;
170}
171.ui-widget .ui-widget {
172 font-size: 1em;
173}
174.ui-widget input,
175.ui-widget select,
176.ui-widget textarea,
177.ui-widget button {
178 font-family: Verdana,Arial,sans-serif;
179 font-size: 1em;
180}
181.ui-widget-content {
182 border: 1px solid #aaaaaa;
183 background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;
184 color: #222222;
185}
186.ui-widget-content a {
187 color: #222222;
188}
189.ui-widget-header {
190 border: 1px solid #aaaaaa;
191 background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;
192 color: #222222;
193 font-weight: bold;
194}
195.ui-widget-header a {
196 color: #222222;
197}
198
199/* Interaction states
200----------------------------------*/
201.ui-state-default,
202.ui-widget-content .ui-state-default,
203.ui-widget-header .ui-state-default {
204 border: 1px solid #d3d3d3;
205 background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;
206 font-weight: normal;
207 color: #555555;
208}
209.ui-state-default a,
210.ui-state-default a:link,
211.ui-state-default a:visited {
212 color: #555555;
213 text-decoration: none;
214}
215.ui-state-hover,
216.ui-widget-content .ui-state-hover,
217.ui-widget-header .ui-state-hover,
218.ui-state-focus,
219.ui-widget-content .ui-state-focus,
220.ui-widget-header .ui-state-focus {
221 border: 1px solid #999999;
222 background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;
223 font-weight: normal;
224 color: #212121;
225}
226.ui-state-hover a,
227.ui-state-hover a:hover,
228.ui-state-hover a:link,
229.ui-state-hover a:visited,
230.ui-state-focus a,
231.ui-state-focus a:hover,
232.ui-state-focus a:link,
233.ui-state-focus a:visited {
234 color: #212121;
235 text-decoration: none;
236}
237.ui-state-active,
238.ui-widget-content .ui-state-active,
239.ui-widget-header .ui-state-active {
240 border: 1px solid #aaaaaa;
241 background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
242 font-weight: normal;
243 color: #212121;
244}
245.ui-state-active a,
246.ui-state-active a:link,
247.ui-state-active a:visited {
248 color: #212121;
249 text-decoration: none;
250}
251
252/* Interaction Cues
253----------------------------------*/
254.ui-state-highlight,
255.ui-widget-content .ui-state-highlight,
256.ui-widget-header .ui-state-highlight {
257 border: 1px solid #fcefa1;
258 background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;
259 color: #363636;
260}
261.ui-state-highlight a,
262.ui-widget-content .ui-state-highlight a,
263.ui-widget-header .ui-state-highlight a {
264 color: #363636;
265}
266.ui-state-error,
267.ui-widget-content .ui-state-error,
268.ui-widget-header .ui-state-error {
269 border: 1px solid #cd0a0a;
270 background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;
271 color: #cd0a0a;
272}
273.ui-state-error a,
274.ui-widget-content .ui-state-error a,
275.ui-widget-header .ui-state-error a {
276 color: #cd0a0a;
277}
278.ui-state-error-text,
279.ui-widget-content .ui-state-error-text,
280.ui-widget-header .ui-state-error-text {
281 color: #cd0a0a;
282}
283.ui-priority-primary,
284.ui-widget-content .ui-priority-primary,
285.ui-widget-header .ui-priority-primary {
286 font-weight: bold;
287}
288.ui-priority-secondary,
289.ui-widget-content .ui-priority-secondary,
290.ui-widget-header .ui-priority-secondary {
291 opacity: .7;
292 filter:Alpha(Opacity=70);
293 font-weight: normal;
294}
295.ui-state-disabled,
296.ui-widget-content .ui-state-disabled,
297.ui-widget-header .ui-state-disabled {
298 opacity: .35;
299 filter:Alpha(Opacity=35);
300 background-image: none;
301}
302.ui-state-disabled .ui-icon {
303 filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
304}
305
306/* Icons
307----------------------------------*/
308
309/* states and images */
310.ui-icon {
311 width: 16px;
312 height: 16px;
313}
314.ui-icon,
315.ui-widget-content .ui-icon {
316 background-image: url(images/ui-icons_222222_256x240.png);
317}
318.ui-widget-header .ui-icon {
319 background-image: url(images/ui-icons_222222_256x240.png);
320}
321.ui-state-default .ui-icon {
322 background-image: url(images/ui-icons_888888_256x240.png);
323}
324.ui-state-hover .ui-icon,
325.ui-state-focus .ui-icon {
326 background-image: url(images/ui-icons_454545_256x240.png);
327}
328.ui-state-active .ui-icon {
329 background-image: url(images/ui-icons_454545_256x240.png);
330}
331.ui-state-highlight .ui-icon {
332 background-image: url(images/ui-icons_2e83ff_256x240.png);
333}
334.ui-state-error .ui-icon,
335.ui-state-error-text .ui-icon {
336 background-image: url(images/ui-icons_cd0a0a_256x240.png);
337}
338
339/* positioning */
340.ui-icon-blank { background-position: 16px 16px; }
341.ui-icon-carat-1-n { background-position: 0 0; }
342.ui-icon-carat-1-ne { background-position: -16px 0; }
343.ui-icon-carat-1-e { background-position: -32px 0; }
344.ui-icon-carat-1-se { background-position: -48px 0; }
345.ui-icon-carat-1-s { background-position: -64px 0; }
346.ui-icon-carat-1-sw { background-position: -80px 0; }
347.ui-icon-carat-1-w { background-position: -96px 0; }
348.ui-icon-carat-1-nw { background-position: -112px 0; }
349.ui-icon-carat-2-n-s { background-position: -128px 0; }
350.ui-icon-carat-2-e-w { background-position: -144px 0; }
351.ui-icon-triangle-1-n { background-position: 0 -16px; }
352.ui-icon-triangle-1-ne { background-position: -16px -16px; }
353.ui-icon-triangle-1-e { background-position: -32px -16px; }
354.ui-icon-triangle-1-se { background-position: -48px -16px; }
355.ui-icon-triangle-1-s { background-position: -64px -16px; }
356.ui-icon-triangle-1-sw { background-position: -80px -16px; }
357.ui-icon-triangle-1-w { background-position: -96px -16px; }
358.ui-icon-triangle-1-nw { background-position: -112px -16px; }
359.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
360.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
361.ui-icon-arrow-1-n { background-position: 0 -32px; }
362.ui-icon-arrow-1-ne { background-position: -16px -32px; }
363.ui-icon-arrow-1-e { background-position: -32px -32px; }
364.ui-icon-arrow-1-se { background-position: -48px -32px; }
365.ui-icon-arrow-1-s { background-position: -64px -32px; }
366.ui-icon-arrow-1-sw { background-position: -80px -32px; }
367.ui-icon-arrow-1-w { background-position: -96px -32px; }
368.ui-icon-arrow-1-nw { background-position: -112px -32px; }
369.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
370.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
371.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
372.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
373.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
374.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
375.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
376.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
377.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
378.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
379.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
380.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
381.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
382.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
383.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
384.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
385.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
386.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
387.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
388.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
389.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
390.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
391.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
392.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
393.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
394.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
395.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
396.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
397.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
398.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
399.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
400.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
401.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
402.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
403.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
404.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
405.ui-icon-arrow-4 { background-position: 0 -80px; }
406.ui-icon-arrow-4-diag { background-position: -16px -80px; }
407.ui-icon-extlink { background-position: -32px -80px; }
408.ui-icon-newwin { background-position: -48px -80px; }
409.ui-icon-refresh { background-position: -64px -80px; }
410.ui-icon-shuffle { background-position: -80px -80px; }
411.ui-icon-transfer-e-w { background-position: -96px -80px; }
412.ui-icon-transferthick-e-w { background-position: -112px -80px; }
413.ui-icon-folder-collapsed { background-position: 0 -96px; }
414.ui-icon-folder-open { background-position: -16px -96px; }
415.ui-icon-document { background-position: -32px -96px; }
416.ui-icon-document-b { background-position: -48px -96px; }
417.ui-icon-note { background-position: -64px -96px; }
418.ui-icon-mail-closed { background-position: -80px -96px; }
419.ui-icon-mail-open { background-position: -96px -96px; }
420.ui-icon-suitcase { background-position: -112px -96px; }
421.ui-icon-comment { background-position: -128px -96px; }
422.ui-icon-person { background-position: -144px -96px; }
423.ui-icon-print { background-position: -160px -96px; }
424.ui-icon-trash { background-position: -176px -96px; }
425.ui-icon-locked { background-position: -192px -96px; }
426.ui-icon-unlocked { background-position: -208px -96px; }
427.ui-icon-bookmark { background-position: -224px -96px; }
428.ui-icon-tag { background-position: -240px -96px; }
429.ui-icon-home { background-position: 0 -112px; }
430.ui-icon-flag { background-position: -16px -112px; }
431.ui-icon-calendar { background-position: -32px -112px; }
432.ui-icon-cart { background-position: -48px -112px; }
433.ui-icon-pencil { background-position: -64px -112px; }
434.ui-icon-clock { background-position: -80px -112px; }
435.ui-icon-disk { background-position: -96px -112px; }
436.ui-icon-calculator { background-position: -112px -112px; }
437.ui-icon-zoomin { background-position: -128px -112px; }
438.ui-icon-zoomout { background-position: -144px -112px; }
439.ui-icon-search { background-position: -160px -112px; }
440.ui-icon-wrench { background-position: -176px -112px; }
441.ui-icon-gear { background-position: -192px -112px; }
442.ui-icon-heart { background-position: -208px -112px; }
443.ui-icon-star { background-position: -224px -112px; }
444.ui-icon-link { background-position: -240px -112px; }
445.ui-icon-cancel { background-position: 0 -128px; }
446.ui-icon-plus { background-position: -16px -128px; }
447.ui-icon-plusthick { background-position: -32px -128px; }
448.ui-icon-minus { background-position: -48px -128px; }
449.ui-icon-minusthick { background-position: -64px -128px; }
450.ui-icon-close { background-position: -80px -128px; }
451.ui-icon-closethick { background-position: -96px -128px; }
452.ui-icon-key { background-position: -112px -128px; }
453.ui-icon-lightbulb { background-position: -128px -128px; }
454.ui-icon-scissors { background-position: -144px -128px; }
455.ui-icon-clipboard { background-position: -160px -128px; }
456.ui-icon-copy { background-position: -176px -128px; }
457.ui-icon-contact { background-position: -192px -128px; }
458.ui-icon-image { background-position: -208px -128px; }
459.ui-icon-video { background-position: -224px -128px; }
460.ui-icon-script { background-position: -240px -128px; }
461.ui-icon-alert { background-position: 0 -144px; }
462.ui-icon-info { background-position: -16px -144px; }
463.ui-icon-notice { background-position: -32px -144px; }
464.ui-icon-help { background-position: -48px -144px; }
465.ui-icon-check { background-position: -64px -144px; }
466.ui-icon-bullet { background-position: -80px -144px; }
467.ui-icon-radio-on { background-position: -96px -144px; }
468.ui-icon-radio-off { background-position: -112px -144px; }
469.ui-icon-pin-w { background-position: -128px -144px; }
470.ui-icon-pin-s { background-position: -144px -144px; }
471.ui-icon-play { background-position: 0 -160px; }
472.ui-icon-pause { background-position: -16px -160px; }
473.ui-icon-seek-next { background-position: -32px -160px; }
474.ui-icon-seek-prev { background-position: -48px -160px; }
475.ui-icon-seek-end { background-position: -64px -160px; }
476.ui-icon-seek-start { background-position: -80px -160px; }
477/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
478.ui-icon-seek-first { background-position: -80px -160px; }
479.ui-icon-stop { background-position: -96px -160px; }
480.ui-icon-eject { background-position: -112px -160px; }
481.ui-icon-volume-off { background-position: -128px -160px; }
482.ui-icon-volume-on { background-position: -144px -160px; }
483.ui-icon-power { background-position: 0 -176px; }
484.ui-icon-signal-diag { background-position: -16px -176px; }
485.ui-icon-signal { background-position: -32px -176px; }
486.ui-icon-battery-0 { background-position: -48px -176px; }
487.ui-icon-battery-1 { background-position: -64px -176px; }
488.ui-icon-battery-2 { background-position: -80px -176px; }
489.ui-icon-battery-3 { background-position: -96px -176px; }
490.ui-icon-circle-plus { background-position: 0 -192px; }
491.ui-icon-circle-minus { background-position: -16px -192px; }
492.ui-icon-circle-close { background-position: -32px -192px; }
493.ui-icon-circle-triangle-e { background-position: -48px -192px; }
494.ui-icon-circle-triangle-s { background-position: -64px -192px; }
495.ui-icon-circle-triangle-w { background-position: -80px -192px; }
496.ui-icon-circle-triangle-n { background-position: -96px -192px; }
497.ui-icon-circle-arrow-e { background-position: -112px -192px; }
498.ui-icon-circle-arrow-s { background-position: -128px -192px; }
499.ui-icon-circle-arrow-w { background-position: -144px -192px; }
500.ui-icon-circle-arrow-n { background-position: -160px -192px; }
501.ui-icon-circle-zoomin { background-position: -176px -192px; }
502.ui-icon-circle-zoomout { background-position: -192px -192px; }
503.ui-icon-circle-check { background-position: -208px -192px; }
504.ui-icon-circlesmall-plus { background-position: 0 -208px; }
505.ui-icon-circlesmall-minus { background-position: -16px -208px; }
506.ui-icon-circlesmall-close { background-position: -32px -208px; }
507.ui-icon-squaresmall-plus { background-position: -48px -208px; }
508.ui-icon-squaresmall-minus { background-position: -64px -208px; }
509.ui-icon-squaresmall-close { background-position: -80px -208px; }
510.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
511.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
512.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
513.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
514.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
515.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
516
517
518/* Misc visuals
519----------------------------------*/
520
521/* Corner radius */
522.ui-corner-all,
523.ui-corner-top,
524.ui-corner-left,
525.ui-corner-tl {
526 border-top-left-radius: 4px;
527}
528.ui-corner-all,
529.ui-corner-top,
530.ui-corner-right,
531.ui-corner-tr {
532 border-top-right-radius: 4px;
533}
534.ui-corner-all,
535.ui-corner-bottom,
536.ui-corner-left,
537.ui-corner-bl {
538 border-bottom-left-radius: 4px;
539}
540.ui-corner-all,
541.ui-corner-bottom,
542.ui-corner-right,
543.ui-corner-br {
544 border-bottom-right-radius: 4px;
545}
546
547/* Overlays */
548.ui-widget-overlay {
549 background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
550 opacity: .3;
551 filter: Alpha(Opacity=30);
552}
553.ui-widget-shadow {
554 margin: -8px 0 0 -8px;
555 padding: 8px;
556 background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
557 opacity: .3;
558 filter: Alpha(Opacity=30);
559 border-radius: 8px;
560}
diff --git a/app/Resources/views/_global/public/css/jquery-ui-1.10.4.custom.min.css b/app/Resources/views/_global/public/css/jquery-ui-1.10.4.custom.min.css
new file mode 100644
index 00000000..4dba92a8
--- /dev/null
+++ b/app/Resources/views/_global/public/css/jquery-ui-1.10.4.custom.min.css
@@ -0,0 +1,7 @@
1/*! jQuery UI - v1.10.4 - 2014-03-09
2* http://jqueryui.com
3* Includes: jquery.ui.core.css, jquery.ui.autocomplete.css, jquery.ui.menu.css, jquery.ui.theme.css
4* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
6
7.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:none}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:normal}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-menu .ui-state-disabled{font-weight:normal;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} \ No newline at end of file
diff --git a/app/Resources/views/_global/public/img/appicon/apple-touch-icon-114.png b/app/Resources/views/_global/public/img/appicon/apple-touch-icon-114.png
new file mode 100755
index 00000000..0e96edd5
--- /dev/null
+++ b/app/Resources/views/_global/public/img/appicon/apple-touch-icon-114.png
Binary files differ
diff --git a/app/Resources/views/_global/public/img/appicon/apple-touch-icon-120.png b/app/Resources/views/_global/public/img/appicon/apple-touch-icon-120.png
new file mode 100755
index 00000000..dc5aab1c
--- /dev/null
+++ b/app/Resources/views/_global/public/img/appicon/apple-touch-icon-120.png
Binary files differ
diff --git a/app/Resources/views/_global/public/img/appicon/apple-touch-icon-144.png b/app/Resources/views/_global/public/img/appicon/apple-touch-icon-144.png
new file mode 100755
index 00000000..1d005db6
--- /dev/null
+++ b/app/Resources/views/_global/public/img/appicon/apple-touch-icon-144.png
Binary files differ
diff --git a/app/Resources/views/_global/public/img/appicon/apple-touch-icon-152.png b/app/Resources/views/_global/public/img/appicon/apple-touch-icon-152.png
new file mode 100755
index 00000000..f915231f
--- /dev/null
+++ b/app/Resources/views/_global/public/img/appicon/apple-touch-icon-152.png
Binary files differ
diff --git a/app/Resources/views/_global/public/img/appicon/apple-touch-icon-57.png b/app/Resources/views/_global/public/img/appicon/apple-touch-icon-57.png
new file mode 100755
index 00000000..5aa19ed9
--- /dev/null
+++ b/app/Resources/views/_global/public/img/appicon/apple-touch-icon-57.png
Binary files differ
diff --git a/app/Resources/views/_global/public/img/appicon/apple-touch-icon-72.png b/app/Resources/views/_global/public/img/appicon/apple-touch-icon-72.png
new file mode 100755
index 00000000..b8b48e1b
--- /dev/null
+++ b/app/Resources/views/_global/public/img/appicon/apple-touch-icon-72.png
Binary files differ
diff --git a/app/Resources/views/_global/public/img/appicon/apple-touch-icon-76.png b/app/Resources/views/_global/public/img/appicon/apple-touch-icon-76.png
new file mode 100755
index 00000000..9f9dba27
--- /dev/null
+++ b/app/Resources/views/_global/public/img/appicon/apple-touch-icon-76.png
Binary files differ
diff --git a/app/Resources/views/_global/public/img/appicon/apple-touch-icon.png b/app/Resources/views/_global/public/img/appicon/apple-touch-icon.png
new file mode 100755
index 00000000..9cf29e2b
--- /dev/null
+++ b/app/Resources/views/_global/public/img/appicon/apple-touch-icon.png
Binary files differ
diff --git a/app/Resources/views/_global/public/img/appicon/favicon.ico b/app/Resources/views/_global/public/img/appicon/favicon.ico
new file mode 100755
index 00000000..0346558b
--- /dev/null
+++ b/app/Resources/views/_global/public/img/appicon/favicon.ico
Binary files differ
diff --git a/app/Resources/views/_global/public/img/icons/carrot-icon--black.png b/app/Resources/views/_global/public/img/icons/carrot-icon--black.png
new file mode 100644
index 00000000..6da7925b
--- /dev/null
+++ b/app/Resources/views/_global/public/img/icons/carrot-icon--black.png
Binary files differ
diff --git a/app/Resources/views/_global/public/img/icons/carrot-icon--white.png b/app/Resources/views/_global/public/img/icons/carrot-icon--white.png
new file mode 100644
index 00000000..a70044b6
--- /dev/null
+++ b/app/Resources/views/_global/public/img/icons/carrot-icon--white.png
Binary files differ
diff --git a/app/Resources/views/_global/public/img/icons/diaspora-icon--black.png b/app/Resources/views/_global/public/img/icons/diaspora-icon--black.png
new file mode 100644
index 00000000..32bca194
--- /dev/null
+++ b/app/Resources/views/_global/public/img/icons/diaspora-icon--black.png
Binary files differ
diff --git a/app/Resources/views/_global/public/img/icons/diaspora-icon--white.png b/app/Resources/views/_global/public/img/icons/diaspora-icon--white.png
new file mode 100644
index 00000000..fc48d47c
--- /dev/null
+++ b/app/Resources/views/_global/public/img/icons/diaspora-icon--white.png
Binary files differ
diff --git a/app/Resources/views/_global/public/js/autoClose.js b/app/Resources/views/_global/public/js/autoClose.js
new file mode 100644
index 00000000..e9145b7e
--- /dev/null
+++ b/app/Resources/views/_global/public/js/autoClose.js
@@ -0,0 +1,6 @@
1$(document).ready(function() {
2 current_url = window.location.href
3 if (current_url.match("&closewin=true")) {
4 window.close();
5 }
6});
diff --git a/app/Resources/views/_global/public/js/autoCompleteTags.js b/app/Resources/views/_global/public/js/autoCompleteTags.js
new file mode 100755
index 00000000..90bc982c
--- /dev/null
+++ b/app/Resources/views/_global/public/js/autoCompleteTags.js
@@ -0,0 +1,47 @@
1jQuery(function($) {
2
3 function split( val ) {
4 return val.split( /,\s*/ );
5 }
6 function extractLast( term ) {
7 return split( term ).pop();
8 }
9
10
11 $("#value").bind("keydown", function(event) {
12 if (event.keyCode === $.ui.keyCode.TAB && $(this).data("ui-autocomplete").menu.active) {
13 event.preventDefault();
14 }
15 }).autocomplete({
16 source : function(request, response) {
17 $.getJSON("./?view=tags", {
18 term : extractLast(request.term),
19 //id: $(':hidden#entry_id').val()
20 }, response);
21 },
22 search : function() {
23 // custom minLength
24 var term = extractLast(this.value);
25 if (term.length < 1) {
26 return false;
27 }
28 },
29 focus : function() {
30 // prevent value inserted on focus
31 return false;
32 },
33 select : function(event, ui) {
34 var terms = split(this.value);
35 // remove the current input
36 terms.pop();
37 // add the selected item
38 terms.push(ui.item.value);
39 // add placeholder to get the comma-and-space at the end
40 terms.push("");
41 this.value = terms.join(", ");
42 return false;
43 }
44 });
45
46
47});
diff --git a/app/Resources/views/_global/public/js/jquery-2.0.3.min.js b/app/Resources/views/_global/public/js/jquery-2.0.3.min.js
new file mode 100644
index 00000000..a4dd0a2f
--- /dev/null
+++ b/app/Resources/views/_global/public/js/jquery-2.0.3.min.js
@@ -0,0 +1 @@
(function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],p="2.0.3",f=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^-ms-/,N=/-([\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener("DOMContentLoaded",S,!1),e.removeEventListener("load",S,!1),x.ready()};x.fn=x.prototype={jquery:p,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if("string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},a=2),"object"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger("ready").off("ready")))},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if("object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||"string"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,"text/xml")}catch(r){t=undefined}return(!t||t.getElementsByTagName("parsererror").length)&&x.error("Invalid XML: "+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf("use strict")?(t=o.createElement("script"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,"ms-").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?"":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if("number"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(t[i]!==undefined)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){var r,i=[],o=0,s=e.length;for(n=!!n;s>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,s=j(e),a=[];if(s)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(a[a.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(a[a.length]=r);return f.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;return"string"==typeof t&&(n=e[t],t=e,e=n),x.isFunction(e)?(r=d.call(arguments,2),i=function(){return e.apply(t||this,r.concat(d.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):undefined},access:function(e,t,n,r,i,o,s){var a=0,u=e.length,l=null==n;if("object"===x.type(n)){i=!0;for(a in n)x.access(e,t,a,n[a],!0,o,s)}else if(r!==undefined&&(i=!0,x.isFunction(r)||(s=!0),l&&(s?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(x(e),n)})),t))for(;u>a;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:l?t.call(e):u?t(e[0],n):o},now:Date.now,swap:function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i}}),x.ready.promise=function(t){return n||(n=x.Deferred(),"complete"===o.readyState?setTimeout(x.ready):(o.addEventListener("DOMContentLoaded",S,!1),e.addEventListener("load",S,!1))),n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function j(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}t=x(o),function(e,undefined){var t,n,r,i,o,s,a,u,l,c,p,f,h,d,g,m,y,v="sizzle"+-new Date,b=e.document,w=0,T=0,C=st(),k=st(),N=st(),E=!1,S=function(e,t){return e===t?(E=!0,0):0},j=typeof undefined,D=1<<31,A={}.hasOwnProperty,L=[],q=L.pop,H=L.push,O=L.push,F=L.slice,P=L.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",W="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",$=W.replace("w","w#"),B="\\["+M+"*("+W+")"+M+"*(?:([*^$|!~]?=)"+M+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+$+")|)|)"+M+"*\\]",I=":("+W+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+B.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=RegExp("^"+M+"*,"+M+"*"),X=RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=RegExp(M+"*[+~]"),Y=RegExp("="+M+"*([^\\]'\"]*)"+M+"*\\]","g"),V=RegExp(I),G=RegExp("^"+$+"$"),J={ID:RegExp("^#("+W+")"),CLASS:RegExp("^\\.("+W+")"),TAG:RegExp("^("+W.replace("w","w*")+")"),ATTR:RegExp("^"+B),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:RegExp("^(?:"+R+")$","i"),needsContext:RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Q=/^[^{]+\{\s*\[native \w/,K=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Z=/^(?:input|select|textarea|button)$/i,et=/^h\d$/i,tt=/'|\\/g,nt=RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),rt=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{O.apply(L=F.call(b.childNodes),b.childNodes),L[b.childNodes.length].nodeType}catch(it){O={apply:L.length?function(e,t){H.apply(e,F.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function ot(e,t,r,i){var o,s,a,u,l,f,g,m,x,w;if((t?t.ownerDocument||t:b)!==p&&c(t),t=t||p,r=r||[],!e||"string"!=typeof e)return r;if(1!==(u=t.nodeType)&&9!==u)return[];if(h&&!i){if(o=K.exec(e))if(a=o[1]){if(9===u){if(s=t.getElementById(a),!s||!s.parentNode)return r;if(s.id===a)return r.push(s),r}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(a))&&y(t,s)&&s.id===a)return r.push(s),r}else{if(o[2])return O.apply(r,t.getElementsByTagName(e)),r;if((a=o[3])&&n.getElementsByClassName&&t.getElementsByClassName)return O.apply(r,t.getElementsByClassName(a)),r}if(n.qsa&&(!d||!d.test(e))){if(m=g=v,x=t,w=9===u&&e,1===u&&"object"!==t.nodeName.toLowerCase()){f=gt(e),(g=t.getAttribute("id"))?m=g.replace(tt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",l=f.length;while(l--)f[l]=m+mt(f[l]);x=U.test(e)&&t.parentNode||t,w=f.join(",")}if(w)try{return O.apply(r,x.querySelectorAll(w)),r}catch(T){}finally{g||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,r,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>i.cacheLength&&delete t[e.shift()],t[n]=r}return t}function at(e){return e[v]=!0,e}function ut(e){var t=p.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function lt(e,t){var n=e.split("|"),r=e.length;while(r--)i.attrHandle[n[r]]=t}function ct(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return at(function(t){return t=+t,at(function(n,r){var i,o=e([],n.length,t),s=o.length;while(s--)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}s=ot.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},n=ot.support={},c=ot.setDocument=function(e){var t=e?e.ownerDocument||e:b,r=t.defaultView;return t!==p&&9===t.nodeType&&t.documentElement?(p=t,f=t.documentElement,h=!s(t),r&&r.attachEvent&&r!==r.top&&r.attachEvent("onbeforeunload",function(){c()}),n.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ut(function(e){return e.appendChild(t.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=ut(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),n.getById=ut(function(e){return f.appendChild(e).id=v,!t.getElementsByName||!t.getElementsByName(v).length}),n.getById?(i.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){return e.getAttribute("id")===t}}):(delete i.find.ID,i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=n.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==j?t.getElementsByTagName(e):undefined}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==j&&h?t.getElementsByClassName(e):undefined},g=[],d=[],(n.qsa=Q.test(t.querySelectorAll))&&(ut(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll(":checked").length||d.push(":checked")}),ut(function(e){var n=t.createElement("input");n.setAttribute("type","hidden"),e.appendChild(n).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&d.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||d.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),d.push(",.*:")})),(n.matchesSelector=Q.test(m=f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&ut(function(e){n.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",I)}),d=d.length&&RegExp(d.join("|")),g=g.length&&RegExp(g.join("|")),y=Q.test(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},S=f.compareDocumentPosition?function(e,r){if(e===r)return E=!0,0;var i=r.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(r);return i?1&i||!n.sortDetached&&r.compareDocumentPosition(e)===i?e===t||y(b,e)?-1:r===t||y(b,r)?1:l?P.call(l,e)-P.call(l,r):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,n){var r,i=0,o=e.parentNode,s=n.parentNode,a=[e],u=[n];if(e===n)return E=!0,0;if(!o||!s)return e===t?-1:n===t?1:o?-1:s?1:l?P.call(l,e)-P.call(l,n):0;if(o===s)return ct(e,n);r=e;while(r=r.parentNode)a.unshift(r);r=n;while(r=r.parentNode)u.unshift(r);while(a[i]===u[i])i++;return i?ct(a[i],u[i]):a[i]===b?-1:u[i]===b?1:0},t):p},ot.matches=function(e,t){return ot(e,null,null,t)},ot.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Y,"='$1']"),!(!n.matchesSelector||!h||g&&g.test(t)||d&&d.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return ot(t,p,null,[e]).length>0},ot.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},ot.attr=function(e,t){(e.ownerDocument||e)!==p&&c(e);var r=i.attrHandle[t.toLowerCase()],o=r&&A.call(i.attrHandle,t.toLowerCase())?r(e,t,!h):undefined;return o===undefined?n.attributes||!h?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null:o},ot.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},ot.uniqueSort=function(e){var t,r=[],i=0,o=0;if(E=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(S),E){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return e},o=ot.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=ot.selectors={cacheLength:50,createPseudo:at,match:J,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(nt,rt),e[3]=(e[4]||e[5]||"").replace(nt,rt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ot.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ot.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return J.CHILD.test(e[0])?null:(e[3]&&e[4]!==undefined?e[2]=e[4]:n&&V.test(n)&&(t=gt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(nt,rt).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&C(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=ot.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,h,d,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,y=a&&t.nodeName.toLowerCase(),x=!u&&!a;if(m){if(o){while(g){p=t;while(p=p[g])if(a?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;d=g="only"===e&&!d&&"nextSibling"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&x){c=m[v]||(m[v]={}),l=c[e]||[],h=l[0]===w&&l[1],f=l[0]===w&&l[2],p=h&&m.childNodes[h];while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[w,h,f];break}}else if(x&&(l=(t[v]||(t[v]={}))[e])&&l[0]===w)f=l[1];else while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if((a?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(x&&((p[v]||(p[v]={}))[e]=[w,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||ot.error("unsupported pseudo: "+e);return r[v]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?at(function(e,n){var i,o=r(e,t),s=o.length;while(s--)i=P.call(e,o[s]),e[i]=!(n[i]=o[s])}):function(e){return r(e,0,n)}):r}},pseudos:{not:at(function(e){var t=[],n=[],r=a(e.replace(z,"$1"));return r[v]?at(function(e,t,n,i){var o,s=r(e,null,i,[]),a=e.length;while(a--)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:at(function(e){return function(t){return ot(e,t).length>0}}),contains:at(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:at(function(e){return G.test(e||"")||ot.error("unsupported lang: "+e),e=e.replace(nt,rt).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return et.test(e.nodeName)},input:function(e){return Z.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},i.pseudos.nth=i.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[t]=pt(t);for(t in{submit:!0,reset:!0})i.pseudos[t]=ft(t);function dt(){}dt.prototype=i.filters=i.pseudos,i.setFilters=new dt;function gt(e,t){var n,r,o,s,a,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);a=e,u=[],l=i.preFilter;while(a){(!n||(r=_.exec(a)))&&(r&&(a=a.slice(r[0].length)||a),u.push(o=[])),n=!1,(r=X.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(z," ")}),a=a.slice(n.length));for(s in i.filter)!(r=J[s].exec(a))||l[s]&&!(r=l[s](r))||(n=r.shift(),o.push({value:n,type:s,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ot.error(e):k(e,u).slice(0)}function mt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function yt(e,t,n){var i=t.dir,o=n&&"parentNode"===i,s=T++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,a){var u,l,c,p=w+" "+s;if(a){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,a))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[v]||(t[v]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,a)||r,l[1]===!0)return!0}}function vt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,s=[],a=0,u=e.length,l=null!=t;for(;u>a;a++)(o=e[a])&&(!n||n(o,r,i))&&(s.push(o),l&&t.push(a));return s}function bt(e,t,n,r,i,o){return r&&!r[v]&&(r=bt(r)),i&&!i[v]&&(i=bt(i,o)),at(function(o,s,a,u){var l,c,p,f=[],h=[],d=s.length,g=o||Ct(t||"*",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:xt(g,f,e,a,u),y=n?i||(o?e:d||r)?[]:s:m;if(n&&n(m,y,a,u),r){l=xt(y,h),r(l,[],a,u),c=l.length;while(c--)(p=l[c])&&(y[h[c]]=!(m[h[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?P.call(o,p):f[c])>-1&&(o[l]=!(s[l]=p))}}else y=xt(y===s?y.splice(d,y.length):y),i?i(null,s,y,u):O.apply(s,y)})}function wt(e){var t,n,r,o=e.length,s=i.relative[e[0].type],a=s||i.relative[" "],l=s?1:0,c=yt(function(e){return e===t},a,!0),p=yt(function(e){return P.call(t,e)>-1},a,!0),f=[function(e,n,r){return!s&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>l;l++)if(n=i.relative[e[l].type])f=[yt(vt(f),n)];else{if(n=i.filter[e[l].type].apply(null,e[l].matches),n[v]){for(r=++l;o>r;r++)if(i.relative[e[r].type])break;return bt(l>1&&vt(f),l>1&&mt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&wt(e.slice(l,r)),o>r&&wt(e=e.slice(r)),o>r&&mt(e))}f.push(n)}return vt(f)}function Tt(e,t){var n=0,o=t.length>0,s=e.length>0,a=function(a,l,c,f,h){var d,g,m,y=[],v=0,x="0",b=a&&[],T=null!=h,C=u,k=a||s&&i.find.TAG("*",h&&l.parentNode||l),N=w+=null==C?1:Math.random()||.1;for(T&&(u=l!==p&&l,r=n);null!=(d=k[x]);x++){if(s&&d){g=0;while(m=e[g++])if(m(d,l,c)){f.push(d);break}T&&(w=N,r=++n)}o&&((d=!m&&d)&&v--,a&&b.push(d))}if(v+=x,o&&x!==v){g=0;while(m=t[g++])m(b,y,l,c);if(a){if(v>0)while(x--)b[x]||y[x]||(y[x]=q.call(f));y=xt(y)}O.apply(f,y),T&&!a&&y.length>0&&v+t.length>1&&ot.uniqueSort(f)}return T&&(w=N,u=C),b};return o?at(a):a}a=ot.compile=function(e,t){var n,r=[],i=[],o=N[e+" "];if(!o){t||(t=gt(e)),n=t.length;while(n--)o=wt(t[n]),o[v]?r.push(o):i.push(o);o=N(e,Tt(i,r))}return o};function Ct(e,t,n){var r=0,i=t.length;for(;i>r;r++)ot(e,t[r],n);return n}function kt(e,t,r,o){var s,u,l,c,p,f=gt(e);if(!o&&1===f.length){if(u=f[0]=f[0].slice(0),u.length>2&&"ID"===(l=u[0]).type&&n.getById&&9===t.nodeType&&h&&i.relative[u[1].type]){if(t=(i.find.ID(l.matches[0].replace(nt,rt),t)||[])[0],!t)return r;e=e.slice(u.shift().value.length)}s=J.needsContext.test(e)?0:u.length;while(s--){if(l=u[s],i.relative[c=l.type])break;if((p=i.find[c])&&(o=p(l.matches[0].replace(nt,rt),U.test(u[0].type)&&t.parentNode||t))){if(u.splice(s,1),e=o.length&&mt(u),!e)return O.apply(r,o),r;break}}}return a(e,f)(o,t,!h,r,U.test(e)),r}n.sortStable=v.split("").sort(S).join("")===v,n.detectDuplicates=E,c(),n.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(p.createElement("div"))}),ut(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||lt("type|href|height|width",function(e,t,n){return n?undefined:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ut(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||lt("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?undefined:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||lt(R,function(e,t,n){var r;return n?undefined:(r=e.getAttributeNode(t))&&r.specified?r.value:e[t]===!0?t.toLowerCase():null}),x.find=ot,x.expr=ot.selectors,x.expr[":"]=x.expr.pseudos,x.unique=ot.uniqueSort,x.text=ot.getText,x.isXMLDoc=ot.isXML,x.contains=ot.contains}(e);var D={};function A(e){var t=D[e]={};return x.each(e.match(w)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?D[e]||A(e):x.extend({},e);var t,n,r,i,o,s,a=[],u=!e.once&&[],l=function(p){for(t=e.memory&&p,n=!0,s=i||0,i=0,o=a.length,r=!0;a&&o>s;s++)if(a[s].apply(p[0],p[1])===!1&&e.stopOnFalse){t=!1;break}r=!1,a&&(u?u.length&&l(u.shift()):t?a=[]:c.disable())},c={add:function(){if(a){var n=a.length;(function s(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&c.has(n)||a.push(n):n&&n.length&&"string"!==r&&s(n)})})(arguments),r?o=a.length:t&&(i=n,l(t))}return this},remove:function(){return a&&x.each(arguments,function(e,t){var n;while((n=x.inArray(t,a,n))>-1)a.splice(n,1),r&&(o>=n&&o--,s>=n&&s--)}),this},has:function(e){return e?x.inArray(e,a)>-1:!(!a||!a.length)},empty:function(){return a=[],o=0,this},disable:function(){return a=u=t=undefined,this},disabled:function(){return!a},lock:function(){return u=undefined,t||c.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!a||n&&!u||(t=t||[],t=[e,t.slice?t.slice():t],r?u.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var s=o[0],a=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=d.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),s=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?d.call(arguments):r,n===a?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},a,u,l;if(r>1)for(a=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(s(t,l,n)).fail(o.reject).progress(s(t,u,a)):--i;return i||o.resolveWith(l,n),o.promise()}}),x.support=function(t){var n=o.createElement("input"),r=o.createDocumentFragment(),i=o.createElement("div"),s=o.createElement("select"),a=s.appendChild(o.createElement("option"));return n.type?(n.type="checkbox",t.checkOn=""!==n.value,t.optSelected=a.selected,t.reliableMarginRight=!0,t.boxSizingReliable=!0,t.pixelPosition=!1,n.checked=!0,t.noCloneChecked=n.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!a.disabled,n=o.createElement("input"),n.value="t",n.type="radio",t.radioValue="t"===n.value,n.setAttribute("checked","t"),n.setAttribute("name","t"),r.appendChild(n),t.checkClone=r.cloneNode(!0).cloneNode(!0).lastChild.checked,t.focusinBubbles="onfocusin"in e,i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===i.style.backgroundClip,x(function(){var n,r,s="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",a=o.getElementsByTagName("body")[0];a&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",a.appendChild(n).appendChild(i),i.innerHTML="",i.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",x.swap(a,null!=a.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===i.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(i,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(i,null)||{width:"4px"}).width,r=i.appendChild(o.createElement("div")),r.style.cssText=i.style.cssText=s,r.style.marginRight=r.style.width="0",i.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),a.removeChild(n))}),t):t}({});var L,q,H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,O=/([A-Z])/g;function F(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=x.expando+Math.random()}F.uid=1,F.accepts=function(e){return e.nodeType?1===e.nodeType||9===e.nodeType:!0},F.prototype={key:function(e){if(!F.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=F.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,x.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,i=this.key(e),o=this.cache[i];if("string"==typeof t)o[t]=n;else if(x.isEmptyObject(o))x.extend(this.cache[i],t);else for(r in t)o[r]=t[r];return o},get:function(e,t){var n=this.cache[this.key(e)];return t===undefined?n:n[t]},access:function(e,t,n){var r;return t===undefined||t&&"string"==typeof t&&n===undefined?(r=this.get(e,t),r!==undefined?r:this.get(e,x.camelCase(t))):(this.set(e,t,n),n!==undefined?n:t)},remove:function(e,t){var n,r,i,o=this.key(e),s=this.cache[o];if(t===undefined)this.cache[o]={};else{x.isArray(t)?r=t.concat(t.map(x.camelCase)):(i=x.camelCase(t),t in s?r=[t,i]:(r=i,r=r in s?[r]:r.match(w)||[])),n=r.length;while(n--)delete s[r[n]]}},hasData:function(e){return!x.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){e[this.expando]&&delete this.cache[e[this.expando]]}},L=new F,q=new F,x.extend({acceptData:F.accepts,hasData:function(e){return L.hasData(e)||q.hasData(e)},data:function(e,t,n){return L.access(e,t,n)},removeData:function(e,t){L.remove(e,t)},_data:function(e,t,n){return q.access(e,t,n)},_removeData:function(e,t){q.remove(e,t)}}),x.fn.extend({data:function(e,t){var n,r,i=this[0],o=0,s=null;if(e===undefined){if(this.length&&(s=L.get(i),1===i.nodeType&&!q.get(i,"hasDataAttrs"))){for(n=i.attributes;n.length>o;o++)r=n[o].name,0===r.indexOf("data-")&&(r=x.camelCase(r.slice(5)),P(i,r,s[r]));q.set(i,"hasDataAttrs",!0)}return s}return"object"==typeof e?this.each(function(){L.set(this,e)}):x.access(this,function(t){var n,r=x.camelCase(e);if(i&&t===undefined){if(n=L.get(i,e),n!==undefined)return n;if(n=L.get(i,r),n!==undefined)return n;if(n=P(i,r,undefined),n!==undefined)return n}else this.each(function(){var n=L.get(this,r);L.set(this,r,t),-1!==e.indexOf("-")&&n!==undefined&&L.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){L.remove(this,e)})}});function P(e,t,n){var r;if(n===undefined&&1===e.nodeType)if(r="data-"+t.replace(O,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:H.test(n)?JSON.parse(n):n}catch(i){}L.set(e,t,n)}else n=undefined;return n}x.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=q.get(e,t),n&&(!r||x.isArray(n)?r=q.access(e,t,x.makeArray(n)):r.push(n)),r||[]):undefined},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),s=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks("once memory").add(function(){q.remove(e,[t+"queue",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t);x._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=undefined),e=e||"fx";while(s--)n=q.get(o[s],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\t\r\n\f]/g,$=/\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,i=0,o=x(this),s=e.match(w)||[];while(t=s[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===r||"boolean"===n)&&(this.className&&q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":q.get(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(W," ").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,x(this).val()):e,null==i?i="":"number"==typeof i?i+="":x.isArray(i)&&(i=x.map(i,function(e){return null==e?"":e+""})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace($,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.bool.test(t)?M:R)),n===undefined?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&"set"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+""),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return o=1!==s||!x.isXMLDoc(e),o&&(t=x.propFix[t]||t,i=x.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||B.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),M={set:function(e,t,n){return t===!1?x.removeAttr(e,n):e.setAttribute(n,n),n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,t){var n=x.expr.attrHandle[t]||x.find.attr;x.expr.attrHandle[t]=function(e,t,r){var i=x.expr.attrHandle[t],o=r?undefined:(x.expr.attrHandle[t]=undefined)!=n(e,t,r)?t.toLowerCase():null;return x.expr.attrHandle[t]=i,o}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,t){return x.isArray(t)?e.checked=x.inArray(x(e).val(),t)>=0:undefined}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var I=/^key/,z=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,X=/^([^.]*)(?:\.(.+)|)$/;function U(){return!0}function Y(){return!1}function V(){try{return o.activeElement}catch(e){}}x.event={global:{},add:function(e,t,n,i,o){var s,a,u,l,c,p,f,h,d,g,m,y=q.get(e);if(y){n.handler&&(s=n,n=s.handler,o=s.selector),n.guid||(n.guid=x.guid++),(l=y.events)||(l=y.events={}),(a=y.handle)||(a=y.handle=function(e){return typeof x===r||e&&x.event.triggered===e.type?undefined:x.event.dispatch.apply(a.elem,arguments)},a.elem=e),t=(t||"").match(w)||[""],c=t.length;while(c--)u=X.exec(t[c])||[],d=m=u[1],g=(u[2]||"").split(".").sort(),d&&(f=x.event.special[d]||{},d=(o?f.delegateType:f.bindType)||d,f=x.event.special[d]||{},p=x.extend({type:d,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&x.expr.match.needsContext.test(o),namespace:g.join(".")},s),(h=l[d])||(h=l[d]=[],h.delegateCount=0,f.setup&&f.setup.call(e,i,g,a)!==!1||e.addEventListener&&e.addEventListener(d,a,!1)),f.add&&(f.add.call(e,p),p.handler.guid||(p.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,p):h.push(p),x.event.global[d]=!0);e=null}},remove:function(e,t,n,r,i){var o,s,a,u,l,c,p,f,h,d,g,m=q.hasData(e)&&q.get(e);if(m&&(u=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(a=X.exec(t[l])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){p=x.event.special[h]||{},h=(r?p.delegateType:p.bindType)||h,f=u[h]||[],a=a[2]&&RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=f.length;while(o--)c=f[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(f.splice(o,1),c.selector&&f.delegateCount--,p.remove&&p.remove.call(e,c));s&&!f.length&&(p.teardown&&p.teardown.call(e,d,m.handle)!==!1||x.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)x.event.remove(e,h+t[l],n,r,!0);x.isEmptyObject(u)&&(delete m.handle,q.remove(e,"events"))}},trigger:function(t,n,r,i){var s,a,u,l,c,p,f,h=[r||o],d=y.call(t,"type")?t.type:t,g=y.call(t,"namespace")?t.namespace.split("."):[];if(a=u=r=r||o,3!==r.nodeType&&8!==r.nodeType&&!_.test(d+x.event.triggered)&&(d.indexOf(".")>=0&&(g=d.split("."),d=g.shift(),g.sort()),c=0>d.indexOf(":")&&"on"+d,t=t[x.expando]?t:new x.Event(d,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join("."),t.namespace_re=t.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=null==n?[t]:x.makeArray(n,[t]),f=x.event.special[d]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!x.isWindow(r)){for(l=f.delegateType||d,_.test(l+d)||(a=a.parentNode);a;a=a.parentNode)h.push(a),u=a;u===(r.ownerDocument||o)&&h.push(u.defaultView||u.parentWindow||e)}s=0;while((a=h[s++])&&!t.isPropagationStopped())t.type=s>1?l:f.bindType||d,p=(q.get(a,"events")||{})[t.type]&&q.get(a,"handle"),p&&p.apply(a,n),p=c&&a[c],p&&x.acceptData(a)&&p.apply&&p.apply(a,n)===!1&&t.preventDefault();return t.type=d,i||t.isDefaultPrevented()||f._default&&f._default.apply(h.pop(),n)!==!1||!x.acceptData(r)||c&&x.isFunction(r[d])&&!x.isWindow(r)&&(u=r[c],u&&(r[c]=null),x.event.triggered=d,r[d](),x.event.triggered=undefined,u&&(r[c]=u)),t.result}},dispatch:function(e){e=x.event.fix(e);var t,n,r,i,o,s=[],a=d.call(arguments),u=(q.get(this,"events")||{})[e.type]||[],l=x.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),t=0;while((i=s[t++])&&!e.isPropagationStopped()){e.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(o.namespace))&&(e.handleObj=o,e.data=o.data,r=((x.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),r!==undefined&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!==this;u=u.parentNode||this)if(u.disabled!==!0||"click"!==e.type){for(r=[],n=0;a>n;n++)o=t[n],i=o.selector+" ",r[i]===undefined&&(r[i]=o.needsContext?x(i,this).index(u)>=0:x.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return t.length>a&&s.push({elem:this,handlers:t.slice(a)}),s},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,i,s=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||o,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||s===undefined||(e.which=1&s?1:2&s?3:4&s?2:0),e}},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,s=e,a=this.fixHooks[i];a||(this.fixHooks[i]=a=z.test(i)?this.mouseHooks:I.test(i)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new x.Event(s),t=r.length;while(t--)n=r[t],e[n]=s[n];return e.target||(e.target=o),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,s):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==V()&&this.focus?(this.focus(),!1):undefined},delegateType:"focusin"},blur:{trigger:function(){return this===V()&&this.blur?(this.blur(),!1):undefined},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&x.nodeName(this,"input")?(this.click(),!1):undefined},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==undefined&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},x.Event=function(e,t){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.getPreventDefault&&e.getPreventDefault()?U:Y):this.type=e,t&&x.extend(this,t),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,undefined):new x.Event(e,t)},x.Event.prototype={isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=U,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=U,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=U,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,t,n,r,i){var o,s;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=undefined);for(s in e)this.on(s,t,n,e[s],i);return this}if(null==n&&null==r?(r=t,n=t=undefined):null==r&&("string"==typeof t?(r=n,n=undefined):(r=n,n=t,t=undefined)),r===!1)r=Y;else if(!r)return this;return 1===i&&(o=r,r=function(e){return x().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=x.guid++)),this.each(function(){x.event.add(this,e,r,n,t)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,x(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return(t===!1||"function"==typeof t)&&(n=t,t=undefined),n===!1&&(n=Y),this.each(function(){x.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?x.event.trigger(e,t,n,!0):undefined}});var G=/^.[^:#\[\.,]*$/,J=/^(?:parents|prev(?:Until|All))/,Q=x.expr.match.needsContext,K={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t=x(e,this),n=t.length;return this.filter(function(){var e=0;for(;n>e;e++)if(x.contains(this,t[e]))return!0})},not:function(e){return this.pushStack(et(this,e||[],!0))},filter:function(e){return this.pushStack(et(this,e||[],!1))},is:function(e){return!!et(this,"string"==typeof e&&Q.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],s=Q.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(s?s.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?g.call(x(e),this[0]):g.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function Z(e,t){while((e=e[t])&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return Z(e,"nextSibling")},prev:function(e){return Z(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return e.contentDocument||x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(K[e]||x.unique(i),J.test(e)&&i.reverse()),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,t,n){var r=[],i=n!==undefined;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&x(e).is(n))break;r.push(e)}return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function et(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(G.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return g.call(t,e)>=0!==n})}var tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,nt=/<([\w:]+)/,rt=/<|&#?\w+;/,it=/<(?:script|style|link)/i,ot=/^(?:checkbox|radio)$/i,st=/checked\s*(?:[^=]|=\s*.checked.)/i,at=/^$|\/(?:java|ecma)script/i,ut=/^true\/(.*)/,lt=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ct={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ct.optgroup=ct.option,ct.tbody=ct.tfoot=ct.colgroup=ct.caption=ct.thead,ct.th=ct.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===undefined?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(mt(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&dt(mt(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++)1===e.nodeType&&(x.cleanData(mt(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!it.test(e)&&!ct[(nt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(tt,"<$1></$2>");try{for(;r>n;n++)t=this[n]||{},1===t.nodeType&&(x.cleanData(mt(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=f.apply([],e);var r,i,o,s,a,u,l=0,c=this.length,p=this,h=c-1,d=e[0],g=x.isFunction(d);if(g||!(1>=c||"string"!=typeof d||x.support.checkClone)&&st.test(d))return this.each(function(r){var i=p.eq(r);g&&(e[0]=d.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(r=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),i=r.firstChild,1===r.childNodes.length&&(r=i),i)){for(o=x.map(mt(r,"script"),ft),s=o.length;c>l;l++)a=r,l!==h&&(a=x.clone(a,!0,!0),s&&x.merge(o,mt(a,"script"))),t.call(this[l],a,l);if(s)for(u=o[o.length-1].ownerDocument,x.map(o,ht),l=0;s>l;l++)a=o[l],at.test(a.type||"")&&!q.access(a,"globalEval")&&x.contains(u,a)&&(a.src?x._evalUrl(a.src):x.globalEval(a.textContent.replace(lt,"")))}return this}}),x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=[],i=x(e),o=i.length-1,s=0;for(;o>=s;s++)n=s===o?this:this.clone(!0),x(i[s])[t](n),h.apply(r,n.get());return this.pushStack(r)}}),x.extend({clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=x.contains(e.ownerDocument,e);if(!(x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(s=mt(a),o=mt(e),r=0,i=o.length;i>r;r++)yt(o[r],s[r]);if(t)if(n)for(o=o||mt(e),s=s||mt(a),r=0,i=o.length;i>r;r++)gt(o[r],s[r]);else gt(e,a);return s=mt(a,"script"),s.length>0&&dt(s,!u&&mt(e,"script")),a},buildFragment:function(e,t,n,r){var i,o,s,a,u,l,c=0,p=e.length,f=t.createDocumentFragment(),h=[];for(;p>c;c++)if(i=e[c],i||0===i)if("object"===x.type(i))x.merge(h,i.nodeType?[i]:i);else if(rt.test(i)){o=o||f.appendChild(t.createElement("div")),s=(nt.exec(i)||["",""])[1].toLowerCase(),a=ct[s]||ct._default,o.innerHTML=a[1]+i.replace(tt,"<$1></$2>")+a[2],l=a[0];while(l--)o=o.lastChild;x.merge(h,o.childNodes),o=f.firstChild,o.textContent=""}else h.push(t.createTextNode(i));f.textContent="",c=0;while(i=h[c++])if((!r||-1===x.inArray(i,r))&&(u=x.contains(i.ownerDocument,i),o=mt(f.appendChild(i),"script"),u&&dt(o),n)){l=0;while(i=o[l++])at.test(i.type||"")&&n.push(i)}return f},cleanData:function(e){var t,n,r,i,o,s,a=x.event.special,u=0;for(;(n=e[u])!==undefined;u++){if(F.accepts(n)&&(o=n[q.expando],o&&(t=q.cache[o]))){if(r=Object.keys(t.events||{}),r.length)for(s=0;(i=r[s])!==undefined;s++)a[i]?x.event.remove(n,i):x.removeEvent(n,i,t.handle);q.cache[o]&&delete q.cache[o]}delete L.cache[n[L.expando]]}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}});function pt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function ft(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function ht(e){var t=ut.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function dt(e,t){var n=e.length,r=0;for(;n>r;r++)q.set(e[r],"globalEval",!t||q.get(t[r],"globalEval"))}function gt(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(q.hasData(e)&&(o=q.access(e),s=q.set(t,o),l=o.events)){delete s.handle,s.events={};for(i in l)for(n=0,r=l[i].length;r>n;n++)x.event.add(t,i,l[i][n])}L.hasData(e)&&(a=L.access(e),u=x.extend({},a),L.set(t,u))}}function mt(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return t===undefined||t&&x.nodeName(e,t)?x.merge([e],n):n}function yt(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ot.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}x.fn.extend({wrapAll:function(e){var t;return x.isFunction(e)?this.each(function(t){x(this).wrapAll(e.call(this,t))}):(this[0]&&(t=x(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var vt,xt,bt=/^(none|table(?!-c[ea]).+)/,wt=/^margin/,Tt=RegExp("^("+b+")(.*)$","i"),Ct=RegExp("^("+b+")(?!px)[a-z%]+$","i"),kt=RegExp("^([+-])=("+b+")","i"),Nt={BODY:"block"},Et={position:"absolute",visibility:"hidden",display:"block"},St={letterSpacing:0,fontWeight:400},jt=["Top","Right","Bottom","Left"],Dt=["Webkit","O","Moz","ms"];function At(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Dt.length;while(i--)if(t=Dt[i]+n,t in e)return t;return r}function Lt(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function qt(t){return e.getComputedStyle(t,null)}function Ht(e,t){var n,r,i,o=[],s=0,a=e.length;for(;a>s;s++)r=e[s],r.style&&(o[s]=q.get(r,"olddisplay"),n=r.style.display,t?(o[s]||"none"!==n||(r.style.display=""),""===r.style.display&&Lt(r)&&(o[s]=q.access(r,"olddisplay",Rt(r.nodeName)))):o[s]||(i=Lt(r),(n&&"none"!==n||!i)&&q.set(r,"olddisplay",i?n:x.css(r,"display"))));for(s=0;a>s;s++)r=e[s],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[s]||"":"none"));return e}x.fn.extend({css:function(e,t){return x.access(this,function(e,t,n){var r,i,o={},s=0;if(x.isArray(t)){for(r=qt(e),i=t.length;i>s;s++)o[t[s]]=x.css(e,t[s],!1,r);return o}return n!==undefined?x.style(e,t,n):x.css(e,t)},e,t,arguments.length>1)},show:function(){return Ht(this,!0)},hide:function(){return Ht(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Lt(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=vt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=x.camelCase(t),u=e.style;return t=x.cssProps[a]||(x.cssProps[a]=At(u,a)),s=x.cssHooks[t]||x.cssHooks[a],n===undefined?s&&"get"in s&&(i=s.get(e,!1,r))!==undefined?i:u[t]:(o=typeof n,"string"===o&&(i=kt.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(x.css(e,t)),o="number"),null==n||"number"===o&&isNaN(n)||("number"!==o||x.cssNumber[a]||(n+="px"),x.support.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),s&&"set"in s&&(n=s.set(e,n,r))===undefined||(u[t]=n)),undefined)}},css:function(e,t,n,r){var i,o,s,a=x.camelCase(t);return t=x.cssProps[a]||(x.cssProps[a]=At(e.style,a)),s=x.cssHooks[t]||x.cssHooks[a],s&&"get"in s&&(i=s.get(e,!0,n)),i===undefined&&(i=vt(e,t,r)),"normal"===i&&t in St&&(i=St[t]),""===n||n?(o=parseFloat(i),n===!0||x.isNumeric(o)?o||0:i):i}}),vt=function(e,t,n){var r,i,o,s=n||qt(e),a=s?s.getPropertyValue(t)||s[t]:undefined,u=e.style;return s&&(""!==a||x.contains(e.ownerDocument,e)||(a=x.style(e,t)),Ct.test(a)&&wt.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=s.width,u.width=r,u.minWidth=i,u.maxWidth=o)),a};function Ot(e,t,n){var r=Tt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function Ft(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,s=0;for(;4>o;o+=2)"margin"===n&&(s+=x.css(e,n+jt[o],!0,i)),r?("content"===n&&(s-=x.css(e,"padding"+jt[o],!0,i)),"margin"!==n&&(s-=x.css(e,"border"+jt[o]+"Width",!0,i))):(s+=x.css(e,"padding"+jt[o],!0,i),"padding"!==n&&(s+=x.css(e,"border"+jt[o]+"Width",!0,i)));return s}function Pt(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=qt(e),s=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=vt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Ct.test(i))return i;r=s&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+Ft(e,t,n||(s?"border":"content"),r,o)+"px"}function Rt(e){var t=o,n=Nt[e];return n||(n=Mt(e,t),"none"!==n&&n||(xt=(xt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(xt[0].contentWindow||xt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=Mt(e,t),xt.detach()),Nt[e]=n),n}function Mt(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,t){x.cssHooks[t]={get:function(e,n,r){return n?0===e.offsetWidth&&bt.test(x.css(e,"display"))?x.swap(e,Et,function(){return Pt(e,t,r)}):Pt(e,t,r):undefined},set:function(e,n,r){var i=r&&qt(e);return Ot(e,n,r?Ft(e,t,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,t){return t?x.swap(e,{display:"inline-block"},vt,[e,"marginRight"]):undefined}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,t){x.cssHooks[t]={get:function(e,n){return n?(n=vt(e,t),Ct.test(n)?x(e).position()[t]+"px":n):undefined}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+jt[r]+t]=o[r]||o[r-2]||o[0];return i}},wt.test(e)||(x.cssHooks[e+t].set=Ot)});var Wt=/%20/g,$t=/\[\]$/,Bt=/\r?\n/g,It=/^(?:submit|button|image|reset|file)$/i,zt=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&zt.test(this.nodeName)&&!It.test(e)&&(this.checked||!ot.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(Bt,"\r\n")}}):{name:t.name,value:n.replace(Bt,"\r\n")}}).get()}}),x.param=function(e,t){var n,r=[],i=function(e,t){t=x.isFunction(t)?t():null==t?"":t,r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(t===undefined&&(t=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){i(this.name,this.value)});else for(n in e)_t(n,e[n],t,i);return r.join("&").replace(Wt,"+")};function _t(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||$t.test(e)?r(e,i):_t(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)_t(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var Xt,Ut,Yt=x.now(),Vt=/\?/,Gt=/#.*$/,Jt=/([?&])_=[^&]*/,Qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Kt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Zt=/^(?:GET|HEAD)$/,en=/^\/\//,tn=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,nn=x.fn.load,rn={},on={},sn="*/".concat("*");try{Ut=i.href}catch(an){Ut=o.createElement("a"),Ut.href="",Ut=Ut.href}Xt=tn.exec(Ut.toLowerCase())||[];function un(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function ln(e,t,n,r){var i={},o=e===on;function s(a){var u;return i[a]=!0,x.each(e[a]||[],function(e,a){var l=a(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):undefined:(t.dataTypes.unshift(l),s(l),!1)}),u}return s(t.dataTypes[0])||!i["*"]&&s("*")}function cn(e,t){var n,r,i=x.ajaxSettings.flatOptions||{};for(n in t)t[n]!==undefined&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,t,n){if("string"!=typeof e&&nn)return nn.apply(this,arguments);var r,i,o,s=this,a=e.indexOf(" ");return a>=0&&(r=e.slice(a),e=e.slice(0,a)),x.isFunction(t)?(n=t,t=undefined):t&&"object"==typeof t&&(i="POST"),s.length>0&&x.ajax({url:e,type:i,dataType:"html",data:t}).done(function(e){o=arguments,s.html(r?x("<div>").append(x.parseHTML(e)).find(r):e)}).complete(n&&function(e,t){s.each(n,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ut,type:"GET",isLocal:Kt.test(Xt[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":sn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?cn(cn(e,x.ajaxSettings),t):cn(x.ajaxSettings,e)},ajaxPrefilter:un(rn),ajaxTransport:un(on),ajax:function(e,t){"object"==typeof e&&(t=e,e=undefined),t=t||{};var n,r,i,o,s,a,u,l,c=x.ajaxSetup({},t),p=c.context||c,f=c.context&&(p.nodeType||p.jquery)?x(p):x.event,h=x.Deferred(),d=x.Callbacks("once memory"),g=c.statusCode||{},m={},y={},v=0,b="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(2===v){if(!o){o={};while(t=Qt.exec(i))o[t[1].toLowerCase()]=t[2]}t=o[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===v?i:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return v||(e=y[n]=y[n]||e,m[e]=t),this},overrideMimeType:function(e){return v||(c.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>v)for(t in e)g[t]=[g[t],e[t]];else T.always(e[T.status]);return this},abort:function(e){var t=e||b;return n&&n.abort(t),k(0,t),this}};if(h.promise(T).complete=d.add,T.success=T.done,T.error=T.fail,c.url=((e||c.url||Ut)+"").replace(Gt,"").replace(en,Xt[1]+"//"),c.type=t.method||t.type||c.method||c.type,c.dataTypes=x.trim(c.dataType||"*").toLowerCase().match(w)||[""],null==c.crossDomain&&(a=tn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===Xt[1]&&a[2]===Xt[2]&&(a[3]||("http:"===a[1]?"80":"443"))===(Xt[3]||("http:"===Xt[1]?"80":"443")))),c.data&&c.processData&&"string"!=typeof c.data&&(c.data=x.param(c.data,c.traditional)),ln(rn,c,t,T),2===v)return T;u=c.global,u&&0===x.active++&&x.event.trigger("ajaxStart"),c.type=c.type.toUpperCase(),c.hasContent=!Zt.test(c.type),r=c.url,c.hasContent||(c.data&&(r=c.url+=(Vt.test(r)?"&":"?")+c.data,delete c.data),c.cache===!1&&(c.url=Jt.test(r)?r.replace(Jt,"$1_="+Yt++):r+(Vt.test(r)?"&":"?")+"_="+Yt++)),c.ifModified&&(x.lastModified[r]&&T.setRequestHeader("If-Modified-Since",x.lastModified[r]),x.etag[r]&&T.setRequestHeader("If-None-Match",x.etag[r])),(c.data&&c.hasContent&&c.contentType!==!1||t.contentType)&&T.setRequestHeader("Content-Type",c.contentType),T.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+("*"!==c.dataTypes[0]?", "+sn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)T.setRequestHeader(l,c.headers[l]);if(c.beforeSend&&(c.beforeSend.call(p,T,c)===!1||2===v))return T.abort();b="abort";for(l in{success:1,error:1,complete:1})T[l](c[l]);if(n=ln(on,c,t,T)){T.readyState=1,u&&f.trigger("ajaxSend",[T,c]),c.async&&c.timeout>0&&(s=setTimeout(function(){T.abort("timeout")},c.timeout));try{v=1,n.send(m,k)}catch(C){if(!(2>v))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,t,o,a){var l,m,y,b,w,C=t;2!==v&&(v=2,s&&clearTimeout(s),n=undefined,i=a||"",T.readyState=e>0?4:0,l=e>=200&&300>e||304===e,o&&(b=pn(c,T,o)),b=fn(c,b,T,l),l?(c.ifModified&&(w=T.getResponseHeader("Last-Modified"),w&&(x.lastModified[r]=w),w=T.getResponseHeader("etag"),w&&(x.etag[r]=w)),204===e||"HEAD"===c.type?C="nocontent":304===e?C="notmodified":(C=b.state,m=b.data,y=b.error,l=!y)):(y=C,(e||!C)&&(C="error",0>e&&(e=0))),T.status=e,T.statusText=(t||C)+"",l?h.resolveWith(p,[m,C,T]):h.rejectWith(p,[T,C,y]),T.statusCode(g),g=undefined,u&&f.trigger(l?"ajaxSuccess":"ajaxError",[T,c,l?m:y]),d.fireWith(p,[T,C]),u&&(f.trigger("ajaxComplete",[T,c]),--x.active||x.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,t){return x.get(e,undefined,t,"script")}}),x.each(["get","post"],function(e,t){x[t]=function(e,n,r,i){return x.isFunction(n)&&(i=i||r,r=n,n=undefined),x.ajax({url:e,type:t,dataType:i,data:n,success:r})}});function pn(e,t,n){var r,i,o,s,a=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),r===undefined&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in a)if(a[i]&&a[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}s||(s=i)}o=o||s}return o?(o!==u[0]&&u.unshift(o),n[o]):undefined}function fn(e,t,n,r){var i,o,s,a,u,l={},c=e.dataTypes.slice();if(c[1])for(s in e.converters)l[s.toLowerCase()]=e.converters[s];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(s=l[u+" "+o]||l["* "+o],!s)for(i in l)if(a=i.split(" "),a[1]===o&&(s=l[u+" "+a[0]]||l["* "+a[0]])){s===!0?s=l[i]:l[i]!==!0&&(o=a[0],c.unshift(a[1]));break}if(s!==!0)if(s&&e["throws"])t=s(t);else try{t=s(t)}catch(p){return{state:"parsererror",error:s?p:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===undefined&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),x.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=x("<script>").prop({async:!0,charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&i("error"===e.type?404:200,e.type)}),o.head.appendChild(t[0])},abort:function(){n&&n()}}}});var hn=[],dn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=hn.pop()||x.expando+"_"+Yt++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,s,a=t.jsonp!==!1&&(dn.test(t.url)?"url":"string"==typeof t.data&&!(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&dn.test(t.data)&&"data");return a||"jsonp"===t.dataTypes[0]?(i=t.jsonpCallback=x.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,a?t[a]=t[a].replace(dn,"$1"+i):t.jsonp!==!1&&(t.url+=(Vt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return s||x.error(i+" was not called"),s[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){s=arguments},r.always(function(){e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,hn.push(i)),s&&x.isFunction(o)&&o(s[0]),s=o=undefined}),"script"):undefined}),x.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(e){}};var gn=x.ajaxSettings.xhr(),mn={0:200,1223:204},yn=0,vn={};e.ActiveXObject&&x(e).on("unload",function(){for(var e in vn)vn[e]();vn=undefined}),x.support.cors=!!gn&&"withCredentials"in gn,x.support.ajax=gn=!!gn,x.ajaxTransport(function(e){var t;return x.support.cors||gn&&!e.crossDomain?{send:function(n,r){var i,o,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(i in e.xhrFields)s[i]=e.xhrFields[i];e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest");for(i in n)s.setRequestHeader(i,n[i]);t=function(e){return function(){t&&(delete vn[o],t=s.onload=s.onerror=null,"abort"===e?s.abort():"error"===e?r(s.status||404,s.statusText):r(mn[s.status]||s.status,s.statusText,"string"==typeof s.responseText?{text:s.responseText}:undefined,s.getAllResponseHeaders()))}},s.onload=t(),s.onerror=t("error"),t=vn[o=yn++]=t("abort"),s.send(e.hasContent&&e.data||null)},abort:function(){t&&t()}}:undefined});var xn,bn,wn=/^(?:toggle|show|hide)$/,Tn=RegExp("^(?:([+-])=|)("+b+")([a-z%]*)$","i"),Cn=/queueHooks$/,kn=[An],Nn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Tn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),s=(x.cssNumber[e]||"px"!==o&&+r)&&Tn.exec(x.css(n.elem,e)),a=1,u=20;if(s&&s[3]!==o){o=o||s[3],i=i||[],s=+r||1;do a=a||".5",s/=a,x.style(n.elem,e,s+o);while(a!==(a=n.cur()/r)&&1!==a&&--u)}return i&&(s=n.start=+s||+r||0,n.unit=o,n.end=i[1]?s+(i[1]+1)*i[2]:+i[2]),n}]};function En(){return setTimeout(function(){xn=undefined}),xn=x.now()}function Sn(e,t,n){var r,i=(Nn[t]||[]).concat(Nn["*"]),o=0,s=i.length;for(;s>o;o++)if(r=i[o].call(n,t,e))return r}function jn(e,t,n){var r,i,o=0,s=kn.length,a=x.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=xn||En(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,s=0,u=l.tweens.length;for(;u>s;s++)l.tweens[s].run(o);return a.notifyWith(e,[l,o,n]),1>o&&u?n:(a.resolveWith(e,[l]),!1)},l=a.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:xn||En(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?a.resolveWith(e,[l,t]):a.rejectWith(e,[l,t]),this}}),c=l.props;for(Dn(c,l.opts.specialEasing);s>o;o++)if(r=kn[o].call(l,e,c,l.opts))return r;return x.map(c,Sn,l),x.isFunction(l.opts.start)&&l.opts.start.call(e,l),x.fx.timer(x.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function Dn(e,t){var n,r,i,o,s;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),s=x.cssHooks[r],s&&"expand"in s){o=s.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(jn,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Nn[n]=Nn[n]||[],Nn[n].unshift(t)},prefilter:function(e,t){t?kn.unshift(e):kn.push(e)}});function An(e,t,n){var r,i,o,s,a,u,l=this,c={},p=e.style,f=e.nodeType&&Lt(e),h=q.get(e,"fxshow");n.queue||(a=x._queueHooks(e,"fx"),null==a.unqueued&&(a.unqueued=0,u=a.empty.fire,a.empty.fire=function(){a.unqueued||u()}),a.unqueued++,l.always(function(){l.always(function(){a.unqueued--,x.queue(e,"fx").length||a.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(p.display="inline-block")),n.overflow&&(p.overflow="hidden",l.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],wn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show")){if("show"!==i||!h||h[r]===undefined)continue;f=!0}c[r]=h&&h[r]||x.style(e,r)}if(!x.isEmptyObject(c)){h?"hidden"in h&&(f=h.hidden):h=q.access(e,"fxshow",{}),o&&(h.hidden=!f),f?x(e).show():l.done(function(){x(e).hide()}),l.done(function(){var t;q.remove(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)s=Sn(f?h[r]:0,r,l),r in h||(h[r]=s.start,f&&(s.end=s.start,s.start="width"===r||"height"===r?1:0))}}function Ln(e,t,n,r,i){return new Ln.prototype.init(e,t,n,r,i)}x.Tween=Ln,Ln.prototype={constructor:Ln,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=Ln.propHooks[this.prop];return e&&e.get?e.get(this):Ln.propHooks._default.get(this)},run:function(e){var t,n=Ln.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ln.propHooks._default.set(this),this}},Ln.prototype.init.prototype=Ln.prototype,Ln.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Ln.propHooks.scrollTop=Ln.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(qn(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Lt).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),s=function(){var t=jn(this,x.extend({},e),o);(i||q.get(this,"finish"))&&t.stop(!0)};return s.finish=s,i||o.queue===!1?this.each(s):this.queue(o.queue,s)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=undefined),t&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=x.timers,s=q.get(this);if(i)s[i]&&s[i].stop&&r(s[i]);else for(i in s)s[i]&&s[i].stop&&Cn.test(i)&&r(s[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));(t||!n)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=q.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,s=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;s>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function qn(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=jt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:qn("show"),slideUp:qn("hide"),slideToggle:qn("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=Ln.prototype.init,x.fx.tick=function(){var e,t=x.timers,n=0;for(xn=x.now();t.length>n;n++)e=t[n],e()||t[n]!==e||t.splice(n--,1);t.length||x.fx.stop(),xn=undefined},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){bn||(bn=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(bn),bn=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===undefined?this:this.each(function(t){x.offset.setOffset(this,e,t)});var t,n,i=this[0],o={top:0,left:0},s=i&&i.ownerDocument;if(s)return t=s.documentElement,x.contains(t,i)?(typeof i.getBoundingClientRect!==r&&(o=i.getBoundingClientRect()),n=Hn(s),{top:o.top+n.pageYOffset-t.clientTop,left:o.left+n.pageXOffset-t.clientLeft}):o},x.offset={setOffset:function(e,t,n){var r,i,o,s,a,u,l,c=x.css(e,"position"),p=x(e),f={};"static"===c&&(e.style.position="relative"),a=p.offset(),o=x.css(e,"top"),u=x.css(e,"left"),l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1,l?(r=p.position(),s=r.top,i=r.left):(s=parseFloat(o)||0,i=parseFloat(u)||0),x.isFunction(t)&&(t=t.call(e,n,a)),null!=t.top&&(f.top=t.top-a.top+s),null!=t.left&&(f.left=t.left-a.left+i),"using"in t?t.using.call(e,f):p.css(f)}},x.fn.extend({position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return"fixed"===x.css(n,"position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(r=e.offset()),r.top+=x.css(e[0],"borderTopWidth",!0),r.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-r.top-x.css(n,"marginTop",!0),left:t.left-r.left-x.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,n){var r="pageYOffset"===n;x.fn[t]=function(i){return x.access(this,function(t,i,o){var s=Hn(t);return o===undefined?s?s[n]:t[i]:(s?s.scrollTo(r?e.pageXOffset:o,r?o:e.pageYOffset):t[i]=o,undefined)},t,i,arguments.length,null)}});function Hn(e){return x.isWindow(e)?e:9===e.nodeType&&e.defaultView}x.each({Height:"height",Width:"width"},function(e,t){x.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){x.fn[r]=function(r,i){var o=arguments.length&&(n||"boolean"!=typeof r),s=n||(r===!0||i===!0?"margin":"border");return x.access(this,function(t,n,r){var i;return x.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):r===undefined?x.css(t,n,s):x.style(t,n,r,s)},t,o?r:undefined,o,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}),"object"==typeof e&&"object"==typeof e.document&&(e.jQuery=e.$=x)})(window); \ No newline at end of file
diff --git a/app/Resources/views/_global/public/js/jquery-ui-1.10.4.custom.js b/app/Resources/views/_global/public/js/jquery-ui-1.10.4.custom.js
new file mode 100644
index 00000000..6f599fca
--- /dev/null
+++ b/app/Resources/views/_global/public/js/jquery-ui-1.10.4.custom.js
@@ -0,0 +1,2519 @@
1/*! jQuery UI - v1.10.4 - 2014-03-08
2* http://jqueryui.com
3* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.position.js, jquery.ui.autocomplete.js, jquery.ui.menu.js
4* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
5
6(function( $, undefined ) {
7
8var uuid = 0,
9 runiqueId = /^ui-id-\d+$/;
10
11// $.ui might exist from components with no dependencies, e.g., $.ui.position
12$.ui = $.ui || {};
13
14$.extend( $.ui, {
15 version: "1.10.4",
16
17 keyCode: {
18 BACKSPACE: 8,
19 COMMA: 188,
20 DELETE: 46,
21 DOWN: 40,
22 END: 35,
23 ENTER: 13,
24 ESCAPE: 27,
25 HOME: 36,
26 LEFT: 37,
27 NUMPAD_ADD: 107,
28 NUMPAD_DECIMAL: 110,
29 NUMPAD_DIVIDE: 111,
30 NUMPAD_ENTER: 108,
31 NUMPAD_MULTIPLY: 106,
32 NUMPAD_SUBTRACT: 109,
33 PAGE_DOWN: 34,
34 PAGE_UP: 33,
35 PERIOD: 190,
36 RIGHT: 39,
37 SPACE: 32,
38 TAB: 9,
39 UP: 38
40 }
41});
42
43// plugins
44$.fn.extend({
45 focus: (function( orig ) {
46 return function( delay, fn ) {
47 return typeof delay === "number" ?
48 this.each(function() {
49 var elem = this;
50 setTimeout(function() {
51 $( elem ).focus();
52 if ( fn ) {
53 fn.call( elem );
54 }
55 }, delay );
56 }) :
57 orig.apply( this, arguments );
58 };
59 })( $.fn.focus ),
60
61 scrollParent: function() {
62 var scrollParent;
63 if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
64 scrollParent = this.parents().filter(function() {
65 return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
66 }).eq(0);
67 } else {
68 scrollParent = this.parents().filter(function() {
69 return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
70 }).eq(0);
71 }
72
73 return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
74 },
75
76 zIndex: function( zIndex ) {
77 if ( zIndex !== undefined ) {
78 return this.css( "zIndex", zIndex );
79 }
80
81 if ( this.length ) {
82 var elem = $( this[ 0 ] ), position, value;
83 while ( elem.length && elem[ 0 ] !== document ) {
84 // Ignore z-index if position is set to a value where z-index is ignored by the browser
85 // This makes behavior of this function consistent across browsers
86 // WebKit always returns auto if the element is positioned
87 position = elem.css( "position" );
88 if ( position === "absolute" || position === "relative" || position === "fixed" ) {
89 // IE returns 0 when zIndex is not specified
90 // other browsers return a string
91 // we ignore the case of nested elements with an explicit value of 0
92 // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
93 value = parseInt( elem.css( "zIndex" ), 10 );
94 if ( !isNaN( value ) && value !== 0 ) {
95 return value;
96 }
97 }
98 elem = elem.parent();
99 }
100 }
101
102 return 0;
103 },
104
105 uniqueId: function() {
106 return this.each(function() {
107 if ( !this.id ) {
108 this.id = "ui-id-" + (++uuid);
109 }
110 });
111 },
112
113 removeUniqueId: function() {
114 return this.each(function() {
115 if ( runiqueId.test( this.id ) ) {
116 $( this ).removeAttr( "id" );
117 }
118 });
119 }
120});
121
122// selectors
123function focusable( element, isTabIndexNotNaN ) {
124 var map, mapName, img,
125 nodeName = element.nodeName.toLowerCase();
126 if ( "area" === nodeName ) {
127 map = element.parentNode;
128 mapName = map.name;
129 if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
130 return false;
131 }
132 img = $( "img[usemap=#" + mapName + "]" )[0];
133 return !!img && visible( img );
134 }
135 return ( /input|select|textarea|button|object/.test( nodeName ) ?
136 !element.disabled :
137 "a" === nodeName ?
138 element.href || isTabIndexNotNaN :
139 isTabIndexNotNaN) &&
140 // the element and all of its ancestors must be visible
141 visible( element );
142}
143
144function visible( element ) {
145 return $.expr.filters.visible( element ) &&
146 !$( element ).parents().addBack().filter(function() {
147 return $.css( this, "visibility" ) === "hidden";
148 }).length;
149}
150
151$.extend( $.expr[ ":" ], {
152 data: $.expr.createPseudo ?
153 $.expr.createPseudo(function( dataName ) {
154 return function( elem ) {
155 return !!$.data( elem, dataName );
156 };
157 }) :
158 // support: jQuery <1.8
159 function( elem, i, match ) {
160 return !!$.data( elem, match[ 3 ] );
161 },
162
163 focusable: function( element ) {
164 return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
165 },
166
167 tabbable: function( element ) {
168 var tabIndex = $.attr( element, "tabindex" ),
169 isTabIndexNaN = isNaN( tabIndex );
170 return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
171 }
172});
173
174// support: jQuery <1.8
175if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
176 $.each( [ "Width", "Height" ], function( i, name ) {
177 var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
178 type = name.toLowerCase(),
179 orig = {
180 innerWidth: $.fn.innerWidth,
181 innerHeight: $.fn.innerHeight,
182 outerWidth: $.fn.outerWidth,
183 outerHeight: $.fn.outerHeight
184 };
185
186 function reduce( elem, size, border, margin ) {
187 $.each( side, function() {
188 size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
189 if ( border ) {
190 size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
191 }
192 if ( margin ) {
193 size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
194 }
195 });
196 return size;
197 }
198
199 $.fn[ "inner" + name ] = function( size ) {
200 if ( size === undefined ) {
201 return orig[ "inner" + name ].call( this );
202 }
203
204 return this.each(function() {
205 $( this ).css( type, reduce( this, size ) + "px" );
206 });
207 };
208
209 $.fn[ "outer" + name] = function( size, margin ) {
210 if ( typeof size !== "number" ) {
211 return orig[ "outer" + name ].call( this, size );
212 }
213
214 return this.each(function() {
215 $( this).css( type, reduce( this, size, true, margin ) + "px" );
216 });
217 };
218 });
219}
220
221// support: jQuery <1.8
222if ( !$.fn.addBack ) {
223 $.fn.addBack = function( selector ) {
224 return this.add( selector == null ?
225 this.prevObject : this.prevObject.filter( selector )
226 );
227 };
228}
229
230// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
231if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
232 $.fn.removeData = (function( removeData ) {
233 return function( key ) {
234 if ( arguments.length ) {
235 return removeData.call( this, $.camelCase( key ) );
236 } else {
237 return removeData.call( this );
238 }
239 };
240 })( $.fn.removeData );
241}
242
243
244
245
246
247// deprecated
248$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
249
250$.support.selectstart = "onselectstart" in document.createElement( "div" );
251$.fn.extend({
252 disableSelection: function() {
253 return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
254 ".ui-disableSelection", function( event ) {
255 event.preventDefault();
256 });
257 },
258
259 enableSelection: function() {
260 return this.unbind( ".ui-disableSelection" );
261 }
262});
263
264$.extend( $.ui, {
265 // $.ui.plugin is deprecated. Use $.widget() extensions instead.
266 plugin: {
267 add: function( module, option, set ) {
268 var i,
269 proto = $.ui[ module ].prototype;
270 for ( i in set ) {
271 proto.plugins[ i ] = proto.plugins[ i ] || [];
272 proto.plugins[ i ].push( [ option, set[ i ] ] );
273 }
274 },
275 call: function( instance, name, args ) {
276 var i,
277 set = instance.plugins[ name ];
278 if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
279 return;
280 }
281
282 for ( i = 0; i < set.length; i++ ) {
283 if ( instance.options[ set[ i ][ 0 ] ] ) {
284 set[ i ][ 1 ].apply( instance.element, args );
285 }
286 }
287 }
288 },
289
290 // only used by resizable
291 hasScroll: function( el, a ) {
292
293 //If overflow is hidden, the element might have extra content, but the user wants to hide it
294 if ( $( el ).css( "overflow" ) === "hidden") {
295 return false;
296 }
297
298 var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
299 has = false;
300
301 if ( el[ scroll ] > 0 ) {
302 return true;
303 }
304
305 // TODO: determine which cases actually cause this to happen
306 // if the element doesn't have the scroll set, see if it's possible to
307 // set the scroll
308 el[ scroll ] = 1;
309 has = ( el[ scroll ] > 0 );
310 el[ scroll ] = 0;
311 return has;
312 }
313});
314
315})( jQuery );
316(function( $, undefined ) {
317
318var uuid = 0,
319 slice = Array.prototype.slice,
320 _cleanData = $.cleanData;
321$.cleanData = function( elems ) {
322 for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
323 try {
324 $( elem ).triggerHandler( "remove" );
325 // http://bugs.jquery.com/ticket/8235
326 } catch( e ) {}
327 }
328 _cleanData( elems );
329};
330
331$.widget = function( name, base, prototype ) {
332 var fullName, existingConstructor, constructor, basePrototype,
333 // proxiedPrototype allows the provided prototype to remain unmodified
334 // so that it can be used as a mixin for multiple widgets (#8876)
335 proxiedPrototype = {},
336 namespace = name.split( "." )[ 0 ];
337
338 name = name.split( "." )[ 1 ];
339 fullName = namespace + "-" + name;
340
341 if ( !prototype ) {
342 prototype = base;
343 base = $.Widget;
344 }
345
346 // create selector for plugin
347 $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
348 return !!$.data( elem, fullName );
349 };
350
351 $[ namespace ] = $[ namespace ] || {};
352 existingConstructor = $[ namespace ][ name ];
353 constructor = $[ namespace ][ name ] = function( options, element ) {
354 // allow instantiation without "new" keyword
355 if ( !this._createWidget ) {
356 return new constructor( options, element );
357 }
358
359 // allow instantiation without initializing for simple inheritance
360 // must use "new" keyword (the code above always passes args)
361 if ( arguments.length ) {
362 this._createWidget( options, element );
363 }
364 };
365 // extend with the existing constructor to carry over any static properties
366 $.extend( constructor, existingConstructor, {
367 version: prototype.version,
368 // copy the object used to create the prototype in case we need to
369 // redefine the widget later
370 _proto: $.extend( {}, prototype ),
371 // track widgets that inherit from this widget in case this widget is
372 // redefined after a widget inherits from it
373 _childConstructors: []
374 });
375
376 basePrototype = new base();
377 // we need to make the options hash a property directly on the new instance
378 // otherwise we'll modify the options hash on the prototype that we're
379 // inheriting from
380 basePrototype.options = $.widget.extend( {}, basePrototype.options );
381 $.each( prototype, function( prop, value ) {
382 if ( !$.isFunction( value ) ) {
383 proxiedPrototype[ prop ] = value;
384 return;
385 }
386 proxiedPrototype[ prop ] = (function() {
387 var _super = function() {
388 return base.prototype[ prop ].apply( this, arguments );
389 },
390 _superApply = function( args ) {
391 return base.prototype[ prop ].apply( this, args );
392 };
393 return function() {
394 var __super = this._super,
395 __superApply = this._superApply,
396 returnValue;
397
398 this._super = _super;
399 this._superApply = _superApply;
400
401 returnValue = value.apply( this, arguments );
402
403 this._super = __super;
404 this._superApply = __superApply;
405
406 return returnValue;
407 };
408 })();
409 });
410 constructor.prototype = $.widget.extend( basePrototype, {
411 // TODO: remove support for widgetEventPrefix
412 // always use the name + a colon as the prefix, e.g., draggable:start
413 // don't prefix for widgets that aren't DOM-based
414 widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
415 }, proxiedPrototype, {
416 constructor: constructor,
417 namespace: namespace,
418 widgetName: name,
419 widgetFullName: fullName
420 });
421
422 // If this widget is being redefined then we need to find all widgets that
423 // are inheriting from it and redefine all of them so that they inherit from
424 // the new version of this widget. We're essentially trying to replace one
425 // level in the prototype chain.
426 if ( existingConstructor ) {
427 $.each( existingConstructor._childConstructors, function( i, child ) {
428 var childPrototype = child.prototype;
429
430 // redefine the child widget using the same prototype that was
431 // originally used, but inherit from the new version of the base
432 $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
433 });
434 // remove the list of existing child constructors from the old constructor
435 // so the old child constructors can be garbage collected
436 delete existingConstructor._childConstructors;
437 } else {
438 base._childConstructors.push( constructor );
439 }
440
441 $.widget.bridge( name, constructor );
442};
443
444$.widget.extend = function( target ) {
445 var input = slice.call( arguments, 1 ),
446 inputIndex = 0,
447 inputLength = input.length,
448 key,
449 value;
450 for ( ; inputIndex < inputLength; inputIndex++ ) {
451 for ( key in input[ inputIndex ] ) {
452 value = input[ inputIndex ][ key ];
453 if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
454 // Clone objects
455 if ( $.isPlainObject( value ) ) {
456 target[ key ] = $.isPlainObject( target[ key ] ) ?
457 $.widget.extend( {}, target[ key ], value ) :
458 // Don't extend strings, arrays, etc. with objects
459 $.widget.extend( {}, value );
460 // Copy everything else by reference
461 } else {
462 target[ key ] = value;
463 }
464 }
465 }
466 }
467 return target;
468};
469
470$.widget.bridge = function( name, object ) {
471 var fullName = object.prototype.widgetFullName || name;
472 $.fn[ name ] = function( options ) {
473 var isMethodCall = typeof options === "string",
474 args = slice.call( arguments, 1 ),
475 returnValue = this;
476
477 // allow multiple hashes to be passed on init
478 options = !isMethodCall && args.length ?
479 $.widget.extend.apply( null, [ options ].concat(args) ) :
480 options;
481
482 if ( isMethodCall ) {
483 this.each(function() {
484 var methodValue,
485 instance = $.data( this, fullName );
486 if ( !instance ) {
487 return $.error( "cannot call methods on " + name + " prior to initialization; " +
488 "attempted to call method '" + options + "'" );
489 }
490 if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
491 return $.error( "no such method '" + options + "' for " + name + " widget instance" );
492 }
493 methodValue = instance[ options ].apply( instance, args );
494 if ( methodValue !== instance && methodValue !== undefined ) {
495 returnValue = methodValue && methodValue.jquery ?
496 returnValue.pushStack( methodValue.get() ) :
497 methodValue;
498 return false;
499 }
500 });
501 } else {
502 this.each(function() {
503 var instance = $.data( this, fullName );
504 if ( instance ) {
505 instance.option( options || {} )._init();
506 } else {
507 $.data( this, fullName, new object( options, this ) );
508 }
509 });
510 }
511
512 return returnValue;
513 };
514};
515
516$.Widget = function( /* options, element */ ) {};
517$.Widget._childConstructors = [];
518
519$.Widget.prototype = {
520 widgetName: "widget",
521 widgetEventPrefix: "",
522 defaultElement: "<div>",
523 options: {
524 disabled: false,
525
526 // callbacks
527 create: null
528 },
529 _createWidget: function( options, element ) {
530 element = $( element || this.defaultElement || this )[ 0 ];
531 this.element = $( element );
532 this.uuid = uuid++;
533 this.eventNamespace = "." + this.widgetName + this.uuid;
534 this.options = $.widget.extend( {},
535 this.options,
536 this._getCreateOptions(),
537 options );
538
539 this.bindings = $();
540 this.hoverable = $();
541 this.focusable = $();
542
543 if ( element !== this ) {
544 $.data( element, this.widgetFullName, this );
545 this._on( true, this.element, {
546 remove: function( event ) {
547 if ( event.target === element ) {
548 this.destroy();
549 }
550 }
551 });
552 this.document = $( element.style ?
553 // element within the document
554 element.ownerDocument :
555 // element is window or document
556 element.document || element );
557 this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
558 }
559
560 this._create();
561 this._trigger( "create", null, this._getCreateEventData() );
562 this._init();
563 },
564 _getCreateOptions: $.noop,
565 _getCreateEventData: $.noop,
566 _create: $.noop,
567 _init: $.noop,
568
569 destroy: function() {
570 this._destroy();
571 // we can probably remove the unbind calls in 2.0
572 // all event bindings should go through this._on()
573 this.element
574 .unbind( this.eventNamespace )
575 // 1.9 BC for #7810
576 // TODO remove dual storage
577 .removeData( this.widgetName )
578 .removeData( this.widgetFullName )
579 // support: jquery <1.6.3
580 // http://bugs.jquery.com/ticket/9413
581 .removeData( $.camelCase( this.widgetFullName ) );
582 this.widget()
583 .unbind( this.eventNamespace )
584 .removeAttr( "aria-disabled" )
585 .removeClass(
586 this.widgetFullName + "-disabled " +
587 "ui-state-disabled" );
588
589 // clean up events and states
590 this.bindings.unbind( this.eventNamespace );
591 this.hoverable.removeClass( "ui-state-hover" );
592 this.focusable.removeClass( "ui-state-focus" );
593 },
594 _destroy: $.noop,
595
596 widget: function() {
597 return this.element;
598 },
599
600 option: function( key, value ) {
601 var options = key,
602 parts,
603 curOption,
604 i;
605
606 if ( arguments.length === 0 ) {
607 // don't return a reference to the internal hash
608 return $.widget.extend( {}, this.options );
609 }
610
611 if ( typeof key === "string" ) {
612 // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
613 options = {};
614 parts = key.split( "." );
615 key = parts.shift();
616 if ( parts.length ) {
617 curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
618 for ( i = 0; i < parts.length - 1; i++ ) {
619 curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
620 curOption = curOption[ parts[ i ] ];
621 }
622 key = parts.pop();
623 if ( arguments.length === 1 ) {
624 return curOption[ key ] === undefined ? null : curOption[ key ];
625 }
626 curOption[ key ] = value;
627 } else {
628 if ( arguments.length === 1 ) {
629 return this.options[ key ] === undefined ? null : this.options[ key ];
630 }
631 options[ key ] = value;
632 }
633 }
634
635 this._setOptions( options );
636
637 return this;
638 },
639 _setOptions: function( options ) {
640 var key;
641
642 for ( key in options ) {
643 this._setOption( key, options[ key ] );
644 }
645
646 return this;
647 },
648 _setOption: function( key, value ) {
649 this.options[ key ] = value;
650
651 if ( key === "disabled" ) {
652 this.widget()
653 .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
654 .attr( "aria-disabled", value );
655 this.hoverable.removeClass( "ui-state-hover" );
656 this.focusable.removeClass( "ui-state-focus" );
657 }
658
659 return this;
660 },
661
662 enable: function() {
663 return this._setOption( "disabled", false );
664 },
665 disable: function() {
666 return this._setOption( "disabled", true );
667 },
668
669 _on: function( suppressDisabledCheck, element, handlers ) {
670 var delegateElement,
671 instance = this;
672
673 // no suppressDisabledCheck flag, shuffle arguments
674 if ( typeof suppressDisabledCheck !== "boolean" ) {
675 handlers = element;
676 element = suppressDisabledCheck;
677 suppressDisabledCheck = false;
678 }
679
680 // no element argument, shuffle and use this.element
681 if ( !handlers ) {
682 handlers = element;
683 element = this.element;
684 delegateElement = this.widget();
685 } else {
686 // accept selectors, DOM elements
687 element = delegateElement = $( element );
688 this.bindings = this.bindings.add( element );
689 }
690
691 $.each( handlers, function( event, handler ) {
692 function handlerProxy() {
693 // allow widgets to customize the disabled handling
694 // - disabled as an array instead of boolean
695 // - disabled class as method for disabling individual parts
696 if ( !suppressDisabledCheck &&
697 ( instance.options.disabled === true ||
698 $( this ).hasClass( "ui-state-disabled" ) ) ) {
699 return;
700 }
701 return ( typeof handler === "string" ? instance[ handler ] : handler )
702 .apply( instance, arguments );
703 }
704
705 // copy the guid so direct unbinding works
706 if ( typeof handler !== "string" ) {
707 handlerProxy.guid = handler.guid =
708 handler.guid || handlerProxy.guid || $.guid++;
709 }
710
711 var match = event.match( /^(\w+)\s*(.*)$/ ),
712 eventName = match[1] + instance.eventNamespace,
713 selector = match[2];
714 if ( selector ) {
715 delegateElement.delegate( selector, eventName, handlerProxy );
716 } else {
717 element.bind( eventName, handlerProxy );
718 }
719 });
720 },
721
722 _off: function( element, eventName ) {
723 eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
724 element.unbind( eventName ).undelegate( eventName );
725 },
726
727 _delay: function( handler, delay ) {
728 function handlerProxy() {
729 return ( typeof handler === "string" ? instance[ handler ] : handler )
730 .apply( instance, arguments );
731 }
732 var instance = this;
733 return setTimeout( handlerProxy, delay || 0 );
734 },
735
736 _hoverable: function( element ) {
737 this.hoverable = this.hoverable.add( element );
738 this._on( element, {
739 mouseenter: function( event ) {
740 $( event.currentTarget ).addClass( "ui-state-hover" );
741 },
742 mouseleave: function( event ) {
743 $( event.currentTarget ).removeClass( "ui-state-hover" );
744 }
745 });
746 },
747
748 _focusable: function( element ) {
749 this.focusable = this.focusable.add( element );
750 this._on( element, {
751 focusin: function( event ) {
752 $( event.currentTarget ).addClass( "ui-state-focus" );
753 },
754 focusout: function( event ) {
755 $( event.currentTarget ).removeClass( "ui-state-focus" );
756 }
757 });
758 },
759
760 _trigger: function( type, event, data ) {
761 var prop, orig,
762 callback = this.options[ type ];
763
764 data = data || {};
765 event = $.Event( event );
766 event.type = ( type === this.widgetEventPrefix ?
767 type :
768 this.widgetEventPrefix + type ).toLowerCase();
769 // the original event may come from any element
770 // so we need to reset the target on the new event
771 event.target = this.element[ 0 ];
772
773 // copy original event properties over to the new event
774 orig = event.originalEvent;
775 if ( orig ) {
776 for ( prop in orig ) {
777 if ( !( prop in event ) ) {
778 event[ prop ] = orig[ prop ];
779 }
780 }
781 }
782
783 this.element.trigger( event, data );
784 return !( $.isFunction( callback ) &&
785 callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
786 event.isDefaultPrevented() );
787 }
788};
789
790$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
791 $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
792 if ( typeof options === "string" ) {
793 options = { effect: options };
794 }
795 var hasOptions,
796 effectName = !options ?
797 method :
798 options === true || typeof options === "number" ?
799 defaultEffect :
800 options.effect || defaultEffect;
801 options = options || {};
802 if ( typeof options === "number" ) {
803 options = { duration: options };
804 }
805 hasOptions = !$.isEmptyObject( options );
806 options.complete = callback;
807 if ( options.delay ) {
808 element.delay( options.delay );
809 }
810 if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
811 element[ method ]( options );
812 } else if ( effectName !== method && element[ effectName ] ) {
813 element[ effectName ]( options.duration, options.easing, callback );
814 } else {
815 element.queue(function( next ) {
816 $( this )[ method ]();
817 if ( callback ) {
818 callback.call( element[ 0 ] );
819 }
820 next();
821 });
822 }
823 };
824});
825
826})( jQuery );
827(function( $, undefined ) {
828
829$.ui = $.ui || {};
830
831var cachedScrollbarWidth,
832 max = Math.max,
833 abs = Math.abs,
834 round = Math.round,
835 rhorizontal = /left|center|right/,
836 rvertical = /top|center|bottom/,
837 roffset = /[\+\-]\d+(\.[\d]+)?%?/,
838 rposition = /^\w+/,
839 rpercent = /%$/,
840 _position = $.fn.position;
841
842function getOffsets( offsets, width, height ) {
843 return [
844 parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
845 parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
846 ];
847}
848
849function parseCss( element, property ) {
850 return parseInt( $.css( element, property ), 10 ) || 0;
851}
852
853function getDimensions( elem ) {
854 var raw = elem[0];
855 if ( raw.nodeType === 9 ) {
856 return {
857 width: elem.width(),
858 height: elem.height(),
859 offset: { top: 0, left: 0 }
860 };
861 }
862 if ( $.isWindow( raw ) ) {
863 return {
864 width: elem.width(),
865 height: elem.height(),
866 offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
867 };
868 }
869 if ( raw.preventDefault ) {
870 return {
871 width: 0,
872 height: 0,
873 offset: { top: raw.pageY, left: raw.pageX }
874 };
875 }
876 return {
877 width: elem.outerWidth(),
878 height: elem.outerHeight(),
879 offset: elem.offset()
880 };
881}
882
883$.position = {
884 scrollbarWidth: function() {
885 if ( cachedScrollbarWidth !== undefined ) {
886 return cachedScrollbarWidth;
887 }
888 var w1, w2,
889 div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
890 innerDiv = div.children()[0];
891
892 $( "body" ).append( div );
893 w1 = innerDiv.offsetWidth;
894 div.css( "overflow", "scroll" );
895
896 w2 = innerDiv.offsetWidth;
897
898 if ( w1 === w2 ) {
899 w2 = div[0].clientWidth;
900 }
901
902 div.remove();
903
904 return (cachedScrollbarWidth = w1 - w2);
905 },
906 getScrollInfo: function( within ) {
907 var overflowX = within.isWindow || within.isDocument ? "" :
908 within.element.css( "overflow-x" ),
909 overflowY = within.isWindow || within.isDocument ? "" :
910 within.element.css( "overflow-y" ),
911 hasOverflowX = overflowX === "scroll" ||
912 ( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
913 hasOverflowY = overflowY === "scroll" ||
914 ( overflowY === "auto" && within.height < within.element[0].scrollHeight );
915 return {
916 width: hasOverflowY ? $.position.scrollbarWidth() : 0,
917 height: hasOverflowX ? $.position.scrollbarWidth() : 0
918 };
919 },
920 getWithinInfo: function( element ) {
921 var withinElement = $( element || window ),
922 isWindow = $.isWindow( withinElement[0] ),
923 isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;
924 return {
925 element: withinElement,
926 isWindow: isWindow,
927 isDocument: isDocument,
928 offset: withinElement.offset() || { left: 0, top: 0 },
929 scrollLeft: withinElement.scrollLeft(),
930 scrollTop: withinElement.scrollTop(),
931 width: isWindow ? withinElement.width() : withinElement.outerWidth(),
932 height: isWindow ? withinElement.height() : withinElement.outerHeight()
933 };
934 }
935};
936
937$.fn.position = function( options ) {
938 if ( !options || !options.of ) {
939 return _position.apply( this, arguments );
940 }
941
942 // make a copy, we don't want to modify arguments
943 options = $.extend( {}, options );
944
945 var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
946 target = $( options.of ),
947 within = $.position.getWithinInfo( options.within ),
948 scrollInfo = $.position.getScrollInfo( within ),
949 collision = ( options.collision || "flip" ).split( " " ),
950 offsets = {};
951
952 dimensions = getDimensions( target );
953 if ( target[0].preventDefault ) {
954 // force left top to allow flipping
955 options.at = "left top";
956 }
957 targetWidth = dimensions.width;
958 targetHeight = dimensions.height;
959 targetOffset = dimensions.offset;
960 // clone to reuse original targetOffset later
961 basePosition = $.extend( {}, targetOffset );
962
963 // force my and at to have valid horizontal and vertical positions
964 // if a value is missing or invalid, it will be converted to center
965 $.each( [ "my", "at" ], function() {
966 var pos = ( options[ this ] || "" ).split( " " ),
967 horizontalOffset,
968 verticalOffset;
969
970 if ( pos.length === 1) {
971 pos = rhorizontal.test( pos[ 0 ] ) ?
972 pos.concat( [ "center" ] ) :
973 rvertical.test( pos[ 0 ] ) ?
974 [ "center" ].concat( pos ) :
975 [ "center", "center" ];
976 }
977 pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
978 pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
979
980 // calculate offsets
981 horizontalOffset = roffset.exec( pos[ 0 ] );
982 verticalOffset = roffset.exec( pos[ 1 ] );
983 offsets[ this ] = [
984 horizontalOffset ? horizontalOffset[ 0 ] : 0,
985 verticalOffset ? verticalOffset[ 0 ] : 0
986 ];
987
988 // reduce to just the positions without the offsets
989 options[ this ] = [
990 rposition.exec( pos[ 0 ] )[ 0 ],
991 rposition.exec( pos[ 1 ] )[ 0 ]
992 ];
993 });
994
995 // normalize collision option
996 if ( collision.length === 1 ) {
997 collision[ 1 ] = collision[ 0 ];
998 }
999
1000 if ( options.at[ 0 ] === "right" ) {
1001 basePosition.left += targetWidth;
1002 } else if ( options.at[ 0 ] === "center" ) {
1003 basePosition.left += targetWidth / 2;
1004 }
1005
1006 if ( options.at[ 1 ] === "bottom" ) {
1007 basePosition.top += targetHeight;
1008 } else if ( options.at[ 1 ] === "center" ) {
1009 basePosition.top += targetHeight / 2;
1010 }
1011
1012 atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
1013 basePosition.left += atOffset[ 0 ];
1014 basePosition.top += atOffset[ 1 ];
1015
1016 return this.each(function() {
1017 var collisionPosition, using,
1018 elem = $( this ),
1019 elemWidth = elem.outerWidth(),
1020 elemHeight = elem.outerHeight(),
1021 marginLeft = parseCss( this, "marginLeft" ),
1022 marginTop = parseCss( this, "marginTop" ),
1023 collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
1024 collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
1025 position = $.extend( {}, basePosition ),
1026 myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
1027
1028 if ( options.my[ 0 ] === "right" ) {
1029 position.left -= elemWidth;
1030 } else if ( options.my[ 0 ] === "center" ) {
1031 position.left -= elemWidth / 2;
1032 }
1033
1034 if ( options.my[ 1 ] === "bottom" ) {
1035 position.top -= elemHeight;
1036 } else if ( options.my[ 1 ] === "center" ) {
1037 position.top -= elemHeight / 2;
1038 }
1039
1040 position.left += myOffset[ 0 ];
1041 position.top += myOffset[ 1 ];
1042
1043 // if the browser doesn't support fractions, then round for consistent results
1044 if ( !$.support.offsetFractions ) {
1045 position.left = round( position.left );
1046 position.top = round( position.top );
1047 }
1048
1049 collisionPosition = {
1050 marginLeft: marginLeft,
1051 marginTop: marginTop
1052 };
1053
1054 $.each( [ "left", "top" ], function( i, dir ) {
1055 if ( $.ui.position[ collision[ i ] ] ) {
1056 $.ui.position[ collision[ i ] ][ dir ]( position, {
1057 targetWidth: targetWidth,
1058 targetHeight: targetHeight,
1059 elemWidth: elemWidth,
1060 elemHeight: elemHeight,
1061 collisionPosition: collisionPosition,
1062 collisionWidth: collisionWidth,
1063 collisionHeight: collisionHeight,
1064 offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
1065 my: options.my,
1066 at: options.at,
1067 within: within,
1068 elem : elem
1069 });
1070 }
1071 });
1072
1073 if ( options.using ) {
1074 // adds feedback as second argument to using callback, if present
1075 using = function( props ) {
1076 var left = targetOffset.left - position.left,
1077 right = left + targetWidth - elemWidth,
1078 top = targetOffset.top - position.top,
1079 bottom = top + targetHeight - elemHeight,
1080 feedback = {
1081 target: {
1082 element: target,
1083 left: targetOffset.left,
1084 top: targetOffset.top,
1085 width: targetWidth,
1086 height: targetHeight
1087 },
1088 element: {
1089 element: elem,
1090 left: position.left,
1091 top: position.top,
1092 width: elemWidth,
1093 height: elemHeight
1094 },
1095 horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
1096 vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
1097 };
1098 if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
1099 feedback.horizontal = "center";
1100 }
1101 if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
1102 feedback.vertical = "middle";
1103 }
1104 if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
1105 feedback.important = "horizontal";
1106 } else {
1107 feedback.important = "vertical";
1108 }
1109 options.using.call( this, props, feedback );
1110 };
1111 }
1112
1113 elem.offset( $.extend( position, { using: using } ) );
1114 });
1115};
1116
1117$.ui.position = {
1118 fit: {
1119 left: function( position, data ) {
1120 var within = data.within,
1121 withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
1122 outerWidth = within.width,
1123 collisionPosLeft = position.left - data.collisionPosition.marginLeft,
1124 overLeft = withinOffset - collisionPosLeft,
1125 overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
1126 newOverRight;
1127
1128 // element is wider than within
1129 if ( data.collisionWidth > outerWidth ) {
1130 // element is initially over the left side of within
1131 if ( overLeft > 0 && overRight <= 0 ) {
1132 newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
1133 position.left += overLeft - newOverRight;
1134 // element is initially over right side of within
1135 } else if ( overRight > 0 && overLeft <= 0 ) {
1136 position.left = withinOffset;
1137 // element is initially over both left and right sides of within
1138 } else {
1139 if ( overLeft > overRight ) {
1140 position.left = withinOffset + outerWidth - data.collisionWidth;
1141 } else {
1142 position.left = withinOffset;
1143 }
1144 }
1145 // too far left -> align with left edge
1146 } else if ( overLeft > 0 ) {
1147 position.left += overLeft;
1148 // too far right -> align with right edge
1149 } else if ( overRight > 0 ) {
1150 position.left -= overRight;
1151 // adjust based on position and margin
1152 } else {
1153 position.left = max( position.left - collisionPosLeft, position.left );
1154 }
1155 },
1156 top: function( position, data ) {
1157 var within = data.within,
1158 withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
1159 outerHeight = data.within.height,
1160 collisionPosTop = position.top - data.collisionPosition.marginTop,
1161 overTop = withinOffset - collisionPosTop,
1162 overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
1163 newOverBottom;
1164
1165 // element is taller than within
1166 if ( data.collisionHeight > outerHeight ) {
1167 // element is initially over the top of within
1168 if ( overTop > 0 && overBottom <= 0 ) {
1169 newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
1170 position.top += overTop - newOverBottom;
1171 // element is initially over bottom of within
1172 } else if ( overBottom > 0 && overTop <= 0 ) {
1173 position.top = withinOffset;
1174 // element is initially over both top and bottom of within
1175 } else {
1176 if ( overTop > overBottom ) {
1177 position.top = withinOffset + outerHeight - data.collisionHeight;
1178 } else {
1179 position.top = withinOffset;
1180 }
1181 }
1182 // too far up -> align with top
1183 } else if ( overTop > 0 ) {
1184 position.top += overTop;
1185 // too far down -> align with bottom edge
1186 } else if ( overBottom > 0 ) {
1187 position.top -= overBottom;
1188 // adjust based on position and margin
1189 } else {
1190 position.top = max( position.top - collisionPosTop, position.top );
1191 }
1192 }
1193 },
1194 flip: {
1195 left: function( position, data ) {
1196 var within = data.within,
1197 withinOffset = within.offset.left + within.scrollLeft,
1198 outerWidth = within.width,
1199 offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
1200 collisionPosLeft = position.left - data.collisionPosition.marginLeft,
1201 overLeft = collisionPosLeft - offsetLeft,
1202 overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
1203 myOffset = data.my[ 0 ] === "left" ?
1204 -data.elemWidth :
1205 data.my[ 0 ] === "right" ?
1206 data.elemWidth :
1207 0,
1208 atOffset = data.at[ 0 ] === "left" ?
1209 data.targetWidth :
1210 data.at[ 0 ] === "right" ?
1211 -data.targetWidth :
1212 0,
1213 offset = -2 * data.offset[ 0 ],
1214 newOverRight,
1215 newOverLeft;
1216
1217 if ( overLeft < 0 ) {
1218 newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
1219 if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
1220 position.left += myOffset + atOffset + offset;
1221 }
1222 }
1223 else if ( overRight > 0 ) {
1224 newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
1225 if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
1226 position.left += myOffset + atOffset + offset;
1227 }
1228 }
1229 },
1230 top: function( position, data ) {
1231 var within = data.within,
1232 withinOffset = within.offset.top + within.scrollTop,
1233 outerHeight = within.height,
1234 offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
1235 collisionPosTop = position.top - data.collisionPosition.marginTop,
1236 overTop = collisionPosTop - offsetTop,
1237 overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
1238 top = data.my[ 1 ] === "top",
1239 myOffset = top ?
1240 -data.elemHeight :
1241 data.my[ 1 ] === "bottom" ?
1242 data.elemHeight :
1243 0,
1244 atOffset = data.at[ 1 ] === "top" ?
1245 data.targetHeight :
1246 data.at[ 1 ] === "bottom" ?
1247 -data.targetHeight :
1248 0,
1249 offset = -2 * data.offset[ 1 ],
1250 newOverTop,
1251 newOverBottom;
1252 if ( overTop < 0 ) {
1253 newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
1254 if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
1255 position.top += myOffset + atOffset + offset;
1256 }
1257 }
1258 else if ( overBottom > 0 ) {
1259 newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
1260 if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
1261 position.top += myOffset + atOffset + offset;
1262 }
1263 }
1264 }
1265 },
1266 flipfit: {
1267 left: function() {
1268 $.ui.position.flip.left.apply( this, arguments );
1269 $.ui.position.fit.left.apply( this, arguments );
1270 },
1271 top: function() {
1272 $.ui.position.flip.top.apply( this, arguments );
1273 $.ui.position.fit.top.apply( this, arguments );
1274 }
1275 }
1276};
1277
1278// fraction support test
1279(function () {
1280 var testElement, testElementParent, testElementStyle, offsetLeft, i,
1281 body = document.getElementsByTagName( "body" )[ 0 ],
1282 div = document.createElement( "div" );
1283
1284 //Create a "fake body" for testing based on method used in jQuery.support
1285 testElement = document.createElement( body ? "div" : "body" );
1286 testElementStyle = {
1287 visibility: "hidden",
1288 width: 0,
1289 height: 0,
1290 border: 0,
1291 margin: 0,
1292 background: "none"
1293 };
1294 if ( body ) {
1295 $.extend( testElementStyle, {
1296 position: "absolute",
1297 left: "-1000px",
1298 top: "-1000px"
1299 });
1300 }
1301 for ( i in testElementStyle ) {
1302 testElement.style[ i ] = testElementStyle[ i ];
1303 }
1304 testElement.appendChild( div );
1305 testElementParent = body || document.documentElement;
1306 testElementParent.insertBefore( testElement, testElementParent.firstChild );
1307
1308 div.style.cssText = "position: absolute; left: 10.7432222px;";
1309
1310 offsetLeft = $( div ).offset().left;
1311 $.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
1312
1313 testElement.innerHTML = "";
1314 testElementParent.removeChild( testElement );
1315})();
1316
1317}( jQuery ) );
1318(function( $, undefined ) {
1319
1320$.widget( "ui.autocomplete", {
1321 version: "1.10.4",
1322 defaultElement: "<input>",
1323 options: {
1324 appendTo: null,
1325 autoFocus: false,
1326 delay: 300,
1327 minLength: 1,
1328 position: {
1329 my: "left top",
1330 at: "left bottom",
1331 collision: "none"
1332 },
1333 source: null,
1334
1335 // callbacks
1336 change: null,
1337 close: null,
1338 focus: null,
1339 open: null,
1340 response: null,
1341 search: null,
1342 select: null
1343 },
1344
1345 requestIndex: 0,
1346 pending: 0,
1347
1348 _create: function() {
1349 // Some browsers only repeat keydown events, not keypress events,
1350 // so we use the suppressKeyPress flag to determine if we've already
1351 // handled the keydown event. #7269
1352 // Unfortunately the code for & in keypress is the same as the up arrow,
1353 // so we use the suppressKeyPressRepeat flag to avoid handling keypress
1354 // events when we know the keydown event was used to modify the
1355 // search term. #7799
1356 var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
1357 nodeName = this.element[0].nodeName.toLowerCase(),
1358 isTextarea = nodeName === "textarea",
1359 isInput = nodeName === "input";
1360
1361 this.isMultiLine =
1362 // Textareas are always multi-line
1363 isTextarea ? true :
1364 // Inputs are always single-line, even if inside a contentEditable element
1365 // IE also treats inputs as contentEditable
1366 isInput ? false :
1367 // All other element types are determined by whether or not they're contentEditable
1368 this.element.prop( "isContentEditable" );
1369
1370 this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
1371 this.isNewMenu = true;
1372
1373 this.element
1374 .addClass( "ui-autocomplete-input" )
1375 .attr( "autocomplete", "off" );
1376
1377 this._on( this.element, {
1378 keydown: function( event ) {
1379 if ( this.element.prop( "readOnly" ) ) {
1380 suppressKeyPress = true;
1381 suppressInput = true;
1382 suppressKeyPressRepeat = true;
1383 return;
1384 }
1385
1386 suppressKeyPress = false;
1387 suppressInput = false;
1388 suppressKeyPressRepeat = false;
1389 var keyCode = $.ui.keyCode;
1390 switch( event.keyCode ) {
1391 case keyCode.PAGE_UP:
1392 suppressKeyPress = true;
1393 this._move( "previousPage", event );
1394 break;
1395 case keyCode.PAGE_DOWN:
1396 suppressKeyPress = true;
1397 this._move( "nextPage", event );
1398 break;
1399 case keyCode.UP:
1400 suppressKeyPress = true;
1401 this._keyEvent( "previous", event );
1402 break;
1403 case keyCode.DOWN:
1404 suppressKeyPress = true;
1405 this._keyEvent( "next", event );
1406 break;
1407 case keyCode.ENTER:
1408 case keyCode.NUMPAD_ENTER:
1409 // when menu is open and has focus
1410 if ( this.menu.active ) {
1411 // #6055 - Opera still allows the keypress to occur
1412 // which causes forms to submit
1413 suppressKeyPress = true;
1414 event.preventDefault();
1415 this.menu.select( event );
1416 }
1417 break;
1418 case keyCode.TAB:
1419 if ( this.menu.active ) {
1420 this.menu.select( event );
1421 }
1422 break;
1423 case keyCode.ESCAPE:
1424 if ( this.menu.element.is( ":visible" ) ) {
1425 this._value( this.term );
1426 this.close( event );
1427 // Different browsers have different default behavior for escape
1428 // Single press can mean undo or clear
1429 // Double press in IE means clear the whole form
1430 event.preventDefault();
1431 }
1432 break;
1433 default:
1434 suppressKeyPressRepeat = true;
1435 // search timeout should be triggered before the input value is changed
1436 this._searchTimeout( event );
1437 break;
1438 }
1439 },
1440 keypress: function( event ) {
1441 if ( suppressKeyPress ) {
1442 suppressKeyPress = false;
1443 if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
1444 event.preventDefault();
1445 }
1446 return;
1447 }
1448 if ( suppressKeyPressRepeat ) {
1449 return;
1450 }
1451
1452 // replicate some key handlers to allow them to repeat in Firefox and Opera
1453 var keyCode = $.ui.keyCode;
1454 switch( event.keyCode ) {
1455 case keyCode.PAGE_UP:
1456 this._move( "previousPage", event );
1457 break;
1458 case keyCode.PAGE_DOWN:
1459 this._move( "nextPage", event );
1460 break;
1461 case keyCode.UP:
1462 this._keyEvent( "previous", event );
1463 break;
1464 case keyCode.DOWN:
1465 this._keyEvent( "next", event );
1466 break;
1467 }
1468 },
1469 input: function( event ) {
1470 if ( suppressInput ) {
1471 suppressInput = false;
1472 event.preventDefault();
1473 return;
1474 }
1475 this._searchTimeout( event );
1476 },
1477 focus: function() {
1478 this.selectedItem = null;
1479 this.previous = this._value();
1480 },
1481 blur: function( event ) {
1482 if ( this.cancelBlur ) {
1483 delete this.cancelBlur;
1484 return;
1485 }
1486
1487 clearTimeout( this.searching );
1488 this.close( event );
1489 this._change( event );
1490 }
1491 });
1492
1493 this._initSource();
1494 this.menu = $( "<ul>" )
1495 .addClass( "ui-autocomplete ui-front" )
1496 .appendTo( this._appendTo() )
1497 .menu({
1498 // disable ARIA support, the live region takes care of that
1499 role: null
1500 })
1501 .hide()
1502 .data( "ui-menu" );
1503
1504 this._on( this.menu.element, {
1505 mousedown: function( event ) {
1506 // prevent moving focus out of the text field
1507 event.preventDefault();
1508
1509 // IE doesn't prevent moving focus even with event.preventDefault()
1510 // so we set a flag to know when we should ignore the blur event
1511 this.cancelBlur = true;
1512 this._delay(function() {
1513 delete this.cancelBlur;
1514 });
1515
1516 // clicking on the scrollbar causes focus to shift to the body
1517 // but we can't detect a mouseup or a click immediately afterward
1518 // so we have to track the next mousedown and close the menu if
1519 // the user clicks somewhere outside of the autocomplete
1520 var menuElement = this.menu.element[ 0 ];
1521 if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
1522 this._delay(function() {
1523 var that = this;
1524 this.document.one( "mousedown", function( event ) {
1525 if ( event.target !== that.element[ 0 ] &&
1526 event.target !== menuElement &&
1527 !$.contains( menuElement, event.target ) ) {
1528 that.close();
1529 }
1530 });
1531 });
1532 }
1533 },
1534 menufocus: function( event, ui ) {
1535 // support: Firefox
1536 // Prevent accidental activation of menu items in Firefox (#7024 #9118)
1537 if ( this.isNewMenu ) {
1538 this.isNewMenu = false;
1539 if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
1540 this.menu.blur();
1541
1542 this.document.one( "mousemove", function() {
1543 $( event.target ).trigger( event.originalEvent );
1544 });
1545
1546 return;
1547 }
1548 }
1549
1550 var item = ui.item.data( "ui-autocomplete-item" );
1551 if ( false !== this._trigger( "focus", event, { item: item } ) ) {
1552 // use value to match what will end up in the input, if it was a key event
1553 if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
1554 this._value( item.value );
1555 }
1556 } else {
1557 // Normally the input is populated with the item's value as the
1558 // menu is navigated, causing screen readers to notice a change and
1559 // announce the item. Since the focus event was canceled, this doesn't
1560 // happen, so we update the live region so that screen readers can
1561 // still notice the change and announce it.
1562 this.liveRegion.text( item.value );
1563 }
1564 },
1565 menuselect: function( event, ui ) {
1566 var item = ui.item.data( "ui-autocomplete-item" ),
1567 previous = this.previous;
1568
1569 // only trigger when focus was lost (click on menu)
1570 if ( this.element[0] !== this.document[0].activeElement ) {
1571 this.element.focus();
1572 this.previous = previous;
1573 // #6109 - IE triggers two focus events and the second
1574 // is asynchronous, so we need to reset the previous
1575 // term synchronously and asynchronously :-(
1576 this._delay(function() {
1577 this.previous = previous;
1578 this.selectedItem = item;
1579 });
1580 }
1581
1582 if ( false !== this._trigger( "select", event, { item: item } ) ) {
1583 this._value( item.value );
1584 }
1585 // reset the term after the select event
1586 // this allows custom select handling to work properly
1587 this.term = this._value();
1588
1589 this.close( event );
1590 this.selectedItem = item;
1591 }
1592 });
1593
1594 this.liveRegion = $( "<span>", {
1595 role: "status",
1596 "aria-live": "polite"
1597 })
1598 .addClass( "ui-helper-hidden-accessible" )
1599 .insertBefore( this.element );
1600
1601 // turning off autocomplete prevents the browser from remembering the
1602 // value when navigating through history, so we re-enable autocomplete
1603 // if the page is unloaded before the widget is destroyed. #7790
1604 this._on( this.window, {
1605 beforeunload: function() {
1606 this.element.removeAttr( "autocomplete" );
1607 }
1608 });
1609 },
1610
1611 _destroy: function() {
1612 clearTimeout( this.searching );
1613 this.element
1614 .removeClass( "ui-autocomplete-input" )
1615 .removeAttr( "autocomplete" );
1616 this.menu.element.remove();
1617 this.liveRegion.remove();
1618 },
1619
1620 _setOption: function( key, value ) {
1621 this._super( key, value );
1622 if ( key === "source" ) {
1623 this._initSource();
1624 }
1625 if ( key === "appendTo" ) {
1626 this.menu.element.appendTo( this._appendTo() );
1627 }
1628 if ( key === "disabled" && value && this.xhr ) {
1629 this.xhr.abort();
1630 }
1631 },
1632
1633 _appendTo: function() {
1634 var element = this.options.appendTo;
1635
1636 if ( element ) {
1637 element = element.jquery || element.nodeType ?
1638 $( element ) :
1639 this.document.find( element ).eq( 0 );
1640 }
1641
1642 if ( !element ) {
1643 element = this.element.closest( ".ui-front" );
1644 }
1645
1646 if ( !element.length ) {
1647 element = this.document[0].body;
1648 }
1649
1650 return element;
1651 },
1652
1653 _initSource: function() {
1654 var array, url,
1655 that = this;
1656 if ( $.isArray(this.options.source) ) {
1657 array = this.options.source;
1658 this.source = function( request, response ) {
1659 response( $.ui.autocomplete.filter( array, request.term ) );
1660 };
1661 } else if ( typeof this.options.source === "string" ) {
1662 url = this.options.source;
1663 this.source = function( request, response ) {
1664 if ( that.xhr ) {
1665 that.xhr.abort();
1666 }
1667 that.xhr = $.ajax({
1668 url: url,
1669 data: request,
1670 dataType: "json",
1671 success: function( data ) {
1672 response( data );
1673 },
1674 error: function() {
1675 response( [] );
1676 }
1677 });
1678 };
1679 } else {
1680 this.source = this.options.source;
1681 }
1682 },
1683
1684 _searchTimeout: function( event ) {
1685 clearTimeout( this.searching );
1686 this.searching = this._delay(function() {
1687 // only search if the value has changed
1688 if ( this.term !== this._value() ) {
1689 this.selectedItem = null;
1690 this.search( null, event );
1691 }
1692 }, this.options.delay );
1693 },
1694
1695 search: function( value, event ) {
1696 value = value != null ? value : this._value();
1697
1698 // always save the actual value, not the one passed as an argument
1699 this.term = this._value();
1700
1701 if ( value.length < this.options.minLength ) {
1702 return this.close( event );
1703 }
1704
1705 if ( this._trigger( "search", event ) === false ) {
1706 return;
1707 }
1708
1709 return this._search( value );
1710 },
1711
1712 _search: function( value ) {
1713 this.pending++;
1714 this.element.addClass( "ui-autocomplete-loading" );
1715 this.cancelSearch = false;
1716
1717 this.source( { term: value }, this._response() );
1718 },
1719
1720 _response: function() {
1721 var index = ++this.requestIndex;
1722
1723 return $.proxy(function( content ) {
1724 if ( index === this.requestIndex ) {
1725 this.__response( content );
1726 }
1727
1728 this.pending--;
1729 if ( !this.pending ) {
1730 this.element.removeClass( "ui-autocomplete-loading" );
1731 }
1732 }, this );
1733 },
1734
1735 __response: function( content ) {
1736 if ( content ) {
1737 content = this._normalize( content );
1738 }
1739 this._trigger( "response", null, { content: content } );
1740 if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
1741 this._suggest( content );
1742 this._trigger( "open" );
1743 } else {
1744 // use ._close() instead of .close() so we don't cancel future searches
1745 this._close();
1746 }
1747 },
1748
1749 close: function( event ) {
1750 this.cancelSearch = true;
1751 this._close( event );
1752 },
1753
1754 _close: function( event ) {
1755 if ( this.menu.element.is( ":visible" ) ) {
1756 this.menu.element.hide();
1757 this.menu.blur();
1758 this.isNewMenu = true;
1759 this._trigger( "close", event );
1760 }
1761 },
1762
1763 _change: function( event ) {
1764 if ( this.previous !== this._value() ) {
1765 this._trigger( "change", event, { item: this.selectedItem } );
1766 }
1767 },
1768
1769 _normalize: function( items ) {
1770 // assume all items have the right format when the first item is complete
1771 if ( items.length && items[0].label && items[0].value ) {
1772 return items;
1773 }
1774 return $.map( items, function( item ) {
1775 if ( typeof item === "string" ) {
1776 return {
1777 label: item,
1778 value: item
1779 };
1780 }
1781 return $.extend({
1782 label: item.label || item.value,
1783 value: item.value || item.label
1784 }, item );
1785 });
1786 },
1787
1788 _suggest: function( items ) {
1789 var ul = this.menu.element.empty();
1790 this._renderMenu( ul, items );
1791 this.isNewMenu = true;
1792 this.menu.refresh();
1793
1794 // size and position menu
1795 ul.show();
1796 this._resizeMenu();
1797 ul.position( $.extend({
1798 of: this.element
1799 }, this.options.position ));
1800
1801 if ( this.options.autoFocus ) {
1802 this.menu.next();
1803 }
1804 },
1805
1806 _resizeMenu: function() {
1807 var ul = this.menu.element;
1808 ul.outerWidth( Math.max(
1809 // Firefox wraps long text (possibly a rounding bug)
1810 // so we add 1px to avoid the wrapping (#7513)
1811 ul.width( "" ).outerWidth() + 1,
1812 this.element.outerWidth()
1813 ) );
1814 },
1815
1816 _renderMenu: function( ul, items ) {
1817 var that = this;
1818 $.each( items, function( index, item ) {
1819 that._renderItemData( ul, item );
1820 });
1821 },
1822
1823 _renderItemData: function( ul, item ) {
1824 return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
1825 },
1826
1827 _renderItem: function( ul, item ) {
1828 return $( "<li>" )
1829 .append( $( "<a>" ).text( item.label ) )
1830 .appendTo( ul );
1831 },
1832
1833 _move: function( direction, event ) {
1834 if ( !this.menu.element.is( ":visible" ) ) {
1835 this.search( null, event );
1836 return;
1837 }
1838 if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
1839 this.menu.isLastItem() && /^next/.test( direction ) ) {
1840 this._value( this.term );
1841 this.menu.blur();
1842 return;
1843 }
1844 this.menu[ direction ]( event );
1845 },
1846
1847 widget: function() {
1848 return this.menu.element;
1849 },
1850
1851 _value: function() {
1852 return this.valueMethod.apply( this.element, arguments );
1853 },
1854
1855 _keyEvent: function( keyEvent, event ) {
1856 if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
1857 this._move( keyEvent, event );
1858
1859 // prevents moving cursor to beginning/end of the text field in some browsers
1860 event.preventDefault();
1861 }
1862 }
1863});
1864
1865$.extend( $.ui.autocomplete, {
1866 escapeRegex: function( value ) {
1867 return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
1868 },
1869 filter: function(array, term) {
1870 var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
1871 return $.grep( array, function(value) {
1872 return matcher.test( value.label || value.value || value );
1873 });
1874 }
1875});
1876
1877
1878// live region extension, adding a `messages` option
1879// NOTE: This is an experimental API. We are still investigating
1880// a full solution for string manipulation and internationalization.
1881$.widget( "ui.autocomplete", $.ui.autocomplete, {
1882 options: {
1883 messages: {
1884 noResults: "No search results.",
1885 results: function( amount ) {
1886 return amount + ( amount > 1 ? " results are" : " result is" ) +
1887 " available, use up and down arrow keys to navigate.";
1888 }
1889 }
1890 },
1891
1892 __response: function( content ) {
1893 var message;
1894 this._superApply( arguments );
1895 if ( this.options.disabled || this.cancelSearch ) {
1896 return;
1897 }
1898 if ( content && content.length ) {
1899 message = this.options.messages.results( content.length );
1900 } else {
1901 message = this.options.messages.noResults;
1902 }
1903 this.liveRegion.text( message );
1904 }
1905});
1906
1907}( jQuery ));
1908(function( $, undefined ) {
1909
1910$.widget( "ui.menu", {
1911 version: "1.10.4",
1912 defaultElement: "<ul>",
1913 delay: 300,
1914 options: {
1915 icons: {
1916 submenu: "ui-icon-carat-1-e"
1917 },
1918 menus: "ul",
1919 position: {
1920 my: "left top",
1921 at: "right top"
1922 },
1923 role: "menu",
1924
1925 // callbacks
1926 blur: null,
1927 focus: null,
1928 select: null
1929 },
1930
1931 _create: function() {
1932 this.activeMenu = this.element;
1933 // flag used to prevent firing of the click handler
1934 // as the event bubbles up through nested menus
1935 this.mouseHandled = false;
1936 this.element
1937 .uniqueId()
1938 .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
1939 .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
1940 .attr({
1941 role: this.options.role,
1942 tabIndex: 0
1943 })
1944 // need to catch all clicks on disabled menu
1945 // not possible through _on
1946 .bind( "click" + this.eventNamespace, $.proxy(function( event ) {
1947 if ( this.options.disabled ) {
1948 event.preventDefault();
1949 }
1950 }, this ));
1951
1952 if ( this.options.disabled ) {
1953 this.element
1954 .addClass( "ui-state-disabled" )
1955 .attr( "aria-disabled", "true" );
1956 }
1957
1958 this._on({
1959 // Prevent focus from sticking to links inside menu after clicking
1960 // them (focus should always stay on UL during navigation).
1961 "mousedown .ui-menu-item > a": function( event ) {
1962 event.preventDefault();
1963 },
1964 "click .ui-state-disabled > a": function( event ) {
1965 event.preventDefault();
1966 },
1967 "click .ui-menu-item:has(a)": function( event ) {
1968 var target = $( event.target ).closest( ".ui-menu-item" );
1969 if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
1970 this.select( event );
1971
1972 // Only set the mouseHandled flag if the event will bubble, see #9469.
1973 if ( !event.isPropagationStopped() ) {
1974 this.mouseHandled = true;
1975 }
1976
1977 // Open submenu on click
1978 if ( target.has( ".ui-menu" ).length ) {
1979 this.expand( event );
1980 } else if ( !this.element.is( ":focus" ) && $( this.document[ 0 ].activeElement ).closest( ".ui-menu" ).length ) {
1981
1982 // Redirect focus to the menu
1983 this.element.trigger( "focus", [ true ] );
1984
1985 // If the active item is on the top level, let it stay active.
1986 // Otherwise, blur the active item since it is no longer visible.
1987 if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
1988 clearTimeout( this.timer );
1989 }
1990 }
1991 }
1992 },
1993 "mouseenter .ui-menu-item": function( event ) {
1994 var target = $( event.currentTarget );
1995 // Remove ui-state-active class from siblings of the newly focused menu item
1996 // to avoid a jump caused by adjacent elements both having a class with a border
1997 target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
1998 this.focus( event, target );
1999 },
2000 mouseleave: "collapseAll",
2001 "mouseleave .ui-menu": "collapseAll",
2002 focus: function( event, keepActiveItem ) {
2003 // If there's already an active item, keep it active
2004 // If not, activate the first item
2005 var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
2006
2007 if ( !keepActiveItem ) {
2008 this.focus( event, item );
2009 }
2010 },
2011 blur: function( event ) {
2012 this._delay(function() {
2013 if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
2014 this.collapseAll( event );
2015 }
2016 });
2017 },
2018 keydown: "_keydown"
2019 });
2020
2021 this.refresh();
2022
2023 // Clicks outside of a menu collapse any open menus
2024 this._on( this.document, {
2025 click: function( event ) {
2026 if ( !$( event.target ).closest( ".ui-menu" ).length ) {
2027 this.collapseAll( event );
2028 }
2029
2030 // Reset the mouseHandled flag
2031 this.mouseHandled = false;
2032 }
2033 });
2034 },
2035
2036 _destroy: function() {
2037 // Destroy (sub)menus
2038 this.element
2039 .removeAttr( "aria-activedescendant" )
2040 .find( ".ui-menu" ).addBack()
2041 .removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
2042 .removeAttr( "role" )
2043 .removeAttr( "tabIndex" )
2044 .removeAttr( "aria-labelledby" )
2045 .removeAttr( "aria-expanded" )
2046 .removeAttr( "aria-hidden" )
2047 .removeAttr( "aria-disabled" )
2048 .removeUniqueId()
2049 .show();
2050
2051 // Destroy menu items
2052 this.element.find( ".ui-menu-item" )
2053 .removeClass( "ui-menu-item" )
2054 .removeAttr( "role" )
2055 .removeAttr( "aria-disabled" )
2056 .children( "a" )
2057 .removeUniqueId()
2058 .removeClass( "ui-corner-all ui-state-hover" )
2059 .removeAttr( "tabIndex" )
2060 .removeAttr( "role" )
2061 .removeAttr( "aria-haspopup" )
2062 .children().each( function() {
2063 var elem = $( this );
2064 if ( elem.data( "ui-menu-submenu-carat" ) ) {
2065 elem.remove();
2066 }
2067 });
2068
2069 // Destroy menu dividers
2070 this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
2071 },
2072
2073 _keydown: function( event ) {
2074 var match, prev, character, skip, regex,
2075 preventDefault = true;
2076
2077 function escape( value ) {
2078 return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
2079 }
2080
2081 switch ( event.keyCode ) {
2082 case $.ui.keyCode.PAGE_UP:
2083 this.previousPage( event );
2084 break;
2085 case $.ui.keyCode.PAGE_DOWN:
2086 this.nextPage( event );
2087 break;
2088 case $.ui.keyCode.HOME:
2089 this._move( "first", "first", event );
2090 break;
2091 case $.ui.keyCode.END:
2092 this._move( "last", "last", event );
2093 break;
2094 case $.ui.keyCode.UP:
2095 this.previous( event );
2096 break;
2097 case $.ui.keyCode.DOWN:
2098 this.next( event );
2099 break;
2100 case $.ui.keyCode.LEFT:
2101 this.collapse( event );
2102 break;
2103 case $.ui.keyCode.RIGHT:
2104 if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
2105 this.expand( event );
2106 }
2107 break;
2108 case $.ui.keyCode.ENTER:
2109 case $.ui.keyCode.SPACE:
2110 this._activate( event );
2111 break;
2112 case $.ui.keyCode.ESCAPE:
2113 this.collapse( event );
2114 break;
2115 default:
2116 preventDefault = false;
2117 prev = this.previousFilter || "";
2118 character = String.fromCharCode( event.keyCode );
2119 skip = false;
2120
2121 clearTimeout( this.filterTimer );
2122
2123 if ( character === prev ) {
2124 skip = true;
2125 } else {
2126 character = prev + character;
2127 }
2128
2129 regex = new RegExp( "^" + escape( character ), "i" );
2130 match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
2131 return regex.test( $( this ).children( "a" ).text() );
2132 });
2133 match = skip && match.index( this.active.next() ) !== -1 ?
2134 this.active.nextAll( ".ui-menu-item" ) :
2135 match;
2136
2137 // If no matches on the current filter, reset to the last character pressed
2138 // to move down the menu to the first item that starts with that character
2139 if ( !match.length ) {
2140 character = String.fromCharCode( event.keyCode );
2141 regex = new RegExp( "^" + escape( character ), "i" );
2142 match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
2143 return regex.test( $( this ).children( "a" ).text() );
2144 });
2145 }
2146
2147 if ( match.length ) {
2148 this.focus( event, match );
2149 if ( match.length > 1 ) {
2150 this.previousFilter = character;
2151 this.filterTimer = this._delay(function() {
2152 delete this.previousFilter;
2153 }, 1000 );
2154 } else {
2155 delete this.previousFilter;
2156 }
2157 } else {
2158 delete this.previousFilter;
2159 }
2160 }
2161
2162 if ( preventDefault ) {
2163 event.preventDefault();
2164 }
2165 },
2166
2167 _activate: function( event ) {
2168 if ( !this.active.is( ".ui-state-disabled" ) ) {
2169 if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
2170 this.expand( event );
2171 } else {
2172 this.select( event );
2173 }
2174 }
2175 },
2176
2177 refresh: function() {
2178 var menus,
2179 icon = this.options.icons.submenu,
2180 submenus = this.element.find( this.options.menus );
2181
2182 this.element.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length );
2183
2184 // Initialize nested menus
2185 submenus.filter( ":not(.ui-menu)" )
2186 .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
2187 .hide()
2188 .attr({
2189 role: this.options.role,
2190 "aria-hidden": "true",
2191 "aria-expanded": "false"
2192 })
2193 .each(function() {
2194 var menu = $( this ),
2195 item = menu.prev( "a" ),
2196 submenuCarat = $( "<span>" )
2197 .addClass( "ui-menu-icon ui-icon " + icon )
2198 .data( "ui-menu-submenu-carat", true );
2199
2200 item
2201 .attr( "aria-haspopup", "true" )
2202 .prepend( submenuCarat );
2203 menu.attr( "aria-labelledby", item.attr( "id" ) );
2204 });
2205
2206 menus = submenus.add( this.element );
2207
2208 // Don't refresh list items that are already adapted
2209 menus.children( ":not(.ui-menu-item):has(a)" )
2210 .addClass( "ui-menu-item" )
2211 .attr( "role", "presentation" )
2212 .children( "a" )
2213 .uniqueId()
2214 .addClass( "ui-corner-all" )
2215 .attr({
2216 tabIndex: -1,
2217 role: this._itemRole()
2218 });
2219
2220 // Initialize unlinked menu-items containing spaces and/or dashes only as dividers
2221 menus.children( ":not(.ui-menu-item)" ).each(function() {
2222 var item = $( this );
2223 // hyphen, em dash, en dash
2224 if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
2225 item.addClass( "ui-widget-content ui-menu-divider" );
2226 }
2227 });
2228
2229 // Add aria-disabled attribute to any disabled menu item
2230 menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
2231
2232 // If the active item has been removed, blur the menu
2233 if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
2234 this.blur();
2235 }
2236 },
2237
2238 _itemRole: function() {
2239 return {
2240 menu: "menuitem",
2241 listbox: "option"
2242 }[ this.options.role ];
2243 },
2244
2245 _setOption: function( key, value ) {
2246 if ( key === "icons" ) {
2247 this.element.find( ".ui-menu-icon" )
2248 .removeClass( this.options.icons.submenu )
2249 .addClass( value.submenu );
2250 }
2251 this._super( key, value );
2252 },
2253
2254 focus: function( event, item ) {
2255 var nested, focused;
2256 this.blur( event, event && event.type === "focus" );
2257
2258 this._scrollIntoView( item );
2259
2260 this.active = item.first();
2261 focused = this.active.children( "a" ).addClass( "ui-state-focus" );
2262 // Only update aria-activedescendant if there's a role
2263 // otherwise we assume focus is managed elsewhere
2264 if ( this.options.role ) {
2265 this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
2266 }
2267
2268 // Highlight active parent menu item, if any
2269 this.active
2270 .parent()
2271 .closest( ".ui-menu-item" )
2272 .children( "a:first" )
2273 .addClass( "ui-state-active" );
2274
2275 if ( event && event.type === "keydown" ) {
2276 this._close();
2277 } else {
2278 this.timer = this._delay(function() {
2279 this._close();
2280 }, this.delay );
2281 }
2282
2283 nested = item.children( ".ui-menu" );
2284 if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {
2285 this._startOpening(nested);
2286 }
2287 this.activeMenu = item.parent();
2288
2289 this._trigger( "focus", event, { item: item } );
2290 },
2291
2292 _scrollIntoView: function( item ) {
2293 var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
2294 if ( this._hasScroll() ) {
2295 borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
2296 paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
2297 offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
2298 scroll = this.activeMenu.scrollTop();
2299 elementHeight = this.activeMenu.height();
2300 itemHeight = item.height();
2301
2302 if ( offset < 0 ) {
2303 this.activeMenu.scrollTop( scroll + offset );
2304 } else if ( offset + itemHeight > elementHeight ) {
2305 this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
2306 }
2307 }
2308 },
2309
2310 blur: function( event, fromFocus ) {
2311 if ( !fromFocus ) {
2312 clearTimeout( this.timer );
2313 }
2314
2315 if ( !this.active ) {
2316 return;
2317 }
2318
2319 this.active.children( "a" ).removeClass( "ui-state-focus" );
2320 this.active = null;
2321
2322 this._trigger( "blur", event, { item: this.active } );
2323 },
2324
2325 _startOpening: function( submenu ) {
2326 clearTimeout( this.timer );
2327
2328 // Don't open if already open fixes a Firefox bug that caused a .5 pixel
2329 // shift in the submenu position when mousing over the carat icon
2330 if ( submenu.attr( "aria-hidden" ) !== "true" ) {
2331 return;
2332 }
2333
2334 this.timer = this._delay(function() {
2335 this._close();
2336 this._open( submenu );
2337 }, this.delay );
2338 },
2339
2340 _open: function( submenu ) {
2341 var position = $.extend({
2342 of: this.active
2343 }, this.options.position );
2344
2345 clearTimeout( this.timer );
2346 this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
2347 .hide()
2348 .attr( "aria-hidden", "true" );
2349
2350 submenu
2351 .show()
2352 .removeAttr( "aria-hidden" )
2353 .attr( "aria-expanded", "true" )
2354 .position( position );
2355 },
2356
2357 collapseAll: function( event, all ) {
2358 clearTimeout( this.timer );
2359 this.timer = this._delay(function() {
2360 // If we were passed an event, look for the submenu that contains the event
2361 var currentMenu = all ? this.element :
2362 $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
2363
2364 // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
2365 if ( !currentMenu.length ) {
2366 currentMenu = this.element;
2367 }
2368
2369 this._close( currentMenu );
2370
2371 this.blur( event );
2372 this.activeMenu = currentMenu;
2373 }, this.delay );
2374 },
2375
2376 // With no arguments, closes the currently active menu - if nothing is active
2377 // it closes all menus. If passed an argument, it will search for menus BELOW
2378 _close: function( startMenu ) {
2379 if ( !startMenu ) {
2380 startMenu = this.active ? this.active.parent() : this.element;
2381 }
2382
2383 startMenu
2384 .find( ".ui-menu" )
2385 .hide()
2386 .attr( "aria-hidden", "true" )
2387 .attr( "aria-expanded", "false" )
2388 .end()
2389 .find( "a.ui-state-active" )
2390 .removeClass( "ui-state-active" );
2391 },
2392
2393 collapse: function( event ) {
2394 var newItem = this.active &&
2395 this.active.parent().closest( ".ui-menu-item", this.element );
2396 if ( newItem && newItem.length ) {
2397 this._close();
2398 this.focus( event, newItem );
2399 }
2400 },
2401
2402 expand: function( event ) {
2403 var newItem = this.active &&
2404 this.active
2405 .children( ".ui-menu " )
2406 .children( ".ui-menu-item" )
2407 .first();
2408
2409 if ( newItem && newItem.length ) {
2410 this._open( newItem.parent() );
2411
2412 // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
2413 this._delay(function() {
2414 this.focus( event, newItem );
2415 });
2416 }
2417 },
2418
2419 next: function( event ) {
2420 this._move( "next", "first", event );
2421 },
2422
2423 previous: function( event ) {
2424 this._move( "prev", "last", event );
2425 },
2426
2427 isFirstItem: function() {
2428 return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
2429 },
2430
2431 isLastItem: function() {
2432 return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
2433 },
2434
2435 _move: function( direction, filter, event ) {
2436 var next;
2437 if ( this.active ) {
2438 if ( direction === "first" || direction === "last" ) {
2439 next = this.active
2440 [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
2441 .eq( -1 );
2442 } else {
2443 next = this.active
2444 [ direction + "All" ]( ".ui-menu-item" )
2445 .eq( 0 );
2446 }
2447 }
2448 if ( !next || !next.length || !this.active ) {
2449 next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
2450 }
2451
2452 this.focus( event, next );
2453 },
2454
2455 nextPage: function( event ) {
2456 var item, base, height;
2457
2458 if ( !this.active ) {
2459 this.next( event );
2460 return;
2461 }
2462 if ( this.isLastItem() ) {
2463 return;
2464 }
2465 if ( this._hasScroll() ) {
2466 base = this.active.offset().top;
2467 height = this.element.height();
2468 this.active.nextAll( ".ui-menu-item" ).each(function() {
2469 item = $( this );
2470 return item.offset().top - base - height < 0;
2471 });
2472
2473 this.focus( event, item );
2474 } else {
2475 this.focus( event, this.activeMenu.children( ".ui-menu-item" )
2476 [ !this.active ? "first" : "last" ]() );
2477 }
2478 },
2479
2480 previousPage: function( event ) {
2481 var item, base, height;
2482 if ( !this.active ) {
2483 this.next( event );
2484 return;
2485 }
2486 if ( this.isFirstItem() ) {
2487 return;
2488 }
2489 if ( this._hasScroll() ) {
2490 base = this.active.offset().top;
2491 height = this.element.height();
2492 this.active.prevAll( ".ui-menu-item" ).each(function() {
2493 item = $( this );
2494 return item.offset().top - base + height > 0;
2495 });
2496
2497 this.focus( event, item );
2498 } else {
2499 this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
2500 }
2501 },
2502
2503 _hasScroll: function() {
2504 return this.element.outerHeight() < this.element.prop( "scrollHeight" );
2505 },
2506
2507 select: function( event ) {
2508 // TODO: It should never be possible to not have an active item at this
2509 // point, but the tests don't trigger mouseenter before click.
2510 this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
2511 var ui = { item: this.active };
2512 if ( !this.active.has( ".ui-menu" ).length ) {
2513 this.collapseAll( event, true );
2514 }
2515 this._trigger( "select", event, ui );
2516 }
2517});
2518
2519}( jQuery ));
diff --git a/app/Resources/views/_global/public/js/jquery-ui-1.10.4.custom.min.js b/app/Resources/views/_global/public/js/jquery-ui-1.10.4.custom.min.js
new file mode 100644
index 00000000..31635026
--- /dev/null
+++ b/app/Resources/views/_global/public/js/jquery-ui-1.10.4.custom.min.js
@@ -0,0 +1,6 @@
1/*! jQuery UI - v1.10.4 - 2014-03-08
2* http://jqueryui.com
3* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.position.js, jquery.ui.autocomplete.js, jquery.ui.menu.js
4* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
5
6(function(e,t){function i(t,i){var s,a,o,r=t.nodeName.toLowerCase();return"area"===r?(s=t.parentNode,a=s.name,t.href&&a&&"map"===s.nodeName.toLowerCase()?(o=e("img[usemap=#"+a+"]")[0],!!o&&n(o)):!1):(/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||i:i)&&n(t)}function n(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var s=0,a=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.4",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,n){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),n&&n.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var n,s,a=e(this[0]);a.length&&a[0]!==document;){if(n=a.css("position"),("absolute"===n||"relative"===n||"fixed"===n)&&(s=parseInt(a.css("zIndex"),10),!isNaN(s)&&0!==s))return s;a=a.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++s)})},removeUniqueId:function(){return this.each(function(){a.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,n){return!!e.data(t,n[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var n=e.attr(t,"tabindex"),s=isNaN(n);return(s||n>=0)&&i(t,!s)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,n){function s(t,i,n,s){return e.each(a,function(){i-=parseFloat(e.css(t,"padding"+this))||0,n&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),s&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var a="Width"===n?["Left","Right"]:["Top","Bottom"],o=n.toLowerCase(),r={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+n]=function(i){return i===t?r["inner"+n].call(this):this.each(function(){e(this).css(o,s(this,i)+"px")})},e.fn["outer"+n]=function(t,i){return"number"!=typeof t?r["outer"+n].call(this,t):this.each(function(){e(this).css(o,s(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,n){var s,a=e.ui[t].prototype;for(s in n)a.plugins[s]=a.plugins[s]||[],a.plugins[s].push([i,n[s]])},call:function(e,t,i){var n,s=e.plugins[t];if(s&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(n=0;s.length>n;n++)e.options[s[n][0]]&&s[n][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var n=i&&"left"===i?"scrollLeft":"scrollTop",s=!1;return t[n]>0?!0:(t[n]=1,s=t[n]>0,t[n]=0,s)}})})(jQuery);(function(t,e){var i=0,s=Array.prototype.slice,n=t.cleanData;t.cleanData=function(e){for(var i,s=0;null!=(i=e[s]);s++)try{t(i).triggerHandler("remove")}catch(o){}n(e)},t.widget=function(i,s,n){var o,a,r,h,l={},c=i.split(".")[0];i=i.split(".")[1],o=c+"-"+i,n||(n=s,s=t.Widget),t.expr[":"][o.toLowerCase()]=function(e){return!!t.data(e,o)},t[c]=t[c]||{},a=t[c][i],r=t[c][i]=function(t,i){return this._createWidget?(arguments.length&&this._createWidget(t,i),e):new r(t,i)},t.extend(r,a,{version:n.version,_proto:t.extend({},n),_childConstructors:[]}),h=new s,h.options=t.widget.extend({},h.options),t.each(n,function(i,n){return t.isFunction(n)?(l[i]=function(){var t=function(){return s.prototype[i].apply(this,arguments)},e=function(t){return s.prototype[i].apply(this,t)};return function(){var i,s=this._super,o=this._superApply;return this._super=t,this._superApply=e,i=n.apply(this,arguments),this._super=s,this._superApply=o,i}}(),e):(l[i]=n,e)}),r.prototype=t.widget.extend(h,{widgetEventPrefix:a?h.widgetEventPrefix||i:i},l,{constructor:r,namespace:c,widgetName:i,widgetFullName:o}),a?(t.each(a._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,r,i._proto)}),delete a._childConstructors):s._childConstructors.push(r),t.widget.bridge(i,r)},t.widget.extend=function(i){for(var n,o,a=s.call(arguments,1),r=0,h=a.length;h>r;r++)for(n in a[r])o=a[r][n],a[r].hasOwnProperty(n)&&o!==e&&(i[n]=t.isPlainObject(o)?t.isPlainObject(i[n])?t.widget.extend({},i[n],o):t.widget.extend({},o):o);return i},t.widget.bridge=function(i,n){var o=n.prototype.widgetFullName||i;t.fn[i]=function(a){var r="string"==typeof a,h=s.call(arguments,1),l=this;return a=!r&&h.length?t.widget.extend.apply(null,[a].concat(h)):a,r?this.each(function(){var s,n=t.data(this,o);return n?t.isFunction(n[a])&&"_"!==a.charAt(0)?(s=n[a].apply(n,h),s!==n&&s!==e?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):e):t.error("no such method '"+a+"' for "+i+" widget instance"):t.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+a+"'")}):this.each(function(){var e=t.data(this,o);e?e.option(a||{})._init():t.data(this,o,new n(a,this))}),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this.bindings=t(),this.hoverable=t(),this.focusable=t(),s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:t.noop,_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:t.noop,widget:function(){return this.element},option:function(i,s){var n,o,a,r=i;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof i)if(r={},n=i.split("."),i=n.shift(),n.length){for(o=r[i]=t.widget.extend({},this.options[i]),a=0;n.length-1>a;a++)o[n[a]]=o[n[a]]||{},o=o[n[a]];if(i=n.pop(),1===arguments.length)return o[i]===e?null:o[i];o[i]=s}else{if(1===arguments.length)return this.options[i]===e?null:this.options[i];r[i]=s}return this._setOptions(r),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return this.options[t]=e,"disabled"===t&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!e).attr("aria-disabled",e),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var o,a=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=o=t(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,o=this.widget()),t.each(n,function(n,r){function h(){return i||a.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof r?a[r]:r).apply(a,arguments):e}"string"!=typeof r&&(h.guid=r.guid=r.guid||h.guid||t.guid++);var l=n.match(/^(\w+)\s*(.*)$/),c=l[1]+a.eventNamespace,u=l[2];u?o.delegate(u,c,h):s.bind(c,h)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(e).undelegate(e)},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){t(e.currentTarget).addClass("ui-state-hover")},mouseleave:function(e){t(e.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){t(e.currentTarget).addClass("ui-state-focus")},focusout:function(e){t(e.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}})})(jQuery);(function(t,e){function i(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function s(e,i){return parseInt(t.css(e,i),10)||0}function n(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}t.ui=t.ui||{};var a,o=Math.max,r=Math.abs,l=Math.round,h=/left|center|right/,c=/top|center|bottom/,u=/[\+\-]\d+(\.[\d]+)?%?/,d=/^\w+/,p=/%$/,f=t.fn.position;t.position={scrollbarWidth:function(){if(a!==e)return a;var i,s,n=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=n.children()[0];return t("body").append(n),i=o.offsetWidth,n.css("overflow","scroll"),s=o.offsetWidth,i===s&&(s=n[0].clientWidth),n.remove(),a=i-s},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,a="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:a?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s?i.width():i.outerWidth(),height:s?i.height():i.outerHeight()}}},t.fn.position=function(e){if(!e||!e.of)return f.apply(this,arguments);e=t.extend({},e);var a,p,g,m,v,_,b=t(e.of),y=t.position.getWithinInfo(e.within),k=t.position.getScrollInfo(y),w=(e.collision||"flip").split(" "),D={};return _=n(b),b[0].preventDefault&&(e.at="left top"),p=_.width,g=_.height,m=_.offset,v=t.extend({},m),t.each(["my","at"],function(){var t,i,s=(e[this]||"").split(" ");1===s.length&&(s=h.test(s[0])?s.concat(["center"]):c.test(s[0])?["center"].concat(s):["center","center"]),s[0]=h.test(s[0])?s[0]:"center",s[1]=c.test(s[1])?s[1]:"center",t=u.exec(s[0]),i=u.exec(s[1]),D[this]=[t?t[0]:0,i?i[0]:0],e[this]=[d.exec(s[0])[0],d.exec(s[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===e.at[0]?v.left+=p:"center"===e.at[0]&&(v.left+=p/2),"bottom"===e.at[1]?v.top+=g:"center"===e.at[1]&&(v.top+=g/2),a=i(D.at,p,g),v.left+=a[0],v.top+=a[1],this.each(function(){var n,h,c=t(this),u=c.outerWidth(),d=c.outerHeight(),f=s(this,"marginLeft"),_=s(this,"marginTop"),x=u+f+s(this,"marginRight")+k.width,C=d+_+s(this,"marginBottom")+k.height,M=t.extend({},v),T=i(D.my,c.outerWidth(),c.outerHeight());"right"===e.my[0]?M.left-=u:"center"===e.my[0]&&(M.left-=u/2),"bottom"===e.my[1]?M.top-=d:"center"===e.my[1]&&(M.top-=d/2),M.left+=T[0],M.top+=T[1],t.support.offsetFractions||(M.left=l(M.left),M.top=l(M.top)),n={marginLeft:f,marginTop:_},t.each(["left","top"],function(i,s){t.ui.position[w[i]]&&t.ui.position[w[i]][s](M,{targetWidth:p,targetHeight:g,elemWidth:u,elemHeight:d,collisionPosition:n,collisionWidth:x,collisionHeight:C,offset:[a[0]+T[0],a[1]+T[1]],my:e.my,at:e.at,within:y,elem:c})}),e.using&&(h=function(t){var i=m.left-M.left,s=i+p-u,n=m.top-M.top,a=n+g-d,l={target:{element:b,left:m.left,top:m.top,width:p,height:g},element:{element:c,left:M.left,top:M.top,width:u,height:d},horizontal:0>s?"left":i>0?"right":"center",vertical:0>a?"top":n>0?"bottom":"middle"};u>p&&p>r(i+s)&&(l.horizontal="center"),d>g&&g>r(n+a)&&(l.vertical="middle"),l.important=o(r(i),r(s))>o(r(n),r(a))?"horizontal":"vertical",e.using.call(this,t,l)}),c.offset(t.extend(M,{using:h}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,l=n-r,h=r+e.collisionWidth-a-n;e.collisionWidth>a?l>0&&0>=h?(i=t.left+l+e.collisionWidth-a-n,t.left+=l-i):t.left=h>0&&0>=l?n:l>h?n+a-e.collisionWidth:n:l>0?t.left+=l:h>0?t.left-=h:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,l=n-r,h=r+e.collisionHeight-a-n;e.collisionHeight>a?l>0&&0>=h?(i=t.top+l+e.collisionHeight-a-n,t.top+=l-i):t.top=h>0&&0>=l?n:l>h?n+a-e.collisionHeight:n:l>0?t.top+=l:h>0?t.top-=h:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,a=n.offset.left+n.scrollLeft,o=n.width,l=n.isWindow?n.scrollLeft:n.offset.left,h=t.left-e.collisionPosition.marginLeft,c=h-l,u=h+e.collisionWidth-o-l,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-o-a,(0>i||r(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-l,(s>0||u>r(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,a=n.offset.top+n.scrollTop,o=n.height,l=n.isWindow?n.scrollTop:n.offset.top,h=t.top-e.collisionPosition.marginTop,c=h-l,u=h+e.collisionHeight-o-l,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-o-a,t.top+p+f+g>c&&(0>s||r(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-l,t.top+p+f+g>u&&(i>0||u>r(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}},function(){var e,i,s,n,a,o=document.getElementsByTagName("body")[0],r=document.createElement("div");e=document.createElement(o?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},o&&t.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(a in s)e.style[a]=s[a];e.appendChild(r),i=o||document.documentElement,i.insertBefore(e,i.firstChild),r.style.cssText="position: absolute; left: 10.7432222px;",n=t(r).offset().left,t.support.offsetFractions=n>10&&11>n,e.innerHTML="",i.removeChild(e)}()})(jQuery);(function(e){e.widget("ui.autocomplete",{version:"1.10.4",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,undefined;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:case a.NUMPAD_ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),undefined;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),undefined):(this._searchTimeout(e),undefined)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,undefined):(clearTimeout(this.searching),this.close(e),this._change(e),undefined)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().data("ui-menu"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){if(this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type)))return this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),undefined;var s=i.item.data("ui-autocomplete-item");!1!==this._trigger("focus",t,{item:s})?t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(s.value):this.liveRegion.text(s.value)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("<span>",{role:"status","aria-live":"polite"}).addClass("ui-helper-hidden-accessible").insertBefore(this.element),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){this.term!==this._value()&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger("search",t)!==!1?this._search(e):undefined},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return"string"==typeof t?{label:t,value:t}:e.extend({label:t.label||t.value,value:t.value||t.label},t)})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").append(e("<a>").text(i.label)).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this._value(this.term),this.menu.blur(),undefined):(this.menu[e](t),undefined):(this.search(null,t),undefined)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var t;this._superApply(arguments),this.options.disabled||this.cancelSearch||(t=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.text(t))}})})(jQuery);(function(t){t.widget("ui.menu",{version:"1.10.4",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,t.proxy(function(t){this.options.disabled&&t.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(t){t.preventDefault()},"click .ui-state-disabled > a":function(t){t.preventDefault()},"click .ui-menu-item:has(a)":function(e){var i=t(e.target).closest(".ui-menu-item");!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&t(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){var i=t(e.currentTarget);i.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(e,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.children(".ui-menu-item").eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){t.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){t(e.target).closest(".ui-menu").length||this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var e=t(this);e.data("ui-menu-submenu-carat")&&e.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(e){function i(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,a,o,r,l=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:l=!1,n=this.previousFilter||"",a=String.fromCharCode(e.keyCode),o=!1,clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())}),s=o&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(a=String.fromCharCode(e.keyCode),r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())})),s.length?(this.focus(e,s),s.length>1?(this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}l&&e.preventDefault()},_activate:function(t){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i=this.options.icons.submenu,s=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),s.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),s=e.prev("a"),n=t("<span>").addClass("ui-menu-icon ui-icon "+i).data("ui-menu-submenu-carat",!0);s.attr("aria-haspopup","true").prepend(n),e.attr("aria-labelledby",s.attr("id"))}),e=s.add(this.element),e.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),e.children(":not(.ui-menu-item)").each(function(){var e=t(this);/[^\-\u2014\u2013\s]/.test(e.text())||e.addClass("ui-widget-content ui-menu-divider")}),e.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){"icons"===t&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(e.submenu),this._super(t,e)},focus:function(t,e){var i,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=e.height(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",t,{item:this.active}))},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.children(".ui-menu-item")[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())),undefined):(this.next(e),undefined)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item").first())),undefined):(this.next(e),undefined)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)}})})(jQuery); \ No newline at end of file
diff --git a/app/Resources/views/_global/public/js/popupForm.js b/app/Resources/views/_global/public/js/popupForm.js
new file mode 100644
index 00000000..d233e600
--- /dev/null
+++ b/app/Resources/views/_global/public/js/popupForm.js
@@ -0,0 +1,72 @@
1$(document).ready(function() {
2
3 $("#search-form").hide();
4 $("#bagit-form").hide();
5
6 //---------------------------------------------------------------------------
7 // Toggle the "Search" popup in the sidebar
8 //---------------------------------------------------------------------------
9 function toggleSearch() {
10 $("#search-form").toggle();
11 $("#search").toggleClass("current");
12 $("#search").toggleClass("active-current");
13 $("#search-arrow").toggleClass("arrow-down");
14 if ($("#search").hasClass("current")) {
15 $("#content").addClass("opacity03");
16 } else {
17 $("#content").removeClass("opacity03");
18 }
19 }
20
21 //---------------------------------------------------------------------------
22 // Toggle the "Save a Link" popup in the sidebar
23 //---------------------------------------------------------------------------
24 function toggleBagit() {
25 $("#bagit-form").toggle();
26 $("#bagit").toggleClass("current");
27 $("#bagit").toggleClass("active-current");
28 $("#bagit-arrow").toggleClass("arrow-down");
29 if ($("#bagit").hasClass("current")) {
30 $("#content").addClass("opacity03");
31 } else {
32 $("#content").removeClass("opacity03");
33 }
34 }
35
36 //---------------------------------------------------------------------------
37 // Close all #links popups in the sidebar
38 //---------------------------------------------------------------------------
39 function closePopups() {
40 $("#links .messages").hide();
41 $("#links > li > a").removeClass("active-current");
42 $("#links > li > a").removeClass("current");
43 $("[id$=-arrow]").removeClass("arrow-down");
44 $("#content").removeClass("opacity03");
45 }
46
47 $("#search").click(function(){
48 closePopups();
49 toggleSearch();
50 $("#searchfield").focus();
51 });
52
53 $("#bagit").click(function(){
54 closePopups();
55 toggleBagit();
56 $("#plainurl").focus();
57 });
58
59 $("#search-form-close").click(function(){
60 toggleSearch();
61 });
62
63 $("#bagit-form-close").click(function(){
64 toggleBagit();
65 });
66
67 // $("#").click(function(){
68 // toggleSearch();
69 // });
70
71
72});
diff --git a/app/Resources/views/_global/public/js/restoreScroll.js b/app/Resources/views/_global/public/js/restoreScroll.js
new file mode 100644
index 00000000..331c9e19
--- /dev/null
+++ b/app/Resources/views/_global/public/js/restoreScroll.js
@@ -0,0 +1,25 @@
1function supportsLocalStorage() {
2 try {
3 return 'localStorage' in window && window['localStorage'] !== null;
4 } catch (e) {
5 return false;
6 }
7}
8
9function savePercent(id, percent) {
10 if (!supportsLocalStorage()) { return false; }
11 localStorage["poche.article." + id + ".percent"] = percent;
12 return true;
13}
14
15function retrievePercent(id) {
16 if (!supportsLocalStorage()) { return false; }
17
18 var bheight = $(document).height();
19 var percent = localStorage["poche.article." + id + ".percent"];
20 var scroll = bheight * percent;
21
22 $('html,body').animate({scrollTop: scroll}, 'fast');
23
24 return true;
25} \ No newline at end of file
diff --git a/app/Resources/views/_global/public/js/saveLink.js b/app/Resources/views/_global/public/js/saveLink.js
new file mode 100755
index 00000000..a7acd84c
--- /dev/null
+++ b/app/Resources/views/_global/public/js/saveLink.js
@@ -0,0 +1,109 @@
1$.fn.ready(function() {
2
3 var $bagit = $('#bagit'),
4 $bagitForm = $('#bagit-form'),
5 $bagitFormForm = $('#bagit-form-form');
6
7 /* ==========================================================================
8 bag it link and close button
9 ========================================================================== */
10
11 function toggleSaveLinkForm(url, event) {
12 $("#add-link-result").empty();
13
14 $bagit.toggleClass("active-current");
15
16 //only if bag-it link is not presented on page
17 if ( $bagit.length === 0 ) {
18 if ( event !== 'undefined' && event ) {
19 $bagitForm.css( {position:"absolute", top:event.pageY, left:event.pageX-200});
20 }
21 else {
22 $bagitForm.css( {position:"relative", top:"auto", left:"auto"});
23 }
24 }
25
26 if ($("#search-form").length != 0) {
27 $("#search").removeClass("current");
28 $("#search-arrow").removeClass("arrow-down");
29 $("#search-form").hide();
30 }
31 $bagitForm.toggle();
32 $('#content').toggleClass("opacity03");
33 if (url !== 'undefined' && url) {
34 $('#plainurl').val(url);
35 }
36 $('#plainurl').focus();
37 }
38
39 //---------------------------------------------------------------------------
40 // These two functions are now taken care of in popupForm.js
41 //---------------------------------------------------------------------------
42
43 // $bagit.click(function(){
44 // $bagit.toggleClass("current");
45 // $("#bagit-arrow").toggleClass("arrow-down");
46 // toggleSaveLinkForm();
47 // });
48
49 // $("#bagit-form-close").click(function(){
50 // $bagit.removeClass("current");
51 // $("#bagit-arrow").removeClass("arrow-down");
52 // toggleSaveLinkForm();
53 // });
54
55
56 //send "bag it link" form request via ajax
57 $bagitFormForm.submit( function(event) {
58 $("body").css("cursor", "wait");
59 $("#add-link-result").empty();
60
61 $.ajax({
62 type: $bagitFormForm.attr('method'),
63 url: $bagitFormForm.attr('action'),
64 data: $bagitFormForm.serialize(),
65 success: function(data) {
66 $('#add-link-result').html("Done!");
67 $('#plainurl').val('');
68 $('#plainurl').blur('');
69 $("body").css("cursor", "auto");
70 //setTimeout( function() { toggleSaveLinkForm(); }, 1000); //close form after 1000 delay
71 },
72 error: function(data) {
73 $('#add-link-result').html("Failed!");
74 $("body").css("cursor", "auto");
75 }
76 });
77
78 event.preventDefault();
79 });
80
81 /* ==========================================================================
82 Keyboard gestion
83 ========================================================================== */
84
85 $(window).keydown(function(e){
86 if ( ( e.target.tagName.toLowerCase() !== 'input' && e.keyCode == 83 ) || (e.keyCode == 27 && $bagitForm.is(':visible') ) ) {
87 $bagit.removeClass("current");
88 $("#bagit-arrow").removeClass("arrow-down");
89 toggleSaveLinkForm();
90 return false;
91 }
92 });
93
94 /* ==========================================================================
95 Process all links inside an article
96 ========================================================================== */
97
98 $("article a[href^='http']").after(function() {
99 return " <a href=\"" + $(this).attr('href') + "\" class=\"add-to-wallabag-link-after\" alt=\"add to wallabag\" title=\"add to wallabag\"></a> ";
100 });
101
102 $(".add-to-wallabag-link-after").click(function(event){
103 toggleSaveLinkForm($(this).attr('href'), event);
104 event.preventDefault();
105 });
106
107});
108
109
diff --git a/app/Resources/views/baggy/README.md b/app/Resources/views/baggy/README.md
new file mode 100755
index 00000000..1f0054a4
--- /dev/null
+++ b/app/Resources/views/baggy/README.md
@@ -0,0 +1,3 @@
1# Baggy Theme
2
3theme created by Thomas LEBEAU alias Courgette http://thomaslebeau.fr/ \ No newline at end of file
diff --git a/app/Resources/views/baggy/_display-mode.twig b/app/Resources/views/baggy/_display-mode.twig
new file mode 100755
index 00000000..382dd5f1
--- /dev/null
+++ b/app/Resources/views/baggy/_display-mode.twig
@@ -0,0 +1,5 @@
1<div id="display-mode">
2 <a href="javascript: void(null);" id="listmode" class="listmode">
3 <img src="{{ poche_url }}themes/{{ theme }}/img/{{ theme }}/blank.png" alt="{% trans "toggle view mode" %}" title="{% trans "toggle view mode" %}" width="16" height="16">
4 </a>
5</div>
diff --git a/app/Resources/views/baggy/_head.twig b/app/Resources/views/baggy/_head.twig
new file mode 100755
index 00000000..a88d4186
--- /dev/null
+++ b/app/Resources/views/baggy/_head.twig
@@ -0,0 +1,39 @@
1 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-152.png" sizes="152x152">
2 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-152.png" sizes="152x152">
3
4 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-144.png" sizes="144x144">
5 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-144.png" sizes="144x144">
6
7 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-120.png" sizes="120x120">
8 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-120.png" sizes="120x120">
9
10 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-114.png" sizes="114x114">
11 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-114.png" sizes="114x114">
12
13 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-76.png" sizes="76x76">
14 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-76.png" sizes="76x76">
15
16 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-72.png" sizes="72x72">
17 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-72.png" sizes="72x72">
18
19 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-57.png" sizes="57x57">
20 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-57.png" sizes="57x57">
21
22 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon.png">
23 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon.png">
24
25 <link rel="shortcut icon" type="image/x-icon" href="{{ poche_url }}themes/_global/img/appicon/favicon.ico" sizes="16x16">
26
27 <link rel="stylesheet" href="{{ poche_url }}themes/{{theme}}/css/ratatouille.css" media="all">
28 <link rel="stylesheet" href="{{ poche_url }}themes/{{theme}}/css/font.css" media="all">
29 <link rel="stylesheet" href="{{ poche_url }}themes/{{theme}}/css/main.css" media="all">
30 <link rel="stylesheet" href="{{ poche_url }}themes/{{theme}}/css/messages.css" media="all">
31 <link rel="stylesheet" href="{{ poche_url }}themes/{{theme}}/css/print.css" media="print">
32
33 <script src="{{ poche_url }}themes/_global/js/jquery-2.0.3.min.js"></script>
34 <script src="{{ poche_url }}themes/_global/js/autoClose.js"></script>
35 <script src="{{ poche_url }}themes/{{theme}}/js/jquery.cookie.js"></script>
36 <script src="{{ poche_url }}themes/{{theme}}/js/init.js"></script>
37 <script src="{{ poche_url }}themes/_global/js/saveLink.js"></script>
38 <script src="{{ poche_url }}themes/_global/js/popupForm.js"></script>
39 <script src="{{ poche_url }}themes/{{theme}}/js/closeMessage.js"></script>
diff --git a/app/Resources/views/baggy/_menu.twig b/app/Resources/views/baggy/_menu.twig
new file mode 100644
index 00000000..8b80f65d
--- /dev/null
+++ b/app/Resources/views/baggy/_menu.twig
@@ -0,0 +1,17 @@
1 <button id="menu" class="icon icon-menu desktopHide"><span>Menu</span></button>
2 <ul id="links" class="links">
3 <li><a href="./" {% if view == 'home' %}class="current"{% endif %}>{% trans "unread" %}</a></li>
4 <li><a href="./?view=fav" {% if view == 'fav' %}class="current"{% endif %}>{% trans "favorites" %}</a></li>
5 <li><a href="./?view=archive" {% if view == 'archive' %}class="current"{% endif %}>{% trans "archive" %}</a></li>
6 <li><a href="./?view=tags" {% if view == 'tags' %}class="current"{% endif %}>{% trans "tags" %}</a></li>
7 <li style="position: relative;"><a href="javascript: void(null);" id="bagit">{% trans "save a link" %}</a>
8 {% include '_pocheit-form.twig' %}
9 </li>
10 <li style="position: relative;"><a href="javascript: void(null);" id="search">{% trans "search" %}</a>
11 {% include '_search-form.twig' %}
12 </li>
13 <li><a href="./?view=config" {% if view == 'config' %}class="current"{% endif %}>{% trans "config" %}</a></li>
14 <li><a href="./?view=about" {% if view == 'about' %}class="current"{% endif %}>{% trans "about" %}</a></li>
15 <li><a class="icon icon-power" href="./?logout" title="{% trans "logout" %}">{% trans "logout" %}</a></li>
16 </ul>
17
diff --git a/app/Resources/views/baggy/_pocheit-form.twig b/app/Resources/views/baggy/_pocheit-form.twig
new file mode 100755
index 00000000..bf2ae903
--- /dev/null
+++ b/app/Resources/views/baggy/_pocheit-form.twig
@@ -0,0 +1,10 @@
1<div id="bagit-form" class="messages info popup-form">
2 <form method="get" action="index.php" target="_blank" id="bagit-form-form">
3 <h2>{% trans "Save a link" %}</h2>
4 <a href="javascript: void(null);" id="bagit-form-close" class="close-button--popup close-button">&times;</a>
5 <input type="hidden" name="autoclose" value="1" />
6 <input required placeholder="example.com/article" class="addurl" id="plainurl" name="plainurl" type="url" />
7 <span id="add-link-result"></span>
8 <input type="submit" value="{% trans "save link!" %}" />
9 </form>
10</div>
diff --git a/app/Resources/views/baggy/_search-form.twig b/app/Resources/views/baggy/_search-form.twig
new file mode 100644
index 00000000..73f7951f
--- /dev/null
+++ b/app/Resources/views/baggy/_search-form.twig
@@ -0,0 +1,9 @@
1<div id="search-form" class="messages info popup-form">
2<form method="get" action="index.php">
3 <h2>{%trans "Search" %}</h2>
4 <a href="javascript: void(null);" id="search-form-close" class="close-button--popup close-button">&times;</a>
5 <input type="hidden" name="view" value="search"></input>
6 <input required placeholder="{% trans "Enter your search here" %}" type="text" name="search" id="searchfield"><br>
7 <input id="submit-search" type="submit" value="{% trans "Search" %}"></input>
8</form>
9</div>
diff --git a/app/Resources/views/baggy/_top.twig b/app/Resources/views/baggy/_top.twig
new file mode 100755
index 00000000..a31c0925
--- /dev/null
+++ b/app/Resources/views/baggy/_top.twig
@@ -0,0 +1,7 @@
1 <header class="w600p center mbm">
2 <h1 class="logo">
3 {% if view == 'home' %}{% block logo %}<img width="100" height="100" src="{{ poche_url }}themes/{{theme}}/img/logo-w.png" alt="wallabag logo" />{% endblock %}
4 {% else %}<a href="./" title="{% trans "return home" %}" >{{ block('logo') }}</a>
5 {% endif %}
6 </h1>
7 </header>
diff --git a/app/Resources/views/baggy/about.twig b/app/Resources/views/baggy/about.twig
new file mode 100755
index 00000000..d18fe156
--- /dev/null
+++ b/app/Resources/views/baggy/about.twig
@@ -0,0 +1,84 @@
1{% extends "layout.twig" %}
2
3{% block title %}{% trans "About" %}{% endblock %}
4{% block menu %}
5{% include '_menu.twig' %}
6{% endblock %}
7{% block content %}
8 <h2>{% trans "About wallabag" %}</h2>
9
10 <dl>
11 <dt>{% trans "Project website" %}</dt>
12 <dd><a href="https://www.wallabag.org">https://www.wallabag.org</a></dd>
13
14 <dt>{% trans "Main developer" %}</dt>
15 <dd><a href="mailto:nicolas@loeuillet.org">Nicolas Lœuillet</a> — <a href="http://cdetc.fr">{% trans "website" %}</a></dd>
16
17 <dt>{% trans "Contributors:" %}</dt>
18 <dd><a href="https://github.com/wallabag/wallabag/graphs/contributors">{% trans "on Github" %}</a></dd>
19
20 <dt>{% trans "Bug reports" %}</dt>
21 <dd><a href="https://support.wallabag.org">{% trans "On our support website" %}</a> {% trans "or" %} <a href="https://github.com/wallabag/wallabag/issues">{% trans "on Github" %}</a></dd>
22
23 <dt>{% trans "License" %}</dt>
24 <dd><a href="http://en.wikipedia.org/wiki/MIT_License">MIT</a></dd>
25
26 <dt>{% trans "Version" %}</dt>
27 <dd>{{ constant('WALLABAG') }}</dd>
28 </dl>
29
30 <p>{% trans "wallabag is a read-it-later application: you can save a web page by keeping only content. Elements like ads or menus are deleted." %}</p>
31
32 <h2>{% trans "Getting help" %}</h2>
33
34 <dl>
35 <dt>{% trans "Documentation" %}</dt>
36 <dd><a href="docs/">Offline documentation</a> and <a href="https://doc.wallabag.org/">online documentation</a> (up to date)</dd>
37
38 <dt>{% trans "Support" %}</dt>
39 <dd><a href="http://support.wallabag.org/">http://support.wallabag.org/</a></dd>
40 </dl>
41
42 <h2>{% trans "Helping wallabag" %}</h2>
43
44 <p>{% trans "wallabag is free and opensource. You can help us:" %}</p>
45
46 <dl>
47 <dt><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb">{% trans "via Paypal" %}</a></dt>
48
49 <dt><a href="https://flattr.com/thing/1265480">{% trans "via Flattr" %}</a></dt>
50 </dl>
51
52 <h2>{% trans "Credits" %}</h2>
53 <dl>
54 <dt>PHP Readability</dt>
55 <dd><a href="https://bitbucket.org/fivefilters/php-readability">https://bitbucket.org/fivefilters/php-readability</a></dd>
56
57 <dt>Full Text RSS</dt>
58 <dd><a href="http://code.fivefilters.org/full-text-rss/src">http://code.fivefilters.org/full-text-rss/src</a></dd>
59
60 <dt>logo by Maylis Agniel</dt>
61 <dd><a href="https://github.com/wallabag/logo">https://github.com/wallabag/logo</a></dd>
62
63 <dt>icons</dt>
64 <dd><a href="http://icomoon.io">http://icomoon.io</a></dd>
65
66 <dt>PHP Simple HTML DOM Parser</dt>
67 <dd><a href="http://simplehtmldom.sourceforge.net/">http://simplehtmldom.sourceforge.net/</a></dd>
68
69 <dt>Session</dt>
70 <dd><a href="https://github.com/tontof/kriss_feed/blob/master/src/class/Session.php">https://github.com/tontof/kriss_feed/blob/master/src/class/Session.php</a></dd>
71
72 <dt>Twig</dt>
73 <dd><a href="http://twig.sensiolabs.org">http://twig.sensiolabs.org</a></dd>
74
75 <dt>Flash messages</dt>
76 <dd><a href="https://github.com/plasticbrain/PHP-Flash-Messages">https://github.com/plasticbrain/PHP-Flash-Messages</a></dd>
77
78 <dt>Pagination</dt>
79 <dd><a href="https://github.com/daveismyname/pagination">https://github.com/daveismyname/pagination</a></dd>
80
81 <dt>PHPePub</dt>
82 <dd><a href="https://github.com/Grandt/PHPePub/">https://github.com/Grandt/PHPePub/</a></dd>
83 </dl>
84{% endblock %}
diff --git a/app/Resources/views/baggy/config.twig b/app/Resources/views/baggy/config.twig
new file mode 100755
index 00000000..6031f489
--- /dev/null
+++ b/app/Resources/views/baggy/config.twig
@@ -0,0 +1,187 @@
1{% extends "layout.twig" %}
2
3{% block title %}{% trans "config" %}{% endblock %}
4{% block menu %}
5{% include '_menu.twig' %}
6{% endblock %}
7{% block content %}
8 <h2>{% trans "Saving articles" %}</h2>
9 <p>{% trans "There are several ways to save an article:" %} {% trans "(<a href=\"http://doc.wallabag.org/en/User_documentation/Save_your_first_article\" target=\"_blank\" title=\"Documentation\">?</a>)" %}</p>
10 <p>
11 <form method="get" action="index.php">
12 <label class="addurl" for="config_plainurl">{% trans "By filling this field" %}:</label><br>
13 <input required placeholder="example.com/article" class="addurl" id="config_plainurl" name="plainurl" type="url" />
14 <input type="submit" value="{% trans "bag it!" %}" />
15 </form>
16 </p>
17 <h3>Browser Plugins</h3>
18 <ul>
19 <li><a href="https://addons.mozilla.org/firefox/addon/wallabag/" target="_blank">{% trans "Firefox Add-On" %}</a></li>
20 <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{% trans "Chrome Extension" %}</a></li>
21 </ul>
22 <h3>Mobile Apps</h3>
23 <ul>
24 <li>Android: <a href="https://f-droid.org/app/fr.gaulupeau.apps.InThePoche" target="_blank">{% trans "via F-Droid" %}</a> {% trans " or " %} <a href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" target="_blank">{% trans "via Google Play" %}</a></li>
25 <li>iOS: <a href="https://itunes.apple.com/app/wallabag/id828331015?mt=8" target="_blank">{% trans "download the application" %}</a></li>
26 <li>Windows Phone: <a href="http://www.windowsphone.com/en-us/store/app/wallabag/ff890514-348c-4d0b-9b43-153fff3f7450" target="_blank">{% trans "download the application" %}</a></li>
27 </ul>
28 <h3>{% trans "Bookmarklet" %}</h3>
29 <p>
30 {% trans "Drag &amp; drop this link to your bookmarks bar:" %} <a id="bookmarklet" ondragend="this.click();" href="javascript:if(top['bookmarklet-url@wallabag.org']){top['bookmarklet-url@wallabag.org'];}else{(function(){var%20url%20=%20location.href%20||%20url;window.open('{{ poche_url }}?action=add&url='%20+%20btoa(url),'_self');})();void(0);}">{% trans "bag it!" %}</a>
31 </p>
32
33 <h2>{% trans "Feeds" %}</h2>
34 {% if token == '' %}
35 <p>{% trans "Your feed token is currently empty and must first be generated to enable feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>." %}</p>
36 {% else %}
37 <ul>
38 <li><a href="?feed&amp;type=home&amp;user_id={{ user_id }}&amp;token={{ token }}" target="_blank">{% trans "Unread feed" %}</a></li>
39 <li><a href="?feed&amp;type=fav&amp;user_id={{ user_id }}&amp;token={{ token }}" target="_blank">{% trans "Favorites feed" %}</a></li>
40 <li><a href="?feed&amp;type=archive&amp;user_id={{ user_id }}&amp;token={{ token }}" target="_blank">{% trans "Archive feed" %}</a></li>
41 </ul>
42 <p class="more-info">
43 {% trans "Your token:" %} <strong>{{token}}</strong><br>
44 {% trans "Your user id:" %} <strong>{{user_id}}</strong><br>
45 {% trans "You can regenerate your token: <a href='?feed&amp;action=generate'>generate!</a>." %}
46 </p>
47 {% endif %}
48
49 <h2>{% trans "Change your theme" %}</h2>
50 <form method="post" action="?updatetheme" name="changethemeform">
51 <fieldset class="w500p inline">
52 <div class="row">
53 <label class="col w150p" for="theme">{% trans "Theme:" %}</label>
54 <select class="col" id="theme" name="theme">
55 {% for key, theme in themes %}
56 <option value="{{ key }}" {{ theme.current ? 'selected' : '' }}>{{ theme.name }}</option>
57 {% endfor %}
58 </select>
59 </div>
60 <div class="row mts txtcenter">
61 <button class="bouton" type="submit" tabindex="4">{% trans "Update" %}</button>
62 </div>
63 </fieldset>
64 <input type="hidden" name="returnurl" value="{{ referer }}">
65 <input type="hidden" name="token" value="{{ token }}">
66 </form>
67
68 <h2>{% trans "Change your language" %}</h2>
69 <form method="post" action="?updatelanguage" name="changelanguageform">
70 <fieldset class="w500p inline">
71 <div class="row">
72 <label class="col w150p" for="language">{% trans "Language:" %}</label>
73 <select class="col" id="language" name="language">
74 {% for language in languages %}
75 <option value="{{ language.value }}" {{ language.current ? 'selected' : '' }}>{{ language.name }}</option>
76 {% endfor %}
77 </select>
78 </div>
79 <div class="row mts txtcenter">
80 <button class="bouton" type="submit" tabindex="4">{% trans "Update" %}</button>
81 </div>
82 </fieldset>
83 <input type="hidden" name="returnurl" value="{{ referer }}">
84 <input type="hidden" name="token" value="{{ token }}">
85 </form>
86
87 <h2><a name="import"></a>{% trans "Import" %}</h2>
88 <p>{% trans "You can import your Pocket, Readability, Instapaper, Wallabag or any data in appropriate json or html format." %}</p>
89 <p>{% trans "Please select export file on your computer and press \"Import\" button below. Wallabag will parse your file, insert all URLs and start fetching of articles if required." %}</p>
90 <form method="post" action="?import" name="uploadfile" enctype="multipart/form-data">
91 <fieldset class="w500p">
92 <div class="row">
93 <label class="col w150p" for="file">{% trans "File:" %}</label>
94 <input class="col" type="file" id="file" name="file" tabindex="4" required="required">
95 </div>
96 <div class="row mts txtcenter">
97 <button class="bouton" type="submit" tabindex="4">{% trans "Import" %}</button>
98 </div>
99 </fieldset>
100 </form>
101 <p><a href="?import">{% trans "You can click here to fetch content for articles with no content." %}</a></p>
102 <p class="more-info">{% trans "Fetching process is controlled by two constants in your config file: IMPORT_LIMIT (how many articles are fetched at once) and IMPORT_DELAY (delay between fetch of next batch of articles)." %}</p>
103
104 <h2>{% trans "Export your wallabag data" %}</h2>
105 <p><a href="?export" target="_blank">{% trans "Export JSON" %}</a><br>
106 <span class="more-info">Data will be exported in a single JSON file.</span></p>
107
108 <h2>{% trans "Fancy an E-Book ?" %}</h2>
109 <p>{% trans "Click to get all your articles in one ebook :" %}
110 <ul>
111 <li><a href="./?epub&amp;method=all" title="{% trans 'Generate ePub file' %}">ePub 3</a></li>
112 <li><a href="./?mobi&amp;method=all" title="{% trans 'Generate Mobi file' %}">Mobi</a></li>
113 <li><a href="./?pdf&amp;method=all" title="{% trans 'Generate PDF file' %}">PDF</a></li>
114 </ul>
115
116 <span class="more-info">{% trans "This can <b>take a while</b> and can <b>even fail</b> if you have too many articles, depending on your server configuration." %}</span></p>
117
118 <h2><a name="cache"></a>{% trans "Cache" %}</h2>
119 <p><a href="?empty-cache">{% trans "Delete Cache" %}</a><br>
120 <span class="more-info">Deleting the cache may help with display or other problems.</span></p>
121
122 {% if http_auth == 0 %}
123 <h2>{% trans "Change your password" %}</h2>
124 <form method="post" action="?config" name="loginform">
125 <fieldset class="w500p">
126 <div class="row">
127 <label class="col w150p" for="password">{% trans "New password:" %}</label>
128 <input class="col" type="password" id="password" name="password" placeholder="{% trans "Password" %}" tabindex="2">
129 </div>
130 <div class="row">
131 <label class="col w150p" for="password_repeat">{% trans "Repeat your new password:" %}</label>
132 <input class="col" type="password" id="password_repeat" name="password_repeat" placeholder="{% trans "Password" %}" tabindex="3">
133 </div>
134 <div class="row mts txtcenter">
135 <button class="bouton" type="submit" tabindex="4">{% trans "Update" %}</button>
136 </div>
137 </fieldset>
138 <input type="hidden" name="returnurl" value="{{ referer }}">
139 <input type="hidden" name="token" value="{{ token }}">
140 </form>
141 {% endif %}
142
143 <h2>{% trans 'Add user' %}</h2>
144 <form method="post" action="?newuser">
145 <fieldset class="w500p">
146 <div class="row">
147 <label class="col w150p" for="newusername">{% trans 'Login for new user' %}</label>
148 <input class="col" type="text" id="newusername" name="newusername" placeholder="{% trans 'Login' %}" required>
149 </div>
150 <div class="row">
151 <label class="col w150p" for="password4newuser">{% trans "Password for new user" %}</label>
152 <input class="col" type="password" id="password4newuser" name="password4newuser" placeholder="{% trans 'Password' %}" required>
153 </div>
154 <div class="row">
155 <label class="col w150p" for="newuseremail">{% trans 'Email for new user (not required)' %}</label>
156 <input class="col" type="email" id="newuseremail" name="newuseremail" placeholder="{% trans 'Email' %}">
157 </div>
158 <div class="row mts txtcenter">
159 <button type="submit">{% trans "Add user" %}</button>
160 </div>
161 </fieldset>
162 </form>
163
164 <h2>{% trans "Delete account" %}</h2>
165 {% if not only_user %}<form method="post" action="?deluser">
166 <p>{% trans "You can delete your account by entering your password and validating." %}<br /><b>{% trans "Be careful, data will be erased forever (that is a very long time)." %}</b></p>
167 <fieldset class="w500p">
168 <div class="row">
169 <label class="col w150p" for="password4deletinguser">{% trans "Type here your password" %}</label>
170 <input class="col" type="password" id="password4deletinguser" name="password4deletinguser" placeholder="{% trans "Password" %}">
171 </div>
172 <div class="row mts txtcenter">
173 <button type="submit">{% trans "Delete account" %}</button>
174 </div>
175 </form>
176 {% else %}<p>{% trans "You are the only user, you cannot delete your own account." %}</p>
177 <p>{% trans "To completely remove wallabag, delete the wallabag folder on your web server (and eventual databases)." %}</p>{% endif %}
178
179 <h2>{% trans "Upgrading wallabag" %}</h2>
180 <ul>
181 <li>{% trans "Installed version" %}: <strong>{{ constant('WALLABAG') }}</strong></li>
182 <li>{% trans "Latest stable version" %}: {{ prod }}. {% if compare_prod == -1 %}<strong><a href="http://wallabag.org/">{% trans "A more recent stable version is available." %}</a></strong>{% else %}{% trans "You are up to date." %}{% endif %} ({% trans "Last check:" %} {{ check_time_prod }})</li>
183 {% if constant('DEBUG_POCHE') == 1 %}<li>{% trans "Latest dev version" %}: {{ dev }}. {% if compare_dev == -1 %}<strong><a href="http://wallabag.org/">{% trans "A more recent development version is available." %}</a></strong>{% else %}{% trans "You are up to date." %}{% endif %} ({% trans "Last check:" %} {{ check_time_dev }}){% endif %}</li>
184 </ul>
185 <p class="more-info">{% trans "You can clear cache to check the latest release." %}</p>
186
187{% endblock %}
diff --git a/app/Resources/views/baggy/edit-tags.twig b/app/Resources/views/baggy/edit-tags.twig
new file mode 100755
index 00000000..15f15560
--- /dev/null
+++ b/app/Resources/views/baggy/edit-tags.twig
@@ -0,0 +1,29 @@
1{% extends "layout.twig" %}
2{% block title %}edit tags{% endblock %}
3{% block menu %}
4{% include '_menu.twig' %}
5{% endblock %}
6{% block content %}
7
8<script src="{{ poche_url }}themes/_global/js/jquery-ui-1.10.4.custom.min.js"></script>
9<script src="{{ poche_url }}themes/_global/js/autoCompleteTags.js"></script>
10<link rel="stylesheet" href="{{ poche_url }}themes/_global/css/jquery-ui-1.10.4.custom.min.css" media="all">
11
12<div id="article">
13 <h2>{{ entry.title|raw }}</21>
14</div>
15{% if tags is empty %}
16<div class="notags">{% trans "no tags" %}</div>
17{% endif %}
18<ul>
19{% for tag in tags %}<li>{{ tag.value }} <a href="./?action=remove_tag&amp;tag_id={{ tag.id }}&amp;id={{ entry_id }}">✘</a></li>{% endfor %}
20</ul>
21<form method="post" action="./?action=add_tag">
22 <input type="hidden" name="entry_id" value="{{ entry_id }}" />
23 <label for="value">{% trans "Add tags:" %}</label><input type="text" placeholder="{% trans "interview" %}, {% trans "editorial" %}, {% trans "video" %}" id="value" name="value" required="required" />
24 <input type="submit" value="Tag" />
25 <p>{% trans "Start typing for auto complete." %}<br>
26 {% trans "You can enter multiple tags, separated by commas." %}</p>
27</form>
28<a class="icon icon-reply return" href="./?view=view&id={{ entry_id }}">{% trans "return to article" %}</a>
29{% endblock %}
diff --git a/app/Resources/views/baggy/home.twig b/app/Resources/views/baggy/home.twig
new file mode 100755
index 00000000..93515080
--- /dev/null
+++ b/app/Resources/views/baggy/home.twig
@@ -0,0 +1,81 @@
1{% extends "layout.twig" %}
2{% block title %}
3{% if view == 'fav' %}
4{% trans "favorites" %}
5{% elseif view == 'archive' %}
6{% trans "archive" %}
7{% else %}
8{% trans "unread" %}
9{% endif %}
10{% endblock %}
11{% block menu %}
12{% include '_menu.twig' %}
13{% endblock %}
14{% block content %}
15 {% if tag %}
16 <h3>{% trans "Tag" %}: <b>{{ tag.value }}</b></h3>
17 {% endif %}
18 {% if entries is empty %}
19 <div class="messages warning"><p>{% trans "No articles found." %}</p></div>
20 {% else %}
21 <div>
22 {% include '_display-mode.twig' %}
23 {% include '_sorting.twig' %}
24 </div>
25 {% block pager %}
26 {% if nb_results > 1 %}
27 <div class="results">
28 <div class="nb-results">{{ nb_results }} {% trans "results" %}{% if search_term is defined %} {% trans %}found for « {{ search_term }} »{% endtrans %}{% endif %}</div>
29 {{ page_links | raw }}
30 </div>
31 {% elseif nb_results == 1 %}
32 {% if search_term is defined %}
33 <div class="results">
34 <div class="nb-results">{% trans "Only one result found for " %} « {{ search_term }} »</div>
35 </div>
36 {% endif %}
37 {% endif %}
38 {% endblock %}
39 <div id="list-entries" class="list-entries">
40 {% for entry in entries %}
41 <div id="entry-{{ entry.id|e }}" class="entrie">
42 <h2><a href="index.php?view=view&amp;id={{ entry.id|e }}">{{ entry.title|raw }}</a></h2>
43 {% if entry.content| getReadingTime > 0 %}
44 <div class="estimatedTime"><span class="tool reading-time">{% trans "estimated reading time :" %} {{ entry.content| getReadingTime }} min</span></div>
45 {% else %}
46 <div class="estimatedTime"><span class="tool reading-time">{% trans "estimated reading time :" %} <small class="inferieur">&lt;</small> 1 min</span></div>
47 {% endif %}
48 <ul class="tools links">
49 <li><a title="{% trans "Toggle mark as read" %}" class="tool icon-check icon {% if entry.is_read == 0 %}archive-off{% else %}archive{% endif %}" href="./?action=toggle_archive&amp;id={{ entry.id|e }}"><span>{% trans "Toggle mark as read" %}</span></a></li>
50 <li><a title="{% trans "toggle favorite" %}" class="tool icon-star icon {% if entry.is_fav == 0 %}fav-off{% else %}fav{% endif %}" href="./?action=toggle_fav&amp;id={{ entry.id|e }}"><span>{% trans "toggle favorite" %}</span></a></li>
51 <li><a title="{% trans "delete" %}" class="tool delete icon-trash icon" href="./?action=delete&amp;id={{ entry.id|e }}"><span>{% trans "delete" %}</span></a></li>
52 <li><a href="{{ entry.url|e }}" target="_blank" title="{% trans "original" %} : {{ entry.title|e }}" class="tool link icon-link icon"><span>{{ entry.url | e | getDomain }}</span></a></li>
53 </ul>
54 <p>{{ entry.content|striptags|slice(0, 300) }}...</p>
55 </div>
56
57 {% endfor %}
58 </div>
59 {{ block('pager') }}
60 {% if view == 'home' %}{% if nb_results > 1 %}<p><a title="{% trans "Mark all the entries as read" %}" href="./?action=archive_all">{% trans "Mark all the entries as read" %}</a></p>{% endif %}{% endif %}
61 {% if searchterm is defined %}<a title="{% trans "Tag these results as" %} {{ searchterm }}" href="./?action=add_tag&search={{ searchterm }}">{% trans "Tag these results as" %} {{ searchterm }}</a>{% endif %}<br />
62
63 {% if searchterm is defined %}<a title="{% trans "Delete results matching" %} {{ searchterm }}" href="./?action=delete&search={{ searchterm }}">{% trans "Delete results matching" %} {{ searchterm }}</a>{% endif %}<br />
64
65 {% if tag %}<a title="{% trans "Mark all articles from this tag as read" %}" href="./?action=toggle_archive&amp;tag_id={{ tag.id }}">{% trans "Mark all articles from this tag as read" %}</a><br />{% endif %}
66
67 {% if tag %}
68 {% if constant('EPUB') == 1 %}<a title="{% trans "Download the articles from this tag in an epub file" %}" href="./?epub&amp;method=tag&amp;value={{ tag.value }}">{% trans "Download as ePub3" %}</a>{% endif %}
69 {% if constant('MOBI') == 1 %}<a title="{% trans "Download the articles from this tag in a mobi file" %}" href="./?mobi&amp;method=tag&amp;value={{ tag.value }}">{% trans "Download as Mobi" %}</a>{% endif %}
70 {% if constant('PDF') == 1 %}<a title="{% trans "Download the articles from this tag in a pdf file" %}" href="./?pdf&amp;method=tag&amp;value={{ tag.value }}">{% trans "Download as PDF" %}</a>{% endif %}
71 {% elseif searchterm is defined %}
72 {% if constant('EPUB') == 1 %}<a title="{% trans "Download the articles from this search in an epub" %}" href="./?epub&amp;method=search&amp;value={{ searchterm }}">{% trans "Download as ePub3" %}</a>{% endif %}
73 {% if constant('MOBI') == 1 %}<a title="{% trans "Download the articles from this search in a mobi file" %}" href="./?mobi&amp;method=search&amp;value={{ searchterm }}">{% trans "Download as Mobi" %}</a>{% endif %}
74 {% if constant('PDF') == 1 %}<a title="{% trans "Download the articles from this search in a pdf file" %}" href="./?pdf&amp;method=search&amp;value={{ searchterm }}">{% trans "Download as PDF" %}</a>{% endif %}
75 {% else %}
76 {% if constant('EPUB') == 1 %}<a title="{% trans "Download the articles from this category in an epub" %}" href="./?epub&amp;method=category&amp;value={{ view }}">{% trans "Download as ePub3" %}</a>{% endif %}
77 {% if constant('MOBI') == 1 %}<a title="{% trans "Download the articles from this category in a mobi file" %}" href="./?mobi&amp;method=category&amp;value={{ view }}">{% trans "Download as Mobi" %}</a>{% endif %}
78 {% if constant('PDF') == 1 %}<a title="{% trans "Download the articles from this category in a pdf file" %}" href="./?pdf&amp;method=category&amp;value={{ view }}">{% trans "Download as PDF" %}</a>{% endif %}
79 {% endif %}
80{% endif %}
81{% endblock %}
diff --git a/app/Resources/views/baggy/layout-login.twig b/app/Resources/views/baggy/layout-login.twig
new file mode 100644
index 00000000..4078fbb0
--- /dev/null
+++ b/app/Resources/views/baggy/layout-login.twig
@@ -0,0 +1,31 @@
1<!DOCTYPE html>
2<!--[if lte IE 6]><html class="no-js ie6 ie67 ie678" lang="{{ lang }}"><![endif]-->
3<!--[if lte IE 7]><html class="no-js ie7 ie67 ie678" lang="{{ lang }}"><![endif]-->
4<!--[if IE 8]><html class="no-js ie8 ie678" lang="{{ lang }}"><![endif]-->
5<!--[if gt IE 8]><html class="no-js" lang="{{ lang }}"><![endif]-->
6<html lang="{{ lang }}">
7 <head>
8 <meta name="viewport" content="initial-scale=1.0">
9 <meta charset="utf-8">
10 <!--[if IE]>
11 <meta http-equiv="X-UA-Compatible" content="IE=10">
12 <![endif]-->
13 <title>{% block title %}{% endblock %} - wallabag</title>
14{% include '_head.twig' %}
15{% include '_bookmarklet.twig' %}
16 </head>
17 <body class="login">
18 {% include '_top.twig' %}
19 <div id="main">
20 {% block menu %}{% endblock %}
21 {% block precontent %}{% endblock %}
22 {% block messages %}
23 {% include '_messages.twig' %}
24 {% endblock %}
25 <div id="content" class="w600p center">
26 {% block content %}{% endblock %}
27 </div>
28 </div>
29{% include '_footer.twig' %}
30 </body>
31</html> \ No newline at end of file
diff --git a/app/Resources/views/baggy/layout.twig b/app/Resources/views/baggy/layout.twig
new file mode 100755
index 00000000..8de12749
--- /dev/null
+++ b/app/Resources/views/baggy/layout.twig
@@ -0,0 +1,34 @@
1<!DOCTYPE html>
2<!--[if lte IE 6]><html class="no-js ie6 ie67 ie678" lang="{{ lang }}"><![endif]-->
3<!--[if lte IE 7]><html class="no-js ie7 ie67 ie678" lang="{{ lang }}"><![endif]-->
4<!--[if IE 8]><html class="no-js ie8 ie678" lang="{{ lang }}"><![endif]-->
5<!--[if gt IE 8]><html class="no-js" lang="{{ lang }}"><![endif]-->
6<html lang="{{ lang }}">
7 <head>
8 <meta name="viewport" content="initial-scale=1.0">
9 <meta charset="utf-8">
10 <!--[if IE]>
11 <meta http-equiv="X-UA-Compatible" content="IE=10">
12 <![endif]-->
13 <title>{% block title %}{% endblock %} - wallabag</title>
14{% include '_head.twig' %}
15{% include '_bookmarklet.twig' %}
16 </head>
17 <body>
18 {% include '_top.twig' %}
19 <div id="main">
20 {% block menu %}{% endblock %}
21 {% block precontent %}{% endblock %}
22 {% block messages %}
23 {% include '_messages.twig' %}
24 {% if includeImport %}
25 {% include '_import.twig' %}
26 {% endif %}
27 {% endblock %}
28 <div id="content" class="w600p center">
29 {% block content %}{% endblock %}
30 </div>
31 </div>
32{% include '_footer.twig' %}
33 </body>
34</html> \ No newline at end of file
diff --git a/app/Resources/views/baggy/login.twig b/app/Resources/views/baggy/login.twig
new file mode 100644
index 00000000..58290e9c
--- /dev/null
+++ b/app/Resources/views/baggy/login.twig
@@ -0,0 +1,34 @@
1{% extends "layout-login.twig" %}
2
3{% block title %}{% trans "login to your wallabag" %}{% endblock %}
4{% block content %}
5 {% if http_auth == 0 %}
6 <form method="post" action="?login" name="loginform">
7 <fieldset class="w500p center">
8 <h2 class="mbs txtcenter">{% trans "Login to wallabag" %}</h2>
9 {% if constant('MODE_DEMO') == 1 %}<p>{% trans "you are in demo mode, some features may be disabled." %}</p>{% endif %}
10 <div class="row">
11 <label class="col w150p" for="login">{% trans "Username" %}</label>
12 <input class="col" type="text" id="login" name="login" placeholder="{% trans "Username" %}" tabindex="1" autofocus {% if constant('MODE_DEMO') == 1 %}value="poche"{% endif %} />
13 </div>
14
15 <div class="row">
16 <label class="col w150p" for="password">{% trans "Password" %}</label>
17 <input class="col" type="password" id="password" name="password" placeholder="{% trans "Password" %}" tabindex="2" {% if constant('MODE_DEMO') == 1 %}value="poche"{% endif %} />
18 </div>
19 <div class="row">
20
21 <div class="col">
22 <input type="checkbox" id="longlastingsession" name="longlastingsession" tabindex="3" /> <label for="longlastingsession">{% trans "Stay signed in" %}</label><br />
23 <small class="inbl">{% trans "(Do not check on public computers)" %}</small>
24 </div>
25 </div>
26 <div class="row mts txtcenter">
27 <button class="bouton" type="submit" tabindex="4">{% trans "Sign in" %}</button>
28 </div>
29 </fieldset>
30 <input type="hidden" name="returnurl" value="{{ referer }}">
31 <input type="hidden" name="token" value="{{ token }}">
32 </form>
33 {% endif %}
34{% endblock %}
diff --git a/app/Resources/views/baggy/public/css/font.css b/app/Resources/views/baggy/public/css/font.css
new file mode 100755
index 00000000..7c02a16f
--- /dev/null
+++ b/app/Resources/views/baggy/public/css/font.css
@@ -0,0 +1,6 @@
1@font-face {
2 font-family: 'PT Sans';
3 font-style: normal;
4 font-weight: 700;
5 src: local('PT Sans Bold'), local('PTSans-Bold'), url(../fonts/ptsans.woff) format('woff');
6}
diff --git a/app/Resources/views/baggy/public/css/main.css b/app/Resources/views/baggy/public/css/main.css
new file mode 100755
index 00000000..1df82910
--- /dev/null
+++ b/app/Resources/views/baggy/public/css/main.css
@@ -0,0 +1,1071 @@
1/* ==========================================================================
2 Sommaire
3
4 1 = Style Guide
5 2 = Layout
6 3 = Pictos
7 4 = Messages
8 5 = Article
9 6 = Media queries
10
11 ========================================================================== */
12
13html {
14 min-height: 100%;
15}
16
17body {
18 background-color: #EEE;
19}
20
21.login {
22 background-color: #333;
23}
24
25.login #main {
26 padding: 0;
27 margin: 0;
28}
29
30.login form {
31 background-color: #FFF;
32 padding: 1.5em;
33 box-shadow: 0 1px 8px rgba(0,0,0,0.9);
34 width: 20em;
35 position: absolute;
36 top: 8em;
37 left: 50%;
38 margin-left: -10em;
39}
40
41.login .logo {
42 position: absolute;
43 top: 2em;
44 left: 50%;
45 margin-left: -55px;
46}
47
48/* ==========================================================================
49 1 = Style Guide
50 ========================================================================== */
51
52::selection {
53 color: #FFF;
54 background-color: #000;
55}
56
57.desktopHide {
58 display: none;
59}
60
61.logo {
62 position: fixed;
63 z-index: 20;
64 top: 0.4em;
65 left: 0.6em;
66}
67
68h2, h3, h4 {
69 font-family: 'PT Sans', sans-serif;
70 text-transform: uppercase;
71}
72
73p, li, label {
74 color: #666;
75}
76
77a {
78 color: #000;
79 font-weight: bold;
80}
81
82a:hover, a:focus {
83 text-decoration: none;
84}
85
86form fieldset {
87 border:0;
88 padding: 0;
89 margin: 0;
90}
91
92form input[type="text"], select, form input[type="password"], form input[type="url"], form input[type="email"] {
93 border: 1px solid #999;
94 padding: 0.5em 1em;
95 min-width: 12em;
96 color: #666;
97}
98
99@media screen and (-webkit-min-device-pixel-ratio:0){
100 select{
101 -webkit-appearance: none;
102 border-radius: 0;
103 background: #FFF url(../img/bg-select.png) no-repeat right center;
104 }
105}
106
107.inline .row {
108 display: inline-block;
109 margin-right: 0.5em;
110}
111
112.inline label {
113 min-width: 6em;
114}
115
116fieldset label {
117 display: inline-block;
118 min-width: 12.5em;
119 color: #666;
120}
121
122label {
123 margin-right: 0.5em;
124}
125
126form .row {
127 margin-bottom: 0.5em;
128}
129
130form button, input[type="submit"] {
131 cursor:pointer;
132 background-color: #000;
133 color: #FFF;
134 border:0;
135 padding: 0.5em 1em;
136 display: inline-block;
137 border:1px solid #000;
138}
139
140 form button:hover, form button:focus, input[type="submit"]:hover, input[type="submit"]:focus {
141 background-color: #FFF;
142 color: #000;
143 -webkit-transition: all 0.5s ease;
144 -moz-transition: all 0.5s ease;
145 -ms-transition: all 0.5s ease;
146 -o-transition: all 0.5s ease;
147 transition: all 0.5s ease;
148 }
149
150#bookmarklet {
151 cursor: move;
152}
153
154h2:after {
155 content: "";
156 height: 4px;
157 width: 70px;
158 background-color: #000;
159 display: block;
160}
161
162.links {
163 padding: 0;
164 margin: 0;
165}
166 .links li {
167 list-style: none;
168 margin: 0;
169 padding: 0;
170 }
171
172
173#links {
174 position: fixed;
175 top: 0;
176 width: 10em;
177 left: 0;
178 text-align: right;
179 background-color: #333;
180 padding-top: 9.5em;
181 height: 100%;
182 box-shadow:inset -4px 0 20px rgba(0,0,0,0.6);
183 z-index: 15;
184}
185
186#main {
187 margin-left: 13em;
188 position: relative;
189 z-index: 10;
190 padding-right: 5%;
191 padding-bottom: 1em;
192}
193
194 #links > li > a {
195 display: block;
196 padding: 0.5em 2em 0.5em 1em;
197 color: #FFF;
198 position: relative;
199 text-transform: uppercase;
200 text-decoration: none;
201 font-weight: normal;
202 font-family: 'PT Sans', sans-serif;
203 -webkit-transition: all 0.5s ease;
204 -moz-transition: all 0.5s ease;
205 -ms-transition: all 0.5s ease;
206 -o-transition: all 0.5s ease;
207 transition: all 0.5s ease;
208 }
209
210 #links > li > a:hover, #links > li > a:focus {
211 background-color: #999;
212 color: #000;
213 }
214
215 #links .current:after {
216 content: "";
217 width: 0;
218 height: 0;
219 position: absolute;
220 border-style: solid;
221 border-width: 10px;
222 border-color: transparent #EEE transparent transparent;
223 right: 0;
224 top: 50%;
225 margin-top: -10px;
226 }
227
228 #links li:last-child {
229 position: fixed;
230 bottom: 1em;
231 width: 10em;
232 }
233
234 #links li:last-child a:before {
235 font-size: 1.2em;
236 position: relative;
237 top: 2px;
238 }
239
240
241#sort {
242 padding: 0;
243 list-style-type: none;
244 opacity: 0.5;
245 display: inline-block;
246}
247
248#sort li {
249 display: inline;
250 font-size: 0.9em;
251}
252
253#sort li + li {
254 margin-left: 10px;
255}
256
257#sort a {
258 padding: 2px 2px 0;
259 vertical-align: middle;
260}
261
262#sort img {
263 vertical-align: baseline;
264}
265#sort img:hover {
266 cursor: pointer;
267}
268
269#display-mode {
270 float: right;
271 vertical-align: middle;
272 margin-top: 10px;
273 margin-bottom: 10px;
274 opacity: 0.5;
275}
276#listmode {
277 width: 16px;
278 display: inline-block;
279 text-decoration: none;
280}
281#listmode a:hover {
282 opacity: 1;
283}
284#listmode.tablemode {
285 background-image: url("../img/baggy/table.png");
286 background-repeat: no-repeat;
287 background-position: bottom;
288}
289#listmode.listmode {
290 background-image: url("../img/baggy/list.png");
291 background-repeat: no-repeat;
292 background-position: bottom;
293}
294
295
296/* ==========================================================================
297 2 = Layout
298 ========================================================================== */
299
300#content {
301 margin-top: 5em;
302 min-height: 30em;
303}
304
305footer {
306 text-align: right;
307 position: relative;
308 bottom: 0;
309 right: 5em;
310 color: #999;
311 font-size: 0.8em;
312 font-style: italic;
313 z-index: 20;
314}
315
316footer a {
317 color: #999;
318 font-weight: normal;
319}
320
321.list-entries {
322 letter-spacing:-5px;
323}
324
325.listmode .entrie {
326 width: 100%!important;
327 margin-left: 0!important;
328}
329
330.list-entries + .results {
331 margin-bottom: 2em;
332}
333
334.estimatedTime .reading-time {
335 color: #999;
336 font-style: italic;
337 font-weight: normal;
338 font-size: 0.9em;
339}
340
341.estimatedTime small {
342 position: relative;
343 top: -1px;
344}
345
346.entrie {
347 background-color: #FFF;
348 letter-spacing:normal;
349 box-shadow: 0 3px 7px rgba(0,0,0,0.3);
350 display: inline-block;
351 width: 32%;
352 margin-bottom: 1.5em;
353 vertical-align: top;
354 margin-left: 1.5%;
355 position: relative;
356 overflow: hidden;
357 padding: 1.5em 1.5em 3em 1.5em;
358
359 /* Removing CSS transitions because they make the switch from list view to
360 * table view jerky
361 */
362 /* -webkit-transition: all 0.5s ease; */
363 /* -moz-transition: all 0.5s ease; */
364 /* -ms-transition: all 0.5s ease; */
365 /* -o-transition: all 0.5s ease; */
366 /* transition: all 0.5s ease; */
367}
368
369.entrie:before {
370 content: "";
371 width: 0;
372 height: 0;
373 border-style:solid;
374 border-color: transparent transparent #000 transparent;
375 border-width: 10px;
376 position: absolute;
377 bottom: 0.3em;
378 z-index: 10;
379 right: 1.5em;
380 -webkit-transition: all 0.5s ease;
381 -moz-transition: all 0.5s ease;
382 -ms-transition: all 0.5s ease;
383 -o-transition: all 0.5s ease;
384 transition: all 0.5s ease;
385}
386
387.entrie:after {
388 content: "";
389 position: absolute;
390 height: 7px;
391 width: 100%;
392 bottom: 0;
393 left: 0;
394 background-color: #000;
395 -webkit-transition: all 0.5s ease;
396 -moz-transition: all 0.5s ease;
397 -ms-transition: all 0.5s ease;
398 -o-transition: all 0.5s ease;
399 transition: all 0.5s ease;
400}
401
402.entrie:hover {
403 box-shadow: 0 3px 10px rgba(0,0,0,1);
404}
405
406.entrie:hover:after {
407 height: 40px;
408}
409
410.entrie:hover:before {
411 bottom: 2.4em;
412}
413
414.entrie:hover h2 a {
415 color: #666;
416}
417
418.entrie h2 {
419 text-transform: none;
420 margin-bottom: 0;
421 line-height: 1.2;
422}
423
424 .entrie h2:after {
425 content: none;
426 }
427
428
429.entrie h2 a {
430 display: block;
431 text-decoration: none;
432 color: #000;
433 word-wrap: break-word;
434 -webkit-transition: all 0.5s ease;
435 -moz-transition: all 0.5s ease;
436 -ms-transition: all 0.5s ease;
437 -o-transition: all 0.5s ease;
438 transition: all 0.5s ease;
439}
440/*
441.entrie h2 a:after {
442 content: "";
443 position: absolute;
444 top: 0;
445 width: 100%;
446 height: 100%;
447 left: 0;
448}
449*/
450
451.entrie p {
452 color: #666;
453 font-size: 0.9em;
454 line-height: 1.7;
455}
456
457 .entrie h2 a:first-letter {
458 text-transform: uppercase;
459 }
460
461.entrie:hover .tools {
462 bottom: 0;
463}
464
465.entrie .tools {
466 position: absolute;
467 bottom: -50px;
468 left: 0;
469 width: 100%;
470 z-index: 10;
471 padding-right: 0.5em;
472 text-align: right;
473 -webkit-transition: all 0.5s ease;
474 -moz-transition: all 0.5s ease;
475 -ms-transition: all 0.5s ease;
476 -o-transition: all 0.5s ease;
477 transition: all 0.5s ease;
478}
479
480 .entrie .tools a {
481 color: #666;
482 text-decoration: none;
483 display: block;
484 padding: 0.4em;
485 }
486
487 .entrie .tools a:hover {
488 color: #FFF;
489 }
490
491 .entrie .tools li {
492 display: inline-block;
493 }
494
495.entrie:nth-child(3n+1) {
496 margin-left: 0;
497}
498
499.results {
500 letter-spacing: -5px;
501 padding: 0 0 0.5em;
502}
503
504.results > * {
505 display: inline-block;
506 vertical-align: top;
507 letter-spacing: normal;
508 width: 50%;
509}
510
511.pagination {
512 text-align: right;
513 margin-bottom:50px;
514}
515
516.nb-results {
517 text-align: left;
518 font-style: italic;
519 color: #999;
520}
521
522.pagination > * {
523 display: inline-block;
524 margin-left: 0.5em;
525}
526
527.pagination a {
528 color: #999;
529 text-decoration: none;
530}
531
532 .pagination a:hover, .pagination a:focus {
533 text-decoration: underline;
534 }
535
536.pagination .disabled {
537 display: none;
538}
539
540/* ==========================================================================
541 2.1 = "save a link" related styles
542 ========================================================================== */
543
544.popup-form {
545 background: rgba(0,0,0,0.5);
546 position: absolute;
547 top: 0;
548 left: 10em;
549 z-index: 20;
550 height: 100%;
551 width: 100%;
552 margin: 0;
553 margin-top: -30% !important; /* TODO: get rid of !important here; overridden by .messages selector */
554 padding: 2em;
555 display: none;
556 border-left: 1px #EEE solid;
557}
558
559 .popup-form form {
560 background-color: #FFF;
561 position: absolute;
562 top: 0;
563 left: 0;
564 z-index: 20;
565 border: 10px solid #000;
566 width: 400px;
567 height: 200px;
568 padding: 2em;
569 }
570
571#bagit-form-form .addurl {
572 margin-left: 0;
573}
574
575.closeMessage,
576.close-button {
577 background-color: #000;
578 color: #FFF;
579 font-size: 1.2em;
580 line-height: 1.6;
581 width: 1.6em;
582 height: 1.6em;
583 text-align: center;
584 text-decoration: none;
585}
586 .closeMessage:hover,
587 .closeMessage:focus,
588 .close-button:hover,
589 .close-button:focus {
590 background-color: #999;
591 color: #000;
592 }
593
594.close-button--popup {
595 display: inline-block;
596 position: absolute;
597 top: 0;
598 right: 0;
599 font-size: 1.4em;
600}
601
602.active-current {
603 background-color: #999;
604}
605
606.active-current:after {
607 content: "";
608 width: 0;
609 height: 0;
610 position: absolute;
611 border-style: solid;
612 border-width: 10px;
613 border-color: transparent #EEE transparent transparent;
614 right: 0;
615 top: 50%;
616 margin-top: -10px;
617}
618
619.opacity03 {
620 opacity: 0.3;
621}
622
623.add-to-wallabag-link-after {
624 background-color: #000;
625 color: #fff;
626 padding: 0 3px 2px 3px;
627}
628
629a.add-to-wallabag-link-after {
630 visibility: hidden;
631 position: absolute;
632 opacity: 0;
633 transition-duration: 2s;
634 transition-timing-function: ease-out;
635}
636
637#article article a:hover + a.add-to-wallabag-link-after, a.add-to-wallabag-link-after:hover {
638 opacity: 1;
639 visibility: visible;
640 transition-duration: .3s;
641 transition-timing-function: ease-in;
642}
643
644a.add-to-wallabag-link-after:after {
645 content: "w";
646}
647
648#add-link-result {
649 font-weight: bold;
650 font-size: 0.9em;
651}
652
653/* ==========================================================================
654 3 = Pictos
655 ========================================================================== */
656
657@font-face {
658 font-family: 'icomoon';
659 src:url('../fonts/icomoon.eot?-s0mcsx');
660 src:url('../fonts/icomoon.eot?#iefix-s0mcsx') format('embedded-opentype'),
661 url('../fonts/icomoon.woff?-s0mcsx') format('woff'),
662 url('../fonts/icomoon.ttf?-s0mcsx') format('truetype'),
663 url('../fonts/icomoon.svg?-s0mcsx#icomoon') format('svg');
664 font-weight: normal;
665 font-style: normal;
666}
667
668.icon span,
669.icon-image span {
670 position: absolute;
671 top: -9999px;
672}
673
674[class^="icon-"]:before, [class*=" icon-"]:before {
675 font-family: 'icomoon';
676 speak: none;
677 font-style: normal;
678 font-weight: normal;
679 font-variant: normal;
680 text-transform: none;
681 line-height: 1;
682
683 /* Better Font Rendering =========== */
684 -webkit-font-smoothing: antialiased;
685 -moz-osx-font-smoothing: grayscale;
686}
687
688.icon-flattr:before {
689 content: "\e800";
690}
691.icon-mail:before {
692 content: "\e80a";
693}
694.icon-up-open:before {
695 content: "\e80b";
696}
697.icon-star:before {
698 content: "\e805";
699}
700.icon-check:before {
701 content: "\e804";
702}
703.icon-link:before {
704 content: "\e801";
705}
706.icon-reply:before {
707 content: "\e806";
708}
709.icon-menu:before {
710 content: "\e802";
711}
712.icon-clock:before {
713 content: "\e803";
714}
715.icon-twitter:before {
716 content: "\e807";
717}
718.icon-down-open:before {
719 content: "\e809";
720}
721.icon-trash:before {
722 content: "\e80c";
723}
724.icon-delete:before {
725 content: "\e600";
726}
727.icon-power:before {
728 content: "\e601";
729}
730.icon-arrow-up-thick:before {
731 content: "\e602";
732}
733.icon-rss:before {
734 content: "\e808";
735}
736.icon-print:before {
737 content: "\e80d";
738}
739
740
741/* .icon-image class, for image-based icons
742 ========================================================================== */
743
744.icon-image {
745 background-size: 16px 16px;
746 background-repeat: no-repeat;
747 background-position: center;
748 padding-right: 1em !important;
749 padding-left: 1em !important;
750}
751
752/* Carrot (http://carrot.org) */
753.icon-image--carrot {
754 background-image: url('../../_global/img/icons/carrot-icon--white.png');
755}
756
757/* Diaspora */
758.icon-image--diaspora {
759 background-image: url('../../_global/img/icons/diaspora-icon--black.png');
760}}
761
762/* ==========================================================================
763 Icon selected
764 ========================================================================== */
765
766.icon-star.fav:before {
767 color: #FFF;
768}
769
770.icon-check.archive:before {
771 color: #FFF;
772}
773
774/* ==========================================================================
775 4 = Messages
776 ========================================================================== */
777
778.messages {
779 text-align: left;
780 margin-top: 1em;
781}
782
783.messages > * { display: inline-block;}
784
785.warning {
786 /* font-size: 3em;
787 color: #999;
788 font-style: italic;
789 position: absolute;
790 top: 50%;
791 left: 0;
792 width: 100%;
793 text-align: center;
794 padding-right: 5%;
795 margin-top: -2em;*/
796 font-weight: bold;
797 display: block;
798 width: 100%;
799}
800
801.more-info {
802 font-size: 0.85em;
803 line-height: 1.5;
804 color: #aaa;
805}
806
807 .more-info a {
808 color: #aaa;
809 }
810
811/* ==========================================================================
812 5 = Article
813 ========================================================================== */
814
815#article {
816 width: 70%;
817 margin-bottom: 3em;
818 text-align: justify;
819}
820
821#article .tags {
822 margin-bottom: 1em;
823}
824
825#article i {
826 font-style: normal;
827}
828
829blockquote {
830 border:1px solid #999;
831 background-color: #FFF;
832 padding: 1em;
833 margin: 0;
834}
835
836#article h1 {
837 text-align: left;
838}
839
840#article h2, #article h3, #article h4 {
841 text-transform: none;
842}
843
844#article h2:after {
845 content: none;
846}
847
848.topPosF {
849 position: fixed;
850 right: 20%;
851 bottom: 2em;
852 font-size: 1.5em;
853}
854
855#article_toolbar {
856 margin-bottom: 1em;
857}
858
859#article_toolbar li {
860 display: inline-block;
861}
862
863#article_toolbar a {
864 background-color: #000;
865 padding: 0.3em 0.5em 0.2em;
866 color: #FFF;
867 text-decoration: none;
868}
869
870 #article_toolbar a:hover, #article_toolbar a:focus {
871 background-color: #999;
872 }
873
874.shaarli:before {
875 content: "*";
876}
877
878.return {
879 text-decoration: none;
880 margin-top: 1em;
881 display: block;
882}
883
884.return:before {
885 margin-right: 0.5em;
886}
887
888.notags {
889 font-style: italic;
890 color: #999;
891}
892
893.icon-rss {
894 background-color: #000;
895 color: #FFF;
896 padding: 0.2em 0.5em;
897}
898
899.icon-rss:before {
900 position: relative;
901 top: 2px;
902}
903
904.list-tags li {
905 margin-bottom: 0.5em;
906}
907
908.list-tags .icon-rss:hover, .list-tags .icon-rss:focus {
909 background-color: #FFF;
910 color: #000;
911 text-decoration: none;
912}
913
914.list-tags a {
915 text-decoration: none;
916}
917
918.list-tags a:hover, .list-tags a:focus {
919 text-decoration: underline;
920}
921
922pre code {
923 font-family: "Courier New", Courier, monospace;
924 border: 1px solid #ccc;
925 font-size: 0.96em;
926}
927
928
929/* ==========================================================================
930 6 = Media Queries
931 ========================================================================== */
932
933@media screen and (max-width: 1050px) {
934 .entrie {
935 width: 49%;
936 }
937 .entrie:nth-child(3n+1) {
938 margin-left: 1.5%;
939 }
940 .entrie:nth-child(2n+1) {
941 margin-left: 0;
942 }
943}
944
945@media screen and (max-width: 900px) {
946 #article {
947 width: 80%;
948 }
949 .topPosF {
950 right: 2.5em;
951 }
952}
953
954@media screen and (max-width: 700px) {
955 .entrie {
956 width: 100%;
957 margin-left: 0;
958 }
959 #display-mode {
960 display: none;
961 }
962}
963
964@media screen and (max-width: 500px) {
965 .entrie {
966 width: 100%;
967 margin-left: 0;
968 }
969 body > header {
970 background-color: #333;
971 position: fixed;
972 top: 0;
973 width: 100%;
974 height: 3em;
975 z-index: 11;
976 }
977 #links li:last-child {
978 position: static;
979 width: auto;
980 }
981 #links li:last-child a:before {
982 content: none;
983 }
984 .logo {
985 width: 1.25em;
986 height: 1.25em;
987 left: 0;
988 top: 0;
989 }
990 .login > header {
991 position: static;
992 }
993 .login form {
994 width: 100%;
995 position: static;
996 margin-left: 0;
997 }
998 .login .logo {
999 width: auto;
1000 height: auto;
1001 top: 0.5em;
1002 width: 75px;
1003 height: 75px;
1004 margin-left: -37.5px;
1005 }
1006 .desktopHide {
1007 display: block;
1008 position: fixed;
1009 z-index: 20;
1010 top: 0;
1011 right: 0;
1012 border:0;
1013 width: 2.5em;
1014 height: 2.5em;
1015 cursor: pointer;
1016 background-color: #999;
1017 font-size: 1.2em;
1018 }
1019 .desktopHide:hover, .desktopHide:focus {
1020 background-color: #FFF;
1021 }
1022 #links {
1023 display: none;
1024 width: 100%;
1025 height: auto;
1026 padding-top: 3em;
1027 }
1028 #links.menu--open {
1029 display: block;
1030 }
1031 footer {
1032 position: static;
1033 margin-right: 3em;
1034 }
1035 #main {
1036 margin-left: 1.5em;
1037 padding-right: 1.5em;
1038 position: static;
1039 margin-top: 3em;
1040 }
1041 #article_toolbar .topPosF {
1042 display: none;
1043 }
1044
1045 #article {
1046 width: 100%;
1047 }
1048
1049 #article h1 {
1050 font-size: 1.5em;
1051 }
1052 #article_toolbar a {
1053 padding: 0.3em 0.4em 0.2em;
1054 }
1055
1056 #display-mode {
1057 display: none;
1058 }
1059
1060 .popup-form, #bagit-form, #search-form {
1061 left: 0;
1062 width: 100%;
1063 border-left: none;
1064 }
1065
1066 .popup-form form,
1067 #bagit-form form,
1068 #search-form form {
1069 width: 100%;
1070 }
1071}
diff --git a/app/Resources/views/baggy/public/css/messages.css b/app/Resources/views/baggy/public/css/messages.css
new file mode 100755
index 00000000..42da70b3
--- /dev/null
+++ b/app/Resources/views/baggy/public/css/messages.css
@@ -0,0 +1,19 @@
1.messages.error.install {
2 border: 1px solid #c42608;
3 color: #c00 !important;
4 background: #fff0ef;
5 text-align: left;
6}
7
8.messages.notice.install {
9 border: 1px solid #ebcd41;
10 color: #000;
11 background: #fffcd3;
12 text-align: left;
13}
14
15.messages.success.install {
16 border: 1px solid #6dc70c;
17 background: #e0fbcc !important;
18 text-align: left;
19} \ No newline at end of file
diff --git a/app/Resources/views/baggy/public/css/print.css b/app/Resources/views/baggy/public/css/print.css
new file mode 100755
index 00000000..9dd6d295
--- /dev/null
+++ b/app/Resources/views/baggy/public/css/print.css
@@ -0,0 +1,62 @@
1/* ### Layout ### */
2
3body {
4 font-family: Serif;
5 background-color: #fff;
6}
7
8@page {
9 margin: 1cm;
10}
11
12img {
13 max-width: 100% !important;
14}
15
16/* ### Content ### */
17
18/* Hide useless blocks */
19body > header,
20#article_toolbar,
21#links,
22#sort,
23body > footer,
24.top_link,
25div.tools,
26header div,
27.messages,
28.entrie + .results {
29 display: none !important;
30}
31
32article {
33 border: none !important;
34}
35
36/* Add URL after links */
37.vieworiginal a:after {
38 content: " (" attr(href) ")";
39}
40
41/* Add explanation after abbr */
42abbr[title]:after {
43 content: " (" attr(title) ")";
44}
45
46/* Change border on current pager item */
47.pagination span.current {
48 border-style: dashed;
49}
50
51#main {
52 width: 100%;
53 padding: 0;
54 margin: 0;
55 margin-left: 0;
56 padding-right: 0;
57 padding-bottom: 0;
58}
59
60#article {
61 width: 100%;
62}
diff --git a/app/Resources/views/baggy/public/css/ratatouille.css b/app/Resources/views/baggy/public/css/ratatouille.css
new file mode 100644
index 00000000..b203cbb8
--- /dev/null
+++ b/app/Resources/views/baggy/public/css/ratatouille.css
@@ -0,0 +1,211 @@
1/*
2 Ratatouille mini Framework css by Thomas LEBEAU
3 Base on KNACSS => www.KNACSS.com (2013-10) @author: Raphael Goetter, Alsacreations
4 and normalize.css
5*/
6
7* {
8 -webkit-box-sizing: border-box;
9 -moz-box-sizing: border-box;
10 box-sizing: border-box;
11}
12
13html {
14 font-family: sans-serif; /* 1 */
15 -ms-text-size-adjust: 100%; /* 2 */
16 -webkit-text-size-adjust: 100%; /* 2 */
17}
18
19body {
20 font-size: 1em;
21 line-height:1.5;
22 margin: 0;
23}
24
25/* ==========================================================================
26 Mise en forme
27 ========================================================================== */
28
29h1:first-child,
30h2:first-child,
31h3:first-child,
32h4:first-child,
33h5:first-child,
34h6:first-child,
35p:first-child,
36ul:first-child,
37ol:first-child,
38dl:first-child{
39 margin-top: 0;
40}
41
42code,
43kbd,
44pre,
45samp {
46 font-family: monospace, serif;
47}
48
49pre {
50 white-space: pre-wrap;
51}
52
53
54.upper {
55 text-transform: uppercase;
56}
57
58.bold {
59 font-weight: bold;
60}
61
62.inner {
63 margin: 0 auto;
64 max-width: 61.25em;/*980px*/
65}
66
67table, img {
68 max-width: 100%;
69 height :auto;
70}
71
72iframe {
73 max-width: 100%;
74}
75
76.fl {
77 float: left;
78}
79
80.fr {
81 float: right;
82}
83
84table {
85 border-collapse: collapse;
86}
87
88figure {
89 margin: 0;
90}
91
92button,
93input,
94select,
95textarea {
96 font-family: inherit;
97 font-size: 100%;
98 margin: 0;
99}
100
101input[type="search"] {
102 -webkit-appearance: textfield;
103}
104
105/* ==========================================================================
106 Mise en page
107 ========================================================================== */
108
109.dib {
110 display: inline-block;
111 vertical-align: middle;
112}
113
114.dnone {
115 display: none;
116}
117
118.dtable { display:table }
119
120 .dtable > * { display:table-row; }
121
122 .dtable > * > * { display:table-cell; }
123
124.element-invisible {
125 border: 0;
126 clip: rect(0 0 0 0);
127 height: 1px;
128 margin: -1px;
129 overflow: hidden;
130 padding: 0;
131 position: absolute;
132 width: 1px;
133}
134
135.small {
136 font-size:0.8em;
137}
138
139.big {
140 font-size: 1.2em;
141}
142
143/*Width*/
144
145.w100 { width:100%; }
146.w90 { width:90%; }
147.w80 { width:80%; }
148.w70 { width:70%; }
149.w60 { width:60%; }
150.w50 { width:50%; }
151.w40 { width:40%; }
152.w30 { width:30%; }
153.w20 { width:20%; }
154.w10 { width:10%; }
155
156
157/* ==========================================================================
158 Internet Explorer
159 ========================================================================== */
160
161/*IE8 and IE9*/
162
163article,
164aside,
165details,
166figcaption,
167figure,
168footer,
169header,
170hgroup,
171main,
172nav,
173section,
174summary {
175 display: block;
176}
177
178/*IE8 and IE9*/
179
180audio,
181canvas,
182video {
183 display: inline-block;
184}
185
186@media screen and (-webkit-min-device-pixel-ratio:0){
187 select{
188 -webkit-appearance: none;
189 border-radius: 0;
190 }
191}
192
193/* ==========================================================================
194 Medias Queries
195 ========================================================================== */
196
197/*Desktop 1080px*/
198
199@media screen and (max-width: 67.50em) {
200}
201
202/*Tablet 800px*/
203
204@media screen and (max-width: 50em) {
205}
206
207/*Mobile 640px*/
208
209@media screen and (max-width: 40em) {
210}
211
diff --git a/app/Resources/views/baggy/public/fonts/icomoon.eot b/app/Resources/views/baggy/public/fonts/icomoon.eot
new file mode 100644
index 00000000..56323516
--- /dev/null
+++ b/app/Resources/views/baggy/public/fonts/icomoon.eot
Binary files differ
diff --git a/app/Resources/views/baggy/public/fonts/icomoon.svg b/app/Resources/views/baggy/public/fonts/icomoon.svg
new file mode 100644
index 00000000..b4586136
--- /dev/null
+++ b/app/Resources/views/baggy/public/fonts/icomoon.svg
@@ -0,0 +1,41 @@
1<?xml version="1.0" standalone="no"?>
2<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3<svg xmlns="http://www.w3.org/2000/svg">
4<metadata>
5<json>
6{
7 "fontFamily": "icomoon",
8 "majorVersion": 1,
9 "minorVersion": 0,
10 "version": "Version 1.0",
11 "fontId": "icomoon",
12 "psName": "icomoon",
13 "subFamily": "Regular",
14 "fullName": "icomoon",
15 "description": "Generated by IcoMoon"
16}
17</json>
18</metadata>
19<defs>
20<font id="icomoon" horiz-adv-x="512">
21<font-face units-per-em="512" ascent="480" descent="-32" />
22<missing-glyph horiz-adv-x="512" />
23<glyph unicode="&#x20;" d="" horiz-adv-x="256" />
24<glyph unicode="&#xe600;" d="M256 389.333c-94.272 0-170.667-76.416-170.667-170.666s76.394-170.667 170.667-170.667 170.667 76.416 170.667 170.667-76.394 170.666-170.667 170.666zM335.082 169.749c8.341-8.341 8.341-21.824 0-30.166-4.16-4.16-9.622-6.25-15.082-6.25s-10.923 2.091-15.082 6.25l-48.918 48.918-48.917-48.918c-4.16-4.16-9.621-6.25-15.083-6.25s-10.923 2.091-15.083 6.25c-8.341 8.341-8.341 21.824 0 30.166l48.917 48.918-48.917 48.917c-8.341 8.341-8.341 21.824 0 30.166s21.824 8.341 30.166 0l48.917-48.917 48.918 48.917c8.341 8.341 21.824 8.341 30.166 0s8.341-21.824 0-30.166l-48.918-48.917 48.918-48.918z" />
25<glyph unicode="&#xe601;" d="M245.333 73.109c-37.035 0-71.85 14.421-98.048 40.598-26.176 26.197-40.618 61.014-40.618 98.070s14.442 71.872 40.618 98.070c8.341 8.341 21.824 8.341 30.166 0s8.341-21.824 0-30.166c-18.133-18.154-28.118-42.261-28.118-67.904s9.984-49.771 28.118-67.904c18.133-18.134 42.219-28.096 67.882-28.096s49.749 9.984 67.883 28.096c18.154 18.134 28.118 42.24 28.118 67.904s-9.984 49.771-28.118 67.904c-8.341 8.341-8.341 21.824 0 30.166s21.824 8.341 30.166 0c26.176-26.219 40.618-61.035 40.618-98.070s-14.442-71.872-40.618-98.070c-26.197-26.176-61.014-40.597-98.048-40.597zM245.333 234.667c-11.797 0-21.333 9.558-21.333 21.333v106.667c0 11.776 9.536 21.333 21.334 21.333s21.334-9.558 21.334-21.333v-106.667c0-11.776-9.536-21.333-21.334-21.333z" />
26<glyph unicode="&#xe602;" d="M256 401.664l-136.832-136.832c-16.662-16.661-16.662-43.67 0-60.331s43.669-16.661 60.331 0l33.834 33.835v-154.496c0-23.552 19.094-42.666 42.667-42.666 23.552 0 42.666 19.115 42.666 42.666v154.496l33.834-33.835c8.341-8.341 19.243-12.502 30.166-12.502s21.824 4.16 30.166 12.502c16.661 16.661 16.661 43.67 0 60.331l-136.832 136.832z" />
27<glyph unicode="&#xe800;" d="M0 25.856v263.168q0 91.648 43.52 142.336t132.608 50.688h280.576q-2.56-2.56-26.624-27.136t-51.2-51.712-55.808-55.808-48.64-47.616-21.504-18.944q-7.68 0-7.68 8.192v79.872h-24.576q-30.208 0-48.128-3.072t-32.256-13.312-19.968-29.184-6.144-49.152v-134.144zM34.304-34.048q2.56 2.56 27.136 27.136t51.2 51.712 55.808 56.32 48.64 47.616 20.992 18.432q7.68 0 7.68-8.192v-79.872h24.576q59.392 0 82.944 18.432t23.040 76.288v134.144l114.688 114.176v-263.168q0-91.648-43.008-142.336t-133.12-50.688h-280.576z" horiz-adv-x="491" />
28<glyph unicode="&#xe801;" d="M150.528 104.192q7.168 7.168 17.408 7.168t18.432-7.168q16.384-17.408 0-35.84l-21.504-20.48q-28.672-28.672-67.584-28.672-39.936 0-68.608 28.672t-28.672 67.584q0 39.936 28.672 68.608l75.776 75.776q35.84 34.816 73.728 39.424t65.536-22.016q8.192-8.192 8.192-18.432t-8.192-18.432q-18.432-16.384-35.84 0-25.6 24.576-67.584-17.408l-75.776-74.752q-13.312-13.312-13.312-32.768t13.312-31.744q13.312-13.312 32.256-13.312t32.256 13.312zM380.928 398.080q28.672-28.672 28.672-67.584 0-39.936-28.672-68.608l-80.896-80.896q-37.888-36.864-76.8-36.864-31.744 0-57.344 25.6-7.168 7.168-7.168 17.408t7.168 18.432q7.168 7.168 17.92 7.168t17.92-7.168q25.6-24.576 62.464 12.288l80.896 79.872q14.336 14.336 14.336 32.768 0 19.456-14.336 31.744-12.288 13.312-28.672 15.872t-30.72-10.752l-25.6-25.6q-8.192-7.168-18.432-7.168t-17.408 7.168q-17.408 17.408 0 35.84l25.6 25.6q27.648 27.648 65.024 26.112t66.048-31.232z" horiz-adv-x="410" />
29<glyph unicode="&#xe802;" d="M438.784 96v-36.352q0-7.68-5.12-12.8t-13.312-5.632h-401.92q-7.68 0-12.8 5.632t-5.632 12.8v36.352q0 7.68 5.632 12.8t12.8 5.632h401.92q7.68 0 13.312-5.632t5.12-12.8zM438.784 242.432v-36.864q0-7.168-5.12-12.8t-13.312-5.12h-401.92q-7.68 0-12.8 5.12t-5.632 12.8v36.864q0 7.168 5.632 12.8t12.8 5.12h401.92q7.68 0 13.312-5.12t5.12-12.8zM438.784 388.352v-36.352q0-7.68-5.12-12.8t-13.312-5.632h-401.92q-7.68 0-12.8 5.632t-5.632 12.8v36.352q0 7.68 5.632 13.312t12.8 5.12h401.92q7.68 0 13.312-5.12t5.12-13.312z" horiz-adv-x="439" />
30<glyph unicode="&#xe803;" d="M235.52 459.52q97.28 0 166.4-69.12t69.12-166.4-69.12-166.4-166.4-69.12-166.4 69.12-69.12 166.4 69.12 166.4 166.4 69.12zM235.52 39.68q76.8 0 130.56 54.272t53.76 130.048q0 76.8-53.76 130.56t-130.56 53.76q-75.776 0-130.048-53.76t-54.272-130.56q0-75.776 54.272-130.048t130.048-54.272zM253.952 357.12v-124.928l76.8-76.8-25.6-25.6-87.040 87.040v140.288h35.84z" horiz-adv-x="471" />
31<glyph unicode="&#xe804;" d="M127.488 44.8q-17.408 0-28.672 14.336l-92.16 120.832q-8.192 12.288-6.144 26.624t13.312 23.552 26.112 7.168 24.064-14.336l60.416-78.848 151.552 242.688q8.192 12.288 22.016 15.36t27.136-4.096q12.288-8.192 15.36-22.016t-4.096-27.136l-179.2-286.72q-10.24-16.384-28.672-16.384z" horiz-adv-x="342" />
32<glyph unicode="&#xe805;" d="M225.28 449.28l61.44-172.032h163.84l-134.144-100.352 48.128-178.176-139.264 106.496-139.264-106.496 48.128 178.176-134.144 100.352h163.84z" horiz-adv-x="451" />
33<glyph unicode="&#xe806;" d="M460.8 49.92q-44.032 77.824-106.496 100.864t-168.96 23.040v-111.616l-185.344 171.008 185.344 164.864v-98.304q46.080 0 86.016-13.824t67.072-35.84 49.152-48.64 35.328-53.248 22.528-48.64 12.288-35.328z" horiz-adv-x="461" />
34<glyph unicode="&#xe807;" d="M471.040 370.432q-18.432-27.648-48.128-50.176v-12.288q0-66.56-30.72-128t-95.232-103.936-148.48-42.496q-81.92 0-148.48 43.008 7.168-1.024 23.552-1.024 67.584 0 119.808 40.96-31.744 1.024-56.32 19.456t-33.792 48.128q5.12-2.048 17.408-2.048 13.312 0 25.6 3.072-33.792 7.168-55.296 33.792t-21.504 61.44v1.024q18.432-10.24 43.008-12.288-43.008 29.696-43.008 80.896 0 24.576 13.312 48.128 78.848-96.256 199.68-100.352-3.072 9.216-3.072 21.504 0 39.936 28.16 68.096t69.12 28.16q41.984 0 69.632-29.696 30.72 6.144 61.44 22.528-10.24-33.792-41.984-53.248 28.672 4.096 55.296 15.36z" horiz-adv-x="471" />
35<glyph unicode="&#xe808;" d="M109.568 96q0-23.040-15.872-38.912t-38.912-15.872-38.912 15.872-15.872 38.912 15.872 38.912 38.912 15.872 38.912-15.872 15.872-38.912zM256 60.672q0.512-7.68-4.608-13.312-5.632-6.144-13.824-6.144h-38.4q-7.168 0-12.288 4.608t-5.632 11.776q-6.144 65.536-52.736 112.128t-112.128 52.736q-7.168 0.512-11.776 5.632t-4.608 12.288v38.4q0 8.192 6.144 13.312 4.608 5.12 12.288 5.12h1.536q45.568-3.584 87.040-23.040t74.24-51.712q32.256-32.256 51.712-74.24t23.040-87.552zM402.432 60.16q0.512-7.68-5.12-13.312-5.12-5.632-13.312-5.632h-40.96q-7.168 0-12.8 5.12t-5.632 11.776q-3.072 61.44-28.672 116.736t-66.048 96.256-96.256 66.048-116.224 29.184q-7.168 0-12.288 5.632t-5.12 12.288v40.96q0 7.68 5.632 13.312 5.12 5.12 12.8 5.12h0.512q75.264-4.096 143.36-34.304t121.856-83.968q53.248-53.248 83.968-121.856t34.304-143.36z" horiz-adv-x="402" />
36<glyph unicode="&#xe809;" d="M0 314.112l75.776 75.776 180.224-179.712 180.224 179.712 75.776-75.776-256-256-75.776 75.776z" />
37<glyph unicode="&#xe80a;" d="M475.648 50.432v219.136q-9.216-10.24-19.968-18.944-76.288-58.368-121.856-96.256-14.336-12.288-23.552-19.456t-24.576-13.824-29.184-6.656h-1.024q-13.312 0-29.184 6.656t-24.576 13.824-23.552 19.456q-45.056 37.888-121.856 96.256-10.752 8.704-19.968 18.944v-219.136q0-4.096 3.072-6.656t6.144-2.56h420.864q3.584 0 6.144 2.56t3.072 6.656zM475.648 350.464v7.168t-0.512 3.584-0.512 3.584-1.536 2.56-2.56 2.048-4.096 1.024h-420.864q-3.584 0-6.144-3.072t-3.072-6.144q0-48.128 41.984-81.408 55.296-43.52 114.688-90.624 2.048-1.024 10.24-8.192t12.8-10.752 12.8-9.216 14.336-7.68 12.288-2.56h1.024q5.632 0 12.288 2.56t14.336 7.68 12.8 9.216 12.8 10.752 10.24 8.192q59.392 47.104 114.688 90.624 15.36 12.288 28.672 33.28t13.312 37.376zM512 361.216v-310.784q0-18.944-13.312-32.256t-32.256-13.824h-420.864q-18.432 0-32.256 13.824t-13.312 32.256v310.784q0 18.944 13.312 32.256t32.256 13.312h420.864q18.944 0 32.256-13.312t13.312-32.256z" />
38<glyph unicode="&#xe80b;" d="M0 133.888l256 256 256-256-75.776-75.776-180.224 179.712-180.224-179.712z" />
39<glyph unicode="&#xe80c;" d="M25.6 279.296q62.464-35.84 168.96-35.84t168.96 35.84l-27.648-248.832q-1.024-7.168-17.92-18.432t-51.2-22.016-72.192-10.752-71.68 10.752-51.2 22.016-18.432 18.432zM275.456 432.896q48.128-9.216 80.896-28.16t32.768-36.352v-5.12q0-29.696-57.344-50.688t-137.216-20.992-137.216 20.992-57.344 50.688v5.12q0 17.408 32.768 36.352t80.896 28.16l21.504 24.576q11.264 13.312 35.84 13.312h47.104q26.624 0 35.84-13.312zM247.808 375.552h43.008q-47.104 56.32-53.248 64.512-7.168 8.192-16.384 8.192h-52.224q-11.264 0-16.384-8.192l-54.272-64.512h43.008l32.768 33.792h41.984z" horiz-adv-x="389" />
40<glyph unicode="&#xe80d;" d="M128 448h256v-64h-256zM480 352h-448c-17.6 0-32-14.4-32-32v-160c0-17.6 14.398-32 32-32h96v-128h256v128h96c17.6 0 32 14.4 32 32v160c0 17.6-14.4 32-32 32zM352 32h-192v160h192v-160zM487.2 304c0-12.813-10.387-23.2-23.199-23.2-12.813 0-23.201 10.387-23.201 23.2s10.388 23.2 23.201 23.2c12.813 0 23.199-10.387 23.199-23.2z" />
41</font></defs></svg> \ No newline at end of file
diff --git a/app/Resources/views/baggy/public/fonts/icomoon.ttf b/app/Resources/views/baggy/public/fonts/icomoon.ttf
new file mode 100644
index 00000000..bb1f21f8
--- /dev/null
+++ b/app/Resources/views/baggy/public/fonts/icomoon.ttf
Binary files differ
diff --git a/app/Resources/views/baggy/public/fonts/icomoon.woff b/app/Resources/views/baggy/public/fonts/icomoon.woff
new file mode 100644
index 00000000..bab13779
--- /dev/null
+++ b/app/Resources/views/baggy/public/fonts/icomoon.woff
Binary files differ
diff --git a/app/Resources/views/baggy/public/fonts/ptsans.woff b/app/Resources/views/baggy/public/fonts/ptsans.woff
new file mode 100644
index 00000000..cf7c62e1
--- /dev/null
+++ b/app/Resources/views/baggy/public/fonts/ptsans.woff
Binary files differ
diff --git a/app/Resources/views/baggy/public/img/baggy/blank.png b/app/Resources/views/baggy/public/img/baggy/blank.png
new file mode 100755
index 00000000..63e09844
--- /dev/null
+++ b/app/Resources/views/baggy/public/img/baggy/blank.png
Binary files differ
diff --git a/app/Resources/views/baggy/public/img/baggy/down.png b/app/Resources/views/baggy/public/img/baggy/down.png
new file mode 100644
index 00000000..b9d536a7
--- /dev/null
+++ b/app/Resources/views/baggy/public/img/baggy/down.png
Binary files differ
diff --git a/app/Resources/views/baggy/public/img/baggy/list.png b/app/Resources/views/baggy/public/img/baggy/list.png
new file mode 100755
index 00000000..bd5aff5a
--- /dev/null
+++ b/app/Resources/views/baggy/public/img/baggy/list.png
Binary files differ
diff --git a/app/Resources/views/baggy/public/img/baggy/table.png b/app/Resources/views/baggy/public/img/baggy/table.png
new file mode 100755
index 00000000..859c4cd8
--- /dev/null
+++ b/app/Resources/views/baggy/public/img/baggy/table.png
Binary files differ
diff --git a/app/Resources/views/baggy/public/img/baggy/top.png b/app/Resources/views/baggy/public/img/baggy/top.png
new file mode 100644
index 00000000..954a8c0a
--- /dev/null
+++ b/app/Resources/views/baggy/public/img/baggy/top.png
Binary files differ
diff --git a/app/Resources/views/baggy/public/img/bg-select.png b/app/Resources/views/baggy/public/img/bg-select.png
new file mode 100644
index 00000000..95120441
--- /dev/null
+++ b/app/Resources/views/baggy/public/img/bg-select.png
Binary files differ
diff --git a/app/Resources/views/baggy/public/img/logo-other_themes.png b/app/Resources/views/baggy/public/img/logo-other_themes.png
new file mode 100755
index 00000000..32543a44
--- /dev/null
+++ b/app/Resources/views/baggy/public/img/logo-other_themes.png
Binary files differ
diff --git a/app/Resources/views/baggy/public/img/logo-w.png b/app/Resources/views/baggy/public/img/logo-w.png
new file mode 100755
index 00000000..65dc607b
--- /dev/null
+++ b/app/Resources/views/baggy/public/img/logo-w.png
Binary files differ
diff --git a/app/Resources/views/baggy/public/img/logo-wallabag.svg b/app/Resources/views/baggy/public/img/logo-wallabag.svg
new file mode 100644
index 00000000..40193e1c
--- /dev/null
+++ b/app/Resources/views/baggy/public/img/logo-wallabag.svg
@@ -0,0 +1,300 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In -->
3<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
4 <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
5]>
6<svg version="1.1"
7 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
8 x="0px" y="0px" width="800px" height="800px" viewBox="0 0 800 800" overflow="visible" enable-background="new 0 0 800 800"
9 xml:space="preserve">
10<defs>
11</defs>
12<image overflow="visible" width="800" height="800" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAMgCAYAAADbcAZoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
13bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp
14bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6
15eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEz
16NDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo
17dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw
18dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv
19IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS
20ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD
21cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNl
22SUQ9InhtcC5paWQ6MkMyNzEzMDQ4QTgzMTFFM0JGNkJCRDhDMjI5OTRBNkIiIHhtcE1NOkRvY3Vt
23ZW50SUQ9InhtcC5kaWQ6MkMyNzEzMDU4QTgzMTFFM0JGNkJCRDhDMjI5OTRBNkIiPiA8eG1wTU06
24RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyQzI3MTMwMjhBODMxMUUzQkY2
25QkJEOEMyMjk5NEE2QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyQzI3MTMwMzhBODMxMUUz
26QkY2QkJEOEMyMjk5NEE2QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w
27bWV0YT4gPD94cGFja2V0IGVuZD0iciI/PtTNJDcAADxbSURBVHja7N37ddPK2gfgybf2/9ungm0q
28IFSAqYBQAaYCQgWECgIVJFRAqABTAaYCvCvY2RXk85yMDibkYsu6zEjPs5ZWuCSxNZKl96eZkQ6u
29rq4CAABAF/5PEwAAAAIIAAAggAAAAAggAACAAAIAACCAAAAAAggAACCAAAAACCAAAIAAAgAAIIAA
30AAACCAAAIIAAAAAIIAAAgAACAAAggAAAAAIIAAAggAAAAAggAACAAAIAACCAAAAAAggAACCAAAAA
31CCAAAIAAAgAAIIAAAAACCAAAIIAAAAAIIAAAgAACAAAggAAAAAIIAACAAAIAAAggAACAAAIAACCA
32AAAAAggAAIAAAgAACCAAAIAAAgAAIIAAAAACCAAAgAACAAAIIAAAgAACAAAggAAAAAIIAACAAAIA
33AAggAACAAAIAACCAAAAAAggAAIAAAgAACCAAAIAAAgAAIIAAAAACCAAAgAACAAAIIAAAAAIIAAAg
34gAAAAAIIAACAAAIAAAggAAAAAggAACCAAAAAAggAAIAAAgAACCAAAAACCAAAIIAAAAACCAAAgAAC
35AAAIIAAAAAIIAAAggAAAAAIIAACAAAIAAAggAAAAAggAACCAAAAAAggAAIAAAgAACCAAAAACCAAA
36IIAAAAACiCYAAAAEEAAAYHD+0ATAWB0cHMQvk/VynP5pkRbY13S9zNfLn+vl63q5uO2brq6utBQw
37vvOvgx8w8gDyab0cbfxzDCCv1stKC1FTDLRvU7itvLgthDgHAwIIwPgCyJf1Mrvlv5cpjNx59Ro2
38HK6Xl+G612Nyy//HQPtIAAEQQAAB5K4AsukyhZDPwggbpuG69+x1+vNDHoUbPWvOwcAYmYQOjN3l
39Ft8Tr2jPw/VwrX/Wy1m4vuLN+FRzhr6tlx/r5XTL8BF2+D4AAQRgwL7XKEDnqQD9lv7M8G0G0FMB
40FEAAAahrscfPxiI09obEK+En4fax/5RrmsJG1et1pEkA9mcOCDDeA+D1HJCoqQNhHM71Yb28D9sN
417SJP83A9oXzW8O99djPwOgcDY6QHBKC5ieWxByTefjX2iBxr1qJUQ+vitjtrIXwAIIAA/M/XForZ
4201TMKmTzDx4nG8Fj2uJr6RUDCIZgAWM+AP4cgjVNBWhbYg/Lm+DhhrmZp6DY1dydg5v/4BwMjJEe
43EIDrYNBmOIiTl+MdswzLysMs/OzxmHS4jwEggAD8T9sPGKyGZcUHH041dy8mKXT0sQ0EEAABBOAX
44nzt6nVm47g1xS9duxXaPvR7znl7/q00AIIAAbFqE7iYJxyvx8aF2p5q9Eyfhutejz+e0LG0GAAEE
454LYQ0qU4J+Rb8ADDNoNeHHL1doT7FoAAAlCAzz28Znya+o/0lWbDR+z1mGfwXmLvh1vwAgggAL9Z
469Fgsf8ukWB5S+Dgc+X4FIIAAZG4V+r1b0ZkQsrfDFOZy6lEyAR1AAAG406Ln1z9LC7urJvdP7VMA
47AghAKb5n8B7mQkit8JHjM1bM/wAQQAAeLBhzIITsHj5ynMi/sHkABBCAUgpGIWQ7ZyHfu4iZ/wEg
48gAA8aCWEFCM+zDHnp8ovbCIAAQSgpABShRBPTb+9XY4zfn/mfwAIIABbF465OQ5u0bvpsIBQtrCZ
49AAQQgG38m+n7ikOxjmye/046P0tfc2b+B4AAArCVnIfN5DzhuiunhbTBwkcJQAAB2MYy4/dWPWxv
50MtJtE3uA5oXsQ+Z/AAggAIMwTSFkjOtdyh3BlnZTAAEEYEhmYXx3xiph3kfF/A8AAQRgcOKdscYy
51KX2eQlcp9IAA3OHg6upKKwDjPAAeHNz1X7HQ/VLIasR5Bk9Cfs8uaVLs9fgRypr3crDNNzkHA2Ok
52BwSg/OJ86E9KPy0sfOj9ABBAAHZS2m1uZ+vlZKDbIq7bvLD3vPIRAhBAAHZR4i1u34ZhPh+kxIn2
53332EAAQQgDEY2lCs40JDled/AAggADv5s9D3HYv1k4Fsg9gL9bbQ924OCIAAArBzIV+qWLRPB7AN
54jsN4n/YOIIAAUJTSh2JNQ7m9H9HCLggggACMySyU/YDCtzYhgAACQFlKe3ZGZRrKu+3uppVdD0AA
55ARijWMgfF/i+S+/9EEAABBCA0XodypqQHt/r3GYDEEAAKFNpt7IdwtwPt+AFEEAARm0eyugFmYZh
569H78a5cDEEAAdvV1YOtTwm153fkKQAABYCBmaclVHCo2H0hbr+xuAAIIwK4uB7hOOfcwHA+onQUQ
57AAEEYGdDnEg8C/n2gry2ywEIIABjdjnQ9cqx0J+HMh+YOKbwCtCog6urK60AjPMAeHBw338P9eD4
58KOQ1TOjbejkc0m61yzc7BwNjpAcE4Harga5XTnNBZgMLHwsfGwABBKCuoQ6lmYd8ngvycmBte+lj
59AyCAANT1fcDrNs/gPQzp1rtj2GcABBCAli0GvG45TEaf22cAxskkdGC8B8CDB+cLD/kA+Wq9nPf4
60+j9CPkPBmvKfsOMwLOdgYIz0gADc7WLA69bn/IvDAYaPVTAHBEAAAdjT1wGv26zHEDDEBw8ufFwA
61BBCAfV0MfP36CgJHA2zLzz4uANsxBwQY7wHwYKtnxg3tQXmb4pCh//QQPj4NsC13nv8ROQcDY6QH
62BOB+Hwa8bpPQfW/EywG240Uw/wNAAAFQXG7l+cADTxcMvwIQQAAacxmGPRdknoJBF47sHwAIIAAP
63ezfw9Tvu6HWeD7DtDL8C2JFJ6MB4D4DbTUKvnIVhPr07pAL6UcuFdOxl+WeAbRfbbVX3h52DgTHS
64AwKwnSH3gkxSwGrT8QDbbbFP+AAQQAC4Tyw0zwe8fnF+xryl3x1vY/xWKAVAAAHYzZsw7PH+bQwz
65i+FjiM/9iGF04SMBIIAAtCmGj6Ff9Y4h5DQ0c2esGGa+rJep/QCAiknowHgPgLtNQt8Ui+rZCJoo
663uHp+3r565YQUT0dfnnj35cpvMwGGDwqsSfsfRO/yDkYEEAABJBtxAL7R+ju+RnkY7FenjX1y5yD
67gTEyBAtgd3EIzivNMMrt/kIzAAggAH2Iw5PMAxiXZ8FDBwEEEIAenYRh35qXn2KP11IzAOzPHBBg
68vAfA+nNAboq3mT3SooMOH60ETedgQAABEEDqiJPR452xDrWq8CGAANzPECyA/cV5Ac+C4Vi2KQAP
690gMCjPcA2FwPyKY2niZOt+Jcj3i3q1XbL+QcDIyRHhCAZsUhO280Q7Hinc2edBE+AMZKDwgw3gNg
70Oz0glVm4npzuYYVlWKTg2OmdrpyDgTHSAwLQXkH7KH0l7+30LC1uswsggAAUrZrI/CZ4gF1uzjeC
71h5AI0CFDsIDxHgDbHYJ1UxyKdRpMUO9T7OH4mMJHFoHQORgQQAAEkLbN1svb9JV2xZBxsV6+pq/Z
729UI5BwNjZAgWQLcW4XrYTye3eeW/4eM8GAIHIIAAjFy8Ih8nqb8SRFoTh72dpQWATBiCBYz3ANjP
73EKy7xPkhx7ZKa+L8j9jzlFVPiHMwMEZ6QAD6Nwsmp7ftcL38SF8BEEAARisGjy/BAwu7MEltLewB
74CCAAo2R+Qj8hJLb5iaYA6Ic5IMB4D4D9zgGJRfDcVujVebi+CUBvnIOBMfpDEwB0qhoGZC5C/6oA
756En1AB3SAwKM9wDYfQ+I8JGn3u6Q5RwMjJE5IADCx9gdBjcCABBAAIQPhBAAAQQA4UMIAUAAARA+
76EEIABBAA4QMhBAABBED4QAgB6J7b8ALjPQC2cxte4WNY4i16n7T1y52DgTHSAwLQrE/Cx6DEbXmm
77GQAEEIAcxUJ1phkGZy6EAAggALk5TYUqww0hx5oBYH/mgADjPQA2NwckFqeukI/Dq/Vy3tQvcw4G
78BBAAAWRXR+F63gfjESelLwUQAAEEoOsA4lat43SZQshKAAHYnTkgAPXE0PFJ+LDtARBAALoQC9Cp
79Zhgtt+cFEEAAOhPveDXTDKMX5/+caAaA3ZgDAoz3AFhvDsg8uPLNr16sl4s6P+gcDAggAALIfUw6
805za1J6U7BwNjZAgWwHZi6DgTPrhj33ArZgABBKBRMXwcagbuYFI6gAAC0JjjcD3hGO4zTwsA9zAH
81BBjvAXC7OSDxyvY3rcWWdpoP4hwMjJEeEIC7VfM+YJd9xnwQAAEEoJb4vA/zPthV3GdONAPA7QzB
82AsZ7ALx/CFac8+FKNvt4tl4W932DczAggAAIIFEcRvMjuOUu+1mF6/kglwIIwE+GYAH87pPwQQOm
83wRwigN/oAQHGewC8vQck3nL3tIWXW4Wfd0Zarpd/d/jZv1IxWxW1U1uvKC/Wy8Vt/+EcDAggAOMO
84ILGwj7fcrdv7UYWMrxt/jmHjsoW3H9/j4cbXKqTMbNnsxO3/6Lb9wDkYEEAAxh1AvuxYwMdwsUiB
85Y9FS0KhjmkJJXJ4KJVmIPSAvBBAAAQQQQCrbDL1apaDxObPAsY3DFESqQGKOS/d+G4rlHAwIIADj
86DCDTcPfQq1UqGj+G6x6PoagCyfOgh6Qrvw3Fcg4GBBCAcQaQeNeroxv/XYWOixE0xSSt/9P0Ve9I
87e87XyysBBBBAAMYbQDYfOBivTH9IReJqxE0T2+S5MNKa/z2g0DkYEEAAxhVAqgcOhhQ83oey5nV0
88Yb4RRmhGDLePBBBAAAEYXwCJk87/FTy2Mklh5HXwHJImvFsvJ87BgAACMK4AMhE8apmtl5cpkFDf
89o/U5eKUZgLH5P00AjJjwUc8iXE+k/s96eRPGPV+m7n73zv4HjJUeEGC8B8DfH0RIffG2vnF4lonr
909ztP4eO/oc05GBBAAAQQ9hdDyMtg4nol9nRcbAaPinMwIIAACCA0p3q+SPWww7H1jMSwUd3W+dbh
91Vs7BgAACIIDQns2HHU4Huo5Vb0d8iOXioW92DgYEEAABhG5MNwLJLJTdO7JKYeNzCh9bcw4GBBAA
92AYR+HKbl6cafc3WZAsfX9HVZ9xc5BwMCCIAAQj5mKYj8tRFKuu4puUwBIy7fN/7cCOdgQAABEEAo
93I5hsfn28EUymYbf5JYuNP39NX5cbwaPVZ3U4BwMCCIAAAp1xDgbGyJPQAQAAAQQAABBAAAAABBAA
94AEAAAQAAEEAAAAABBAAAEEAAAAAEEAAAQAABAAAQQAAAAAEEAAAQQAAAAAQQAABAAAEAABBAAAAA
95AQQAABBAAAAABBAAAEAAAQAAEEAAAAABBAAAEEAAAAAEEAAAQAABAADYyR+aAKC2yXo5XC+z9Pen
96G/+3XC//rpdF+vPlANb3MC3TW9b17411LX2bztJ6/pm+Vr6mr0PapgCdO7i6utIKwDgPgAcHdX90
97vl6er5ejHX7mYr18SMVrSaZpfV+mPz9kldbzvLACPYaO1zW26cf0tRbnYEAAARBAHipST8OvV8V3
98FQPIiwKK8xg23qbwUcdlCiInma9n7PE42zF43BR7Q16FGr0/zsGAAAIggNzlOIWPJsTi/FnId7jS
99cQofkwZ+V+3ivAMxSH5paD1DWs9zAQRAAAHYN4DEK+Tzhl8+xxDSRG9AKevadPioFUKcgwEBBEAA
100uanJno/bCvMn4XreRA6+hf2Gl5USQmLo+NFC+Ng5hDgHAwIIgACy6TAV5W1apMK8b6cpbLVpmQJX
10132LPx6zF3791sHQOBsbIc0AA7i/K2zZruRje9j0cd/A6MdDNM1jXtts79qy89fEBEEAAdi2WuwoG
102r3te1y5f//lI1nUe2hviBVA0Q7CA8R4A7x+CdRK6vYp90GNTdH0iGMu6PjgXxDkYGCM9IAC3e9rx
1036816Ws/pSF4zOhzJegIIIABka0wBpOshUY/tXgACCAAMNfAACCAAAAACCAAAIIAAAAACCAAAgAAC
104AAAIIAAAAAIIAAAggAAAAAIIAACAAAIAAAggAAAAAggAACCAAAAAAggAAIAAAgAACCAAAAACCAAA
105IIAAAAACCAAAgAACAAAIIAAAAAIIAAAggAAAAAggAACAAAIAAAggAAAAAggAACCAAAAACCAAAIAA
106AgAACCAAAAACCAAAIIAAAAAIIAAAgAACAAAIIAAAAAIIAAAggAAAAAggAACAAAIAAAggAAAAAggA
107ACCAAAAACCAAAIAAAgAACCAAAAACCAAAIIAAAAAIIAAAgAACAAAIIAAAAAIIAAAggAAAAAggAJCT
108pSYAEEAAoCv/agIAAQQgVzNN0LqpJgAQQAAQBAQQAAEEYPRWHb/enz2t50wQAEAAAejf3x2/3uGI
1092ravsPV04CEWQAABYGvTkRTlfYatrttYAAEQQACyLR5jcTwZSfDpI4BMgqFfAAIIgADyi1kP4aOP
110oryPMDDrYT09BwRAAAHY2mUPr9n1cKhZj+17NPC27WsfAhBAAArVx9Xrrovy5z2279OBt+3KRwhA
111AAHIvYichu56JSY9FOU3A8F0gK8lgAAIIABFFZFvO3qd4wzad97R67zuYd2++vgACCAAu+pjGNYs
112tN8LMumpKL8tGExbfo2j0M9cl5WPD4AAArCr7z297llo95a8bf/+XYLQWcG/XwABEEAAGtXXbVSn
1136+VLSyEhFuRHGbXxrKWQMGmxDbex8PEBEEAASgkg0WEqoKcNFuSx0J9n2M7z0GyvTNV2hyPcbwAE
114EIDCLXoOId/Wy8mexfk8/Z55xu3cxHucpiDzrcfw0fc+A5C9g6urK60AjPMAeHCwzbfF4v9tJm/5
115IlzfXWn5QJF7mIrx+JyPo5DHfI9dXN5Y1/t6FGZpfZ+GfIaWvUjv/0HOwYAAAiCA3FbMf8u8WF+m
116kHE48E22Ssth5qHqP2HLp6A7BwMCCIAAcpt/Qnm9CPRjsV6ebfvNzsHAGJkDAvCwC03Alj5rAoD7
1176QEBxnsA3L4HZBau76oED9l6+FXkHAyMkR4QgIctggfL8bCLXcIHgAACwH0+aALsIwD7MwQLGO8B
118cPshWFGchP4jmIzO7Vbr5dGuP+QcDIyRHhCA7cShNa5wc5d3mgBgO3pAgPEeAHfrAYn0gnCbVajR
119+xE5BwNjpAcEYHuxF8SVbm56pQkAtqcHBBjvAXD3HpBKfDL6oRYkXN/56kXdH3YOBgQQAAFkG4cp
120hDBusUfsUdjj1rvOwcAYGYIFsLtlMBTrMnjmxSttALA7PSDAeA+A9XtAKvHp6LORNt+T9TJdL59G
121uv7v18ubfX+JczAwRnpAAOqLY/+XI1zvV2m9L5oowgu0GOl6AzRCDwgw3gPg/j0gUZwPEntCxnJr
1223hg+zm/829l6mY9k/WPwehYaGnrlHAwIIIy9kAKEkF3Dx5hCSKPhA/qi9qNvhmABNFOYPgnDHo51
123X/jY5v+FDwAEEIAGrVKBejGw9YoF94stw0UMIUOcG3GeAqbwASCAAGRZrA+lCF/WCFXvw3B6Ci5T
124qPKkcwABBCBrsQiPV8wXA1iHOsPK4no/CmX3Bi3S+p/bnQEEEKBshyNZz6r3IF49XxVYeO/bi1P1
125Br0IZfWGrNJ7flbYdvOZBAQQgDschfHcsjY6D9e9AbkHkVV6j89Cs5PpL9L6v8s8iFTrX3rPza6m
1266TMJ0Bm34R3KhnQbXsoKIE/DeB/kNl8vL0M+T1BfrJePoZuhRpO0/q9T4ZuDi7T+FyPdH+OT7D+E
127socLsiO1HwIIAghjE4vQf8L1lfYxFz3TjTDW9RXo5UbRvepp/Q9TEDvqIYzE9f6cvo75zlYxDMbn
128tziBCCAggCCAMHjfUtHZ9HCfks1SUf44fW1qXP5lauOv6esiw6J7mta/WvdZw2ErLt831p+fD8+s
1295iohgIAAggDCoJ2ul+NwffXd8xXuNtkIIodhu7kzlxuhbjHidV/arx4MH7FN41DI95pEAAEBBAGE
130oZulAqgqGvWEQPfhI4T6t1pGAAEBRAARQCjOPxtFUHXL1oVmgdbE+TZnG5+7Vbi+6xcCCHTKbXiB
131vmyGjVgQxauyJ5oFWhGHPX4Kvw5lE/gBAQQYlc+3/NvbFESmmgcaEYdcxZs+HG/5GQRonSFYQ9mQ
132hmBRnup2vHeJD6470UxQ+/N1nEL9beKwx/9opnFS+9E3PSBAX2IBdN/D32Lh9CNcP6sA2F78zHy7
133J3yEMN4HLwICCDByDw0BmYbrSbNxWNZMc8GDweNH+sxM9/zsAbTGEKyhbEhDsCjTQ8Owblqslw/B
1341Vu4GTzehu3nThl+NXJqP/qmBwToUyyEznf4/lm4vpNPNTRrogkZcXg/Dtv3eGwS4IFe6QEZyobU
135A0K5Yqj4smeAib0iK03JCMS7Wr0O18/0qBvAPXxw5NR+CCAIIHB9FXe65+9Yhp/Dsy41KQMSg8Z8
136vbxMAWTfz8kTTSqAQJ8MwQJy8LGB3xELszgUJc4p+RTcPYthhI5PaZ8+bSB8hBTSAXqlB2QoG1IP
137COUXW/+09Ltjj8jnoGeEMj4HcWjV8/S1aXH/f+RzgNoPAQQBBK7F3ot5y6+x2AgjK01OBmKvxiw0
138M7zqIefr5ZUmR+2HAIIAAtfiHX1OO3y91UYgiV9dFaYLVS/H0xQ8ph2+9iPBGwEEAQQBBH6KxdiX
139Hl9/mYLIV4GEBsWAcbgROA57eh/nQe8HAggCCAII/KLNeSB1rDYCyTK4bSnbqYZUPQ7d93Dc51na
140n0EAQQBBAIHN82Lm72+Rgsh3oYQUNg5T2KiCR6777TObCwEEAQQBBH73JeMi7r7ibnUjlBi+NSyT
141G2FjWth+qvcDAYSs/KEJAPZyWyF6uRFG/g0/55ToMcnbYQobcZv+FX7O35gUvE4L4QPIjR6QoWxI
142PSAMw8l6eTvwdVylpQony41wouekXZONQBG//pm+TkM+czWapveD36j96JseEIBuVcXu7I7/r4JI
143DCl/p39b3Agv/G6zp6Jq28fp34YcMO5zIXwAOdIDMpQNqQeEYYiF4xfNsJXNMLIZVjZDzF1/LyGg
144VareinAjVIQRB4ttee4Ht1L70Tc9IABl2rf43mZOytc93+PTB/6/9PkVOXsvfAC50gMylA2pB4Rh
145iAXpN80Ae4nh8lEwp4g7qP3o2/9pAiAj7hIF+3sjfAA50wMylA2pB4ThcFCC+hbBQwd56CCr9kMA
146QQABAQQa8iToSUQAIXOGYAG5UTxBPe98fgABBGB3xq5DveB+ohkAAQQA6MIrTQAIIABAFwy9AgQQ
147AKATi2DoFSCAAAAdiPOlDL0CBBAAoBMxfKw0AyCAAABte79eLjQDIIAAAG1brJc3mgEQQACAtsW7
148Xb3QDIAAAgC0rZp07mGdgAACALQu9nx43gcggAAArYs9HwvNAAggAM2bagL4RZxwfq4ZgKE4uLq6
1490gpD2JAHBxqBoXBQgp9i8PCwQZo9yKr96JkeEAAQPgAEEAAQPgAEEIA2zTQBCB+AAAIACB8AAggw
150OFNNgPABIIAACCDQrvfCBzAWf2gCICN/aQJGKAaPc80AjIUeECAnU03AiFwKH8AYeRDhUDakBxEy
151DP+sl4lmYCTh49l6WWoKuqb2QwBBAIGN86ImYASWKXxcagoEEMbIECwgFzNNwAicr5cnwgcggAD0
15271ATMGDVfA93ugJGz12wgFy4AxZDtUzBw3wPgKAHBMiHHhCG6DyYbA7wC5PQh7IhTUKnfA5GDEk1
1535OpCU5DdwVbtR88MwQJyMNMEDMhivbwIJpoD3MoQLCAHhl8xBFWvh1vsAtxDDwiQg6eagMJdpPAh
154eAA8wByQoWxIc0AomyegU6pVCh4LTUEp1H70zRAsoG+HwgcFij0d79bLI+EDYDeGYAF9Oyq4AI23
155Vp2mhfE4Xy9vguFWALXoAQH69rzA9xyDR7zy/Wzj68KmHLy43Z8Ecz0ABBCgWNNQ5h2wPtwoQBcp
156hLj16nCdBw8UBBBAgOLNCn3fqzv+Pd4J6YkidZDhQ68HgAACDMDzQt/35QPh5EkqWhlO+ACgIW7D
157O5QN6Ta8lGe6Xn6U+pHb8vvO1svcphY+ICdqP/qmBwToy9EI1vFV0BNSqlW4vtMVAAIIMBAvC33f
158ixohZGFzFxkezfkAEECAgTgMZd79KtQsSg3jKcu50AgggADD8rrg9/69xs+sgqFYJXmnCQAEEGA4
159JqHsidl1b7H72aYvwnm4+zbLAAggQIGOC3//dYtT8wnKICgCtMxteIeyId2Gl3LEW+9OS/641fy5
160aSj3tsNjEUPifzQDQ6f2o296QIAuzQsPH4s9fnZl89cOBV31Hl1oboD2/aEJgA69Lfz9Lwt6r6tU
161UP+7Xv4M13cdm2YcAFdpiW38d/q63AgfJx3sP199RAEEEGA45qHs3o+SCtT4AL339/x/DCOTja9V
162QAkthZQqXFQh7t8ULJYbXx/SRQBZ+ZgCtM8ckKFsSHNAyF/pcz+i/4T9hgN1ccB9KHzsahJ2f2bL
163MrQzbKrt9nMgZRTUfvRNDwjQhZMBhI+2iuomrRoOHyGt8yKDdZv6GAEMg0noQNviFfTXA1iPRQHv
1648cOA96NDHyUAAQRgG2cphJTuYwHvcTng/ei5jxKAAALwkPl6ORrAeqwaKO67uIK/GPC+NOvgNfSy
165AAggQMFiMXc6kHVp4vkQXfQCTQe6Lx11tG5HPrYAAghQplhsD2XoVdTE8KuZAFJbV3OIXg5onwUQ
166QIBR+RKGM5xlFZqZW/G4g/c6xHkSs47CWxXgjn18AdrlOSBD2ZCeA0I+Ys/HfEDr09RzNbo42Maw
1679GhAbR97I76F7nt2noVhz6dh5NR+9E0PCCB83C0+A+O8gd/TVZvEQn1IV/Dfhn6GlX0KJqQDtEYP
168yFA2pB4QhI82xPDxqoHfE4ekzToMTU/CdW9IyWLw+NFz+HwU8n/4JOxM7Uff9IAA+4rDZD4NMHxE
1697xr4HbMOw8fm9ih9MvVZBvt1HP6lJwSgYXpAhrIh9YDQX5E2pAnnm85DM70ffRWxceJ8nMtQ4hX8
170aei392PTZWrHpY87Q6H2o296QIC6DsOwrxA30ftx3GP7HKZwWGJPSE7P46hC9txHHkAAAfotEGNR
171Nh3o+sW7Xq0aKFzfZhASS+yhmmT4fuKQsBMffQABBOhefLr5EOYY3CUOuWmq9yOHNqpCyNyuu7e3
172odxeJQABBCjONFwPuRr6g9rehf3nTcQC9XVG61RdwS8lOC4yfm+zcD0/ZeaQACCAAO05DuO4I1As
173fJt46OBRpoX+USqej0ayHdoMdLEn5MShAUAAAZo1TYXWaRj+sJPY6/GqwXbLuXj+FPLvDXkT8n8a
174+dvgVr0AAgjQmKrXYzaS9Y1Dr1Yj2r5Vb0jOQ+pehGaeRN+mao7NcQBgK54DMpQN6TkgNFtQnYVx
175XdW9SMVuU2apKC3FIlz3OOT6rIu4P84LacdXIwuyFEjtR9/0gACVaqLy2IaULENzQ682C9H3BbXB
176LG33XIfaxe1zXlA76g0BuIcekKFsSD0g7OckXN+1aWy3F237KdenBRajsU3eZFrwH6c2LcEi6A0h
177U2o/BBAEEPo0D9cTaacjXf8nof1hR/NQ5iT+RchzWFZsz7OCwlycW/Q+gAACAogAguAx6uARdTms
178J7ZzvOtUiUPb3odmno3SpGridymhLtcwhwACvTAHBMYXPOKdj86Ej06HGK3CdW/LuwLb6jjtM/OM
1793tMydNN71ZRZuJ4bcuIQBKAHZDgbUg8Id4tXieMtV8fe49FX+LitGC01AC5SiFpktG9/CmXdKnqV
1809sGFjyJ9UfshgCCA0JZY4M7DOCeX5xo+Ngvns5D/E8nvEtswDinKZVhWiZP9cxzahgACAggCCLXM
1811svLUMZzE7rS9t2u6pqHcp8yn9sE63koZ3L6ZhvGUHzhI4oAggCCAEJpJuFnb8dUc/yies5HrvMF
182pqlwnhXcvrE3ZJHBeyltcnplEdyyFwEEAQQBhELEITzPg96Ou1ykwq6EYS4n4XqeTslt/SaDIrrE
183eSEh7aMfgonqCCAIIAggZChe5X2ZwsdUc9xZzOX6ML2Htu1ZKPdJ9DkV0SXOC4ly6lFCAAEBBAFE
1846BA6thALt9KHs5RaPFdWIY87Pc1DuXNsTFJHAEEAQQChc7NwPbxK6NhOqb0e923/0p/XksOwrJJ7
185lUxSRwBBAEEAoVXV8zqepq9unbu96m5MlwPcJ+K8kJJ7Q3IYlhXbMfaEzAttw0UwSR0BBAGEDANI
186PMEebpysKEMVOGah3HH/fTpP4WPohVncP0rvDVmF/odlzUPZtz02SR0BBAGErALIl/Dzri/ViWqI
187V4RLNtkIGk9DubddFTz6239K7w2J+h6WVfpE/xyCHAIICCD8N4DctSGXafk7nbCWQkmnhU4VNg6D
188Ho59Xabg8SGMeyjKLJTfG9L3QwyHEObOQ15Po0cAAQFkhAFkswdkm5P/ZjBZCiaNFIUxYPyVvs40
189SWNWKXSc20cHVUCH0P8tZ49SmCt1vtXQbryAAIIAQmEBJBa98eFb0z1/1SKd1L6nwm8lnPxS9B2m
190No7L040/07w4VOdjcAegh4LvaSi/d63PW86W+uDCm8dtk9QRQBBA6DyAVCfSNu/0UgWReJL7O/zs
191SalOgEMJGGGjGHl64++0a5lCx7nQu5OTUPZT1EPof27DcWrDkntD+hzWhgACAshIA0hlmk6kfdzK
192dTOUVD0pNwPMpraKjc0wEW4JEX+Fnz0Xh8Etb/suPGMvx9jnduzrMF2AKD0sX6QgctlTG5Y8Qb06
193puoNQQBBAKHzALJZhMcQUj3MrtTidHVHoSA0lCuG0c+p2FxqjkaVfiU/hP4fwHcSyu5R0huCAIIA
194Qm8B5LYw4iF39CUWk1/T15XmaNU0XPeGHBW+Huehvzs96Q1BAAEBhD0DyG0n11n4+TwKgYSmLVMB
195VIUOuneUgsi04HVYhX7nhpyE8ntD3CkLAQQBhCwCiEBCm4FjEUwiz8VQbtn7LvT3FPAh9Ib0ObcG
196AQQEEAFkK9MURB4Hz7Xgd9XNBqqw4VbN+RvCJPW4n70I/Q0pigHodSj3As0qtZ95VwKIRkAAIcsA
197clcBcyiUjFIVMr6Hnw+upEzzFERKvt1snxPUp+G6N6Tk418ckmWCugACAghFBJC7Qsl0I5hUf6ZM
198MVisbgSNlWYZnCEMy3qfCum+lP4UdUOyBBAQQCg2gGwTTP7a+LO5JXlYhJ/PaalChl6N8ZmlInpa
199cGB+1mMRPUntd1Rw+73y2RdAQABhKAHkoaKn+vpn+P3p4zRTWGw+tb76u7kaDK2IvkwhpM8iOvYk
200nRbcfn0OaUMAQQBBAMlC1VMyDT+vzD7dKJbGPMRrFX4OiYoF17/h16fPCxjUdRLKvd1sDreajcel
201L6HcXl7zQgQQEEAYdQDZ1s0wcnOI1+NbioEchoHdFhKqMHHb92yGDmjTPFz3hpSqz1v1RtP18imU
202e5EkBrhXPgYCCAggCCDdFg/Thn7XQnNSqFkqoku9kt93EV36kDYhRAABAQQBBOhc6cOJYhEdhxT1
203ORwxhpB5oe3nDlkCCAggCCCAELKjvu+QFZ2EcufVLFL7IYBA4/5PEwCQaQFfeoCKAaTU4UyzUPZ8
204IEAAAUAIGWUIOS84hMyFEEAAAaCPEFLypOQYQj71/B5KDyFzHwNAAAGgSxeFh5BZ6P9KfskhJD5k
205cepjAAggAHRdQL8r+P3PQ7/PCCk5hEyCoVhAg9wFaygb0l2wgG6UfHvZ6EW47tHp0yyU+ayVOB9o
2064SNQPrUffdMDAsAu4hX888IDVN+F/yKUObn/pd0fEEAA6CuELAt97zF8fMrgfZR4h7GpXR8QQADo
207y7OCQ8hsvRwJIb/x5HNAAAEgW5eFh5DTTN5HbL9HmbRjfA9xjsz5LWEk/v2D3R5ogknoQ9mQJqED
208/YhDmuLD/g4LfO85zWfJpR03J+lPNt7Pwq4+HGo/BBAEEEAI6cdFKrhz0vddxlbhukcGAQQEEAQQ
209QAhp4/CZ4Xs6WS9ve3x9t9sVQKBV5oAA0ITS54TkFkBehWYnha92+N7nNgEggAAghOzmTej/gYP7
210OE9tuWrwd77YMtQc2pUBAQQAIWQ3L1PBfd9woveZt2VswycNBalpCjNPguFVgAACgBDSuMO0LNJ7
211iYX3u/T3WNDHIU5vCmnLFw2916MUQp6l33dXb8hnuzDQJpPQh7IhTUIH8tP3xPQYOE4G1J6xHc/2
212aM8qjG1un3m4nvMxS+Hk48DajFuo/RBAEECAoevr1rI3C+6hhLrjUO8uWUNsDwQQCmQIFgBta/qB
213f5dhu8nUswG2ZVzvk2AuByCAAMCDIeRVQ78r9gK82TKETAbannF+zbPUpiu7FyCAAMDvzlPR3MTz
214LR5v+bsmI2jTRymIPDTp/6NdEMiBOSBD2ZDmgADlmK6XT2G/yemLFEAemuh+MMK2jXe7enojfH0M
215zQ6Do2BqPwQQBBBgrE7D9YTq2oe+jT+frJfXN4ru+JyPN5oZBBAEEAQQgEq8Wn8W6g2Vunngi79j
216Fq57Q+KzPpaaFwQQBBAEEIBwS3CIvSHzPQMIIIBQAJPQAehbnEgeJ1HHOR2LLX9mpdkABBAA2Mci
217hZC4XDzwveZ2ABTKEKyhbEhDsIDhmYbrOR1P05+jr+H6bk4rzQP1qP0QQBBAAAABhNEwBAsAABBA
218AAAAAQQAAEAAAQAABBAAAAABBAAAEEAAAAABBAAAQAABAAAEEAAAAAEEAAAQQAAAAAEEAABAAAEA
219AAQQAAAAAQQAABBAAAAAAQQAAEAAAQAABBAAAAABBAAAEEAAAAABBAAAQAABAAAEEAAAAAEEAAAQ
220QAAAAAEEAABAAAEAAAQQAAAAAQQAABBAAAAABBAAAEAAAQAABBAAAAABBAAAEEAAAAAEEAAAQAAB
221AAAEEAAAAAEEAAAQQAAAAAQQAABAAAEAAAQQAAAAAQQAABBAAAAABBAAAEAAAQAABBAAAAABBAAA
222EEAAAAAEEAAAQAABAAAEEAAAAAEEAAAQQAAAAAQQAABAAAEAABBAAAAAAQQAABBAAAAABBAAAEAA
223AQAAEEAAAAABBAAAEEAAAAAEEAAAQAABAAAQQAAAAAEEAAAQQAAAAAQQAABAAAEAABBAAAAAAQQA
224ABBAAAAABBAAAEAAAQAAEEAAAAABBAAAEEAAAAAEEAAAQAABAAAQQAAAAAEEAABAAAEAAAQQAABA
225AAEAABBAAAAAAQQAAEAAAQAABBAAAGDA/tAEAP81WS+HG39fZPb+Zht/Xq6XS5ssO9O0hLR9lpoE
2264Hd6QICxi4X9t/Xyz3r5srFcrZezjYKyDzEQfUrvZfO9Ve/10ObLwsl6+ZGWahtV+9RJCrcAJAdX
227V1daYQgb8uBAI8Du5ilk3CdeyX4Wur+avc17i16tl3ObsheTFBBnD3zfMu1Deq3IgtoPAQQBBPpx
228lIrHbazWy5MOC8hpuL6Cvs2V88v03lY2aedO18vxlt97nsIiCCCMniFYwFi93TEQHHX83rYdthO/
22977XN2bnpDuEjmod+h/MBCCAAPdt1/kSXxeO05XWh+23U9T4EIIAAAAAIIAAAgAACAAAIIAAAAAII
230AAAggAAAAAggAACAAAIAAAggAAAAAggAAFCQPzQBmZmsl/l6ebxepunfvq6Xi/WybPi1Zml52uLr
231dLk+bZuldYjLn+vl8Mb/f01fV2ndlnZnbpim/abad57e+P+4z/y7Xi439qHLEbTLYfp8TW60SVz3
2327+nPi/TZWg10v5imNgjpeDnZ+P+4zn9vtMNQ94vpxnH2ZhvcdqxdjOgzwtBcXV1ZBrAMxPF6+Sfu
233lncsX+45IO9aSP944HWmDbzOvKP1aTsMfrpnHR5aPqXfkeN67rouJx2+ty87vrcvGe9HR+vl7IHP
234wn3Lt/Vy2tBnsulAvuu6zG4Um6c12uVH+rnDAYSu0weOxdph+8/I8S6fEXWTpfe6VSMIIJk43eFA
235u08xO9/ydf7Z88Q272h92roKt0/BeFd7nmVWRAog7ZrvWVTdtZ6zwgPIZIfjXUntsUsg/dbwfvEt
2367W8lmdX4nG+zbHWcVTdZBBCLALL7ifyko9epW9RNdizezzLaFicNB4/bgshJJusqgLT3ef7R4j5U
2379axNCjtuXaWr1N9CO0Vnzr2p1ZX+Ly3vF18K6BGZ7Nmr3MjxSt1k6XsxCZ0cPN/x+1/uUTC0+f2b
238V/gmO35/DsVBLIzetlzITNJr5D78jHpOQ3NDGB/6zPwo8Op/W0OG5unzm2vxfZLeX9vbq+pVyLU3
239pNpvuzjmvw159rDDfwkg5HJlbBfTzNdn1/fX9wniKHR/5XAmhAzKJPwch97la+ZcbPZx3MmtByBu
240o7NUDHf9mrntF/H9dN1zV11Ymvp4IIAAYz8pbp4chZBhhI8+C9+zUF5PyFC3RU4BMacQchr6G2o7
241DXkMWQQBBPivWeh//slhyGsODGUWvAqsX7dJDnNCzjLYL3J4DzEEHff8HhxnEUCALExT0ZaDo5DH
242PBjKLPA2i25+Fpxve3z904w+02c9b4dc9kvHWQQQoHe5XTE+tUmKc5xZQRPfy8xm+WX79NEes9D/
243Ff+bIWDeUyj+lNk+4TiLAAL0WpjkdrecaTCZuCRxe73N8H29tml+0fU2yrUnqo99dacHA3b4udUL
244ggACdG6SaeEYPbd5iipsc5xzcRTc8WfTLHR7seE40/afhm57g3IN6I6zZOMPTQCjctxA4bhYL5/X
245y/KWYuf5HgVP9fyUS5spa7G4mu/5O1br5WK9fL2xveO+8zjs/iydm/vheUHtuUyfp0XDn6dK7BV6
2461cF6TML+PVCXadvd3C/iPvd0z/3i+S1t3JYmeuLO035xmd73YVr3w422qHucfRWgb57G6EnoGajz
247dNw6Tgb2OnXs85Tzbe92FAunuk977nJ4gCeh13O2xz70z5bhZbLH63Q17n4W9ntS9bYP5tv3CeL/
248dHhxY5/3eLJFuJjUPL5W7d2FyZ7H2U9hu16kwz2Os4fqJosnoQNdme9x9TBejXsWfu/1uM0ife+q
249xusc2kxZm+wREuO+8yhs1ztxma7Sng90H4rr9SRsd0V+mT5P53tssy7apO5V/8u0fifh4d7Py/R9
250bzLeL/bppYnr9WLLY+dyj+PsLEDPBBAYj7pjf8/D7l32lzWLhKc2U9bqFlerVCztOrzuTY2fmWbe
251hotQbwhM3UAWQvs9i4c1270KH8sdf+59jZ/pqvCue5x9n5YujrOemYMAAnRaPO5qGeqPF74I5nMM
252Td2A+KLmvnCZ9qMcC8263u3xs29CvSvej1tep9ke67Os+bMfMy2867TFsmaQCDU/Hy70IIAAndin
253QNjHsqP3Sb770fkeRWb0dUDtF8PDYo+fj4HsQ42fa3v4UZ2CdhH2u1nAMsN2OKwZcvY9zi4CCCBA
254huqceJcNnNiWmn4wYmE1rfFzH/Z83dWA2vCigd9Rp2iftrxedYLpxz1fM8djS1/HWRBAgGyLx119
255buB1/9X0ow6xKyG08c/DZc02bXP4UZ3ffd5AO+SmTtD76GOBAAIMVd0hErAP+1A77ZHT8KOZ/eJ/
256HmsLEEAAaE6dAvZvzdYK7ZqnOj1BeggRQACgweIKAAQQAABAAAEAAAQQAAAAAQQAABBAAAAABBAA
257AEAAgU79qQk695cmAFow1QQggEAJ6jxIbabZOm9zsA81H+wvBRBhDAQQ+OlrjZ/J+aFoelp+biPF
25843D0VcA+1fSNhLKhPXH7+YCOkwIIAggM+AQ87ehnhlJ073tSO7abDkqdAvZxA/vg0YDacNbQ53LX
259Y0xuvR9NFMw57herHvaJWQABBLININOaJ706V193PSEsOmivOr1ML/d4vXhV77XddPSOwn5XeN9m
260vG51ivrHDbzuvKPw2Obxa7pn4XwS8rzq/3eNn9m3J+dlAAEEOjuB7XrQrXu1bNeT5DzTNr6sue51
261i4SzkPcwOborYk/3KLTnA2uPeBzap4d0WjOUfW25LeocX+qGy9h+rwe0T8z3CFOHmX9GQAAha6ua
262B95ti+N9rsbHE8MuQ4nqvM7XDtq4bvH4qUbBdBaGNWyGn0Vmnc9qnSBxtEdwyb3grBvOJ+nzWMci
263w3aYpbbY9bj/JeR7cWOf4+ykRlt8CiCAwF4BpM4VtG2K40kqZKZ7vL+3W4ads1Dv6uaqgzauW4BM
2640gl/m/WvioO5XXqw6u5H8bNxsuX+dlqzICulPeLn5NuOIX2aPlt1ji+XHQSQuhdR5jsEsuPMw0d1
265LF/V3Ce+7HCemu/4/SCAwB3qXDmapBP5WSqQJzcO6Mfp//ctiKsivLqyf9vr/NjjdRYdtfHFnutf
266hYvpjfWfp4LxWzAhcuj26a17mz4nxzcK6Wn6XJ1t/P/Q22OaPjO3tcfNwvQ0fbYOO/7cd/Ua89QO
267pzeOH5P099ON/x9qKK229Y+0X8xv2d6zjXONIa4U7+Dq6korDGFDHhyUvgrHoYwhF01brZdHHb3W
268POw+5KGX3bmj19n14PcubHcVvwnb9jptFj3POnhfk1QA5V78POsw2P8IzV2Jjr0Vy9DsLayfhG5u
269wdtkO7Sli8/wLH1+sw5J69rvWYAe6QEhFxfWu3XnYXgPI6NblyP+rN7lY8MBb9Zg+FiE7p7/8cGu
2708L82X2kGEEAowyp0d8UyJx8G/noMzztN8Iv3GQf7Nx2+1nlwgcNnBAQQHLSzdx66v1L2Prg6x/4X
271C95rhv+JRferTI+ny47bQeHd37EdBBCoaRHG1QvSx8k6Fglv7Go0sO8qsH66SEVnLmLwOOnhdd93
272HHpy9koTgABCWQftrrvx+xg20GcBdxFcwWb/z8wLzfCLN5kU3/G40ucE4xfBUKxoEfQIgQBCMVah
2732ytHl+lkfd7ha8bXOsmgWDq3u7GHZXCV97ZjSZ8hZJVBAKgCkBByfZx3nAUBhEJcdFTYbBYMrzo6
274UZxnVLS1vc653zFJgVTG/rwoMIT0UXTG41hXt9zd5r20HUJKKey7OLc4liGAQIMnlzZPYMvw+9XK
275eKJoc2jS+5DfFeP4ftoYJlAVYp8zLjYvMn5vu7bbx54/q7HwXbV4HNjVqsf2qCald9kT8S5tg5wK
2760TYDURV8VzXeU1/H2Tct/m7zbihPfBChpfxlwOJ98eMDCq8aXE7C/Q9Si09l/tHg65XwhPD43IEv
277Da7v5nMMdmnLo473rX+2fF99PMDx2w7tnctn9aShfShul/nG797lGHCW2fHrZIf9bNflS2jumSFt
278arINTjZ+73zH49KQjrM/Ns4ru/7OL+omS+91q0YQQAoxTUXIjz0KmtOw25N65zsUgbctnzouqJsw
279S++77glxfsdJd5vi47SnguChbdxXQTvZorD4FvJ7Kvk+n9Xqczq5pS22+Szm2B6bx5NPoZlwdlbA
280RY27wljdY/jZHcfvsy3b7DCz4+xZzVD245aLaAKIpbjlYCTF6+AdHByMaXUP0/L4gZPKar18D/s/
281DXiaThjx69MHXu/vjdcreVzu5hOZnzbQxtN7iqb4O+LwhD7ni8Ti8PmNk3p8Xx9D/3MQjtJ72yy+
2824r4Vh2mdF/BZnaXP6l3h/3JjH3qorWPh9fqWkBF/R3zI5vsCPneTG+1S/f2u4FQdS76G4dyqfJv9
283IqR1XqZ1vm+7Hqf94rbfdZ6OL7nuF7O0/LXFZ+TijuPstx0D1mJd+z0L0GfdKoAIINBD8bVZ5K80
284CzWKtl8KKk3CLUFuLPvFroXcxbr2cxttevWHJhjI0UeQpAyXisXmjPjCg32I24xxMva0xs98t6vQ
285N3fBAgAo06zGz7htLwIIAAC1vKzxM27bS+/MAQEo9QBu7heMWbxBxSe1HyXSAwIAUJZZqHeL8AtN
286Rw5MQgcA6D5ATNNS3Wp5scXPxTt9xVsOz2u+7mdNTw50wwGUegA3BAtKcxJuf5ZNZRXuvjX5bM/X
287jr/3UfyD2o++6QEBAGjfabh+aOJ9pqHerXW38dEmIBd6QABKPYDrAYFSxKFT33p8/VVIvR+R2o++
288mYQOANCuo55f/5VNgAACADAej3t87XdhuwnuIIAAAAxEX08fPw/XE99BAAEAGJHvPYUPQ6/Ikkno
289AKUewE1Ch1LE2+7+CHfffrdpb9bL+7v+U+1H3/SAAAC06zKFgrYt1suT+8IH5MBzQAAA2neevp61
290FDw+brwGZM0QLIBSD+CGYEGJZuH6aejx6z5Dslbr5SIFj+UuP6j2QwABQACBcZqmZZb+/le4+0no
291MWT8G657O+Kfa99ZS+2HAAIAAIyGSegAAIAAAgAACCAAAAACCAAAIIAAAAAIIAAAgAACAAAIIAAA
292AAIIAAAggAAAAAggAACAAAIAAAggAAAAAggAACCAAAAACCAAAIAAAgAACCAAAAACCAAAIIAAAAAI
293IAAAgAACAAAIIAAAAAIIAAAggAAAAAggAACAAAIAAAggAAAAAggAACCAAAAACCAAAIAAAgAAIIAA
294AAACCAAAIIAAAAAIIAAAgAACAAAggAAAAAIIAAAggAAAAAggAACAAAIAACCAAAAAAggAACCAAAAA
295CCAAAIAAAgAAIIAAAAACCAAAIIAAAAAIIAAAgAACAAAggAAAAAIIAAAggAAAAAggAACAAAIAACCA
296AAAAAggAAIAAAgAACCAAAIAAAgAAIIAAAAACCAAAgAACAAAIIAAAgAACAAAggAAAAAIIAACAAAIA
297AAggAACAAAIAACCAAAAAAggAAIAAAgAACCAAAIAAAgAAIIAAAAACCAAAgAACAAAIIAAAgAACAAAg
298gAAAAAIIAACAAAIAAAggAAAAAggAACCAAAAAAggAAEBt/y/AAEmyIDWRykGwAAAAAElFTkSuQmCC">
299</image>
300</svg>
diff --git a/app/Resources/views/baggy/public/img/logo.png b/app/Resources/views/baggy/public/img/logo.png
new file mode 100755
index 00000000..5305c77d
--- /dev/null
+++ b/app/Resources/views/baggy/public/img/logo.png
Binary files differ
diff --git a/app/Resources/views/baggy/public/img/logo.svg b/app/Resources/views/baggy/public/img/logo.svg
new file mode 100644
index 00000000..865da440
--- /dev/null
+++ b/app/Resources/views/baggy/public/img/logo.svg
@@ -0,0 +1,8 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="64" height="64">
3 <circle cx="32" cy="32" r="29.5" style="fill:#000" />
4 <path d="m 16,18 33,0 0,26 -16.5,6 -16.5,-6 z" fill="#fff" />
5 <rect width="9" height="2.5" x="17.5" y="24.5" fill="#000" />
6 <rect width="9" height="2.5" x="28" y="24.5" fill="#000" />
7 <rect width="9" height="2.5" x="38.5" y="24.5" fill="#000" />
8</svg>
diff --git a/app/Resources/views/baggy/public/js/closeMessage.js b/app/Resources/views/baggy/public/js/closeMessage.js
new file mode 100644
index 00000000..527719d5
--- /dev/null
+++ b/app/Resources/views/baggy/public/js/closeMessage.js
@@ -0,0 +1,17 @@
1$(function(){
2 //---------------------------------------------------------------------------
3 // Show the close icon when the user hover over a message
4 //---------------------------------------------------------------------------
5 // $('.messages').on('mouseenter', function(){
6 // $(this).find('a.closeMessage').stop(true, true).show();
7 // }).on('mouseleave', function(){
8 // $(this).find('a.closeMessage').stop(true, true).hide();
9 // });
10 //---------------------------------------------------------------------------
11 // Close the message box when the user clicks the close icon
12 //---------------------------------------------------------------------------
13 $('a.closeMessage').on('click', function(){
14 $(this).parents('div.messages').slideUp(300, function(){ $(this).remove(); });
15 return false;
16 });
17}); \ No newline at end of file
diff --git a/app/Resources/views/baggy/public/js/init.js b/app/Resources/views/baggy/public/js/init.js
new file mode 100755
index 00000000..74cbae68
--- /dev/null
+++ b/app/Resources/views/baggy/public/js/init.js
@@ -0,0 +1,51 @@
1$.fn.ready(function() {
2
3 var $listmode = $('#listmode'),
4 $listentries = $("#list-entries");
5
6 /* ==========================================================================
7 Menu
8 ========================================================================== */
9
10 $("#menu").click(function(){
11 $("#links").toggleClass('menu--open');
12 if ($('#content').hasClass('opacity03')) {
13 $('#content').removeClass('opacity03');
14 }
15 });
16
17 /* ==========================================================================
18 List mode or Table Mode
19 ========================================================================== */
20
21 $listmode.click(function(){
22 if ( $.cookie("listmode") == 1 ) {
23 // Cookie
24 $.removeCookie("listmode");
25
26 $listentries.removeClass("listmode");
27 $listmode.removeClass("tablemode");
28 $listmode.addClass("listmode");
29 }
30 else {
31 // Cookie
32 $.cookie("listmode", 1, {expires: 365});
33
34 $listentries.addClass("listmode");
35 $listmode.removeClass("listmode");
36 $listmode.addClass("tablemode");
37 }
38
39 });
40
41 /* ==========================================================================
42 Cookie listmode
43 ========================================================================== */
44
45 if ( $.cookie("listmode") == 1 ) {
46 $listentries.addClass("listmode");
47 $listmode.removeClass("listmode");
48 $listmode.addClass("tablemode");
49 }
50
51});
diff --git a/app/Resources/views/baggy/public/js/jquery.cookie.js b/app/Resources/views/baggy/public/js/jquery.cookie.js
new file mode 100755
index 00000000..92719000
--- /dev/null
+++ b/app/Resources/views/baggy/public/js/jquery.cookie.js
@@ -0,0 +1,117 @@
1/*!
2 * jQuery Cookie Plugin v1.4.0
3 * https://github.com/carhartl/jquery-cookie
4 *
5 * Copyright 2013 Klaus Hartl
6 * Released under the MIT license
7 */
8(function (factory) {
9 if (typeof define === 'function' && define.amd) {
10 // AMD. Register as anonymous module.
11 define(['jquery'], factory);
12 } else {
13 // Browser globals.
14 factory(jQuery);
15 }
16}(function ($) {
17
18 var pluses = /\+/g;
19
20 function encode(s) {
21 return config.raw ? s : encodeURIComponent(s);
22 }
23
24 function decode(s) {
25 return config.raw ? s : decodeURIComponent(s);
26 }
27
28 function stringifyCookieValue(value) {
29 return encode(config.json ? JSON.stringify(value) : String(value));
30 }
31
32 function parseCookieValue(s) {
33 if (s.indexOf('"') === 0) {
34 // This is a quoted cookie as according to RFC2068, unescape...
35 s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
36 }
37
38 try {
39 // Replace server-side written pluses with spaces.
40 // If we can't decode the cookie, ignore it, it's unusable.
41 s = decodeURIComponent(s.replace(pluses, ' '));
42 } catch(e) {
43 return;
44 }
45
46 try {
47 // If we can't parse the cookie, ignore it, it's unusable.
48 return config.json ? JSON.parse(s) : s;
49 } catch(e) {}
50 }
51
52 function read(s, converter) {
53 var value = config.raw ? s : parseCookieValue(s);
54 return $.isFunction(converter) ? converter(value) : value;
55 }
56
57 var config = $.cookie = function (key, value, options) {
58
59 // Write
60 if (value !== undefined && !$.isFunction(value)) {
61 options = $.extend({}, config.defaults, options);
62
63 if (typeof options.expires === 'number') {
64 var days = options.expires, t = options.expires = new Date();
65 t.setDate(t.getDate() + days);
66 }
67
68 return (document.cookie = [
69 encode(key), '=', stringifyCookieValue(value),
70 options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
71 options.path ? '; path=' + options.path : '',
72 options.domain ? '; domain=' + options.domain : '',
73 options.secure ? '; secure' : ''
74 ].join(''));
75 }
76
77 // Read
78
79 var result = key ? undefined : {};
80
81 // To prevent the for loop in the first place assign an empty array
82 // in case there are no cookies at all. Also prevents odd result when
83 // calling $.cookie().
84 var cookies = document.cookie ? document.cookie.split('; ') : [];
85
86 for (var i = 0, l = cookies.length; i < l; i++) {
87 var parts = cookies[i].split('=');
88 var name = decode(parts.shift());
89 var cookie = parts.join('=');
90
91 if (key && key === name) {
92 // If second argument (value) is a function it's a converter...
93 result = read(cookie, value);
94 break;
95 }
96
97 // Prevent storing a cookie that we couldn't decode.
98 if (!key && (cookie = read(cookie)) !== undefined) {
99 result[name] = cookie;
100 }
101 }
102
103 return result;
104 };
105
106 config.defaults = {};
107
108 $.removeCookie = function (key, options) {
109 if ($.cookie(key) !== undefined) {
110 // Must not alter options, thus extending a fresh object...
111 $.cookie(key, '', $.extend({}, options, { expires: -1 }));
112 return true;
113 }
114 return false;
115 };
116
117}));
diff --git a/app/Resources/views/baggy/public/js/restoreScroll.js b/app/Resources/views/baggy/public/js/restoreScroll.js
new file mode 100644
index 00000000..331c9e19
--- /dev/null
+++ b/app/Resources/views/baggy/public/js/restoreScroll.js
@@ -0,0 +1,25 @@
1function supportsLocalStorage() {
2 try {
3 return 'localStorage' in window && window['localStorage'] !== null;
4 } catch (e) {
5 return false;
6 }
7}
8
9function savePercent(id, percent) {
10 if (!supportsLocalStorage()) { return false; }
11 localStorage["poche.article." + id + ".percent"] = percent;
12 return true;
13}
14
15function retrievePercent(id) {
16 if (!supportsLocalStorage()) { return false; }
17
18 var bheight = $(document).height();
19 var percent = localStorage["poche.article." + id + ".percent"];
20 var scroll = bheight * percent;
21
22 $('html,body').animate({scrollTop: scroll}, 'fast');
23
24 return true;
25} \ No newline at end of file
diff --git a/app/Resources/views/baggy/screenshot.jpg b/app/Resources/views/baggy/screenshot.jpg
new file mode 100755
index 00000000..19cd24bb
--- /dev/null
+++ b/app/Resources/views/baggy/screenshot.jpg
Binary files differ
diff --git a/app/Resources/views/baggy/tags.twig b/app/Resources/views/baggy/tags.twig
new file mode 100755
index 00000000..65930eb2
--- /dev/null
+++ b/app/Resources/views/baggy/tags.twig
@@ -0,0 +1,13 @@
1{% extends "layout.twig" %}
2{% block title %}Tags{% endblock %}
3{% block menu %}
4{% include '_menu.twig' %}
5{% endblock %}
6{% block content %}
7<h2>{% trans "Tags" %}</h2>
8<ul class="list-tags">
9{% for tag in tags %}<li>{% if token != '' %}<a class="icon icon-rss" href="?feed&amp;type=tag&amp;user_id={{ user_id }}&amp;tag_id={{ tag.id }}&amp;token={{ token }}" target="_blank"><span>rss</span></a>{% endif %} <a href="./?view=tag&amp;id={{ tag.id }}">{{ tag.value }}</a> ({{ tag.entriescount }})
10</li>
11{% endfor %}
12</ul>
13{% endblock %}
diff --git a/app/Resources/views/baggy/theme.ini b/app/Resources/views/baggy/theme.ini
new file mode 100644
index 00000000..31665e18
--- /dev/null
+++ b/app/Resources/views/baggy/theme.ini
@@ -0,0 +1,3 @@
1name = Baggy
2description = Responsive black and white theme especially adapted to smartphones.
3requirements[] = default
diff --git a/app/Resources/views/baggy/view.twig b/app/Resources/views/baggy/view.twig
new file mode 100755
index 00000000..1afd9df6
--- /dev/null
+++ b/app/Resources/views/baggy/view.twig
@@ -0,0 +1,102 @@
1{% extends "layout.twig" %}
2{% block menu %}
3{% include '_menu.twig' %}
4{% endblock %}
5{% block title %}{{ entry.title|raw }} ({{ entry.url | e | getDomain }}){% endblock %}
6{% block content %}
7 {% include '_highlight.twig' %}
8 <div id="article_toolbar">
9 <ul class="links">
10 <li class="topPosF"><a href="#top" title="{% trans "Back to top" %}" class="tool top icon icon-arrow-up-thick"><span>{% trans "Back to top" %}</span></a></li>
11 <li><a href="{{ entry.url|e }}" target="_blank" title="{% trans "original" %} : {{ entry.title|e }}" class="tool link icon icon-link"><span>{{ entry.url | e | getDomain }}</span></a></li>
12 <li><a title="{% trans "Mark as read" %}" class="tool icon icon-check {% if entry.is_read == 0 %}archive-off{% else %}archive{% endif %}" href="javascript: void(null);" id="markAsRead"><span>{% trans "Toggle mark as read" %}</span></a></li>
13 <li><a title="{% trans "Favorite" %}" class="tool icon icon-star {% if entry.is_fav == 0 %}fav-off{% else %}fav{% endif %}" href="javascript: void(null);" id="setFav"><span>{% trans "Toggle favorite" %}</span></a></li>
14 <li><a title="{% trans "Delete" %}" class="tool delete icon icon-trash" href="./?action=delete&amp;id={{ entry.id|e }}"><span>{% trans "Delete" %}</span></a></li>
15 {% if constant('SHARE_TWITTER') == 1 %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="{% trans "Tweet" %}"><span>{% trans "Tweet" %}</span></a></li>{% endif %}
16 {% if constant('SHARE_MAIL') == 1 %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="{% trans "Email" %}"><span>{% trans "Email" %}</span></a></li>{% endif %}
17 {% if constant('SHARE_SHAARLI') == 1 %}<li><a href="{{ constant('SHAARLI_URL') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans "shaarli" %}"><span>{% trans "shaarli" %}</span></a></li>{% endif %}
18 {% if constant('SHARE_DIASPORA') == 1 %}<li><a href="{{ constant('DIASPORA_URL') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="{% trans "diaspora" %}"><span>{% trans "diaspora" %}</span></a></li>{% endif %}
19 {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}<li><a href="http://flattr.com/submit/auto?url={{ entry.url }}" class="tool flattr icon icon-flattr" target="_blank" title="{% trans "flattr" %}"><span>{% trans "flattr" %}</span></a></li>{% elseif flattr.status == constant('FLATTRED') %}<li><a href="{{ flattr.flattrItemURL }}" class="tool flattr icon icon-flattr" target="_blank" title="{% trans "flattr" %}"><span>{% trans "flattr" %}</span> ({{ flattr.numFlattrs }})</a></li>{% endif %}{% endif %}
20 {% if constant('CARROT') == 1 %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="{% trans "carrot" %}"><span>Carrot</span></a></li>{% endif %}
21 {% if constant('SHOW_PRINTLINK') == 1 %}<li><a title="{% trans "Print" %}" class="tool icon icon-print" href="javascript: window.print();"><span>{% trans "Print" %}</span></a></li>{% endif %}
22 {% if constant('EPUB') == 1 %}<li><a href="./?epub&amp;method=id&amp;value={{ entry.id|e }}" title="Generate ePub file">EPUB</a></li>{% endif %}
23 {% if constant('MOBI') == 1 %}<li><a href="./?mobi&amp;method=id&amp;value={{ entry.id|e }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
24 {% if constant('PDF') == 1 %}<li><a href="./?pdf&amp;method=id&amp;value={{ entry.id|e }}" title="Generate PDF file">PDF</a></li>{% endif %}
25 <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{% trans "Does this article appear wrong?" %}" class="tool bad-display icon icon-delete"><span>{% trans "Does this article appear wrong?" %}</span></a></li>
26 </ul>
27 </div>
28 <div id="article">
29 <header class="mbm">
30 <h1>{{ entry.title|raw }}</h1>
31 </header>
32 <aside class="tags">
33 tags: {% for tag in tags %}<a href="./?view=tag&amp;id={{ tag.id }}">{{ tag.value }}</a> {% endfor %}<a href="./?view=edit-tags&amp;id={{ entry.id|e }}" title="{% trans "Edit tags" %}">✎</a>
34 </aside>
35 <article>
36 {{ content | raw }}
37 </article>
38 </div>
39 <script src="{{ poche_url }}themes/_global/js/restoreScroll.js"></script>
40 <script type="text/javascript">
41 $(document).ready(function() {
42
43 // toggle read property of current article
44 $('#markAsRead').click(function(){
45 $("body").css("cursor", "wait");
46 $.ajax( { url: './?action=toggle_archive&id={{ entry.id|e }}' }).done(
47 function( data ) {
48 if ( data == '1' ) {
49 if ( $('#markAsRead').hasClass("archive-off") ) {
50 $('#markAsRead').removeClass("archive-off");
51 $('#markAsRead').addClass("archive");
52 }
53 else {
54 $('#markAsRead').removeClass("archive");
55 $('#markAsRead').addClass("archive-off");
56 }
57 }
58 else {
59 alert('Error! Pls check if you are logged in.');
60 }
61 });
62 $("body").css("cursor", "auto");
63 });
64
65 // toggle favorite property of current article
66 $('#setFav').click(function(){
67 $("body").css("cursor", "wait");
68 $.ajax( { url: './?action=toggle_fav&id={{ entry.id|e }}' }).done(
69 function( data ) {
70 if ( data == '1' ) {
71 if ( $('#setFav').hasClass("fav-off") ) {
72 $('#setFav').removeClass("fav-off");
73 $('#setFav').addClass("fav");
74 }
75 else {
76 $('#setFav').removeClass("fav");
77 $('#setFav').addClass("fav-off");
78 }
79 }
80 else {
81 alert('Error! Pls check if you are logged in.');
82 }
83 });
84 $("body").css("cursor", "auto");
85 });
86
87 $(window).scroll(function(e){
88 var scrollTop = $(window).scrollTop();
89 var docHeight = $(document).height();
90 var scrollPercent = (scrollTop) / (docHeight);
91 var scrollPercentRounded = Math.round(scrollPercent*100)/100;
92 savePercent({{ entry.id|e }}, scrollPercentRounded);
93 });
94
95 retrievePercent({{ entry.id|e }});
96
97 $(window).resize(function(){
98 retrievePercent({{ entry.id|e }});
99 });
100 });
101 </script>
102{% endblock %}
diff --git a/app/Resources/views/base.html.twig b/app/Resources/views/base.html.twig
new file mode 100644
index 00000000..bafd28d3
--- /dev/null
+++ b/app/Resources/views/base.html.twig
@@ -0,0 +1,13 @@
1<!DOCTYPE html>
2<html>
3 <head>
4 <meta charset="UTF-8" />
5 <title>{% block title %}Welcome!{% endblock %}</title>
6 {% block stylesheets %}{% endblock %}
7 <link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
8 </head>
9 <body>
10 {% block body %}{% endblock %}
11 {% block javascripts %}{% endblock %}
12 </body>
13</html>
diff --git a/app/Resources/views/dark/README.md b/app/Resources/views/dark/README.md
new file mode 100644
index 00000000..92077994
--- /dev/null
+++ b/app/Resources/views/dark/README.md
@@ -0,0 +1,3 @@
1# dark theme
2
3theme created by Nicolas LÅ“uillet aka nico_somb \ No newline at end of file
diff --git a/app/Resources/views/dark/public/css/style-dark.css b/app/Resources/views/dark/public/css/style-dark.css
new file mode 100644
index 00000000..41782c48
--- /dev/null
+++ b/app/Resources/views/dark/public/css/style-dark.css
@@ -0,0 +1,74 @@
1body {
2 color: #d4d4d4;
3 background-color: #262627;
4}
5
6a,
7a:hover,
8a:visited {
9 color: #d4d4d4;
10}
11
12a.back span {
13 background-image: url('../img/dark/left.png');
14}
15
16a.top span {
17 background-image: url('../img/dark/top.png');
18}
19
20a.fav span,
21a.fav-off span:hover {
22 background-image: url('../img/dark/star-on.png');
23}
24
25a.fav span:hover,
26a.fav-off span {
27 background-image: url('../img/dark/star-off.png');
28}
29
30a.archive span,
31a.archive-off span:hover {
32 background-image: url('../img/dark/checkmark-on.png');
33}
34
35a.archive span:hover,
36a.archive-off span {
37 background-image: url('../img/dark/checkmark-off.png');
38}
39
40a.twitter span {
41 background-image: url('../img/dark/twitter.png');
42}
43
44a.shaarli span {
45 background-image: url('../img/dark/shaarli.png');
46}
47
48a.flattr span {
49 background-image: url('../img/dark/flattr.png');
50}
51
52a.email span {
53 background-image: url('../img/dark/envelop.png');
54}
55
56a.delete span {
57 background-image: url('../img/dark/remove.png');
58}
59
60a.link span {
61 background-image: url('../img/dark/link.png');
62}
63
64a.bad-display span {
65 background-image: url('../img/dark/bad-display.png');
66}
67
68.pagination a {
69 color: #aaa;
70}
71
72#article_toolbar {
73 background: #262627;
74} \ No newline at end of file
diff --git a/app/Resources/views/dark/public/img/dark/backtotop.png b/app/Resources/views/dark/public/img/dark/backtotop.png
new file mode 100644
index 00000000..c885086d
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/backtotop.png
Binary files differ
diff --git a/app/Resources/views/dark/public/img/dark/bad-display.png b/app/Resources/views/dark/public/img/dark/bad-display.png
new file mode 100644
index 00000000..66ea2e16
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/bad-display.png
Binary files differ
diff --git a/app/Resources/views/dark/public/img/dark/checkmark-off.png b/app/Resources/views/dark/public/img/dark/checkmark-off.png
new file mode 100644
index 00000000..661ea997
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/checkmark-off.png
Binary files differ
diff --git a/app/Resources/views/dark/public/img/dark/checkmark-on.png b/app/Resources/views/dark/public/img/dark/checkmark-on.png
new file mode 100644
index 00000000..5ee8c8d3
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/checkmark-on.png
Binary files differ
diff --git a/app/Resources/views/dark/public/img/dark/down.png b/app/Resources/views/dark/public/img/dark/down.png
new file mode 100644
index 00000000..4150e17c
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/down.png
Binary files differ
diff --git a/app/Resources/views/dark/public/img/dark/envelop.png b/app/Resources/views/dark/public/img/dark/envelop.png
new file mode 100644
index 00000000..73d9b0b9
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/envelop.png
Binary files differ
diff --git a/app/Resources/views/dark/public/img/dark/flattr.png b/app/Resources/views/dark/public/img/dark/flattr.png
new file mode 100644
index 00000000..b457d080
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/flattr.png
Binary files differ
diff --git a/app/Resources/views/dark/public/img/dark/left.png b/app/Resources/views/dark/public/img/dark/left.png
new file mode 100644
index 00000000..c2f7a20e
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/left.png
Binary files differ
diff --git a/app/Resources/views/dark/public/img/dark/link.png b/app/Resources/views/dark/public/img/dark/link.png
new file mode 100644
index 00000000..a5b8d8d2
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/link.png
Binary files differ
diff --git a/app/Resources/views/dark/public/img/dark/remove.png b/app/Resources/views/dark/public/img/dark/remove.png
new file mode 100644
index 00000000..0c3dcfdf
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/remove.png
Binary files differ
diff --git a/app/Resources/views/dark/public/img/dark/rss.png b/app/Resources/views/dark/public/img/dark/rss.png
new file mode 100644
index 00000000..21bad1a1
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/rss.png
Binary files differ
diff --git a/app/Resources/views/dark/public/img/dark/shaarli.png b/app/Resources/views/dark/public/img/dark/shaarli.png
new file mode 100644
index 00000000..e68ac8b5
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/shaarli.png
Binary files differ
diff --git a/app/Resources/views/dark/public/img/dark/star-off.png b/app/Resources/views/dark/public/img/dark/star-off.png
new file mode 100644
index 00000000..8194bc2d
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/star-off.png
Binary files differ
diff --git a/app/Resources/views/dark/public/img/dark/star-on.png b/app/Resources/views/dark/public/img/dark/star-on.png
new file mode 100644
index 00000000..109c3aec
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/star-on.png
Binary files differ
diff --git a/app/Resources/views/dark/public/img/dark/top.png b/app/Resources/views/dark/public/img/dark/top.png
new file mode 100644
index 00000000..d137bd24
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/top.png
Binary files differ
diff --git a/app/Resources/views/dark/public/img/dark/twitter.png b/app/Resources/views/dark/public/img/dark/twitter.png
new file mode 100644
index 00000000..6ce8a4d9
--- /dev/null
+++ b/app/Resources/views/dark/public/img/dark/twitter.png
Binary files differ
diff --git a/app/Resources/views/dark/public/public b/app/Resources/views/dark/public/public
new file mode 120000
index 00000000..fd316b37
--- /dev/null
+++ b/app/Resources/views/dark/public/public
@@ -0,0 +1 @@
../../themes/default/public \ No newline at end of file
diff --git a/app/Resources/views/dark/screenshot.jpg b/app/Resources/views/dark/screenshot.jpg
new file mode 100644
index 00000000..daaad6c9
--- /dev/null
+++ b/app/Resources/views/dark/screenshot.jpg
Binary files differ
diff --git a/app/Resources/views/dark/theme.ini b/app/Resources/views/dark/theme.ini
new file mode 100644
index 00000000..4b020d36
--- /dev/null
+++ b/app/Resources/views/dark/theme.ini
@@ -0,0 +1,2 @@
1name = Dark
2requirements[] = default
diff --git a/app/Resources/views/default/_bookmarklet.twig b/app/Resources/views/default/_bookmarklet.twig
new file mode 100644
index 00000000..61996353
--- /dev/null
+++ b/app/Resources/views/default/_bookmarklet.twig
@@ -0,0 +1,3 @@
1 <script type="text/javascript">
2 top["bookmarklet-url@wallabag.org"]=""+"<!DOCTYPE html>"+"<html>"+"<head>"+"<title>bag it!</title>"+'<link rel="icon" href="{{poche_url}}tpl/img/favicon.ico" />'+"</head>"+"<body>"+"<script>"+"window.onload=function(){"+"window.setTimeout(function(){"+"history.back();"+"},250);"+"};"+"</scr"+"ipt>"+"</body>"+"</html>"
3 </script> \ No newline at end of file
diff --git a/app/Resources/views/default/_footer.twig b/app/Resources/views/default/_footer.twig
new file mode 100644
index 00000000..213a4aca
--- /dev/null
+++ b/app/Resources/views/default/_footer.twig
@@ -0,0 +1,4 @@
1 <footer class="w600p center mt3 mb3 smaller txtright">
2 <p>{% trans "powered by" %} <a href="http://wallabag.org">wallabag</a></p>
3 {% if constant('DEBUG_POCHE') == 1 %}<p><strong>{% trans "debug mode is on so cache is off." %} {% trans "your wallabag version:" %}{{constant('WALLABAG')}}. {% trans "storage:" %} {{constant('STORAGE')}}</strong></p>{% endif %}
4 </footer> \ No newline at end of file
diff --git a/app/Resources/views/default/_head.twig b/app/Resources/views/default/_head.twig
new file mode 100755
index 00000000..277e3833
--- /dev/null
+++ b/app/Resources/views/default/_head.twig
@@ -0,0 +1,36 @@
1 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-152.png" sizes="152x152">
2 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-152.png" sizes="152x152">
3
4 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-144.png" sizes="144x144">
5 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-144.png" sizes="144x144">
6
7 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-120.png" sizes="120x120">
8 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-120.png" sizes="120x120">
9
10 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-114.png" sizes="114x114">
11 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-114.png" sizes="114x114">
12
13 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-76.png" sizes="76x76">
14 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-76.png" sizes="76x76">
15
16 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-72.png" sizes="72x72">
17 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-72.png" sizes="72x72">
18
19 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-57.png" sizes="57x57">
20 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon-57.png" sizes="57x57">
21
22 <link rel="apple-touch-icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon.png">
23 <link rel="icon" type="image/png" href="{{ poche_url }}themes/_global/img/appicon/apple-touch-icon.png">
24
25 <link rel="shortcut icon" type="image/x-icon" href="{{ poche_url }}themes/_global/img/appicon/favicon.ico">
26
27 <link rel="stylesheet" href="{{ poche_url }}themes/default/css/knacss.css" media="all">
28 <link rel="stylesheet" href="{{ poche_url }}themes/default/css/style.css" media="all">
29 <link rel="stylesheet" href="{{ poche_url }}themes/{{ theme }}/css/style-{{ theme }}.css" media="all" title="{{ theme }} theme">
30 <link rel="stylesheet" href="{{ poche_url }}themes/default/css/messages.css" media="all">
31 <link rel="stylesheet" href="{{ poche_url }}themes/default/css/print.css" media="print">
32 <script src="{{ poche_url }}themes/_global/js/jquery-2.0.3.min.js"></script>
33 <script src="{{ poche_url }}themes/_global/js/autoClose.js"></script>
34 <script src="{{ poche_url }}themes/default/js/closeMessage.js"></script>
35 <script src="{{ poche_url }}themes/_global/js/saveLink.js"></script>
36 <script src="{{ poche_url }}themes/_global/js/popupForm.js"></script>
diff --git a/app/Resources/views/default/_highlight.twig b/app/Resources/views/default/_highlight.twig
new file mode 100755
index 00000000..cdb7c6bf
--- /dev/null
+++ b/app/Resources/views/default/_highlight.twig
@@ -0,0 +1,4 @@
1 {# include excelent highlight.js library for code highligting, see http://highlightjs.org/ #}
2<link rel="stylesheet" href="{{ poche_url }}themes/default/highlightjs/styles/github.css">
3<script src="{{ poche_url }}themes/default/highlightjs/highlight.pack.js"></script>
4<script>hljs.initHighlightingOnLoad();</script>
diff --git a/app/Resources/views/default/_import.twig b/app/Resources/views/default/_import.twig
new file mode 100755
index 00000000..c59b7a15
--- /dev/null
+++ b/app/Resources/views/default/_import.twig
@@ -0,0 +1,15 @@
1<script type="text/javascript">
2<!--
3 $(document).ready(function() {
4 $("body").css("cursor", "wait");
5
6 setTimeout(function(){
7 window.location = './?import';
8 }, {{ import.delay }} );
9 });
10//-->
11</script>
12<div class="messages warning">
13 <p>{% trans "Download required for " %} {{ import.recordsDownloadRequired }} {% trans "records" %}.</p>
14 <p>{% trans "Downloading next " %} {{ import.recordsUnderDownload }} {% trans "articles, please wait" %}...</p>
15</div>
diff --git a/app/Resources/views/default/_menu.twig b/app/Resources/views/default/_menu.twig
new file mode 100644
index 00000000..eedf84f1
--- /dev/null
+++ b/app/Resources/views/default/_menu.twig
@@ -0,0 +1,14 @@
1 <ul id="links">
2 <li><a href="./" {% if view == 'home' %}class="current"{% endif %}>{% trans "unread" %}</a></li>
3 <li><a href="./?view=fav" {% if view == 'fav' %}class="current"{% endif %}>{% trans "favorites" %}</a></li>
4 <li><a href="./?view=archive" {% if view == 'archive' %}class="current"{% endif %}>{% trans "archive" %}</a></li>
5 <li><a href="./?view=tags" {% if view == 'tags' %}class="current"{% endif %}>{% trans "tags" %}</a></li>
6 <li><a href="javascript: void(null);" id="bagit">{% trans "save a link" %}</a><span id="bagit-arrow"></span></li>
7 <li><a href="javascript: void(null);" id="search">{% trans "search" %}</a><span id="search-arrow"></span></li>
8 <li><a href="./?view=config" {% if view == 'config' %}class="current"{% endif %}>{% trans "config" %}</a></li>
9 <li><a href="./?view=about" {% if view == 'about' %}class="current"{% endif %}>{% trans "about" %}</a></li>
10 <li><a href="./?logout" title="{% trans "logout" %}">{% trans "logout" %}</a></li>
11 </ul>
12 {% include '_pocheit-form.twig' %}
13 {% include '_search-form.twig' %}
14
diff --git a/app/Resources/views/default/_messages.twig b/app/Resources/views/default/_messages.twig
new file mode 100644
index 00000000..679aa098
--- /dev/null
+++ b/app/Resources/views/default/_messages.twig
@@ -0,0 +1 @@
{{ messages | raw }} \ No newline at end of file
diff --git a/app/Resources/views/default/_pocheit-form.twig b/app/Resources/views/default/_pocheit-form.twig
new file mode 100755
index 00000000..8c982db0
--- /dev/null
+++ b/app/Resources/views/default/_pocheit-form.twig
@@ -0,0 +1,8 @@
1<div id="bagit-form" class="messages info">
2 <a href="javascript: void(null);" id="bagit-form-close">&nbsp;</a>
3 <form method="get" action="index.php" id="bagit-form-form">
4 <input required placeholder="example.com/article" class="addurl" id="plainurl" name="plainurl" type="url" />
5 <input type="submit" value="{% trans "save link!" %}" />
6 <div id="add-link-result"></div>
7 </form>
8</div>
diff --git a/app/Resources/views/default/_search-form.twig b/app/Resources/views/default/_search-form.twig
new file mode 100755
index 00000000..0cf6097a
--- /dev/null
+++ b/app/Resources/views/default/_search-form.twig
@@ -0,0 +1,9 @@
1<div id="search-form" class="messages info">
2<form method="get" action="index.php">
3 <p>
4 <input type="hidden" name="view" value="search"></input>
5 <label>{% trans "Search" %}</label> : <input type="text" required placeholder="{% trans "Enter your search here" %}" name="search" id="searchfield" />
6 <input type="submit" value="{% trans "Search" %} !"></input>
7 </p>
8</form>
9</div>
diff --git a/app/Resources/views/default/_sorting.twig b/app/Resources/views/default/_sorting.twig
new file mode 100755
index 00000000..3ce9b949
--- /dev/null
+++ b/app/Resources/views/default/_sorting.twig
@@ -0,0 +1,6 @@
1{% if entries|length > 1 %}
2 <ul id="sort">
3 <li><a href="./?sort=ia&amp;view={{ view }}{% if searchterm is defined %}&amp;search={{ searchterm }}{% endif %}&amp;id={{ id }}"><img src="{{ poche_url }}themes/{{ theme }}/img/{{ theme }}/top.png" alt="{% trans "by date asc" %}" title="{% trans "by date asc" %}" /></a> {% trans "by date" %} <a href="./?sort=id&amp;view={{ view }}{% if searchterm is defined %}&amp;search={{ searchterm }}{% endif %}&amp;id={{ id }}"><img src="{{ poche_url }}themes/{{ theme }}/img/{{ theme }}/down.png" alt="{% trans "by date desc" %}" title="{% trans "by date desc" %}" /></a></li>
4 <li><a href="./?sort=ta&amp;view={{ view }}{% if searchterm is defined %}&amp;search={{ searchterm }}{% endif %}&amp;id={{ id }}"><img src="{{ poche_url }}themes/{{ theme }}/img/{{ theme }}/top.png" alt="{% trans "by title asc" %}" title="{% trans "by title asc" %}" /></a> {% trans "by title" %} <a href="./?sort=td&amp;view={{ view }}{% if searchterm is defined %}&amp;search={{ searchterm }}{% endif %}&amp;id={{ id }}"><img src="{{ poche_url }}themes/{{ theme }}/img/{{ theme }}/down.png" alt="{% trans "by title desc" %}" title="{% trans "by title desc" %}" /></a></li>
5 </ul>
6{% endif %}
diff --git a/app/Resources/views/default/_top.twig b/app/Resources/views/default/_top.twig
new file mode 100755
index 00000000..45806f01
--- /dev/null
+++ b/app/Resources/views/default/_top.twig
@@ -0,0 +1,7 @@
1 <header class="w600p center mbm">
2 <h1>
3 {% if view == 'home' %}{% block logo %}<img width="100" height="100" src="{{ poche_url }}themes/baggy/img/logo-other_themes.png" alt="wallabag logo" />{% endblock %}
4 {% else %}<a href="./" title="{% trans "return home" %}" >{{ block('logo') }}</a>
5 {% endif %}
6 </h1>
7 </header>
diff --git a/app/Resources/views/default/about.twig b/app/Resources/views/default/about.twig
new file mode 100755
index 00000000..50ffd8ef
--- /dev/null
+++ b/app/Resources/views/default/about.twig
@@ -0,0 +1,74 @@
1{% extends "layout.twig" %}
2
3{% block title %}{% trans "About wallabag" %}{% endblock %}
4{% block menu %}
5{% include '_menu.twig' %}
6{% endblock %}
7{% block content %}
8 <h2>{% trans "About wallabag" %}</h2>
9
10 <dl>
11 <dt>{% trans "Project website" %}</dt>
12 <dd><a href="http://www.wallabag.org">http://www.wallabag.org</a></dd>
13
14 <dt>{% trans "Main developer" %}</dt>
15 <dd><a href="mailto:nicolas@loeuillet.org">Nicolas Lœuillet</a> — <a href="http://cdetc.fr">{% trans "website" %}</a></dd>
16
17 <dt>{% trans "Contributors:" %}</dt>
18 <dd><a href="https://github.com/wallabag/wallabag/graphs/contributors">{% trans "on Github" %}</a></dd>
19
20 <dt>{% trans "Bug reports" %}</dt>
21 <dd><a href="http://support.wallabag.org">{% trans "On our support website" %}</a> {% trans "or" %} <a href="https://github.com/wallabag/wallabag/issues">{% trans "on Github" %}</a></dd>
22
23 <dt>{% trans "License" %}</dt>
24 <dd><a href="http://en.wikipedia.org/wiki/MIT_License">MIT</a></dd>
25
26 <dt>{% trans "Version" %}</dt>
27 <dd>{{ constant('WALLABAG') }}</dd>
28 </dl>
29
30 <p>{% trans "wallabag is a read-it-later application: you can save a web page by keeping only content. Elements like ads or menus are deleted." %}</p>
31
32 <h2>{% trans "Helping wallabag" %}</h2>
33
34 <p>{% trans "wallabag is free and opensource. You can help us:" %}</p>
35
36 <dl>
37 <dt><a href="http://www.wallabag.org">{% trans "via Paypal" %}</a></dt>
38
39 <dt><a href="http://www.wallabag.org">{% trans "via Flattr" %}</a></dt>
40 </dl>
41
42 <h2>{% trans "Credits" %}</h2>
43 <dl>
44 <dt>PHP Readability</dt>
45 <dd><a href="https://bitbucket.org/fivefilters/php-readability">https://bitbucket.org/fivefilters/php-readability</a></dd>
46
47 <dt>Full Text RSS</dt>
48 <dd><a href="http://code.fivefilters.org/full-text-rss/src">http://code.fivefilters.org/full-text-rss/src</a></dd>
49
50 <dt>logo by Maylis Agniel</dt>
51 <dd><a href="https://github.com/wallabag/logo">https://github.com/wallabag/logo</a></dd>
52
53 <dt>icons</dt>
54 <dd><a href="http://icomoon.io">http://icomoon.io</a></dd>
55
56 <dt>PHP Simple HTML DOM Parser</dt>
57 <dd><a href="http://simplehtmldom.sourceforge.net/">http://simplehtmldom.sourceforge.net/</a></dd>
58
59 <dt>Session</dt>
60 <dd><a href="https://github.com/tontof/kriss_feed/blob/master/src/class/Session.php">https://github.com/tontof/kriss_feed/blob/master/src/class/Session.php</a></dd>
61
62 <dt>Twig</dt>
63 <dd><a href="http://twig.sensiolabs.org">http://twig.sensiolabs.org</a></dd>
64
65 <dt>Flash messages</dt>
66 <dd><a href="https://github.com/plasticbrain/PHP-Flash-Messages">https://github.com/plasticbrain/PHP-Flash-Messages</a></dd>
67
68 <dt>Pagination</dt>
69 <dd><a href="https://github.com/daveismyname/pagination">https://github.com/daveismyname/pagination</a></dd>
70
71 <dt>PHPePub</dt>
72 <dd><a href="https://github.com/Grandt/PHPePub/">https://github.com/Grandt/PHPePub/</a></dd>
73 </dl>
74{% endblock %}
diff --git a/app/Resources/views/default/config.twig b/app/Resources/views/default/config.twig
new file mode 100755
index 00000000..b7d91937
--- /dev/null
+++ b/app/Resources/views/default/config.twig
@@ -0,0 +1,188 @@
1{% extends "layout.twig" %}
2
3{% block title %}{% trans "config" %}{% endblock %}
4{% block menu %}
5{% include '_menu.twig' %}
6{% endblock %}
7{% block content %}
8 <h2>{% trans "Saving articles" %}</h2>
9 <p>{% trans "There are several ways to save an article:" %} {% trans "(<a href=\"http://doc.wallabag.org/en/User_documentation/Save_your_first_article\" target=\"_blank\" title=\"Documentation\">?</a>)" %}</p>
10 <p>
11 <form method="get" action="index.php">
12 <label class="addurl" for="config_plainurl">{% trans "By filling this field" %}:</label><br>
13 <input required placeholder="example.com/article" class="addurl" id="config_plainurl" name="plainurl" type="url" />
14 <input type="submit" value="{% trans "bag it!" %}" />
15 </form>
16 </p>
17 <h3>Browser Plugins</h3>
18 <ul>
19 <li><a href="https://addons.mozilla.org/firefox/addon/wallabag/" target="_blank">{% trans "Firefox Add-On" %}</a></li>
20 <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{% trans "Chrome Extension" %}</a></li>
21 </ul>
22 <h3>Mobile Apps</h3>
23 <ul>
24 <li>Android: <a href="https://f-droid.org/app/fr.gaulupeau.apps.InThePoche" target="_blank">{% trans "via F-Droid" %}</a> {% trans " or " %} <a href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" target="_blank">{% trans "via Google Play" %}</a></li>
25 <li>iOS: <a href="https://itunes.apple.com/app/wallabag/id828331015?mt=8" target="_blank">{% trans "download the application" %}</a></li>
26 <li>Windows Phone: <a href="http://www.windowsphone.com/en-us/store/app/wallabag/ff890514-348c-4d0b-9b43-153fff3f7450" target="_blank">{% trans "download the application" %}</a></li>
27 </ul>
28 <h3>{% trans "Bookmarklet" %}</h3>
29 <p>
30 {% trans "Drag &amp; drop this link to your bookmarks bar:" %} <a id="bookmarklet" ondragend="this.click();" href="javascript:if(top['bookmarklet-url@wallabag.org']){top['bookmarklet-url@wallabag.org'];}else{(function(){var%20url%20=%20location.href%20||%20url;window.open('{{ poche_url }}?action=add&url='%20+%20btoa(url),'_self');})();void(0);}">{% trans "bag it!" %}</a>
31 </p>
32
33 <h2>{% trans "Feeds" %}</h2>
34 {% if token == '' %}
35 <p>{% trans "Your feed token is currently empty and must first be generated to enable feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>." %}</p>
36 {% else %}
37 <ul>
38 <li><a href="?feed&amp;type=home&amp;user_id={{ user_id }}&amp;token={{ token }}" target="_blank">{% trans "Unread feed" %}</a></li>
39 <li><a href="?feed&amp;type=fav&amp;user_id={{ user_id }}&amp;token={{ token }}" target="_blank">{% trans "Favorites feed" %}</a></li>
40 <li><a href="?feed&amp;type=archive&amp;user_id={{ user_id }}&amp;token={{ token }}" target="_blank">{% trans "Archive feed" %}</a></li>
41 </ul>
42 <p class="more-info">
43 {% trans "Your token:" %} <strong>{{token}}</strong><br>
44 {% trans "Your user id:" %} <strong>{{user_id}}</strong><br>
45 {% trans "You can regenerate your token: <a href='?feed&amp;action=generate'>generate!</a>." %}
46 </p>
47 {% endif %}
48
49 <h2>{% trans "Change your theme" %}</h2>
50 <form method="post" action="?updatetheme" name="changethemeform">
51 <fieldset class="w500p inline">
52 <div class="row">
53 <label class="col w150p" for="theme">{% trans "Theme:" %}</label>
54 <select class="col" id="theme" name="theme">
55 {% for key, theme in themes %}
56 <option value="{{ key }}" {{ theme.current ? 'selected' : '' }}>{{ theme.name }}</option>
57 {% endfor %}
58 </select>
59 </div>
60 <div class="row mts txtcenter">
61 <button class="bouton" type="submit" tabindex="4">{% trans "Update" %}</button>
62 </div>
63 </fieldset>
64 <input type="hidden" name="returnurl" value="{{ referer }}">
65 <input type="hidden" name="token" value="{{ token }}">
66 </form>
67
68 <h2>{% trans "Change your language" %}</h2>
69 <form method="post" action="?updatelanguage" name="changelanguageform">
70 <fieldset class="w500p inline">
71 <div class="row">
72 <label class="col w150p" for="language">{% trans "Language:" %}</label>
73 <select class="col" id="language" name="language">
74 {% for language in languages %}
75 <option value="{{ language.value }}" {{ language.current ? 'selected' : '' }}>{{ language.name }}</option>
76 {% endfor %}
77 </select>
78 </div>
79 <div class="row mts txtcenter">
80 <button class="bouton" type="submit" tabindex="4">{% trans "Update" %}</button>
81 </div>
82 </fieldset>
83 <input type="hidden" name="returnurl" value="{{ referer }}">
84 <input type="hidden" name="token" value="{{ token }}">
85 </form>
86
87 <h2><a name="import"></a>{% trans "Import" %}</h2>
88 <p>{% trans "You can import your Pocket, Readability, Instapaper, Wallabag or any data in appropriate json or html format." %}</p>
89 <p>{% trans "Please select export file on your computer and press \"Import\" button below. Wallabag will parse your file, insert all URLs and start fetching of articles if required." %}</p>
90 <form method="post" action="?import" name="uploadfile" enctype="multipart/form-data">
91 <fieldset class="w500p">
92 <div class="row">
93 <label class="col w150p" for="file">{% trans "File:" %}</label>
94 <input class="col" type="file" id="file" name="file" tabindex="4" required="required">
95 </div>
96 <div class="row mts txtcenter">
97 <button class="bouton" type="submit" tabindex="4">{% trans "Import" %}</button>
98 </div>
99 </fieldset>
100 </form>
101 <p><a href="?import">{% trans "You can click here to fetch content for articles with no content." %}</a></p>
102 <p class="more-info">{% trans "Fetching process is controlled by two constants in your config file: IMPORT_LIMIT (how many articles are fetched at once) and IMPORT_DELAY (delay between fetch of next batch of articles)." %}</p>
103
104 <h2>{% trans "Export your wallabag data" %}</h2>
105 <p><a href="?export" target="_blank">{% trans "Export JSON" %}</a><br>
106 <span class="more-info">Data will be exported in a single JSON file.</span></p>
107
108 <h2>{% trans "Fancy an E-Book ?" %}</h2>
109 <p>{% trans "Click to get all your articles in one ebook :" %}
110 <ul>
111 <li><a href="./?epub&amp;method=all" title="Generate ePub file">ePub 3</a></li>
112 <li><a href="./?mobi&amp;method=all" title="Generate Mobi file">Mobi</a></li>
113 <li><a href="./?pdf&amp;method=all" title="Generate PDF file">PDF</a></li>
114 </ul>
115 </p>
116
117 <span class="more-info">{% trans "This can <b>take a while</b> and can <b>even fail</b> if you have too many articles, depending on your server configuration." %}</span></p>
118
119 <h2><a name="cache"></a>{% trans "Cache" %}</h2>
120 <p><a href="?empty-cache">{% trans "Delete Cache" %}</a><br>
121 <span class="more-info">Deleting the cache may help with display or other problems.</span></p>
122
123 {% if http_auth == 0 %}
124 <h2>{% trans "Change your password" %}</h2>
125 <form method="post" action="?config" name="loginform">
126 <fieldset class="w500p">
127 <div class="row">
128 <label class="col w150p" for="password">{% trans "New password:" %}</label>
129 <input class="col" type="password" id="password" name="password" placeholder="{% trans "Password" %}" tabindex="2">
130 </div>
131 <div class="row">
132 <label class="col w150p" for="password_repeat">{% trans "Repeat your new password:" %}</label>
133 <input class="col" type="password" id="password_repeat" name="password_repeat" placeholder="{% trans "Password" %}" tabindex="3">
134 </div>
135 <div class="row mts txtcenter">
136 <button class="bouton" type="submit" tabindex="4">{% trans "Update" %}</button>
137 </div>
138 </fieldset>
139 <input type="hidden" name="returnurl" value="{{ referer }}">
140 <input type="hidden" name="token" value="{{ token }}">
141 </form>
142 {% endif %}
143
144 <h2>{% trans 'Add user' %}</h2>
145 <form method="post" action="?newuser">
146 <fieldset class="w500p">
147 <div class="row">
148 <label class="col w150p" for="newusername">{% trans 'Login for new user' %}</label>
149 <input class="col" type="text" id="newusername" name="newusername" placeholder="{% trans 'Login' %}" required>
150 </div>
151 <div class="row">
152 <label class="col w150p" for="password4newuser">{% trans "Password for new user" %}</label>
153 <input class="col" type="password" id="password4newuser" name="password4newuser" placeholder="{% trans 'Password' %}" required>
154 </div>
155 <div class="row">
156 <label class="col w150p" for="newuseremail">{% trans 'Email for new user (not required)' %}</label>
157 <input class="col" type="email" id="newuseremail" name="newuseremail" placeholder="{% trans 'Email' %}">
158 </div>
159 <div class="row mts txtcenter">
160 <button type="submit">{% trans "Add user" %}</button>
161 </div>
162 </fieldset>
163 </form>
164
165 <h2>{% trans "Delete account" %}</h2>
166 {% if not only_user %}<form method="post" action="?deluser">
167 <p>{% trans "You can delete your account by entering your password and validating." %}<br /><b>{% trans "Be careful, data will be erased forever (that is a very long time)." %}</b></p>
168 <fieldset class="w500p">
169 <div class="row">
170 <label class="col w150p" for="password4deletinguser">{% trans "Type here your password" %}</label>
171 <input class="col" type="password" id="password4deletinguser" name="password4deletinguser" placeholder="{% trans "Password" %}">
172 </div>
173 <div class="row mts txtcenter">
174 <button type="submit">{% trans "Delete account" %}</button>
175 </div>
176 </form>
177 {% else %}<p>{% trans "You are the only user, you cannot delete your own account." %}</p>
178 <p>{% trans "To completely remove wallabag, delete the wallabag folder on your web server (and eventual databases)." %}</p>{% endif %}
179
180 <h2>{% trans "Upgrading wallabag" %}</h2>
181 <ul>
182 <li>{% trans "Installed version" %}: <strong>{{ constant('WALLABAG') }}</strong></li>
183 <li>{% trans "Latest stable version" %}: {{ prod }}. {% if compare_prod == -1 %}<strong><a href="http://wallabag.org/">{% trans "A more recent stable version is available." %}</a></strong>{% else %}{% trans "You are up to date." %}{% endif %} ({% trans "Last check:" %} {{ check_time_prod }})</li>
184 {% if constant('DEBUG_POCHE') == 1 %}<li>{% trans "Latest dev version" %}: {{ dev }}. {% if compare_dev == -1 %}<strong><a href="http://wallabag.org/">{% trans "A more recent development version is available." %}</a></strong>{% else %}{% trans "You are up to date." %}{% endif %} ({% trans "Last check:" %} {{ check_time_dev }}){% endif %}</li>
185 </ul>
186 <p class="more-info">{% trans "You can clear cache to check the latest release." %}</p>
187
188{% endblock %}
diff --git a/app/Resources/views/default/edit-tags.twig b/app/Resources/views/default/edit-tags.twig
new file mode 100755
index 00000000..c29427e0
--- /dev/null
+++ b/app/Resources/views/default/edit-tags.twig
@@ -0,0 +1,35 @@
1{% extends "layout.twig" %}
2{% block title %}edit tags{% endblock %}
3{% block menu %}
4{% include '_menu.twig' %}
5{% endblock %}
6{% block content %}
7
8<script src="{{ poche_url }}themes/_global/js/jquery-ui-1.10.4.custom.min.js"></script>
9<script src="{{ poche_url }}themes/_global/js/autoCompleteTags.js"></script>
10<link rel="stylesheet" href="{{ poche_url }}themes/_global/css/jquery-ui-1.10.4.custom.min.css" media="all">
11
12<div id="article">
13 <header class="mbm">
14 <h1>{{ entry.title|raw }}</h1>
15 </header>
16</div>
17
18{% if tags is empty %}
19{% trans "no tags" %}
20{% endif %}
21<ul>
22{% for tag in tags %}<li>{{ tag.value }} <a href="./?action=remove_tag&amp;tag_id={{ tag.id }}&amp;id={{ entry_id }}">✘</a></li>{% endfor %}
23</ul>
24<form method="post" action="./?action=add_tag" id="editTags">
25 <input type="hidden" name="entry_id" value="{{ entry_id }}" />
26 <label for="value">{% trans "Add tags:" %}</label>
27 <input type="text" placeholder="{% trans "interview" %}, {% trans "editorial" %}, {% trans "video" %}" id="value" name="value" required="required" />
28 <input type="submit" value="Tag" />
29 <p>{% trans "Start typing for auto complete." %}<br>
30 {% trans "You can enter multiple tags, separated by commas." %}</p>
31
32</form>
33<br>
34<a href="./?view=view&id={{ entry_id }}">&laquo; {% trans "return to article" %}</a>
35{% endblock %}
diff --git a/app/Resources/views/default/error.twig b/app/Resources/views/default/error.twig
new file mode 100644
index 00000000..528a0985
--- /dev/null
+++ b/app/Resources/views/default/error.twig
@@ -0,0 +1,14 @@
1{% extends "layout.twig" %}
2{% block title %}{% trans "plop" %}{% endblock %}
3{% block content %}
4 <h1>Errors</h1>
5 <ol>
6 {% for message in msg %}
7 <li>{{message}}</li>
8 {% endfor %}
9 </ol>
10 <p>Don't forget <a href="http://doc.wallabag.org/">the documentation</a>.</p>
11 <p>
12 {% trans "You can <a href='wallabag_compatibility_test.php'>check your configuration here</a>." %}
13 </p>
14{% endblock %}
diff --git a/app/Resources/views/default/export.twig b/app/Resources/views/default/export.twig
new file mode 100644
index 00000000..4adb9540
--- /dev/null
+++ b/app/Resources/views/default/export.twig
@@ -0,0 +1 @@
{{ export }} \ No newline at end of file
diff --git a/app/Resources/views/default/home.twig b/app/Resources/views/default/home.twig
new file mode 100755
index 00000000..b9000559
--- /dev/null
+++ b/app/Resources/views/default/home.twig
@@ -0,0 +1,82 @@
1{% extends "layout.twig" %}
2{% block title %}
3{% if view == 'fav' %}
4{% trans "favoris" %}
5{% elseif view == 'archive' %}
6{% trans "archive" %}
7{% else %}
8{% trans "unread" %}
9{% endif %}
10{% endblock %}
11{% block menu %}
12{% include '_menu.twig' %}
13{% endblock %}
14{% block precontent %}
15
16{% include '_sorting.twig' %}
17{% endblock %}
18{% block content %}
19
20 {% if includeImport %}
21 {% include '_import.twig' %}
22 {% endif %}
23
24 {% if tag %}
25 <h3>{% trans "Tag" %}: <b>{{ tag.value }}</b></h3>
26 {% endif %}
27
28 {% if entries is empty %}
29 <div class="messages warning"><p>{% trans "No articles found." %}</p></div>
30 {% else %}
31 {% block pager %}
32 {% if nb_results > 1 %}
33 <div class="results">
34 <div class="nb-results">{{ nb_results }} {% trans "results" %}{% if searchterm is defined %}{% trans " found for « " %} {{ searchterm }} »{% endif %}</div>
35 {{ page_links | raw }}
36 </div>
37 {% elseif nb_results == 1 %}
38 {% if searchterm is defined %}
39 <div class="results">
40 <div class="nb-results">{% trans "Only one result found for " %} « {{ searchterm }} »</div>
41 </div>
42 {% endif %}
43 {% endif %}
44 {% endblock %}
45 {% for entry in entries %}
46 <div id="entry-{{ entry.id|e }}" class="entrie">
47 <h2><a href="index.php?view=view&amp;id={{ entry.id|e }}">{{ entry.title|raw }}</a></h2>
48 <ul class="tools">
49 <li><a title="{% trans "Toggle mark as read" %}" class="tool {% if entry.is_read == 0 %}archive-off{% else %}archive{% endif %}" href="./?action=toggle_archive&amp;id={{ entry.id|e }}"><span>{% trans "Toggle mark as read" %}</span></a></li>
50 <li><a title="{% trans "toggle favorite" %}" class="tool {% if entry.is_fav == 0 %}fav-off{% else %}fav{% endif %}" href="./?action=toggle_fav&amp;id={{ entry.id|e }}"><span>{% trans "toggle favorite" %}</span></a></li>
51 <li><a title="{% trans "delete" %}" class="tool delete" href="./?action=delete&amp;id={{ entry.id|e }}"><span>{% trans "delete" %}</span></a></li>
52 <li><a href="{{ entry.url|e }}" target="_blank" title="{% trans "original" %} : {{ entry.title|e }}" class="tool link"><span>{{ entry.url | e | getDomain }}</span></a></li>
53 <li><a target="_blank" title="{% trans "estimated reading time:" %} {{ entry.content| getReadingTime }} min" class="reading-time"><span>{{ entry.content| getReadingTime }} min</span></a></li>
54 </ul>
55 <p>{{ entry.content|striptags|slice(0, 300) }}...</p>
56 </div>
57 {% endfor %}
58
59 {{ block('pager') }}
60 {% if view == 'home' %}{% if nb_results > 1 %}<p><a title="{% trans "Mark all the entries as read" %}" href="./?action=archive_all">{% trans "Mark all the entries as read" %}</a></p>{% endif %}{% endif %}
61 {% if searchterm is defined %}<a title="{% trans "Tag these results as" %} {{ searchterm }}" href="./?action=add_tag&search={{ searchterm }}">{% trans "Tag these results as" %} {{ searchterm }}</a>{% endif %}<br />
62
63 {% if searchterm is defined %}<a title="{% trans "Delete results matching" %} {{ searchterm }}" href="./?action=delete&search={{ searchterm }}">{% trans "Delete results matching" %} {{ searchterm }}</a>{% endif %}<br />
64
65 {% if tag %}<a title="{% trans "Mark all articles from this tag as read" %}" href="./?action=toggle_archive&amp;tag_id={{ tag.id }}">{% trans "Mark all articles from this tag as read" %}</a><br />{% endif %}
66
67 {% if tag %}
68 {% if constant('EPUB') == 1 %}<a title="{% trans "Download the articles from this tag in an epub file" %}" href="./?epub&amp;method=tag&amp;value={{ tag.value }}">{% trans "Download as ePub3" %}</a>{% endif %}
69 {% if constant('MOBI') == 1 %}<a title="{% trans "Download the articles from this tag in a mobi file" %}" href="./?mobi&amp;method=tag&amp;value={{ tag.value }}">{% trans "Download as Mobi" %}</a>{% endif %}
70 {% if constant('PDF') == 1 %}<a title="{% trans "Download the articles from this tag in a pdf file" %}" href="./?pdf&amp;method=tag&amp;value={{ tag.value }}">{% trans "Download as PDF" %}</a>{% endif %}
71 {% elseif searchterm is defined %}
72 {% if constant('EPUB') == 1 %}<a title="{% trans "Download the articles from this search in an epub" %}" href="./?epub&amp;method=search&amp;value={{ searchterm }}">{% trans "Download as ePub3" %}</a>{% endif %}
73 {% if constant('MOBI') == 1 %}<a title="{% trans "Download the articles from this search in a mobi file" %}" href="./?mobi&amp;method=search&amp;value={{ searchterm }}">{% trans "Download as Mobi" %}</a>{% endif %}
74 {% if constant('PDF') == 1 %}<a title="{% trans "Download the articles from this search in a pdf file" %}" href="./?pdf&amp;method=search&amp;value={{ searchterm }}">{% trans "Download as PDF" %}</a>{% endif %}
75 {% else %}
76 {% if constant('EPUB') == 1 %}<a title="{% trans "Download the articles from this category in an epub" %}" href="./?epub&amp;method=category&amp;value={{ view }}">{% trans "Download as ePub3" %}</a>{% endif %}
77 {% if constant('MOBI') == 1 %}<a title="{% trans "Download the articles from this category in a mobi file" %}" href="./?mobi&amp;method=category&amp;value={{ view }}">{% trans "Download as Mobi" %}</a>{% endif %}
78 {% if constant('PDF') == 1 %}<a title="{% trans "Download the articles from this category in a pdf file" %}" href="./?pdf&amp;method=category&amp;value={{ view }}">{% trans "Download as PDF" %}</a>{% endif %}
79 {% endif %}
80
81 {% endif %}
82{% endblock %}
diff --git a/app/Resources/views/default/index.html.twig b/app/Resources/views/default/index.html.twig
new file mode 100644
index 00000000..ed261498
--- /dev/null
+++ b/app/Resources/views/default/index.html.twig
@@ -0,0 +1,5 @@
1{% extends 'base.html.twig' %}
2
3{% block body %}
4 Homepage.
5{% endblock %}
diff --git a/app/Resources/views/default/install.twig b/app/Resources/views/default/install.twig
new file mode 100644
index 00000000..c89c7e47
--- /dev/null
+++ b/app/Resources/views/default/install.twig
@@ -0,0 +1,28 @@
1{% extends "layout.twig" %}
2{% block title %}{% trans "installation" %}{% endblock %}
3{% block content %}
4 <form method="post" action="?install" name="loginform">
5 <fieldset class="w500p center">
6 <h2 class="mbs txtcenter">{% trans "install your wallabag" %}</h2>
7 <p>
8 {% trans "wallabag is still not installed. Please fill the below form to install it. Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation on wallabag website</a>." %}
9 </p>
10 <p class="row">
11 <label class="col w150p" for="login">{% trans "Login" %}</label>
12 <input class="col" type="text" id="login" name="login" placeholder="Login" tabindex="1" autofocus />
13 </p>
14 <p class="row">
15 <label class="col w150p" for="password">{% trans "Password" %}</label>
16 <input class="col" type="password" id="password" name="password" placeholder="Password" tabindex="2">
17 </p>
18 <p class="row">
19 <label class="col w150p" for="password_repeat">{% trans "Repeat your password" %}</label>
20 <input class="col" type="password" id="password_repeat" name="password_repeat" placeholder="Password" tabindex="3">
21 </p>
22 <p class="row mts txtcenter">
23 <button class="bouton" type="submit" tabindex="4">{% trans "Install" %}</button>
24 </p>
25 </fieldset>
26 <input type="hidden" name="token" value="{{ token }}">
27 </form>
28{% endblock %}
diff --git a/app/Resources/views/default/layout.twig b/app/Resources/views/default/layout.twig
new file mode 100644
index 00000000..dfebc3ea
--- /dev/null
+++ b/app/Resources/views/default/layout.twig
@@ -0,0 +1,31 @@
1<!DOCTYPE html>
2<!--[if lte IE 6]><html class="no-js ie6 ie67 ie678" lang="{{ lang }}"><![endif]-->
3<!--[if lte IE 7]><html class="no-js ie7 ie67 ie678" lang="{{ lang }}"><![endif]-->
4<!--[if IE 8]><html class="no-js ie8 ie678" lang="{{ lang }}"><![endif]-->
5<!--[if gt IE 8]><html class="no-js" lang="{{ lang }}"><![endif]-->
6<html lang="{{ lang }}">
7 <head>
8 <meta name="viewport" content="initial-scale=1.0">
9 <meta charset="utf-8">
10 <!--[if IE]>
11 <meta http-equiv="X-UA-Compatible" content="IE=10">
12 <![endif]-->
13 <title>{% block title %}{% endblock %} - wallabag</title>
14{% include '_head.twig' %}
15{% include '_bookmarklet.twig' %}
16 </head>
17 <body>
18 {% include '_top.twig' %}
19 <div id="main">
20 {% block menu %}{% endblock %}
21 {% block precontent %}{% endblock %}
22 {% block messages %}
23 {% include '_messages.twig' %}
24 {% endblock %}
25 <div id="content" class="w600p center">
26 {% block content %}{% endblock %}
27 </div>
28 </div>
29{% include '_footer.twig' %}
30 </body>
31</html> \ No newline at end of file
diff --git a/app/Resources/views/default/login.twig b/app/Resources/views/default/login.twig
new file mode 100644
index 00000000..b9f8b497
--- /dev/null
+++ b/app/Resources/views/default/login.twig
@@ -0,0 +1,34 @@
1{% extends "layout.twig" %}
2
3{% block title %}{% trans "login to your wallabag" %}{% endblock %}
4{% block content %}
5 {% if http_auth == 0 %}
6 <form method="post" action="?login" name="loginform">
7 <fieldset class="w500p center">
8 <h2 class="mbs txtcenter">{% trans "Login to wallabag" %}</h2>
9 {% if constant('MODE_DEMO') == 1 %}<p>{% trans "you are in demo mode, some features may be disabled." %}</p>{% endif %}
10 <div class="row">
11 <label class="col w150p" for="login">{% trans "Username" %}</label>
12 <input class="col" type="text" id="login" name="login" placeholder="Login" tabindex="1" autofocus {% if constant('MODE_DEMO') == 1 %}value="poche"{% endif %} />
13 </div>
14
15 <div class="row">
16 <label class="col w150p" for="password">{% trans "Password" %}</label>
17 <input class="col" type="password" id="password" name="password" placeholder="Password" tabindex="2" {% if constant('MODE_DEMO') == 1 %}value="poche"{% endif %} />
18 </div>
19 <div class="row">
20 <label class="col w150p" for="longlastingsession">{% trans "Stay signed in" %}</label>
21 <div class="col">
22 <input type="checkbox" id="longlastingsession" name="longlastingsession" tabindex="3">
23 <small class="inbl">{% trans "(Do not check on public computers)" %}</small>
24 </div>
25 </div>
26 <div class="row mts txtcenter">
27 <button class="bouton" type="submit" tabindex="4">{% trans "Sign in" %}</button>
28 </div>
29 </fieldset>
30 <input type="hidden" name="returnurl" value="{{ referer }}">
31 <input type="hidden" name="token" value="{{ token }}">
32 </form>
33 {% endif %}
34{% endblock %}
diff --git a/app/Resources/views/default/public/css/images/animated-overlay.gif b/app/Resources/views/default/public/css/images/animated-overlay.gif
new file mode 100644
index 00000000..d441f75e
--- /dev/null
+++ b/app/Resources/views/default/public/css/images/animated-overlay.gif
Binary files differ
diff --git a/app/Resources/views/default/public/css/images/ui-bg_flat_0_aaaaaa_40x100.png b/app/Resources/views/default/public/css/images/ui-bg_flat_0_aaaaaa_40x100.png
new file mode 100644
index 00000000..9f10cb65
--- /dev/null
+++ b/app/Resources/views/default/public/css/images/ui-bg_flat_0_aaaaaa_40x100.png
Binary files differ
diff --git a/app/Resources/views/default/public/css/images/ui-bg_flat_75_ffffff_40x100.png b/app/Resources/views/default/public/css/images/ui-bg_flat_75_ffffff_40x100.png
new file mode 100644
index 00000000..b89b914b
--- /dev/null
+++ b/app/Resources/views/default/public/css/images/ui-bg_flat_75_ffffff_40x100.png
Binary files differ
diff --git a/app/Resources/views/default/public/css/images/ui-bg_glass_55_fbf9ee_1x400.png b/app/Resources/views/default/public/css/images/ui-bg_glass_55_fbf9ee_1x400.png
new file mode 100644
index 00000000..780d3ffd
--- /dev/null
+++ b/app/Resources/views/default/public/css/images/ui-bg_glass_55_fbf9ee_1x400.png
Binary files differ
diff --git a/app/Resources/views/default/public/css/images/ui-bg_glass_65_ffffff_1x400.png b/app/Resources/views/default/public/css/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 00000000..da53255b
--- /dev/null
+++ b/app/Resources/views/default/public/css/images/ui-bg_glass_65_ffffff_1x400.png
Binary files differ
diff --git a/app/Resources/views/default/public/css/images/ui-bg_glass_75_dadada_1x400.png b/app/Resources/views/default/public/css/images/ui-bg_glass_75_dadada_1x400.png
new file mode 100644
index 00000000..f6306608
--- /dev/null
+++ b/app/Resources/views/default/public/css/images/ui-bg_glass_75_dadada_1x400.png
Binary files differ
diff --git a/app/Resources/views/default/public/css/images/ui-bg_glass_75_e6e6e6_1x400.png b/app/Resources/views/default/public/css/images/ui-bg_glass_75_e6e6e6_1x400.png
new file mode 100644
index 00000000..7d347065
--- /dev/null
+++ b/app/Resources/views/default/public/css/images/ui-bg_glass_75_e6e6e6_1x400.png
Binary files differ
diff --git a/app/Resources/views/default/public/css/images/ui-bg_glass_95_fef1ec_1x400.png b/app/Resources/views/default/public/css/images/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100644
index 00000000..533c4900
--- /dev/null
+++ b/app/Resources/views/default/public/css/images/ui-bg_glass_95_fef1ec_1x400.png
Binary files differ
diff --git a/app/Resources/views/default/public/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/app/Resources/views/default/public/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png
new file mode 100644
index 00000000..bf3a9481
--- /dev/null
+++ b/app/Resources/views/default/public/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png
Binary files differ
diff --git a/app/Resources/views/default/public/css/images/ui-icons_222222_256x240.png b/app/Resources/views/default/public/css/images/ui-icons_222222_256x240.png
new file mode 100644
index 00000000..c1cb1170
--- /dev/null
+++ b/app/Resources/views/default/public/css/images/ui-icons_222222_256x240.png
Binary files differ
diff --git a/app/Resources/views/default/public/css/images/ui-icons_2e83ff_256x240.png b/app/Resources/views/default/public/css/images/ui-icons_2e83ff_256x240.png
new file mode 100644
index 00000000..84b601bf
--- /dev/null
+++ b/app/Resources/views/default/public/css/images/ui-icons_2e83ff_256x240.png
Binary files differ
diff --git a/app/Resources/views/default/public/css/images/ui-icons_454545_256x240.png b/app/Resources/views/default/public/css/images/ui-icons_454545_256x240.png
new file mode 100644
index 00000000..b6db1acd
--- /dev/null
+++ b/app/Resources/views/default/public/css/images/ui-icons_454545_256x240.png
Binary files differ
diff --git a/app/Resources/views/default/public/css/images/ui-icons_888888_256x240.png b/app/Resources/views/default/public/css/images/ui-icons_888888_256x240.png
new file mode 100644
index 00000000..feea0e20
--- /dev/null
+++ b/app/Resources/views/default/public/css/images/ui-icons_888888_256x240.png
Binary files differ
diff --git a/app/Resources/views/default/public/css/images/ui-icons_cd0a0a_256x240.png b/app/Resources/views/default/public/css/images/ui-icons_cd0a0a_256x240.png
new file mode 100644
index 00000000..ed5b6b09
--- /dev/null
+++ b/app/Resources/views/default/public/css/images/ui-icons_cd0a0a_256x240.png
Binary files differ
diff --git a/app/Resources/views/default/public/css/knacss.css b/app/Resources/views/default/public/css/knacss.css
new file mode 100644
index 00000000..ca0696b7
--- /dev/null
+++ b/app/Resources/views/default/public/css/knacss.css
@@ -0,0 +1 @@
html{font-size:62.5%}body{font-family:"Century Gothic",helvetica,arial,sans-serif;font-size:1.4em;line-height:1.5;color:#000;background-color:#FFF}p,ul,ol,dl,blockquote,pre,td,th,label,textarea,caption,details,figure,hgroup{margin:.75em 0 0;font-size:1em;line-height:1.5}h1,.h1-like{margin:.8077em 0 0 0;font-size:1.8571em;font-weight:normal;line-height:1.6154em}h2,.h2-like{margin:.875em 0 0 0;font-size:1.7143em;font-weight:normal;line-height:1.75em}h3,.h3-like{margin:.9545em 0 0 0;font-size:1.5714em;font-weight:normal;line-height:1.909em}h4,.h4-like{margin:1.05em 0 0 0;font-size:1.4286em;font-weight:normal;line-height:1.05em}h5,.h5-like{margin:1.1667em 0 0 0;font-size:1.2857em;font-weight:normal;line-height:1.1667em}h6,.h6-like{margin:1.3125em 0 0 0;font-size:1.1429em;font-weight:normal;line-height:1.3125em}.smaller{font-size:.7143em}.small{font-size:.8571em}.big{font-size:1.1429em}.bigger{font-size:1.2857em}.biggest{font-size:1.4286em}html,body,textarea,figure,label{margin:0;padding:0}ul,ol{padding-left:2em}code,pre,samp,kbd{font-family:consolas,'DejaVu Sans Mono',courier,monospace;line-height:1em;white-space:pre-wrap}code,kbd,mark{border-radius:2px}em{font-style:italic}strong{font-weight:bold}kbd{padding:0 2px;border:1px solid #999}code{padding:2px 4px;color:#B11;background:rgba(0,0,0,.04)}mark{padding:2px 4px;background:#FF0}table{margin-bottom:1.5em}p:first-child,ul:first-child,ol:first-child,dl:first-child,blockquote:first-child,pre:first-child,h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child,h6:first-child{margin-top:0}li p,li ul,li ol{margin-top:0;margin-bottom:0}img,table,td,blockquote,code,pre,textarea,input,video{max-width:100%}div,textarea,table,td,th,code,pre,samp{word-wrap:break-word;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;-o-hyphens:auto;hyphens:auto}img{height:auto;vertical-align:middle}#map_canvas img,.gmnoprint img{max-width:none}a img{border:0}body > script{display:none !important}.skip-links{position:absolute}.skip-links a{position:absolute;left:-7000px;padding:.5em;text-decoration:none;color:#FFF;background:#000}.skip-links a:focus{position:static}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mod,.item{overflow:hidden}.row{display:table;width:100%;table-layout:fixed}.row > *,.col{display:table-cell;vertical-align:top}.clear,.line,.row{clear:both}.clearfix:after,.line:after,.mod:after{content:"";display:table;clear:both}.left{float:left}img.left{margin-right:1em}.right{float:right}img.right{margin-left:1em}img.left,img.right{margin-bottom:5px}.center{margin-right:auto;margin-left:auto}.txtleft{text-align:left}.txtright{text-align:right}.txtcenter{text-align:center}.inbl{display:inline-block;margin-right:-.25em;vertical-align:top}.w10{width:10%}.w20{width:20%}.w25{width:25%}.w30{width:30%}.w33{width:33.333%}.w40{width:40%}.w50{width:50%}.w60{width:60%}.w66{width:66.666%}.w70{width:70%}.w75{width:75%}.w80{width:80%}.w90{width:90%}.w100{width:100%}.w50p{width:50px}.w100p{width:100px}.w150p{width:150px}.w200p{width:200px}.w300p{width:300px}.w400p{width:400px}.w500p{width:500px}.w600p{width:600px}.w700p{width:700px}.w800p{width:800px}.w960p{width:960px}.mw960p{max-width:960px}.m-reset,.ma0{margin:0 !important}.p-reset,.pa0{padding:0 !important}.ma1,.mas{margin:10px !important}.ma2,.mam{margin:20px !important}.ma3,.mal{margin:30px !important}.pa1,.pas{padding:10px}.pa2,.pam{padding:20px}.pa3,.pal{padding:30px}.mt0,.mtn{margin-top:0 !important}.mt1,.mts{margin-top:10px !important}.mt2,.mtm{margin-top:20px !important}.mt3,.mtl{margin-top:30px !important}.mr0,.mrn{margin-right:0}.mr1,.mrs{margin-right:10px}.mr2,.mrm{margin-right:20px}.mr3,.mrl{margin-right:30px}.mb0,.mbn{margin-bottom:0 !important}.mb1,.mbs{margin-bottom:10px !important}.mb2,.mbm{margin-bottom:20px !important}.mb3,.mbl{margin-bottom:30px !important}.ml0,.mln{margin-left:0}.ml1,.mls{margin-left:10px}.ml2,.mlm{margin-left:20px}.ml3,.mll{margin-left:30px}.pt0,.ptn{padding-top:0}.pt1,.pts{padding-top:10px}.pt2,.ptm{padding-top:20px}.pt3,.ptl{padding-top:30px}.pr0,.prn{padding-right:0}.pr1,.prs{padding-right:10px}.pr2,.prm{padding-right:20px}.pr3,.prl{padding-right:30px}.pb0,.pbn{padding-bottom:0}.pb1,.pbs{padding-bottom:10px}.pb2,.pbm{padding-bottom:20px}.pb3,.pbl{padding-bottom:30px}.pl0,.pln{padding-left:0}.pl1,.pls{padding-left:10px}.pl2,.plm{padding-left:20px}.pl3,.pll{padding-left:30px}.visually-hidden{position:absolute;left:-7000px;overflow:hidden}[dir=rtl] .visually-hidden{right:-7000px;left:auto}.desktop-hidden{display:none}form,fieldset{border:none}input,button,select,label,.btn{font-family:inherit;vertical-align:middle}textarea{font-family:inherit;resize:vertical}.ie67 .clearfix,.ie67 .line,.ie67 .mod,.ie67 .row,.ie67 .col{zoom:1}.ie67 .btn,.ie67 .col,.ie67 .inbl{display:inline;zoom:1}.ie8 img{width:auto}@media print{p,blockquote{orphans:2;widows:2}blockquote,ul,ol{page-break-inside:avoid}h1,h2,h3,caption{page-break-after:avoid}}@media(orientation:landscape)and(max-device-width:768px){html,body{-webkit-text-size-adjust:100%}}[class*=grid] > *{float:left}[class*=grid] > * + *{margin-left:2%}.grid2 > *{width:49%}.grid3 > *{width:32%}.grid4 > *{width:23.5%}.grid5 > *{width:18.4%}.grid6 > *{width:15%}.grid2-1 > *:first-child,.grid1-2 > * + *{width:66%}.grid1-2 > *:first-child,.grid2-1 > * + *{width:32%}.grid1-3 > *:first-child,.grid3-1 > * + *{width:23.5%}.grid3-1 > *:first-child,.grid1-3 > * + *{width:74.5%}table,.table{max-width:100%;border-collapse:collapse;table-layout:fixed;vertical-align:top}table{width:100%}.table{display:table}caption{padding:10px;font-style:italic;color:#555}table{border:1px solid #CCC}tr > * + *{border-left:1px solid #CCC}th,td{padding:.3em .8em;border-bottom:1px solid #CCC;text-align:left}td{color:#333}.alternate{border:0}.alternate tbody{border:1px solid #CCC}.alternate thead tr > * + *{border-left:0}.alternate tbody tr > * + *{border-left:1px solid #CCC}.alternate-vert{border:0;border-right:1px solid #CCC}.alternate-vert tr >:first-child{border-bottom:0}.alternate-vert tr > * + *{border-top:1px solid #CCC}.striped tbody tr:nth-child(odd){background:#EEE;background:rgba(0,0,0,.05)}.striped-vert tr >:first-child{background:#EEE;background:rgba(0,0,0,.05)}.btn{display:inline-block}label{display:inline-block;vertical-align:middle;cursor:pointer}legend{border:0;white-space:normal}button,input,select{margin:0;font-family:"Century Gothic",helvetica,arial,sans-serif;font-size:100%;vertical-align:middle}textarea{min-height:5em;overflow:auto;font-size:1.75em;vertical-align:top;resize:vertical}}ol.styled{counter-reset:styled}ol.styled > li{counter-increment:styled;margin-bottom:.3em;list-style-type:none}ol.styled > li:before{content:counter(styled);display:inline-block;width:1em;height:1em;margin-right:.4em;padding:2px;border-radius:50%;text-align:center;text-indent:-.1em;font-size:.9em;line-height:1;vertical-align:middle;color:#FFF;background:rgba(0,0,0,.5)}@media(min-width:1280px){.large-hidden,.tablet-hidden{display:none !important}.large-visible{display:block !important}.large-no-float{float:none}.large-inbl{display:inline-block;float:none;vertical-align:top}.large-row{display:table;width:100% !important;table-layout:fixed}.large-col{display:table-cell;vertical-align:top}.large-w25{width:25% !important}.large-w33{width:33.3333% !important}.large-w50{width:50% !important}.large-w66{width:66.6666% !important}.large-w75{width:75% !important}.large-w100{display:block !important;float:none !important;clear:none !important;width:auto !important;margin-right:0 !important;margin-left:0 !important;border:0}.large-ma0,.large-man{margin:0 !important}}@media(max-width:768px){.w60,.w66,.w70,.w75,.w80,.w90,.w100,.w600p,.w700p,.w800p,.w960p,.mw960p,.medium-wauto{width:auto}.medium-hidden,.tablet-hidden{display:none !important}.medium-visible{display:block !important}.medium-no-float{float:none}.medium-inbl{display:inline-block;float:none;vertical-align:top}.medium-row{display:table;width:100% !important;table-layout:fixed}.medium-col{display:table-cell;vertical-align:top}.medium-w25{width:25% !important}.medium-w33{width:33.3333% !important}.medium-w50{width:50% !important}.medium-w66{width:66.6666% !important}.medium-w75{width:75% !important}.medium-w100{display:block !important;float:none !important;clear:none !important;width:auto !important;margin-right:0 !important;margin-left:0 !important;border:0}.medium-ma0,.medium-man{margin:0 !important}.grid4 > *{width:49% !important}.grid4 >:first-child + * + *{margin-left:0 !important}.grid6 > *{width:32% !important}.grid6 >:first-child + * + * + *{margin-left:0 !important}}@media(max-width:640px){.mod,.item,.col,fieldset{display:block !important;float:none !important;clear:none !important;width:auto !important;margin-right:0 !important;margin-left:0 !important;border:0}.w30,.w33,.w40,.w50,.w300p,.w400p,.w500p{width:auto}.row{display:block !important;width:100% !important}.tiny-hidden,.phone-hidden{display:none !important}.tiny-visible{display:block !important}.tiny-no-float{float:none}.tiny-inbl{display:inline-block;float:none;vertical-align:top}.tiny-row{display:table;width:100% !important;table-layout:fixed}.tiny-col{display:table-cell;vertical-align:top}th,td{display:block !important;width:auto !important;text-align:left !important}thead{display:none}.tiny-w25{width:25% !important}.tiny-w33{width:33.3333% !important}.tiny-w50{width:50% !important}.tiny-w66{width:66.6666% !important}.tiny-w75{width:75% !important}.tiny-w100{display:block !important;float:none !important;clear:none !important;width:auto !important;margin-right:0 !important;margin-left:0 !important;border:0}.tiny-ma0,.tiny-man{margin:0 !important}} \ No newline at end of file
diff --git a/app/Resources/views/default/public/css/messages.css b/app/Resources/views/default/public/css/messages.css
new file mode 100644
index 00000000..46b54795
--- /dev/null
+++ b/app/Resources/views/default/public/css/messages.css
@@ -0,0 +1,75 @@
1.messages {
2 display: block;
3 clear: both;
4 width: 400px;
5 margin: 10px auto 10px;
6 padding: 10px 0;
7 -moz-border-radius: 4px;
8 border-radius: 4px;
9}
10
11.messages a.closeMessage {
12 display: none;
13 float: right;
14 width: 16px;
15 height: 16px;
16 margin: -14px -8px 0 0;
17 background: url(../img/messages/close.png) no-repeat;
18}
19
20/*.messages:hover a.closeMessage { visibility:visible; }*/
21
22.messages p {
23 margin: 3px 0 3px 10px !important;
24 padding: 0 10px 0 23px !important;
25 font-size: 14px;
26 line-height: 16px;
27}
28
29.messages.error {
30 border: 1px solid #c42608;
31 color: #c00 !important;
32 background: #fff0ef;
33}
34
35.messages.error p {
36 color: #c00 !important;
37 background: url(../img/messages/cross.png) no-repeat 0 50%;
38}
39
40.messages.success {
41 border: 1px solid #6dc70c;
42 background: #e0fbcc;
43}
44
45.messages.success p {
46 color: #2b6301 !important;
47 background: url(../img/messages/tick.png) no-repeat 0 50%;
48}
49
50.messages.warning {
51 border: 1px solid #ebcd41;
52 color: #000;
53 background: #fffcd3;
54}
55
56.messages.warning p {
57 color: #5f4e01;
58 background: url(../img/messages/warning.png) no-repeat 0 50%;
59}
60
61.messages.information,
62.messages.info {
63 border: 1px solid #82aee7;
64 background: #dfebfb;
65}
66
67.messages.information p,
68.messages.info p {
69 color: #064393;
70 background: url(../img/messages/help.png) no-repeat 0 50%;
71}
72
73.messages.information a {
74 text-decoration: underline;
75}
diff --git a/app/Resources/views/default/public/css/print.css b/app/Resources/views/default/public/css/print.css
new file mode 100644
index 00000000..625478e1
--- /dev/null
+++ b/app/Resources/views/default/public/css/print.css
@@ -0,0 +1,53 @@
1/* ### Layout ### */
2
3body {
4 font-family: Serif;
5 background-color: #fff;
6}
7
8@page {
9 margin: 1cm;
10}
11
12img {
13 max-width: 100% !important;
14}
15
16/* ### Content ### */
17
18/* Hide useless blocks */
19body > header,
20#links,
21#sort,
22body > footer,
23.top_link,
24div.tools,
25header div,
26.messages,
27.entrie + .results,
28#article_toolbar {
29 display: none !important;
30}
31
32article {
33 border: none !important;
34}
35
36pre code {
37 line-height: 1.6em;
38}
39
40/* Add URL after links */
41.vieworiginal a:after {
42 content: " (" attr(href) ")";
43}
44
45/* Add explanation after abbr */
46abbr[title]:after {
47 content: " (" attr(title) ")";
48}
49
50/* Change border on current pager item */
51.pagination span.current {
52 border-style: dashed;
53}
diff --git a/app/Resources/views/default/public/css/style-default.css b/app/Resources/views/default/public/css/style-default.css
new file mode 100755
index 00000000..4406d48f
--- /dev/null
+++ b/app/Resources/views/default/public/css/style-default.css
@@ -0,0 +1,69 @@
1a.back span {
2 background-image: url('../img/default/left.png');
3}
4
5a.top span {
6 background-image: url('../img/default/top.png');
7}
8
9a.fav span,
10a.fav-off span:hover {
11 background-image: url('../img/default/star-on.png');
12}
13
14a.fav span:hover,
15a.fav-off span {
16 background-image: url('../img/default/star-off.png');
17}
18
19a.archive span,
20a.archive-off span:hover {
21 background-image: url('../img/default/checkmark-on.png');
22}
23
24a.archive span:hover,
25a.archive-off span {
26 background-image: url('../img/default/checkmark-off.png');
27}
28
29a.twitter span {
30 background-image: url('../img/default/twitter.png');
31}
32
33a.shaarli span {
34 background-image: url('../img/default/shaarli.png');
35}
36
37a.flattr span {
38 background-image: url('../img/default/flattr.png');
39}
40
41a.carrot span {
42 background-image: url('../../_global/img/icons/carrot-icon--black.png');
43 background-size: 16px 16px;
44}
45
46a.diaspora span {
47 background-image: url('../../_global/img/icons/diaspora-icon--black.png');
48 background-size: 16px 16px;
49}
50
51a.email span {
52 background-image: url('../img/default/envelop.png');
53}
54
55a.delete span {
56 background-image: url('../img/default/remove.png');
57}
58
59a.link span {
60 background-image: url('../img/default/link.png');
61}
62
63a.bad-display span {
64 background-image: url('../img/default/bad-display.png');
65}
66
67a.print span {
68 background-image: url('../img/default/print.png');
69}
diff --git a/app/Resources/views/default/public/css/style.css b/app/Resources/views/default/public/css/style.css
new file mode 100755
index 00000000..b25373d6
--- /dev/null
+++ b/app/Resources/views/default/public/css/style.css
@@ -0,0 +1,447 @@
1@font-face {
2 font-family: 'Roboto';
3 font-style: normal;
4 font-weight: 400;
5 src: local('Roboto Regular'), local('Roboto-Regular'), url(../fonts/Roboto.woff) format('woff');
6}
7
8
9
10body {
11 margin: 10px;
12 font-family: 'Roboto',Verdana,Geneva,sans-serif;
13 font-size: 16px;
14 color: #000;
15}
16
17header {
18 text-align: center;
19}
20
21header h1 {
22 font-size: 1.3em;
23}
24
25a,
26a:hover,
27a:visited {
28 color: #000;
29}
30
31.bouton {
32 border: none;
33 border-radius: 2px;
34 color: #fff;
35 background-color: #000;
36}
37
38.bouton:hover {
39 color: #f1f1f1;
40 background-color: #222;
41 cursor: pointer;
42}
43
44#main {
45 margin: 0 auto;
46}
47
48#main #links {
49 padding: 0;
50 text-align: center;
51 font-size: 0.9em;
52 list-style-type: none;
53}
54
55#main #links li {
56 display: inline;
57}
58
59#main #links li .current {
60 -webkit-border-radius: 2px;
61 border-radius: 2px;
62 color: #fff;
63 background-color: #000;
64}
65
66#main #sort {
67 padding: 0;
68 text-align: center;
69 list-style-type: none;
70 opacity: 0.5;
71}
72
73#main #sort li {
74 display: inline;
75 font-size: 0.9em;
76}
77
78#main #sort li + li {
79 margin-left: 10px;
80}
81
82#main #sort a {
83 padding: 2px 2px 0;
84 vertical-align: middle;
85}
86
87#main #sort img {
88 vertical-align: baseline;
89}
90#main #sort img:hover {
91 cursor: pointer;
92}
93
94#links a {
95 padding: 5px 10px;
96 text-decoration: none;
97}
98
99#links a:hover {
100 -webkit-border-radius: 2px;
101 border-radius: 2px;
102 color: #f1f1f1;
103 background-color: #040707;
104}
105
106/*** ***/
107
108/*** LINKS DISPLAY ***/
109
110#main .tool {
111 text-decoration: none;
112 cursor: pointer;
113}
114
115#main #content {
116 margin-top: 20px;
117}
118
119#main #content h2 {
120 text-decoration: none;
121 font-size: 1.3em;
122}
123
124#main #content .entrie {
125 margin-top: 15px;
126 padding-bottom: 15px;
127 border-bottom: 1px dashed #222;
128 overflow: hidden;
129}
130
131/* First entry */
132#main #content .results + .entrie {
133 clear: both;
134 margin-top: 0;
135}
136
137#main .entrie .tools {
138 float: right;
139 text-align: right;
140 list-style-type: none;
141 opacity: 0.5;
142}
143
144#main .entrie .tools .tool span {
145 display: inline-block;
146 width: 16px;
147 height: 16px;
148 /* Hide textual content */
149 overflow: hidden;
150 text-align: left;
151 text-indent: -9999px;
152}
153
154/*** ***/
155
156/*** ARTICLE PAGE ***/
157
158#article {
159 margin: 0 auto;
160}
161
162#article header {
163 border-bottom: 1px solid #222;
164}
165
166#article header {
167 text-align: left;
168}
169
170#article header h1 small {
171 float: right;
172 font-size: 0.6em;
173}
174
175#article header a {
176 text-decoration: none;
177}
178
179#article .tags {
180 font-size: 0.8em;
181 color: #888;
182 padding-bottom: 5px;
183}
184
185.backhome {
186 display: inline;
187}
188
189.results {
190 padding: 15px 0;
191 overflow: hidden;
192}
193
194.nb-results {
195 float: left;
196 font-size: 0.9em;
197 line-height: 24px;
198 vertical-align: middle;
199}
200
201#article_toolbar {
202 position: fixed;
203 bottom: 0;
204 left: 0;
205 width: 100%;
206 min-height: 50px;
207 padding-top: 17px;
208 text-align: center;
209 color: #fff;
210 opacity: 0.8;
211 background: #fff;
212}
213
214#article_toolbar li {
215 display: inline;
216 padding-right: 30px;
217}
218
219#article_toolbar .tool {
220 padding: 0 2px;
221}
222
223#article_toolbar .tool span {
224 display: inline-block;
225 width: 16px;
226 height: 16px;
227 /* Hide textual content */
228 overflow: hidden;
229 text-align: left;
230 text-indent: -9999px;
231}
232
233/*** ***/
234
235/*** PAGINATION ***/
236
237.pagination {
238 float: right;
239 text-align: right;
240}
241
242.pagination a {
243 height: 25px;
244 margin: 2px;
245 padding: 4px 8px;
246 border: 1px solid #d5d5d5;
247 text-decoration: none;
248 font-size: 11px;
249 font-weight: bold;
250 color: #333;
251}
252
253.pagination a:hover,
254.pagination a:active {
255 background-color: #efefef;
256}
257
258.pagination .current {
259 height: 25px;
260 margin: 2px;
261 padding: 4px 8px;
262 border: 1px solid #d5d5d5;
263 text-decoration: none;
264 font-size: 11px;
265 font-weight: bold;
266 color: #000;
267 background-color: #ccc;
268}
269
270.pagination .disabled {
271 display: none;
272}
273
274#bookmarklet {
275 padding: 5px;
276 border: 1px dashed #808080;
277 background: #fff;
278 cursor: move;
279}
280
281.top_link {
282 display: none;
283 z-index: 2000;
284 position: fixed;
285 right: 15px;
286 bottom: 15px;
287 padding: 20px;
288 -webkit-border-radius: 40px;
289 -moz-border-radius: 40px;
290 border-radius: 40px;
291 opacity: 0.9;
292 background: #ccc;
293}
294
295footer {
296 clear: both;
297}
298
299.reading-time {
300 font-size: 0.8em;
301}
302
303#inputform {
304 display: none;
305 margin-top: 5px;
306 margin-right: auto;
307 margin-left: auto;
308 padding-bottom: 5px;
309 max-width: 300px;
310 border-radius: 3px;
311 text-align: center;
312 color: #fff;
313 opacity: 0.8;
314 background-color: rgba(0,0,0,0.9);
315}
316
317a.back span,
318a.top span,
319a.fav span,
320a.fav span:hover,
321a.fav-off span,
322a.fav-off span:hover,
323a.archive span,
324a.archive span:hover,
325a.archive-off span,
326a.archive-off span:hover,
327a.twitter span,
328a.shaarli span,
329a.flattr span,
330a.email span,
331a.delete span,
332a.link span,
333a.bad-display span,
334a.reading-time span,
335a.print span {
336 background-repeat: no-repeat;
337}
338
339.arrow-down {
340 width: 0px;
341 height: 0px;
342 border-style: solid;
343 border-width: 10px 10px 0 10px;
344 border-color: #000 transparent transparent transparent;
345
346 position: absolute;
347 margin-top: 1.5em;
348 margin-left: -30px;
349}
350
351.two-column {
352 display: block;
353 width: 50%;
354 paddig-right: 20px;
355 float: left;
356 vertical-align: top;
357}
358
359
360/* ==========================================================================
361 "save a link" popup div related styles
362 ========================================================================== */
363
364#bagit-form {
365 display: none;
366 padding-left: 30px;
367 width: 450px;
368
369}
370
371a#bagit-form-close {
372 color: #FFF;
373 display: inline-block;
374 float: right;
375 background: url("../img/messages/close.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0);
376 height: 16px;
377 margin: -14px -8px 0 0;
378 width: 16px;
379 text-decoration: none;
380}
381
382
383.add-to-wallabag-link-after {
384 background-color: #000;
385 color: #fff;
386 padding: 0 4px 1px 3px;
387 font-weight: bold;
388 font-size: 0.7em;
389 border-radius: 4px;
390}
391.add-to-wallabag-link-after:hover, .add-to-wallabag-link-after:active {
392 color: #fff;
393}
394.add-to-wallabag-link-after:visited {
395 color: #999;
396}
397a.add-to-wallabag-link-after {
398 visibility: hidden;
399 position: absolute;
400 opacity: 0;
401 transition-duration: 2s;
402 transition-timing-function: ease-out;
403}
404#article article a:hover + a.add-to-wallabag-link-after, a.add-to-wallabag-link-after:hover {
405 opacity: 1;
406 visibility: visible;
407 transition-duration: .3s;
408 transition-timing-function: ease-in;
409}
410a.add-to-wallabag-link-after:after {
411 content: "w";
412}
413
414
415#add-link-result {
416 display: inline;
417 padding-left: 10px;
418}
419
420/* ==========================================================================
421 "Search" popup div related styles
422 ========================================================================== */
423
424/* Search form message needs a little more width, depending on translations */
425#search-form {
426 width: 420px;
427}
428
429.opacity03 {
430 /*opacity: 0.3;*/
431}
432
433#readLeftPercent {
434 display: inline-block;
435 /* Show textual content */
436 overflow: visible;
437 text-align: left;
438 text-indent: 0;
439 color: black;
440 width: 50px;
441}
442
443pre code {
444 font-family: "Courier New", Courier, monospace;
445 border: 1px solid #ddd;
446 font-size: 0.96em;
447}
diff --git a/app/Resources/views/default/public/fonts/Roboto.woff b/app/Resources/views/default/public/fonts/Roboto.woff
new file mode 100644
index 00000000..1440b1be
--- /dev/null
+++ b/app/Resources/views/default/public/fonts/Roboto.woff
Binary files differ
diff --git a/app/Resources/views/default/public/highlightjs/highlight.pack.js b/app/Resources/views/default/public/highlightjs/highlight.pack.js
new file mode 100644
index 00000000..10a21c34
--- /dev/null
+++ b/app/Resources/views/default/public/highlightjs/highlight.pack.js
@@ -0,0 +1 @@
var hljs=new function(){function j(v){return v.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")}function t(v){return v.nodeName.toLowerCase()}function h(w,x){var v=w&&w.exec(x);return v&&v.index==0}function r(w){var v=(w.className+" "+(w.parentNode?w.parentNode.className:"")).split(/\s+/);v=v.map(function(x){return x.replace(/^lang(uage)?-/,"")});return v.filter(function(x){return i(x)||x=="no-highlight"})[0]}function o(x,y){var v={};for(var w in x){v[w]=x[w]}if(y){for(var w in y){v[w]=y[w]}}return v}function u(x){var v=[];(function w(y,z){for(var A=y.firstChild;A;A=A.nextSibling){if(A.nodeType==3){z+=A.nodeValue.length}else{if(t(A)=="br"){z+=1}else{if(A.nodeType==1){v.push({event:"start",offset:z,node:A});z=w(A,z);v.push({event:"stop",offset:z,node:A})}}}}return z})(x,0);return v}function q(w,y,C){var x=0;var F="";var z=[];function B(){if(!w.length||!y.length){return w.length?w:y}if(w[0].offset!=y[0].offset){return(w[0].offset<y[0].offset)?w:y}return y[0].event=="start"?w:y}function A(H){function G(I){return" "+I.nodeName+'="'+j(I.value)+'"'}F+="<"+t(H)+Array.prototype.map.call(H.attributes,G).join("")+">"}function E(G){F+="</"+t(G)+">"}function v(G){(G.event=="start"?A:E)(G.node)}while(w.length||y.length){var D=B();F+=j(C.substr(x,D[0].offset-x));x=D[0].offset;if(D==w){z.reverse().forEach(E);do{v(D.splice(0,1)[0]);D=B()}while(D==w&&D.length&&D[0].offset==x);z.reverse().forEach(A)}else{if(D[0].event=="start"){z.push(D[0].node)}else{z.pop()}v(D.splice(0,1)[0])}}return F+j(C.substr(x))}function m(y){function v(z){return(z&&z.source)||z}function w(A,z){return RegExp(v(A),"m"+(y.cI?"i":"")+(z?"g":""))}function x(D,C){if(D.compiled){return}D.compiled=true;D.k=D.k||D.bK;if(D.k){var z={};var E=function(G,F){if(y.cI){F=F.toLowerCase()}F.split(" ").forEach(function(H){var I=H.split("|");z[I[0]]=[G,I[1]?Number(I[1]):1]})};if(typeof D.k=="string"){E("keyword",D.k)}else{Object.keys(D.k).forEach(function(F){E(F,D.k[F])})}D.k=z}D.lR=w(D.l||/\b[A-Za-z0-9_]+\b/,true);if(C){if(D.bK){D.b="\\b("+D.bK.split(" ").join("|")+")\\b"}if(!D.b){D.b=/\B|\b/}D.bR=w(D.b);if(!D.e&&!D.eW){D.e=/\B|\b/}if(D.e){D.eR=w(D.e)}D.tE=v(D.e)||"";if(D.eW&&C.tE){D.tE+=(D.e?"|":"")+C.tE}}if(D.i){D.iR=w(D.i)}if(D.r===undefined){D.r=1}if(!D.c){D.c=[]}var B=[];D.c.forEach(function(F){if(F.v){F.v.forEach(function(G){B.push(o(F,G))})}else{B.push(F=="self"?D:F)}});D.c=B;D.c.forEach(function(F){x(F,D)});if(D.starts){x(D.starts,C)}var A=D.c.map(function(F){return F.bK?"\\.?("+F.b+")\\.?":F.b}).concat([D.tE,D.i]).map(v).filter(Boolean);D.t=A.length?w(A.join("|"),true):{exec:function(F){return null}};D.continuation={}}x(y)}function c(S,L,J,R){function v(U,V){for(var T=0;T<V.c.length;T++){if(h(V.c[T].bR,U)){return V.c[T]}}}function z(U,T){if(h(U.eR,T)){return U}if(U.eW){return z(U.parent,T)}}function A(T,U){return !J&&h(U.iR,T)}function E(V,T){var U=M.cI?T[0].toLowerCase():T[0];return V.k.hasOwnProperty(U)&&V.k[U]}function w(Z,X,W,V){var T=V?"":b.classPrefix,U='<span class="'+T,Y=W?"":"</span>";U+=Z+'">';return U+X+Y}function N(){if(!I.k){return j(C)}var T="";var W=0;I.lR.lastIndex=0;var U=I.lR.exec(C);while(U){T+=j(C.substr(W,U.index-W));var V=E(I,U);if(V){H+=V[1];T+=w(V[0],j(U[0]))}else{T+=j(U[0])}W=I.lR.lastIndex;U=I.lR.exec(C)}return T+j(C.substr(W))}function F(){if(I.sL&&!f[I.sL]){return j(C)}var T=I.sL?c(I.sL,C,true,I.continuation.top):e(C);if(I.r>0){H+=T.r}if(I.subLanguageMode=="continuous"){I.continuation.top=T.top}return w(T.language,T.value,false,true)}function Q(){return I.sL!==undefined?F():N()}function P(V,U){var T=V.cN?w(V.cN,"",true):"";if(V.rB){D+=T;C=""}else{if(V.eB){D+=j(U)+T;C=""}else{D+=T;C=U}}I=Object.create(V,{parent:{value:I}})}function G(T,X){C+=T;if(X===undefined){D+=Q();return 0}var V=v(X,I);if(V){D+=Q();P(V,X);return V.rB?0:X.length}var W=z(I,X);if(W){var U=I;if(!(U.rE||U.eE)){C+=X}D+=Q();do{if(I.cN){D+="</span>"}H+=I.r;I=I.parent}while(I!=W.parent);if(U.eE){D+=j(X)}C="";if(W.starts){P(W.starts,"")}return U.rE?0:X.length}if(A(X,I)){throw new Error('Illegal lexeme "'+X+'" for mode "'+(I.cN||"<unnamed>")+'"')}C+=X;return X.length||1}var M=i(S);if(!M){throw new Error('Unknown language: "'+S+'"')}m(M);var I=R||M;var D="";for(var K=I;K!=M;K=K.parent){if(K.cN){D+=w(K.cN,D,true)}}var C="";var H=0;try{var B,y,x=0;while(true){I.t.lastIndex=x;B=I.t.exec(L);if(!B){break}y=G(L.substr(x,B.index-x),B[0]);x=B.index+y}G(L.substr(x));for(var K=I;K.parent;K=K.parent){if(K.cN){D+="</span>"}}return{r:H,value:D,language:S,top:I}}catch(O){if(O.message.indexOf("Illegal")!=-1){return{r:0,value:j(L)}}else{throw O}}}function e(y,x){x=x||b.languages||Object.keys(f);var v={r:0,value:j(y)};var w=v;x.forEach(function(z){if(!i(z)){return}var A=c(z,y,false);A.language=z;if(A.r>w.r){w=A}if(A.r>v.r){w=v;v=A}});if(w.language){v.second_best=w}return v}function g(v){if(b.tabReplace){v=v.replace(/^((<[^>]+>|\t)+)/gm,function(w,z,y,x){return z.replace(/\t/g,b.tabReplace)})}if(b.useBR){v=v.replace(/\n/g,"<br>")}return v}function p(z){var y=b.useBR?z.innerHTML.replace(/\n/g,"").replace(/<br>|<br [^>]*>/g,"\n").replace(/<[^>]*>/g,""):z.textContent;var A=r(z);if(A=="no-highlight"){return}var v=A?c(A,y,true):e(y);var w=u(z);if(w.length){var x=document.createElementNS("http://www.w3.org/1999/xhtml","pre");x.innerHTML=v.value;v.value=q(w,u(x),y)}v.value=g(v.value);z.innerHTML=v.value;z.className+=" hljs "+(!A&&v.language||"");z.result={language:v.language,re:v.r};if(v.second_best){z.second_best={language:v.second_best.language,re:v.second_best.r}}}var b={classPrefix:"hljs-",tabReplace:null,useBR:false,languages:undefined};function s(v){b=o(b,v)}function l(){if(l.called){return}l.called=true;var v=document.querySelectorAll("pre code");Array.prototype.forEach.call(v,p)}function a(){addEventListener("DOMContentLoaded",l,false);addEventListener("load",l,false)}var f={};var n={};function d(v,x){var w=f[v]=x(this);if(w.aliases){w.aliases.forEach(function(y){n[y]=v})}}function k(){return Object.keys(f)}function i(v){return f[v]||f[n[v]]}this.highlight=c;this.highlightAuto=e;this.fixMarkup=g;this.highlightBlock=p;this.configure=s;this.initHighlighting=l;this.initHighlightingOnLoad=a;this.registerLanguage=d;this.listLanguages=k;this.getLanguage=i;this.inherit=o;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE]};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE]};this.PWM={b:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/};this.CLCM={cN:"comment",b:"//",e:"$",c:[this.PWM]};this.CBCM={cN:"comment",b:"/\\*",e:"\\*/",c:[this.PWM]};this.HCM={cN:"comment",b:"#",e:"$",c:[this.PWM]};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.CSSNM={cN:"number",b:this.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0};this.RM={cN:"regexp",b:/\//,e:/\/[gim]*/,i:/\n/,c:[this.BE,{b:/\[/,e:/\]/,r:0,c:[this.BE]}]};this.TM={cN:"title",b:this.IR,r:0};this.UTM={cN:"title",b:this.UIR,r:0}}();hljs.registerLanguage("bash",function(b){var a={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)\}/}]};var d={cN:"string",b:/"/,e:/"/,c:[b.BE,a,{cN:"variable",b:/\$\(/,e:/\)/,c:[b.BE]}]};var c={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for break continue while in do done exit return set declare case esac export exec",literal:"true false",built_in:"printf echo read cd pwd pushd popd dirs let eval unset typeset readonly getopts source shopt caller type hash bind help sudo",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:true,c:[b.inherit(b.TM,{b:/\w[\w\d_]*/})],r:0},b.HCM,b.NM,d,c,a]}});hljs.registerLanguage("cs",function(b){var a="abstract as base bool break byte case catch char checked const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async await ascending descending from get group into join let orderby partial select set value var where yield";return{aliases:["csharp"],k:a,i:/::/,c:[{cN:"comment",b:"///",e:"$",rB:true,c:[{cN:"xmlDocTag",v:[{b:"///",r:0},{b:"<!--|-->"},{b:"</?",e:">"}]}]},b.CLCM,b.CBCM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line region endregion pragma checksum"},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},b.ASM,b.QSM,b.CNM,{bK:"protected public private internal",e:/[{;=]/,k:a,c:[{bK:"class namespace interface",starts:{c:[b.TM]}},{b:b.IR+"\\s*\\(",rB:true,c:[b.TM]}]}]}});hljs.registerLanguage("ruby",function(f){var j="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?";var i="and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor";var b={cN:"yardoctag",b:"@[A-Za-z]+"};var c={cN:"value",b:"#<",e:">"};var k={cN:"comment",v:[{b:"#",e:"$",c:[b]},{b:"^\\=begin",e:"^\\=end",c:[b],r:10},{b:"^__END__",e:"\\n$"}]};var d={cN:"subst",b:"#\\{",e:"}",k:i};var e={cN:"string",c:[f.BE,d],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:"%[qw]?\\(",e:"\\)"},{b:"%[qw]?\\[",e:"\\]"},{b:"%[qw]?{",e:"}"},{b:"%[qw]?<",e:">"},{b:"%[qw]?/",e:"/"},{b:"%[qw]?%",e:"%"},{b:"%[qw]?-",e:"-"},{b:"%[qw]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/}]};var a={cN:"params",b:"\\(",e:"\\)",k:i};var h=[e,c,k,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[f.inherit(f.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+f.IR+"::)?"+f.IR}]},k]},{cN:"function",bK:"def",e:" |$|;",r:0,c:[f.inherit(f.TM,{b:j}),a,k]},{cN:"constant",b:"(::)?(\\b[A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:":",c:[e,{b:j}],r:0},{cN:"symbol",b:f.UIR+"(\\!|\\?)?:",r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"("+f.RSR+")\\s*",c:[c,k,{cN:"regexp",c:[f.BE,d],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}],r:0}];d.c=h;a.c=h;var g=[{r:1,cN:"output",b:"^\\s*=> ",e:"$",rB:true,c:[{cN:"status",b:"^\\s*=>"},{b:" ",e:"$",c:h}]},{r:1,cN:"input",b:"^[^ ][^=>]*>+ ",e:"$",rB:true,c:[{cN:"prompt",b:"^[^ ][^=>]*>+"},{b:" ",e:"$",c:h}]}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:i,c:g.concat(h)}});hljs.registerLanguage("diff",function(a){return{aliases:["patch"],c:[{cN:"chunk",r:10,v:[{b:/^\@\@ +\-\d+,\d+ +\+\d+,\d+ +\@\@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"header",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\-\-\-/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+\+\+/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}});hljs.registerLanguage("javascript",function(a){return{aliases:["js"],k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document"},c:[{cN:"pi",b:/^\s*('|")use strict('|")/,r:10},a.ASM,a.QSM,a.CLCM,a.CBCM,a.CNM,{b:"("+a.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[a.CLCM,a.CBCM,a.RM,{b:/</,e:/>;/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:true,c:[a.inherit(a.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,c:[a.CLCM,a.CBCM],i:/["'\(]/}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+a.IR,r:0}]}});hljs.registerLanguage("xml",function(a){var c="[A-Za-z0-9\\._:-]+";var d={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php",subLanguageMode:"continuous"};var b={eW:true,i:/</,r:0,c:[d,{cN:"attribute",b:c,r:0},{b:"=",r:0,c:[{cN:"value",v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s\/>]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xsl","plist"],cI:true,c:[{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"<!--",e:"-->",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[b],starts:{e:"</style>",rE:true,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[b],starts:{e:"<\/script>",rE:true,sL:"javascript"}},{b:"<%",e:"%>",sL:"vbscript"},d,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:"[^ /><]+",r:0},b]}]}});hljs.registerLanguage("markdown",function(a){return{aliases:["md","mkdown","mkd"],c:[{cN:"header",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"`.+?`"},{b:"^( {4}|\t)",e:"$",r:0}]},{cN:"horizontal_rule",b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].+?[\\)\\]]",rB:true,c:[{cN:"link_label",b:"\\[",e:"\\]",eB:true,rE:true,r:0},{cN:"link_url",b:"\\]\\(",e:"\\)",eB:true,eE:true},{cN:"link_reference",b:"\\]\\[",e:"\\]",eB:true,eE:true}],r:10},{b:"^\\[.+\\]:",e:"$",rB:true,c:[{cN:"link_reference",b:"\\[",e:"\\]",eB:true,eE:true},{cN:"link_url",b:"\\s",e:"$"}]}]}});hljs.registerLanguage("css",function(a){var b="[a-zA-Z-][a-zA-Z0-9_-]*";var c={cN:"function",b:b+"\\(",rB:true,eE:true,e:"\\("};return{cI:true,i:"[=/|']",c:[a.CBCM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:true,eE:true,r:0,c:[c,a.ASM,a.QSM,a.CSSNM]}]},{cN:"tag",b:b,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[a.CBCM,{cN:"rule",b:"[^\\s]",rB:true,e:";",eW:true,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:true,i:"[^\\s]",starts:{cN:"value",eW:true,eE:true,c:[c,a.CSSNM,a.QSM,a.ASM,a.CBCM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]}]}]}});hljs.registerLanguage("http",function(a){return{i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:true,e:"$",c:[{cN:"string",b:" ",e:" ",eB:true,eE:true}]},{cN:"attribute",b:"^\\w",e:": ",eE:true,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:"",eW:true}}]}});hljs.registerLanguage("java",function(b){var a="false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws";return{aliases:["jsp"],k:a,i:/<\//,c:[{cN:"javadoc",b:"/\\*\\*",e:"\\*/",c:[{cN:"javadoctag",b:"(^|\\s)@[A-Za-z]+"}],r:10},b.CLCM,b.CBCM,b.ASM,b.QSM,{bK:"protected public private",e:/[{;=]/,k:a,c:[{cN:"class",bK:"class interface",eW:true,eE:true,i:/[:"\[\]]/,c:[{bK:"extends implements",r:10},b.UTM]},{b:b.UIR+"\\s*\\(",rB:true,c:[b.UTM]}]},b.CNM,{cN:"annotation",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("php",function(b){var e={cN:"variable",b:"(\\$|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*"};var a={cN:"preprocessor",b:/<\?(php)?|\?>/};var c={cN:"string",c:[b.BE,a],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},b.inherit(b.ASM,{i:null}),b.inherit(b.QSM,{i:null})]};var d={v:[b.BNM,b.CNM]};return{aliases:["php3","php4","php5","php6"],cI:true,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[b.CLCM,b.HCM,{cN:"comment",b:"/\\*",e:"\\*/",c:[{cN:"phpdoc",b:"\\s@[A-Za-z]+"},a]},{cN:"comment",b:"__halt_compiler.+?;",eW:true,k:"__halt_compiler",l:b.UIR},{cN:"string",b:"<<<['\"]?\\w+['\"]?$",e:"^\\w+;",c:[b.BE]},a,e,{cN:"function",bK:"function",e:/[;{]/,eE:true,i:"\\$|\\[|%",c:[b.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",e,b.CBCM,c,d]}]},{cN:"class",bK:"class interface",e:"{",eE:true,i:/[:\(\$"]/,c:[{bK:"extends implements",r:10},b.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[b.UTM]},{bK:"use",e:";",c:[b.UTM]},{b:"=>"},c,d]}});hljs.registerLanguage("python",function(a){var f={cN:"prompt",b:/^(>>>|\.\.\.) /};var b={cN:"string",c:[a.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[f],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[f],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},a.ASM,a.QSM]};var d={cN:"number",r:0,v:[{b:a.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:a.CNR+"[lLjJ]?"}]};var e={cN:"params",b:/\(/,e:/\)/,c:["self",f,d,b]};var c={e:/:/,i:/[${=;\n]/,c:[a.UTM,e]};return{aliases:["py","gyp"],k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)/,c:[f,d,b,a.HCM,a.inherit(c,{cN:"function",bK:"def",r:10}),a.inherit(c,{cN:"class",bK:"class"}),{cN:"decorator",b:/@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("sql",function(a){var b={cN:"comment",b:"--",e:"$"};return{cI:true,i:/[<>]/,c:[{cN:"operator",bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate savepoint release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup",e:/;/,eW:true,k:{keyword:"abs absolute acos action add adddate addtime aes_decrypt aes_encrypt after aggregate all allocate alter analyze and any are as asc ascii asin assertion at atan atan2 atn2 authorization authors avg backup before begin benchmark between bin binlog bit_and bit_count bit_length bit_or bit_xor both by cache call cascade cascaded case cast catalog ceil ceiling chain change changed char_length character_length charindex charset check checksum checksum_agg choose close coalesce coercibility collate collation collationproperty column columns columns_updated commit compress concat concat_ws concurrent connect connection connection_id consistent constraint constraints continue contributors conv convert convert_tz corresponding cos cot count count_big crc32 create cross cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime data database databases datalength date_add date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts datetimeoffsetfromparts day dayname dayofmonth dayofweek dayofyear deallocate declare decode default deferrable deferred degrees delayed delete des_decrypt des_encrypt des_key_file desc describe descriptor diagnostics difference disconnect distinct distinctrow div do domain double drop dumpfile each else elt enclosed encode encrypt end end-exec engine engines eomonth errors escape escaped event eventdata events except exception exec execute exists exp explain export_set extended external extract fast fetch field fields find_in_set first first_value floor flush for force foreign format found found_rows from from_base64 from_days from_unixtime full function get get_format get_lock getdate getutcdate global go goto grant grants greatest group group_concat grouping grouping_id gtid_subset gtid_subtract handler having help hex high_priority hosts hour ident_current ident_incr ident_seed identified identity if ifnull ignore iif ilike immediate in index indicator inet6_aton inet6_ntoa inet_aton inet_ntoa infile initially inner innodb input insert install instr intersect into is is_free_lock is_ipv4 is_ipv4_compat is_ipv4_mapped is_not is_not_null is_used_lock isdate isnull isolation join key kill language last last_day last_insert_id last_value lcase lead leading least leaves left len lenght level like limit lines ln load load_file local localtime localtimestamp locate lock log log10 log2 logfile logs low_priority lower lpad ltrim make_set makedate maketime master master_pos_wait match matched max md5 medium merge microsecond mid min minute mod mode module month monthname mutex name_const names national natural nchar next no no_write_to_binlog not now nullif nvarchar oct octet_length of old_password on only open optimize option optionally or ord order outer outfile output pad parse partial partition password patindex percent_rank percentile_cont percentile_disc period_add period_diff pi plugin position pow power pragma precision prepare preserve primary prior privileges procedure procedure_analyze processlist profile profiles public publishingservername purge quarter query quick quote quotename radians rand read references regexp relative relaylog release release_lock rename repair repeat replace replicate reset restore restrict return returns reverse revoke right rlike rollback rollup round row row_count rows rpad rtrim savepoint schema scroll sec_to_time second section select serializable server session session_user set sha sha1 sha2 share show sign sin size slave sleep smalldatetimefromparts snapshot some soname soundex sounds_like space sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sql_variant_property sqlstate sqrt square start starting status std stddev stddev_pop stddev_samp stdev stdevp stop str str_to_date straight_join strcmp string stuff subdate substr substring subtime subtring_index sum switchoffset sysdate sysdatetime sysdatetimeoffset system_user sysutcdatetime table tables tablespace tan temporary terminated tertiary_weights then time time_format time_to_sec timediff timefromparts timestamp timestampadd timestampdiff timezone_hour timezone_minute to to_base64 to_days to_seconds todatetimeoffset trailing transaction translation trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse ucase uncompress uncompressed_length unhex unicode uninstall union unique unix_timestamp unknown unlock update upgrade upped upper usage use user user_resources using utc_date utc_time utc_timestamp uuid uuid_short validate_password_strength value values var var_pop var_samp variables variance varp version view warnings week weekday weekofyear weight_string when whenever where with work write xml xor year yearweek zon",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int integer interval number numeric real serial smallint varchar varying int8 serial8 text"},c:[{cN:"string",b:"'",e:"'",c:[a.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[a.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[a.BE]},a.CNM,a.CBCM,b]},a.CBCM,b]}});hljs.registerLanguage("ini",function(a){return{cI:true,i:/\S/,c:[{cN:"comment",b:";",e:"$"},{cN:"title",b:"^\\[",e:"\\]"},{cN:"setting",b:"^[a-z0-9\\[\\]_-]+[ \\t]*=[ \\t]*",e:"$",c:[{cN:"value",eW:true,k:"on off true false yes no",c:[a.QSM,a.NM],r:0}]}]}});hljs.registerLanguage("perl",function(c){var d="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when";var f={cN:"subst",b:"[$@]\\{",e:"\\}",k:d};var g={b:"->{",e:"}"};var a={cN:"variable",v:[{b:/\$\d/},{b:/[\$\%\@](\^\w\b|#\w+(\:\:\w+)*|{\w+}|\w+(\:\:\w*)*)/},{b:/[\$\%\@][^\s\w{]/,r:0}]};var e={cN:"comment",b:"^(__END__|__DATA__)",e:"\\n$",r:5};var h=[c.BE,f,a];var b=[a,c.HCM,e,{cN:"comment",b:"^\\=\\w",e:"\\=cut",eW:true},g,{cN:"string",c:h,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[c.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[c.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+c.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[c.HCM,e,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[c.BE],r:0}]},{cN:"sub",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",r:5},{cN:"operator",b:"-\\w\\b",r:0}];f.c=b;g.c=b;return{aliases:["pl"],k:d,c:b}});hljs.registerLanguage("objectivec",function(a){var d={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"NSString NSDictionary CGRect CGPoint UIButton UILabel UITextView UIWebView MKMapView NSView NSViewController NSWindow NSWindowController NSSet NSUUID NSIndexSet UISegmentedControl NSObject UITableViewDelegate UITableViewDataSource NSThread UIActivityIndicator UITabbar UIToolBar UIBarButtonItem UIImageView NSAutoreleasePool UITableView BOOL NSInteger CGFloat NSException NSLog NSMutableString NSMutableArray NSMutableDictionary NSURL NSIndexPath CGSize UITableViewCell UIView UIViewController UINavigationBar UINavigationController UITabBarController UIPopoverController UIPopoverControllerDelegate UIImage NSNumber UISearchBar NSFetchedResultsController NSFetchedResultsChangeType UIScrollView UIScrollViewDelegate UIEdgeInsets UIColor UIFont UIApplication NSNotFound NSNotificationCenter NSNotification UILocalNotification NSBundle NSFileManager NSTimeInterval NSDate NSCalendar NSUserDefaults UIWindow NSRange NSArray NSError NSURLRequest NSURLConnection UIInterfaceOrientation MPMoviePlayerController dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"};var c=/[a-zA-Z@][a-zA-Z0-9_]*/;var b="@interface @class @protocol @implementation";return{aliases:["m","mm","objc","obj-c"],k:d,l:c,i:"</",c:[a.CLCM,a.CBCM,a.CNM,a.QSM,{cN:"string",v:[{b:'@"',e:'"',i:"\\n",c:[a.BE]},{b:"'",e:"[^\\\\]'",i:"[^\\\\][^']"}]},{cN:"preprocessor",b:"#",e:"$",c:[{cN:"title",v:[{b:'"',e:'"'},{b:"<",e:">"}]}]},{cN:"class",b:"("+b.split(" ").join("|")+")\\b",e:"({|$)",eE:true,k:b,l:c,c:[a.UTM]},{cN:"variable",b:"\\."+a.UIR,r:0}]}});hljs.registerLanguage("coffeescript",function(c){var b={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",reserved:"case default function var void with const let enum export import native __hasProp __extends __slice __bind __indexOf",built_in:"npm require console print module global window document"};var a="[A-Za-z$_][0-9A-Za-z$_]*";var f=c.inherit(c.TM,{b:a});var e={cN:"subst",b:/#\{/,e:/}/,k:b};var d=[c.BNM,c.inherit(c.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[c.BE]},{b:/'/,e:/'/,c:[c.BE]},{b:/"""/,e:/"""/,c:[c.BE,e]},{b:/"/,e:/"/,c:[c.BE,e]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[e,c.HCM]},{b:"//[gim]*",r:0},{b:"/\\S(\\\\.|[^\\n])*?/[gim]*(?=\\s|\\W|$)"}]},{cN:"property",b:"@"+a},{b:"`",e:"`",eB:true,eE:true,sL:"javascript"}];e.c=d;return{aliases:["coffee","cson","iced"],k:b,c:d.concat([{cN:"comment",b:"###",e:"###"},c.HCM,{cN:"function",b:"("+a+"\\s*=\\s*)?(\\(.*\\))?\\s*\\B[-=]>",e:"[-=]>",rB:true,c:[f,{cN:"params",b:"\\(",rB:true,c:[{b:/\(/,e:/\)/,k:b,c:["self"].concat(d)}]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:true,i:/[:="\[\]]/,c:[f]},f]},{cN:"attribute",b:a+":",e:":",rB:true,eE:true,r:0}])}});hljs.registerLanguage("nginx",function(c){var b={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+c.UIR}]};var a={eW:true,l:"[a-z/_]+",k:{built_in:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[c.HCM,{cN:"string",c:[c.BE,b],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{cN:"url",b:"([a-z]+):/",e:"\\s",eW:true,eE:true},{cN:"regexp",c:[c.BE,b],v:[{b:"\\s\\^",e:"\\s|{|;",rE:true},{b:"~\\*?\\s+",e:"\\s|{|;",rE:true},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},b]};return{aliases:["nginxconf"],c:[c.HCM,{b:c.UIR+"\\s",e:";|{",rB:true,c:[{cN:"title",b:c.UIR,starts:a}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("json",function(a){var e={literal:"true false null"};var d=[a.QSM,a.CNM];var c={cN:"value",e:",",eW:true,eE:true,c:d,k:e};var b={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:true,eE:true,c:[a.BE],i:"\\n",starts:c}],i:"\\S"};var f={b:"\\[",e:"\\]",c:[a.inherit(c,{cN:null})],i:"\\S"};d.splice(d.length,0,b,f);return{c:d,k:e,i:"\\S"}});hljs.registerLanguage("apache",function(a){var b={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:true,c:[a.HCM,{cN:"tag",b:"</?",e:">"},{cN:"keyword",b:/\w+/,r:0,k:{common:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"sqbracket",b:"\\s\\[",e:"\\]$"},{cN:"cbracket",b:"[\\$%]\\{",e:"\\}",c:["self",b]},b,a.QSM]}}],i:/\S/}});hljs.registerLanguage("cpp",function(a){var b={keyword:"false int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long throw volatile static protected bool template mutable if public friend do return goto auto void enum else break new extern using true class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue wchar_t inline delete alignof char16_t char32_t constexpr decltype noexcept nullptr static_assert thread_local restrict _Bool complex _Complex _Imaginary",built_in:"std string cin cout cerr clog stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf"};return{aliases:["c","h","c++","h++"],k:b,i:"</",c:[a.CLCM,a.CBCM,a.QSM,{cN:"string",b:"'\\\\?.",e:"'",i:"."},{cN:"number",b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},a.CNM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line pragma",c:[{b:'include\\s*[<"]',e:'[>"]',k:"include",i:"\\n"},a.CLCM]},{cN:"stl_container",b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:b,c:["self"]},{b:a.IR+"::"}]}});hljs.registerLanguage("makefile",function(a){var b={cN:"variable",b:/\$\(/,e:/\)/,c:[a.BE]};return{aliases:["mk","mak"],c:[a.HCM,{b:/^\w+\s*\W*=/,rB:true,r:0,starts:{cN:"constant",e:/\s*\W*=/,eE:true,starts:{e:/$/,r:0,c:[b]}}},{cN:"title",b:/^[\w]+:\s*$/},{cN:"phony",b:/^\.PHONY:/,e:/$/,k:".PHONY",l:/[\.\w]+/},{b:/^\t+/,e:/$/,c:[a.QSM,b]}]}}); \ No newline at end of file
diff --git a/app/Resources/views/default/public/highlightjs/styles/default.css b/app/Resources/views/default/public/highlightjs/styles/default.css
new file mode 100644
index 00000000..e5bd2801
--- /dev/null
+++ b/app/Resources/views/default/public/highlightjs/styles/default.css
@@ -0,0 +1,152 @@
1/*
2
3Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
4
5*/
6
7.hljs {
8 display: block;
9 overflow-x: auto;
10 padding: 0.5em;
11 background: #f0f0f0;
12}
13
14.hljs,
15.hljs-subst,
16.hljs-tag .hljs-title,
17.lisp .hljs-title,
18.clojure .hljs-built_in,
19.nginx .hljs-title {
20 color: black;
21}
22
23.hljs-string,
24.hljs-title,
25.hljs-constant,
26.hljs-parent,
27.hljs-tag .hljs-value,
28.hljs-rules .hljs-value,
29.hljs-preprocessor,
30.hljs-pragma,
31.haml .hljs-symbol,
32.ruby .hljs-symbol,
33.ruby .hljs-symbol .hljs-string,
34.hljs-template_tag,
35.django .hljs-variable,
36.smalltalk .hljs-class,
37.hljs-addition,
38.hljs-flow,
39.hljs-stream,
40.bash .hljs-variable,
41.apache .hljs-tag,
42.apache .hljs-cbracket,
43.tex .hljs-command,
44.tex .hljs-special,
45.erlang_repl .hljs-function_or_atom,
46.asciidoc .hljs-header,
47.markdown .hljs-header,
48.coffeescript .hljs-attribute {
49 color: #800;
50}
51
52.smartquote,
53.hljs-comment,
54.hljs-annotation,
55.hljs-template_comment,
56.diff .hljs-header,
57.hljs-chunk,
58.asciidoc .hljs-blockquote,
59.markdown .hljs-blockquote {
60 color: #888;
61}
62
63.hljs-number,
64.hljs-date,
65.hljs-regexp,
66.hljs-literal,
67.hljs-hexcolor,
68.smalltalk .hljs-symbol,
69.smalltalk .hljs-char,
70.go .hljs-constant,
71.hljs-change,
72.lasso .hljs-variable,
73.makefile .hljs-variable,
74.asciidoc .hljs-bullet,
75.markdown .hljs-bullet,
76.asciidoc .hljs-link_url,
77.markdown .hljs-link_url {
78 color: #080;
79}
80
81.hljs-label,
82.hljs-javadoc,
83.ruby .hljs-string,
84.hljs-decorator,
85.hljs-filter .hljs-argument,
86.hljs-localvars,
87.hljs-array,
88.hljs-attr_selector,
89.hljs-important,
90.hljs-pseudo,
91.hljs-pi,
92.haml .hljs-bullet,
93.hljs-doctype,
94.hljs-deletion,
95.hljs-envvar,
96.hljs-shebang,
97.apache .hljs-sqbracket,
98.nginx .hljs-built_in,
99.tex .hljs-formula,
100.erlang_repl .hljs-reserved,
101.hljs-prompt,
102.asciidoc .hljs-link_label,
103.markdown .hljs-link_label,
104.vhdl .hljs-attribute,
105.clojure .hljs-attribute,
106.asciidoc .hljs-attribute,
107.lasso .hljs-attribute,
108.coffeescript .hljs-property,
109.hljs-phony {
110 color: #88f;
111}
112
113.hljs-keyword,
114.hljs-id,
115.hljs-title,
116.hljs-built_in,
117.css .hljs-tag,
118.hljs-javadoctag,
119.hljs-phpdoc,
120.hljs-yardoctag,
121.smalltalk .hljs-class,
122.hljs-winutils,
123.bash .hljs-variable,
124.apache .hljs-tag,
125.go .hljs-typename,
126.tex .hljs-command,
127.asciidoc .hljs-strong,
128.markdown .hljs-strong,
129.hljs-request,
130.hljs-status {
131 font-weight: bold;
132}
133
134.asciidoc .hljs-emphasis,
135.markdown .hljs-emphasis {
136 font-style: italic;
137}
138
139.nginx .hljs-built_in {
140 font-weight: normal;
141}
142
143.coffeescript .javascript,
144.javascript .xml,
145.lasso .markup,
146.tex .hljs-formula,
147.xml .javascript,
148.xml .vbscript,
149.xml .css,
150.xml .hljs-cdata {
151 opacity: 0.5;
152}
diff --git a/app/Resources/views/default/public/highlightjs/styles/github.css b/app/Resources/views/default/public/highlightjs/styles/github.css
new file mode 100644
index 00000000..47fc2651
--- /dev/null
+++ b/app/Resources/views/default/public/highlightjs/styles/github.css
@@ -0,0 +1,127 @@
1/*
2
3github.com style (c) Vasily Polovnyov <vast@whiteants.net>
4
5*/
6
7.hljs {
8 display: block;
9 overflow-x: auto;
10 padding: 0.5em;
11 color: #333;
12 background: #f8f8f8;
13}
14
15.hljs-comment,
16.hljs-template_comment,
17.diff .hljs-header,
18.hljs-javadoc {
19 color: #998;
20 font-style: italic;
21}
22
23.hljs-keyword,
24.css .rule .hljs-keyword,
25.hljs-winutils,
26.javascript .hljs-title,
27.nginx .hljs-title,
28.hljs-subst,
29.hljs-request,
30.hljs-status {
31 color: #333;
32 font-weight: bold;
33}
34
35.hljs-number,
36.hljs-hexcolor,
37.ruby .hljs-constant {
38 color: #099;
39}
40
41.hljs-string,
42.hljs-tag .hljs-value,
43.hljs-phpdoc,
44.tex .hljs-formula {
45 color: #d14;
46}
47
48.hljs-title,
49.hljs-id,
50.coffeescript .hljs-params,
51.scss .hljs-preprocessor {
52 color: #900;
53 font-weight: bold;
54}
55
56.javascript .hljs-title,
57.lisp .hljs-title,
58.clojure .hljs-title,
59.hljs-subst {
60 font-weight: normal;
61}
62
63.hljs-class .hljs-title,
64.haskell .hljs-type,
65.vhdl .hljs-literal,
66.tex .hljs-command {
67 color: #458;
68 font-weight: bold;
69}
70
71.hljs-tag,
72.hljs-tag .hljs-title,
73.hljs-rules .hljs-property,
74.django .hljs-tag .hljs-keyword {
75 color: #000080;
76 font-weight: normal;
77}
78
79.hljs-attribute,
80.hljs-variable,
81.lisp .hljs-body {
82 color: #008080;
83}
84
85.hljs-regexp {
86 color: #009926;
87}
88
89.hljs-symbol,
90.ruby .hljs-symbol .hljs-string,
91.lisp .hljs-keyword,
92.tex .hljs-special,
93.hljs-prompt {
94 color: #990073;
95}
96
97.hljs-built_in,
98.lisp .hljs-title,
99.clojure .hljs-built_in {
100 color: #0086b3;
101}
102
103.hljs-preprocessor,
104.hljs-pragma,
105.hljs-pi,
106.hljs-doctype,
107.hljs-shebang,
108.hljs-cdata {
109 color: #999;
110 font-weight: bold;
111}
112
113.hljs-deletion {
114 background: #fdd;
115}
116
117.hljs-addition {
118 background: #dfd;
119}
120
121.diff .hljs-change {
122 background: #0086b3;
123}
124
125.hljs-chunk {
126 color: #aaa;
127}
diff --git a/app/Resources/views/default/public/highlightjs/styles/googlecode.css b/app/Resources/views/default/public/highlightjs/styles/googlecode.css
new file mode 100644
index 00000000..fd237367
--- /dev/null
+++ b/app/Resources/views/default/public/highlightjs/styles/googlecode.css
@@ -0,0 +1,148 @@
1/*
2
3Google Code style (c) Aahan Krish <geekpanth3r@gmail.com>
4
5*/
6
7.hljs {
8 display: block;
9 overflow-x: auto;
10 padding: 0.5em;
11 background: white;
12 color: black;
13}
14
15.hljs-comment,
16.hljs-template_comment,
17.hljs-javadoc {
18 color: #800;
19}
20
21.hljs-keyword,
22.method,
23.hljs-list .hljs-title,
24.clojure .hljs-built_in,
25.nginx .hljs-title,
26.hljs-tag .hljs-title,
27.setting .hljs-value,
28.hljs-winutils,
29.tex .hljs-command,
30.http .hljs-title,
31.hljs-request,
32.hljs-status {
33 color: #008;
34}
35
36.hljs-envvar,
37.tex .hljs-special {
38 color: #660;
39}
40
41.hljs-string,
42.hljs-tag .hljs-value,
43.hljs-cdata,
44.hljs-filter .hljs-argument,
45.hljs-attr_selector,
46.apache .hljs-cbracket,
47.hljs-date,
48.hljs-regexp,
49.coffeescript .hljs-attribute {
50 color: #080;
51}
52
53.hljs-sub .hljs-identifier,
54.hljs-pi,
55.hljs-tag,
56.hljs-tag .hljs-keyword,
57.hljs-decorator,
58.ini .hljs-title,
59.hljs-shebang,
60.hljs-prompt,
61.hljs-hexcolor,
62.hljs-rules .hljs-value,
63.hljs-literal,
64.hljs-symbol,
65.ruby .hljs-symbol .hljs-string,
66.hljs-number,
67.css .hljs-function,
68.clojure .hljs-attribute {
69 color: #066;
70}
71
72.hljs-class .hljs-title,
73.haskell .hljs-type,
74.smalltalk .hljs-class,
75.hljs-javadoctag,
76.hljs-yardoctag,
77.hljs-phpdoc,
78.hljs-typename,
79.hljs-tag .hljs-attribute,
80.hljs-doctype,
81.hljs-class .hljs-id,
82.hljs-built_in,
83.setting,
84.hljs-params,
85.hljs-variable,
86.clojure .hljs-title {
87 color: #606;
88}
89
90.css .hljs-tag,
91.hljs-rules .hljs-property,
92.hljs-pseudo,
93.hljs-subst {
94 color: #000;
95}
96
97.css .hljs-class,
98.css .hljs-id {
99 color: #9b703f;
100}
101
102.hljs-value .hljs-important {
103 color: #ff7700;
104 font-weight: bold;
105}
106
107.hljs-rules .hljs-keyword {
108 color: #c5af75;
109}
110
111.hljs-annotation,
112.apache .hljs-sqbracket,
113.nginx .hljs-built_in {
114 color: #9b859d;
115}
116
117.hljs-preprocessor,
118.hljs-preprocessor *,
119.hljs-pragma {
120 color: #444;
121}
122
123.tex .hljs-formula {
124 background-color: #eee;
125 font-style: italic;
126}
127
128.diff .hljs-header,
129.hljs-chunk {
130 color: #808080;
131 font-weight: bold;
132}
133
134.diff .hljs-change {
135 background-color: #bccff9;
136}
137
138.hljs-addition {
139 background-color: #baeeba;
140}
141
142.hljs-deletion {
143 background-color: #ffc8bd;
144}
145
146.hljs-comment .hljs-yardoctag {
147 font-weight: bold;
148}
diff --git a/app/Resources/views/default/public/img/default/backtotop.png b/app/Resources/views/default/public/img/default/backtotop.png
new file mode 100644
index 00000000..051238ef
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/backtotop.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/bad-display.png b/app/Resources/views/default/public/img/default/bad-display.png
new file mode 100755
index 00000000..6866799f
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/bad-display.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/checkmark-off.png b/app/Resources/views/default/public/img/default/checkmark-off.png
new file mode 100644
index 00000000..3db5a06d
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/checkmark-off.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/checkmark-on.png b/app/Resources/views/default/public/img/default/checkmark-on.png
new file mode 100644
index 00000000..cd3abb2c
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/checkmark-on.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/down.png b/app/Resources/views/default/public/img/default/down.png
new file mode 100644
index 00000000..b9d536a7
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/down.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/envelop.png b/app/Resources/views/default/public/img/default/envelop.png
new file mode 100644
index 00000000..6be1c886
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/envelop.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/flattr.png b/app/Resources/views/default/public/img/default/flattr.png
new file mode 100755
index 00000000..0404aaea
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/flattr.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/left.png b/app/Resources/views/default/public/img/default/left.png
new file mode 100644
index 00000000..a0a53631
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/left.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/link.png b/app/Resources/views/default/public/img/default/link.png
new file mode 100755
index 00000000..db62819d
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/link.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/print.png b/app/Resources/views/default/public/img/default/print.png
new file mode 100755
index 00000000..83d6445b
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/print.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/remove.png b/app/Resources/views/default/public/img/default/remove.png
new file mode 100644
index 00000000..f8ad56a3
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/remove.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/rss.png b/app/Resources/views/default/public/img/default/rss.png
new file mode 100644
index 00000000..21bad1a1
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/rss.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/shaarli.png b/app/Resources/views/default/public/img/default/shaarli.png
new file mode 100644
index 00000000..1eb30f60
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/shaarli.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/star-off.png b/app/Resources/views/default/public/img/default/star-off.png
new file mode 100644
index 00000000..6a0133a7
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/star-off.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/star-on.png b/app/Resources/views/default/public/img/default/star-on.png
new file mode 100644
index 00000000..a9f96eaa
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/star-on.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/top.png b/app/Resources/views/default/public/img/default/top.png
new file mode 100644
index 00000000..954a8c0a
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/top.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/default/twitter.png b/app/Resources/views/default/public/img/default/twitter.png
new file mode 100644
index 00000000..cfcfe419
--- /dev/null
+++ b/app/Resources/views/default/public/img/default/twitter.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/logo.svg b/app/Resources/views/default/public/img/logo.svg
new file mode 100644
index 00000000..865da440
--- /dev/null
+++ b/app/Resources/views/default/public/img/logo.svg
@@ -0,0 +1,8 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="64" height="64">
3 <circle cx="32" cy="32" r="29.5" style="fill:#000" />
4 <path d="m 16,18 33,0 0,26 -16.5,6 -16.5,-6 z" fill="#fff" />
5 <rect width="9" height="2.5" x="17.5" y="24.5" fill="#000" />
6 <rect width="9" height="2.5" x="28" y="24.5" fill="#000" />
7 <rect width="9" height="2.5" x="38.5" y="24.5" fill="#000" />
8</svg>
diff --git a/app/Resources/views/default/public/img/messages/close.png b/app/Resources/views/default/public/img/messages/close.png
new file mode 100644
index 00000000..731aa018
--- /dev/null
+++ b/app/Resources/views/default/public/img/messages/close.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/messages/cross.png b/app/Resources/views/default/public/img/messages/cross.png
new file mode 100644
index 00000000..1514d51a
--- /dev/null
+++ b/app/Resources/views/default/public/img/messages/cross.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/messages/help.png b/app/Resources/views/default/public/img/messages/help.png
new file mode 100644
index 00000000..5c870176
--- /dev/null
+++ b/app/Resources/views/default/public/img/messages/help.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/messages/tick.png b/app/Resources/views/default/public/img/messages/tick.png
new file mode 100644
index 00000000..a9925a06
--- /dev/null
+++ b/app/Resources/views/default/public/img/messages/tick.png
Binary files differ
diff --git a/app/Resources/views/default/public/img/messages/warning.png b/app/Resources/views/default/public/img/messages/warning.png
new file mode 100644
index 00000000..628cf2da
--- /dev/null
+++ b/app/Resources/views/default/public/img/messages/warning.png
Binary files differ
diff --git a/app/Resources/views/default/public/js/closeMessage.js b/app/Resources/views/default/public/js/closeMessage.js
new file mode 100644
index 00000000..b57fe4a8
--- /dev/null
+++ b/app/Resources/views/default/public/js/closeMessage.js
@@ -0,0 +1,17 @@
1$(function(){
2 //---------------------------------------------------------------------------
3 // Show the close icon when the user hover over a message
4 //---------------------------------------------------------------------------
5 $('.messages').on('mouseenter', function(){
6 $(this).find('a.closeMessage').stop(true, true).show();
7 }).on('mouseleave', function(){
8 $(this).find('a.closeMessage').stop(true, true).hide();
9 });
10 //---------------------------------------------------------------------------
11 // Close the message box when the user clicks the close icon
12 //---------------------------------------------------------------------------
13 $('a.closeMessage').on('click', function(){
14 $(this).parents('div.messages').slideUp(300, function(){ $(this).remove(); });
15 return false;
16 });
17}); \ No newline at end of file
diff --git a/app/Resources/views/default/tags.twig b/app/Resources/views/default/tags.twig
new file mode 100755
index 00000000..e5be748e
--- /dev/null
+++ b/app/Resources/views/default/tags.twig
@@ -0,0 +1,18 @@
1{% extends "layout.twig" %}
2{% block title %}tags{% endblock %}
3{% block menu %}
4{% include '_menu.twig' %}
5{% endblock %}
6{% block content %}
7 <div class="two-column">
8 {% for tag in tags %}
9 <a href="./?view=tag&amp;id={{ tag.id }}">{{ tag.value }}</a> ({{ tag.entriescount }}) {% if token != '' %}<a href="?feed&amp;type=tag&amp;user_id={{ user_id }}&amp;tag_id={{ tag.id }}&amp;token={{ token }}" target="_blank"><img src="{{ poche_url }}themes/{{ theme }}/img/{{ theme }}/rss.png" /></a>{% endif %}
10 <br>
11
12 {% if loop.index == '%d'|format(loop.length/2 + 0.5) %}
13 </div><div class="two-column">
14 {% endif %}
15
16 {% endfor %}
17 </div>
18{% endblock %} \ No newline at end of file
diff --git a/app/Resources/views/default/theme.ini b/app/Resources/views/default/theme.ini
new file mode 100644
index 00000000..9f3cfb6a
--- /dev/null
+++ b/app/Resources/views/default/theme.ini
@@ -0,0 +1 @@
name = Default \ No newline at end of file
diff --git a/app/Resources/views/default/view.twig b/app/Resources/views/default/view.twig
new file mode 100755
index 00000000..8f3a26c3
--- /dev/null
+++ b/app/Resources/views/default/view.twig
@@ -0,0 +1,124 @@
1{% extends "layout.twig" %}
2{% block title %}{{ entry.title|raw }} ({{ entry.url | e | getDomain }}){% endblock %}
3{% block content %}
4 {% include '_highlight.twig' %}
5 {% include '_pocheit-form.twig' %}
6 <div id="article_toolbar">
7 <ul>
8 <li><a href="./" title="{% trans "Return home" %}" class="tool back"><span>{% trans "Return home" %}</span></a></li>
9 <li><a href="#top" title="{% trans "Back to top" %}" class="tool top"><span>{% trans "Back to top" %}</span></a></li>
10 <li><a href="{{ entry.url|e }}" target="_blank" title="{% trans "original" %} : {{ entry.title|e }}" class="tool link"><span>{{ entry.url | e | getDomain }}</span></a></li>
11 <li><a title="{% trans "Mark as read" %}" class="tool {% if entry.is_read == 0 %}archive-off{% else %}archive{% endif %}" href="javascript: void(null);" id="markAsRead"><span>{% trans "Toggle mark as read" %}</span></a></li>
12 <li><a title="{% trans "Favorite" %}" class="tool {% if entry.is_fav == 0 %}fav-off{% else %}fav{% endif %}" href="javascript: void(null);" id="setFav"><span>{% trans "Toggle favorite" %}</span></a></li>
13 <li><a title="{% trans "Delete" %}" class="tool delete" href="./?action=delete&amp;id={{ entry.id|e }}"><span>{% trans "Delete" %}</span></a></li>
14 {% if constant('SHARE_TWITTER') == 1 %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter" title="{% trans "Tweet" %}"><span>{% trans "Tweet" %}</span></a></li>{% endif %}
15 {% if constant('SHARE_MAIL') == 1 %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email" title="{% trans "Email" %}"><span>{% trans "Email" %}</span></a></li>{% endif %}
16 {% if constant('SHARE_SHAARLI') == 1 %}<li><a href="{{ constant('SHAARLI_URL') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans "shaarli" %}"><span>{% trans "shaarli" %}</span></a></li>{% endif %}
17 {% if constant('SHARE_DIASPORA') == 1 %}<li><a href="{{ constant('DIASPORA_URL') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora" title="{% trans "diaspora" %}"><span>{% trans "diaspora" %}</span></a></li>{% endif %}
18 {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}<li><a href="http://flattr.com/submit/auto?url={{ entry.url }}" class="tool flattr" target="_blank" title="{% trans "flattr" %}"><span>{% trans "flattr" %}</span></a></li>{% elseif flattr.status == constant('FLATTRED') %}<li><a href="{{ flattr.flattrItemURL }}" class="tool flattr" target="_blank" title="{% trans "flattr" %}"><span>{% trans "flattr" %}</span>{{ flattr.numFlattrs }}</a></li>{% endif %}{% endif %}
19 {% if constant('CARROT') == 1 %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon" target="_blank" title="{% trans "carrot" %}"><span>{% trans "carrot" %}</span></a></li>{% endif %}
20 {% if constant('SHOW_PRINTLINK') == 1 %}<li><a title="{% trans "Print" %}" class="tool print" href="javascript: window.print();"><span>{% trans "Print" %}</span></a></li>{% endif %}
21 {% if constant('EPUB') == 1 %}<li><a href="./?epub&amp;method=id&amp;value={{ entry.id|e }}" title="Generate ePub file">EPUB</a></li>{% endif %}
22 {% if constant('MOBI') == 1 %}<li><a href="./?mobi&amp;method=id&amp;value={{ entry.id|e }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
23 {% if constant('PDF') == 1 %}<li><a href="./?pdf&amp;method=id&amp;value={{ entry.id|e }}" title="Generate PDF file">PDF</a></li>{% endif %}
24 <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{% trans "Does this article appear wrong?" %}" class="tool bad-display"><span>{% trans "Does this article appear wrong?" %}</span></a></li>
25 {% if constant('SHOW_READPERCENT') == 1 %}<li><div id="readLeftPercent">0%</div></li>{% endif %}
26 </ul>
27 </div>
28 <div id="article">
29 <header class="mbm">
30 <h1>{{ entry.title|raw }}</h1>
31 </header>
32 {% block tags %}
33 <aside class="tags">
34 {% trans "tags:" %} {% for tag in tags %}<a href="./?view=tag&amp;id={{ tag.id }}">{{ tag.value }}</a> {% endfor %}<a href="./?view=edit-tags&amp;id={{ entry.id|e }}" title="{% trans "Edit tags" %}">✎</a>
35 </aside>
36 {% endblock %}
37 <article>
38 {{ content | raw }}
39 </article>
40 {{ block('tags') }}
41 </div>
42 <script src="{{ poche_url }}themes/_global/js/restoreScroll.js"></script>
43 <script type="text/javascript">
44 $(document).ready(function() {
45
46 // toggle read property of current article
47 $('#markAsRead').click(function(){
48 $("body").css("cursor", "wait");
49 $.ajax( { url: './?action=toggle_archive&id={{ entry.id|e }}' }).done(
50 function( data ) {
51 if ( data == '1' ) {
52 if ( $('#markAsRead').hasClass("archive-off") ) {
53 $('#markAsRead').removeClass("archive-off");
54 $('#markAsRead').addClass("archive");
55 }
56 else {
57 $('#markAsRead').removeClass("archive");
58 $('#markAsRead').addClass("archive-off");
59 }
60 }
61 else {
62 alert('Error! Pls check if you are logged in.');
63 }
64 });
65 $("body").css("cursor", "auto");
66 });
67
68 // toggle favorite property of current article
69 $('#setFav').click(function(){
70 $("body").css("cursor", "wait");
71 $.ajax( { url: './?action=toggle_fav&id={{ entry.id|e }}' }).done(
72 function( data ) {
73 if ( data == '1' ) {
74 if ( $('#setFav').hasClass("fav-off") ) {
75 $('#setFav').removeClass("fav-off");
76 $('#setFav').addClass("fav");
77 }
78 else {
79 $('#setFav').removeClass("fav");
80 $('#setFav').addClass("fav-off");
81 }
82 }
83 else {
84 alert('Error! Pls check if you are logged in.');
85 }
86 });
87 $("body").css("cursor", "auto");
88 });
89
90 // set percent of read on startup
91 if ( $(document).height() <= $(window).innerHeight() ) {
92 pp = 100;
93 }
94 else {
95 pp = 0;
96 }
97 $('#readLeftPercent').text( pp + '%' );
98
99
100 $(window).scroll(function(e){
101 var scrollTop = $(window).scrollTop();
102 var docHeight = $(document).height();
103 var scrollPercent = (scrollTop) / (docHeight);
104 var scrollPercentRounded = Math.round(scrollPercent*100)/100;
105 savePercent({{ entry.id|e }}, scrollPercentRounded);
106
107 // change percent of read on scroll
108 pp = Math.round(scrollTop * 100 / ( docHeight - $(window).innerHeight() ));
109 $('#readLeftPercent').text( pp + '%' );
110 });
111
112 retrievePercent({{ entry.id|e }});
113
114 $(window).resize(function(){
115 retrievePercent({{ entry.id|e }});
116 });
117
118 // Hide useless "back to top" link when there is no scrollbar
119 if ($("body").height() <= $(window).height()) {
120 $('#article_toolbar .tool.top').parent().hide();
121 }
122 });
123 </script>
124{% endblock %}
diff --git a/app/Resources/views/dmagenta/README.md b/app/Resources/views/dmagenta/README.md
new file mode 100644
index 00000000..6abc37e3
--- /dev/null
+++ b/app/Resources/views/dmagenta/README.md
@@ -0,0 +1,3 @@
1# dmagenta (dark magenta) theme
2
3theme created by Nicolas LÅ“uillet aka nico_somb \ No newline at end of file
diff --git a/app/Resources/views/dmagenta/public/css/style-dmagenta.css b/app/Resources/views/dmagenta/public/css/style-dmagenta.css
new file mode 100644
index 00000000..4dc592d2
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/css/style-dmagenta.css
@@ -0,0 +1,78 @@
1body {
2 color: #d4d4d4;
3 background-color: #372d37;
4}
5
6a,
7a:hover,
8a:visited {
9 color: #8d748d;
10}
11
12a.back span {
13 background-image: url('../img/dmagenta/left.png');
14}
15
16a.top span {
17 background-image: url('../img/dmagenta/top.png');
18}
19
20a.fav span,
21a.fav-off span:hover {
22 background-image: url('../img/dmagenta/star-on.png');
23}
24
25a.fav span:hover,
26a.fav-off span {
27 background-image: url('../img/dmagenta/star-off.png');
28}
29
30a.archive span,
31a.archive-off span:hover {
32 background-image: url('../img/dmagenta/checkmark-on.png');
33}
34
35a.archive span:hover,
36a.archive-off span {
37 background-image: url('../img/dmagenta/checkmark-off.png');
38}
39
40a.twitter span {
41 background-image: url('../img/dmagenta/twitter.png');
42}
43
44a.flattr span {
45 background-image: url('../img/dmagenta/flattr.png');
46}
47
48a.shaarli span {
49 background-image: url('../img/dmagenta/shaarli.png');
50}
51
52a.email span {
53 background-image: url('../img/dmagenta/envelop.png');
54}
55
56a.delete span {
57 background-image: url('../img/dmagenta/remove.png');
58}
59
60a.link span {
61 background-image: url('../img/dmagenta/link.png');
62}
63
64a.bad-display span {
65 background-image: url('../img/dmagenta/bad-display.png');
66}
67
68.pagination a {
69 color: #aaa;
70}
71
72#main #links li .current {
73 background-color: #2d372d;
74}
75
76#article_toolbar {
77 background: #372d37;
78} \ No newline at end of file
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/backtotop.png b/app/Resources/views/dmagenta/public/img/dmagenta/backtotop.png
new file mode 100755
index 00000000..051238ef
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/backtotop.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/bad-display.png b/app/Resources/views/dmagenta/public/img/dmagenta/bad-display.png
new file mode 100755
index 00000000..6866799f
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/bad-display.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/checkmark-off.png b/app/Resources/views/dmagenta/public/img/dmagenta/checkmark-off.png
new file mode 100644
index 00000000..3db5a06d
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/checkmark-off.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/checkmark-on.png b/app/Resources/views/dmagenta/public/img/dmagenta/checkmark-on.png
new file mode 100644
index 00000000..cd3abb2c
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/checkmark-on.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/down.png b/app/Resources/views/dmagenta/public/img/dmagenta/down.png
new file mode 100644
index 00000000..b9d536a7
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/down.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/envelop.png b/app/Resources/views/dmagenta/public/img/dmagenta/envelop.png
new file mode 100644
index 00000000..6be1c886
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/envelop.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/flattr.png b/app/Resources/views/dmagenta/public/img/dmagenta/flattr.png
new file mode 100755
index 00000000..0404aaea
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/flattr.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/left.png b/app/Resources/views/dmagenta/public/img/dmagenta/left.png
new file mode 100644
index 00000000..a0a53631
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/left.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/link.png b/app/Resources/views/dmagenta/public/img/dmagenta/link.png
new file mode 100755
index 00000000..db62819d
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/link.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/remove.png b/app/Resources/views/dmagenta/public/img/dmagenta/remove.png
new file mode 100644
index 00000000..f8ad56a3
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/remove.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/rss.png b/app/Resources/views/dmagenta/public/img/dmagenta/rss.png
new file mode 100644
index 00000000..21bad1a1
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/rss.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/shaarli.png b/app/Resources/views/dmagenta/public/img/dmagenta/shaarli.png
new file mode 100644
index 00000000..1eb30f60
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/shaarli.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/star-off.png b/app/Resources/views/dmagenta/public/img/dmagenta/star-off.png
new file mode 100644
index 00000000..6a0133a7
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/star-off.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/star-on.png b/app/Resources/views/dmagenta/public/img/dmagenta/star-on.png
new file mode 100644
index 00000000..a9f96eaa
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/star-on.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/top.png b/app/Resources/views/dmagenta/public/img/dmagenta/top.png
new file mode 100644
index 00000000..954a8c0a
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/top.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/public/img/dmagenta/twitter.png b/app/Resources/views/dmagenta/public/img/dmagenta/twitter.png
new file mode 100644
index 00000000..cfcfe419
--- /dev/null
+++ b/app/Resources/views/dmagenta/public/img/dmagenta/twitter.png
Binary files differ
diff --git a/app/Resources/views/dmagenta/screenshot.jpg b/app/Resources/views/dmagenta/screenshot.jpg
new file mode 100644
index 00000000..ab8f1ec2
--- /dev/null
+++ b/app/Resources/views/dmagenta/screenshot.jpg
Binary files differ
diff --git a/app/Resources/views/dmagenta/theme.ini b/app/Resources/views/dmagenta/theme.ini
new file mode 100644
index 00000000..78fa3a9c
--- /dev/null
+++ b/app/Resources/views/dmagenta/theme.ini
@@ -0,0 +1,2 @@
1name = Dmagenta
2requirements[] = default
diff --git a/app/Resources/views/solarized-dark/README.md b/app/Resources/views/solarized-dark/README.md
new file mode 100644
index 00000000..81be1f8c
--- /dev/null
+++ b/app/Resources/views/solarized-dark/README.md
@@ -0,0 +1,6 @@
1# solarized-dark (Solarized Dark) theme
2
3
4Theme created by NumEricR
5
6http://github.com/NumEricR/poche-themes
diff --git a/app/Resources/views/solarized-dark/Solarized-LICENSE.txt b/app/Resources/views/solarized-dark/Solarized-LICENSE.txt
new file mode 100644
index 00000000..a842f663
--- /dev/null
+++ b/app/Resources/views/solarized-dark/Solarized-LICENSE.txt
@@ -0,0 +1,19 @@
1Copyright (c) 2011 Ethan Schoonover
2
3Permission is hereby granted, free of charge, to any person obtaining a copy
4of this software and associated documentation files (the "Software"), to deal
5in the Software without restriction, including without limitation the rights
6to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7copies of the Software, and to permit persons to whom the Software is
8furnished to do so, subject to the following conditions:
9
10The above copyright notice and this permission notice shall be included in
11all copies or substantial portions of the Software.
12
13THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19THE SOFTWARE
diff --git a/app/Resources/views/solarized-dark/public/css/style-solarized-dark.css b/app/Resources/views/solarized-dark/public/css/style-solarized-dark.css
new file mode 100644
index 00000000..77a97d38
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/css/style-solarized-dark.css
@@ -0,0 +1,232 @@
1/*
2 * Solarized Dark - by NumEricR
3 * http://github.com/NumEricR/poche-themes
4 * ==================================================
5 *
6 * Based on Solarized's palette - (c) 2011 Ethan Schoonover
7 * See http://ethanschoonover.com/solarized#usage-development
8 * See http://ethanschoonover.com/solarized#the-values
9 *
10 * Background: #002b36 base 03
11 * Highlight: #073642 base 02
12 * Primary content: #839496 base 0
13 * Intermediate: #657b83 base 00
14 * Emphasized content: #93a1a1 base 1
15 * Secondary content: #586e75 base 01
16 * Green: #859900
17 * Orange: #cb4b16
18 * Red: #dc322f
19 * Blue: #268bd2
20 *
21 * ================================================== */
22
23/* Background */
24
25body,
26#article_toolbar {
27 background-color: #002b36;
28}
29
30/* Highlight */
31/* 2 different selectors for selection pseudo-elmt */
32/* See https://developer.mozilla.org/en-US/docs/Web/CSS/::selection */
33::-moz-selection {
34 background-color: #073642;
35}
36::selection {
37 background-color: #073642;
38}
39
40/* Primary content */
41
42body,
43a,
44a:hover,
45a:visited,
46td {
47 color: #839496;
48}
49
50/* Secondary content */
51
52.tools p,
53.vieworiginal a,
54.vieworiginal a:hover,
55.vieworiginal a:visited {
56 color: #586e75;
57}
58
59#main #content .entrie,
60#article header,
61#article article {
62 border-bottom-color: #586e75;
63}
64
65/* Emphasized content */
66
67.entrie h2 a:hover,
68footer,
69footer a {
70 color: #93a1a1;
71}
72
73/* Colored content */
74
75#main .messages.success,
76#main .messages.warning,
77#main .messages.error,
78#main .messages.information,
79#main .messages.info {
80 background-color: #073642;
81}
82
83#main .messages.success {
84 border-color: #859900;
85}
86
87#main .messages.success p {
88 color: #859900 !important; /* Overwrites !important used on messages.css */
89}
90
91#main .messages.warning {
92 border-color: #cb4b16;
93}
94
95#main .messages.warning p {
96 color: #cb4b16;
97}
98
99#main .messages.error {
100 border-color: #dc322f;
101}
102
103#main .messages.error p {
104 color: #dc322f !important; /* Overwrites !important used on messages.css */
105}
106
107#main .messages.information,
108#main .messages.info {
109 border-color: #268bd2;
110}
111
112#main .messages.information p,
113#main .messages.info p {
114 color: #268bd2;
115}
116
117/* Miscellaneous */
118
119.bouton,
120.bouton:hover,
121#main #links li a.current,
122#links a:hover,
123.pagination span.current,
124.pagination a:hover,
125.pagination a:active {
126 color: #002b36;
127 background-color: #586e75;
128}
129
130.bouton:hover {
131 background-color: #657b83;
132}
133
134#login,
135#password,
136#password_repeat,
137#bookmarklet,
138.top_link {
139 background-color: #073642;
140}
141
142#login,
143#password,
144#password_repeat,
145#bookmarklet {
146 padding: 5px;
147 border: 1px solid #586e75;
148 color: #839496;
149}
150
151#bookmarklet {
152 border-style: dashed;
153}
154
155.pagination a {
156 border-color: #586e75;
157 color: #586e75;
158}
159
160.pagination span.current {
161 border-color: #073642;
162}
163
164/* Images */
165
166a.back span {
167 background-image: url('../img/solarized-dark/left.png');
168}
169
170a.top span {
171 background-image: url('../img/solarized-dark/top.png');
172}
173
174a.fav span,
175a.fav-off span:hover {
176 background-image: url('../img/solarized-dark/star-on.png');
177}
178
179a.fav span:hover,
180a.fav-off span {
181 background-image: url('../img/solarized-dark/star-off.png');
182}
183
184a.archive span,
185a.archive-off span:hover {
186 background-image: url('../img/solarized-dark/checkmark-on.png');
187}
188
189a.archive span:hover,
190a.archive-off span {
191 background-image: url('../img/solarized-dark/checkmark-off.png');
192}
193
194a.twitter span {
195 background-image: url('../img/solarized-dark/twitter.png');
196}
197
198a.flattr span {
199 background-image: url('../img/solarized-dark/flattr.png');
200}
201
202a.shaarli span {
203 background-image: url('../img/solarized-dark/shaarli.png');
204}
205
206a.email span {
207 background-image: url('../img/solarized-dark/envelop.png');
208}
209
210a.delete span {
211 background-image: url('../img/solarized-dark/remove.png');
212}
213
214a.link span {
215 background-image: url('../img/solarized-dark/link.png');
216}
217
218a.bad-display span {
219 background-image: url('../img/solarized-dark/bad-display.png');
220}
221
222.arrow-down {
223 width: 0px;
224 height: 0px;
225 border-style: solid;
226 border-width: 10px 10px 0 10px;
227 border-color: #586E75 transparent transparent transparent;
228
229 position: absolute;
230 margin-top: 1.5em;
231 margin-left: -30px;
232} \ No newline at end of file
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/backtotop.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/backtotop.png
new file mode 100644
index 00000000..1501c2a5
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/backtotop.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/bad-display.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/bad-display.png
new file mode 100644
index 00000000..b2c3ca17
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/bad-display.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/checkmark-off.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/checkmark-off.png
new file mode 100644
index 00000000..fd7d92fa
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/checkmark-off.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/checkmark-on.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/checkmark-on.png
new file mode 100644
index 00000000..592965dd
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/checkmark-on.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/down.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/down.png
new file mode 100644
index 00000000..5de30315
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/down.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/envelop.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/envelop.png
new file mode 100644
index 00000000..d3468885
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/envelop.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/flattr.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/flattr.png
new file mode 100644
index 00000000..73e3f421
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/flattr.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/left.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/left.png
new file mode 100644
index 00000000..a953d831
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/left.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/link.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/link.png
new file mode 100644
index 00000000..5e859a0e
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/link.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/remove.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/remove.png
new file mode 100644
index 00000000..66a5c1ab
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/remove.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/rss.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/rss.png
new file mode 100644
index 00000000..21bad1a1
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/rss.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/shaarli.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/shaarli.png
new file mode 100644
index 00000000..1eb30f60
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/shaarli.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/star-off.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/star-off.png
new file mode 100644
index 00000000..1c603ecc
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/star-off.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/star-on.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/star-on.png
new file mode 100644
index 00000000..bc37772a
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/star-on.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/top.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/top.png
new file mode 100644
index 00000000..b3f44f31
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/top.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/public/img/solarized-dark/twitter.png b/app/Resources/views/solarized-dark/public/img/solarized-dark/twitter.png
new file mode 100644
index 00000000..c4a25334
--- /dev/null
+++ b/app/Resources/views/solarized-dark/public/img/solarized-dark/twitter.png
Binary files differ
diff --git a/app/Resources/views/solarized-dark/screenshot.jpg b/app/Resources/views/solarized-dark/screenshot.jpg
new file mode 100644
index 00000000..2ad87943
--- /dev/null
+++ b/app/Resources/views/solarized-dark/screenshot.jpg
Binary files differ
diff --git a/app/Resources/views/solarized-dark/theme.ini b/app/Resources/views/solarized-dark/theme.ini
new file mode 100644
index 00000000..c9948146
--- /dev/null
+++ b/app/Resources/views/solarized-dark/theme.ini
@@ -0,0 +1,2 @@
1name = Solarized Dark
2requirements[] = default
diff --git a/app/Resources/views/solarized/README.md b/app/Resources/views/solarized/README.md
new file mode 100644
index 00000000..255e3cdd
--- /dev/null
+++ b/app/Resources/views/solarized/README.md
@@ -0,0 +1,6 @@
1# solarized (Solarized) theme
2
3
4Theme created by NumEricR
5
6http://github.com/NumEricR/poche-themes
diff --git a/app/Resources/views/solarized/Solarized-LICENSE.txt b/app/Resources/views/solarized/Solarized-LICENSE.txt
new file mode 100644
index 00000000..a842f663
--- /dev/null
+++ b/app/Resources/views/solarized/Solarized-LICENSE.txt
@@ -0,0 +1,19 @@
1Copyright (c) 2011 Ethan Schoonover
2
3Permission is hereby granted, free of charge, to any person obtaining a copy
4of this software and associated documentation files (the "Software"), to deal
5in the Software without restriction, including without limitation the rights
6to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7copies of the Software, and to permit persons to whom the Software is
8furnished to do so, subject to the following conditions:
9
10The above copyright notice and this permission notice shall be included in
11all copies or substantial portions of the Software.
12
13THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19THE SOFTWARE
diff --git a/app/Resources/views/solarized/public/css/style-solarized.css b/app/Resources/views/solarized/public/css/style-solarized.css
new file mode 100644
index 00000000..cf16338f
--- /dev/null
+++ b/app/Resources/views/solarized/public/css/style-solarized.css
@@ -0,0 +1,232 @@
1/*
2 * Solarized - by NumEricR
3 * http://github.com/NumEricR/poche-themes
4 * ==================================================
5 *
6 * Based on Solarized's palette - (c) 2011 Ethan Schoonover
7 * See http://ethanschoonover.com/solarized#usage-development
8 * See http://ethanschoonover.com/solarized#the-values
9 *
10 * Background: #fdf6e3 base 3
11 * Highlight: #eee8d5 base 2
12 * Primary content: #657b83 base 00
13 * Intermediate: #839496 base 0
14 * Emphasized content: #586e75 base 01
15 * Secondary content: #93a1a1 base 1
16 * Green: #859900
17 * Orange: #cb4b16
18 * Red: #dc322f
19 * Blue: #268bd2
20 *
21 * ================================================== */
22
23/* Background */
24
25body,
26#article_toolbar {
27 background-color: #fdf6e3;
28}
29
30/* Highlight */
31/* 2 different selectors for selection pseudo-elmt */
32/* See https://developer.mozilla.org/en-US/docs/Web/CSS/::selection */
33::-moz-selection {
34 background-color: #eee8d5;
35}
36::selection {
37 background-color: #eee8d5;
38}
39
40/* Primary content */
41
42body,
43a,
44a:hover,
45a:visited,
46td {
47 color: #657b83;
48}
49
50/* Secondary content */
51
52.tools p,
53.vieworiginal a,
54.vieworiginal a:hover,
55.vieworiginal a:visited {
56 color: #93a1a1;
57}
58
59#main #content .entrie,
60#article header,
61#article article {
62 border-bottom-color: #93a1a1;
63}
64
65/* Emphasized content */
66
67.entrie h2 a:hover,
68footer,
69footer a {
70 color: #586e75;
71}
72
73/* Colored content */
74
75#main .messages.success,
76#main .messages.warning,
77#main .messages.error,
78#main .messages.information,
79#main .messages.info {
80 background-color: #eee8d5;
81}
82
83#main .messages.success {
84 border-color: #859900;
85}
86
87#main .messages.success p {
88 color: #859900 !important; /* Overwrites !important used on messages.css */
89}
90
91#main .messages.warning {
92 border-color: #cb4b16;
93}
94
95#main .messages.warning p {
96 color: #cb4b16;
97}
98
99#main .messages.error {
100 border-color: #dc322f;
101}
102
103#main .messages.error p {
104 color: #dc322f !important; /* Overwrites !important used on messages.css */
105}
106
107#main .messages.information,
108#main .messages.info {
109 border-color: #268bd2;
110}
111
112#main .messages.information p,
113#main .messages.info p {
114 color: #268bd2;
115}
116
117/* Miscellaneous */
118
119.bouton,
120.bouton:hover,
121#main #links li a.current,
122#links a:hover,
123.pagination span.current,
124.pagination a:hover,
125.pagination a:active {
126 color: #fdf6e3;
127 background-color: #93a1a1;
128}
129
130.bouton:hover {
131 background-color: #657b83;
132}
133
134#login,
135#password,
136#password_repeat,
137#bookmarklet,
138.top_link {
139 background-color: #eee8d5;
140}
141
142#login,
143#password,
144#password_repeat,
145#bookmarklet {
146 padding: 5px;
147 border: 1px solid #93a1a1;
148 color: #657b83;
149}
150
151#bookmarklet {
152 border-style: dashed;
153}
154
155.pagination a {
156 border-color: #93a1a1;
157 color: #93a1a1;
158}
159
160.pagination span.current {
161 border-color: #eee8d5;
162}
163
164/* Images */
165
166a.back span {
167 background-image: url('../img/solarized/left.png');
168}
169
170a.top span {
171 background-image: url('../img/solarized/top.png');
172}
173
174a.fav span,
175a.fav-off span:hover {
176 background-image: url('../img/solarized/star-on.png');
177}
178
179a.fav span:hover,
180a.fav-off span {
181 background-image: url('../img/solarized/star-off.png');
182}
183
184a.archive span,
185a.archive-off span:hover {
186 background-image: url('../img/solarized/checkmark-on.png');
187}
188
189a.archive span:hover,
190a.archive-off span {
191 background-image: url('../img/solarized/checkmark-off.png');
192}
193
194a.twitter span {
195 background-image: url('../img/solarized/twitter.png');
196}
197
198a.shaarli span {
199 background-image: url('../img/solarized/shaarli.png');
200}
201
202a.flattr span {
203 background-image: url('../img/solarized/flattr.png');
204}
205
206a.email span {
207 background-image: url('../img/solarized/envelop.png');
208}
209
210a.delete span {
211 background-image: url('../img/solarized/remove.png');
212}
213
214a.link span {
215 background-image: url('../img/solarized/link.png');
216}
217
218a.bad-display span {
219 background-image: url('../img/solarized/bad-display.png');
220}
221
222.arrow-down {
223 width: 0px;
224 height: 0px;
225 border-style: solid;
226 border-width: 10px 10px 0 10px;
227 border-color: #93A1A1 transparent transparent transparent;
228
229 position: absolute;
230 margin-top: 1.5em;
231 margin-left: -30px;
232} \ No newline at end of file
diff --git a/app/Resources/views/solarized/public/img/solarized/backtotop.png b/app/Resources/views/solarized/public/img/solarized/backtotop.png
new file mode 100644
index 00000000..a3e52318
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/backtotop.png
Binary files differ
diff --git a/app/Resources/views/solarized/public/img/solarized/bad-display.png b/app/Resources/views/solarized/public/img/solarized/bad-display.png
new file mode 100644
index 00000000..ae99ab37
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/bad-display.png
Binary files differ
diff --git a/app/Resources/views/solarized/public/img/solarized/checkmark-off.png b/app/Resources/views/solarized/public/img/solarized/checkmark-off.png
new file mode 100644
index 00000000..20cd26b3
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/checkmark-off.png
Binary files differ
diff --git a/app/Resources/views/solarized/public/img/solarized/checkmark-on.png b/app/Resources/views/solarized/public/img/solarized/checkmark-on.png
new file mode 100644
index 00000000..87a2b799
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/checkmark-on.png
Binary files differ
diff --git a/app/Resources/views/solarized/public/img/solarized/down.png b/app/Resources/views/solarized/public/img/solarized/down.png
new file mode 100644
index 00000000..622ff87b
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/down.png
Binary files differ
diff --git a/app/Resources/views/solarized/public/img/solarized/envelop.png b/app/Resources/views/solarized/public/img/solarized/envelop.png
new file mode 100644
index 00000000..1caf7d43
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/envelop.png
Binary files differ
diff --git a/app/Resources/views/solarized/public/img/solarized/flattr.png b/app/Resources/views/solarized/public/img/solarized/flattr.png
new file mode 100644
index 00000000..18e00f86
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/flattr.png
Binary files differ
diff --git a/app/Resources/views/solarized/public/img/solarized/left.png b/app/Resources/views/solarized/public/img/solarized/left.png
new file mode 100644
index 00000000..9780faee
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/left.png
Binary files differ
diff --git a/app/Resources/views/solarized/public/img/solarized/link.png b/app/Resources/views/solarized/public/img/solarized/link.png
new file mode 100644
index 00000000..d0e12862
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/link.png
Binary files differ
diff --git a/app/Resources/views/solarized/public/img/solarized/remove.png b/app/Resources/views/solarized/public/img/solarized/remove.png
new file mode 100644
index 00000000..d5113d17
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/remove.png
Binary files differ
diff --git a/app/Resources/views/solarized/public/img/solarized/rss.png b/app/Resources/views/solarized/public/img/solarized/rss.png
new file mode 100644
index 00000000..21bad1a1
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/rss.png
Binary files differ
diff --git a/app/Resources/views/solarized/public/img/solarized/shaarli.png b/app/Resources/views/solarized/public/img/solarized/shaarli.png
new file mode 100644
index 00000000..1eb30f60
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/shaarli.png
Binary files differ
diff --git a/app/Resources/views/solarized/public/img/solarized/star-off.png b/app/Resources/views/solarized/public/img/solarized/star-off.png
new file mode 100644
index 00000000..afd7d80c
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/star-off.png
Binary files differ
diff --git a/app/Resources/views/solarized/public/img/solarized/star-on.png b/app/Resources/views/solarized/public/img/solarized/star-on.png
new file mode 100644
index 00000000..3a772512
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/star-on.png
Binary files differ
diff --git a/app/Resources/views/solarized/public/img/solarized/top.png b/app/Resources/views/solarized/public/img/solarized/top.png
new file mode 100644
index 00000000..d20001a4
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/top.png
Binary files differ
diff --git a/app/Resources/views/solarized/public/img/solarized/twitter.png b/app/Resources/views/solarized/public/img/solarized/twitter.png
new file mode 100644
index 00000000..109d7151
--- /dev/null
+++ b/app/Resources/views/solarized/public/img/solarized/twitter.png
Binary files differ
diff --git a/app/Resources/views/solarized/screenshot.jpg b/app/Resources/views/solarized/screenshot.jpg
new file mode 100644
index 00000000..07d402e3
--- /dev/null
+++ b/app/Resources/views/solarized/screenshot.jpg
Binary files differ
diff --git a/app/Resources/views/solarized/theme.ini b/app/Resources/views/solarized/theme.ini
new file mode 100644
index 00000000..703997b9
--- /dev/null
+++ b/app/Resources/views/solarized/theme.ini
@@ -0,0 +1,2 @@
1name = Solarized
2requirements[] = default
diff --git a/app/autoload.php b/app/autoload.php
new file mode 100644
index 00000000..70526bb5
--- /dev/null
+++ b/app/autoload.php
@@ -0,0 +1,13 @@
1<?php
2
3use Doctrine\Common\Annotations\AnnotationRegistry;
4use Composer\Autoload\ClassLoader;
5
6/**
7 * @var ClassLoader $loader
8 */
9$loader = require __DIR__.'/../vendor/autoload.php';
10
11AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
12
13return $loader;
diff --git a/app/config/config.inc.default.php b/app/config/config.inc.default.php
index c837b810..bbce4eab 100755
--- a/app/config/config.inc.default.php
+++ b/app/config/config.inc.default.php
@@ -13,7 +13,7 @@
13 13
14@define ('STORAGE', 'sqlite'); # postgres, mysql or sqlite 14@define ('STORAGE', 'sqlite'); # postgres, mysql or sqlite
15 15
16@define ('STORAGE_SQLITE', ROOT . '/app/db/poche.sqlite'); # if you are using sqlite, where me database file is located 16@define ('STORAGE_SQLITE', ROOT . '/data/db/poche.sqlite'); # if you are using sqlite, where me database file is located
17 17
18# only for postgres & mysql 18# only for postgres & mysql
19@define ('STORAGE_SERVER', 'localhost'); 19@define ('STORAGE_SERVER', 'localhost');
@@ -62,7 +62,7 @@
62@define ('SHOW_PRINTLINK', '1'); 62@define ('SHOW_PRINTLINK', '1');
63// display or not percent of read in article view. Affects only default theme. 63// display or not percent of read in article view. Affects only default theme.
64@define ('SHOW_READPERCENT', '1'); 64@define ('SHOW_READPERCENT', '1');
65@define ('ABS_PATH', ROOT . '/app/assets/'); 65@define ('ABS_PATH', ROOT . '/data/assets/');
66 66
67@define ('DEFAULT_THEME', 'baggy'); 67@define ('DEFAULT_THEME', 'baggy');
68 68
diff --git a/app/config/config.inc.php b/app/config/config.inc.php
new file mode 100644
index 00000000..405b9537
--- /dev/null
+++ b/app/config/config.inc.php
@@ -0,0 +1,78 @@
1<?php
2/**
3 * wallabag, self hostable application allowing you to not miss any content anymore
4 *
5 * @category wallabag
6 * @author Nicolas LÅ“uillet <nicolas@loeuillet.org>
7 * @copyright 2013
8 * @license http://opensource.org/licenses/MIT see COPYING file
9 */
10
11@define ('SALT', 'ThisTokenIsNotSoSecretChangeIt'); # put a strong string here
12@define ('LANG', 'en_EN.utf8');
13
14@define ('STORAGE', 'sqlite'); # postgres, mysql or sqlite
15
16@define ('STORAGE_SQLITE', ROOT . '/data/db/poche.sqlite'); # if you are using sqlite, where me database file is located
17
18# only for postgres & mysql
19@define ('STORAGE_SERVER', 'localhost');
20@define ('STORAGE_DB', 'poche');
21@define ('STORAGE_USER', 'poche');
22@define ('STORAGE_PASSWORD', 'poche');
23
24#################################################################################
25# Do not trespass unless you know what you are doing
26#################################################################################
27// Change this if http is running on nonstandard port - i.e is behind cache proxy
28@define ('HTTP_PORT', 80);
29
30// Change this if not using the standart port for SSL - i.e you server is behind sslh
31@define ('SSL_PORT', 443);
32
33@define ('MODE_DEMO', FALSE);
34@define ('DEBUG_POCHE', FALSE);
35
36//default level of error reporting in application. Developers should override it in their config.inc.php: set to E_ALL.
37@define ('ERROR_REPORTING', E_ALL & ~E_NOTICE);
38
39@define ('DOWNLOAD_PICTURES', FALSE); # This can slow down the process of adding articles
40@define ('REGENERATE_PICTURES_QUALITY', 75);
41@define ('CONVERT_LINKS_FOOTNOTES', FALSE);
42@define ('REVERT_FORCED_PARAGRAPH_ELEMENTS', FALSE);
43@define ('SHARE_TWITTER', TRUE);
44@define ('SHARE_MAIL', TRUE);
45@define ('SHARE_SHAARLI', FALSE);
46@define ('SHAARLI_URL', 'http://myshaarliurl.com');
47@define ('SHARE_DIASPORA', FALSE);
48@define ('DIASPORA_URL', 'http://diasporapod.com'); # Don't add a / at the end
49@define ('FLATTR', TRUE);
50@define ('FLATTR_API', 'https://api.flattr.com/rest/v2/things/lookup/?url=');
51@define ('NOT_FLATTRABLE', '0');
52@define ('FLATTRABLE', '1');
53@define ('FLATTRED', '2');
54@define ('CARROT', FALSE);
55
56// ebook
57@define ('EPUB', TRUE);
58@define ('MOBI', FALSE);
59@define ('PDF', FALSE);
60
61// display or not print link in article view
62@define ('SHOW_PRINTLINK', '1');
63// display or not percent of read in article view. Affects only default theme.
64@define ('SHOW_READPERCENT', '1');
65@define ('ABS_PATH', ROOT . '/data/assets/');
66
67@define ('DEFAULT_THEME', 'baggy');
68
69@define ('THEME', ROOT . '/src/Wallabag/Wallabag/Resources/views');
70@define ('LOCALE', ROOT . '/src/Wallabag/Wallabag/Resources/translations');
71@define ('CACHE', ROOT . '/app/cache');
72
73@define ('PAGINATION', '12');
74
75//limit for download of articles during import
76@define ('IMPORT_LIMIT', 5);
77//delay between downloads (in sec)
78@define ('IMPORT_DELAY', 5);
diff --git a/app/config/config.yml b/app/config/config.yml
new file mode 100644
index 00000000..25f66471
--- /dev/null
+++ b/app/config/config.yml
@@ -0,0 +1,73 @@
1imports:
2 - { resource: parameters.yml }
3 - { resource: security.yml }
4 - { resource: services.yml }
5
6framework:
7 #esi: ~
8 #translator: { fallback: "%locale%" }
9 secret: "%secret%"
10 router:
11 resource: "%kernel.root_dir%/config/routing.yml"
12 strict_requirements: ~
13 form: ~
14 csrf_protection: ~
15 validation: { enable_annotations: true }
16 templating:
17 engines: ['twig']
18 #assets_version: SomeVersionScheme
19 default_locale: "%locale%"
20 trusted_hosts: ~
21 trusted_proxies: ~
22 session:
23 # handler_id set to null will use default session handler from php.ini
24 handler_id: ~
25 fragments: ~
26 http_method_override: true
27
28# Twig Configuration
29twig:
30 debug: "%kernel.debug%"
31 strict_variables: "%kernel.debug%"
32
33# Assetic Configuration
34assetic:
35 debug: "%kernel.debug%"
36 use_controller: false
37 bundles: [ ]
38 #java: /usr/bin/java
39 filters:
40 cssrewrite: ~
41 #closure:
42 # jar: "%kernel.root_dir%/Resources/java/compiler.jar"
43 #yui_css:
44 # jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"
45
46# Doctrine Configuration
47doctrine:
48 dbal:
49 driver: "%database_driver%"
50 host: "%database_host%"
51 port: "%database_port%"
52 dbname: "%database_name%"
53 user: "%database_user%"
54 password: "%database_password%"
55 charset: UTF8
56 # if using pdo_sqlite as your database driver:
57 # 1. add the path in parameters.yml
58 # e.g. database_path: "%kernel.root_dir%/data/data.db3"
59 # 2. Uncomment database_path in parameters.yml.dist
60 # 3. Uncomment next line:
61 # path: "%database_path%"
62
63 orm:
64 auto_generate_proxy_classes: "%kernel.debug%"
65 auto_mapping: true
66
67# Swiftmailer Configuration
68swiftmailer:
69 transport: "%mailer_transport%"
70 host: "%mailer_host%"
71 username: "%mailer_user%"
72 password: "%mailer_password%"
73 spool: { type: memory }
diff --git a/app/config/config_dev.yml b/app/config/config_dev.yml
new file mode 100644
index 00000000..efaf396e
--- /dev/null
+++ b/app/config/config_dev.yml
@@ -0,0 +1,48 @@
1imports:
2 - { resource: config.yml }
3
4framework:
5 router:
6 resource: "%kernel.root_dir%/config/routing_dev.yml"
7 strict_requirements: true
8 profiler: { only_exceptions: false }
9
10web_profiler:
11 toolbar: true
12 intercept_redirects: false
13
14monolog:
15 handlers:
16 main:
17 type: stream
18 path: "%kernel.logs_dir%/%kernel.environment%.log"
19 level: debug
20 console:
21 type: console
22 bubble: false
23 verbosity_levels:
24 VERBOSITY_VERBOSE: INFO
25 VERBOSITY_VERY_VERBOSE: DEBUG
26 channels: ["!doctrine"]
27 console_very_verbose:
28 type: console
29 bubble: false
30 verbosity_levels:
31 VERBOSITY_VERBOSE: NOTICE
32 VERBOSITY_VERY_VERBOSE: NOTICE
33 VERBOSITY_DEBUG: DEBUG
34 channels: ["doctrine"]
35 # uncomment to get logging in your browser
36 # you may have to allow bigger header sizes in your Web server configuration
37 #firephp:
38 # type: firephp
39 # level: info
40 #chromephp:
41 # type: chromephp
42 # level: info
43
44assetic:
45 use_controller: true
46
47#swiftmailer:
48# delivery_address: me@example.com
diff --git a/app/config/config_prod.yml b/app/config/config_prod.yml
new file mode 100644
index 00000000..342837a0
--- /dev/null
+++ b/app/config/config_prod.yml
@@ -0,0 +1,25 @@
1imports:
2 - { resource: config.yml }
3
4#framework:
5# validation:
6# cache: apc
7
8#doctrine:
9# orm:
10# metadata_cache_driver: apc
11# result_cache_driver: apc
12# query_cache_driver: apc
13
14monolog:
15 handlers:
16 main:
17 type: fingers_crossed
18 action_level: error
19 handler: nested
20 nested:
21 type: stream
22 path: "%kernel.logs_dir%/%kernel.environment%.log"
23 level: debug
24 console:
25 type: console
diff --git a/app/config/config_test.yml b/app/config/config_test.yml
new file mode 100644
index 00000000..2f6d9250
--- /dev/null
+++ b/app/config/config_test.yml
@@ -0,0 +1,16 @@
1imports:
2 - { resource: config_dev.yml }
3
4framework:
5 test: ~
6 session:
7 storage_id: session.storage.mock_file
8 profiler:
9 collect: false
10
11web_profiler:
12 toolbar: false
13 intercept_redirects: false
14
15swiftmailer:
16 disable_delivery: true
diff --git a/app/config/global.inc.php b/app/config/global.inc.php
index 59db5aa1..8e62818b 100755
--- a/app/config/global.inc.php
+++ b/app/config/global.inc.php
@@ -22,4 +22,4 @@ if (!ini_get('date.timezone') || !@date_default_timezone_set(ini_get('date.timez
22 22
23if (defined('ERROR_REPORTING')) { 23if (defined('ERROR_REPORTING')) {
24 error_reporting(ERROR_REPORTING); 24 error_reporting(ERROR_REPORTING);
25} \ No newline at end of file 25}
diff --git a/app/config/parameters.yml.dist b/app/config/parameters.yml.dist
new file mode 100644
index 00000000..1da778f4
--- /dev/null
+++ b/app/config/parameters.yml.dist
@@ -0,0 +1,20 @@
1# This file is a "template" of what your parameters.yml file should look like
2parameters:
3 database_driver: pdo_mysql
4 database_host: 127.0.0.1
5 database_port: ~
6 database_name: symfony
7 database_user: root
8 database_password: ~
9 # You should uncomment this if you want use pdo_sqlite
10 # database_path: "%kernel.root_dir%/data.db3"
11
12 mailer_transport: smtp
13 mailer_host: 127.0.0.1
14 mailer_user: ~
15 mailer_password: ~
16
17 locale: en
18
19 # A secret key that's used to generate certain security-related tokens
20 secret: ThisTokenIsNotSoSecretChangeIt
diff --git a/app/config/routing.yml b/app/config/routing.yml
new file mode 100644
index 00000000..a748d532
--- /dev/null
+++ b/app/config/routing.yml
@@ -0,0 +1,3 @@
1app:
2 resource: @WallabagBundle/Controller/
3 type: annotation
diff --git a/app/config/routing_dev.yml b/app/config/routing_dev.yml
new file mode 100644
index 00000000..99130058
--- /dev/null
+++ b/app/config/routing_dev.yml
@@ -0,0 +1,22 @@
1_wdt:
2 resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml"
3 prefix: /_wdt
4
5_profiler:
6 resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
7 prefix: /_profiler
8
9_configurator:
10 resource: "@SensioDistributionBundle/Resources/config/routing/webconfigurator.xml"
11 prefix: /_configurator
12
13_errors:
14 resource: "@TwigBundle/Resources/config/routing/errors.xml"
15 prefix: /_error
16
17_main:
18 resource: routing.yml
19
20# AcmeDemoBundle routes (to be removed)
21_acme_demo:
22 resource: "@AcmeDemoBundle/Resources/config/routing.yml" \ No newline at end of file
diff --git a/app/config/security.yml b/app/config/security.yml
new file mode 100644
index 00000000..a28b1db9
--- /dev/null
+++ b/app/config/security.yml
@@ -0,0 +1,52 @@
1# you can read more about security in the related section of the documentation
2# http://symfony.com/doc/current/book/security.html
3security:
4 # http://symfony.com/doc/current/book/security.html#encoding-the-user-s-password
5 encoders:
6 Symfony\Component\Security\Core\User\User: plaintext
7
8 # http://symfony.com/doc/current/book/security.html#hierarchical-roles
9 role_hierarchy:
10 ROLE_ADMIN: ROLE_USER
11 ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
12
13 # http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers
14 providers:
15 in_memory:
16 memory:
17 users:
18 user: { password: userpass, roles: [ 'ROLE_USER' ] }
19 admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
20
21 # the main part of the security, where you can set up firewalls
22 # for specific sections of your app
23 firewalls:
24 # disables authentication for assets and the profiler, adapt it according to your needs
25 dev:
26 pattern: ^/(_(profiler|wdt)|css|images|js)/
27 security: false
28 # the login page has to be accessible for everybody
29 demo_login:
30 pattern: ^/demo/secured/login$
31 security: false
32
33 # secures part of the application
34 demo_secured_area:
35 pattern: ^/demo/secured/
36 # it's important to notice that in this case _demo_security_check and _demo_login
37 # are route names and that they are specified in the AcmeDemoBundle
38 form_login:
39 check_path: _demo_security_check
40 login_path: _demo_login
41 logout:
42 path: _demo_logout
43 target: _demo
44 #anonymous: ~
45 #http_basic:
46 # realm: "Secured Demo Area"
47
48 # with these settings you can restrict or allow access for different parts
49 # of your application based on roles, ip, host or methods
50 # http://symfony.com/doc/current/cookbook/security/access_control.html
51 access_control:
52 #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } \ No newline at end of file
diff --git a/app/config/services.yml b/app/config/services.yml
new file mode 100644
index 00000000..5c76fc59
--- /dev/null
+++ b/app/config/services.yml
@@ -0,0 +1,9 @@
1# Learn more about services, parameters and containers at
2# http://symfony.com/doc/current/book/service_container.html
3parameters:
4# parameter_name: value
5
6services:
7# service_name:
8# class: AppBundle\Directory\ClassName
9# arguments: ["@another_service_name", "plain_value", "%parameter_name%"]
diff --git a/app/console b/app/console
new file mode 100755
index 00000000..fa6a36e2
--- /dev/null
+++ b/app/console
@@ -0,0 +1,27 @@
1#!/usr/bin/env php
2<?php
3
4// if you don't want to setup permissions the proper way, just uncomment the following PHP line
5// read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
6//umask(0000);
7
8set_time_limit(0);
9
10require_once __DIR__.'/bootstrap.php.cache';
11require_once __DIR__.'/AppKernel.php';
12
13use Symfony\Bundle\FrameworkBundle\Console\Application;
14use Symfony\Component\Console\Input\ArgvInput;
15use Symfony\Component\Debug\Debug;
16
17$input = new ArgvInput();
18$env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev');
19$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(array('--no-debug', '')) && $env !== 'prod';
20
21if ($debug) {
22 Debug::enable();
23}
24
25$kernel = new AppKernel($env, $debug);
26$application = new Application($kernel);
27$application->run($input);
diff --git a/app/db/.gitignore b/app/db/.gitignore
deleted file mode 100644
index e69de29b..00000000
--- a/app/db/.gitignore
+++ /dev/null
diff --git a/app/cache/.gitignore b/app/logs/.gitkeep
index e69de29b..e69de29b 100644
--- a/app/cache/.gitignore
+++ b/app/logs/.gitkeep
diff --git a/app/phpunit.xml.dist b/app/phpunit.xml.dist
new file mode 100644
index 00000000..2b41503b
--- /dev/null
+++ b/app/phpunit.xml.dist
@@ -0,0 +1,37 @@
1<?xml version="1.0" encoding="UTF-8"?>
2
3<!-- http://phpunit.de/manual/4.1/en/appendixes.configuration.html -->
4<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
6 backupGlobals="false"
7 colors="true"
8 bootstrap="bootstrap.php.cache"
9>
10 <testsuites>
11 <testsuite name="Project Test Suite">
12 <directory>../src/*/*Bundle/Tests</directory>
13 <directory>../src/*/Bundle/*Bundle/Tests</directory>
14 <directory>../src/*Bundle/Tests</directory>
15 </testsuite>
16 </testsuites>
17
18 <!--
19 <php>
20 <server name="KERNEL_DIR" value="/path/to/your/app/" />
21 </php>
22 -->
23
24 <filter>
25 <whitelist>
26 <directory>../src</directory>
27 <exclude>
28 <directory>../src/*Bundle/Resources</directory>
29 <directory>../src/*Bundle/Tests</directory>
30 <directory>../src/*/*Bundle/Resources</directory>
31 <directory>../src/*/*Bundle/Tests</directory>
32 <directory>../src/*/Bundle/*Bundle/Resources</directory>
33 <directory>../src/*/Bundle/*Bundle/Tests</directory>
34 </exclude>
35 </whitelist>
36 </filter>
37</phpunit>
diff --git a/bin/compatibility.php b/bin/compatibility.php
deleted file mode 100644
index 61a8e99f..00000000
--- a/bin/compatibility.php
+++ /dev/null
@@ -1,427 +0,0 @@
1<?php
2/**
3 * wallabag, self hostable application allowing you to not miss any content anymore
4 *
5 * @category wallabag
6 * @author Nicolas LÅ“uillet <nicolas@loeuillet.org>
7 * @copyright 2013
8 * @license http://opensource.org/licenses/MIT see COPYING file
9 */
10
11$app_name = 'wallabag';
12
13$php_ok = (function_exists('version_compare') && version_compare(phpversion(), '5.3.3', '>='));
14$pcre_ok = extension_loaded('pcre');
15$zlib_ok = extension_loaded('zlib');
16$mbstring_ok = extension_loaded('mbstring');
17$dom_ok = extension_loaded('DOM');
18$iconv_ok = extension_loaded('iconv');
19$tidy_ok = function_exists('tidy_parse_string');
20$curl_ok = function_exists('curl_exec');
21$parse_ini_ok = function_exists('parse_ini_file');
22$parallel_ok = ((extension_loaded('http') && class_exists('HttpRequestPool')) || ($curl_ok && function_exists('curl_multi_init')));
23$allow_url_fopen_ok = (bool)ini_get('allow_url_fopen');
24$filter_ok = extension_loaded('filter');
25$gettext_ok = function_exists("gettext");
26$gd_ok = extension_loaded('gd');
27
28
29if (extension_loaded('xmlreader')) {
30 $xml_ok = true;
31} elseif (extension_loaded('xml')) {
32 $parser_check = xml_parser_create();
33 xml_parse_into_struct($parser_check, '<foo>&amp;</foo>', $values);
34 xml_parser_free($parser_check);
35 $xml_ok = isset($values[0]['value']);
36} else {
37 $xml_ok = false;
38}
39
40header('Content-type: text/html; charset=UTF-8');
41
42?><!DOCTYPE html>
43
44<html lang="en">
45<head>
46<title><?php echo $app_name; ?>: Server Compatibility Test</title>
47
48<style type="text/css">
49body {
50 font:14px/1.4em "Lucida Grande", Verdana, Arial, Helvetica, Clean, Sans, sans-serif;
51 letter-spacing:0px;
52 color:#333;
53 margin:0;
54 padding:0;
55 background:#fff;
56}
57
58div#site {
59 width:550px;
60 margin:20px auto 0 auto;
61}
62
63a {
64 color:#000;
65 text-decoration:underline;
66 padding:0 1px;
67}
68
69a:hover {
70 color:#fff;
71 background-color:#333;
72 text-decoration:none;
73 padding:0 1px;
74}
75
76p {
77 margin:0;
78 padding:5px 0;
79}
80
81em {
82 font-style:normal;
83 background-color:#ffc;
84 padding: 0.1em 0;
85}
86
87ul, ol {
88 margin:10px 0 10px 20px;
89 padding:0 0 0 15px;
90}
91
92ul li, ol li {
93 margin:0 0 7px 0;
94 padding:0 0 0 3px;
95}
96
97h2 {
98 font-size:18px;
99 padding:0;
100 margin:30px 0 20px 0;
101}
102
103h3 {
104 font-size:16px;
105 padding:0;
106 margin:20px 0 5px 0;
107}
108
109h4 {
110 font-size:14px;
111 padding:0;
112 margin:15px 0 5px 0;
113}
114
115code {
116 font-size:1.1em;
117 background-color:#f3f3ff;
118 color:#000;
119}
120
121em strong {
122 text-transform: uppercase;
123}
124
125table#chart {
126 border-collapse:collapse;
127}
128
129table#chart th {
130 background-color:#eee;
131 padding:2px 3px;
132 border:1px solid #fff;
133}
134
135table#chart td {
136 text-align:center;
137 padding:2px 3px;
138 border:1px solid #eee;
139}
140
141table#chart tr.enabled td {
142 /* Leave this alone */
143}
144
145table#chart tr.disabled td,
146table#chart tr.disabled td a {
147}
148
149table#chart tr.disabled td a {
150 text-decoration:underline;
151}
152
153div.chunk {
154 margin:20px 0 0 0;
155 padding:0 0 10px 0;
156 border-bottom:1px solid #ccc;
157}
158
159.footnote,
160.footnote a {
161 font:10px/12px verdana, sans-serif;
162 color:#aaa;
163}
164
165.footnote em {
166 background-color:transparent;
167 font-style:italic;
168}
169
170.good{
171background-color:#52CC5B;
172}
173.bad{
174background-color:#F74343;
175font-style:italic;
176font-weight: bold;
177}
178.pass{
179background-color:#FF9500;
180}
181
182</style>
183
184</head>
185
186<body>
187<?php
188$frominstall = false;
189if (isset($_GET['from'])){
190 if ($_GET['from'] == 'install'){
191 $frominstall = true;
192 }}
193?>
194<div id="site">
195 <div id="content">
196
197 <div class="chunk">
198 <h2 style="text-align:center;"><?php echo $app_name; ?>: Compatibility Test</h2>
199 <table cellpadding="0" cellspacing="0" border="0" width="100%" id="chart">
200 <thead>
201 <tr>
202 <th>Test</th>
203 <th>Should Be</th>
204 <th>What You Have</th>
205 </tr>
206 </thead>
207 <tbody>
208 <tr class="<?php echo ($php_ok) ? 'enabled' : 'disabled'; ?>">
209 <td>PHP</td>
210 <td>5.3.3 or higher</td>
211 <td class="<?php echo ($php_ok) ? 'good' : 'disabled'; ?>"><?php echo phpversion(); ?></td>
212 </tr>
213 <tr class="<?php echo ($xml_ok) ? 'enabled' : 'disabled'; ?>">
214 <td><a href="http://php.net/xml">XML</a></td>
215 <td>Enabled</td>
216 <?php echo ($xml_ok) ? '<td class="good">Enabled, and sane</span>' : '<td class="bad">Disabled, or broken'; ?></td>
217 </tr>
218 <tr class="<?php echo ($pcre_ok) ? 'enabled' : 'disabled'; ?>">
219 <td><a href="http://php.net/pcre">PCRE</a></td>
220 <td>Enabled</td>
221 <?php echo ($pcre_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
222 </tr>
223<!-- <tr class="<?php echo ($zlib_ok) ? 'enabled' : 'disabled'; ?>">
224 <td><a href="http://php.net/zlib">Zlib</a></td>
225 <td>Enabled</td>
226 <?php echo ($zlib_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
227 </tr> -->
228<!-- <tr class="<?php echo ($mbstring_ok) ? 'enabled' : 'disabled'; ?>">
229 <td><a href="http://php.net/mbstring">mbstring</a></td>
230 <td>Enabled</td>
231 <?php echo ($mbstring_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
232 </tr> -->
233<!-- <tr class="<?php echo ($iconv_ok) ? 'enabled' : 'disabled'; ?>">
234 <td><a href="http://php.net/iconv">iconv</a></td>
235 <td>Enabled</td>
236 <?php echo ($iconv_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
237 </tr> -->
238 <tr class="<?php echo ($dom_ok) ? 'enabled' : 'disabled'; ?>">
239 <td><a href="http://php.net/manual/en/book.dom.php">DOM / XML extension</a></td>
240 <td>Enabled</td>
241 <?php echo ($dom_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
242 </tr>
243 <tr class="<?php echo ($filter_ok) ? 'enabled' : 'disabled'; ?>">
244 <td><a href="http://uk.php.net/manual/en/book.filter.php">Data filtering</a></td>
245 <td>Enabled</td>
246 <?php echo ($filter_ok) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
247 </tr>
248 <tr class="<?php echo ($gd_ok) ? 'enabled' : 'disabled'; ?>">
249 <td><a href="http://php.net/manual/en/book.image.php">GD</a></td>
250 <td>Enabled</td>
251 <?php echo ($gd_ok) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
252 </tr>
253 <tr class="<?php echo ($tidy_ok) ? 'enabled' : 'disabled'; ?>">
254 <td><a href="http://php.net/tidy">Tidy</a></td>
255 <td>Enabled</td>
256 <?php echo ($tidy_ok) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
257 </tr>
258 <tr class="<?php echo ($curl_ok) ? 'enabled' : 'disabled'; ?>">
259 <td><a href="http://php.net/curl">cURL</a></td>
260 <td>Enabled</td>
261 <?php echo (extension_loaded('curl')) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
262 </tr>
263 <tr class="<?php echo ($parse_ini_ok) ? 'enabled' : 'disabled'; ?>">
264 <td><a href="http://uk.php.net/manual/en/function.parse-ini-file.php">Parse ini file</td>
265 <td>Enabled</td>
266 <?php echo ($parse_ini_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
267 </tr>
268 <tr class="<?php echo ($parallel_ok) ? 'enabled' : 'disabled'; ?>">
269 <td>Parallel URL fetching</td>
270 <td>Enabled</td>
271 <?php echo ($parallel_ok) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
272 </tr>
273 <tr class="<?php echo ($allow_url_fopen_ok) ? 'enabled' : 'disabled'; ?>">
274 <td><a href="http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen">allow_url_fopen</a></td>
275 <td>Enabled</td>
276 <?php echo ($allow_url_fopen_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
277 </tr>
278 <tr class="<?php echo ($gettext_ok) ? 'enabled' : 'disabled'; ?>">
279 <td><a href="http://php.net/manual/en/book.gettext.php">gettext</a></td>
280 <td>Enabled</td>
281 <?php echo ($gettext_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
282 </tr>
283 </tbody>
284 </table>
285 </div>
286
287 <div class="chunk">
288 <h3>What does this mean?</h3>
289 <ol>
290 <?php //if ($php_ok && $xml_ok && $pcre_ok && $mbstring_ok && $iconv_ok && $filter_ok && $zlib_ok && $tidy_ok && $curl_ok && $parallel_ok && $allow_url_fopen_ok): ?>
291 <?php if ($php_ok && $xml_ok && $pcre_ok && $dom_ok && $filter_ok && $gd_ok && $tidy_ok && $curl_ok && $parallel_ok && $allow_url_fopen_ok && $gettext_ok && $parse_ini_ok): ?>
292 <li><em>You have everything you need to run <?php echo $app_name; ?> properly! Congratulations!</em></li>
293 <?php else: ?>
294 <?php if ($php_ok): ?>
295 <li><strong>PHP:</strong> You are running a supported version of PHP. <em>No problems here.</em></li>
296 <?php if ($xml_ok): ?>
297 <li><strong>XML:</strong> You have XMLReader support or a version of XML support that isn't broken installed. <em>No problems here.</em></li>
298 <?php if ($pcre_ok): ?>
299 <li><strong>PCRE:</strong> You have PCRE support installed. <em>No problems here.</em></li>
300
301 <?php if ($allow_url_fopen_ok): ?>
302 <li><strong>allow_url_fopen:</strong> You have allow_url_fopen enabled. <em>No problems here.</em></li>
303
304 <?php if ($gettext_ok): ?>
305 <li><strong>Gettext:</strong> You have <code>gettext</code> enabled. <em>No problems here.</em></li>
306
307 <?php if ($parse_ini_ok): ?>
308 <li><strong>Parse ini:</strong> You can parse <em>ini</em> files. <em>No problems here.</em></li>
309
310 <?php if ($dom_ok): ?>
311 <li><strong>DOM/XML:</strong> You can parse <em>ini</em> files. <em>No problems here.</em></li>
312
313 <?php if ($filter_ok): ?>
314 <li><strong>Data filtering:</strong> You can use the PHP build-in DOM to operate on XML documents. <em>No problems here.</em></li>
315
316 <?php if ($zlib_ok): ?>
317 <li><strong>Zlib:</strong> You have <code>Zlib</code> enabled. This allows SimplePie to support GZIP-encoded feeds. <em>No problems here.</em></li>
318 <?php else: ?>
319 <li><strong>Zlib:</strong> The <code>Zlib</code> extension is not available. SimplePie will ignore any GZIP-encoding, and instead handle feeds as uncompressed text.</li>
320 <?php endif; ?>
321
322 <?php if ($mbstring_ok && $iconv_ok): ?>
323 <li><strong>mbstring and iconv:</strong> You have both <code>mbstring</code> and <code>iconv</code> installed! This will allow <?php echo $app_name; ?> to handle the greatest number of languages. <em>No problems here.</em></li>
324 <?php elseif ($mbstring_ok): ?>
325 <li><strong>mbstring:</strong> <code>mbstring</code> is installed, but <code>iconv</code> is not.</li>
326 <?php elseif ($iconv_ok): ?>
327 <li><strong>iconv:</strong> <code>iconv</code> is installed, but <code>mbstring</code> is not.</li>
328 <?php else: ?>
329 <li><strong>mbstring and iconv:</strong> <em>You do not have either of the extensions installed.</em> This will significantly impair your ability to read non-English feeds, as well as even some English ones.</li>
330 <?php endif; ?>
331
332 <?php if ($gd_ok): ?>
333 <li><strong>GD:</strong> You have <code>GD</code> support installed. <em>No problems here.</em></li>
334 <?php else: ?>
335 <li><strong>GD:</strong> The <code>GD</code> extension is not available. <?php echo $app_name; ?> will not be able to download pictures locally on your server.</li>
336 <?php endif; ?>
337
338 <?php if ($tidy_ok): ?>
339 <li><strong>Tidy:</strong> You have <code>Tidy</code> support installed. <em>No problems here.</em></li>
340 <?php else: ?>
341 <li><strong>Tidy:</strong> The <code>Tidy</code> extension is not available. <?php echo $app_name; ?> should still work with most feeds, but you may experience problems with some. You can install it with <code>sudo apt-get install php5-tidy</code> and then reload Apache <code>sudo service apache2 reload</code>.</li>
342 <?php endif; ?>
343
344 <?php if ($curl_ok): ?>
345 <li><strong>cURL:</strong> You have <code>cURL</code> support installed. <em>No problems here.</em></li>
346 <?php else: ?>
347 <li><strong>cURL:</strong> The <code>cURL</code> extension is not available. SimplePie will use <code>fsockopen()</code> instead.</li>
348 <?php endif; ?>
349
350 <?php if ($parallel_ok): ?>
351 <li><strong>Parallel URL fetching:</strong> You have <code>HttpRequestPool</code> or <code>curl_multi</code> support installed. <em>No problems here.</em></li>
352 <?php else: ?>
353 <li><strong>Parallel URL fetching:</strong> <code>HttpRequestPool</code> or <code>curl_multi</code> support is not available. <?php echo $app_name; ?> will use <code>file_get_contents()</code> instead to fetch URLs sequentially rather than in parallel.</li>
354 <?php endif; ?>
355
356 <?php else: ?>
357 <li><strong>Data filtering:</strong> Your PHP configuration has the filter extension disabled. <strong><?php echo $app_name; ?> will not work here.</strong></li>
358 <?php endif; ?>
359
360 <?php else: ?>
361 <li><strong>DOM/XML:</strong> Your PHP configuration isn't standard, you're missing PHP-DOM. You may try to install a package or recompile PHP. <strong><?php echo $app_name; ?> will not work here.</strong></li>
362 <?php endif; ?>
363
364 <?php else : ?>
365 <li><strong>Parse ini files function :</strong> Bad luck : your webhost has decided to block the use of the <em>parse_ini_file</em> function. <strong><?php echo $app_name; ?> will not work here.</strong>
366 <?php endif; ?>
367
368 <?php else: ?>
369 <li><strong>GetText:</strong> The <code>gettext</code> extension is not available. The system we use to display wallabag in various languages is not available. <strong><?php echo $app_name; ?> will not work here.</strong></li>
370 <?php endif; ?>
371
372 <?php else: ?>
373 <li><strong>allow_url_fopen:</strong> Your PHP configuration has allow_url_fopen disabled. <strong><?php echo $app_name; ?> will not work here.</strong></li>
374 <?php endif; ?>
375
376 <?php else: ?>
377 <li><strong>PCRE:</strong> Your PHP installation doesn't support Perl-Compatible Regular Expressions. <strong><?php echo $app_name; ?> will not work here.</strong></li>
378 <?php endif; ?>
379 <?php else: ?>
380 <li><strong>XML:</strong> Your PHP installation doesn't support XML parsing. <strong><?php echo $app_name; ?> will not work here.</strong></li>
381 <?php endif; ?>
382 <?php else: ?>
383 <li><strong>PHP:</strong> You are running an unsupported version of PHP. <strong><?php echo $app_name; ?> will not work here.</strong></li>
384 <?php endif; ?>
385 <?php endif; ?>
386 </ol>
387 </div>
388
389 <div class="chunk">
390 <?php //if ($php_ok && $xml_ok && $pcre_ok && $mbstring_ok && $iconv_ok && $filter_ok && $allow_url_fopen_ok) { ?>
391 <?php if ($php_ok && $xml_ok && $pcre_ok && $filter_ok && $allow_url_fopen_ok && $gettext_ok && $parse_ini_ok) { ?>
392 <h3>Bottom Line: Yes, you can!</h3>
393 <p><em>Your webhost has its act together!</em></p>
394 <?php if (!$frominstall) { ?>
395 <p>You can download the latest version of <?php echo $app_name; ?> from <a href="http://wallabag.org/download">wallabag.org</a>.</p>
396 <p>If you already have done that, you should access <a href="index.php">the index.php file</a> of your installation to configure and/or start using wallabag</p>
397 <?php } else { ?>
398 <p>You can now <a href="../index.php">return to the installation section</a>.</p>
399 <?php } ?>
400 <p><strong>Note</strong>: Passing this test does not guarantee that <?php echo $app_name; ?> will run on your webhost &mdash; it only ensures that the basic requirements have been addressed. If you experience any problems, please let us know.</p>
401 <?php //} else if ($php_ok && $xml_ok && $pcre_ok && $mbstring_ok && $allow_url_fopen_ok && $filter_ok) { ?>
402 <?php } else if ($php_ok && $xml_ok && $pcre_ok && $allow_url_fopen_ok && $filter_ok && $gettext_ok && $parse_ini_ok) { ?>
403 <h3>Bottom Line: Yes, you can!</h3>
404 <p><em>For most feeds, it'll run with no problems.</em> There are certain languages that you might have a hard time with though.</p>
405 <?php if (!$frominstall) { ?>
406 <p>You can download the latest version of <?php echo $app_name; ?> from <a href="http://wallabag.org/download">wallabag.org</a>.</p>
407 <p>If you already have done that, you should access <a href="index.php">the index.php file</a> of your installation to configure and/or start using wallabag</p>
408 <?php } else { ?>
409 <p>You can now <a href="../index.php">return to the installation section</a>.</p>
410 <?php } ?>
411 <p><strong>Note</strong>: Passing this test does not guarantee that <?php echo $app_name; ?> will run on your webhost &mdash; it only ensures that the basic requirements have been addressed. If you experience any problems, please let us know.</p>
412 <?php } else { ?>
413 <h3>Bottom Line: We're sorry…</h3>
414 <p><em>Your webhost does not support the minimum requirements for <?php echo $app_name; ?>.</em> It may be a good idea to contact your webhost and point them to the results of this test. They may be able to enable/install the required components.</p>
415 <?php } ?>
416 </div>
417
418 <div class="chunk">
419 <p class="footnote">This compatibility test has been borrowed (and slightly adapted by <a href="http://fivefilters.org/content-only/">fivefilters.org</a>) from the one supplied by <a href="http://simplepie.org/">SimplePie.org</a>.</a></p>
420 </div>
421
422 </div>
423
424</div>
425
426</body>
427</html>
diff --git a/bin/install b/bin/install
index be4371b1..5b93e46e 100755
--- a/bin/install
+++ b/bin/install
@@ -1,14 +1,14 @@
1#!/usr/bin/php 1#!/usr/bin/php
2<?php 2<?php
3require_once __DIR__. '/../vendor/autoload.php';
4
5use Symfony\Component\Yaml\Yaml;
6
7$parameters = Yaml::parse(file_get_contents('app/config/parameters.yml'));
3 8
4echo 'Okay, you want to install wallabag, let\'s go!'; 9echo 'Okay, you want to install wallabag, let\'s go!';
5echo "\r\n"; 10echo "\r\n";
6 11
7function generateSalt() {
8 mt_srand(microtime(true)*100000 + memory_get_usage(true));
9 return md5(uniqid(mt_rand(), true));
10}
11
12function executeQuery($handle, $sql, $params) { 12function executeQuery($handle, $sql, $params) {
13 try 13 try
14 { 14 {
@@ -26,7 +26,7 @@ $configFile = 'app/config/config.inc.php';
26$dbFile = 'app/db/poche.sqlite'; 26$dbFile = 'app/db/poche.sqlite';
27$username = 'wallabag'; 27$username = 'wallabag';
28$password = 'wallabag'; 28$password = 'wallabag';
29$salt = generateSalt(); 29$salt = $parameters['parameters']['secret'];
30$defaultLanguage = 'en_EN.UTF8'; 30$defaultLanguage = 'en_EN.UTF8';
31 31
32if (!copy('app/config/config.inc.default.php', $configFile)) { 32if (!copy('app/config/config.inc.default.php', $configFile)) {
diff --git a/bin/mysql.sql b/bin/mysql.sql
deleted file mode 100644
index 1b65cd35..00000000
--- a/bin/mysql.sql
+++ /dev/null
@@ -1,49 +0,0 @@
1CREATE TABLE IF NOT EXISTS `config` (
2 `id` int(11) NOT NULL AUTO_INCREMENT,
3 `name` varchar(255) NOT NULL,
4 `value` varchar(255) NOT NULL,
5 PRIMARY KEY (`id`)
6) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
7
8CREATE TABLE IF NOT EXISTS `entries` (
9 `id` int(11) NOT NULL AUTO_INCREMENT,
10 `title` varchar(255) NOT NULL,
11 `url` varchar(255) NOT NULL,
12 `is_read` tinyint(1) NOT NULL DEFAULT 0,
13 `is_fav` tinyint(1) NOT NULL DEFAULT 0,
14 `content` blob NOT NULL,
15 `user_id` int(11) NOT NULL,
16 PRIMARY KEY (`id`)
17) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
18
19CREATE TABLE IF NOT EXISTS `users` (
20 `id` int(11) NOT NULL AUTO_INCREMENT,
21 `username` varchar(255) NOT NULL,
22 `password` varchar(255) NOT NULL,
23 `name` varchar(255) NOT NULL,
24 `email` varchar(255) NOT NULL,
25 PRIMARY KEY (`id`)
26) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
27
28CREATE TABLE IF NOT EXISTS `users_config` (
29 `id` int(11) NOT NULL AUTO_INCREMENT,
30 `user_id` int(11) NOT NULL,
31 `name` varchar(255) NOT NULL,
32 `value` varchar(255) NOT NULL,
33 PRIMARY KEY (`id`)
34) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
35
36CREATE TABLE IF NOT EXISTS `tags` (
37 `id` int(11) NOT NULL AUTO_INCREMENT,
38 `value` varchar(255) NOT NULL,
39 PRIMARY KEY (`id`)
40) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
41
42CREATE TABLE IF NOT EXISTS `tags_entries` (
43 `id` int(11) NOT NULL AUTO_INCREMENT,
44 `entry_id` int(11) NOT NULL,
45 `tag_id` int(11) NOT NULL,
46 FOREIGN KEY(entry_id) REFERENCES entries(id) ON DELETE CASCADE,
47 FOREIGN KEY(tag_id) REFERENCES tags(id) ON DELETE CASCADE,
48 PRIMARY KEY (`id`)
49) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
diff --git a/bin/postgres.sql b/bin/postgres.sql
deleted file mode 100644
index 1d73dfcb..00000000
--- a/bin/postgres.sql
+++ /dev/null
@@ -1,41 +0,0 @@
1CREATE TABLE IF NOT EXISTS config (
2 id bigserial primary key,
3 name varchar(255) NOT NULL,
4 value varchar(255) NOT NULL
5);
6
7CREATE TABLE IF NOT EXISTS entries (
8 id bigserial primary key,
9 title varchar(255) NOT NULL,
10 url varchar(255) NOT NULL,
11 is_read boolean DEFAULT false,
12 is_fav boolean DEFAULT false,
13 content TEXT,
14 user_id integer NOT NULL
15);
16
17CREATE TABLE IF NOT EXISTS users (
18 id bigserial primary key,
19 username varchar(255) NOT NULL,
20 password varchar(255) NOT NULL,
21 name varchar(255) NOT NULL,
22 email varchar(255) NOT NULL
23);
24
25CREATE TABLE IF NOT EXISTS users_config (
26 id bigserial primary key,
27 user_id integer NOT NULL,
28 name varchar(255) NOT NULL,
29 value varchar(255) NOT NULL
30);
31
32CREATE TABLE IF NOT EXISTS tags (
33 id bigserial primary key,
34 value varchar(255) NOT NULL
35);
36
37CREATE TABLE IF NOT EXISTS tags_entries (
38 id bigserial primary key,
39 entry_id integer NOT NULL,
40 tag_id integer NOT NULL
41)
diff --git a/bin/test b/bin/test
deleted file mode 100755
index 67efc630..00000000
--- a/bin/test
+++ /dev/null
@@ -1,4 +0,0 @@
1#!/bin/sh
2set -e
3
4./bin/phpunit \ No newline at end of file
diff --git a/bin/update b/bin/update
deleted file mode 100755
index fa579762..00000000
--- a/bin/update
+++ /dev/null
@@ -1,4 +0,0 @@
1#!/bin/sh
2set -e
3
4# What can we do when we update vendor? \ No newline at end of file
diff --git a/composer.json b/composer.json
index c0c6ac24..927b4230 100644
--- a/composer.json
+++ b/composer.json
@@ -53,10 +53,18 @@
53 } 53 }
54 ], 54 ],
55 "require": { 55 "require": {
56 "twig/twig": "1.*", 56 "php": ">=5.3.3",
57 "twig/extensions": "1.0.*", 57 "symfony/symfony": "2.6.*",
58 "doctrine/orm": "~2.2,>=2.2.3",
59 "doctrine/doctrine-bundle": "~1.2",
60 "twig/extensions": "~1.0",
61 "symfony/assetic-bundle": "~2.3",
62 "symfony/swiftmailer-bundle": "~2.3",
63 "symfony/monolog-bundle": "~2.4",
64 "sensio/distribution-bundle": "~3.0.12",
65 "sensio/framework-extra-bundle": "~3.0",
66 "incenteev/composer-parameter-handler": "~2.0",
58 "umpirsky/twig-gettext-extractor": "1.1.*", 67 "umpirsky/twig-gettext-extractor": "1.1.*",
59 "fabpot/goutte": "2.0.*@dev",
60 "ezyang/htmlpurifier": "dev-master", 68 "ezyang/htmlpurifier": "dev-master",
61 "mgargano/simplehtmldom": "dev-master", 69 "mgargano/simplehtmldom": "dev-master",
62 "robmorgan/phinx": "*", 70 "robmorgan/phinx": "*",
@@ -72,15 +80,44 @@
72 "wallabag/Fivefilters_Libraries": "dev-master" 80 "wallabag/Fivefilters_Libraries": "dev-master"
73 }, 81 },
74 "require-dev": { 82 "require-dev": {
83 "sensio/generator-bundle": "~2.3",
75 "phpunit/phpunit": "~3.7" 84 "phpunit/phpunit": "~3.7"
76 }, 85 },
77 "scripts": { 86 "scripts": {
87 "post-root-package-install": [
88 "SymfonyStandard\\Composer::hookRootPackageInstall"
89 ],
78 "post-install-cmd": [ 90 "post-install-cmd": [
91 "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
92 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
93 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
94 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
95 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
96 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::removeSymfonyStandardFiles",
79 "bin/install" 97 "bin/install"
98 ],
99 "post-update-cmd": [
100 "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
101 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
102 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
103 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
104 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
105 "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::removeSymfonyStandardFiles"
80 ] 106 ]
81 }, 107 },
108 "extra": {
109 "symfony-app-dir": "app",
110 "symfony-web-dir": "web",
111 "symfony-assets-install": "relative",
112 "incenteev-parameters": {
113 "file": "app/config/parameters.yml"
114 },
115 "branch-alias": {
116 "dev-master": "2.6-dev"
117 }
118 },
82 "autoload": { 119 "autoload": {
83 "psr-4": { "Wallabag\\": "src/Wallabag" } 120 "psr-0": { "": "src/", "SymfonyStandard": "app/" }
84 }, 121 },
85 "config": { 122 "config": {
86 "bin-dir": "bin" 123 "bin-dir": "bin"
diff --git a/composer.lock b/composer.lock
index f2c17481..51e43826 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,82 +4,110 @@
4 "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 4 "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5 "This file is @generated automatically" 5 "This file is @generated automatically"
6 ], 6 ],
7 "hash": "6fa216371c9d7577a117526db6f07407", 7 "hash": "0d10cf7cb89589054d7b855026a7bdf5",
8 "packages": [ 8 "packages": [
9 { 9 {
10 "name": "ezyang/htmlpurifier", 10 "name": "doctrine/annotations",
11 "version": "dev-master", 11 "version": "v1.2.3",
12 "source": { 12 "source": {
13 "type": "git", 13 "type": "git",
14 "url": "https://github.com/ezyang/htmlpurifier.git", 14 "url": "https://github.com/doctrine/annotations.git",
15 "reference": "0c3e68dd0357321b5a5818c3aa832b1cc24a4b1f" 15 "reference": "eeda578cbe24a170331a1cfdf78be723412df7a4"
16 }, 16 },
17 "dist": { 17 "dist": {
18 "type": "zip", 18 "type": "zip",
19 "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/0c3e68dd0357321b5a5818c3aa832b1cc24a4b1f", 19 "url": "https://api.github.com/repos/doctrine/annotations/zipball/eeda578cbe24a170331a1cfdf78be723412df7a4",
20 "reference": "0c3e68dd0357321b5a5818c3aa832b1cc24a4b1f", 20 "reference": "eeda578cbe24a170331a1cfdf78be723412df7a4",
21 "shasum": "" 21 "shasum": ""
22 }, 22 },
23 "require": { 23 "require": {
24 "php": ">=5.2" 24 "doctrine/lexer": "1.*",
25 "php": ">=5.3.2"
26 },
27 "require-dev": {
28 "doctrine/cache": "1.*",
29 "phpunit/phpunit": "4.*"
25 }, 30 },
26 "type": "library", 31 "type": "library",
32 "extra": {
33 "branch-alias": {
34 "dev-master": "1.3.x-dev"
35 }
36 },
27 "autoload": { 37 "autoload": {
28 "psr-0": { 38 "psr-0": {
29 "HTMLPurifier": "library/" 39 "Doctrine\\Common\\Annotations\\": "lib/"
30 }, 40 }
31 "files": [
32 "library/HTMLPurifier.composer.php"
33 ]
34 }, 41 },
35 "notification-url": "https://packagist.org/downloads/", 42 "notification-url": "https://packagist.org/downloads/",
36 "license": [ 43 "license": [
37 "LGPL" 44 "MIT"
38 ], 45 ],
39 "authors": [ 46 "authors": [
40 { 47 {
41 "name": "Edward Z. Yang", 48 "name": "Roman Borschel",
42 "email": "admin@htmlpurifier.org", 49 "email": "roman@code-factory.org"
43 "homepage": "http://ezyang.com" 50 },
51 {
52 "name": "Benjamin Eberlei",
53 "email": "kontakt@beberlei.de"
54 },
55 {
56 "name": "Guilherme Blanco",
57 "email": "guilhermeblanco@gmail.com"
58 },
59 {
60 "name": "Jonathan Wage",
61 "email": "jonwage@gmail.com"
62 },
63 {
64 "name": "Johannes Schmitt",
65 "email": "schmittjoh@gmail.com"
44 } 66 }
45 ], 67 ],
46 "description": "Standards compliant HTML filter written in PHP", 68 "description": "Docblock Annotations Parser",
47 "homepage": "http://htmlpurifier.org/", 69 "homepage": "http://www.doctrine-project.org",
48 "keywords": [ 70 "keywords": [
49 "html" 71 "annotations",
72 "docblock",
73 "parser"
50 ], 74 ],
51 "time": "2014-12-09 02:30:54" 75 "time": "2014-12-20 20:49:38"
52 }, 76 },
53 { 77 {
54 "name": "fabpot/goutte", 78 "name": "doctrine/cache",
55 "version": "dev-master", 79 "version": "v1.4.0",
56 "source": { 80 "source": {
57 "type": "git", 81 "type": "git",
58 "url": "https://github.com/FriendsOfPHP/Goutte.git", 82 "url": "https://github.com/doctrine/cache.git",
59 "reference": "65ab61eae03d670b93a9044ad2328eb81aa1bde5" 83 "reference": "2346085d2b027b233ae1d5de59b07440b9f288c8"
60 }, 84 },
61 "dist": { 85 "dist": {
62 "type": "zip", 86 "type": "zip",
63 "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/65ab61eae03d670b93a9044ad2328eb81aa1bde5", 87 "url": "https://api.github.com/repos/doctrine/cache/zipball/2346085d2b027b233ae1d5de59b07440b9f288c8",
64 "reference": "65ab61eae03d670b93a9044ad2328eb81aa1bde5", 88 "reference": "2346085d2b027b233ae1d5de59b07440b9f288c8",
65 "shasum": "" 89 "shasum": ""
66 }, 90 },
67 "require": { 91 "require": {
68 "guzzlehttp/guzzle": ">=4,<6", 92 "php": ">=5.3.2"
69 "php": ">=5.4.0",
70 "symfony/browser-kit": "~2.1",
71 "symfony/css-selector": "~2.1",
72 "symfony/dom-crawler": "~2.1"
73 }, 93 },
74 "type": "application", 94 "conflict": {
95 "doctrine/common": ">2.2,<2.4"
96 },
97 "require-dev": {
98 "phpunit/phpunit": ">=3.7",
99 "predis/predis": "~0.8",
100 "satooshi/php-coveralls": "~0.6"
101 },
102 "type": "library",
75 "extra": { 103 "extra": {
76 "branch-alias": { 104 "branch-alias": {
77 "dev-master": "2.0-dev" 105 "dev-master": "1.4.x-dev"
78 } 106 }
79 }, 107 },
80 "autoload": { 108 "autoload": {
81 "psr-4": { 109 "psr-0": {
82 "Goutte\\": "Goutte" 110 "Doctrine\\Common\\Cache\\": "lib/"
83 } 111 }
84 }, 112 },
85 "notification-url": "https://packagist.org/downloads/", 113 "notification-url": "https://packagist.org/downloads/",
@@ -88,49 +116,60 @@
88 ], 116 ],
89 "authors": [ 117 "authors": [
90 { 118 {
91 "name": "Fabien Potencier", 119 "name": "Roman Borschel",
92 "email": "fabien@symfony.com" 120 "email": "roman@code-factory.org"
121 },
122 {
123 "name": "Benjamin Eberlei",
124 "email": "kontakt@beberlei.de"
125 },
126 {
127 "name": "Guilherme Blanco",
128 "email": "guilhermeblanco@gmail.com"
129 },
130 {
131 "name": "Jonathan Wage",
132 "email": "jonwage@gmail.com"
133 },
134 {
135 "name": "Johannes Schmitt",
136 "email": "schmittjoh@gmail.com"
93 } 137 }
94 ], 138 ],
95 "description": "A simple PHP Web Scraper", 139 "description": "Caching library offering an object-oriented API for many cache backends",
96 "homepage": "https://github.com/FriendsOfPHP/Goutte", 140 "homepage": "http://www.doctrine-project.org",
97 "keywords": [ 141 "keywords": [
98 "scraper" 142 "cache",
143 "caching"
99 ], 144 ],
100 "time": "2014-11-28 09:48:17" 145 "time": "2015-01-15 20:38:55"
101 }, 146 },
102 { 147 {
103 "name": "guzzlehttp/guzzle", 148 "name": "doctrine/collections",
104 "version": "5.1.0", 149 "version": "v1.2",
105 "source": { 150 "source": {
106 "type": "git", 151 "type": "git",
107 "url": "https://github.com/guzzle/guzzle.git", 152 "url": "https://github.com/doctrine/collections.git",
108 "reference": "f1085bb4e023766a66b7b051914ec73bdf7202b5" 153 "reference": "b99c5c46c87126201899afe88ec490a25eedd6a2"
109 }, 154 },
110 "dist": { 155 "dist": {
111 "type": "zip", 156 "type": "zip",
112 "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f1085bb4e023766a66b7b051914ec73bdf7202b5", 157 "url": "https://api.github.com/repos/doctrine/collections/zipball/b99c5c46c87126201899afe88ec490a25eedd6a2",
113 "reference": "f1085bb4e023766a66b7b051914ec73bdf7202b5", 158 "reference": "b99c5c46c87126201899afe88ec490a25eedd6a2",
114 "shasum": "" 159 "shasum": ""
115 }, 160 },
116 "require": { 161 "require": {
117 "guzzlehttp/ringphp": "~1.0", 162 "php": ">=5.3.2"
118 "php": ">=5.4.0"
119 },
120 "require-dev": {
121 "ext-curl": "*",
122 "phpunit/phpunit": "~4.0",
123 "psr/log": "~1.0"
124 }, 163 },
125 "type": "library", 164 "type": "library",
126 "extra": { 165 "extra": {
127 "branch-alias": { 166 "branch-alias": {
128 "dev-master": "5.0-dev" 167 "dev-master": "1.2.x-dev"
129 } 168 }
130 }, 169 },
131 "autoload": { 170 "autoload": {
132 "psr-4": { 171 "psr-0": {
133 "GuzzleHttp\\": "src/" 172 "Doctrine\\Common\\Collections\\": "lib/"
134 } 173 }
135 }, 174 },
136 "notification-url": "https://packagist.org/downloads/", 175 "notification-url": "https://packagist.org/downloads/",
@@ -139,59 +178,74 @@
139 ], 178 ],
140 "authors": [ 179 "authors": [
141 { 180 {
142 "name": "Michael Dowling", 181 "name": "Jonathan Wage",
143 "email": "mtdowling@gmail.com", 182 "email": "jonwage@gmail.com",
144 "homepage": "https://github.com/mtdowling" 183 "homepage": "http://www.jwage.com/",
184 "role": "Creator"
185 },
186 {
187 "name": "Guilherme Blanco",
188 "email": "guilhermeblanco@gmail.com",
189 "homepage": "http://www.instaclick.com"
190 },
191 {
192 "name": "Roman Borschel",
193 "email": "roman@code-factory.org"
194 },
195 {
196 "name": "Benjamin Eberlei",
197 "email": "kontakt@beberlei.de"
198 },
199 {
200 "name": "Johannes Schmitt",
201 "email": "schmittjoh@gmail.com",
202 "homepage": "https://github.com/schmittjoh",
203 "role": "Developer of wrapped JMSSerializerBundle"
145 } 204 }
146 ], 205 ],
147 "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", 206 "description": "Collections Abstraction library",
148 "homepage": "http://guzzlephp.org/", 207 "homepage": "http://www.doctrine-project.org",
149 "keywords": [ 208 "keywords": [
150 "client", 209 "array",
151 "curl", 210 "collections",
152 "framework", 211 "iterator"
153 "http", 212 ],
154 "http client", 213 "time": "2014-02-03 23:07:43"
155 "rest",
156 "web service"
157 ],
158 "time": "2014-12-19 20:27:15"
159 }, 214 },
160 { 215 {
161 "name": "guzzlehttp/ringphp", 216 "name": "doctrine/common",
162 "version": "1.0.5", 217 "version": "v2.4.2",
163 "source": { 218 "source": {
164 "type": "git", 219 "type": "git",
165 "url": "https://github.com/guzzle/RingPHP.git", 220 "url": "https://github.com/doctrine/common.git",
166 "reference": "a903f51b692427318bc813217c0e6505287e79a4" 221 "reference": "5db6ab40e4c531f14dad4ca96a394dfce5d4255b"
167 }, 222 },
168 "dist": { 223 "dist": {
169 "type": "zip", 224 "type": "zip",
170 "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/a903f51b692427318bc813217c0e6505287e79a4", 225 "url": "https://api.github.com/repos/doctrine/common/zipball/5db6ab40e4c531f14dad4ca96a394dfce5d4255b",
171 "reference": "a903f51b692427318bc813217c0e6505287e79a4", 226 "reference": "5db6ab40e4c531f14dad4ca96a394dfce5d4255b",
172 "shasum": "" 227 "shasum": ""
173 }, 228 },
174 "require": { 229 "require": {
175 "guzzlehttp/streams": "~3.0", 230 "doctrine/annotations": "1.*",
176 "php": ">=5.4.0", 231 "doctrine/cache": "1.*",
177 "react/promise": "~2.0" 232 "doctrine/collections": "1.*",
233 "doctrine/inflector": "1.*",
234 "doctrine/lexer": "1.*",
235 "php": ">=5.3.2"
178 }, 236 },
179 "require-dev": { 237 "require-dev": {
180 "ext-curl": "*", 238 "phpunit/phpunit": "~3.7"
181 "phpunit/phpunit": "~4.0"
182 },
183 "suggest": {
184 "ext-curl": "Guzzle will use specific adapters if cURL is present"
185 }, 239 },
186 "type": "library", 240 "type": "library",
187 "extra": { 241 "extra": {
188 "branch-alias": { 242 "branch-alias": {
189 "dev-master": "1.0-dev" 243 "dev-master": "2.4.x-dev"
190 } 244 }
191 }, 245 },
192 "autoload": { 246 "autoload": {
193 "psr-4": { 247 "psr-0": {
194 "GuzzleHttp\\Ring\\": "src/" 248 "Doctrine\\Common\\": "lib/"
195 } 249 }
196 }, 250 },
197 "notification-url": "https://packagist.org/downloads/", 251 "notification-url": "https://packagist.org/downloads/",
@@ -200,42 +254,79 @@
200 ], 254 ],
201 "authors": [ 255 "authors": [
202 { 256 {
203 "name": "Michael Dowling", 257 "name": "Jonathan Wage",
204 "email": "mtdowling@gmail.com", 258 "email": "jonwage@gmail.com",
205 "homepage": "https://github.com/mtdowling" 259 "homepage": "http://www.jwage.com/",
260 "role": "Creator"
261 },
262 {
263 "name": "Guilherme Blanco",
264 "email": "guilhermeblanco@gmail.com",
265 "homepage": "http://www.instaclick.com"
266 },
267 {
268 "name": "Roman Borschel",
269 "email": "roman@code-factory.org"
270 },
271 {
272 "name": "Benjamin Eberlei",
273 "email": "kontakt@beberlei.de"
274 },
275 {
276 "name": "Johannes Schmitt",
277 "email": "schmittjoh@gmail.com",
278 "homepage": "https://github.com/schmittjoh",
279 "role": "Developer of wrapped JMSSerializerBundle"
206 } 280 }
207 ], 281 ],
208 "time": "2014-12-11 05:50:32" 282 "description": "Common Library for Doctrine projects",
283 "homepage": "http://www.doctrine-project.org",
284 "keywords": [
285 "annotations",
286 "collections",
287 "eventmanager",
288 "persistence",
289 "spl"
290 ],
291 "time": "2014-05-21 19:28:51"
209 }, 292 },
210 { 293 {
211 "name": "guzzlehttp/streams", 294 "name": "doctrine/dbal",
212 "version": "3.0.0", 295 "version": "v2.5.1",
213 "source": { 296 "source": {
214 "type": "git", 297 "type": "git",
215 "url": "https://github.com/guzzle/streams.git", 298 "url": "https://github.com/doctrine/dbal.git",
216 "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5" 299 "reference": "628c2256b646ae2417d44e063bce8aec5199d48d"
217 }, 300 },
218 "dist": { 301 "dist": {
219 "type": "zip", 302 "type": "zip",
220 "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", 303 "url": "https://api.github.com/repos/doctrine/dbal/zipball/628c2256b646ae2417d44e063bce8aec5199d48d",
221 "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", 304 "reference": "628c2256b646ae2417d44e063bce8aec5199d48d",
222 "shasum": "" 305 "shasum": ""
223 }, 306 },
224 "require": { 307 "require": {
225 "php": ">=5.4.0" 308 "doctrine/common": ">=2.4,<2.6-dev",
309 "php": ">=5.3.2"
226 }, 310 },
227 "require-dev": { 311 "require-dev": {
228 "phpunit/phpunit": "~4.0" 312 "phpunit/phpunit": "4.*",
313 "symfony/console": "2.*"
314 },
315 "suggest": {
316 "symfony/console": "For helpful console commands such as SQL execution and import of files."
229 }, 317 },
318 "bin": [
319 "bin/doctrine-dbal"
320 ],
230 "type": "library", 321 "type": "library",
231 "extra": { 322 "extra": {
232 "branch-alias": { 323 "branch-alias": {
233 "dev-master": "3.0-dev" 324 "dev-master": "2.5.x-dev"
234 } 325 }
235 }, 326 },
236 "autoload": { 327 "autoload": {
237 "psr-4": { 328 "psr-0": {
238 "GuzzleHttp\\Stream\\": "src/" 329 "Doctrine\\DBAL\\": "lib/"
239 } 330 }
240 }, 331 },
241 "notification-url": "https://packagist.org/downloads/", 332 "notification-url": "https://packagist.org/downloads/",
@@ -244,135 +335,156 @@
244 ], 335 ],
245 "authors": [ 336 "authors": [
246 { 337 {
247 "name": "Michael Dowling", 338 "name": "Roman Borschel",
248 "email": "mtdowling@gmail.com", 339 "email": "roman@code-factory.org"
249 "homepage": "https://github.com/mtdowling" 340 },
341 {
342 "name": "Benjamin Eberlei",
343 "email": "kontakt@beberlei.de"
344 },
345 {
346 "name": "Guilherme Blanco",
347 "email": "guilhermeblanco@gmail.com"
348 },
349 {
350 "name": "Jonathan Wage",
351 "email": "jonwage@gmail.com"
250 } 352 }
251 ], 353 ],
252 "description": "Provides a simple abstraction over streams of data", 354 "description": "Database Abstraction Layer",
253 "homepage": "http://guzzlephp.org/", 355 "homepage": "http://www.doctrine-project.org",
254 "keywords": [ 356 "keywords": [
255 "Guzzle", 357 "database",
256 "stream" 358 "dbal",
359 "persistence",
360 "queryobject"
257 ], 361 ],
258 "time": "2014-10-12 19:18:40" 362 "time": "2015-01-12 21:52:47"
259 }, 363 },
260 { 364 {
261 "name": "htmlawed/htmlawed", 365 "name": "doctrine/doctrine-bundle",
262 "version": "dev-master", 366 "version": "v1.3.0",
263 "source": { 367 "source": {
264 "type": "git", 368 "type": "git",
265 "url": "https://github.com/kesar/HTMLawed.git", 369 "url": "https://github.com/doctrine/DoctrineBundle.git",
266 "reference": "9d292af5f4c288aa68f38b87f5d88c8214f5f233" 370 "reference": "3beb3a780485ab01f86941f4892cd23ef8c39c6b"
267 }, 371 },
268 "dist": { 372 "dist": {
269 "type": "zip", 373 "type": "zip",
270 "url": "https://api.github.com/repos/kesar/HTMLawed/zipball/9d292af5f4c288aa68f38b87f5d88c8214f5f233", 374 "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/3beb3a780485ab01f86941f4892cd23ef8c39c6b",
271 "reference": "9d292af5f4c288aa68f38b87f5d88c8214f5f233", 375 "reference": "3beb3a780485ab01f86941f4892cd23ef8c39c6b",
272 "shasum": "" 376 "shasum": ""
273 }, 377 },
274 "require": { 378 "require": {
275 "php": ">4.4.0" 379 "doctrine/dbal": "~2.3",
276 }, 380 "doctrine/doctrine-cache-bundle": "~1.0",
277 "type": "library", 381 "jdorn/sql-formatter": "~1.1",
278 "autoload": { 382 "php": ">=5.3.2",
279 "files": [ 383 "symfony/doctrine-bridge": "~2.2",
280 "htmLawed.php" 384 "symfony/framework-bundle": "~2.2"
281 ]
282 }, 385 },
283 "notification-url": "https://packagist.org/downloads/", 386 "require-dev": {
284 "license": [ 387 "doctrine/orm": "~2.3",
285 "GPL-2.0+", 388 "phpunit/php-code-coverage": "~1.2",
286 "LGPL-3.0" 389 "phpunit/phpunit": "~3.7",
287 ], 390 "phpunit/phpunit-mock-objects": "~1.2",
288 "description": "htmLawed - Process text with HTML markup to make it more compliant with HTML standards and administrative policies", 391 "satooshi/php-coveralls": "~0.6.1",
289 "homepage": "http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/", 392 "symfony/validator": "~2.2",
290 "keywords": [ 393 "symfony/yaml": "~2.2",
291 "HTMLtidy", 394 "twig/twig": "~1"
292 "html",
293 "sanitize",
294 "strip",
295 "tags"
296 ],
297 "time": "2014-01-05 13:06:52"
298 },
299 {
300 "name": "mgargano/simplehtmldom",
301 "version": "dev-master",
302 "source": {
303 "type": "git",
304 "url": "https://github.com/matstars/simplehtmldom.git",
305 "reference": "37fb0d7c1bda45c5a4cf14fdef56c1edf6aa42be"
306 }, 395 },
307 "dist": { 396 "suggest": {
308 "type": "zip", 397 "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.",
309 "url": "https://api.github.com/repos/matstars/simplehtmldom/zipball/37fb0d7c1bda45c5a4cf14fdef56c1edf6aa42be", 398 "symfony/web-profiler-bundle": "to use the data collector"
310 "reference": "37fb0d7c1bda45c5a4cf14fdef56c1edf6aa42be",
311 "shasum": ""
312 }, 399 },
313 "require": { 400 "type": "symfony-bundle",
314 "php": ">=5.3.0" 401 "extra": {
402 "branch-alias": {
403 "dev-master": "1.3.x-dev"
404 }
315 }, 405 },
316 "type": "library",
317 "autoload": { 406 "autoload": {
318 "psr-0": { 407 "psr-4": {
319 "SimpleHtmlDom": "src/" 408 "Doctrine\\Bundle\\DoctrineBundle\\": ""
320 }, 409 }
321 "files": [
322 "src/simple_html_dom.php"
323 ]
324 }, 410 },
325 "notification-url": "https://packagist.org/downloads/", 411 "notification-url": "https://packagist.org/downloads/",
326 "license": [ 412 "license": [
327 "The MIT License" 413 "MIT"
328 ], 414 ],
329 "authors": [ 415 "authors": [
330 { 416 {
331 "name": "S.C. Chen", 417 "name": "Symfony Community",
332 "email": "me578022@gmail.com", 418 "homepage": "http://symfony.com/contributors"
333 "homepage": "http://simplehtmldom.sourceforge.net/", 419 },
334 "role": "Lead Developer" 420 {
421 "name": "Benjamin Eberlei",
422 "email": "kontakt@beberlei.de"
423 },
424 {
425 "name": "Doctrine Project",
426 "homepage": "http://www.doctrine-project.org/"
427 },
428 {
429 "name": "Fabien Potencier",
430 "email": "fabien@symfony.com"
335 } 431 }
336 ], 432 ],
337 "description": "Composer package that gives you access to and (unlike all the others at this time) autoloads S.C. Chen's PHP Simple HTML DOM Parser Library", 433 "description": "Symfony DoctrineBundle",
338 "homepage": "http://simplehtmldom.sourceforge.net/", 434 "homepage": "http://www.doctrine-project.org",
339 "keywords": [ 435 "keywords": [
340 "Simple", 436 "database",
341 "dom", 437 "dbal",
342 "html" 438 "orm",
439 "persistence"
343 ], 440 ],
344 "time": "2014-01-05 18:17:34" 441 "time": "2014-11-28 08:32:03"
345 }, 442 },
346 { 443 {
347 "name": "react/promise", 444 "name": "doctrine/doctrine-cache-bundle",
348 "version": "v2.2.0", 445 "version": "v1.0.1",
446 "target-dir": "Doctrine/Bundle/DoctrineCacheBundle",
349 "source": { 447 "source": {
350 "type": "git", 448 "type": "git",
351 "url": "https://github.com/reactphp/promise.git", 449 "url": "https://github.com/doctrine/DoctrineCacheBundle.git",
352 "reference": "365fcee430dfa4ace1fbc75737ca60ceea7eeeef" 450 "reference": "e4b6f810aa047f9cbfe41c3d6a3d7e83d7477a9d"
353 }, 451 },
354 "dist": { 452 "dist": {
355 "type": "zip", 453 "type": "zip",
356 "url": "https://api.github.com/repos/reactphp/promise/zipball/365fcee430dfa4ace1fbc75737ca60ceea7eeeef", 454 "url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/e4b6f810aa047f9cbfe41c3d6a3d7e83d7477a9d",
357 "reference": "365fcee430dfa4ace1fbc75737ca60ceea7eeeef", 455 "reference": "e4b6f810aa047f9cbfe41c3d6a3d7e83d7477a9d",
358 "shasum": "" 456 "shasum": ""
359 }, 457 },
360 "require": { 458 "require": {
361 "php": ">=5.4.0" 459 "doctrine/cache": "~1.3",
460 "doctrine/inflector": "~1.0",
461 "php": ">=5.3.2",
462 "symfony/doctrine-bridge": "~2.2",
463 "symfony/framework-bundle": "~2.2",
464 "symfony/security": "~2.2"
362 }, 465 },
363 "type": "library", 466 "require-dev": {
467 "instaclick/coding-standard": "~1.1",
468 "instaclick/object-calisthenics-sniffs": "dev-master",
469 "instaclick/symfony2-coding-standard": "dev-remaster",
470 "phpunit/phpunit": "~3.7",
471 "satooshi/php-coveralls": "~0.6.1",
472 "squizlabs/php_codesniffer": "dev-master",
473 "symfony/console": "~2.2",
474 "symfony/finder": "~2.2",
475 "symfony/validator": "~2.2",
476 "symfony/yaml": "~2.2"
477 },
478 "type": "symfony-bundle",
364 "extra": { 479 "extra": {
365 "branch-alias": { 480 "branch-alias": {
366 "dev-master": "2.0-dev" 481 "dev-master": "1.0.x-dev"
367 } 482 }
368 }, 483 },
369 "autoload": { 484 "autoload": {
370 "psr-4": { 485 "psr-0": {
371 "React\\Promise\\": "src/" 486 "Doctrine\\Bundle\\DoctrineCacheBundle": ""
372 }, 487 }
373 "files": [
374 "src/functions_include.php"
375 ]
376 }, 488 },
377 "notification-url": "https://packagist.org/downloads/", 489 "notification-url": "https://packagist.org/downloads/",
378 "license": [ 490 "license": [
@@ -380,45 +492,67 @@
380 ], 492 ],
381 "authors": [ 493 "authors": [
382 { 494 {
383 "name": "Jan Sorgalla", 495 "name": "Symfony Community",
384 "email": "jsorgalla@googlemail.com" 496 "homepage": "http://symfony.com/contributors"
497 },
498 {
499 "name": "Benjamin Eberlei",
500 "email": "kontakt@beberlei.de"
501 },
502 {
503 "name": "Fabio B. Silva",
504 "email": "fabio.bat.silva@gmail.com"
505 },
506 {
507 "name": "Guilherme Blanco",
508 "email": "guilhermeblanco@hotmail.com"
509 },
510 {
511 "name": "Doctrine Project",
512 "homepage": "http://www.doctrine-project.org/"
513 },
514 {
515 "name": "Fabien Potencier",
516 "email": "fabien@symfony.com"
385 } 517 }
386 ], 518 ],
387 "description": "A lightweight implementation of CommonJS Promises/A for PHP", 519 "description": "Symfony2 Bundle for Doctrine Cache",
388 "time": "2014-12-30 13:32:42" 520 "homepage": "http://www.doctrine-project.org",
521 "keywords": [
522 "cache",
523 "caching"
524 ],
525 "time": "2014-11-28 09:43:36"
389 }, 526 },
390 { 527 {
391 "name": "robmorgan/phinx", 528 "name": "doctrine/inflector",
392 "version": "v0.4.1", 529 "version": "v1.0.1",
393 "source": { 530 "source": {
394 "type": "git", 531 "type": "git",
395 "url": "https://github.com/robmorgan/phinx.git", 532 "url": "https://github.com/doctrine/inflector.git",
396 "reference": "357210707c000f50edea802d84b74724ad122478" 533 "reference": "0bcb2e79d8571787f18b7eb036ed3d004908e604"
397 }, 534 },
398 "dist": { 535 "dist": {
399 "type": "zip", 536 "type": "zip",
400 "url": "https://api.github.com/repos/robmorgan/phinx/zipball/357210707c000f50edea802d84b74724ad122478", 537 "url": "https://api.github.com/repos/doctrine/inflector/zipball/0bcb2e79d8571787f18b7eb036ed3d004908e604",
401 "reference": "357210707c000f50edea802d84b74724ad122478", 538 "reference": "0bcb2e79d8571787f18b7eb036ed3d004908e604",
402 "shasum": "" 539 "shasum": ""
403 }, 540 },
404 "require": { 541 "require": {
405 "php": ">=5.3.2", 542 "php": ">=5.3.2"
406 "symfony/class-loader": "~2.6.0",
407 "symfony/config": "~2.6.0",
408 "symfony/console": "~2.6.0",
409 "symfony/yaml": "~2.6.0"
410 }, 543 },
411 "require-dev": { 544 "require-dev": {
412 "phpunit/phpunit": "3.7.*", 545 "phpunit/phpunit": "4.*"
413 "squizlabs/php_codesniffer": "dev-phpcs-fixer"
414 }, 546 },
415 "bin": [
416 "bin/phinx"
417 ],
418 "type": "library", 547 "type": "library",
548 "extra": {
549 "branch-alias": {
550 "dev-master": "1.0.x-dev"
551 }
552 },
419 "autoload": { 553 "autoload": {
420 "psr-0": { 554 "psr-0": {
421 "Phinx": "src/" 555 "Doctrine\\Common\\Inflector\\": "lib/"
422 } 556 }
423 }, 557 },
424 "notification-url": "https://packagist.org/downloads/", 558 "notification-url": "https://packagist.org/downloads/",
@@ -427,112 +561,131 @@
427 ], 561 ],
428 "authors": [ 562 "authors": [
429 { 563 {
430 "name": "Rob Morgan", 564 "name": "Roman Borschel",
431 "email": "robbym@gmail.com", 565 "email": "roman@code-factory.org"
432 "homepage": "http://robmorgan.id.au", 566 },
433 "role": "Lead Developer" 567 {
568 "name": "Benjamin Eberlei",
569 "email": "kontakt@beberlei.de"
570 },
571 {
572 "name": "Guilherme Blanco",
573 "email": "guilhermeblanco@gmail.com"
574 },
575 {
576 "name": "Jonathan Wage",
577 "email": "jonwage@gmail.com"
578 },
579 {
580 "name": "Johannes Schmitt",
581 "email": "schmittjoh@gmail.com"
434 } 582 }
435 ], 583 ],
436 "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.", 584 "description": "Common String Manipulations with regard to casing and singular/plural rules.",
437 "homepage": "https://phinx.org", 585 "homepage": "http://www.doctrine-project.org",
438 "keywords": [ 586 "keywords": [
439 "database", 587 "inflection",
440 "database migrations", 588 "pluralize",
441 "db", 589 "singularize",
442 "migrations", 590 "string"
443 "phinx"
444 ], 591 ],
445 "time": "2014-12-23 06:06:14" 592 "time": "2014-12-20 21:24:13"
446 }, 593 },
447 { 594 {
448 "name": "simplepie/simplepie", 595 "name": "doctrine/lexer",
449 "version": "dev-master", 596 "version": "v1.0.1",
450 "source": { 597 "source": {
451 "type": "git", 598 "type": "git",
452 "url": "https://github.com/simplepie/simplepie.git", 599 "url": "https://github.com/doctrine/lexer.git",
453 "reference": "9a9faaa0d563426cf6d897c169373c5b62f1b252" 600 "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
454 }, 601 },
455 "dist": { 602 "dist": {
456 "type": "zip", 603 "type": "zip",
457 "url": "https://api.github.com/repos/simplepie/simplepie/zipball/9a9faaa0d563426cf6d897c169373c5b62f1b252", 604 "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
458 "reference": "9a9faaa0d563426cf6d897c169373c5b62f1b252", 605 "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
459 "shasum": "" 606 "shasum": ""
460 }, 607 },
461 "require": { 608 "require": {
462 "php": ">=5.2.0" 609 "php": ">=5.3.2"
463 }, 610 },
464 "type": "library", 611 "type": "library",
612 "extra": {
613 "branch-alias": {
614 "dev-master": "1.0.x-dev"
615 }
616 },
465 "autoload": { 617 "autoload": {
466 "psr-0": { 618 "psr-0": {
467 "SimplePie": "library" 619 "Doctrine\\Common\\Lexer\\": "lib/"
468 } 620 }
469 }, 621 },
470 "notification-url": "https://packagist.org/downloads/", 622 "notification-url": "https://packagist.org/downloads/",
471 "license": [ 623 "license": [
472 "BSD-3-Clause" 624 "MIT"
473 ], 625 ],
474 "authors": [ 626 "authors": [
475 { 627 {
476 "name": "Ryan Parman", 628 "name": "Roman Borschel",
477 "homepage": "http://ryanparman.com/", 629 "email": "roman@code-factory.org"
478 "role": "Creator, alumnus developer"
479 }, 630 },
480 { 631 {
481 "name": "Geoffrey Sneddon", 632 "name": "Guilherme Blanco",
482 "homepage": "http://gsnedders.com/", 633 "email": "guilhermeblanco@gmail.com"
483 "role": "Alumnus developer"
484 }, 634 },
485 { 635 {
486 "name": "Ryan McCue", 636 "name": "Johannes Schmitt",
487 "email": "me@ryanmccue.info", 637 "email": "schmittjoh@gmail.com"
488 "homepage": "http://ryanmccue.info/",
489 "role": "Developer"
490 } 638 }
491 ], 639 ],
492 "description": "A simple Atom/RSS parsing library for PHP", 640 "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
493 "homepage": "http://simplepie.org/", 641 "homepage": "http://www.doctrine-project.org",
494 "keywords": [ 642 "keywords": [
495 "atom", 643 "lexer",
496 "feeds", 644 "parser"
497 "rss"
498 ], 645 ],
499 "time": "2014-04-28 12:50:39" 646 "time": "2014-09-09 13:34:57"
500 }, 647 },
501 { 648 {
502 "name": "symfony/browser-kit", 649 "name": "doctrine/orm",
503 "version": "v2.6.3", 650 "version": "v2.4.7",
504 "target-dir": "Symfony/Component/BrowserKit",
505 "source": { 651 "source": {
506 "type": "git", 652 "type": "git",
507 "url": "https://github.com/symfony/BrowserKit.git", 653 "url": "https://github.com/doctrine/doctrine2.git",
508 "reference": "2ecec44ed5047020c65dd6e4a4b2f3cf13ae3c04" 654 "reference": "2bc4ff3cab2ae297bcd05f2e619d42e6a7ca9e68"
509 }, 655 },
510 "dist": { 656 "dist": {
511 "type": "zip", 657 "type": "zip",
512 "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/2ecec44ed5047020c65dd6e4a4b2f3cf13ae3c04", 658 "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/2bc4ff3cab2ae297bcd05f2e619d42e6a7ca9e68",
513 "reference": "2ecec44ed5047020c65dd6e4a4b2f3cf13ae3c04", 659 "reference": "2bc4ff3cab2ae297bcd05f2e619d42e6a7ca9e68",
514 "shasum": "" 660 "shasum": ""
515 }, 661 },
516 "require": { 662 "require": {
517 "php": ">=5.3.3", 663 "doctrine/collections": "~1.1",
518 "symfony/dom-crawler": "~2.0,>=2.0.5" 664 "doctrine/dbal": "~2.4",
665 "ext-pdo": "*",
666 "php": ">=5.3.2",
667 "symfony/console": "~2.0"
519 }, 668 },
520 "require-dev": { 669 "require-dev": {
521 "symfony/css-selector": "~2.0,>=2.0.5", 670 "satooshi/php-coveralls": "dev-master",
522 "symfony/process": "~2.0,>=2.0.5" 671 "symfony/yaml": "~2.1"
523 }, 672 },
524 "suggest": { 673 "suggest": {
525 "symfony/process": "" 674 "symfony/yaml": "If you want to use YAML Metadata Mapping Driver"
526 }, 675 },
676 "bin": [
677 "bin/doctrine",
678 "bin/doctrine.php"
679 ],
527 "type": "library", 680 "type": "library",
528 "extra": { 681 "extra": {
529 "branch-alias": { 682 "branch-alias": {
530 "dev-master": "2.6-dev" 683 "dev-master": "2.4.x-dev"
531 } 684 }
532 }, 685 },
533 "autoload": { 686 "autoload": {
534 "psr-0": { 687 "psr-0": {
535 "Symfony\\Component\\BrowserKit\\": "" 688 "Doctrine\\ORM\\": "lib/"
536 } 689 }
537 }, 690 },
538 "notification-url": "https://packagist.org/downloads/", 691 "notification-url": "https://packagist.org/downloads/",
@@ -541,153 +694,146 @@
541 ], 694 ],
542 "authors": [ 695 "authors": [
543 { 696 {
544 "name": "Symfony Community", 697 "name": "Roman Borschel",
545 "homepage": "http://symfony.com/contributors" 698 "email": "roman@code-factory.org"
546 }, 699 },
547 { 700 {
548 "name": "Fabien Potencier", 701 "name": "Benjamin Eberlei",
549 "email": "fabien@symfony.com" 702 "email": "kontakt@beberlei.de"
703 },
704 {
705 "name": "Guilherme Blanco",
706 "email": "guilhermeblanco@gmail.com"
707 },
708 {
709 "name": "Jonathan Wage",
710 "email": "jonwage@gmail.com"
550 } 711 }
551 ], 712 ],
552 "description": "Symfony BrowserKit Component", 713 "description": "Object-Relational-Mapper for PHP",
553 "homepage": "http://symfony.com", 714 "homepage": "http://www.doctrine-project.org",
554 "time": "2015-01-03 08:01:59" 715 "keywords": [
716 "database",
717 "orm"
718 ],
719 "time": "2014-12-16 13:45:01"
555 }, 720 },
556 { 721 {
557 "name": "symfony/class-loader", 722 "name": "ezyang/htmlpurifier",
558 "version": "v2.6.3", 723 "version": "dev-master",
559 "target-dir": "Symfony/Component/ClassLoader",
560 "source": { 724 "source": {
561 "type": "git", 725 "type": "git",
562 "url": "https://github.com/symfony/ClassLoader.git", 726 "url": "https://github.com/ezyang/htmlpurifier.git",
563 "reference": "deac802f76910708ab50d039806cfd1866895b52" 727 "reference": "0c3e68dd0357321b5a5818c3aa832b1cc24a4b1f"
564 }, 728 },
565 "dist": { 729 "dist": {
566 "type": "zip", 730 "type": "zip",
567 "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/deac802f76910708ab50d039806cfd1866895b52", 731 "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/0c3e68dd0357321b5a5818c3aa832b1cc24a4b1f",
568 "reference": "deac802f76910708ab50d039806cfd1866895b52", 732 "reference": "0c3e68dd0357321b5a5818c3aa832b1cc24a4b1f",
569 "shasum": "" 733 "shasum": ""
570 }, 734 },
571 "require": { 735 "require": {
572 "php": ">=5.3.3" 736 "php": ">=5.2"
573 },
574 "require-dev": {
575 "symfony/finder": "~2.0,>=2.0.5"
576 }, 737 },
577 "type": "library", 738 "type": "library",
578 "extra": {
579 "branch-alias": {
580 "dev-master": "2.6-dev"
581 }
582 },
583 "autoload": { 739 "autoload": {
584 "psr-0": { 740 "psr-0": {
585 "Symfony\\Component\\ClassLoader\\": "" 741 "HTMLPurifier": "library/"
586 } 742 },
743 "files": [
744 "library/HTMLPurifier.composer.php"
745 ]
587 }, 746 },
588 "notification-url": "https://packagist.org/downloads/", 747 "notification-url": "https://packagist.org/downloads/",
589 "license": [ 748 "license": [
590 "MIT" 749 "LGPL"
591 ], 750 ],
592 "authors": [ 751 "authors": [
593 { 752 {
594 "name": "Symfony Community", 753 "name": "Edward Z. Yang",
595 "homepage": "http://symfony.com/contributors" 754 "email": "admin@htmlpurifier.org",
596 }, 755 "homepage": "http://ezyang.com"
597 {
598 "name": "Fabien Potencier",
599 "email": "fabien@symfony.com"
600 } 756 }
601 ], 757 ],
602 "description": "Symfony ClassLoader Component", 758 "description": "Standards compliant HTML filter written in PHP",
603 "homepage": "http://symfony.com", 759 "homepage": "http://htmlpurifier.org/",
604 "time": "2015-01-05 14:28:40" 760 "keywords": [
761 "html"
762 ],
763 "time": "2014-12-09 02:30:54"
605 }, 764 },
606 { 765 {
607 "name": "symfony/config", 766 "name": "htmlawed/htmlawed",
608 "version": "v2.6.3", 767 "version": "dev-master",
609 "target-dir": "Symfony/Component/Config",
610 "source": { 768 "source": {
611 "type": "git", 769 "type": "git",
612 "url": "https://github.com/symfony/Config.git", 770 "url": "https://github.com/kesar/HTMLawed.git",
613 "reference": "d94f222eff99a22ce313555b78642b4873418d56" 771 "reference": "9d292af5f4c288aa68f38b87f5d88c8214f5f233"
614 }, 772 },
615 "dist": { 773 "dist": {
616 "type": "zip", 774 "type": "zip",
617 "url": "https://api.github.com/repos/symfony/Config/zipball/d94f222eff99a22ce313555b78642b4873418d56", 775 "url": "https://api.github.com/repos/kesar/HTMLawed/zipball/9d292af5f4c288aa68f38b87f5d88c8214f5f233",
618 "reference": "d94f222eff99a22ce313555b78642b4873418d56", 776 "reference": "9d292af5f4c288aa68f38b87f5d88c8214f5f233",
619 "shasum": "" 777 "shasum": ""
620 }, 778 },
621 "require": { 779 "require": {
622 "php": ">=5.3.3", 780 "php": ">4.4.0"
623 "symfony/filesystem": "~2.3"
624 }, 781 },
625 "type": "library", 782 "type": "library",
626 "extra": {
627 "branch-alias": {
628 "dev-master": "2.6-dev"
629 }
630 },
631 "autoload": { 783 "autoload": {
632 "psr-0": { 784 "files": [
633 "Symfony\\Component\\Config\\": "" 785 "htmLawed.php"
634 } 786 ]
635 }, 787 },
636 "notification-url": "https://packagist.org/downloads/", 788 "notification-url": "https://packagist.org/downloads/",
637 "license": [ 789 "license": [
638 "MIT" 790 "GPL-2.0+",
791 "LGPL-3.0"
639 ], 792 ],
640 "authors": [ 793 "description": "htmLawed - Process text with HTML markup to make it more compliant with HTML standards and administrative policies",
641 { 794 "homepage": "http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/",
642 "name": "Symfony Community", 795 "keywords": [
643 "homepage": "http://symfony.com/contributors" 796 "HTMLtidy",
644 }, 797 "html",
645 { 798 "sanitize",
646 "name": "Fabien Potencier", 799 "strip",
647 "email": "fabien@symfony.com" 800 "tags"
648 }
649 ], 801 ],
650 "description": "Symfony Config Component", 802 "time": "2014-01-05 13:06:52"
651 "homepage": "http://symfony.com",
652 "time": "2015-01-03 08:01:59"
653 }, 803 },
654 { 804 {
655 "name": "symfony/console", 805 "name": "incenteev/composer-parameter-handler",
656 "version": "v2.6.3", 806 "version": "v2.1.0",
657 "target-dir": "Symfony/Component/Console", 807 "target-dir": "Incenteev/ParameterHandler",
658 "source": { 808 "source": {
659 "type": "git", 809 "type": "git",
660 "url": "https://github.com/symfony/Console.git", 810 "url": "https://github.com/Incenteev/ParameterHandler.git",
661 "reference": "6ac6491ff60c0e5a941db3ccdc75a07adbb61476" 811 "reference": "143272a0a09c62616a3c8011fc165a10c6b35241"
662 }, 812 },
663 "dist": { 813 "dist": {
664 "type": "zip", 814 "type": "zip",
665 "url": "https://api.github.com/repos/symfony/Console/zipball/6ac6491ff60c0e5a941db3ccdc75a07adbb61476", 815 "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/143272a0a09c62616a3c8011fc165a10c6b35241",
666 "reference": "6ac6491ff60c0e5a941db3ccdc75a07adbb61476", 816 "reference": "143272a0a09c62616a3c8011fc165a10c6b35241",
667 "shasum": "" 817 "shasum": ""
668 }, 818 },
669 "require": { 819 "require": {
670 "php": ">=5.3.3" 820 "php": ">=5.3.3",
821 "symfony/yaml": "~2.0"
671 }, 822 },
672 "require-dev": { 823 "require-dev": {
673 "psr/log": "~1.0", 824 "composer/composer": "1.0.*@dev",
674 "symfony/event-dispatcher": "~2.1", 825 "phpspec/prophecy-phpunit": "~1.0",
675 "symfony/process": "~2.1" 826 "symfony/filesystem": "~2.2"
676 },
677 "suggest": {
678 "psr/log": "For using the console logger",
679 "symfony/event-dispatcher": "",
680 "symfony/process": ""
681 }, 827 },
682 "type": "library", 828 "type": "library",
683 "extra": { 829 "extra": {
684 "branch-alias": { 830 "branch-alias": {
685 "dev-master": "2.6-dev" 831 "dev-master": "2.1.x-dev"
686 } 832 }
687 }, 833 },
688 "autoload": { 834 "autoload": {
689 "psr-0": { 835 "psr-0": {
690 "Symfony\\Component\\Console\\": "" 836 "Incenteev\\ParameterHandler": ""
691 } 837 }
692 }, 838 },
693 "notification-url": "https://packagist.org/downloads/", 839 "notification-url": "https://packagist.org/downloads/",
@@ -696,46 +842,47 @@
696 ], 842 ],
697 "authors": [ 843 "authors": [
698 { 844 {
699 "name": "Symfony Community", 845 "name": "Christophe Coevoet",
700 "homepage": "http://symfony.com/contributors" 846 "email": "stof@notk.org"
701 },
702 {
703 "name": "Fabien Potencier",
704 "email": "fabien@symfony.com"
705 } 847 }
706 ], 848 ],
707 "description": "Symfony Console Component", 849 "description": "Composer script handling your ignored parameter file",
708 "homepage": "http://symfony.com", 850 "homepage": "https://github.com/Incenteev/ParameterHandler",
709 "time": "2015-01-06 17:50:02" 851 "keywords": [
852 "parameters management"
853 ],
854 "time": "2013-12-07 10:10:39"
710 }, 855 },
711 { 856 {
712 "name": "symfony/css-selector", 857 "name": "jdorn/sql-formatter",
713 "version": "v2.6.3", 858 "version": "v1.2.17",
714 "target-dir": "Symfony/Component/CssSelector",
715 "source": { 859 "source": {
716 "type": "git", 860 "type": "git",
717 "url": "https://github.com/symfony/CssSelector.git", 861 "url": "https://github.com/jdorn/sql-formatter.git",
718 "reference": "3f80ecc614fec68d5b4a84a0703db3fdf5ce8584" 862 "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc"
719 }, 863 },
720 "dist": { 864 "dist": {
721 "type": "zip", 865 "type": "zip",
722 "url": "https://api.github.com/repos/symfony/CssSelector/zipball/3f80ecc614fec68d5b4a84a0703db3fdf5ce8584", 866 "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc",
723 "reference": "3f80ecc614fec68d5b4a84a0703db3fdf5ce8584", 867 "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc",
724 "shasum": "" 868 "shasum": ""
725 }, 869 },
726 "require": { 870 "require": {
727 "php": ">=5.3.3" 871 "php": ">=5.2.4"
872 },
873 "require-dev": {
874 "phpunit/phpunit": "3.7.*"
728 }, 875 },
729 "type": "library", 876 "type": "library",
730 "extra": { 877 "extra": {
731 "branch-alias": { 878 "branch-alias": {
732 "dev-master": "2.6-dev" 879 "dev-master": "1.3.x-dev"
733 } 880 }
734 }, 881 },
735 "autoload": { 882 "autoload": {
736 "psr-0": { 883 "classmap": [
737 "Symfony\\Component\\CssSelector\\": "" 884 "lib"
738 } 885 ]
739 }, 886 },
740 "notification-url": "https://packagist.org/downloads/", 887 "notification-url": "https://packagist.org/downloads/",
741 "license": [ 888 "license": [
@@ -743,56 +890,72 @@
743 ], 890 ],
744 "authors": [ 891 "authors": [
745 { 892 {
746 "name": "Symfony Community", 893 "name": "Jeremy Dorn",
747 "homepage": "http://symfony.com/contributors" 894 "email": "jeremy@jeremydorn.com",
748 }, 895 "homepage": "http://jeremydorn.com/"
749 {
750 "name": "Jean-François Simon",
751 "email": "jeanfrancois.simon@sensiolabs.com"
752 },
753 {
754 "name": "Fabien Potencier",
755 "email": "fabien@symfony.com"
756 } 896 }
757 ], 897 ],
758 "description": "Symfony CssSelector Component", 898 "description": "a PHP SQL highlighting library",
759 "homepage": "http://symfony.com", 899 "homepage": "https://github.com/jdorn/sql-formatter/",
760 "time": "2015-01-03 08:01:59" 900 "keywords": [
901 "highlight",
902 "sql"
903 ],
904 "time": "2014-01-12 16:20:24"
761 }, 905 },
762 { 906 {
763 "name": "symfony/dom-crawler", 907 "name": "kriswallsmith/assetic",
764 "version": "v2.6.3", 908 "version": "v1.2.1",
765 "target-dir": "Symfony/Component/DomCrawler",
766 "source": { 909 "source": {
767 "type": "git", 910 "type": "git",
768 "url": "https://github.com/symfony/DomCrawler.git", 911 "url": "https://github.com/kriswallsmith/assetic.git",
769 "reference": "26a9eb302decd828990e1015afaa11b78b016073" 912 "reference": "b20efe38845d20458702f97f3ff625d80805897b"
770 }, 913 },
771 "dist": { 914 "dist": {
772 "type": "zip", 915 "type": "zip",
773 "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/26a9eb302decd828990e1015afaa11b78b016073", 916 "url": "https://api.github.com/repos/kriswallsmith/assetic/zipball/b20efe38845d20458702f97f3ff625d80805897b",
774 "reference": "26a9eb302decd828990e1015afaa11b78b016073", 917 "reference": "b20efe38845d20458702f97f3ff625d80805897b",
775 "shasum": "" 918 "shasum": ""
776 }, 919 },
777 "require": { 920 "require": {
778 "php": ">=5.3.3" 921 "php": ">=5.3.1",
922 "symfony/process": "~2.1"
779 }, 923 },
780 "require-dev": { 924 "require-dev": {
781 "symfony/css-selector": "~2.3" 925 "cssmin/cssmin": "*",
926 "joliclic/javascript-packer": "*",
927 "kamicane/packager": "*",
928 "leafo/lessphp": "*",
929 "leafo/scssphp": "*",
930 "leafo/scssphp-compass": "*",
931 "mrclay/minify": "*",
932 "patchwork/jsqueeze": "~1.0",
933 "phpunit/phpunit": "~4",
934 "psr/log": "~1.0",
935 "ptachoire/cssembed": "*",
936 "twig/twig": "~1.6"
782 }, 937 },
783 "suggest": { 938 "suggest": {
784 "symfony/css-selector": "" 939 "leafo/lessphp": "Assetic provides the integration with the lessphp LESS compiler",
940 "leafo/scssphp": "Assetic provides the integration with the scssphp SCSS compiler",
941 "leafo/scssphp-compass": "Assetic provides the integration with the SCSS compass plugin",
942 "patchwork/jsqueeze": "Assetic provides the integration with the JSqueeze JavaScript compressor",
943 "ptachoire/cssembed": "Assetic provides the integration with phpcssembed to embed data uris",
944 "twig/twig": "Assetic provides the integration with the Twig templating engine"
785 }, 945 },
786 "type": "library", 946 "type": "library",
787 "extra": { 947 "extra": {
788 "branch-alias": { 948 "branch-alias": {
789 "dev-master": "2.6-dev" 949 "dev-master": "1.2-dev"
790 } 950 }
791 }, 951 },
792 "autoload": { 952 "autoload": {
793 "psr-0": { 953 "psr-0": {
794 "Symfony\\Component\\DomCrawler\\": "" 954 "Assetic": "src/"
795 } 955 },
956 "files": [
957 "src/functions.php"
958 ]
796 }, 959 },
797 "notification-url": "https://packagist.org/downloads/", 960 "notification-url": "https://packagist.org/downloads/",
798 "license": [ 961 "license": [
@@ -800,56 +963,117 @@
800 ], 963 ],
801 "authors": [ 964 "authors": [
802 { 965 {
803 "name": "Symfony Community", 966 "name": "Kris Wallsmith",
804 "homepage": "http://symfony.com/contributors" 967 "email": "kris.wallsmith@gmail.com",
968 "homepage": "http://kriswallsmith.net/"
969 }
970 ],
971 "description": "Asset Management for PHP",
972 "homepage": "https://github.com/kriswallsmith/assetic",
973 "keywords": [
974 "assets",
975 "compression",
976 "minification"
977 ],
978 "time": "2014-12-12 05:04:05"
979 },
980 {
981 "name": "mgargano/simplehtmldom",
982 "version": "dev-master",
983 "source": {
984 "type": "git",
985 "url": "https://github.com/matstars/simplehtmldom.git",
986 "reference": "37fb0d7c1bda45c5a4cf14fdef56c1edf6aa42be"
987 },
988 "dist": {
989 "type": "zip",
990 "url": "https://api.github.com/repos/matstars/simplehtmldom/zipball/37fb0d7c1bda45c5a4cf14fdef56c1edf6aa42be",
991 "reference": "37fb0d7c1bda45c5a4cf14fdef56c1edf6aa42be",
992 "shasum": ""
993 },
994 "require": {
995 "php": ">=5.3.0"
996 },
997 "type": "library",
998 "autoload": {
999 "psr-0": {
1000 "SimpleHtmlDom": "src/"
805 }, 1001 },
1002 "files": [
1003 "src/simple_html_dom.php"
1004 ]
1005 },
1006 "notification-url": "https://packagist.org/downloads/",
1007 "license": [
1008 "The MIT License"
1009 ],
1010 "authors": [
806 { 1011 {
807 "name": "Fabien Potencier", 1012 "name": "S.C. Chen",
808 "email": "fabien@symfony.com" 1013 "email": "me578022@gmail.com",
1014 "homepage": "http://simplehtmldom.sourceforge.net/",
1015 "role": "Lead Developer"
809 } 1016 }
810 ], 1017 ],
811 "description": "Symfony DomCrawler Component", 1018 "description": "Composer package that gives you access to and (unlike all the others at this time) autoloads S.C. Chen's PHP Simple HTML DOM Parser Library",
812 "homepage": "http://symfony.com", 1019 "homepage": "http://simplehtmldom.sourceforge.net/",
813 "time": "2015-01-03 08:01:59" 1020 "keywords": [
1021 "Simple",
1022 "dom",
1023 "html"
1024 ],
1025 "time": "2014-01-05 18:17:34"
814 }, 1026 },
815 { 1027 {
816 "name": "symfony/event-dispatcher", 1028 "name": "monolog/monolog",
817 "version": "v2.6.3", 1029 "version": "1.12.0",
818 "target-dir": "Symfony/Component/EventDispatcher",
819 "source": { 1030 "source": {
820 "type": "git", 1031 "type": "git",
821 "url": "https://github.com/symfony/EventDispatcher.git", 1032 "url": "https://github.com/Seldaek/monolog.git",
822 "reference": "40ff70cadea3785d83cac1c8309514b36113064e" 1033 "reference": "1fbe8c2641f2b163addf49cc5e18f144bec6b19f"
823 }, 1034 },
824 "dist": { 1035 "dist": {
825 "type": "zip", 1036 "type": "zip",
826 "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/40ff70cadea3785d83cac1c8309514b36113064e", 1037 "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1fbe8c2641f2b163addf49cc5e18f144bec6b19f",
827 "reference": "40ff70cadea3785d83cac1c8309514b36113064e", 1038 "reference": "1fbe8c2641f2b163addf49cc5e18f144bec6b19f",
828 "shasum": "" 1039 "shasum": ""
829 }, 1040 },
830 "require": { 1041 "require": {
831 "php": ">=5.3.3" 1042 "php": ">=5.3.0",
1043 "psr/log": "~1.0"
1044 },
1045 "provide": {
1046 "psr/log-implementation": "1.0.0"
832 }, 1047 },
833 "require-dev": { 1048 "require-dev": {
834 "psr/log": "~1.0", 1049 "aws/aws-sdk-php": "~2.4, >2.4.8",
835 "symfony/config": "~2.0,>=2.0.5", 1050 "doctrine/couchdb": "~1.0@dev",
836 "symfony/dependency-injection": "~2.6", 1051 "graylog2/gelf-php": "~1.0",
837 "symfony/expression-language": "~2.6", 1052 "phpunit/phpunit": "~4.0",
838 "symfony/stopwatch": "~2.3" 1053 "raven/raven": "~0.5",
1054 "ruflin/elastica": "0.90.*",
1055 "videlalvaro/php-amqplib": "~2.4"
839 }, 1056 },
840 "suggest": { 1057 "suggest": {
841 "symfony/dependency-injection": "", 1058 "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
842 "symfony/http-kernel": "" 1059 "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
1060 "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
1061 "ext-mongo": "Allow sending log messages to a MongoDB server",
1062 "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
1063 "raven/raven": "Allow sending log messages to a Sentry server",
1064 "rollbar/rollbar": "Allow sending log messages to Rollbar",
1065 "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
1066 "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib"
843 }, 1067 },
844 "type": "library", 1068 "type": "library",
845 "extra": { 1069 "extra": {
846 "branch-alias": { 1070 "branch-alias": {
847 "dev-master": "2.6-dev" 1071 "dev-master": "1.12.x-dev"
848 } 1072 }
849 }, 1073 },
850 "autoload": { 1074 "autoload": {
851 "psr-0": { 1075 "psr-4": {
852 "Symfony\\Component\\EventDispatcher\\": "" 1076 "Monolog\\": "src/Monolog"
853 } 1077 }
854 }, 1078 },
855 "notification-url": "https://packagist.org/downloads/", 1079 "notification-url": "https://packagist.org/downloads/",
@@ -858,45 +1082,38 @@
858 ], 1082 ],
859 "authors": [ 1083 "authors": [
860 { 1084 {
861 "name": "Symfony Community", 1085 "name": "Jordi Boggiano",
862 "homepage": "http://symfony.com/contributors" 1086 "email": "j.boggiano@seld.be",
863 }, 1087 "homepage": "http://seld.be"
864 {
865 "name": "Fabien Potencier",
866 "email": "fabien@symfony.com"
867 } 1088 }
868 ], 1089 ],
869 "description": "Symfony EventDispatcher Component", 1090 "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
870 "homepage": "http://symfony.com", 1091 "homepage": "http://github.com/Seldaek/monolog",
871 "time": "2015-01-05 14:28:40" 1092 "keywords": [
1093 "log",
1094 "logging",
1095 "psr-3"
1096 ],
1097 "time": "2014-12-29 21:29:35"
872 }, 1098 },
873 { 1099 {
874 "name": "symfony/filesystem", 1100 "name": "psr/log",
875 "version": "v2.6.3", 1101 "version": "1.0.0",
876 "target-dir": "Symfony/Component/Filesystem",
877 "source": { 1102 "source": {
878 "type": "git", 1103 "type": "git",
879 "url": "https://github.com/symfony/Filesystem.git", 1104 "url": "https://github.com/php-fig/log.git",
880 "reference": "a1f566d1f92e142fa1593f4555d6d89e3044a9b7" 1105 "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
881 }, 1106 },
882 "dist": { 1107 "dist": {
883 "type": "zip", 1108 "type": "zip",
884 "url": "https://api.github.com/repos/symfony/Filesystem/zipball/a1f566d1f92e142fa1593f4555d6d89e3044a9b7", 1109 "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
885 "reference": "a1f566d1f92e142fa1593f4555d6d89e3044a9b7", 1110 "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
886 "shasum": "" 1111 "shasum": ""
887 }, 1112 },
888 "require": {
889 "php": ">=5.3.3"
890 },
891 "type": "library", 1113 "type": "library",
892 "extra": {
893 "branch-alias": {
894 "dev-master": "2.6-dev"
895 }
896 },
897 "autoload": { 1114 "autoload": {
898 "psr-0": { 1115 "psr-0": {
899 "Symfony\\Component\\Filesystem\\": "" 1116 "Psr\\Log\\": ""
900 } 1117 }
901 }, 1118 },
902 "notification-url": "https://packagist.org/downloads/", 1119 "notification-url": "https://packagist.org/downloads/",
@@ -905,63 +1122,50 @@
905 ], 1122 ],
906 "authors": [ 1123 "authors": [
907 { 1124 {
908 "name": "Symfony Community", 1125 "name": "PHP-FIG",
909 "homepage": "http://symfony.com/contributors" 1126 "homepage": "http://www.php-fig.org/"
910 },
911 {
912 "name": "Fabien Potencier",
913 "email": "fabien@symfony.com"
914 } 1127 }
915 ], 1128 ],
916 "description": "Symfony Filesystem Component", 1129 "description": "Common interface for logging libraries",
917 "homepage": "http://symfony.com", 1130 "keywords": [
918 "time": "2015-01-03 21:13:09" 1131 "log",
1132 "psr",
1133 "psr-3"
1134 ],
1135 "time": "2012-12-21 11:40:51"
919 }, 1136 },
920 { 1137 {
921 "name": "symfony/form", 1138 "name": "robmorgan/phinx",
922 "version": "v2.6.3", 1139 "version": "v0.4.1",
923 "target-dir": "Symfony/Component/Form",
924 "source": { 1140 "source": {
925 "type": "git", 1141 "type": "git",
926 "url": "https://github.com/symfony/Form.git", 1142 "url": "https://github.com/robmorgan/phinx.git",
927 "reference": "bfe4011e6b77e85ccf4df33dd361fa09dfa50303" 1143 "reference": "357210707c000f50edea802d84b74724ad122478"
928 }, 1144 },
929 "dist": { 1145 "dist": {
930 "type": "zip", 1146 "type": "zip",
931 "url": "https://api.github.com/repos/symfony/Form/zipball/bfe4011e6b77e85ccf4df33dd361fa09dfa50303", 1147 "url": "https://api.github.com/repos/robmorgan/phinx/zipball/357210707c000f50edea802d84b74724ad122478",
932 "reference": "bfe4011e6b77e85ccf4df33dd361fa09dfa50303", 1148 "reference": "357210707c000f50edea802d84b74724ad122478",
933 "shasum": "" 1149 "shasum": ""
934 }, 1150 },
935 "require": { 1151 "require": {
936 "php": ">=5.3.3", 1152 "php": ">=5.3.2",
937 "symfony/event-dispatcher": "~2.1", 1153 "symfony/class-loader": "~2.6.0",
938 "symfony/intl": "~2.3", 1154 "symfony/config": "~2.6.0",
939 "symfony/options-resolver": "~2.6", 1155 "symfony/console": "~2.6.0",
940 "symfony/property-access": "~2.3" 1156 "symfony/yaml": "~2.6.0"
941 }, 1157 },
942 "require-dev": { 1158 "require-dev": {
943 "doctrine/collections": "~1.0", 1159 "phpunit/phpunit": "3.7.*",
944 "symfony/http-foundation": "~2.2", 1160 "squizlabs/php_codesniffer": "dev-phpcs-fixer"
945 "symfony/http-kernel": "~2.4",
946 "symfony/security-csrf": "~2.4",
947 "symfony/translation": "~2.0,>=2.0.5",
948 "symfony/validator": "~2.6"
949 },
950 "suggest": {
951 "symfony/framework-bundle": "For templating with PHP.",
952 "symfony/security-csrf": "For protecting forms against CSRF attacks.",
953 "symfony/twig-bridge": "For templating with Twig.",
954 "symfony/validator": "For form validation."
955 }, 1161 },
1162 "bin": [
1163 "bin/phinx"
1164 ],
956 "type": "library", 1165 "type": "library",
957 "extra": {
958 "branch-alias": {
959 "dev-master": "2.6-dev"
960 }
961 },
962 "autoload": { 1166 "autoload": {
963 "psr-0": { 1167 "psr-0": {
964 "Symfony\\Component\\Form\\": "" 1168 "Phinx": "src/"
965 } 1169 }
966 }, 1170 },
967 "notification-url": "https://packagist.org/downloads/", 1171 "notification-url": "https://packagist.org/downloads/",
@@ -970,58 +1174,58 @@
970 ], 1174 ],
971 "authors": [ 1175 "authors": [
972 { 1176 {
973 "name": "Symfony Community", 1177 "name": "Rob Morgan",
974 "homepage": "http://symfony.com/contributors" 1178 "email": "robbym@gmail.com",
975 }, 1179 "homepage": "http://robmorgan.id.au",
976 { 1180 "role": "Lead Developer"
977 "name": "Fabien Potencier",
978 "email": "fabien@symfony.com"
979 } 1181 }
980 ], 1182 ],
981 "description": "Symfony Form Component", 1183 "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.",
982 "homepage": "http://symfony.com", 1184 "homepage": "https://phinx.org",
983 "time": "2015-01-07 14:31:37" 1185 "keywords": [
1186 "database",
1187 "database migrations",
1188 "db",
1189 "migrations",
1190 "phinx"
1191 ],
1192 "time": "2014-12-23 06:06:14"
984 }, 1193 },
985 { 1194 {
986 "name": "symfony/intl", 1195 "name": "sensio/distribution-bundle",
987 "version": "v2.6.3", 1196 "version": "v3.0.15",
988 "target-dir": "Symfony/Component/Intl", 1197 "target-dir": "Sensio/Bundle/DistributionBundle",
989 "source": { 1198 "source": {
990 "type": "git", 1199 "type": "git",
991 "url": "https://github.com/symfony/Intl.git", 1200 "url": "https://github.com/sensiolabs/SensioDistributionBundle.git",
992 "reference": "5e7494e1e6aed4309f43121b3141d6e0273dcaee" 1201 "reference": "0692cd6a8fcf645abce8ea45f7cbbd1942e2b23c"
993 }, 1202 },
994 "dist": { 1203 "dist": {
995 "type": "zip", 1204 "type": "zip",
996 "url": "https://api.github.com/repos/symfony/Intl/zipball/5e7494e1e6aed4309f43121b3141d6e0273dcaee", 1205 "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/0692cd6a8fcf645abce8ea45f7cbbd1942e2b23c",
997 "reference": "5e7494e1e6aed4309f43121b3141d6e0273dcaee", 1206 "reference": "0692cd6a8fcf645abce8ea45f7cbbd1942e2b23c",
998 "shasum": "" 1207 "shasum": ""
999 }, 1208 },
1000 "require": { 1209 "require": {
1001 "php": ">=5.3.3" 1210 "php": ">=5.3.3",
1002 }, 1211 "sensiolabs/security-checker": "~2.0",
1003 "require-dev": { 1212 "symfony/class-loader": "~2.2",
1004 "symfony/filesystem": ">=2.1" 1213 "symfony/form": "~2.2",
1005 }, 1214 "symfony/framework-bundle": "~2.3",
1006 "suggest": { 1215 "symfony/process": "~2.2",
1007 "ext-intl": "to use the component with locales other than \"en\"" 1216 "symfony/validator": "~2.2",
1217 "symfony/yaml": "~2.2"
1008 }, 1218 },
1009 "type": "library", 1219 "type": "symfony-bundle",
1010 "extra": { 1220 "extra": {
1011 "branch-alias": { 1221 "branch-alias": {
1012 "dev-master": "2.6-dev" 1222 "dev-master": "3.0.x-dev"
1013 } 1223 }
1014 }, 1224 },
1015 "autoload": { 1225 "autoload": {
1016 "psr-0": { 1226 "psr-0": {
1017 "Symfony\\Component\\Intl\\": "" 1227 "Sensio\\Bundle\\DistributionBundle": ""
1018 }, 1228 }
1019 "classmap": [
1020 "Symfony/Component/Intl/Resources/stubs"
1021 ],
1022 "files": [
1023 "Symfony/Component/Intl/Resources/stubs/functions.php"
1024 ]
1025 }, 1229 },
1026 "notification-url": "https://packagist.org/downloads/", 1230 "notification-url": "https://packagist.org/downloads/",
1027 "license": [ 1231 "license": [
@@ -1029,61 +1233,53 @@
1029 ], 1233 ],
1030 "authors": [ 1234 "authors": [
1031 { 1235 {
1032 "name": "Symfony Community", 1236 "name": "Fabien Potencier",
1033 "homepage": "http://symfony.com/contributors" 1237 "email": "fabien@symfony.com"
1034 },
1035 {
1036 "name": "Bernhard Schussek",
1037 "email": "bschussek@gmail.com"
1038 },
1039 {
1040 "name": "Eriksen Costa",
1041 "email": "eriksen.costa@infranology.com.br"
1042 },
1043 {
1044 "name": "Igor Wiedler",
1045 "email": "igor@wiedler.ch"
1046 } 1238 }
1047 ], 1239 ],
1048 "description": "A PHP replacement layer for the C intl extension that includes additional data from the ICU library.", 1240 "description": "Base bundle for Symfony Distributions",
1049 "homepage": "http://symfony.com",
1050 "keywords": [ 1241 "keywords": [
1051 "i18n", 1242 "configuration",
1052 "icu", 1243 "distribution"
1053 "internationalization",
1054 "intl",
1055 "l10n",
1056 "localization"
1057 ], 1244 ],
1058 "time": "2015-01-03 08:01:59" 1245 "time": "2015-01-07 07:13:43"
1059 }, 1246 },
1060 { 1247 {
1061 "name": "symfony/options-resolver", 1248 "name": "sensio/framework-extra-bundle",
1062 "version": "v2.6.3", 1249 "version": "v3.0.4",
1063 "target-dir": "Symfony/Component/OptionsResolver", 1250 "target-dir": "Sensio/Bundle/FrameworkExtraBundle",
1064 "source": { 1251 "source": {
1065 "type": "git", 1252 "type": "git",
1066 "url": "https://github.com/symfony/OptionsResolver.git", 1253 "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git",
1067 "reference": "23aed23820c9c2273c405b43deee3de6c0668acd" 1254 "reference": "b3bc3e67c8b6b68b18d727012183520d35ee762a"
1068 }, 1255 },
1069 "dist": { 1256 "dist": {
1070 "type": "zip", 1257 "type": "zip",
1071 "url": "https://api.github.com/repos/symfony/OptionsResolver/zipball/23aed23820c9c2273c405b43deee3de6c0668acd", 1258 "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/b3bc3e67c8b6b68b18d727012183520d35ee762a",
1072 "reference": "23aed23820c9c2273c405b43deee3de6c0668acd", 1259 "reference": "b3bc3e67c8b6b68b18d727012183520d35ee762a",
1073 "shasum": "" 1260 "shasum": ""
1074 }, 1261 },
1075 "require": { 1262 "require": {
1076 "php": ">=5.3.3" 1263 "doctrine/common": "~2.2",
1264 "symfony/framework-bundle": "~2.3"
1077 }, 1265 },
1078 "type": "library", 1266 "require-dev": {
1267 "symfony/expression-language": "~2.4",
1268 "symfony/security-bundle": "~2.4"
1269 },
1270 "suggest": {
1271 "symfony/expression-language": "",
1272 "symfony/security-bundle": ""
1273 },
1274 "type": "symfony-bundle",
1079 "extra": { 1275 "extra": {
1080 "branch-alias": { 1276 "branch-alias": {
1081 "dev-master": "2.6-dev" 1277 "dev-master": "3.0.x-dev"
1082 } 1278 }
1083 }, 1279 },
1084 "autoload": { 1280 "autoload": {
1085 "psr-0": { 1281 "psr-0": {
1086 "Symfony\\Component\\OptionsResolver\\": "" 1282 "Sensio\\Bundle\\FrameworkExtraBundle": ""
1087 } 1283 }
1088 }, 1284 },
1089 "notification-url": "https://packagist.org/downloads/", 1285 "notification-url": "https://packagist.org/downloads/",
@@ -1092,50 +1288,47 @@
1092 ], 1288 ],
1093 "authors": [ 1289 "authors": [
1094 { 1290 {
1095 "name": "Symfony Community",
1096 "homepage": "http://symfony.com/contributors"
1097 },
1098 {
1099 "name": "Fabien Potencier", 1291 "name": "Fabien Potencier",
1100 "email": "fabien@symfony.com" 1292 "email": "fabien@symfony.com"
1101 } 1293 }
1102 ], 1294 ],
1103 "description": "Symfony OptionsResolver Component", 1295 "description": "This bundle provides a way to configure your controllers with annotations",
1104 "homepage": "http://symfony.com",
1105 "keywords": [ 1296 "keywords": [
1106 "config", 1297 "annotations",
1107 "configuration", 1298 "controllers"
1108 "options"
1109 ], 1299 ],
1110 "time": "2015-01-05 17:41:06" 1300 "time": "2014-12-02 09:52:52"
1111 }, 1301 },
1112 { 1302 {
1113 "name": "symfony/property-access", 1303 "name": "sensiolabs/security-checker",
1114 "version": "v2.6.3", 1304 "version": "v2.0.0",
1115 "target-dir": "Symfony/Component/PropertyAccess",
1116 "source": { 1305 "source": {
1117 "type": "git", 1306 "type": "git",
1118 "url": "https://github.com/symfony/PropertyAccess.git", 1307 "url": "https://github.com/sensiolabs/security-checker.git",
1119 "reference": "b5055bdf4365638065d2a268e213a57b771d2f74" 1308 "reference": "5b4eb4743ebe68276c911c84101ecdf4a9ae76ee"
1120 }, 1309 },
1121 "dist": { 1310 "dist": {
1122 "type": "zip", 1311 "type": "zip",
1123 "url": "https://api.github.com/repos/symfony/PropertyAccess/zipball/b5055bdf4365638065d2a268e213a57b771d2f74", 1312 "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/5b4eb4743ebe68276c911c84101ecdf4a9ae76ee",
1124 "reference": "b5055bdf4365638065d2a268e213a57b771d2f74", 1313 "reference": "5b4eb4743ebe68276c911c84101ecdf4a9ae76ee",
1125 "shasum": "" 1314 "shasum": ""
1126 }, 1315 },
1127 "require": { 1316 "require": {
1128 "php": ">=5.3.3" 1317 "ext-curl": "*",
1318 "symfony/console": "~2.0"
1129 }, 1319 },
1320 "bin": [
1321 "security-checker"
1322 ],
1130 "type": "library", 1323 "type": "library",
1131 "extra": { 1324 "extra": {
1132 "branch-alias": { 1325 "branch-alias": {
1133 "dev-master": "2.6-dev" 1326 "dev-master": "2.0-dev"
1134 } 1327 }
1135 }, 1328 },
1136 "autoload": { 1329 "autoload": {
1137 "psr-0": { 1330 "psr-0": {
1138 "Symfony\\Component\\PropertyAccess\\": "" 1331 "SensioLabs\\Security": ""
1139 } 1332 }
1140 }, 1333 },
1141 "notification-url": "https://packagist.org/downloads/", 1334 "notification-url": "https://packagist.org/downloads/",
@@ -1144,141 +1337,97 @@
1144 ], 1337 ],
1145 "authors": [ 1338 "authors": [
1146 { 1339 {
1147 "name": "Symfony Community",
1148 "homepage": "http://symfony.com/contributors"
1149 },
1150 {
1151 "name": "Fabien Potencier", 1340 "name": "Fabien Potencier",
1152 "email": "fabien@symfony.com" 1341 "email": "fabien.potencier@gmail.com"
1153 } 1342 }
1154 ], 1343 ],
1155 "description": "Symfony PropertyAccess Component", 1344 "description": "A security checker for your composer.lock",
1156 "homepage": "http://symfony.com", 1345 "time": "2014-07-19 10:52:35"
1157 "keywords": [
1158 "access",
1159 "array",
1160 "extraction",
1161 "index",
1162 "injection",
1163 "object",
1164 "property",
1165 "property path",
1166 "reflection"
1167 ],
1168 "time": "2015-01-03 15:33:07"
1169 }, 1346 },
1170 { 1347 {
1171 "name": "symfony/routing", 1348 "name": "simplepie/simplepie",
1172 "version": "v2.6.3", 1349 "version": "dev-master",
1173 "target-dir": "Symfony/Component/Routing",
1174 "source": { 1350 "source": {
1175 "type": "git", 1351 "type": "git",
1176 "url": "https://github.com/symfony/Routing.git", 1352 "url": "https://github.com/simplepie/simplepie.git",
1177 "reference": "28382c6806780ddc657c136a5ca4415dd3252f41" 1353 "reference": "9a9faaa0d563426cf6d897c169373c5b62f1b252"
1178 }, 1354 },
1179 "dist": { 1355 "dist": {
1180 "type": "zip", 1356 "type": "zip",
1181 "url": "https://api.github.com/repos/symfony/Routing/zipball/28382c6806780ddc657c136a5ca4415dd3252f41", 1357 "url": "https://api.github.com/repos/simplepie/simplepie/zipball/9a9faaa0d563426cf6d897c169373c5b62f1b252",
1182 "reference": "28382c6806780ddc657c136a5ca4415dd3252f41", 1358 "reference": "9a9faaa0d563426cf6d897c169373c5b62f1b252",
1183 "shasum": "" 1359 "shasum": ""
1184 }, 1360 },
1185 "require": { 1361 "require": {
1186 "php": ">=5.3.3" 1362 "php": ">=5.2.0"
1187 },
1188 "require-dev": {
1189 "doctrine/annotations": "~1.0",
1190 "doctrine/common": "~2.2",
1191 "psr/log": "~1.0",
1192 "symfony/config": "~2.2",
1193 "symfony/expression-language": "~2.4",
1194 "symfony/http-foundation": "~2.3",
1195 "symfony/yaml": "~2.0,>=2.0.5"
1196 },
1197 "suggest": {
1198 "doctrine/annotations": "For using the annotation loader",
1199 "symfony/config": "For using the all-in-one router or any loader",
1200 "symfony/expression-language": "For using expression matching",
1201 "symfony/yaml": "For using the YAML loader"
1202 }, 1363 },
1203 "type": "library", 1364 "type": "library",
1204 "extra": {
1205 "branch-alias": {
1206 "dev-master": "2.6-dev"
1207 }
1208 },
1209 "autoload": { 1365 "autoload": {
1210 "psr-0": { 1366 "psr-0": {
1211 "Symfony\\Component\\Routing\\": "" 1367 "SimplePie": "library"
1212 } 1368 }
1213 }, 1369 },
1214 "notification-url": "https://packagist.org/downloads/", 1370 "notification-url": "https://packagist.org/downloads/",
1215 "license": [ 1371 "license": [
1216 "MIT" 1372 "BSD-3-Clause"
1217 ], 1373 ],
1218 "authors": [ 1374 "authors": [
1219 { 1375 {
1220 "name": "Symfony Community", 1376 "name": "Ryan Parman",
1221 "homepage": "http://symfony.com/contributors" 1377 "homepage": "http://ryanparman.com/",
1378 "role": "Creator, alumnus developer"
1222 }, 1379 },
1223 { 1380 {
1224 "name": "Fabien Potencier", 1381 "name": "Geoffrey Sneddon",
1225 "email": "fabien@symfony.com" 1382 "homepage": "http://gsnedders.com/",
1383 "role": "Alumnus developer"
1384 },
1385 {
1386 "name": "Ryan McCue",
1387 "email": "me@ryanmccue.info",
1388 "homepage": "http://ryanmccue.info/",
1389 "role": "Developer"
1226 } 1390 }
1227 ], 1391 ],
1228 "description": "Symfony Routing Component", 1392 "description": "A simple Atom/RSS parsing library for PHP",
1229 "homepage": "http://symfony.com", 1393 "homepage": "http://simplepie.org/",
1230 "keywords": [ 1394 "keywords": [
1231 "router", 1395 "atom",
1232 "routing", 1396 "feeds",
1233 "uri", 1397 "rss"
1234 "url"
1235 ], 1398 ],
1236 "time": "2015-01-05 14:28:40" 1399 "time": "2014-04-28 12:50:39"
1237 }, 1400 },
1238 { 1401 {
1239 "name": "symfony/security-core", 1402 "name": "swiftmailer/swiftmailer",
1240 "version": "v2.6.3", 1403 "version": "v5.3.1",
1241 "target-dir": "Symfony/Component/Security/Core",
1242 "source": { 1404 "source": {
1243 "type": "git", 1405 "type": "git",
1244 "url": "https://github.com/symfony/security-core.git", 1406 "url": "https://github.com/swiftmailer/swiftmailer.git",
1245 "reference": "db8c6964f9d69496b9ef21788c4afc4306113242" 1407 "reference": "c5f963e7f9d6f6438fda4f22d5cc2db296ec621a"
1246 }, 1408 },
1247 "dist": { 1409 "dist": {
1248 "type": "zip", 1410 "type": "zip",
1249 "url": "https://api.github.com/repos/symfony/security-core/zipball/db8c6964f9d69496b9ef21788c4afc4306113242", 1411 "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/c5f963e7f9d6f6438fda4f22d5cc2db296ec621a",
1250 "reference": "db8c6964f9d69496b9ef21788c4afc4306113242", 1412 "reference": "c5f963e7f9d6f6438fda4f22d5cc2db296ec621a",
1251 "shasum": "" 1413 "shasum": ""
1252 }, 1414 },
1253 "require": { 1415 "require": {
1254 "php": ">=5.3.3" 1416 "php": ">=5.3.3"
1255 }, 1417 },
1256 "require-dev": { 1418 "require-dev": {
1257 "ircmaxell/password-compat": "1.0.*", 1419 "mockery/mockery": "~0.9.1"
1258 "psr/log": "~1.0",
1259 "symfony/event-dispatcher": "~2.1",
1260 "symfony/expression-language": "~2.6",
1261 "symfony/http-foundation": "~2.4",
1262 "symfony/translation": "~2.0,>=2.0.5",
1263 "symfony/validator": "~2.5,>=2.5.5"
1264 },
1265 "suggest": {
1266 "ircmaxell/password-compat": "For using the BCrypt password encoder in PHP <5.5",
1267 "symfony/event-dispatcher": "",
1268 "symfony/expression-language": "For using the expression voter",
1269 "symfony/http-foundation": "",
1270 "symfony/validator": "For using the user password constraint"
1271 }, 1420 },
1272 "type": "library", 1421 "type": "library",
1273 "extra": { 1422 "extra": {
1274 "branch-alias": { 1423 "branch-alias": {
1275 "dev-master": "2.6-dev" 1424 "dev-master": "5.3-dev"
1276 } 1425 }
1277 }, 1426 },
1278 "autoload": { 1427 "autoload": {
1279 "psr-0": { 1428 "files": [
1280 "Symfony\\Component\\Security\\Core\\": "" 1429 "lib/swift_required.php"
1281 } 1430 ]
1282 }, 1431 },
1283 "notification-url": "https://packagist.org/downloads/", 1432 "notification-url": "https://packagist.org/downloads/",
1284 "license": [ 1433 "license": [
@@ -1286,52 +1435,63 @@
1286 ], 1435 ],
1287 "authors": [ 1436 "authors": [
1288 { 1437 {
1289 "name": "Symfony Community", 1438 "name": "Chris Corbyn"
1290 "homepage": "http://symfony.com/contributors"
1291 }, 1439 },
1292 { 1440 {
1293 "name": "Fabien Potencier", 1441 "name": "Fabien Potencier",
1294 "email": "fabien@symfony.com" 1442 "email": "fabien@symfony.com"
1295 } 1443 }
1296 ], 1444 ],
1297 "description": "Symfony Security Component - Core Library", 1445 "description": "Swiftmailer, free feature-rich PHP mailer",
1298 "homepage": "http://symfony.com", 1446 "homepage": "http://swiftmailer.org",
1299 "time": "2015-01-05 20:59:13" 1447 "keywords": [
1448 "mail",
1449 "mailer"
1450 ],
1451 "time": "2014-12-05 14:17:14"
1300 }, 1452 },
1301 { 1453 {
1302 "name": "symfony/security-csrf", 1454 "name": "symfony/assetic-bundle",
1303 "version": "v2.6.3", 1455 "version": "v2.5.0",
1304 "target-dir": "Symfony/Component/Security/Csrf",
1305 "source": { 1456 "source": {
1306 "type": "git", 1457 "type": "git",
1307 "url": "https://github.com/symfony/security-csrf.git", 1458 "url": "https://github.com/symfony/AsseticBundle.git",
1308 "reference": "c532081e1c9295b69dac2e3faea87112543504fc" 1459 "reference": "90ea7fb66d6d5245fd4afc16e4c8070214254fec"
1309 }, 1460 },
1310 "dist": { 1461 "dist": {
1311 "type": "zip", 1462 "type": "zip",
1312 "url": "https://api.github.com/repos/symfony/security-csrf/zipball/c532081e1c9295b69dac2e3faea87112543504fc", 1463 "url": "https://api.github.com/repos/symfony/AsseticBundle/zipball/90ea7fb66d6d5245fd4afc16e4c8070214254fec",
1313 "reference": "c532081e1c9295b69dac2e3faea87112543504fc", 1464 "reference": "90ea7fb66d6d5245fd4afc16e4c8070214254fec",
1314 "shasum": "" 1465 "shasum": ""
1315 }, 1466 },
1316 "require": { 1467 "require": {
1317 "php": ">=5.3.3", 1468 "kriswallsmith/assetic": "~1.2",
1318 "symfony/security-core": "~2.4" 1469 "php": ">=5.3.0",
1470 "symfony/console": "~2.1",
1471 "symfony/framework-bundle": "~2.1",
1472 "symfony/yaml": "~2.1"
1319 }, 1473 },
1320 "require-dev": { 1474 "require-dev": {
1321 "symfony/http-foundation": "~2.1" 1475 "kriswallsmith/spork": "~0.2",
1476 "patchwork/jsqueeze": "~1.0",
1477 "symfony/class-loader": "~2.1",
1478 "symfony/css-selector": "~2.1",
1479 "symfony/dom-crawler": "~2.1",
1480 "symfony/twig-bundle": "~2.1"
1322 }, 1481 },
1323 "suggest": { 1482 "suggest": {
1324 "symfony/http-foundation": "For using the class SessionTokenStorage." 1483 "kriswallsmith/spork": "to be able to dump assets in parallel",
1484 "symfony/twig-bundle": "to use the Twig integration"
1325 }, 1485 },
1326 "type": "library", 1486 "type": "symfony-bundle",
1327 "extra": { 1487 "extra": {
1328 "branch-alias": { 1488 "branch-alias": {
1329 "dev-master": "2.6-dev" 1489 "dev-master": "2.5-dev"
1330 } 1490 }
1331 }, 1491 },
1332 "autoload": { 1492 "autoload": {
1333 "psr-0": { 1493 "psr-4": {
1334 "Symfony\\Component\\Security\\Csrf\\": "" 1494 "Symfony\\Bundle\\AsseticBundle\\": ""
1335 } 1495 }
1336 }, 1496 },
1337 "notification-url": "https://packagist.org/downloads/", 1497 "notification-url": "https://packagist.org/downloads/",
@@ -1340,56 +1500,55 @@
1340 ], 1500 ],
1341 "authors": [ 1501 "authors": [
1342 { 1502 {
1343 "name": "Symfony Community", 1503 "name": "Kris Wallsmith",
1344 "homepage": "http://symfony.com/contributors" 1504 "email": "kris.wallsmith@gmail.com",
1345 }, 1505 "homepage": "http://kriswallsmith.net/"
1346 {
1347 "name": "Fabien Potencier",
1348 "email": "fabien@symfony.com"
1349 } 1506 }
1350 ], 1507 ],
1351 "description": "Symfony Security Component - CSRF Library", 1508 "description": "Integrates Assetic into Symfony2",
1352 "homepage": "http://symfony.com", 1509 "homepage": "https://github.com/symfony/AsseticBundle",
1353 "time": "2015-01-03 08:01:59" 1510 "keywords": [
1511 "assets",
1512 "compression",
1513 "minification"
1514 ],
1515 "time": "2014-10-15 12:03:38"
1354 }, 1516 },
1355 { 1517 {
1356 "name": "symfony/translation", 1518 "name": "symfony/monolog-bundle",
1357 "version": "v2.6.3", 1519 "version": "v2.7.1",
1358 "target-dir": "Symfony/Component/Translation",
1359 "source": { 1520 "source": {
1360 "type": "git", 1521 "type": "git",
1361 "url": "https://github.com/symfony/Translation.git", 1522 "url": "https://github.com/symfony/MonologBundle.git",
1362 "reference": "f289cdf8179d32058c1e1cbac723106a5ff6fa39" 1523 "reference": "9320b6863404c70ebe111e9040dab96f251de7ac"
1363 }, 1524 },
1364 "dist": { 1525 "dist": {
1365 "type": "zip", 1526 "type": "zip",
1366 "url": "https://api.github.com/repos/symfony/Translation/zipball/f289cdf8179d32058c1e1cbac723106a5ff6fa39", 1527 "url": "https://api.github.com/repos/symfony/MonologBundle/zipball/9320b6863404c70ebe111e9040dab96f251de7ac",
1367 "reference": "f289cdf8179d32058c1e1cbac723106a5ff6fa39", 1528 "reference": "9320b6863404c70ebe111e9040dab96f251de7ac",
1368 "shasum": "" 1529 "shasum": ""
1369 }, 1530 },
1370 "require": { 1531 "require": {
1371 "php": ">=5.3.3" 1532 "monolog/monolog": "~1.8",
1533 "php": ">=5.3.2",
1534 "symfony/config": "~2.3",
1535 "symfony/dependency-injection": "~2.3",
1536 "symfony/http-kernel": "~2.3",
1537 "symfony/monolog-bridge": "~2.3"
1372 }, 1538 },
1373 "require-dev": { 1539 "require-dev": {
1374 "psr/log": "~1.0", 1540 "symfony/console": "~2.3",
1375 "symfony/config": "~2.3,>=2.3.12", 1541 "symfony/yaml": "~2.3"
1376 "symfony/intl": "~2.3",
1377 "symfony/yaml": "~2.2"
1378 },
1379 "suggest": {
1380 "psr/log": "To use logging capability in translator",
1381 "symfony/config": "",
1382 "symfony/yaml": ""
1383 }, 1542 },
1384 "type": "library", 1543 "type": "symfony-bundle",
1385 "extra": { 1544 "extra": {
1386 "branch-alias": { 1545 "branch-alias": {
1387 "dev-master": "2.6-dev" 1546 "dev-master": "2.7.x-dev"
1388 } 1547 }
1389 }, 1548 },
1390 "autoload": { 1549 "autoload": {
1391 "psr-0": { 1550 "psr-4": {
1392 "Symfony\\Component\\Translation\\": "" 1551 "Symfony\\Bundle\\MonologBundle\\": ""
1393 } 1552 }
1394 }, 1553 },
1395 "notification-url": "https://packagist.org/downloads/", 1554 "notification-url": "https://packagist.org/downloads/",
@@ -1406,67 +1565,51 @@
1406 "email": "fabien@symfony.com" 1565 "email": "fabien@symfony.com"
1407 } 1566 }
1408 ], 1567 ],
1409 "description": "Symfony Translation Component", 1568 "description": "Symfony MonologBundle",
1410 "homepage": "http://symfony.com", 1569 "homepage": "http://symfony.com",
1411 "time": "2015-01-03 15:33:07" 1570 "keywords": [
1571 "log",
1572 "logging"
1573 ],
1574 "time": "2015-01-04 20:21:17"
1412 }, 1575 },
1413 { 1576 {
1414 "name": "symfony/twig-bridge", 1577 "name": "symfony/swiftmailer-bundle",
1415 "version": "v2.6.3", 1578 "version": "v2.3.8",
1416 "target-dir": "Symfony/Bridge/Twig",
1417 "source": { 1579 "source": {
1418 "type": "git", 1580 "type": "git",
1419 "url": "https://github.com/symfony/TwigBridge.git", 1581 "url": "https://github.com/symfony/SwiftmailerBundle.git",
1420 "reference": "72c911dd02f5d8e68accab7120fc0fd1a0b84ba1" 1582 "reference": "970b13d01871207e81d17b17ddda025e7e21e797"
1421 }, 1583 },
1422 "dist": { 1584 "dist": {
1423 "type": "zip", 1585 "type": "zip",
1424 "url": "https://api.github.com/repos/symfony/TwigBridge/zipball/72c911dd02f5d8e68accab7120fc0fd1a0b84ba1", 1586 "url": "https://api.github.com/repos/symfony/SwiftmailerBundle/zipball/970b13d01871207e81d17b17ddda025e7e21e797",
1425 "reference": "72c911dd02f5d8e68accab7120fc0fd1a0b84ba1", 1587 "reference": "970b13d01871207e81d17b17ddda025e7e21e797",
1426 "shasum": "" 1588 "shasum": ""
1427 }, 1589 },
1428 "require": { 1590 "require": {
1429 "php": ">=5.3.3", 1591 "php": ">=5.3.2",
1430 "symfony/security-csrf": "~2.4", 1592 "swiftmailer/swiftmailer": ">=4.2.0,~5.0",
1431 "twig/twig": "~1.13,>=1.13.1" 1593 "symfony/swiftmailer-bridge": "~2.1"
1432 }, 1594 },
1433 "require-dev": { 1595 "require-dev": {
1434 "symfony/console": "~2.4", 1596 "symfony/config": "~2.1",
1435 "symfony/expression-language": "~2.4", 1597 "symfony/dependency-injection": "~2.1",
1436 "symfony/finder": "~2.3", 1598 "symfony/http-kernel": "~2.1",
1437 "symfony/form": "~2.6", 1599 "symfony/yaml": "~2.1"
1438 "symfony/http-kernel": "~2.3",
1439 "symfony/intl": "~2.3",
1440 "symfony/routing": "~2.2",
1441 "symfony/security": "~2.4",
1442 "symfony/stopwatch": "~2.2",
1443 "symfony/templating": "~2.1",
1444 "symfony/translation": "~2.2",
1445 "symfony/var-dumper": "~2.6",
1446 "symfony/yaml": "~2.0,>=2.0.5"
1447 }, 1600 },
1448 "suggest": { 1601 "suggest": {
1449 "symfony/expression-language": "For using the ExpressionExtension", 1602 "psr/log": "Allows logging"
1450 "symfony/finder": "", 1603 },
1451 "symfony/form": "For using the FormExtension", 1604 "type": "symfony-bundle",
1452 "symfony/http-kernel": "For using the HttpKernelExtension",
1453 "symfony/routing": "For using the RoutingExtension",
1454 "symfony/security": "For using the SecurityExtension",
1455 "symfony/stopwatch": "For using the StopwatchExtension",
1456 "symfony/templating": "For using the TwigEngine",
1457 "symfony/translation": "For using the TranslationExtension",
1458 "symfony/var-dumper": "For using the DumpExtension",
1459 "symfony/yaml": "For using the YamlExtension"
1460 },
1461 "type": "symfony-bridge",
1462 "extra": { 1605 "extra": {
1463 "branch-alias": { 1606 "branch-alias": {
1464 "dev-master": "2.6-dev" 1607 "dev-master": "2.3-dev"
1465 } 1608 }
1466 }, 1609 },
1467 "autoload": { 1610 "autoload": {
1468 "psr-0": { 1611 "psr-4": {
1469 "Symfony\\Bridge\\Twig\\": "" 1612 "Symfony\\Bundle\\SwiftmailerBundle\\": ""
1470 } 1613 }
1471 }, 1614 },
1472 "notification-url": "https://packagist.org/downloads/", 1615 "notification-url": "https://packagist.org/downloads/",
@@ -1483,27 +1626,86 @@
1483 "email": "fabien@symfony.com" 1626 "email": "fabien@symfony.com"
1484 } 1627 }
1485 ], 1628 ],
1486 "description": "Symfony Twig Bridge", 1629 "description": "Symfony SwiftmailerBundle",
1487 "homepage": "http://symfony.com", 1630 "homepage": "http://symfony.com",
1488 "time": "2015-01-05 14:28:40" 1631 "time": "2014-12-01 17:44:50"
1489 }, 1632 },
1490 { 1633 {
1491 "name": "symfony/yaml", 1634 "name": "symfony/symfony",
1492 "version": "v2.6.3", 1635 "version": "v2.6.3",
1493 "target-dir": "Symfony/Component/Yaml",
1494 "source": { 1636 "source": {
1495 "type": "git", 1637 "type": "git",
1496 "url": "https://github.com/symfony/Yaml.git", 1638 "url": "https://github.com/symfony/symfony.git",
1497 "reference": "82462a90848a52c2533aa6b598b107d68076b018" 1639 "reference": "c34ef418015793a4653f2670afb69dd167ebf578"
1498 }, 1640 },
1499 "dist": { 1641 "dist": {
1500 "type": "zip", 1642 "type": "zip",
1501 "url": "https://api.github.com/repos/symfony/Yaml/zipball/82462a90848a52c2533aa6b598b107d68076b018", 1643 "url": "https://api.github.com/repos/symfony/symfony/zipball/c34ef418015793a4653f2670afb69dd167ebf578",
1502 "reference": "82462a90848a52c2533aa6b598b107d68076b018", 1644 "reference": "c34ef418015793a4653f2670afb69dd167ebf578",
1503 "shasum": "" 1645 "shasum": ""
1504 }, 1646 },
1505 "require": { 1647 "require": {
1506 "php": ">=5.3.3" 1648 "doctrine/common": "~2.3",
1649 "php": ">=5.3.3",
1650 "psr/log": "~1.0",
1651 "twig/twig": "~1.12,>=1.12.3"
1652 },
1653 "replace": {
1654 "symfony/browser-kit": "self.version",
1655 "symfony/class-loader": "self.version",
1656 "symfony/config": "self.version",
1657 "symfony/console": "self.version",
1658 "symfony/css-selector": "self.version",
1659 "symfony/debug": "self.version",
1660 "symfony/debug-bundle": "self.version",
1661 "symfony/dependency-injection": "self.version",
1662 "symfony/doctrine-bridge": "self.version",
1663 "symfony/dom-crawler": "self.version",
1664 "symfony/event-dispatcher": "self.version",
1665 "symfony/expression-language": "self.version",
1666 "symfony/filesystem": "self.version",
1667 "symfony/finder": "self.version",
1668 "symfony/form": "self.version",
1669 "symfony/framework-bundle": "self.version",
1670 "symfony/http-foundation": "self.version",
1671 "symfony/http-kernel": "self.version",
1672 "symfony/intl": "self.version",
1673 "symfony/locale": "self.version",
1674 "symfony/monolog-bridge": "self.version",
1675 "symfony/options-resolver": "self.version",
1676 "symfony/process": "self.version",
1677 "symfony/propel1-bridge": "self.version",
1678 "symfony/property-access": "self.version",
1679 "symfony/proxy-manager-bridge": "self.version",
1680 "symfony/routing": "self.version",
1681 "symfony/security": "self.version",
1682 "symfony/security-acl": "self.version",
1683 "symfony/security-bundle": "self.version",
1684 "symfony/security-core": "self.version",
1685 "symfony/security-csrf": "self.version",
1686 "symfony/security-http": "self.version",
1687 "symfony/serializer": "self.version",
1688 "symfony/stopwatch": "self.version",
1689 "symfony/swiftmailer-bridge": "self.version",
1690 "symfony/templating": "self.version",
1691 "symfony/translation": "self.version",
1692 "symfony/twig-bridge": "self.version",
1693 "symfony/twig-bundle": "self.version",
1694 "symfony/validator": "self.version",
1695 "symfony/var-dumper": "self.version",
1696 "symfony/web-profiler-bundle": "self.version",
1697 "symfony/yaml": "self.version"
1698 },
1699 "require-dev": {
1700 "doctrine/data-fixtures": "1.0.*",
1701 "doctrine/dbal": "~2.2",
1702 "doctrine/doctrine-bundle": "~1.2",
1703 "doctrine/orm": "~2.2,>=2.2.3",
1704 "egulias/email-validator": "~1.2",
1705 "ircmaxell/password-compat": "~1.0",
1706 "monolog/monolog": "~1.11",
1707 "ocramius/proxy-manager": "~0.4|~1.0",
1708 "propel/propel1": "~1.6"
1507 }, 1709 },
1508 "type": "library", 1710 "type": "library",
1509 "extra": { 1711 "extra": {
@@ -1513,8 +1715,15 @@
1513 }, 1715 },
1514 "autoload": { 1716 "autoload": {
1515 "psr-0": { 1717 "psr-0": {
1516 "Symfony\\Component\\Yaml\\": "" 1718 "Symfony\\": "src/"
1517 } 1719 },
1720 "classmap": [
1721 "src/Symfony/Component/HttpFoundation/Resources/stubs",
1722 "src/Symfony/Component/Intl/Resources/stubs"
1723 ],
1724 "files": [
1725 "src/Symfony/Component/Intl/Resources/stubs/functions.php"
1726 ]
1518 }, 1727 },
1519 "notification-url": "https://packagist.org/downloads/", 1728 "notification-url": "https://packagist.org/downloads/",
1520 "license": [ 1729 "license": [
@@ -1530,9 +1739,12 @@
1530 "email": "fabien@symfony.com" 1739 "email": "fabien@symfony.com"
1531 } 1740 }
1532 ], 1741 ],
1533 "description": "Symfony Yaml Component", 1742 "description": "The Symfony PHP framework",
1534 "homepage": "http://symfony.com", 1743 "homepage": "http://symfony.com",
1535 "time": "2015-01-03 15:33:07" 1744 "keywords": [
1745 "framework"
1746 ],
1747 "time": "2015-01-07 14:47:29"
1536 }, 1748 },
1537 { 1749 {
1538 "name": "tecnick.com/tcpdf", 1750 "name": "tecnick.com/tcpdf",
@@ -2404,12 +2616,59 @@
2404 "xunit" 2616 "xunit"
2405 ], 2617 ],
2406 "time": "2013-01-13 10:24:48" 2618 "time": "2013-01-13 10:24:48"
2619 },
2620 {
2621 "name": "sensio/generator-bundle",
2622 "version": "v2.5.1",
2623 "target-dir": "Sensio/Bundle/GeneratorBundle",
2624 "source": {
2625 "type": "git",
2626 "url": "https://github.com/sensiolabs/SensioGeneratorBundle.git",
2627 "reference": "9e23fc3de265ae013690d84aab98e7a84f46edcd"
2628 },
2629 "dist": {
2630 "type": "zip",
2631 "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/9e23fc3de265ae013690d84aab98e7a84f46edcd",
2632 "reference": "9e23fc3de265ae013690d84aab98e7a84f46edcd",
2633 "shasum": ""
2634 },
2635 "require": {
2636 "symfony/console": "~2.5",
2637 "symfony/framework-bundle": "~2.2"
2638 },
2639 "require-dev": {
2640 "doctrine/orm": "~2.2,>=2.2.3",
2641 "symfony/doctrine-bridge": "~2.2",
2642 "twig/twig": "~1.11"
2643 },
2644 "type": "symfony-bundle",
2645 "extra": {
2646 "branch-alias": {
2647 "dev-master": "2.5.x-dev"
2648 }
2649 },
2650 "autoload": {
2651 "psr-0": {
2652 "Sensio\\Bundle\\GeneratorBundle": ""
2653 }
2654 },
2655 "notification-url": "https://packagist.org/downloads/",
2656 "license": [
2657 "MIT"
2658 ],
2659 "authors": [
2660 {
2661 "name": "Fabien Potencier",
2662 "email": "fabien@symfony.com"
2663 }
2664 ],
2665 "description": "This bundle generates code for you",
2666 "time": "2015-01-13 07:33:46"
2407 } 2667 }
2408 ], 2668 ],
2409 "aliases": [], 2669 "aliases": [],
2410 "minimum-stability": "stable", 2670 "minimum-stability": "stable",
2411 "stability-flags": { 2671 "stability-flags": {
2412 "fabpot/goutte": 20,
2413 "ezyang/htmlpurifier": 20, 2672 "ezyang/htmlpurifier": 20,
2414 "mgargano/simplehtmldom": 20, 2673 "mgargano/simplehtmldom": 20,
2415 "tecnick.com/tcpdf": 20, 2674 "tecnick.com/tcpdf": 20,
@@ -2425,6 +2684,8 @@
2425 }, 2684 },
2426 "prefer-stable": false, 2685 "prefer-stable": false,
2427 "prefer-lowest": false, 2686 "prefer-lowest": false,
2428 "platform": [], 2687 "platform": {
2688 "php": ">=5.3.3"
2689 },
2429 "platform-dev": [] 2690 "platform-dev": []
2430} 2691}
diff --git a/src/Acme/DemoBundle/AcmeDemoBundle.php b/src/Acme/DemoBundle/AcmeDemoBundle.php
new file mode 100644
index 00000000..269fc1e0
--- /dev/null
+++ b/src/Acme/DemoBundle/AcmeDemoBundle.php
@@ -0,0 +1,9 @@
1<?php
2
3namespace Acme\DemoBundle;
4
5use Symfony\Component\HttpKernel\Bundle\Bundle;
6
7class AcmeDemoBundle extends Bundle
8{
9}
diff --git a/src/Acme/DemoBundle/Command/HelloWorldCommand.php b/src/Acme/DemoBundle/Command/HelloWorldCommand.php
new file mode 100644
index 00000000..998cbcdf
--- /dev/null
+++ b/src/Acme/DemoBundle/Command/HelloWorldCommand.php
@@ -0,0 +1,48 @@
1<?php
2
3namespace Acme\DemoBundle\Command;
4
5use Symfony\Component\Console\Command\Command;
6use Symfony\Component\Console\Input\InputArgument;
7use Symfony\Component\Console\Input\InputInterface;
8use Symfony\Component\Console\Output\OutputInterface;
9
10/**
11 * Hello World command for demo purposes.
12 *
13 * You could also extend from Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand
14 * to get access to the container via $this->getContainer().
15 *
16 * @author Tobias Schultze <http://tobion.de>
17 */
18class HelloWorldCommand extends Command
19{
20 /**
21 * {@inheritdoc}
22 */
23 protected function configure()
24 {
25 $this
26 ->setName('acme:hello')
27 ->setDescription('Hello World example command')
28 ->addArgument('who', InputArgument::OPTIONAL, 'Who to greet.', 'World')
29 ->setHelp(<<<EOF
30The <info>%command.name%</info> command greets somebody or everybody:
31
32<info>php %command.full_name%</info>
33
34The optional argument specifies who to greet:
35
36<info>php %command.full_name%</info> Fabien
37EOF
38 );
39 }
40
41 /**
42 * {@inheritdoc}
43 */
44 protected function execute(InputInterface $input, OutputInterface $output)
45 {
46 $output->writeln(sprintf('Hello <comment>%s</comment>!', $input->getArgument('who')));
47 }
48}
diff --git a/src/Acme/DemoBundle/Controller/DemoController.php b/src/Acme/DemoBundle/Controller/DemoController.php
new file mode 100644
index 00000000..a99de891
--- /dev/null
+++ b/src/Acme/DemoBundle/Controller/DemoController.php
@@ -0,0 +1,56 @@
1<?php
2
3namespace Acme\DemoBundle\Controller;
4
5use Symfony\Bundle\FrameworkBundle\Controller\Controller;
6use Symfony\Component\HttpFoundation\RedirectResponse;
7use Symfony\Component\HttpFoundation\Request;
8use Acme\DemoBundle\Form\ContactType;
9
10// these import the "@Route" and "@Template" annotations
11use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
12use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
13
14class DemoController extends Controller
15{
16 /**
17 * @Route("/", name="_demo")
18 * @Template()
19 */
20 public function indexAction()
21 {
22 return array();
23 }
24
25 /**
26 * @Route("/hello/{name}", name="_demo_hello")
27 * @Template()
28 */
29 public function helloAction($name)
30 {
31 return array('name' => $name);
32 }
33
34 /**
35 * @Route("/contact", name="_demo_contact")
36 * @Template()
37 */
38 public function contactAction(Request $request)
39 {
40 $form = $this->createForm(new ContactType());
41 $form->handleRequest($request);
42
43 if ($form->isValid()) {
44 $mailer = $this->get('mailer');
45
46 // .. setup a message and send it
47 // http://symfony.com/doc/current/cookbook/email.html
48
49 $request->getSession()->getFlashBag()->set('notice', 'Message sent!');
50
51 return new RedirectResponse($this->generateUrl('_demo'));
52 }
53
54 return array('form' => $form->createView());
55 }
56}
diff --git a/src/Acme/DemoBundle/Controller/SecuredController.php b/src/Acme/DemoBundle/Controller/SecuredController.php
new file mode 100644
index 00000000..d1499e39
--- /dev/null
+++ b/src/Acme/DemoBundle/Controller/SecuredController.php
@@ -0,0 +1,70 @@
1<?php
2
3namespace Acme\DemoBundle\Controller;
4
5use Symfony\Component\HttpFoundation\Request;
6use Symfony\Component\Security\Core\SecurityContext;
7use Symfony\Bundle\FrameworkBundle\Controller\Controller;
8use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
9use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
10use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
11
12/**
13 * @Route("/demo/secured")
14 */
15class SecuredController extends Controller
16{
17 /**
18 * @Route("/login", name="_demo_login")
19 * @Template()
20 */
21 public function loginAction(Request $request)
22 {
23 if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
24 $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
25 } else {
26 $error = $request->getSession()->get(SecurityContext::AUTHENTICATION_ERROR);
27 }
28
29 return array(
30 'last_username' => $request->getSession()->get(SecurityContext::LAST_USERNAME),
31 'error' => $error,
32 );
33 }
34
35 /**
36 * @Route("/login_check", name="_demo_security_check")
37 */
38 public function securityCheckAction()
39 {
40 // The security layer will intercept this request
41 }
42
43 /**
44 * @Route("/logout", name="_demo_logout")
45 */
46 public function logoutAction()
47 {
48 // The security layer will intercept this request
49 }
50
51 /**
52 * @Route("/hello", defaults={"name"="World"}),
53 * @Route("/hello/{name}", name="_demo_secured_hello")
54 * @Template()
55 */
56 public function helloAction($name)
57 {
58 return array('name' => $name);
59 }
60
61 /**
62 * @Route("/hello/admin/{name}", name="_demo_secured_hello_admin")
63 * @Security("is_granted('ROLE_ADMIN')")
64 * @Template()
65 */
66 public function helloadminAction($name)
67 {
68 return array('name' => $name);
69 }
70}
diff --git a/src/Acme/DemoBundle/Controller/WelcomeController.php b/src/Acme/DemoBundle/Controller/WelcomeController.php
new file mode 100644
index 00000000..884f95bb
--- /dev/null
+++ b/src/Acme/DemoBundle/Controller/WelcomeController.php
@@ -0,0 +1,19 @@
1<?php
2
3namespace Acme\DemoBundle\Controller;
4
5use Symfony\Bundle\FrameworkBundle\Controller\Controller;
6
7class WelcomeController extends Controller
8{
9 public function indexAction()
10 {
11 /*
12 * The action's view can be rendered using render() method
13 * or @Template annotation as demonstrated in DemoController.
14 *
15 */
16
17 return $this->render('AcmeDemoBundle:Welcome:index.html.twig');
18 }
19}
diff --git a/src/Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php b/src/Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php
new file mode 100644
index 00000000..6dfcc822
--- /dev/null
+++ b/src/Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php
@@ -0,0 +1,22 @@
1<?php
2
3namespace Acme\DemoBundle\DependencyInjection;
4
5use Symfony\Component\DependencyInjection\ContainerBuilder;
6use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
7use Symfony\Component\HttpKernel\DependencyInjection\Extension;
8use Symfony\Component\Config\FileLocator;
9
10class AcmeDemoExtension extends Extension
11{
12 public function load(array $configs, ContainerBuilder $container)
13 {
14 $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
15 $loader->load('services.xml');
16 }
17
18 public function getAlias()
19 {
20 return 'acme_demo';
21 }
22}
diff --git a/src/Acme/DemoBundle/EventListener/ControllerListener.php b/src/Acme/DemoBundle/EventListener/ControllerListener.php
new file mode 100644
index 00000000..aa117d74
--- /dev/null
+++ b/src/Acme/DemoBundle/EventListener/ControllerListener.php
@@ -0,0 +1,24 @@
1<?php
2
3namespace Acme\DemoBundle\EventListener;
4
5use Symfony\Component\HttpKernel\HttpKernelInterface;
6use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
7use Acme\DemoBundle\Twig\Extension\DemoExtension;
8
9class ControllerListener
10{
11 protected $extension;
12
13 public function __construct(DemoExtension $extension)
14 {
15 $this->extension = $extension;
16 }
17
18 public function onKernelController(FilterControllerEvent $event)
19 {
20 if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
21 $this->extension->setController($event->getController());
22 }
23 }
24}
diff --git a/src/Acme/DemoBundle/Form/ContactType.php b/src/Acme/DemoBundle/Form/ContactType.php
new file mode 100644
index 00000000..2c76cdb2
--- /dev/null
+++ b/src/Acme/DemoBundle/Form/ContactType.php
@@ -0,0 +1,20 @@
1<?php
2
3namespace Acme\DemoBundle\Form;
4
5use Symfony\Component\Form\AbstractType;
6use Symfony\Component\Form\FormBuilderInterface;
7
8class ContactType extends AbstractType
9{
10 public function buildForm(FormBuilderInterface $builder, array $options)
11 {
12 $builder->add('email', 'email');
13 $builder->add('message', 'textarea');
14 }
15
16 public function getName()
17 {
18 return 'contact';
19 }
20}
diff --git a/src/Acme/DemoBundle/Resources/config/routing.yml b/src/Acme/DemoBundle/Resources/config/routing.yml
new file mode 100644
index 00000000..06291a23
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/config/routing.yml
@@ -0,0 +1,12 @@
1_welcome:
2 path: /
3 defaults: { _controller: AcmeDemoBundle:Welcome:index }
4
5_demo_secured:
6 resource: "@AcmeDemoBundle/Controller/SecuredController.php"
7 type: annotation
8
9_demo:
10 resource: "@AcmeDemoBundle/Controller/DemoController.php"
11 type: annotation
12 prefix: /demo
diff --git a/src/Acme/DemoBundle/Resources/config/services.xml b/src/Acme/DemoBundle/Resources/config/services.xml
new file mode 100644
index 00000000..d6274ce9
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/config/services.xml
@@ -0,0 +1,18 @@
1<?xml version="1.0" ?>
2
3<container xmlns="http://symfony.com/schema/dic/services"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
6
7 <services>
8 <service id="twig.extension.acme.demo" class="Acme\DemoBundle\Twig\Extension\DemoExtension" public="false">
9 <tag name="twig.extension" />
10 <argument type="service" id="twig.loader" />
11 </service>
12
13 <service id="acme.demo.listener" class="Acme\DemoBundle\EventListener\ControllerListener">
14 <tag name="kernel.event_listener" event="kernel.controller" method="onKernelController" />
15 <argument type="service" id="twig.extension.acme.demo" />
16 </service>
17 </services>
18</container>
diff --git a/src/Acme/DemoBundle/Resources/public/css/demo.css b/src/Acme/DemoBundle/Resources/public/css/demo.css
new file mode 100644
index 00000000..4dd2f16c
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/public/css/demo.css
@@ -0,0 +1,101 @@
1body {
2 font-size: 14px;
3 font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
4}
5h1.title {
6 font-size: 45px;
7 padding-bottom: 30px;
8}
9.sf-reset h2 {
10 font-weight: bold;
11 color: #FFFFFF;
12 /* Font is duplicated of body (sans-serif) */
13 font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
14
15 margin-bottom: 10px;
16 background-color: #aacd4e;
17 padding: 2px 4px;
18 display: inline-block;
19 text-transform: uppercase;
20
21}
22p {
23 line-height: 20px;
24 padding-bottom: 20px;
25}
26ul#demo-list a {
27 background: url(../images/blue-arrow.png) no-repeat right 6px;
28 padding-right: 10px;
29 margin-right: 30px;
30}
31#symfony-header {
32 position: relative;
33 padding: 30px 30px 20px 30px;
34}
35.sf-reset .symfony-blocks-welcome {
36 overflow: hidden;
37}
38.sf-reset .symfony-blocks-welcome > div {
39 background-color: whitesmoke;
40 float: left;
41 width: 240px;
42 margin-right: 14px;
43 text-align: center;
44 padding: 26px 20px;
45}
46.sf-reset .symfony-blocks-welcome > div.block-demo {
47 margin-right: 0;
48}
49.sf-reset .symfony-blocks-welcome .illustration {
50 padding-bottom: 20px;
51}
52.sf-reset .symfony-blocks-help {
53 overflow: hidden;
54}
55.sf-reset .symfony-blocks-help {
56 margin-top: 30px;
57 padding: 18px;
58 border: 1px solid #E6E6E6;
59}
60.sf-reset .symfony-blocks-help > div {
61 width: 254px;
62 float: left;
63}
64.flash-message {
65 padding: 10px;
66 margin: 5px;
67 margin-top: 15px;
68 background-color: #ffe;
69}
70.sf-reset .error {
71 color: red;
72}
73#login label, #contact_form label {
74 display: block;
75 float: left;
76 width: 90px;
77}
78.sf-reset ul#menu {
79 float: right;
80 margin-bottom: 20px;
81 padding-left: 0;
82}
83.sf-reset #menu li {
84 padding-left: 0;
85 margin-right: 10px;
86 display: inline;
87}
88.sf-reset a,
89.sf-reset li a {
90 color: #08C;
91 text-decoration: none;
92}
93.sf-reset a:hover,
94.sf-reset li a:hover {
95 color: #08C;
96 text-decoration: underline;
97}
98.sf-reset .symfony-content pre {
99 white-space: pre;
100 font-family: monospace;
101}
diff --git a/src/Acme/DemoBundle/Resources/public/images/blue-arrow.png b/src/Acme/DemoBundle/Resources/public/images/blue-arrow.png
new file mode 100644
index 00000000..fa82d4b4
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/public/images/blue-arrow.png
Binary files differ
diff --git a/src/Acme/DemoBundle/Resources/public/images/field-background.gif b/src/Acme/DemoBundle/Resources/public/images/field-background.gif
new file mode 100644
index 00000000..7c0efc10
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/public/images/field-background.gif
Binary files differ
diff --git a/src/Acme/DemoBundle/Resources/public/images/logo.gif b/src/Acme/DemoBundle/Resources/public/images/logo.gif
new file mode 100644
index 00000000..703cf45f
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/public/images/logo.gif
Binary files differ
diff --git a/src/Acme/DemoBundle/Resources/public/images/search.png b/src/Acme/DemoBundle/Resources/public/images/search.png
new file mode 100644
index 00000000..3c88b6a4
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/public/images/search.png
Binary files differ
diff --git a/src/Acme/DemoBundle/Resources/public/images/welcome-configure.gif b/src/Acme/DemoBundle/Resources/public/images/welcome-configure.gif
new file mode 100644
index 00000000..931179a7
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/public/images/welcome-configure.gif
Binary files differ
diff --git a/src/Acme/DemoBundle/Resources/public/images/welcome-demo.gif b/src/Acme/DemoBundle/Resources/public/images/welcome-demo.gif
new file mode 100644
index 00000000..0623de54
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/public/images/welcome-demo.gif
Binary files differ
diff --git a/src/Acme/DemoBundle/Resources/public/images/welcome-quick-tour.gif b/src/Acme/DemoBundle/Resources/public/images/welcome-quick-tour.gif
new file mode 100644
index 00000000..b9018b11
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/public/images/welcome-quick-tour.gif
Binary files differ
diff --git a/src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig b/src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig
new file mode 100644
index 00000000..e5b7523b
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig
@@ -0,0 +1,15 @@
1{% extends "AcmeDemoBundle::layout.html.twig" %}
2
3{% block title "Symfony - Contact form" %}
4
5{% block content %}
6 <form action="{{ path('_demo_contact') }}" method="POST" id="contact_form">
7 {{ form_errors(form) }}
8
9 {{ form_row(form.email) }}
10 {{ form_row(form.message) }}
11
12 {{ form_rest(form) }}
13 <input type="submit" value="Send" class="symfony-button-grey" />
14 </form>
15{% endblock %}
diff --git a/src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig b/src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig
new file mode 100644
index 00000000..3997ff60
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig
@@ -0,0 +1,9 @@
1{% extends "AcmeDemoBundle::layout.html.twig" %}
2
3{% block title "Hello " ~ name %}
4
5{% block content %}
6 <h1>Hello {{ name }}!</h1>
7{% endblock %}
8
9{% set code = code(_self) %}
diff --git a/src/Acme/DemoBundle/Resources/views/Demo/index.html.twig b/src/Acme/DemoBundle/Resources/views/Demo/index.html.twig
new file mode 100644
index 00000000..454a3203
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Demo/index.html.twig
@@ -0,0 +1,14 @@
1{% extends "AcmeDemoBundle::layout.html.twig" %}
2
3{% block title "Symfony - Demos" %}
4
5{% block content_header '' %}
6
7{% block content %}
8 <h1 class="title">Available demos</h1>
9 <ul id="demo-list">
10 <li><a href="{{ path('_demo_hello', {'name': 'World'}) }}">Hello World</a></li>
11 <li><a href="{{ path('_demo_secured_hello', {'name': 'World'}) }}">Access the secured area</a> <a href="{{ path('_demo_login') }}">Go to the login page</a></li>
12 {# <li><a href="{{ path('_demo_contact') }}">Send a Message</a></li> #}
13 </ul>
14{% endblock %}
diff --git a/src/Acme/DemoBundle/Resources/views/Secured/hello.html.twig b/src/Acme/DemoBundle/Resources/views/Secured/hello.html.twig
new file mode 100644
index 00000000..faf95cf8
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Secured/hello.html.twig
@@ -0,0 +1,11 @@
1{% extends "AcmeDemoBundle:Secured:layout.html.twig" %}
2
3{% block title "Hello " ~ name %}
4
5{% block content %}
6 <h1 class="title">Hello {{ name }}!</h1>
7
8 <a href="{{ path('_demo_secured_hello_admin', { 'name': name }) }}">Hello resource secured for <strong>admin</strong> only.</a>
9{% endblock %}
10
11{% set code = code(_self) %}
diff --git a/src/Acme/DemoBundle/Resources/views/Secured/helloadmin.html.twig b/src/Acme/DemoBundle/Resources/views/Secured/helloadmin.html.twig
new file mode 100644
index 00000000..4e3649f7
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Secured/helloadmin.html.twig
@@ -0,0 +1,9 @@
1{% extends "AcmeDemoBundle:Secured:layout.html.twig" %}
2
3{% block title "Hello " ~ name %}
4
5{% block content %}
6 <h1 class="title">Hello {{ name }} secured for Admins only!</h1>
7{% endblock %}
8
9{% set code = code(_self) %}
diff --git a/src/Acme/DemoBundle/Resources/views/Secured/layout.html.twig b/src/Acme/DemoBundle/Resources/views/Secured/layout.html.twig
new file mode 100644
index 00000000..aeea55c5
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Secured/layout.html.twig
@@ -0,0 +1,6 @@
1{% extends "AcmeDemoBundle::layout.html.twig" %}
2
3{% block content_header_more %}
4 {{ parent() }}
5 <li>logged in as <strong>{{ app.user ? app.user.username : 'Anonymous' }}</strong> - <a href="{{ path('_demo_logout') }}">Logout</a></li>
6{% endblock %}
diff --git a/src/Acme/DemoBundle/Resources/views/Secured/login.html.twig b/src/Acme/DemoBundle/Resources/views/Secured/login.html.twig
new file mode 100644
index 00000000..3e76d1df
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Secured/login.html.twig
@@ -0,0 +1,35 @@
1{% extends 'AcmeDemoBundle::layout.html.twig' %}
2
3{% block content %}
4 <h1 class="title">Login</h1>
5
6 <p>
7 Choose between two default users: <em>user/userpass</em> <small>(ROLE_USER)</small> or <em>admin/adminpass</em> <small>(ROLE_ADMIN)</small>
8 </p>
9
10 {% if error %}
11 <div class="error">{{ error.message }}</div>
12 {% endif %}
13
14 <form action="{{ path("_demo_security_check") }}" method="post" id="login">
15 <div>
16 <label for="username">Username</label>
17 <input type="text" id="username" name="_username" value="{{ last_username }}" />
18 </div>
19
20 <div>
21 <label for="password">Password</label>
22 <input type="password" id="password" name="_password" />
23 </div>
24
25 <button type="submit" class="sf-button">
26 <span class="border-l">
27 <span class="border-r">
28 <span class="btn-bg">Login</span>
29 </span>
30 </span>
31 </button>
32 </form>
33{% endblock %}
34
35{% set code = code(_self) %}
diff --git a/src/Acme/DemoBundle/Resources/views/Welcome/index.html.twig b/src/Acme/DemoBundle/Resources/views/Welcome/index.html.twig
new file mode 100644
index 00000000..ea3a7299
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Welcome/index.html.twig
@@ -0,0 +1,83 @@
1{% extends 'AcmeDemoBundle::layout.html.twig' %}
2
3{% block title %}Symfony - Welcome{% endblock %}
4
5{% block content_header '' %}
6
7{% block content %}
8 {% set version = constant('Symfony\\Component\\HttpKernel\\Kernel::MAJOR_VERSION') ~ '.' ~ constant('Symfony\\Component\\HttpKernel\\Kernel::MINOR_VERSION')%}
9
10 <h1 class="title">Welcome!</h1>
11
12 <p>Congratulations! You have successfully installed a new Symfony application.</p>
13
14 <div class="symfony-blocks-welcome">
15 <div class="block-quick-tour">
16 <div class="illustration">
17 <img src="{{ asset('bundles/acmedemo/images/welcome-quick-tour.gif') }}" alt="Quick tour" />
18 </div>
19 <a href="http://symfony.com/doc/{{ version }}/quick_tour/index.html" class="sf-button sf-button-selected">
20 <span class="border-l">
21 <span class="border-r">
22 <span class="btn-bg">Read the Quick Tour</span>
23 </span>
24 </span>
25 </a>
26 </div>
27 {% if app.environment == 'dev' %}
28 <div class="block-configure">
29 <div class="illustration">
30 <img src="{{ asset('bundles/acmedemo/images/welcome-configure.gif') }}" alt="Configure your application" />
31 </div>
32 <a href="{{ path('_configurator_home') }}" class="sf-button sf-button-selected">
33 <span class="border-l">
34 <span class="border-r">
35 <span class="btn-bg">Configure</span>
36 </span>
37 </span>
38 </a>
39 </div>
40 {% endif %}
41 <div class="block-demo">
42 <div class="illustration">
43 <img src="{{ asset('bundles/acmedemo/images/welcome-demo.gif') }}" alt="Demo" />
44 </div>
45 <a href="{{ path('_demo') }}" class="sf-button sf-button-selected">
46 <span class="border-l">
47 <span class="border-r">
48 <span class="btn-bg">Run The Demo</span>
49 </span>
50 </span>
51 </a>
52 </div>
53 </div>
54
55 <div class="symfony-blocks-help">
56 <div class="block-documentation">
57 <ul>
58 <li><strong>Documentation</strong></li>
59 <li><a href="http://symfony.com/doc/{{ version }}/book/index.html">The Book</a></li>
60 <li><a href="http://symfony.com/doc/{{ version }}/cookbook/index.html">The Cookbook</a></li>
61 <li><a href="http://symfony.com/doc/{{ version }}/components/index.html">The Components</a></li>
62 <li><a href="http://symfony.com/doc/{{ version }}/reference/index.html">Reference</a></li>
63 <li><a href="http://symfony.com/doc/{{ version }}/glossary.html">Glossary</a></li>
64 </ul>
65 </div>
66 <div class="block-documentation-more">
67 <ul>
68 <li><strong>Sensio</strong></li>
69 <li><a href="http://trainings.sensiolabs.com">Trainings</a></li>
70 <li><a href="http://books.sensiolabs.com">Books</a></li>
71 </ul>
72 </div>
73 <div class="block-community">
74 <ul>
75 <li><strong>Community</strong></li>
76 <li><a href="http://symfony.com/irc">IRC channel</a></li>
77 <li><a href="http://symfony.com/mailing-lists">Mailing lists</a></li>
78 <li><a href="http://forum.symfony-project.org">Forum</a></li>
79 <li><a href="http://symfony.com/doc/{{ version }}/contributing/index.html">Contributing</a></li>
80 </ul>
81 </div>
82 </div>
83{% endblock %}
diff --git a/src/Acme/DemoBundle/Resources/views/layout.html.twig b/src/Acme/DemoBundle/Resources/views/layout.html.twig
new file mode 100644
index 00000000..d7e97d56
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/layout.html.twig
@@ -0,0 +1,37 @@
1{% extends "TwigBundle::layout.html.twig" %}
2
3{% block head %}
4 <link rel="icon" sizes="16x16" href="{{ asset('favicon.ico') }}" />
5 <link rel="stylesheet" href="{{ asset('bundles/acmedemo/css/demo.css') }}" />
6{% endblock %}
7
8{% block title 'Demo Bundle' %}
9
10{% block body %}
11 {% for flashMessage in app.session.flashbag.get('notice') %}
12 <div class="flash-message">
13 <em>Notice</em>: {{ flashMessage }}
14 </div>
15 {% endfor %}
16
17 {% block content_header %}
18 <ul id="menu">
19 {% block content_header_more %}
20 <li><a href="{{ path('_demo') }}">Demo Home</a></li>
21 {% endblock %}
22 </ul>
23
24 <div style="clear: both"></div>
25 {% endblock %}
26
27 <div class="block">
28 {% block content %}{% endblock %}
29 </div>
30
31 {% if code is defined %}
32 <h2>Code behind this page</h2>
33 <div class="block">
34 <div class="symfony-content">{{ code|raw }}</div>
35 </div>
36 {% endif %}
37{% endblock %}
diff --git a/src/Acme/DemoBundle/Tests/Controller/DemoControllerTest.php b/src/Acme/DemoBundle/Tests/Controller/DemoControllerTest.php
new file mode 100644
index 00000000..d2176897
--- /dev/null
+++ b/src/Acme/DemoBundle/Tests/Controller/DemoControllerTest.php
@@ -0,0 +1,45 @@
1<?php
2
3namespace Acme\DemoBundle\Tests\Controller;
4
5use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
6
7class DemoControllerTest extends WebTestCase
8{
9 public function testIndex()
10 {
11 $client = static::createClient();
12
13 $crawler = $client->request('GET', '/demo/hello/Fabien');
14
15 $this->assertGreaterThan(0, $crawler->filter('html:contains("Hello Fabien")')->count());
16 }
17
18 public function testSecureSection()
19 {
20 $client = static::createClient();
21
22 // goes to the secure page
23 $crawler = $client->request('GET', '/demo/secured/hello/World');
24
25 // redirects to the login page
26 $crawler = $client->followRedirect();
27
28 // submits the login form
29 $form = $crawler->selectButton('Login')->form(array('_username' => 'admin', '_password' => 'adminpass'));
30 $client->submit($form);
31
32 // redirect to the original page (but now authenticated)
33 $crawler = $client->followRedirect();
34
35 // check that the page is the right one
36 $this->assertCount(1, $crawler->filter('h1.title:contains("Hello World!")'));
37
38 // click on the secure link
39 $link = $crawler->selectLink('Hello resource secured')->link();
40 $crawler = $client->click($link);
41
42 // check that the page is the right one
43 $this->assertCount(1, $crawler->filter('h1.title:contains("secured for Admins only!")'));
44 }
45}
diff --git a/src/Acme/DemoBundle/Twig/Extension/DemoExtension.php b/src/Acme/DemoBundle/Twig/Extension/DemoExtension.php
new file mode 100644
index 00000000..e6ce94f6
--- /dev/null
+++ b/src/Acme/DemoBundle/Twig/Extension/DemoExtension.php
@@ -0,0 +1,81 @@
1<?php
2
3namespace Acme\DemoBundle\Twig\Extension;
4
5use CG\Core\ClassUtils;
6
7class DemoExtension extends \Twig_Extension
8{
9 protected $loader;
10 protected $controller;
11
12 public function __construct(\Twig_LoaderInterface $loader)
13 {
14 $this->loader = $loader;
15 }
16
17 public function setController($controller)
18 {
19 $this->controller = $controller;
20 }
21
22 /**
23 * {@inheritdoc}
24 */
25 public function getFunctions()
26 {
27 return array(
28 new \Twig_SimpleFunction('code', array($this, 'getCode'), array('is_safe' => array('html'))),
29 );
30 }
31
32 public function getCode($template)
33 {
34 // highlight_string highlights php code only if '<?php' tag is present.
35 $controller = highlight_string("<?php".$this->getControllerCode(), true);
36 $controller = str_replace('<span style="color: #0000BB">&lt;?php&nbsp;&nbsp;&nbsp;&nbsp;</span>', '&nbsp;&nbsp;&nbsp;&nbsp;', $controller);
37
38 $template = htmlspecialchars($this->getTemplateCode($template), ENT_QUOTES, 'UTF-8');
39
40 // remove the code block
41 $template = str_replace('{% set code = code(_self) %}', '', $template);
42
43 return <<<EOF
44<p><strong>Controller Code</strong></p>
45<pre>$controller</pre>
46
47<p><strong>Template Code</strong></p>
48<pre>$template</pre>
49EOF;
50 }
51
52 protected function getControllerCode()
53 {
54 $class = get_class($this->controller[0]);
55 if (class_exists('CG\Core\ClassUtils')) {
56 $class = ClassUtils::getUserClass($class);
57 }
58
59 $r = new \ReflectionClass($class);
60 $m = $r->getMethod($this->controller[1]);
61
62 $code = file($r->getFilename());
63
64 return ' '.$m->getDocComment()."\n".implode('', array_slice($code, $m->getStartline() - 1, $m->getEndLine() - $m->getStartline() + 1));
65 }
66
67 protected function getTemplateCode($template)
68 {
69 return $this->loader->getSource($template->getTemplateName());
70 }
71
72 /**
73 * Returns the name of the extension.
74 *
75 * @return string The extension name
76 */
77 public function getName()
78 {
79 return 'demo';
80 }
81}
diff --git a/src/AppBundle/AppBundle.php b/src/AppBundle/AppBundle.php
new file mode 100644
index 00000000..05123b67
--- /dev/null
+++ b/src/AppBundle/AppBundle.php
@@ -0,0 +1,9 @@
1<?php
2
3namespace AppBundle;
4
5use Symfony\Component\HttpKernel\Bundle\Bundle;
6
7class AppBundle extends Bundle
8{
9}
diff --git a/src/AppBundle/Controller/DefaultController.php b/src/AppBundle/Controller/DefaultController.php
new file mode 100644
index 00000000..541a7688
--- /dev/null
+++ b/src/AppBundle/Controller/DefaultController.php
@@ -0,0 +1,17 @@
1<?php
2
3namespace AppBundle\Controller;
4
5use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
6use Symfony\Bundle\FrameworkBundle\Controller\Controller;
7
8class DefaultController extends Controller
9{
10 /**
11 * @Route("/app/example", name="homepage")
12 */
13 public function indexAction()
14 {
15 return $this->render('default/index.html.twig');
16 }
17}
diff --git a/src/AppBundle/Tests/Controller/DefaultControllerTest.php b/src/AppBundle/Tests/Controller/DefaultControllerTest.php
new file mode 100644
index 00000000..f35af752
--- /dev/null
+++ b/src/AppBundle/Tests/Controller/DefaultControllerTest.php
@@ -0,0 +1,18 @@
1<?php
2
3namespace AppBundle\Tests\Controller;
4
5use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
6
7class DefaultControllerTest extends WebTestCase
8{
9 public function testIndex()
10 {
11 $client = static::createClient();
12
13 $crawler = $client->request('GET', '/app/example');
14
15 $this->assertEquals(200, $client->getResponse()->getStatusCode());
16 $this->assertTrue($crawler->filter('html:contains("Homepage")')->count() > 0);
17 }
18}
diff --git a/src/WallabagBundle/Controller/DefaultController.php b/src/WallabagBundle/Controller/DefaultController.php
new file mode 100644
index 00000000..1030b7a6
--- /dev/null
+++ b/src/WallabagBundle/Controller/DefaultController.php
@@ -0,0 +1,17 @@
1<?php
2
3namespace WallabagBundle\Controller;
4
5use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
6use Symfony\Bundle\FrameworkBundle\Controller\Controller;
7
8class DefaultController extends Controller
9{
10 /**
11 * @Route("/app/index", name="homepage")
12 */
13 public function indexAction()
14 {
15 return $this->render('default/index.html.twig');
16 }
17}
diff --git a/src/WallabagBundle/Tests/Controller/DefaultControllerTest.php b/src/WallabagBundle/Tests/Controller/DefaultControllerTest.php
new file mode 100644
index 00000000..e9022438
--- /dev/null
+++ b/src/WallabagBundle/Tests/Controller/DefaultControllerTest.php
@@ -0,0 +1,18 @@
1<?php
2
3namespace WallabagBundle\Tests\Controller;
4
5use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
6
7class DefaultControllerTest extends WebTestCase
8{
9 public function testIndex()
10 {
11 $client = static::createClient();
12
13 $crawler = $client->request('GET', '/app/index');
14
15 $this->assertEquals(200, $client->getResponse()->getStatusCode());
16 $this->assertTrue($crawler->filter('html:contains("Homepage")')->count() > 0);
17 }
18}
diff --git a/src/WallabagBundle/WallabagBundle.php b/src/WallabagBundle/WallabagBundle.php
new file mode 100644
index 00000000..ddfb13f9
--- /dev/null
+++ b/src/WallabagBundle/WallabagBundle.php
@@ -0,0 +1,9 @@
1<?php
2
3namespace WallabagBundle;
4
5use Symfony\Component\HttpKernel\Bundle\Bundle;
6
7class WallabagBundle extends Bundle
8{
9}
diff --git a/web/app.php b/web/app.php
new file mode 100644
index 00000000..c5c26409
--- /dev/null
+++ b/web/app.php
@@ -0,0 +1,30 @@
1<?php
2
3use Symfony\Component\ClassLoader\ApcClassLoader;
4use Symfony\Component\HttpFoundation\Request;
5
6$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
7
8// Enable APC for autoloading to improve performance.
9// You should change the ApcClassLoader first argument to a unique prefix
10// in order to prevent cache key conflicts with other applications
11// also using APC.
12/*
13$apcLoader = new ApcClassLoader(sha1(__FILE__), $loader);
14$loader->unregister();
15$apcLoader->register(true);
16*/
17
18require_once __DIR__.'/../app/AppKernel.php';
19//require_once __DIR__.'/../app/AppCache.php';
20
21$kernel = new AppKernel('prod', false);
22$kernel->loadClassCache();
23//$kernel = new AppCache($kernel);
24
25// When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter
26//Request::enableHttpMethodParameterOverride();
27$request = Request::createFromGlobals();
28$response = $kernel->handle($request);
29$response->send();
30$kernel->terminate($request, $response);
diff --git a/web/app_dev.php b/web/app_dev.php
new file mode 100644
index 00000000..e0279c2a
--- /dev/null
+++ b/web/app_dev.php
@@ -0,0 +1,30 @@
1<?php
2
3use Symfony\Component\HttpFoundation\Request;
4use Symfony\Component\Debug\Debug;
5
6// If you don't want to setup permissions the proper way, just uncomment the following PHP line
7// read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
8//umask(0000);
9
10// This check prevents access to debug front controllers that are deployed by accident to production servers.
11// Feel free to remove this, extend it, or make something more sophisticated.
12if (isset($_SERVER['HTTP_CLIENT_IP'])
13 || isset($_SERVER['HTTP_X_FORWARDED_FOR'])
14 || !(in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) || php_sapi_name() === 'cli-server')
15) {
16 header('HTTP/1.0 403 Forbidden');
17 exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
18}
19
20$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
21Debug::enable();
22
23require_once __DIR__.'/../app/AppKernel.php';
24
25$kernel = new AppKernel('dev', true);
26$kernel->loadClassCache();
27$request = Request::createFromGlobals();
28$response = $kernel->handle($request);
29$response->send();
30$kernel->terminate($request, $response);
diff --git a/web/bundles/acmedemo b/web/bundles/acmedemo
new file mode 120000
index 00000000..d07485de
--- /dev/null
+++ b/web/bundles/acmedemo
@@ -0,0 +1 @@
../../src/Acme/DemoBundle/Resources/public/ \ No newline at end of file
diff --git a/web/bundles/framework b/web/bundles/framework
new file mode 120000
index 00000000..b828f069
--- /dev/null
+++ b/web/bundles/framework
@@ -0,0 +1 @@
../../vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/public/ \ No newline at end of file
diff --git a/web/bundles/sensiodistribution b/web/bundles/sensiodistribution
new file mode 120000
index 00000000..2886899e
--- /dev/null
+++ b/web/bundles/sensiodistribution
@@ -0,0 +1 @@
../../vendor/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle/Resources/public/ \ No newline at end of file